diff-grok 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/.eslintrc.json +45 -0
  2. package/.github/scripts/bump-js-api-version.sh +106 -0
  3. package/.github/scripts/check-output.sh +20 -0
  4. package/.github/scripts/iac-cfn-deploy.sh +90 -0
  5. package/.github/scripts/slack_api_request.sh +65 -0
  6. package/.github/scripts/test_package.sh +270 -0
  7. package/.github/workflows/libraries.yaml +305 -0
  8. package/LICENSE +21 -0
  9. package/README.MD +396 -0
  10. package/eslintrc.json +45 -0
  11. package/images/acid-prod.gif +0 -0
  12. package/index.js +6 -0
  13. package/index.js.map +1 -0
  14. package/index.ts +15 -0
  15. package/package.json +45 -0
  16. package/src/examples/basic-use.js +40 -0
  17. package/src/examples/basic-use.js.map +1 -0
  18. package/src/examples/basic-use.ts +44 -0
  19. package/src/examples/check-methods.js +45 -0
  20. package/src/examples/check-methods.js.map +1 -0
  21. package/src/examples/check-methods.ts +62 -0
  22. package/src/examples/corr-probs.js +130 -0
  23. package/src/examples/corr-probs.js.map +1 -0
  24. package/src/examples/corr-probs.ts +151 -0
  25. package/src/examples/cyclic-model.js +100 -0
  26. package/src/examples/cyclic-model.js.map +1 -0
  27. package/src/examples/cyclic-model.ts +110 -0
  28. package/src/examples/e5.js +30 -0
  29. package/src/examples/e5.js.map +1 -0
  30. package/src/examples/e5.ts +29 -0
  31. package/src/examples/hires.js +29 -0
  32. package/src/examples/hires.js.map +1 -0
  33. package/src/examples/hires.ts +29 -0
  34. package/src/examples/index.js +17 -0
  35. package/src/examples/index.js.map +1 -0
  36. package/src/examples/index.ts +18 -0
  37. package/src/examples/model-updates.js +112 -0
  38. package/src/examples/model-updates.js.map +1 -0
  39. package/src/examples/model-updates.ts +122 -0
  40. package/src/examples/orego.js +19 -0
  41. package/src/examples/orego.js.map +1 -0
  42. package/src/examples/orego.ts +19 -0
  43. package/src/examples/pipeline-use.js +87 -0
  44. package/src/examples/pipeline-use.js.map +1 -0
  45. package/src/examples/pipeline-use.ts +98 -0
  46. package/src/examples/pollution.js +110 -0
  47. package/src/examples/pollution.js.map +1 -0
  48. package/src/examples/pollution.ts +110 -0
  49. package/src/examples/robertson.js +14 -0
  50. package/src/examples/robertson.js.map +1 -0
  51. package/src/examples/robertson.ts +13 -0
  52. package/src/examples/scripting.js +31 -0
  53. package/src/examples/scripting.js.map +1 -0
  54. package/src/examples/scripting.ts +36 -0
  55. package/src/examples/vdpol.js +13 -0
  56. package/src/examples/vdpol.js.map +1 -0
  57. package/src/examples/vdpol.ts +12 -0
  58. package/src/pipeline/basic-pipeline-creator.js +21 -0
  59. package/src/pipeline/basic-pipeline-creator.js.map +1 -0
  60. package/src/pipeline/basic-pipeline-creator.ts +24 -0
  61. package/src/pipeline/constants.js +21 -0
  62. package/src/pipeline/constants.js.map +1 -0
  63. package/src/pipeline/constants.ts +21 -0
  64. package/src/pipeline/index.js +8 -0
  65. package/src/pipeline/index.js.map +1 -0
  66. package/src/pipeline/index.ts +7 -0
  67. package/src/pipeline/input.js +45 -0
  68. package/src/pipeline/input.js.map +1 -0
  69. package/src/pipeline/input.ts +55 -0
  70. package/src/pipeline/loops-pipeline-creator.js +107 -0
  71. package/src/pipeline/loops-pipeline-creator.js.map +1 -0
  72. package/src/pipeline/loops-pipeline-creator.ts +138 -0
  73. package/src/pipeline/output.js +146 -0
  74. package/src/pipeline/output.js.map +1 -0
  75. package/src/pipeline/output.ts +196 -0
  76. package/src/pipeline/pipeline-creator.js +10 -0
  77. package/src/pipeline/pipeline-creator.js.map +1 -0
  78. package/src/pipeline/pipeline-creator.ts +16 -0
  79. package/src/pipeline/pipeline.js +71 -0
  80. package/src/pipeline/pipeline.js.map +1 -0
  81. package/src/pipeline/pipeline.ts +104 -0
  82. package/src/pipeline/updates-pipeline-creator.js +98 -0
  83. package/src/pipeline/updates-pipeline-creator.js.map +1 -0
  84. package/src/pipeline/updates-pipeline-creator.ts +125 -0
  85. package/src/scripting-tools/constants.js +53 -0
  86. package/src/scripting-tools/constants.js.map +1 -0
  87. package/src/scripting-tools/constants.ts +51 -0
  88. package/src/scripting-tools/index.js +4 -0
  89. package/src/scripting-tools/index.js.map +1 -0
  90. package/src/scripting-tools/index.ts +7 -0
  91. package/src/scripting-tools/model-error.js +17 -0
  92. package/src/scripting-tools/model-error.js.map +1 -0
  93. package/src/scripting-tools/model-error.ts +19 -0
  94. package/src/scripting-tools/scripting-tools.js +1032 -0
  95. package/src/scripting-tools/scripting-tools.js.map +1 -0
  96. package/src/scripting-tools/scripting-tools.ts +1375 -0
  97. package/src/solver-tools/callbacks/callback-base.js +10 -0
  98. package/src/solver-tools/callbacks/callback-base.js.map +1 -0
  99. package/src/solver-tools/callbacks/callback-base.ts +8 -0
  100. package/src/solver-tools/callbacks/callback-tools.js +14 -0
  101. package/src/solver-tools/callbacks/callback-tools.js.map +1 -0
  102. package/src/solver-tools/callbacks/callback-tools.ts +20 -0
  103. package/src/solver-tools/callbacks/iter-checker-callback.js +16 -0
  104. package/src/solver-tools/callbacks/iter-checker-callback.js.map +1 -0
  105. package/src/solver-tools/callbacks/iter-checker-callback.ts +21 -0
  106. package/src/solver-tools/callbacks/time-checker-callback.js +17 -0
  107. package/src/solver-tools/callbacks/time-checker-callback.js.map +1 -0
  108. package/src/solver-tools/callbacks/time-checker-callback.ts +19 -0
  109. package/src/solver-tools/index.js +6 -0
  110. package/src/solver-tools/index.js.map +1 -0
  111. package/src/solver-tools/index.ts +6 -0
  112. package/src/solver-tools/lin-alg-tools.js +56 -0
  113. package/src/solver-tools/lin-alg-tools.js.map +1 -0
  114. package/src/solver-tools/lin-alg-tools.ts +75 -0
  115. package/src/solver-tools/mrt-method.js +210 -0
  116. package/src/solver-tools/mrt-method.js.map +1 -0
  117. package/src/solver-tools/mrt-method.ts +269 -0
  118. package/src/solver-tools/ros34prw-method.js +257 -0
  119. package/src/solver-tools/ros34prw-method.js.map +1 -0
  120. package/src/solver-tools/ros34prw-method.ts +335 -0
  121. package/src/solver-tools/ros3prw-method.js +233 -0
  122. package/src/solver-tools/ros3prw-method.js.map +1 -0
  123. package/src/solver-tools/ros3prw-method.ts +304 -0
  124. package/src/solver-tools/solver-defs.js +58 -0
  125. package/src/solver-tools/solver-defs.js.map +1 -0
  126. package/src/solver-tools/solver-defs.ts +100 -0
  127. package/src/worker-tools/index.js +3 -0
  128. package/src/worker-tools/index.js.map +1 -0
  129. package/src/worker-tools/index.ts +2 -0
  130. package/src/worker-tools/scripting.js +68 -0
  131. package/src/worker-tools/scripting.js.map +1 -0
  132. package/src/worker-tools/scripting.ts +95 -0
  133. package/src/worker-tools/solving.js +48 -0
  134. package/src/worker-tools/solving.js.map +1 -0
  135. package/src/worker-tools/solving.ts +60 -0
  136. package/tsconfig.json +71 -0
