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,25 @@
1
+ /**
2
+ * TypeScript port of liblsoda (https://github.com/sdwfrost/liblsoda)
3
+ * Original LSODA algorithm by Linda Petzold & Alan Hindmarsh (1983)
4
+ *
5
+ * Copyright (c) 2011 Yu Feng, McWilliam Cosmology Center, Carnegie Mellon University
6
+ * Copyright (c) 2016 Simon Frost
7
+ * Copyright (c) 2026 Datagrok
8
+ *
9
+ * Licensed under the MIT License. See THIRD_PARTY_LICENSES for the full
10
+ * license text and provenance chain of the original code.
11
+ */
12
+ import { dgesl } from './blas';
13
+ /**
14
+ * Solve the linear system arising from a chord iteration.
15
+ * Only miter=2 (dense) is supported.
16
+ */
17
+ export function solsy(ctx, y) {
18
+ const c = ctx.common;
19
+ const neq = ctx.neq;
20
+ if (c.miter !== 2)
21
+ throw new Error('[solsy] miter != 2 not implemented');
22
+ dgesl(c.wm, neq, c.ipvt, y, 0);
23
+ return 1;
24
+ }
25
+ //# sourceMappingURL=solsy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solsy.js","sourceRoot":"","sources":["solsy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAC,KAAK,EAAC,MAAM,QAAQ,CAAC;AAE7B;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,GAAiB,EAAE,CAAe;IACtD,MAAM,CAAC,GAAG,GAAG,CAAC,MAAO,CAAC;IACtB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAEpB,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAGxD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * TypeScript port of liblsoda (https://github.com/sdwfrost/liblsoda)
3
+ * Original LSODA algorithm by Linda Petzold & Alan Hindmarsh (1983)
4
+ *
5
+ * Copyright (c) 2011 Yu Feng, McWilliam Cosmology Center, Carnegie Mellon University
6
+ * Copyright (c) 2016 Simon Frost
7
+ * Copyright (c) 2026 Datagrok
8
+ *
9
+ * Licensed under the MIT License. See THIRD_PARTY_LICENSES for the full
10
+ * license text and provenance chain of the original code.
11
+ */
12
+
13
+ import {LsodaContext} from './common';
14
+ import {dgesl} from './blas';
15
+
16
+ /**
17
+ * Solve the linear system arising from a chord iteration.
18
+ * Only miter=2 (dense) is supported.
19
+ */
20
+ export function solsy(ctx: LsodaContext, y: Float64Array): number {
21
+ const c = ctx.common!;
22
+ const neq = ctx.neq;
23
+
24
+ if (c.miter !== 2)
25
+ throw new Error('[solsy] miter != 2 not implemented');
26
+
27
+
28
+ dgesl(c.wm, neq, c.ipvt, y, 0);
29
+ return 1;
30
+ }
@@ -0,0 +1,270 @@
1
+ /**
2
+ * TypeScript port of liblsoda (https://github.com/sdwfrost/liblsoda)
3
+ * Original LSODA algorithm by Linda Petzold & Alan Hindmarsh (1983)
4
+ *
5
+ * Copyright (c) 2011 Yu Feng, McWilliam Cosmology Center, Carnegie Mellon University
6
+ * Copyright (c) 2016 Simon Frost
7
+ * Copyright (c) 2026 Datagrok
8
+ *
9
+ * Licensed under the MIT License. See THIRD_PARTY_LICENSES for the full
10
+ * license text and provenance chain of the original code.
11
+ */
12
+ import { CCMAX, MSBP } from './common';
13
+ import { vmnorm } from './blas';
14
+ import { cfode } from './cfode';
15
+ import { scaleh } from './scaleh';
16
+ import { correction } from './correction';
17
+ import { orderswitch } from './orderswitch';
18
+ import { methodswitch } from './methodswitch';
19
+ /**
20
+ * Perform one step of the integration.
21
+ *
22
+ * jstart: 0 = first step, >0 = continue, -1 = new h/meth/miter, -2 = new h only
23
+ * Returns kflag: 0 = success, -1 = error test failed, -2 = convergence failed.
24
+ */
25
+ export function stoda(ctx, y, jstart) {
26
+ const c = ctx.common;
27
+ const hmin = ctx.opt.hmin;
28
+ const mxords = ctx.opt.mxords;
29
+ const mxordn = ctx.opt.mxordn;
30
+ const neq = ctx.neq;
31
+ let kflag = 0;
32
+ const told = c.tn;
33
+ c.ncf = 0;
34
+ let delp = 0.;
35
+ let maxord = mxordn;
36
+ if (c.meth === 2)
37
+ maxord = mxords;
38
+ // Helper: endstoda — finalize step, scale acor
39
+ function endstoda() {
40
+ const r = 1. / c.tesco[c.nqu][2];
41
+ for (let i = 1; i <= neq; i++)
42
+ c.acor[i] *= r;
43
+ c.hold = c.h;
44
+ }
45
+ // Helper: resetcoeff — reload el from elco for current order
46
+ function resetcoeff() {
47
+ const el0 = c.el[1];
48
+ for (let i = 1; i <= c.nq + 1; i++)
49
+ c.el[i] = c.elco[c.nq][i];
50
+ c.rc = c.rc * c.el[1] / el0;
51
+ }
52
+ // --- Initialization based on jstart ---
53
+ if (jstart === 0) {
54
+ c.nq = 1;
55
+ c.ialth = 2;
56
+ c.rmax = 10000.;
57
+ c.rc = 0.;
58
+ c.crate = 0.7;
59
+ c.hold = c.h;
60
+ c.nslp = 0;
61
+ c.ipup = c.miter;
62
+ c.el[1] = 1.0;
63
+ c.icount = 20;
64
+ c.irflag = 0;
65
+ c.pdest = 0.;
66
+ c.pdlast = 0.;
67
+ cfode(ctx, 1);
68
+ resetcoeff();
69
+ }
70
+ if (jstart === -1) {
71
+ c.ipup = c.miter;
72
+ if (c.ialth === 1)
73
+ c.ialth = 2;
74
+ if (c.meth !== c.mused) {
75
+ cfode(ctx, c.meth);
76
+ c.ialth = c.nq + 1;
77
+ resetcoeff();
78
+ }
79
+ if (c.h !== c.hold) {
80
+ const rh = c.h / c.hold;
81
+ c.h = c.hold;
82
+ scaleh(ctx, rh);
83
+ }
84
+ }
85
+ if (jstart === -2) {
86
+ if (c.h !== c.hold) {
87
+ const rh = c.h / c.hold;
88
+ c.h = c.hold;
89
+ scaleh(ctx, rh);
90
+ }
91
+ }
92
+ // --- Main integration loop ---
93
+ let dsm = 0.0;
94
+ const cs = { del: 0, delp: delp, m: 0 };
95
+ const osResult = { rh: 0 };
96
+ const msResult = { rh: 0 };
97
+ let rh;
98
+ outer: while (true) {
99
+ // Before the corrector starts
100
+ c.jcur = 0;
101
+ inner: while (true) {
102
+ if (Math.abs(c.rc - 1.) > CCMAX)
103
+ c.ipup = c.miter;
104
+ if (c.nst >= c.nslp + MSBP)
105
+ c.ipup = c.miter;
106
+ c.tn += c.h;
107
+ // Prediction: multiply yh by Pascal triangle matrix
108
+ for (let j = c.nq; j >= 1; j--) {
109
+ for (let i1 = j; i1 <= c.nq; i1++) {
110
+ for (let i = 1; i <= neq; i++)
111
+ c.yh[i1][i] += c.yh[i1 + 1][i];
112
+ }
113
+ }
114
+ const pnorm = vmnorm(neq, c.yh[1], c.ewt);
115
+ cs.del = 0;
116
+ cs.delp = delp;
117
+ cs.m = 0;
118
+ const corflag = correction(ctx, y, pnorm, cs, told);
119
+ delp = cs.delp;
120
+ if (corflag === 0)
121
+ break inner;
122
+ if (corflag === 1) {
123
+ rh = Math.max(0.25, hmin / Math.abs(c.h));
124
+ scaleh(ctx, rh);
125
+ continue inner;
126
+ }
127
+ if (corflag === 2) {
128
+ kflag = -2;
129
+ c.hold = c.h;
130
+ jstart = 1;
131
+ return kflag;
132
+ }
133
+ }
134
+ // Local error test
135
+ if (cs.m === 0)
136
+ dsm = cs.del / c.tesco[c.nq][2];
137
+ if (cs.m > 0)
138
+ dsm = vmnorm(neq, c.acor, c.ewt) / c.tesco[c.nq][2];
139
+ if (dsm <= 1.) {
140
+ // Successful step
141
+ kflag = 0;
142
+ c.nst++;
143
+ c.hu = c.h;
144
+ c.nqu = c.nq;
145
+ c.mused = c.meth;
146
+ for (let j = 1; j <= c.nq + 1; j++) {
147
+ const r = c.el[j];
148
+ for (let i = 1; i <= neq; i++)
149
+ c.yh[j][i] += r * c.acor[i];
150
+ }
151
+ c.icount--;
152
+ if (c.icount < 0) {
153
+ msResult.rh = 0;
154
+ methodswitch(ctx, dsm, vmnorm(neq, c.yh[1], c.ewt), msResult);
155
+ if (c.meth !== c.mused) {
156
+ rh = Math.max(msResult.rh, hmin / Math.abs(c.h));
157
+ scaleh(ctx, rh);
158
+ c.rmax = 10.;
159
+ endstoda();
160
+ break outer;
161
+ }
162
+ }
163
+ // No method switch — do step/order selection
164
+ c.ialth--;
165
+ if (c.ialth === 0) {
166
+ let rhup = 0.;
167
+ if (c.nq + 1 !== maxord + 1) {
168
+ for (let i = 1; i <= neq; i++)
169
+ c.savf[i] = c.acor[i] - c.yh[maxord + 1][i];
170
+ const dup = vmnorm(neq, c.savf, c.ewt) / c.tesco[c.nq][3];
171
+ const exup = 1. / (c.nq + 2);
172
+ rhup = 1. / (1.4 * Math.pow(dup, exup) + 0.0000014);
173
+ }
174
+ osResult.rh = 0;
175
+ const orderflag = orderswitch(ctx, rhup, dsm, osResult, kflag, maxord);
176
+ if (orderflag === 0) {
177
+ endstoda();
178
+ break outer;
179
+ }
180
+ if (orderflag === 1) {
181
+ rh = Math.max(osResult.rh, hmin / Math.abs(c.h));
182
+ scaleh(ctx, rh);
183
+ c.rmax = 10.;
184
+ endstoda();
185
+ break outer;
186
+ }
187
+ if (orderflag === 2) {
188
+ resetcoeff();
189
+ rh = Math.max(osResult.rh, hmin / Math.abs(c.h));
190
+ scaleh(ctx, rh);
191
+ c.rmax = 10.;
192
+ endstoda();
193
+ break outer;
194
+ }
195
+ }
196
+ if (c.ialth > 1 || c.nq + 1 === maxord + 1) {
197
+ endstoda();
198
+ break outer;
199
+ }
200
+ for (let i = 1; i <= neq; i++)
201
+ c.yh[maxord + 1][i] = c.acor[i];
202
+ endstoda();
203
+ break outer;
204
+ }
205
+ else {
206
+ // Error test failed
207
+ kflag--;
208
+ c.tn = told;
209
+ // Retract yh array
210
+ for (let j = c.nq; j >= 1; j--) {
211
+ for (let i1 = j; i1 <= c.nq; i1++) {
212
+ for (let i = 1; i <= neq; i++)
213
+ c.yh[i1][i] -= c.yh[i1 + 1][i];
214
+ }
215
+ }
216
+ c.rmax = 2.;
217
+ if (Math.abs(c.h) <= hmin * 1.00001) {
218
+ kflag = -1;
219
+ c.hold = c.h;
220
+ jstart = 1;
221
+ break outer;
222
+ }
223
+ if (kflag > -3) {
224
+ osResult.rh = 0;
225
+ const orderflag = orderswitch(ctx, 0., dsm, osResult, kflag, maxord);
226
+ if (orderflag === 1 || orderflag === 0) {
227
+ if (orderflag === 0)
228
+ osResult.rh = Math.min(osResult.rh, 0.2);
229
+ osResult.rh = Math.max(osResult.rh, hmin / Math.abs(c.h));
230
+ scaleh(ctx, osResult.rh);
231
+ }
232
+ if (orderflag === 2) {
233
+ resetcoeff();
234
+ osResult.rh = Math.max(osResult.rh, hmin / Math.abs(c.h));
235
+ scaleh(ctx, osResult.rh);
236
+ }
237
+ continue outer;
238
+ }
239
+ else {
240
+ // 3 or more failures
241
+ if (kflag === -10) {
242
+ kflag = -1;
243
+ c.hold = c.h;
244
+ jstart = 1;
245
+ break outer;
246
+ }
247
+ else {
248
+ rh = 0.1;
249
+ rh = Math.max(hmin / Math.abs(c.h), rh);
250
+ c.h *= rh;
251
+ for (let i = 1; i <= neq; i++)
252
+ y[i] = c.yh[1][i];
253
+ ctx.func(c.tn, y.subarray(1), c.savf.subarray(1), ctx.data);
254
+ c.nfe++;
255
+ for (let i = 1; i <= neq; i++)
256
+ c.yh[2][i] = c.h * c.savf[i];
257
+ c.ipup = c.miter;
258
+ c.ialth = 5;
259
+ if (c.nq === 1)
260
+ continue outer;
261
+ c.nq = 1;
262
+ resetcoeff();
263
+ continue outer;
264
+ }
265
+ }
266
+ }
267
+ }
268
+ return kflag;
269
+ }
270
+ //# sourceMappingURL=stoda.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stoda.js","sourceRoot":"","sources":["stoda.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,298 @@
1
+ /**
2
+ * TypeScript port of liblsoda (https://github.com/sdwfrost/liblsoda)
3
+ * Original LSODA algorithm by Linda Petzold & Alan Hindmarsh (1983)
4
+ *
5
+ * Copyright (c) 2011 Yu Feng, McWilliam Cosmology Center, Carnegie Mellon University
6
+ * Copyright (c) 2016 Simon Frost
7
+ * Copyright (c) 2026 Datagrok
8
+ *
9
+ * Licensed under the MIT License. See THIRD_PARTY_LICENSES for the full
10
+ * license text and provenance chain of the original code.
11
+ */
12
+
13
+ import {LsodaContext, CCMAX, MSBP} from './common';
14
+ import {vmnorm} from './blas';
15
+ import {cfode} from './cfode';
16
+ import {scaleh} from './scaleh';
17
+ import {correction, CorrectionState} from './correction';
18
+ import {orderswitch, OrderSwitchResult} from './orderswitch';
19
+ import {methodswitch, MethodSwitchResult} from './methodswitch';
20
+
21
+ /**
22
+ * Perform one step of the integration.
23
+ *
24
+ * jstart: 0 = first step, >0 = continue, -1 = new h/meth/miter, -2 = new h only
25
+ * Returns kflag: 0 = success, -1 = error test failed, -2 = convergence failed.
26
+ */
27
+ export function stoda(ctx: LsodaContext, y: Float64Array, jstart: number): number {
28
+ const c = ctx.common!;
29
+ const hmin = ctx.opt!.hmin;
30
+ const mxords = ctx.opt!.mxords;
31
+ const mxordn = ctx.opt!.mxordn;
32
+ const neq = ctx.neq;
33
+
34
+ let kflag = 0;
35
+ const told = c.tn;
36
+ c.ncf = 0;
37
+ let delp = 0.;
38
+
39
+ let maxord = mxordn;
40
+ if (c.meth === 2) maxord = mxords;
41
+
42
+ // Helper: endstoda — finalize step, scale acor
43
+ function endstoda(): void {
44
+ const r = 1. / c.tesco[c.nqu][2];
45
+ for (let i = 1; i <= neq; i++)
46
+ c.acor[i] *= r;
47
+ c.hold = c.h;
48
+ }
49
+
50
+ // Helper: resetcoeff — reload el from elco for current order
51
+ function resetcoeff(): void {
52
+ const el0 = c.el[1];
53
+ for (let i = 1; i <= c.nq + 1; i++)
54
+ c.el[i] = c.elco[c.nq][i];
55
+ c.rc = c.rc * c.el[1] / el0;
56
+ }
57
+
58
+ // --- Initialization based on jstart ---
59
+
60
+ if (jstart === 0) {
61
+ c.nq = 1;
62
+ c.ialth = 2;
63
+ c.rmax = 10000.;
64
+ c.rc = 0.;
65
+ c.crate = 0.7;
66
+ c.hold = c.h;
67
+ c.nslp = 0;
68
+ c.ipup = c.miter;
69
+ c.el[1] = 1.0;
70
+ c.icount = 20;
71
+ c.irflag = 0;
72
+ c.pdest = 0.;
73
+ c.pdlast = 0.;
74
+ cfode(ctx, 1);
75
+ resetcoeff();
76
+ }
77
+
78
+ if (jstart === -1) {
79
+ c.ipup = c.miter;
80
+ if (c.ialth === 1) c.ialth = 2;
81
+ if (c.meth !== c.mused) {
82
+ cfode(ctx, c.meth);
83
+ c.ialth = c.nq + 1;
84
+ resetcoeff();
85
+ }
86
+ if (c.h !== c.hold) {
87
+ const rh = c.h / c.hold;
88
+ c.h = c.hold;
89
+ scaleh(ctx, rh);
90
+ }
91
+ }
92
+
93
+ if (jstart === -2) {
94
+ if (c.h !== c.hold) {
95
+ const rh = c.h / c.hold;
96
+ c.h = c.hold;
97
+ scaleh(ctx, rh);
98
+ }
99
+ }
100
+
101
+ // --- Main integration loop ---
102
+
103
+ let dsm = 0.0;
104
+ const cs: CorrectionState = {del: 0, delp: delp, m: 0};
105
+ const osResult: OrderSwitchResult = {rh: 0};
106
+ const msResult: MethodSwitchResult = {rh: 0};
107
+ let rh: number;
108
+
109
+ outer:
110
+ while (true) {
111
+ // Before the corrector starts
112
+ c.jcur = 0;
113
+
114
+ inner:
115
+ while (true) {
116
+ if (Math.abs(c.rc - 1.) > CCMAX)
117
+ c.ipup = c.miter;
118
+ if (c.nst >= c.nslp + MSBP)
119
+ c.ipup = c.miter;
120
+
121
+ c.tn += c.h;
122
+
123
+ // Prediction: multiply yh by Pascal triangle matrix
124
+ for (let j = c.nq; j >= 1; j--) {
125
+ for (let i1 = j; i1 <= c.nq; i1++) {
126
+ for (let i = 1; i <= neq; i++)
127
+ c.yh[i1][i] += c.yh[i1 + 1][i];
128
+ }
129
+ }
130
+
131
+ const pnorm = vmnorm(neq, c.yh[1], c.ewt);
132
+
133
+ cs.del = 0;
134
+ cs.delp = delp;
135
+ cs.m = 0;
136
+ const corflag = correction(ctx, y, pnorm, cs, told);
137
+ delp = cs.delp;
138
+
139
+ if (corflag === 0) break inner;
140
+
141
+ if (corflag === 1) {
142
+ rh = Math.max(0.25, hmin / Math.abs(c.h));
143
+ scaleh(ctx, rh);
144
+ continue inner;
145
+ }
146
+
147
+ if (corflag === 2) {
148
+ kflag = -2;
149
+ c.hold = c.h;
150
+ jstart = 1;
151
+ return kflag;
152
+ }
153
+ }
154
+
155
+ // Local error test
156
+ if (cs.m === 0)
157
+ dsm = cs.del / c.tesco[c.nq][2];
158
+ if (cs.m > 0)
159
+ dsm = vmnorm(neq, c.acor, c.ewt) / c.tesco[c.nq][2];
160
+
161
+ if (dsm <= 1.) {
162
+ // Successful step
163
+ kflag = 0;
164
+ c.nst++;
165
+ c.hu = c.h;
166
+ c.nqu = c.nq;
167
+ c.mused = c.meth;
168
+
169
+ for (let j = 1; j <= c.nq + 1; j++) {
170
+ const r = c.el[j];
171
+ for (let i = 1; i <= neq; i++)
172
+ c.yh[j][i] += r * c.acor[i];
173
+ }
174
+
175
+ c.icount--;
176
+ if (c.icount < 0) {
177
+ msResult.rh = 0;
178
+ methodswitch(ctx, dsm, vmnorm(neq, c.yh[1], c.ewt), msResult);
179
+ if (c.meth !== c.mused) {
180
+ rh = Math.max(msResult.rh, hmin / Math.abs(c.h));
181
+ scaleh(ctx, rh);
182
+ c.rmax = 10.;
183
+ endstoda();
184
+ break outer;
185
+ }
186
+ }
187
+
188
+ // No method switch — do step/order selection
189
+ c.ialth--;
190
+ if (c.ialth === 0) {
191
+ let rhup = 0.;
192
+ if (c.nq + 1 !== maxord + 1) {
193
+ for (let i = 1; i <= neq; i++)
194
+ c.savf[i] = c.acor[i] - c.yh[maxord + 1][i];
195
+ const dup = vmnorm(neq, c.savf, c.ewt) / c.tesco[c.nq][3];
196
+ const exup = 1. / (c.nq + 2);
197
+ rhup = 1. / (1.4 * Math.pow(dup, exup) + 0.0000014);
198
+ }
199
+
200
+ osResult.rh = 0;
201
+ const orderflag = orderswitch(ctx, rhup, dsm, osResult, kflag, maxord);
202
+
203
+ if (orderflag === 0) {
204
+ endstoda();
205
+ break outer;
206
+ }
207
+ if (orderflag === 1) {
208
+ rh = Math.max(osResult.rh, hmin / Math.abs(c.h));
209
+ scaleh(ctx, rh);
210
+ c.rmax = 10.;
211
+ endstoda();
212
+ break outer;
213
+ }
214
+ if (orderflag === 2) {
215
+ resetcoeff();
216
+ rh = Math.max(osResult.rh, hmin / Math.abs(c.h));
217
+ scaleh(ctx, rh);
218
+ c.rmax = 10.;
219
+ endstoda();
220
+ break outer;
221
+ }
222
+ }
223
+
224
+ if (c.ialth > 1 || c.nq + 1 === maxord + 1) {
225
+ endstoda();
226
+ break outer;
227
+ }
228
+
229
+ for (let i = 1; i <= neq; i++)
230
+ c.yh[maxord + 1][i] = c.acor[i];
231
+ endstoda();
232
+ break outer;
233
+ } else {
234
+ // Error test failed
235
+ kflag--;
236
+ c.tn = told;
237
+
238
+ // Retract yh array
239
+ for (let j = c.nq; j >= 1; j--) {
240
+ for (let i1 = j; i1 <= c.nq; i1++) {
241
+ for (let i = 1; i <= neq; i++)
242
+ c.yh[i1][i] -= c.yh[i1 + 1][i];
243
+ }
244
+ }
245
+
246
+ c.rmax = 2.;
247
+ if (Math.abs(c.h) <= hmin * 1.00001) {
248
+ kflag = -1;
249
+ c.hold = c.h;
250
+ jstart = 1;
251
+ break outer;
252
+ }
253
+
254
+ if (kflag > -3) {
255
+ osResult.rh = 0;
256
+ const orderflag = orderswitch(ctx, 0., dsm, osResult, kflag, maxord);
257
+ if (orderflag === 1 || orderflag === 0) {
258
+ if (orderflag === 0)
259
+ osResult.rh = Math.min(osResult.rh, 0.2);
260
+ osResult.rh = Math.max(osResult.rh, hmin / Math.abs(c.h));
261
+ scaleh(ctx, osResult.rh);
262
+ }
263
+ if (orderflag === 2) {
264
+ resetcoeff();
265
+ osResult.rh = Math.max(osResult.rh, hmin / Math.abs(c.h));
266
+ scaleh(ctx, osResult.rh);
267
+ }
268
+ continue outer;
269
+ } else {
270
+ // 3 or more failures
271
+ if (kflag === -10) {
272
+ kflag = -1;
273
+ c.hold = c.h;
274
+ jstart = 1;
275
+ break outer;
276
+ } else {
277
+ rh = 0.1;
278
+ rh = Math.max(hmin / Math.abs(c.h), rh);
279
+ c.h *= rh;
280
+ for (let i = 1; i <= neq; i++)
281
+ y[i] = c.yh[1][i];
282
+ ctx.func(c.tn, y.subarray(1), c.savf.subarray(1), ctx.data);
283
+ c.nfe++;
284
+ for (let i = 1; i <= neq; i++)
285
+ c.yh[2][i] = c.h * c.savf[i];
286
+ c.ipup = c.miter;
287
+ c.ialth = 5;
288
+ if (c.nq === 1) continue outer;
289
+ c.nq = 1;
290
+ resetcoeff();
291
+ continue outer;
292
+ }
293
+ }
294
+ }
295
+ }
296
+
297
+ return kflag;
298
+ }