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,269 @@
1
+ /* The modified Rosenbrock triple method (MTR).
2
+
3
+ References:
4
+ [1] https://doi.org/10.1137/S1064827594276424
5
+ [2] https://doi.org/10.1016/S0898-1221(00)00175-9
6
+ */
7
+
8
+ import {ODEs, max, abs, SAFETY, PSHRNK, PSGROW, REDUCE_COEF, GROW_COEF,
9
+ ERR_CONTR, TINY, EPS, tDerivative, jacobian, ERROR_MSG} from './solver-defs';
10
+ import {Callback} from './callbacks/callback-base';
11
+ import {luDecomp, luSolve, solve1d2d} from './lin-alg-tools';
12
+
13
+ // Quantities used in Rosenbrock method (see [1], [2] for more details)
14
+ const D = 1.0 - Math.sqrt(2.0) / 2.0;
15
+ const E32 = 6.0 + Math.sqrt(2.0);
16
+
17
+ /** Solve initial value problem the modified Rosenbrock triple (MRT) method [1, 2]
18
+ * @param odes initial value problem for ordinary differential equations
19
+ * @param callback computations control callback
20
+ * @returns solution of the problem
21
+ */
22
+ export function mrt(odes: ODEs, callback?: Callback): Float64Array[] {
23
+ /** right-hand side of the IVP solved */
24
+ const f = odes.func;
25
+
26
+ // operating variables
27
+ const t0 = odes.arg.start;
28
+ const t1 = odes.arg.finish;
29
+ let h = odes.arg.step;
30
+ const hDataframe = h;
31
+ const tolerance = odes.tolerance;
32
+
33
+ /** number of solution dataframe rows */
34
+ const rowCount = Math.trunc((t1 - t0) / h) + 1;
35
+
36
+ /** dimension of the problem */
37
+ const dim = odes.initial.length;
38
+ const dimSquared = dim * dim;
39
+
40
+ /** independent variable values */
41
+ const tArr = new Float64Array(rowCount);
42
+
43
+ /** arrays of solution values */
44
+ const yArrs = Array<Float64Array>(dim);
45
+
46
+ for (let i = 0; i < dim; ++i)
47
+ yArrs[i] = new Float64Array(rowCount);
48
+
49
+ // method routine
50
+ let timeDataframe = t0 + hDataframe;
51
+ let t = t0;
52
+ let tPrev = t0;
53
+ let hNext = 0.0;
54
+ let flag = true;
55
+ let index = 1;
56
+ let errmax = 0;
57
+ let hTemp = 0;
58
+ let tNew = 0;
59
+
60
+ // 0 BUFFERS & TEMP STRUCTURES
61
+
62
+ /** identity matrix */
63
+ const I = new Float64Array(dim * dim);
64
+
65
+ // compute identity matrix
66
+ for (let i = 0; i < dim; ++i) {
67
+ for (let j = 0; j < dim; ++j)
68
+ I[j + i * dim] = (i === j) ? 1 : 0;
69
+ }
70
+
71
+ const y = new Float64Array(odes.initial);
72
+ const yPrev = new Float64Array(odes.initial);
73
+ const dydt = new Float64Array(dim);
74
+ const yScale = new Float64Array(dim);
75
+ const yTemp = new Float64Array(dim);
76
+ const yErr = new Float64Array(dim);
77
+
78
+ const W = new Float64Array(dimSquared);
79
+
80
+ const f0 = new Float64Array(dim);
81
+ const k1 = new Float64Array(dim);
82
+ const f1 = new Float64Array(dim);
83
+ const k2 = new Float64Array(dim);
84
+ const f2 = new Float64Array(dim);
85
+ const k3 = new Float64Array(dim);
86
+ const yDer = new Float64Array(dim);
87
+ const hdT = new Float64Array(dim);
88
+
89
+ const f0Buf = new Float64Array(dim);
90
+ const f1Buf = new Float64Array(dim);
91
+ let hd = 0;
92
+ let hDivNum = 0;
93
+
94
+ const L = new Float64Array(dimSquared);
95
+ const U = new Float64Array(dimSquared);
96
+ const luBuf = new Float64Array(dim);
97
+ const toUseLU = dim > 2;
98
+
99
+ // 1. SOLUTION AT THE POINT t0
100
+ tArr[0] = t0;
101
+ for (let i = 0; i < dim; ++i)
102
+ yArrs[i][0] = y[i];
103
+
104
+ // 2. COMPUTE NUMERICAL SOLUTION FOR THE POINTS FROM THE INTERVAL (t0, t1)
105
+ while (flag) {
106
+ // compute derivative
107
+ f(t, y, dydt);
108
+
109
+ // check whether to go on computations
110
+ if (callback)
111
+ callback.onIterationStart();
112
+
113
+ // compute scale vector
114
+ for (let i = 0; i < dim; ++i)
115
+ yScale[i] = abs(y[i]) + h * abs(dydt[i]) + TINY;
116
+
117
+ // check end point
118
+ if (t + h > t1) {
119
+ h = t1 - t;
120
+ flag = false;
121
+ }
122
+
123
+ // call of adaptive step modified Rosenbrok triple method
124
+ // computation of solution (y), time (t) and next step (hNext)
125
+ while (true) {
126
+ // one stage of the modified Rosenbrok triple approach
127
+ // hdT = h * d * T(t, y, EPS);
128
+ tDerivative(t, y, f, EPS, f0Buf, f1Buf, hdT);
129
+ hd = h * D;
130
+ for (let i = 0; i < dim; ++i)
131
+ hdT[i] *= hd;
132
+
133
+ // The main computations
134
+
135
+ // f0 = f(t, y);
136
+ f(t, y, f0);
137
+
138
+ // W = I - h * d * J(t, y, EPS);
139
+ jacobian(t, y, f, EPS, f0Buf, f1Buf, W);
140
+ for (let i = 0; i < dimSquared; ++i)
141
+ W[i] = I[i] - hd * W[i];
142
+
143
+ // compute LU-decomposition
144
+ if (toUseLU)
145
+ luDecomp(W, L, U, dim);
146
+
147
+ // compute k1: solve the system W * k1 = f0 + hdT
148
+ for (let i = 0; i < dim; ++i)
149
+ f0Buf[i] = f0[i] + hdT[i];
150
+
151
+ if (toUseLU)
152
+ luSolve(L, U, f0Buf, luBuf, k1, dim);
153
+ else
154
+ solve1d2d(W, f0Buf, k1);
155
+
156
+ hDivNum = 0.5 * h;
157
+
158
+ // yDer = y + 0.5 * h * k1;
159
+ for (let i = 0; i < dim; ++i)
160
+ yDer[i] = y[i] + hDivNum * k1[i];
161
+
162
+ // f1 = f(t + 0.5 * h, yDer);
163
+ f(t + hDivNum, yDer, f1);
164
+
165
+ // compute k2: solve the system W * (k2 - k1) = f1 - k1
166
+ for (let i = 0; i < dim; ++i)
167
+ f1Buf[i] = f1[i] - k1[i];
168
+
169
+ if (toUseLU)
170
+ luSolve(L, U, f1Buf, luBuf, k2, dim);
171
+ else
172
+ solve1d2d(W, f1Buf, k2);
173
+
174
+ for (let i = 0; i < dim; ++i)
175
+ k2[i] = k2[i] + k1[i];
176
+
177
+ // yOut = y + k2 * h; <--> yTemp
178
+ for (let i = 0; i < dim; ++i)
179
+ yTemp[i] = y[i] + h * k2[i];
180
+
181
+ // f2 = f(t + h, yOut);
182
+ f(t + h, yTemp, f2);
183
+
184
+ // compute k3: solve the system W * k3 = f2 - e32 * (k2 - f1) - 2.0 * (k1 - f0) + hdT
185
+ for (let i = 0; i < dim; ++i)
186
+ f1Buf[i] = f2[i] - E32 * (k2[i] - f1[i]) - 2.0 * (k1[i] - f0[i]) + hdT[i];
187
+
188
+ if (toUseLU)
189
+ luSolve(L, U, f1Buf, luBuf, k3, dim);
190
+ else
191
+ solve1d2d(W, f1Buf, k3);
192
+
193
+ // yErr = (k1 - 2.0 * k2 + k3) * h / 6;
194
+ hDivNum = h / 6;
195
+
196
+ for (let i = 0; i < dim; ++i)
197
+ yErr[i] = (k1[i] - 2.0 * k2[i] + k3[i]) * hDivNum;
198
+
199
+ // estimating error
200
+ errmax = 0;
201
+ for (let i = 0; i < dim; ++i)
202
+ errmax = max(errmax, abs(yErr[i] / yScale[i]));
203
+ errmax /= tolerance;
204
+
205
+ // processing the error obtained
206
+ if (errmax > 1) {
207
+ hTemp = SAFETY * h * errmax**PSHRNK;
208
+ h = max(hTemp, REDUCE_COEF * h);
209
+ tNew = t + h;
210
+ if (tNew == t)
211
+ throw new Error(ERROR_MSG.MRT_FAILS);
212
+ } else {
213
+ if (errmax > ERR_CONTR)
214
+ hNext = SAFETY * h * errmax**PSGROW;
215
+ else
216
+ hNext = GROW_COEF * h;
217
+ t = t + h;
218
+
219
+ for (let i = 0; i < dim; ++i)
220
+ y[i] = yTemp[i];
221
+
222
+ break;
223
+ }
224
+ } // while (true)
225
+
226
+ // compute lineraly interpolated results and store them in dataframe
227
+ while (timeDataframe < t) {
228
+ const cLeft = (t - timeDataframe) / (t - tPrev);
229
+ const cRight = 1.0 - cLeft;
230
+
231
+ tArr[index] = timeDataframe;
232
+
233
+ for (let j = 0; j < dim; ++j)
234
+ yArrs[j][index] = cRight * y[j] + cLeft * yPrev[j];
235
+
236
+ timeDataframe += hDataframe;
237
+ ++index;
238
+ }
239
+
240
+ h = hNext;
241
+ tPrev = t;
242
+
243
+ for (let i = 0; i < dim; ++i)
244
+ yPrev[i] = y[i];
245
+ } // while (flag)
246
+
247
+ // perform final callback actions
248
+ if (callback)
249
+ callback.onComputationsCompleted();
250
+
251
+ // 3. solution at the point t1
252
+ tArr[rowCount - 1] = t1;
253
+
254
+ for (let i = 0; i < dim; ++i)
255
+ yArrs[i][rowCount - 1] = y[i];
256
+
257
+ // 4. prepare output
258
+ const solution = Array<Float64Array>(dim);
259
+
260
+ // independent variable
261
+ solution[0] = tArr;
262
+
263
+ // functions
264
+ for (let i = 0; i < dim; ++i)
265
+ solution[i + 1] = yArrs[i];
266
+
267
+ return solution;
268
+ //return [tArr].concat(yArrs);
269
+ } // MTR
@@ -0,0 +1,257 @@
1
+ /* The ROS34PRw 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 3 [1]):
8
+ const GAMMA = 0.435866521508459;
9
+ const GAMMA_21 = -1.3075995645253771;
10
+ const GAMMA_21_SCALED = GAMMA_21 / GAMMA;
11
+ const GAMMA_2 = GAMMA_21 + GAMMA;
12
+ const GAMMA_31 = -0.7098857586097217;
13
+ const GAMMA_31_SCALED = GAMMA_31 / GAMMA;
14
+ const GAMMA_32 = -0.55996735960277766;
15
+ const GAMMA_32_SCALED = GAMMA_32 / GAMMA;
16
+ const GAMMA_3 = GAMMA_31 + GAMMA_32 + GAMMA;
17
+ const GAMMA_41 = -0.15550856807552085;
18
+ const GAMMA_41_SCALED = GAMMA_41 / GAMMA;
19
+ const GAMMA_42 = -0.95388516575112225;
20
+ const GAMMA_42_SCALED = GAMMA_42 / GAMMA;
21
+ const GAMMA_43 = 0.67352721231818413;
22
+ const GAMMA_43_SCALED = GAMMA_43 / GAMMA;
23
+ const GAMMA_4 = GAMMA_41 + GAMMA_42 + GAMMA_43 + GAMMA;
24
+ const ALPHA_21 = 1.3075995645253771;
25
+ const ALPHA_2 = ALPHA_21;
26
+ const B_1 = 0.34449143192447917;
27
+ const B_2 = -0.45388516575112231;
28
+ const B_3 = 0.67352721231818413;
29
+ const B_4 = 0.435866521508459;
30
+ const B_HAT_1 = 0.5;
31
+ const B_HAT_2 = -0.25738812086522078;
32
+ const B_HAT_3 = 0.43542008724775044;
33
+ const B_HAT_4 = 0.32196803361747034;
34
+ const R_1 = B_1 - B_HAT_1;
35
+ const R_2 = B_2 - B_HAT_2;
36
+ const R_3 = B_3 - B_HAT_3;
37
+ const R_4 = B_4 - B_HAT_4;
38
+ /** Solve initial value problem using the ROS34PRw method [1]
39
+ * @param odes initial value problem for ordinary differential equations
40
+ * @param callback computations control callback
41
+ * @returns solution of the problem
42
+ */
43
+ export function ros34prw(odes, callback) {
44
+ /** right-hand side of the IVP solved */
45
+ const f = odes.func;
46
+ // operating variables
47
+ const t0 = odes.arg.start;
48
+ const t1 = odes.arg.finish;
49
+ let h = odes.arg.step;
50
+ const hDataframe = h;
51
+ const tolerance = odes.tolerance;
52
+ /** number of solution dataframe rows */
53
+ const rowCount = Math.trunc((t1 - t0) / h) + 1;
54
+ /** dimension of the problem */
55
+ const dim = odes.initial.length;
56
+ const dimSquared = dim * dim;
57
+ /** independent variable values */
58
+ const tArr = new Float64Array(rowCount);
59
+ /** arrays of solution values */
60
+ const yArrs = Array(dim);
61
+ for (let i = 0; i < dim; ++i)
62
+ yArrs[i] = new Float64Array(rowCount);
63
+ // method routine
64
+ let timeDataframe = t0 + hDataframe;
65
+ let t = t0;
66
+ let tPrev = t0;
67
+ let flag = true;
68
+ let index = 1;
69
+ let errmax = 0;
70
+ let hTemp = 0;
71
+ let tNew = 0;
72
+ let hNext = 0.0;
73
+ // 0 BUFFERS & TEMP STRUCTURES
74
+ /** identity matrix */
75
+ const I = new Float64Array(dim * dim);
76
+ // compute identity matrix
77
+ for (let i = 0; i < dim; ++i) {
78
+ for (let j = 0; j < dim; ++j)
79
+ I[j + i * dim] = (i === j) ? 1 : 0;
80
+ }
81
+ const y = new Float64Array(odes.initial);
82
+ const yPrev = new Float64Array(odes.initial);
83
+ const dydt = new Float64Array(dim);
84
+ const yScale = new Float64Array(dim);
85
+ const yTemp = new Float64Array(dim);
86
+ const yErr = new Float64Array(dim);
87
+ const W = new Float64Array(dimSquared);
88
+ const k1 = new Float64Array(dim);
89
+ const k2 = new Float64Array(dim);
90
+ const k3 = new Float64Array(dim);
91
+ const k4 = new Float64Array(dim);
92
+ const HT = new Float64Array(dim);
93
+ const f0Buf = new Float64Array(dim);
94
+ const f1Buf = new Float64Array(dim);
95
+ let hByGamma = 0;
96
+ const fBuf = new Float64Array(dim);
97
+ const kBuf = new Float64Array(dim);
98
+ const L = new Float64Array(dimSquared);
99
+ const U = new Float64Array(dimSquared);
100
+ const luBuf = new Float64Array(dim);
101
+ const bBuf = new Float64Array(dim);
102
+ const toUseLU = dim > 2;
103
+ // 1. SOLUTION AT THE POINT t0
104
+ tArr[0] = t0;
105
+ for (let i = 0; i < dim; ++i)
106
+ yArrs[i][0] = y[i];
107
+ // 2. COMPUTE NUMERICAL SOLUTION FOR THE POINTS FROM THE INTERVAL (t0, t1)
108
+ while (flag) {
109
+ // compute derivative
110
+ f(t, y, dydt);
111
+ // check whether to go on computations
112
+ if (callback)
113
+ callback.onIterationStart();
114
+ // compute scale vector
115
+ for (let i = 0; i < dim; ++i)
116
+ yScale[i] = abs(y[i]) + h * abs(dydt[i]) + TINY;
117
+ // check end point
118
+ if (t + h > t1) {
119
+ h = t1 - t;
120
+ flag = false;
121
+ }
122
+ // call of adaptive step the ROS3Pw [1] method
123
+ // computation of solution (y), time (t) and next step (hNext)
124
+ while (true) {
125
+ hByGamma = h * GAMMA;
126
+ // one stage of the ROS3Pw method
127
+ // 1) Jacobian & dF/dt matrices
128
+ jacobian(t, y, f, EPS, f0Buf, f1Buf, W);
129
+ tDerivative(t, y, f, EPS, f0Buf, f1Buf, HT);
130
+ // 2) W & LU-decomposition
131
+ for (let i = 0; i < dimSquared; ++i)
132
+ W[i] = I[i] - hByGamma * W[i];
133
+ if (toUseLU)
134
+ luDecomp(W, L, U, dim);
135
+ // 3) Scale dF/dt: HT = j * T
136
+ for (let i = 0; i < dim; ++i)
137
+ HT[i] *= h;
138
+ // 4) F1 = F(t, y) <-- Fbuf
139
+ f(t, y, fBuf);
140
+ // 5) k1 = W_inv * (F1 + gamma * HT)
141
+ for (let i = 0; i < dim; ++i)
142
+ bBuf[i] = fBuf[i] + GAMMA * HT[i];
143
+ if (toUseLU)
144
+ luSolve(L, U, bBuf, luBuf, k1, dim);
145
+ else
146
+ solve1d2d(W, bBuf, k1);
147
+ // 6) F2 = F(t + alpha2 * h, y + alpha21 * k1) <-- Fbuf
148
+ for (let i = 0; i < dim; ++i)
149
+ kBuf[i] = y[i] + ALPHA_21 * h * k1[i];
150
+ f(t + ALPHA_2 * h, kBuf, fBuf);
151
+ // 7) kBuf = gamma21 / gamma * k1
152
+ for (let i = 0; i < dim; ++i)
153
+ kBuf[i] = GAMMA_21_SCALED * k1[i];
154
+ // 8) k2 = W_inv * [Fbuf + kBuf + gamma2 * HT] - kBuf
155
+ for (let i = 0; i < dim; ++i)
156
+ bBuf[i] = fBuf[i] + kBuf[i] + GAMMA_2 * HT[i];
157
+ if (toUseLU)
158
+ luSolve(L, U, bBuf, luBuf, k2, dim);
159
+ else
160
+ solve1d2d(W, bBuf, k2);
161
+ for (let i = 0; i < dim; ++i)
162
+ k2[i] -= kBuf[i];
163
+ // 9) F3 = F(t + alpha3 * h, y + h * (alpha31 * k1 + alpha32 * k2)) <-- Fbuf
164
+ for (let i = 0; i < dim; ++i)
165
+ kBuf[i] = y[i] + h * 0.5 * (k1[i] + k2[i]);
166
+ f(t + h, kBuf, fBuf);
167
+ // 10) kBuf = gamma31 / gamma * k1 + gamma32 / gamma * k2
168
+ for (let i = 0; i < dim; ++i)
169
+ kBuf[i] = GAMMA_31_SCALED * k1[i] + GAMMA_32_SCALED * k2[i];
170
+ // 11) k3 = W_inv * (F3 + kBuf + gamma3 * HT) - kBuf
171
+ for (let i = 0; i < dim; ++i)
172
+ bBuf[i] = fBuf[i] + kBuf[i] + GAMMA_3 * HT[i];
173
+ if (toUseLU)
174
+ luSolve(L, U, bBuf, luBuf, k3, dim);
175
+ else
176
+ solve1d2d(W, bBuf, k3);
177
+ for (let i = 0; i < dim; ++i)
178
+ k3[i] -= kBuf[i];
179
+ // 12) F4 = F(t + alpha4 * h, y + h * (alpha41 * k1 + alpha42 * k2 + alpha43 * k3)) <-- Fbuf
180
+ for (let i = 0; i < dim; ++i)
181
+ kBuf[i] = y[i] + h * 0.5 * (k1[i] + k2[i]);
182
+ f(t + h, kBuf, fBuf);
183
+ // 13) kBuf = gamma41 / gamma * k1 + gamma42 / gamma * k2 + gamma43 / gamma * k3
184
+ for (let i = 0; i < dim; ++i)
185
+ kBuf[i] = GAMMA_41_SCALED * k1[i] + GAMMA_42_SCALED * k2[i] + GAMMA_43_SCALED * k3[i];
186
+ // 14) k4 = W_inv * (F4 + kBuf + gamma4 * HT) - kBuf
187
+ for (let i = 0; i < dim; ++i)
188
+ bBuf[i] = fBuf[i] + kBuf[i] + GAMMA_4 * HT[i];
189
+ if (toUseLU)
190
+ luSolve(L, U, bBuf, luBuf, k4, dim);
191
+ else
192
+ solve1d2d(W, bBuf, k4);
193
+ for (let i = 0; i < dim; ++i)
194
+ k4[i] -= kBuf[i];
195
+ // 15) yNext = y + h * (b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4) <-- yTemp
196
+ for (let i = 0; i < dim; ++i)
197
+ yTemp[i] = y[i] + h * (B_1 * k1[i] + B_2 * k2[i] + B_3 * k3[i] + B_4 * k4[i]);
198
+ // 16) yErr = h * (r1 * k1 + r2 * k2 + r3 * k3 + r4 * k4)
199
+ for (let i = 0; i < dim; ++i)
200
+ yErr[i] = h * (R_1 * k1[i] + R_2 * k2[i] + R_3 * k3[i] + R_4 * k4[i]);
201
+ // estimating error
202
+ errmax = 0;
203
+ for (let i = 0; i < dim; ++i)
204
+ errmax = max(errmax, abs(yErr[i] / yScale[i]));
205
+ errmax /= tolerance;
206
+ // processing the error obtained
207
+ if (errmax > 1) {
208
+ hTemp = SAFETY * h * Math.pow(errmax, PSHRNK);
209
+ h = max(hTemp, REDUCE_COEF * h);
210
+ tNew = t + h;
211
+ if (tNew == t)
212
+ throw new Error(ERROR_MSG.ROS34PRW_FAILS);
213
+ }
214
+ else {
215
+ if (errmax > ERR_CONTR)
216
+ hNext = SAFETY * h * Math.pow(errmax, PSGROW);
217
+ else
218
+ hNext = GROW_COEF * h;
219
+ t = t + h;
220
+ for (let i = 0; i < dim; ++i)
221
+ y[i] = yTemp[i];
222
+ break;
223
+ }
224
+ } // while (true)
225
+ // compute lineraly interpolated results and store them in dataframe
226
+ while (timeDataframe < t) {
227
+ const cLeft = (t - timeDataframe) / (t - tPrev);
228
+ const cRight = 1.0 - cLeft;
229
+ tArr[index] = timeDataframe;
230
+ for (let j = 0; j < dim; ++j)
231
+ yArrs[j][index] = cRight * y[j] + cLeft * yPrev[j];
232
+ timeDataframe += hDataframe;
233
+ ++index;
234
+ }
235
+ h = hNext;
236
+ tPrev = t;
237
+ for (let i = 0; i < dim; ++i)
238
+ yPrev[i] = y[i];
239
+ } // while (flag)
240
+ // perform final callback actions
241
+ if (callback)
242
+ callback.onComputationsCompleted();
243
+ // 3. solution at the point t1
244
+ tArr[rowCount - 1] = t1;
245
+ for (let i = 0; i < dim; ++i)
246
+ yArrs[i][rowCount - 1] = y[i];
247
+ // 4. prepare output
248
+ const solution = Array(dim);
249
+ // independent variable
250
+ solution[0] = tArr;
251
+ // functions
252
+ for (let i = 0; i < dim; ++i)
253
+ solution[i + 1] = yArrs[i];
254
+ return solution;
255
+ //return [tArr].concat(yArrs);
256
+ } // ros34prw
257
+ //# sourceMappingURL=ros34prw-method.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ros34prw-method.js","sourceRoot":"","sources":["ros34prw-method.ts"],"names":[],"mappings":"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"}