diff-grok 1.0.10 → 1.2.0

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 (226) hide show
  1. package/.claude/settings.local.json +11 -0
  2. package/.claude/skills/license-updater/SKILL.md +149 -0
  3. package/.claude/skills/license-updater/references/compatibility.md +68 -0
  4. package/.claude/skills/license-updater/references/templates.md +151 -0
  5. package/.claude/skills/license-updater/scripts/generate_license_files.py +467 -0
  6. package/CLAUDE.md +104 -0
  7. package/LICENSE +1 -1
  8. package/README.MD +121 -27
  9. package/THIRD_PARTY_LICENSES +135 -0
  10. package/docs/assets/hierarchy.js +1 -1
  11. package/docs/assets/navigation.js +1 -1
  12. package/docs/assets/search.js +1 -1
  13. package/docs/classes/BasicModelPipelineCreator.html +4 -4
  14. package/docs/classes/Callback.html +5 -5
  15. package/docs/classes/CyclicModelPipelineCreator.html +4 -4
  16. package/docs/classes/IterCheckerCallback.html +5 -5
  17. package/docs/classes/PipelineCreator.html +4 -4
  18. package/docs/classes/TimeCheckerCallback.html +5 -5
  19. package/docs/classes/UpdatesModelPipelineCreator.html +4 -4
  20. package/docs/functions/ab4.html +8 -0
  21. package/docs/functions/ab5.html +8 -0
  22. package/docs/functions/applyPipeline.html +2 -2
  23. package/docs/functions/getCallback.html +2 -2
  24. package/docs/functions/getIVP.html +2 -2
  25. package/docs/functions/getInputVector.html +2 -2
  26. package/docs/functions/getIvp2WebWorker.html +2 -2
  27. package/docs/functions/getJScode.html +2 -2
  28. package/docs/functions/getOutputNames.html +2 -2
  29. package/docs/functions/getPipelineCreator.html +2 -2
  30. package/docs/functions/lsoda.html +8 -0
  31. package/docs/functions/mrt.html +2 -2
  32. package/docs/functions/printE5.html +2 -2
  33. package/docs/functions/printHires.html +2 -2
  34. package/docs/functions/printOrego.html +2 -2
  35. package/docs/functions/printPollution.html +2 -2
  36. package/docs/functions/printRobertson.html +2 -2
  37. package/docs/functions/printVdpol.html +2 -2
  38. package/docs/functions/rk3.html +8 -0
  39. package/docs/functions/rk4.html +8 -0
  40. package/docs/functions/rkdp.html +8 -0
  41. package/docs/functions/ros34prw.html +2 -2
  42. package/docs/functions/ros3prw.html +2 -2
  43. package/docs/functions/solveIvp.html +2 -2
  44. package/docs/hierarchy.html +1 -1
  45. package/docs/index.html +100 -15
  46. package/docs/media/E5.png +0 -0
  47. package/docs/media/HIRES.png +0 -0
  48. package/docs/media/OREGO.png +0 -0
  49. package/docs/media/POLL-full.png +0 -0
  50. package/docs/media/ROBER.png +0 -0
  51. package/docs/media/VDP0L.png +0 -0
  52. package/docs/media/cyclic-model.js +3 -1
  53. package/docs/media/cyclic-model.js.map +1 -1
  54. package/docs/media/cyclic-model.ts +3 -1
  55. package/docs/modules.html +1 -1
  56. package/docs/types/Arg.html +7 -7
  57. package/docs/types/DifEqs.html +4 -4
  58. package/docs/types/Func.html +2 -2
  59. package/docs/types/IVP.html +20 -20
  60. package/docs/types/IVP2WebWorker.html +7 -7
  61. package/docs/types/Input.html +4 -4
  62. package/docs/types/Loop.html +4 -4
  63. package/docs/types/ODEs.html +8 -8
  64. package/docs/types/Output.html +4 -4
  65. package/docs/types/Pipeline.html +4 -4
  66. package/docs/types/SolverOptions.html +5 -5
  67. package/docs/types/Update.html +5 -5
  68. package/docs/types/Wrapper.html +5 -5
  69. package/images/E5.png +0 -0
  70. package/images/HIRES.png +0 -0
  71. package/images/OREGO.png +0 -0
  72. package/images/POLL-full.png +0 -0
  73. package/images/ROBER.png +0 -0
  74. package/images/VDP0L.png +0 -0
  75. package/index.js +1 -1
  76. package/index.js.map +1 -1
  77. package/index.ts +2 -1
  78. package/jest.config.js +1 -0
  79. package/package.json +4 -2
  80. package/src/examples/check-methods.js +15 -3
  81. package/src/examples/check-methods.js.map +1 -1
  82. package/src/examples/check-methods.ts +18 -3
  83. package/src/examples/cyclic-model.js +3 -1
  84. package/src/examples/cyclic-model.js.map +1 -1
  85. package/src/examples/cyclic-model.ts +3 -1
  86. package/src/solver-tools/ab4-method.js +332 -0
  87. package/src/solver-tools/ab4-method.js.map +1 -0
  88. package/src/solver-tools/ab4-method.ts +395 -0
  89. package/src/solver-tools/ab5-method.js +334 -0
  90. package/src/solver-tools/ab5-method.js.map +1 -0
  91. package/src/solver-tools/ab5-method.ts +397 -0
  92. package/src/solver-tools/cvode/common.js +487 -0
  93. package/src/solver-tools/cvode/common.js.map +1 -0
  94. package/src/solver-tools/cvode/common.ts +549 -0
  95. package/src/solver-tools/cvode/cvode.js +1062 -0
  96. package/src/solver-tools/cvode/cvode.js.map +1 -0
  97. package/src/solver-tools/cvode/cvode.ts +1226 -0
  98. package/src/solver-tools/cvode/cvode_adams.js +124 -0
  99. package/src/solver-tools/cvode/cvode_adams.js.map +1 -0
  100. package/src/solver-tools/cvode/cvode_adams.ts +142 -0
  101. package/src/solver-tools/cvode/cvode_bdf.js +153 -0
  102. package/src/solver-tools/cvode/cvode_bdf.js.map +1 -0
  103. package/src/solver-tools/cvode/cvode_bdf.ts +164 -0
  104. package/src/solver-tools/cvode/cvode_class.js +158 -0
  105. package/src/solver-tools/cvode/cvode_class.js.map +1 -0
  106. package/src/solver-tools/cvode/cvode_class.ts +271 -0
  107. package/src/solver-tools/cvode/cvode_hin.js +119 -0
  108. package/src/solver-tools/cvode/cvode_hin.js.map +1 -0
  109. package/src/solver-tools/cvode/cvode_hin.ts +150 -0
  110. package/src/solver-tools/cvode/cvode_io.js +203 -0
  111. package/src/solver-tools/cvode/cvode_io.js.map +1 -0
  112. package/src/solver-tools/cvode/cvode_io.ts +258 -0
  113. package/src/solver-tools/cvode/cvode_ls.js +210 -0
  114. package/src/solver-tools/cvode/cvode_ls.js.map +1 -0
  115. package/src/solver-tools/cvode/cvode_ls.ts +249 -0
  116. package/src/solver-tools/cvode/cvode_nls.js +220 -0
  117. package/src/solver-tools/cvode/cvode_nls.js.map +1 -0
  118. package/src/solver-tools/cvode/cvode_nls.ts +259 -0
  119. package/src/solver-tools/cvode/cvode_root.js +415 -0
  120. package/src/solver-tools/cvode/cvode_root.js.map +1 -0
  121. package/src/solver-tools/cvode/cvode_root.ts +503 -0
  122. package/src/solver-tools/cvode/dense_linalg.js +131 -0
  123. package/src/solver-tools/cvode/dense_linalg.js.map +1 -0
  124. package/src/solver-tools/cvode/dense_linalg.ts +144 -0
  125. package/src/solver-tools/cvode/index.js +26 -0
  126. package/src/solver-tools/cvode/index.js.map +1 -0
  127. package/src/solver-tools/cvode/index.ts +64 -0
  128. package/src/solver-tools/cvode-method.js +114 -0
  129. package/src/solver-tools/cvode-method.js.map +1 -0
  130. package/src/solver-tools/cvode-method.ts +129 -0
  131. package/src/solver-tools/index.js +7 -0
  132. package/src/solver-tools/index.js.map +1 -1
  133. package/src/solver-tools/index.ts +7 -0
  134. package/src/solver-tools/lsoda/blas.js +257 -0
  135. package/src/solver-tools/lsoda/blas.js.map +1 -0
  136. package/src/solver-tools/lsoda/blas.ts +279 -0
  137. package/src/solver-tools/lsoda/cfode.js +84 -0
  138. package/src/solver-tools/lsoda/cfode.js.map +1 -0
  139. package/src/solver-tools/lsoda/cfode.ts +95 -0
  140. package/src/solver-tools/lsoda/common.js +94 -0
  141. package/src/solver-tools/lsoda/common.js.map +1 -0
  142. package/src/solver-tools/lsoda/common.ts +135 -0
  143. package/src/solver-tools/lsoda/corfailure.js +36 -0
  144. package/src/solver-tools/lsoda/corfailure.js.map +1 -0
  145. package/src/solver-tools/lsoda/corfailure.ts +42 -0
  146. package/src/solver-tools/lsoda/correction.js +112 -0
  147. package/src/solver-tools/lsoda/correction.js.map +1 -0
  148. package/src/solver-tools/lsoda/correction.ts +131 -0
  149. package/src/solver-tools/lsoda/dense.js +121 -0
  150. package/src/solver-tools/lsoda/dense.js.map +1 -0
  151. package/src/solver-tools/lsoda/dense.ts +141 -0
  152. package/src/solver-tools/lsoda/index.js +15 -0
  153. package/src/solver-tools/lsoda/index.js.map +1 -0
  154. package/src/solver-tools/lsoda/index.ts +17 -0
  155. package/src/solver-tools/lsoda/intdy.js +54 -0
  156. package/src/solver-tools/lsoda/intdy.js.map +1 -0
  157. package/src/solver-tools/lsoda/intdy.ts +62 -0
  158. package/src/solver-tools/lsoda/lsoda.js +578 -0
  159. package/src/solver-tools/lsoda/lsoda.js.map +1 -0
  160. package/src/solver-tools/lsoda/lsoda.ts +644 -0
  161. package/src/solver-tools/lsoda/methodswitch.js +108 -0
  162. package/src/solver-tools/lsoda/methodswitch.js.map +1 -0
  163. package/src/solver-tools/lsoda/methodswitch.ts +119 -0
  164. package/src/solver-tools/lsoda/orderswitch.js +97 -0
  165. package/src/solver-tools/lsoda/orderswitch.js.map +1 -0
  166. package/src/solver-tools/lsoda/orderswitch.ts +107 -0
  167. package/src/solver-tools/lsoda/prja.js +54 -0
  168. package/src/solver-tools/lsoda/prja.js.map +1 -0
  169. package/src/solver-tools/lsoda/prja.ts +61 -0
  170. package/src/solver-tools/lsoda/scaleh.js +41 -0
  171. package/src/solver-tools/lsoda/scaleh.js.map +1 -0
  172. package/src/solver-tools/lsoda/scaleh.ts +45 -0
  173. package/src/solver-tools/lsoda/solsy.js +25 -0
  174. package/src/solver-tools/lsoda/solsy.js.map +1 -0
  175. package/src/solver-tools/lsoda/solsy.ts +30 -0
  176. package/src/solver-tools/lsoda/stoda.js +270 -0
  177. package/src/solver-tools/lsoda/stoda.js.map +1 -0
  178. package/src/solver-tools/lsoda/stoda.ts +298 -0
  179. package/src/solver-tools/lsoda-method.js +134 -0
  180. package/src/solver-tools/lsoda-method.js.map +1 -0
  181. package/src/solver-tools/lsoda-method.ts +154 -0
  182. package/src/solver-tools/mrt-method.js +81 -18
  183. package/src/solver-tools/mrt-method.js.map +1 -1
  184. package/src/solver-tools/mrt-method.ts +111 -21
  185. package/src/solver-tools/rk3-method.js +210 -0
  186. package/src/solver-tools/rk3-method.js.map +1 -0
  187. package/src/solver-tools/rk3-method.ts +257 -0
  188. package/src/solver-tools/rk4-method.js +236 -0
  189. package/src/solver-tools/rk4-method.js.map +1 -0
  190. package/src/solver-tools/rk4-method.ts +286 -0
  191. package/src/solver-tools/rkdp-method.js +247 -0
  192. package/src/solver-tools/rkdp-method.js.map +1 -0
  193. package/src/solver-tools/rkdp-method.ts +300 -0
  194. package/src/solver-tools/ros34prw-method.js +1 -1
  195. package/src/solver-tools/ros34prw-method.js.map +1 -1
  196. package/src/solver-tools/ros34prw-method.ts +1 -1
  197. package/src/solver-tools/ros3prw-method.js +1 -1
  198. package/src/solver-tools/ros3prw-method.js.map +1 -1
  199. package/src/solver-tools/ros3prw-method.ts +1 -1
  200. package/src/solver-tools/solver-defs.js +7 -0
  201. package/src/solver-tools/solver-defs.js.map +1 -1
  202. package/src/solver-tools/solver-defs.ts +7 -0
  203. package/src/tests/correctness.test.js +6 -4
  204. package/src/tests/correctness.test.js.map +1 -1
  205. package/src/tests/correctness.test.ts +6 -4
  206. package/src/tests/cvode-lib-correctness.test.js +404 -0
  207. package/src/tests/cvode-lib-correctness.test.js.map +1 -0
  208. package/src/tests/cvode-lib-correctness.test.ts +505 -0
  209. package/src/tests/cvode-lib-performance.test.js +103 -0
  210. package/src/tests/cvode-lib-performance.test.js.map +1 -0
  211. package/src/tests/cvode-lib-performance.test.ts +128 -0
  212. package/src/tests/lsoda-lib-correctness.test.js +223 -0
  213. package/src/tests/lsoda-lib-correctness.test.js.map +1 -0
  214. package/src/tests/lsoda-lib-correctness.test.ts +283 -0
  215. package/src/tests/lsoda-lib-performance.test.js +95 -0
  216. package/src/tests/lsoda-lib-performance.test.js.map +1 -0
  217. package/src/tests/lsoda-lib-performance.test.ts +126 -0
  218. package/src/tests/performance.test.js +12 -8
  219. package/src/tests/performance.test.js.map +1 -1
  220. package/src/tests/performance.test.ts +12 -8
  221. package/src/tests/test-defs.js +20 -1
  222. package/src/tests/test-defs.js.map +1 -1
  223. package/src/tests/test-defs.ts +22 -1
  224. package/src/worker-tools/solving.js +15 -1
  225. package/src/worker-tools/solving.js.map +1 -1
  226. package/src/worker-tools/solving.ts +23 -1