@@ -0,0 +1,335 @@
1
+ /* The ROS34PRw method implementation
2
+
3
+ References:
4
+ [1] https://doi.org/10.1016/j.cam.2015.03.010 */
5
+
6
+ import {ODEs, max, abs, SAFETY, PSHRNK, PSGROW, REDUCE_COEF, GROW_COEF,
7
+ ERR_CONTR, TINY, EPS, tDerivative, jacobian, ERROR_MSG} from './solver-defs';
8
+ import {Callback} from './callbacks/callback-base';
9
+ import {luDecomp, luSolve, solve1d2d} from './lin-alg-tools';
10
+
11
+ // The method specific constants (see Table 3 [1]):
12
+ const GAMMA = 0.435866521508459;
13
+
14
+ const GAMMA_21 = -1.3075995645253771;
15
+ const GAMMA_21_SCALED = GAMMA_21 / GAMMA;
16
+ const GAMMA_2 = GAMMA_21 + GAMMA;
17
+
18
+ const GAMMA_31 = -0.7098857586097217;
19
+ const GAMMA_31_SCALED = GAMMA_31 / GAMMA;
20
+ const GAMMA_32 = -0.55996735960277766;
21
+ const GAMMA_32_SCALED = GAMMA_32 / GAMMA;
22
+ const GAMMA_3 = GAMMA_31 + GAMMA_32 + GAMMA;
23
+
24
+ const GAMMA_41 = -0.15550856807552085;
25
+ const GAMMA_41_SCALED = GAMMA_41 / GAMMA;
26
+ const GAMMA_42 = -0.95388516575112225;
27
+ const GAMMA_42_SCALED = GAMMA_42 / GAMMA;
28
+ const GAMMA_43 = 0.67352721231818413;
29
+ const GAMMA_43_SCALED = GAMMA_43 / GAMMA;
30
+ const GAMMA_4 = GAMMA_41 + GAMMA_42 + GAMMA_43 + GAMMA;
31
+
32
+ const ALPHA_21 = 1.3075995645253771;
33
+ const ALPHA_2 = ALPHA_21;
34
+
35
+ const B_1 = 0.34449143192447917;
36
+ const B_2 = -0.45388516575112231;
37
+ const B_3 = 0.67352721231818413;
38
+ const B_4 = 0.435866521508459;
39
+
40
+ const B_HAT_1 = 0.5;
41
+ const B_HAT_2 = -0.25738812086522078;
42
+ const B_HAT_3 = 0.43542008724775044;
43
+ const B_HAT_4 = 0.32196803361747034;
44
+
45
+ const R_1 = B_1 - B_HAT_1;
46
+ const R_2 = B_2 - B_HAT_2;
47
+ const R_3 = B_3 - B_HAT_3;
48
+ const R_4 = B_4 - B_HAT_4;
49
+
50
+
51
+ /** Solve initial value problem using the ROS34PRw method [1]
52
+ * @param odes initial value problem for ordinary differential equations
53
+ * @param callback computations control callback
54
+ * @returns solution of the problem
55
+ */
56
+ export function ros34prw(odes: ODEs, callback?: Callback): Float64Array[] {
57
+ /** right-hand side of the IVP solved */
58
+ const f = odes.func;
59
+
60
+ // operating variables
61
+ const t0 = odes.arg.start;
62
+ const t1 = odes.arg.finish;
63
+ let h = odes.arg.step;
64
+ const hDataframe = h;
65
+ const tolerance = odes.tolerance;
66
+
67
+ /** number of solution dataframe rows */
68
+ const rowCount = Math.trunc((t1 - t0) / h) + 1;
69
+
70
+ /** dimension of the problem */
71
+ const dim = odes.initial.length;
72
+ const dimSquared = dim * dim;
73
+
74
+ /** independent variable values */
75
+ const tArr = new Float64Array(rowCount);
76
+
77
+ /** arrays of solution values */
78
+ const yArrs = Array<Float64Array>(dim);
79
+
80
+ for (let i = 0; i < dim; ++i)
81
+ yArrs[i] = new Float64Array(rowCount);
82
+
83
+ // method routine
84
+ let timeDataframe = t0 + hDataframe;
85
+ let t = t0;
86
+ let tPrev = t0;
87
+ let flag = true;
88
+ let index = 1;
89
+ let errmax = 0;
90
+ let hTemp = 0;
91
+ let tNew = 0;
92
+ let hNext = 0.0;
93
+
94
+ // 0 BUFFERS & TEMP STRUCTURES
95
+
96
+ /** identity matrix */
97
+ const I = new Float64Array(dim * dim);
98
+
99
+ // compute identity matrix
100
+ for (let i = 0; i < dim; ++i) {
101
+ for (let j = 0; j < dim; ++j)
102
+ I[j + i * dim] = (i === j) ? 1 : 0;
103
+ }
104
+
105
+ const y = new Float64Array(odes.initial);
106
+ const yPrev = new Float64Array(odes.initial);
107
+ const dydt = new Float64Array(dim);
108
+ const yScale = new Float64Array(dim);
109
+ const yTemp = new Float64Array(dim);
110
+ const yErr = new Float64Array(dim);
111
+
112
+ const W = new Float64Array(dimSquared);
113
+
114
+ const k1 = new Float64Array(dim);
115
+ const k2 = new Float64Array(dim);
116
+ const k3 = new Float64Array(dim);
117
+ const k4 = new Float64Array(dim);
118
+ const HT = new Float64Array(dim);
119
+
120
+ const f0Buf = new Float64Array(dim);
121
+ const f1Buf = new Float64Array(dim);
122
+
123
+ let hByGamma = 0;
124
+ const fBuf = new Float64Array(dim);
125
+ const kBuf = new Float64Array(dim);
126
+
127
+ const L = new Float64Array(dimSquared);
128
+ const U = new Float64Array(dimSquared);
129
+ const luBuf = new Float64Array(dim);
130
+ const bBuf = new Float64Array(dim);
131
+ const toUseLU = dim > 2;
132
+
133
+ // 1. SOLUTION AT THE POINT t0
134
+ tArr[0] = t0;
135
+ for (let i = 0; i < dim; ++i)
136
+ yArrs[i][0] = y[i];
137
+
138
+ // 2. COMPUTE NUMERICAL SOLUTION FOR THE POINTS FROM THE INTERVAL (t0, t1)
139
+ while (flag) {
140
+ // compute derivative
141
+ f(t, y, dydt);
142
+
143
+ // check whether to go on computations
144
+ if (callback)
145
+ callback.onIterationStart();
146
+
147
+ // compute scale vector
148
+ for (let i = 0; i < dim; ++i)
149
+ yScale[i] = abs(y[i]) + h * abs(dydt[i]) + TINY;
150
+
151
+ // check end point
152
+ if (t + h > t1) {
153
+ h = t1 - t;
154
+ flag = false;
155
+ }
156
+
157
+ // call of adaptive step the ROS3Pw [1] method
158
+ // computation of solution (y), time (t) and next step (hNext)
159
+ while (true) {
160
+ hByGamma = h * GAMMA;
161
+
162
+ // one stage of the ROS3Pw method
163
+
164
+ // 1) Jacobian & dF/dt matrices
165
+ jacobian(t, y, f, EPS, f0Buf, f1Buf, W);
166
+ tDerivative(t, y, f, EPS, f0Buf, f1Buf, HT);
167
+
168
+ // 2) W & LU-decomposition
169
+ for (let i = 0; i < dimSquared; ++i)
170
+ W[i] = I[i] - hByGamma * W[i];
171
+
172
+ if (toUseLU)
173
+ luDecomp(W, L, U, dim);
174
+
175
+ // 3) Scale dF/dt: HT = j * T
176
+ for (let i = 0; i < dim; ++i)
177
+ HT[i] *= h;
178
+
179
+ // 4) F1 = F(t, y) <-- Fbuf
180
+ f(t, y, fBuf);
181
+
182
+ // 5) k1 = W_inv * (F1 + gamma * HT)
183
+ for (let i = 0; i < dim; ++i)
184
+ bBuf[i] = fBuf[i] + GAMMA * HT[i];
185
+
186
+ if (toUseLU)
187
+ luSolve(L, U, bBuf, luBuf, k1, dim);
188
+ else
189
+ solve1d2d(W, bBuf, k1);
190
+
191
+ // 6) F2 = F(t + alpha2 * h, y + alpha21 * k1) <-- Fbuf
192
+ for (let i = 0; i < dim; ++i)
193
+ kBuf[i] = y[i] + ALPHA_21 * h * k1[i];
194
+
195
+ f(t + ALPHA_2 * h, kBuf, fBuf);
196
+
197
+ // 7) kBuf = gamma21 / gamma * k1
198
+ for (let i = 0; i < dim; ++i)
199
+ kBuf[i] = GAMMA_21_SCALED * k1[i];
200
+
201
+ // 8) k2 = W_inv * [Fbuf + kBuf + gamma2 * HT] - kBuf
202
+ for (let i = 0; i < dim; ++i)
203
+ bBuf[i] = fBuf[i] + kBuf[i] + GAMMA_2 * HT[i];
204
+
205
+ if (toUseLU)
206
+ luSolve(L, U, bBuf, luBuf, k2, dim);
207
+ else
208
+ solve1d2d(W, bBuf, k2);
209
+
210
+ for (let i = 0; i < dim; ++i)
211
+ k2[i] -= kBuf[i];
212
+
213
+ // 9) F3 = F(t + alpha3 * h, y + h * (alpha31 * k1 + alpha32 * k2)) <-- Fbuf
214
+ for (let i = 0; i < dim; ++i)
215
+ kBuf[i] = y[i] + h * 0.5 * (k1[i] + k2[i]);
216
+
217
+ f(t + h, kBuf, fBuf);
218
+
219
+ // 10) kBuf = gamma31 / gamma * k1 + gamma32 / gamma * k2
220
+ for (let i = 0; i < dim; ++i)
221
+ kBuf[i] = GAMMA_31_SCALED * k1[i] + GAMMA_32_SCALED * k2[i];
222
+
223
+ // 11) k3 = W_inv * (F3 + kBuf + gamma3 * HT) - kBuf
224
+ for (let i = 0; i < dim; ++i)
225
+ bBuf[i] = fBuf[i] + kBuf[i] + GAMMA_3 * HT[i];
226
+
227
+ if (toUseLU)
228
+ luSolve(L, U, bBuf, luBuf, k3, dim);
229
+ else
230
+ solve1d2d(W, bBuf, k3);
231
+
232
+ for (let i = 0; i < dim; ++i)
233
+ k3[i] -= kBuf[i];
234
+
235
+ // 12) F4 = F(t + alpha4 * h, y + h * (alpha41 * k1 + alpha42 * k2 + alpha43 * k3)) <-- Fbuf
236
+ for (let i = 0; i < dim; ++i)
237
+ kBuf[i] = y[i] + h * 0.5 * (k1[i] + k2[i]);
238
+
239
+ f(t + h, kBuf, fBuf);
240
+
241
+ // 13) kBuf = gamma41 / gamma * k1 + gamma42 / gamma * k2 + gamma43 / gamma * k3
242
+ for (let i = 0; i < dim; ++i)
243
+ kBuf[i] = GAMMA_41_SCALED * k1[i] + GAMMA_42_SCALED * k2[i] + GAMMA_43_SCALED * k3[i];
244
+
245
+ // 14) k4 = W_inv * (F4 + kBuf + gamma4 * HT) - kBuf
246
+ for (let i = 0; i < dim; ++i)
247
+ bBuf[i] = fBuf[i] + kBuf[i] + GAMMA_4 * HT[i];
248
+
249
+ if (toUseLU)
250
+ luSolve(L, U, bBuf, luBuf, k4, dim);
251
+ else
252
+ solve1d2d(W, bBuf, k4);
253
+
254
+ for (let i = 0; i < dim; ++i)
255
+ k4[i] -= kBuf[i];
256
+
257
+ // 15) yNext = y + h * (b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4) <-- yTemp
258
+ for (let i = 0; i < dim; ++i)
259
+ yTemp[i] = y[i] + h * (B_1 * k1[i] + B_2 * k2[i] + B_3 * k3[i] + B_4 * k4[i]);
260
+
261
+ // 16) yErr = h * (r1 * k1 + r2 * k2 + r3 * k3 + r4 * k4)
262
+ for (let i = 0; i < dim; ++i)
263
+ yErr[i] = h * (R_1 * k1[i] + R_2 * k2[i] + R_3 * k3[i] + R_4 * k4[i]);
264
+
265
+ // estimating error
266
+ errmax = 0;
267
+ for (let i = 0; i < dim; ++i)
268
+ errmax = max(errmax, abs(yErr[i] / yScale[i]));
269
+ errmax /= tolerance;
270
+
271
+ // processing the error obtained
272
+ if (errmax > 1) {
273
+ hTemp = SAFETY * h * errmax**PSHRNK;
274
+ h = max(hTemp, REDUCE_COEF * h);
275
+ tNew = t + h;
276
+ if (tNew == t)
277
+ throw new Error(ERROR_MSG.ROS34PRW_FAILS);
278
+ } else {
279
+ if (errmax > ERR_CONTR)
280
+ hNext = SAFETY * h * errmax**PSGROW;
281
+ else
282
+ hNext = GROW_COEF * h;
283
+ t = t + h;
284
+
285
+ for (let i = 0; i < dim; ++i)
286
+ y[i] = yTemp[i];
287
+
288
+ break;
289
+ }
290
+ } // while (true)
291
+
292
+ // compute lineraly interpolated results and store them in dataframe
293
+ while (timeDataframe < t) {
294
+ const cLeft = (t - timeDataframe) / (t - tPrev);
295
+ const cRight = 1.0 - cLeft;
296
+
297
+ tArr[index] = timeDataframe;
298
+
299
+ for (let j = 0; j < dim; ++j)
300
+ yArrs[j][index] = cRight * y[j] + cLeft * yPrev[j];
301
+
302
+ timeDataframe += hDataframe;
303
+ ++index;
304
+ }
305
+
306
+ h = hNext;
307
+ tPrev = t;
308
+
309
+ for (let i = 0; i < dim; ++i)
310
+ yPrev[i] = y[i];
311
+ } // while (flag)
312
+
313
+ // perform final callback actions
314
+ if (callback)
315
+ callback.onComputationsCompleted();
316
+
317
+ // 3. solution at the point t1
318
+ tArr[rowCount - 1] = t1;
319
+
320
+ for (let i = 0; i < dim; ++i)
321
+ yArrs[i][rowCount - 1] = y[i];
322
+
323
+ // 4. prepare output
324
+ const solution = Array<Float64Array>(dim);
325
+
326
+ // independent variable
327
+ solution[0] = tArr;
328
+
329
+ // functions
330
+ for (let i = 0; i < dim; ++i)
331
+ solution[i + 1] = yArrs[i];
332
+
333
+ return solution;
334
+ //return [tArr].concat(yArrs);
335
+ } // ros34prw
@@ -0,0 +1,233 @@
1
+ /* The ROS3PRw method implementation
2
+
3
+ References:
4
+ [1] https://doi.org/10.1016/j.cam.2015.03.010 */
5
+ import { max, abs, SAFETY, PSHRNK, PSGROW, REDUCE_COEF, GROW_COEF, ERR_CONTR, TINY, EPS, tDerivative, jacobian, ERROR_MSG } from './solver-defs';
6
+ import { luDecomp, luSolve, solve1d2d } from './lin-alg-tools';
7
+ // The method specific constants (see Table 2 [1])
8
+ const GAMMA = 0.78867513459481287;
9
+ const GAMMA_21 = -2.3660254037844388;
10
+ const GAMMA_21_SCALED = GAMMA_21 / GAMMA;
11
+ const GAMMA_2 = GAMMA_21 + GAMMA;
12
+ const GAMMA_31 = -0.86791218280355165;
13
+ const GAMMA_31_SCALED = GAMMA_31 / GAMMA;
14
+ const GAMMA_32 = -0.87306695894642317;
15
+ const GAMMA_32_SCALED = GAMMA_32 / GAMMA;
16
+ const GAMMA_3 = GAMMA_31 + GAMMA_32 + GAMMA;
17
+ const ALPHA_21 = 2.3660254037844388;
18
+ const ALPHA_2 = ALPHA_21;
19
+ const ALPHA_31 = 0.5;
20
+ const ALPHA_32 = 0.76794919243112270;
21
+ const ALPHA_3 = ALPHA_31 + ALPHA_32;
22
+ const B_1 = 0.50544867840851759;
23
+ const B_2 = -0.11571687603637559;
24
+ const B_3 = 0.610268197627858;
25
+ const B_HAT_1 = 0.28973180237214197;
26
+ const B_HAT_2 = 0.10000000000000001;
27
+ const B_HAT_3 = 0.610268197627858;
28
+ const R_1 = B_1 - B_HAT_1;
29
+ const R_2 = B_2 - B_HAT_2;
30
+ const R_3 = B_3 - B_HAT_3;
31
+ /** Solve initial value problem using the ROS3Pw method [1]
32
+ * @param odes initial value problem for ordinary differential equations
33
+ * @param callback computations control callback
34
+ * @returns solution of the problem
35
+ */
36
+ export function ros3prw(odes, callback) {
37
+ /** right-hand side of the IVP solved */
38
+ const f = odes.func;
39
+ // operating variables
40
+ const t0 = odes.arg.start;
41
+ const t1 = odes.arg.finish;
42
+ let h = odes.arg.step;
43
+ const hDataframe = h;
44
+ const tolerance = odes.tolerance;
45
+ /** number of solution dataframe rows */
46
+ const rowCount = Math.trunc((t1 - t0) / h) + 1;
47
+ /** dimension of the problem */
48
+ const dim = odes.initial.length;
49
+ const dimSquared = dim * dim;
50
+ /** independent variable values */
51
+ const tArr = new Float64Array(rowCount);
52
+ /** arrays of solution values */
53
+ const yArrs = Array(dim);
54
+ for (let i = 0; i < dim; ++i)
55
+ yArrs[i] = new Float64Array(rowCount);
56
+ // method routine
57
+ let timeDataframe = t0 + hDataframe;
58
+ let t = t0;
59
+ let tPrev = t0;
60
+ let flag = true;
61
+ let index = 1;
62
+ let errmax = 0;
63
+ let hTemp = 0;
64
+ let tNew = 0;
65
+ let hNext = 0.0;
66
+ // 0 BUFFERS & TEMP STRUCTURES
67
+ /** identity matrix */
68
+ const I = new Float64Array(dim * dim);
69
+ // compute identity matrix
70
+ for (let i = 0; i < dim; ++i) {
71
+ for (let j = 0; j < dim; ++j)
72
+ I[j + i * dim] = (i === j) ? 1 : 0;
73
+ }
74
+ const y = new Float64Array(odes.initial);
75
+ const yPrev = new Float64Array(odes.initial);
76
+ const dydt = new Float64Array(dim);
77
+ const yScale = new Float64Array(dim);
78
+ const yTemp = new Float64Array(dim);
79
+ const yErr = new Float64Array(dim);
80
+ const W = new Float64Array(dimSquared);
81
+ const k1 = new Float64Array(dim);
82
+ const k2 = new Float64Array(dim);
83
+ const k3 = new Float64Array(dim);
84
+ const HT = new Float64Array(dim);
85
+ const f0Buf = new Float64Array(dim);
86
+ const f1Buf = new Float64Array(dim);
87
+ let hByGamma = 0;
88
+ const fBuf = new Float64Array(dim);
89
+ const kBuf = new Float64Array(dim);
90
+ const L = new Float64Array(dimSquared);
91
+ const U = new Float64Array(dimSquared);
92
+ const luBuf = new Float64Array(dim);
93
+ const bBuf = new Float64Array(dim);
94
+ const toUseLU = dim > 2;
95
+ // 1. SOLUTION AT THE POINT t0
96
+ tArr[0] = t0;
97
+ for (let i = 0; i < dim; ++i)
98
+ yArrs[i][0] = y[i];
99
+ // 2. COMPUTE NUMERICAL SOLUTION FOR THE POINTS FROM THE INTERVAL (t0, t1)
100
+ while (flag) {
101
+ // compute derivative
102
+ f(t, y, dydt);
103
+ // check whether to go on computations
104
+ if (callback)
105
+ callback.onIterationStart();
106
+ // compute scale vector
107
+ for (let i = 0; i < dim; ++i)
108
+ yScale[i] = abs(y[i]) + h * abs(dydt[i]) + TINY;
109
+ // check end point
110
+ if (t + h > t1) {
111
+ h = t1 - t;
112
+ flag = false;
113
+ }
114
+ // call of adaptive step the ROS3Pw [1] method
115
+ // computation of solution (y), time (t) and next step (hNext)
116
+ while (true) {
117
+ hByGamma = h * GAMMA;
118
+ // one stage of the ROS3Pw method
119
+ // 1) Jacobian & dF/dt matrices
120
+ jacobian(t, y, f, EPS, f0Buf, f1Buf, W);
121
+ tDerivative(t, y, f, EPS, f0Buf, f1Buf, HT);
122
+ // 2) W & LU-decomposition
123
+ for (let i = 0; i < dimSquared; ++i)
124
+ W[i] = I[i] - hByGamma * W[i];
125
+ if (toUseLU)
126
+ luDecomp(W, L, U, dim);
127
+ // 3) Scale dF/dt: HT = j * T
128
+ for (let i = 0; i < dim; ++i)
129
+ HT[i] *= h;
130
+ // 4) F1 = F(t, y) <-- Fbuf
131
+ f(t, y, fBuf);
132
+ // 5) k1 = W_inv * (F1 + gamma * HT)
133
+ for (let i = 0; i < dim; ++i)
134
+ bBuf[i] = fBuf[i] + GAMMA * HT[i];
135
+ if (toUseLU)
136
+ luSolve(L, U, bBuf, luBuf, k1, dim);
137
+ else
138
+ solve1d2d(W, bBuf, k1);
139
+ // 6) F2 = F(t + alpha2 * h, y + alpha21 * k1) <-- Fbuf
140
+ for (let i = 0; i < dim; ++i)
141
+ kBuf[i] = y[i] + ALPHA_21 * h * k1[i];
142
+ f(t + ALPHA_2 * h, kBuf, fBuf);
143
+ // 7) kBuf = gamma21 / gamma * k1
144
+ for (let i = 0; i < dim; ++i)
145
+ kBuf[i] = GAMMA_21_SCALED * k1[i];
146
+ // 8) k2 = W_inv * [Fbuf + kBuf + gamma2 * HT] - kBuf
147
+ for (let i = 0; i < dim; ++i)
148
+ bBuf[i] = fBuf[i] + kBuf[i] + GAMMA_2 * HT[i];
149
+ if (toUseLU)
150
+ luSolve(L, U, bBuf, luBuf, k2, dim);
151
+ else
152
+ solve1d2d(W, bBuf, k2);
153
+ for (let i = 0; i < dim; ++i)
154
+ k2[i] -= kBuf[i];
155
+ // 9) F3 = F(t + alpha3 * h, y + h * (alpha31 * k1 + alpha32 * k2)) <-- Fbuf
156
+ for (let i = 0; i < dim; ++i)
157
+ kBuf[i] = y[i] + h * (ALPHA_31 * k1[i] + ALPHA_32 * k2[i]);
158
+ f(t + ALPHA_3 * h, kBuf, fBuf);
159
+ // 10) kBuf = gamma31 / gamma * k1 + gamma32 / gamma * k2
160
+ for (let i = 0; i < dim; ++i)
161
+ kBuf[i] = GAMMA_31_SCALED * k1[i] + GAMMA_32_SCALED * k2[i];
162
+ // 11) k3 = W_inv * (F3 + kBuf + gamma3 * HT) - kBuf
163
+ for (let i = 0; i < dim; ++i)
164
+ bBuf[i] = fBuf[i] + kBuf[i] + GAMMA_3 * HT[i];
165
+ if (toUseLU)
166
+ luSolve(L, U, bBuf, luBuf, k3, dim);
167
+ else
168
+ solve1d2d(W, bBuf, k3);
169
+ for (let i = 0; i < dim; ++i)
170
+ k3[i] -= kBuf[i];
171
+ // 12) yNext = y + h * (b1 * k1 + b2 * k2 + b3 * k3) <-- yTemp
172
+ for (let i = 0; i < dim; ++i)
173
+ yTemp[i] = y[i] + h * (B_1 * k1[i] + B_2 * k2[i] + B_3 * k3[i]);
174
+ // 13) yErr = h * (r1 * k1 + r2 * k2 + r3 * k3)
175
+ for (let i = 0; i < dim; ++i)
176
+ yErr[i] = h * (R_1 * k1[i] + R_2 * k2[i] + R_3 * k3[i]);
177
+ // estimating error
178
+ errmax = 0;
179
+ for (let i = 0; i < dim; ++i)
180
+ errmax = max(errmax, abs(yErr[i] / yScale[i]));
181
+ errmax /= tolerance;
182
+ // processing the error obtained
183
+ if (errmax > 1) {
184
+ hTemp = SAFETY * h * Math.pow(errmax, PSHRNK);
185
+ h = max(hTemp, REDUCE_COEF * h);
186
+ tNew = t + h;
187
+ if (tNew == t)
188
+ throw new Error(ERROR_MSG.ROS3PRW_FAILS);
189
+ }
190
+ else {
191
+ if (errmax > ERR_CONTR)
192
+ hNext = SAFETY * h * Math.pow(errmax, PSGROW);
193
+ else
194
+ hNext = GROW_COEF * h;
195
+ t = t + h;
196
+ for (let i = 0; i < dim; ++i)
197
+ y[i] = yTemp[i];
198
+ break;
199
+ }
200
+ } // while (true)
201
+ // compute lineraly interpolated results and store them in dataframe
202
+ while (timeDataframe < t) {
203
+ const cLeft = (t - timeDataframe) / (t - tPrev);
204
+ const cRight = 1.0 - cLeft;
205
+ tArr[index] = timeDataframe;
206
+ for (let j = 0; j < dim; ++j)
207
+ yArrs[j][index] = cRight * y[j] + cLeft * yPrev[j];
208
+ timeDataframe += hDataframe;
209
+ ++index;
210
+ }
211
+ h = hNext;
212
+ tPrev = t;
213
+ for (let i = 0; i < dim; ++i)
214
+ yPrev[i] = y[i];
215
+ } // while (flag)
216
+ // perform final callback actions
217
+ if (callback)
218
+ callback.onComputationsCompleted();
219
+ // 3. solution at the point t1
220
+ tArr[rowCount - 1] = t1;
221
+ for (let i = 0; i < dim; ++i)
222
+ yArrs[i][rowCount - 1] = y[i];
223
+ // 4. prepare output
224
+ const solution = Array(dim);
225
+ // independent variable
226
+ solution[0] = tArr;
227
+ // functions
228
+ for (let i = 0; i < dim; ++i)
229
+ solution[i + 1] = yArrs[i];
230
+ return solution;
231
+ //return [tArr].concat(yArrs);
232
+ } // ros3prw
233
+ //# sourceMappingURL=ros3prw-method.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ros3prw-method.js","sourceRoot":"","sources":["ros3prw-method.ts"],"names":[],"mappings":"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"}