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,578 @@
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 { LsodaContext, LsodaCommon, ETA, } from './common';
13
+ import { vmnorm } from './blas';
14
+ import { intdy } from './intdy';
15
+ import { stoda } from './stoda';
16
+ import { DenseOutput } from './dense';
17
+ // ---- Internal helpers ----
18
+ function captureSnapshot(c, neq) {
19
+ const nq = c.nq;
20
+ const yh = new Array(nq + 1);
21
+ for (let j = 0; j <= nq; j++) {
22
+ const row = new Float64Array(neq);
23
+ for (let i = 0; i < neq; i++)
24
+ row[i] = c.yh[j + 1][i + 1]; // convert 1-based to 0-based
25
+ yh[j] = row;
26
+ }
27
+ return { tn: c.tn, h: c.h, hu: c.hu, nq, yh };
28
+ }
29
+ function ewset(ctx, ycur) {
30
+ const c = ctx.common;
31
+ const neq = ctx.neq;
32
+ const rtol = ctx.opt.rtol;
33
+ const atol = ctx.opt.atol;
34
+ for (let i = 1; i <= neq; i++)
35
+ c.ewt[i] = rtol[i] * Math.abs(ycur[i]) + atol[i];
36
+ for (let i = 1; i <= neq; i++)
37
+ c.ewt[i] = 1. / c.ewt[i];
38
+ }
39
+ function checkOpt(ctx, opt) {
40
+ const mxstp0 = 500;
41
+ const mord = [0, 12, 5];
42
+ if (ctx.state === 0)
43
+ ctx.state = 1;
44
+ if (ctx.state === 1) {
45
+ opt.h0 = 0.;
46
+ opt.mxordn = mord[1];
47
+ opt.mxords = mord[2];
48
+ }
49
+ if (ctx.neq <= 0) {
50
+ ctx.error = `[lsoda] neq = ${ctx.neq} is less than 1`;
51
+ return false;
52
+ }
53
+ // Check rtol and atol (1-indexed)
54
+ if (ctx.state === 1 || ctx.state === 3) {
55
+ for (let i = 1; i <= ctx.neq; i++) {
56
+ if (opt.rtol[i] < 0.) {
57
+ ctx.error = `[lsoda] rtol = ${opt.rtol[i]} is less than 0.`;
58
+ return false;
59
+ }
60
+ if (opt.atol[i] < 0.) {
61
+ ctx.error = `[lsoda] atol = ${opt.atol[i]} is less than 0.`;
62
+ return false;
63
+ }
64
+ }
65
+ }
66
+ if (opt.itask === 0)
67
+ opt.itask = 1;
68
+ if (opt.itask < 1 || opt.itask > 5) {
69
+ ctx.error = `[lsoda] illegal itask = ${opt.itask}`;
70
+ return false;
71
+ }
72
+ if (opt.ixpr < 0 || opt.ixpr > 1) {
73
+ ctx.error = `[lsoda] ixpr = ${opt.ixpr} is illegal`;
74
+ return false;
75
+ }
76
+ if (opt.mxstep < 0) {
77
+ ctx.error = '[lsoda] mxstep < 0';
78
+ return false;
79
+ }
80
+ if (opt.mxstep === 0)
81
+ opt.mxstep = mxstp0;
82
+ if (opt.mxhnil < 0) {
83
+ ctx.error = '[lsoda] mxhnil < 0';
84
+ return false;
85
+ }
86
+ if (ctx.state === 1) {
87
+ if (opt.mxordn < 0) {
88
+ ctx.error = `[lsoda] mxordn = ${opt.mxordn} is less than 0`;
89
+ return false;
90
+ }
91
+ if (opt.mxordn === 0)
92
+ opt.mxordn = 100;
93
+ opt.mxordn = Math.min(opt.mxordn, mord[1]);
94
+ if (opt.mxords < 0) {
95
+ ctx.error = `[lsoda] mxords = ${opt.mxords} is less than 0`;
96
+ return false;
97
+ }
98
+ if (opt.mxords === 0)
99
+ opt.mxords = 100;
100
+ opt.mxords = Math.min(opt.mxords, mord[2]);
101
+ }
102
+ if (opt.hmax < 0.) {
103
+ ctx.error = '[lsoda] hmax < 0.';
104
+ return false;
105
+ }
106
+ opt.hmxi = 0.;
107
+ if (opt.hmax > 0)
108
+ opt.hmxi = 1. / opt.hmax;
109
+ if (opt.hmin < 0.) {
110
+ ctx.error = '[lsoda] hmin < 0.';
111
+ return false;
112
+ }
113
+ return true;
114
+ }
115
+ function allocMem(ctx) {
116
+ const c = ctx.common;
117
+ const nyh = ctx.neq;
118
+ const lenyh = 1 + Math.max(ctx.opt.mxordn, ctx.opt.mxords);
119
+ // yh: array of (lenyh+1) Float64Arrays, each of size (nyh+1)
120
+ c.yh = new Array(lenyh + 1);
121
+ for (let i = 0; i <= lenyh; i++)
122
+ c.yh[i] = new Float64Array(nyh + 1);
123
+ // wm: array of (nyh+1) Float64Arrays, each of size (nyh+1)
124
+ c.wm = new Array(nyh + 1);
125
+ for (let i = 0; i <= nyh; i++)
126
+ c.wm[i] = new Float64Array(nyh + 1);
127
+ c.ewt = new Float64Array(nyh + 1);
128
+ c.savf = new Float64Array(nyh + 1);
129
+ c.acor = new Float64Array(nyh + 1);
130
+ c.ipvt = new Int32Array(nyh + 1);
131
+ // Allocate elco and tesco
132
+ c.elco = new Array(13);
133
+ for (let i = 0; i < 13; i++)
134
+ c.elco[i] = new Float64Array(14);
135
+ c.tesco = new Array(13);
136
+ for (let i = 0; i < 13; i++)
137
+ c.tesco[i] = new Float64Array(4);
138
+ return true;
139
+ }
140
+ // ---- Public API ----
141
+ /**
142
+ * Prepare a context with options. Must be called before lsoda().
143
+ * Returns true on success.
144
+ */
145
+ export function lsodaPrepare(ctx, opt) {
146
+ ctx.common = new LsodaCommon();
147
+ ctx.opt = opt;
148
+ if (!checkOpt(ctx, opt))
149
+ return false;
150
+ return allocMem(ctx);
151
+ }
152
+ /**
153
+ * Reset context for reuse with a different problem.
154
+ * All options are preserved, internal state is zeroed.
155
+ */
156
+ export function lsodaReset(ctx) {
157
+ const c = ctx.common;
158
+ // Zero all scalar state
159
+ c.h = 0;
160
+ c.hu = 0;
161
+ c.rc = 0;
162
+ c.tn = 0;
163
+ c.tsw = 0;
164
+ c.pdnorm = 0;
165
+ c.crate = 0;
166
+ c.hold = 0;
167
+ c.rmax = 0;
168
+ c.pdest = 0;
169
+ c.pdlast = 0;
170
+ c.ialth = 0;
171
+ c.ipup = 0;
172
+ c.nslp = 0;
173
+ c.icount = 0;
174
+ c.irflag = 0;
175
+ c.imxer = 0;
176
+ c.illin = 0;
177
+ c.nhnil = 0;
178
+ c.nslast = 0;
179
+ c.jcur = 0;
180
+ c.meth = 0;
181
+ c.mused = 0;
182
+ c.nq = 0;
183
+ c.nst = 0;
184
+ c.ncf = 0;
185
+ c.nfe = 0;
186
+ c.nje = 0;
187
+ c.nqu = 0;
188
+ c.miter = 0;
189
+ c.el.fill(0);
190
+ // Zero arrays
191
+ for (let i = 0; i < c.yh.length; i++)
192
+ c.yh[i].fill(0);
193
+ for (let i = 0; i < c.wm.length; i++)
194
+ c.wm[i].fill(0);
195
+ c.ewt.fill(0);
196
+ c.savf.fill(0);
197
+ c.acor.fill(0);
198
+ c.ipvt.fill(0);
199
+ for (let i = 0; i < c.elco.length; i++)
200
+ c.elco[i].fill(0);
201
+ for (let i = 0; i < c.tesco.length; i++)
202
+ c.tesco[i].fill(0);
203
+ ctx.state = 1;
204
+ ctx.error = null;
205
+ }
206
+ /**
207
+ * Free context resources. In JS/TS, this is mostly a no-op (GC handles it).
208
+ */
209
+ export function lsodaFree(ctx) {
210
+ if (ctx.error)
211
+ console.error(`unhandled error message: ${ctx.error}`);
212
+ ctx.common = null;
213
+ }
214
+ /**
215
+ * Main solver. Integrates from t towards tout.
216
+ * y: 1-indexed Float64Array (y[0] unused, y[1..neq] are state values)
217
+ * Returns { t, state } — updated time and solver state.
218
+ */
219
+ export function lsoda(ctx, y, tIn, tout) {
220
+ const c = ctx.common;
221
+ const opt = ctx.opt;
222
+ const neq = ctx.neq;
223
+ let t = tIn;
224
+ let kflag;
225
+ let jstart = 0;
226
+ let ihit = 0;
227
+ // Helper functions matching C macros
228
+ function hardfailure(msg) {
229
+ ctx.error = msg;
230
+ ctx.state = -3;
231
+ return { t, state: ctx.state };
232
+ }
233
+ function softfailure(code, msg) {
234
+ ctx.error = msg;
235
+ for (let i = 1; i <= neq; i++)
236
+ y[i] = c.yh[1][i];
237
+ t = c.tn;
238
+ ctx.state = code;
239
+ return { t, state: ctx.state };
240
+ }
241
+ function successreturn() {
242
+ for (let i = 1; i <= neq; i++)
243
+ y[i] = c.yh[1][i];
244
+ t = c.tn;
245
+ if (itask === 4 || itask === 5) {
246
+ if (ihit)
247
+ t = tcrit;
248
+ }
249
+ ctx.state = 2;
250
+ return { t, state: ctx.state };
251
+ }
252
+ function intdyreturn() {
253
+ const iflag = intdy(ctx, tout, 0, y);
254
+ if (iflag !== 0) {
255
+ ctx.error = `[lsoda] trouble from intdy, itask = ${itask}, tout = ${tout}`;
256
+ for (let i = 1; i <= neq; i++)
257
+ y[i] = c.yh[1][i];
258
+ t = c.tn;
259
+ }
260
+ t = tout;
261
+ ctx.state = 2;
262
+ return { t, state: ctx.state };
263
+ }
264
+ if (c === null)
265
+ return hardfailure('[lsoda] illegal common block did you call lsoda_prepare?');
266
+ // Block b: initial/continuation call setup
267
+ let h0 = 0;
268
+ let tcrit = 0;
269
+ const rtol = opt.rtol;
270
+ const atol = opt.atol;
271
+ if (ctx.state === 1 || ctx.state === 3) {
272
+ h0 = opt.h0;
273
+ if (ctx.state === 1) {
274
+ if ((tout - t) * h0 < 0.)
275
+ return hardfailure(`[lsoda] tout = ${tout} behind t = ${t}. integration direction is given by ${h0}`);
276
+ }
277
+ }
278
+ const itask = opt.itask;
279
+ if (ctx.state === 3)
280
+ jstart = -1;
281
+ // Block c: initial call only (state == 1)
282
+ if (ctx.state === 1) {
283
+ c.meth = 1;
284
+ c.tn = t;
285
+ c.tsw = t;
286
+ if (itask === 4 || itask === 5) {
287
+ tcrit = opt.tcrit;
288
+ if ((tcrit - tout) * (tout - t) < 0.)
289
+ return hardfailure('[lsoda] itask = 4 or 5 and tcrit behind tout');
290
+ if (h0 !== 0. && (t + h0 - tcrit) * h0 > 0.)
291
+ h0 = tcrit - t;
292
+ }
293
+ jstart = 0;
294
+ c.nq = 1;
295
+ // Initial call to f
296
+ ctx.func(t, y.subarray(1), c.yh[2].subarray(1), ctx.data);
297
+ c.nfe = 1;
298
+ // Load initial value vector
299
+ for (let i = 1; i <= neq; i++)
300
+ c.yh[1][i] = y[i];
301
+ // Load and invert ewt
302
+ ewset(ctx, y);
303
+ for (let i = 1; i <= neq; i++) {
304
+ if (c.ewt[i] <= 0.)
305
+ return hardfailure(`[lsoda] ewt[${i}] = ${c.ewt[i]} <= 0.`);
306
+ }
307
+ // Compute initial step size h0 if not given
308
+ if (h0 === 0.) {
309
+ const tdist = Math.abs(tout - t);
310
+ const w0 = Math.max(Math.abs(t), Math.abs(tout));
311
+ if (tdist < 2. * ETA * w0)
312
+ return hardfailure('[lsoda] tout too close to t to start integration');
313
+ let tol = 0.;
314
+ for (let i = 1; i <= neq; i++)
315
+ tol = Math.max(tol, rtol[i]);
316
+ if (tol <= 0.) {
317
+ for (let i = 1; i <= neq; i++) {
318
+ const atoli = atol[i];
319
+ const ayi = Math.abs(y[i]);
320
+ if (ayi !== 0.)
321
+ tol = Math.max(tol, atoli / ayi);
322
+ }
323
+ }
324
+ tol = Math.max(tol, 100. * ETA);
325
+ tol = Math.min(tol, 0.001);
326
+ const sum = vmnorm(neq, c.yh[2], c.ewt);
327
+ const sumSq = 1. / (tol * w0 * w0) + tol * sum * sum;
328
+ h0 = 1. / Math.sqrt(sumSq);
329
+ h0 = Math.min(h0, tdist);
330
+ h0 = h0 * ((tout - t >= 0.) ? 1. : -1.);
331
+ }
332
+ // Adjust h0 for hmax
333
+ const rh = Math.abs(h0) * opt.hmxi;
334
+ if (rh > 1.)
335
+ h0 /= rh;
336
+ // Load h and scale yh[2]
337
+ c.h = h0;
338
+ for (let i = 1; i <= neq; i++)
339
+ c.yh[2][i] *= h0;
340
+ }
341
+ // Block d: continuation calls (state == 2 or 3)
342
+ if (ctx.state === 2 || ctx.state === 3) {
343
+ jstart = 1;
344
+ c.nslast = c.nst;
345
+ switch (itask) {
346
+ case 1:
347
+ if ((c.tn - tout) * c.h >= 0.)
348
+ return intdyreturn();
349
+ break;
350
+ case 2:
351
+ break;
352
+ case 3: {
353
+ const tp = c.tn - c.hu * (1. + 100. * ETA);
354
+ if ((tp - tout) * c.h > 0.)
355
+ return hardfailure(`[lsoda] itask = ${itask} and tout behind tcur - hu`);
356
+ if ((c.tn - tout) * c.h < 0.)
357
+ break;
358
+ return successreturn();
359
+ }
360
+ case 4:
361
+ tcrit = opt.tcrit;
362
+ if ((c.tn - tcrit) * c.h > 0.)
363
+ return hardfailure('[lsoda] itask = 4 or 5 and tcrit behind tcur');
364
+ if ((tcrit - tout) * c.h < 0.)
365
+ return hardfailure('[lsoda] itask = 4 or 5 and tcrit behind tout');
366
+ if ((c.tn - tout) * c.h >= 0.)
367
+ return intdyreturn();
368
+ // fall through to case 5 logic
369
+ // eslint-disable-next-line no-fallthrough
370
+ case 5:
371
+ if (itask === 5) {
372
+ tcrit = opt.tcrit;
373
+ if ((c.tn - tcrit) * c.h > 0.)
374
+ return hardfailure('[lsoda] itask = 4 or 5 and tcrit behind tcur');
375
+ }
376
+ {
377
+ const hmx = Math.abs(c.tn) + Math.abs(c.h);
378
+ ihit = Math.abs(c.tn - tcrit) <= (100. * ETA * hmx) ? 1 : 0;
379
+ if (ihit) {
380
+ t = tcrit;
381
+ return successreturn();
382
+ }
383
+ const tnext = c.tn + c.h * (1. + 4. * ETA);
384
+ if ((tnext - tcrit) * c.h <= 0.)
385
+ break;
386
+ c.h = (tcrit - c.tn) * (1. - 4. * ETA);
387
+ if (ctx.state === 2)
388
+ jstart = -2;
389
+ }
390
+ break;
391
+ }
392
+ }
393
+ // Block e: main integration loop
394
+ while (true) {
395
+ if (ctx.state !== 1 || c.nst !== 0) {
396
+ if ((c.nst - c.nslast) >= opt.mxstep)
397
+ return softfailure(-1, `[lsoda] ${opt.mxstep} steps taken before reaching tout`);
398
+ ewset(ctx, c.yh[1]);
399
+ for (let i = 1; i <= neq; i++) {
400
+ if (c.ewt[i] <= 0.)
401
+ return softfailure(-6, `[lsoda] ewt[${i}] = ${c.ewt[i]} <= 0.`);
402
+ }
403
+ }
404
+ const tolsf = ETA * vmnorm(neq, c.yh[1], c.ewt);
405
+ if (tolsf > 0.01) {
406
+ const scaled = tolsf * 200.;
407
+ if (c.nst === 0) {
408
+ return hardfailure('lsoda -- at start of problem, too much accuracy requested' +
409
+ ` for precision of machine, suggested scaling factor = ${scaled}`);
410
+ }
411
+ return softfailure(-2, `lsoda -- at t = ${t}, too much accuracy requested` +
412
+ ` for precision of machine, suggested scaling factor = ${scaled}`);
413
+ }
414
+ if ((c.tn + c.h) === c.tn) {
415
+ c.nhnil++;
416
+ if (c.nhnil <= opt.mxhnil) {
417
+ console.error(`lsoda -- warning..internal t = ${c.tn} and h = ${c.h} are` +
418
+ ' such that t + h = t on the next step');
419
+ if (c.nhnil === opt.mxhnil) {
420
+ console.error(`lsoda -- above warning has been issued ${c.nhnil}` +
421
+ ' times, it will not be issued again for this problem');
422
+ }
423
+ }
424
+ }
425
+ // Call stoda
426
+ kflag = stoda(ctx, y, jstart);
427
+ if (kflag === 0) {
428
+ // Block f: successful return from stoda
429
+ // Dense output: capture snapshot
430
+ if (ctx.snapshots)
431
+ ctx.snapshots.push(captureSnapshot(c, neq));
432
+ jstart = 1;
433
+ if (c.meth !== c.mused) {
434
+ c.tsw = c.tn;
435
+ jstart = -1;
436
+ if (opt.ixpr) {
437
+ if (c.meth === 2) {
438
+ console.error('[lsoda] a switch to the stiff method has occurred' +
439
+ ` at t = ${c.tn}, tentative step size h = ${c.h}, step nst = ${c.nst}`);
440
+ }
441
+ if (c.meth === 1) {
442
+ console.error('[lsoda] a switch to the nonstiff method has occurred' +
443
+ ` at t = ${c.tn}, tentative step size h = ${c.h}, step nst = ${c.nst}`);
444
+ }
445
+ }
446
+ }
447
+ if (itask === 1) {
448
+ if ((c.tn - tout) * c.h < 0.)
449
+ continue;
450
+ return intdyreturn();
451
+ }
452
+ if (itask === 2)
453
+ return successreturn();
454
+ if (itask === 3) {
455
+ if ((c.tn - tout) * c.h >= 0.)
456
+ return successreturn();
457
+ continue;
458
+ }
459
+ if (itask === 4) {
460
+ tcrit = opt.tcrit;
461
+ if ((c.tn - tout) * c.h >= 0.)
462
+ return intdyreturn();
463
+ else {
464
+ const hmx = Math.abs(c.tn) + Math.abs(c.h);
465
+ ihit = Math.abs(c.tn - tcrit) <= (100. * ETA * hmx) ? 1 : 0;
466
+ if (ihit)
467
+ return successreturn();
468
+ const tnext = c.tn + c.h * (1. + 4. * ETA);
469
+ if ((tnext - tcrit) * c.h <= 0.)
470
+ continue;
471
+ c.h = (tcrit - c.tn) * (1. - 4. * ETA);
472
+ jstart = -2;
473
+ continue;
474
+ }
475
+ }
476
+ if (itask === 5) {
477
+ tcrit = opt.tcrit;
478
+ const hmx = Math.abs(c.tn) + Math.abs(c.h);
479
+ ihit = Math.abs(c.tn - tcrit) <= (100. * ETA * hmx) ? 1 : 0;
480
+ return successreturn();
481
+ }
482
+ }
483
+ // kflag == -1 or -2: error test / convergence failures
484
+ if (kflag === -1 || kflag === -2) {
485
+ let big = 0.;
486
+ c.imxer = 1;
487
+ for (let i = 1; i <= neq; i++) {
488
+ const size = Math.abs(c.acor[i]) * c.ewt[i];
489
+ if (big < size) {
490
+ big = size;
491
+ c.imxer = i;
492
+ }
493
+ }
494
+ if (kflag === -1) {
495
+ return softfailure(-4, `lsoda -- at t = ${c.tn} and step size h = ${c.h},` +
496
+ ' the error test failed repeatedly or with abs(h) = hmin');
497
+ }
498
+ if (kflag === -2) {
499
+ return softfailure(-5, `lsoda -- at t = ${c.tn} and step size h = ${c.h},` +
500
+ ' the corrector convergence failed repeatedly or with abs(h) = hmin');
501
+ }
502
+ }
503
+ }
504
+ }
505
+ /**
506
+ * High-level LSODA solver class with 0-based public interface.
507
+ */
508
+ export class Lsoda {
509
+ constructor(f, neq, opt, data) {
510
+ this.denseEnabled = false;
511
+ // Wrap user's 0-based function to internal 1-based convention
512
+ const wrappedFunc = (t, y, ydot, data) => {
513
+ return f(t, y, ydot, data);
514
+ };
515
+ this.ctx = new LsodaContext(wrappedFunc, neq, data);
516
+ this.internalY = new Float64Array(neq + 1); // 1-indexed
517
+ // Build full options with defaults
518
+ const fullOpt = Object.assign({ ixpr: 0, mxstep: 0, mxhnil: 0, mxordn: 0, mxords: 0, tcrit: 0, h0: 0, hmax: 0, hmin: 0, hmxi: 0, itask: 1, rtol: new Float64Array(neq + 1), atol: new Float64Array(neq + 1) }, opt);
519
+ // If rtol/atol provided as partial, make sure they're 1-indexed Float64Arrays
520
+ if (opt === null || opt === void 0 ? void 0 : opt.rtol) {
521
+ if (opt.rtol.length === neq) {
522
+ // User provided 0-based, convert to 1-based
523
+ const r = new Float64Array(neq + 1);
524
+ for (let i = 0; i < neq; i++)
525
+ r[i + 1] = opt.rtol[i];
526
+ fullOpt.rtol = r;
527
+ }
528
+ else
529
+ fullOpt.rtol = opt.rtol;
530
+ }
531
+ if (opt === null || opt === void 0 ? void 0 : opt.atol) {
532
+ if (opt.atol.length === neq) {
533
+ const a = new Float64Array(neq + 1);
534
+ for (let i = 0; i < neq; i++)
535
+ a[i + 1] = opt.atol[i];
536
+ fullOpt.atol = a;
537
+ }
538
+ else
539
+ fullOpt.atol = opt.atol;
540
+ }
541
+ lsodaPrepare(this.ctx, fullOpt);
542
+ if (opt === null || opt === void 0 ? void 0 : opt.dense) {
543
+ this.denseEnabled = true;
544
+ this.ctx.snapshots = [];
545
+ }
546
+ }
547
+ /**
548
+ * Integrate from current t to tout.
549
+ * y: 0-based array of state values.
550
+ * Returns updated { y, t }.
551
+ */
552
+ solve(y, t, tout) {
553
+ const neq = this.ctx.neq;
554
+ // Copy 0-based user y into 1-based internal array
555
+ for (let i = 0; i < neq; i++)
556
+ this.internalY[i + 1] = y[i];
557
+ const result = lsoda(this.ctx, this.internalY, t, tout);
558
+ // Copy back to 0-based
559
+ const out = new Float64Array(neq);
560
+ for (let i = 0; i < neq; i++)
561
+ out[i] = this.internalY[i + 1];
562
+ return { y: out, t: result.t };
563
+ }
564
+ get state() { return this.ctx.state; }
565
+ get error() { return this.ctx.error; }
566
+ /** Returns a DenseOutput interpolator from collected snapshots. */
567
+ getDenseOutput() {
568
+ if (!this.ctx.snapshots || this.ctx.snapshots.length === 0)
569
+ throw new Error('[Lsoda] dense output not enabled or no steps taken — pass { dense: true } in options');
570
+ return new DenseOutput(this.ctx.snapshots, this.ctx.neq);
571
+ }
572
+ reset() {
573
+ lsodaReset(this.ctx);
574
+ if (this.denseEnabled)
575
+ this.ctx.snapshots = [];
576
+ }
577
+ }
578
+ //# sourceMappingURL=lsoda.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsoda.js","sourceRoot":"","sources":["lsoda.ts"],"names":[],"mappings":"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"}