@@ -0,0 +1,334 @@
1
+ /* The Adams-Bashforth-Moulton predictor-corrector method of order 5 (AB5).
2
+
3
+ Uses the 5-step Adams-Bashforth formula as predictor and the 4-step
4
+ Adams-Moulton formula as corrector in PECE mode (Predict-Evaluate-
5
+ Correct-Evaluate), with Milne's device for local error estimation.
6
+ Bootstrapping is performed using the Runge-Kutta-Fehlberg 4(5) method.
7
+
8
+ References:
9
+ [1] E. Hairer, S.P. Norsett, G. Wanner, "Solving Ordinary Differential
10
+ Equations I: Nonstiff Problems", Springer, 2nd ed., 1993.
11
+ [2] L.F. Shampine, M.K. Gordon, "Computer Solution of Ordinary Differential
12
+ Equations: The Initial Value Problem", W.H. Freeman, 1975.
13
+ */
14
+ import { max, abs, SAFETY, PSHRNK, PSGROW, REDUCE_COEF, GROW_COEF, ERR_CONTR, TINY, ERROR_MSG } from './solver-defs';
15
+ // Adams-Bashforth 5-step coefficients (pre-divided by 720)
16
+ // y_{n+1} = y_n + h * (AB0*f_n + AB1*f_{n-1} + AB2*f_{n-2} + AB3*f_{n-3} + AB4*f_{n-4})
17
+ const AB0 = 1901.0 / 720.0;
18
+ const AB1 = -2774.0 / 720.0;
19
+ const AB2 = 2616.0 / 720.0;
20
+ const AB3 = -1274.0 / 720.0;
21
+ const AB4 = 251.0 / 720.0;
22
+ // Adams-Moulton 4-step coefficients (pre-divided by 720)
23
+ // y_{n+1} = y_n + h * (AM_NEW*f_{n+1} + AM0*f_n + AM1*f_{n-1} + AM2*f_{n-2} + AM3*f_{n-3})
24
+ const AM_NEW = 251.0 / 720.0;
25
+ const AM0 = 646.0 / 720.0;
26
+ const AM1 = -264.0 / 720.0;
27
+ const AM2 = 106.0 / 720.0;
28
+ const AM3 = -19.0 / 720.0;
29
+ // Milne error estimation coefficient for the AB5-AM4 pair: 2/27 = 38/513
30
+ const MILNE = 2.0 / 27.0;
31
+ // Number of uniformly-spaced history points required for AB5
32
+ const HIST_LEN = 5;
33
+ // Fehlberg 4(5) Butcher tableau coefficients (used during bootstrap phase)
34
+ const C2 = 1.0 / 4.0;
35
+ const C3 = 3.0 / 8.0;
36
+ const C4 = 12.0 / 13.0;
37
+ const C6 = 1.0 / 2.0;
38
+ const A21 = 1.0 / 4.0;
39
+ const A31 = 3.0 / 32.0;
40
+ const A32 = 9.0 / 32.0;
41
+ const A41 = 1932.0 / 2197.0;
42
+ const A42 = -7200.0 / 2197.0;
43
+ const A43 = 7296.0 / 2197.0;
44
+ const A51 = 439.0 / 216.0;
45
+ const A52 = -8.0;
46
+ const A53 = 3680.0 / 513.0;
47
+ const A54 = -845.0 / 4104.0;
48
+ const A61 = -8.0 / 27.0;
49
+ const A62 = 2.0;
50
+ const A63 = -3544.0 / 2565.0;
51
+ const A64 = 1859.0 / 4104.0;
52
+ const A65 = -11.0 / 40.0;
53
+ const B1 = 25.0 / 216.0;
54
+ const B3 = 1408.0 / 2565.0;
55
+ const B4 = 2197.0 / 4104.0;
56
+ const B5 = -1.0 / 5.0;
57
+ const RKE1 = 1.0 / 360.0;
58
+ const RKE3 = -128.0 / 4275.0;
59
+ const RKE4 = -2197.0 / 75240.0;
60
+ const RKE5 = 1.0 / 50.0;
61
+ const RKE6 = 2.0 / 55.0;
62
+ /** Solve initial value problem using the Adams-Bashforth-Moulton predictor-corrector method of order 5
63
+ * @param odes initial value problem for ordinary differential equations
64
+ * @param callback computations control callback
65
+ * @returns solution of the problem
66
+ * @example
67
+ * // Example. Solve the following initial value problem using the AB5 method:
68
+ * // dx/dt = x + y - t
69
+ * // dy/dt = x * y + t
70
+ * // x(0) = 1
71
+ * // y(0) = -1
72
+ * // on [0, 2] with the step 0.01.
73
+ * import { ODEs, ab5 } from 'diff-grok';
74
+ *
75
+ * const task: ODEs = {
76
+ * name: 'Example', // name of your model
77
+ * arg: {
78
+ * name: 't', // name of the argument
79
+ * start: 0, // initial value of the argument
80
+ * finish: 2, // final value of the argument
81
+ * step: 0.01, // solution grid step
82
+ * },
83
+ * initial: [1, -1], // initial values
84
+ * func: (t: number, y: Float64Array, output: Float64Array) => { // right-hand side of the system
85
+ * output[0] = y[0] + y[1] - t; // 1-st equation
86
+ * output[1] = y[0] * y[1] + t; // 2-nd equation
87
+ * },
88
+ * tolerance: 1e-7, // tolerance
89
+ * solutionColNames: ['x', 'y'], // names of solution functions
90
+ * };
91
+ *
92
+ * try {
93
+ * // Solve the problem using the AB5 method
94
+ * const solution = ab5(task);
95
+ *
96
+ * // Print a table with the results
97
+ * console.log(task.arg.name, task.solutionColNames[0], task.solutionColNames[1]);
98
+ * const length = solution[0].length;
99
+ * for (let i = 0; i < length; ++i)
100
+ * console.log(solution[0][i], solution[1][i], solution[2][i]);
101
+ * } catch (err) {
102
+ * console.log('Solver failed: ', err instanceof Error ? err.message : 'Unknown problem!');
103
+ * }
104
+ */
105
+ export function ab5(odes, callback) {
106
+ const f = odes.func;
107
+ // operating variables
108
+ const t0 = odes.arg.start;
109
+ const t1 = odes.arg.finish;
110
+ let h = odes.arg.step;
111
+ const hDataframe = h;
112
+ const hMax = hDataframe * 10;
113
+ const tolerance = odes.tolerance;
114
+ const rowCount = Math.trunc((t1 - t0) / h) + 1;
115
+ const dim = odes.initial.length;
116
+ // result arrays
117
+ const tArr = new Float64Array(rowCount);
118
+ const yArrs = Array(dim);
119
+ for (let i = 0; i < dim; ++i)
120
+ yArrs[i] = new Float64Array(rowCount);
121
+ // method routine
122
+ let timeDataframe = t0 + hDataframe;
123
+ let t = t0;
124
+ let tPrev = t0;
125
+ let hNext = 0.0;
126
+ let flag = true;
127
+ let index = 1;
128
+ let errmax = 0;
129
+ let hTemp = 0;
130
+ let tNew = 0;
131
+ // working buffers
132
+ const y = new Float64Array(odes.initial);
133
+ const yPrev = new Float64Array(odes.initial);
134
+ const dydt = new Float64Array(dim);
135
+ const yScale = new Float64Array(dim);
136
+ const yTemp = new Float64Array(dim);
137
+ const yErr = new Float64Array(dim);
138
+ // AB5-AM4 history: fBuf[0] = f(t_n, y_n), fBuf[4] = f(t_{n-4}, y_{n-4})
139
+ const fBuf = [];
140
+ for (let i = 0; i < HIST_LEN; ++i)
141
+ fBuf[i] = new Float64Array(dim);
142
+ let histCount = 0;
143
+ let lastH = 0;
144
+ // AB5-AM4 corrector buffers
145
+ const yCorr = new Float64Array(dim);
146
+ const fPred = new Float64Array(dim);
147
+ // RKF45 stage buffers (bootstrap)
148
+ const k1 = new Float64Array(dim);
149
+ const k2 = new Float64Array(dim);
150
+ const k3 = new Float64Array(dim);
151
+ const k4 = new Float64Array(dim);
152
+ const k5 = new Float64Array(dim);
153
+ const k6 = new Float64Array(dim);
154
+ // store initial f-value
155
+ f(t, y, fBuf[0]);
156
+ histCount = 1;
157
+ // 1. SOLUTION AT THE POINT t0
158
+ tArr[0] = t0;
159
+ for (let i = 0; i < dim; ++i)
160
+ yArrs[i][0] = y[i];
161
+ // 2. COMPUTE NUMERICAL SOLUTION FOR THE POINTS FROM THE INTERVAL (t0, t1)
162
+ while (flag) {
163
+ // compute derivative
164
+ f(t, y, dydt);
165
+ // check whether to go on computations
166
+ if (callback)
167
+ callback.onIterationStart();
168
+ // compute scale vector
169
+ for (let i = 0; i < dim; ++i)
170
+ yScale[i] = abs(y[i]) + h * abs(dydt[i]) + TINY;
171
+ // check end point
172
+ if (t + h > t1) {
173
+ h = t1 - t;
174
+ flag = false;
175
+ }
176
+ // if step size changed, history is invalid (AB5 needs uniform spacing)
177
+ if (histCount > 1 && h !== lastH) {
178
+ histCount = 1;
179
+ f(t, y, fBuf[0]);
180
+ }
181
+ // adaptive step loop
182
+ while (true) {
183
+ if (histCount < HIST_LEN) {
184
+ // BOOTSTRAP PHASE: RKF45 single step to build up history
185
+ // Stage 1: k1 = f(t, y)
186
+ f(t, y, k1);
187
+ // Stage 2: k2 = f(t + C2*h, y + h*A21*k1)
188
+ for (let i = 0; i < dim; ++i)
189
+ yTemp[i] = y[i] + h * A21 * k1[i];
190
+ f(t + C2 * h, yTemp, k2);
191
+ // Stage 3: k3 = f(t + C3*h, y + h*(A31*k1 + A32*k2))
192
+ for (let i = 0; i < dim; ++i)
193
+ yTemp[i] = y[i] + h * (A31 * k1[i] + A32 * k2[i]);
194
+ f(t + C3 * h, yTemp, k3);
195
+ // Stage 4: k4 = f(t + C4*h, y + h*(A41*k1 + A42*k2 + A43*k3))
196
+ for (let i = 0; i < dim; ++i)
197
+ yTemp[i] = y[i] + h * (A41 * k1[i] + A42 * k2[i] + A43 * k3[i]);
198
+ f(t + C4 * h, yTemp, k4);
199
+ // Stage 5: k5 = f(t + h, y + h*(A51*k1 + A52*k2 + A53*k3 + A54*k4))
200
+ for (let i = 0; i < dim; ++i)
201
+ yTemp[i] = y[i] + h * (A51 * k1[i] + A52 * k2[i] + A53 * k3[i] + A54 * k4[i]);
202
+ f(t + h, yTemp, k5);
203
+ // Stage 6: k6 = f(t + C6*h, y + h*(A61*k1 + A62*k2 + A63*k3 + A64*k4 + A65*k5))
204
+ for (let i = 0; i < dim; ++i)
205
+ yTemp[i] = y[i] + h * (A61 * k1[i] + A62 * k2[i] + A63 * k3[i] + A64 * k4[i] + A65 * k5[i]);
206
+ f(t + C6 * h, yTemp, k6);
207
+ // 4th-order solution
208
+ for (let i = 0; i < dim; ++i)
209
+ yTemp[i] = y[i] + h * (B1 * k1[i] + B3 * k3[i] + B4 * k4[i] + B5 * k5[i]);
210
+ // Error estimate: difference between 4th and 5th order solutions
211
+ for (let i = 0; i < dim; ++i)
212
+ yErr[i] = h * (RKE1 * k1[i] + RKE3 * k3[i] + RKE4 * k4[i] + RKE5 * k5[i] + RKE6 * k6[i]);
213
+ // estimating error
214
+ errmax = 0;
215
+ for (let i = 0; i < dim; ++i)
216
+ errmax = max(errmax, abs(yErr[i] / yScale[i]));
217
+ errmax /= tolerance;
218
+ // processing the error obtained
219
+ if (errmax > 1) {
220
+ hTemp = SAFETY * h * Math.pow(errmax, PSHRNK);
221
+ h = max(hTemp, REDUCE_COEF * h);
222
+ tNew = t + h;
223
+ if (tNew == t)
224
+ throw new Error(ERROR_MSG.AB5_FAILS);
225
+ // step size changed, reset history if needed
226
+ if (histCount > 1) {
227
+ histCount = 1;
228
+ f(t, y, fBuf[0]);
229
+ }
230
+ }
231
+ else {
232
+ // step accepted
233
+ t = t + h;
234
+ for (let i = 0; i < dim; ++i)
235
+ y[i] = yTemp[i];
236
+ // shift history and store new f-value
237
+ for (let j = Math.min(histCount, HIST_LEN - 1); j > 0; --j)
238
+ fBuf[j].set(fBuf[j - 1]);
239
+ f(t, y, fBuf[0]);
240
+ histCount++;
241
+ lastH = h;
242
+ // during bootstrap, keep h constant for uniform spacing
243
+ hNext = h;
244
+ if (hNext > hMax)
245
+ hNext = hMax;
246
+ break;
247
+ }
248
+ }
249
+ else {
250
+ // AB5-AM4 PHASE: Predictor-Corrector (PECE)
251
+ // Predict (Adams-Bashforth 5-step)
252
+ for (let i = 0; i < dim; ++i) {
253
+ yTemp[i] = y[i] + h * (AB0 * fBuf[0][i] + AB1 * fBuf[1][i] +
254
+ AB2 * fBuf[2][i] + AB3 * fBuf[3][i] + AB4 * fBuf[4][i]);
255
+ }
256
+ // Evaluate f at predicted point
257
+ f(t + h, yTemp, fPred);
258
+ // Correct (Adams-Moulton 4-step)
259
+ for (let i = 0; i < dim; ++i) {
260
+ yCorr[i] = y[i] + h * (AM_NEW * fPred[i] + AM0 * fBuf[0][i] +
261
+ AM1 * fBuf[1][i] + AM2 * fBuf[2][i] + AM3 * fBuf[3][i]);
262
+ }
263
+ // Error estimate (Milne's device)
264
+ for (let i = 0; i < dim; ++i)
265
+ yErr[i] = MILNE * (yCorr[i] - yTemp[i]);
266
+ // estimating error
267
+ errmax = 0;
268
+ for (let i = 0; i < dim; ++i)
269
+ errmax = max(errmax, abs(yErr[i] / yScale[i]));
270
+ errmax /= tolerance;
271
+ // processing the error obtained
272
+ if (errmax > 1) {
273
+ // step rejected: shrink step and re-bootstrap
274
+ hTemp = SAFETY * h * Math.pow(errmax, PSHRNK);
275
+ h = max(hTemp, REDUCE_COEF * h);
276
+ tNew = t + h;
277
+ if (tNew == t)
278
+ throw new Error(ERROR_MSG.AB5_FAILS);
279
+ histCount = 1;
280
+ f(t, y, fBuf[0]);
281
+ }
282
+ else {
283
+ if (errmax > ERR_CONTR)
284
+ hNext = SAFETY * h * Math.pow(errmax, PSGROW);
285
+ else
286
+ hNext = GROW_COEF * h;
287
+ if (hNext > hMax)
288
+ hNext = hMax;
289
+ t = t + h;
290
+ for (let i = 0; i < dim; ++i)
291
+ y[i] = yCorr[i];
292
+ // shift history and store f at corrected point (PECE final evaluate)
293
+ const recycled = fBuf[HIST_LEN - 1];
294
+ for (let j = HIST_LEN - 1; j > 0; --j)
295
+ fBuf[j] = fBuf[j - 1];
296
+ fBuf[0] = recycled;
297
+ f(t, y, fBuf[0]);
298
+ lastH = h;
299
+ break;
300
+ }
301
+ }
302
+ } // while (true)
303
+ // compute linearly interpolated results and store them in dataframe
304
+ while (timeDataframe < t) {
305
+ const cLeft = (t - timeDataframe) / (t - tPrev);
306
+ const cRight = 1.0 - cLeft;
307
+ tArr[index] = timeDataframe;
308
+ for (let j = 0; j < dim; ++j)
309
+ yArrs[j][index] = cRight * y[j] + cLeft * yPrev[j];
310
+ timeDataframe += hDataframe;
311
+ ++index;
312
+ }
313
+ h = hNext;
314
+ tPrev = t;
315
+ for (let i = 0; i < dim; ++i)
316
+ yPrev[i] = y[i];
317
+ } // while (flag)
318
+ // perform final callback actions
319
+ if (callback)
320
+ callback.onComputationsCompleted();
321
+ // 3. solution at the point t1
322
+ tArr[rowCount - 1] = t1;
323
+ for (let i = 0; i < dim; ++i)
324
+ yArrs[i][rowCount - 1] = y[i];
325
+ // 4. prepare output
326
+ const solution = Array(dim + 1);
327
+ // independent variable
328
+ solution[0] = tArr;
329
+ // functions
330
+ for (let i = 0; i < dim; ++i)
331
+ solution[i + 1] = yArrs[i];
332
+ return solution;
333
+ } // ab5
334
+ //# sourceMappingURL=ab5-method.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ab5-method.js","sourceRoot":"","sources":["ab5-method.ts"],"names":[],"mappings":"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"}