diff-grok 1.0.10 → 1.1.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 (212) hide show
  1. package/.claude/settings.local.json +11 -0
  2. package/CLAUDE.md +98 -0
  3. package/README.MD +100 -24
  4. package/images/E5.png +0 -0
  5. package/images/HIRES.png +0 -0
  6. package/images/OREGO.png +0 -0
  7. package/images/POLL-full.png +0 -0
  8. package/images/ROBER.png +0 -0
  9. package/images/VDP0L.png +0 -0
  10. package/index.js +1 -1
  11. package/index.js.map +1 -1
  12. package/index.ts +2 -1
  13. package/jest.config.js +1 -0
  14. package/package.json +1 -1
  15. package/src/examples/bioreactor.js +125 -0
  16. package/src/examples/bioreactor.js.map +1 -0
  17. package/src/examples/bioreactor.ts +132 -0
  18. package/src/examples/cyclic-model.js +3 -1
  19. package/src/examples/cyclic-model.js.map +1 -1
  20. package/src/examples/cyclic-model.ts +3 -1
  21. package/src/solver-tools/ab4-method.js +332 -0
  22. package/src/solver-tools/ab4-method.js.map +1 -0
  23. package/src/solver-tools/ab4-method.ts +395 -0
  24. package/src/solver-tools/ab5-method.js +334 -0
  25. package/src/solver-tools/ab5-method.js.map +1 -0
  26. package/src/solver-tools/ab5-method.ts +397 -0
  27. package/src/solver-tools/index.js +6 -0
  28. package/src/solver-tools/index.js.map +1 -1
  29. package/src/solver-tools/index.ts +6 -0
  30. package/src/solver-tools/lsoda/blas.js +246 -0
  31. package/src/solver-tools/lsoda/blas.js.map +1 -0
  32. package/src/solver-tools/lsoda/blas.ts +267 -0
  33. package/src/solver-tools/lsoda/cfode.js +73 -0
  34. package/src/solver-tools/lsoda/cfode.js.map +1 -0
  35. package/src/solver-tools/lsoda/cfode.ts +83 -0
  36. package/src/solver-tools/lsoda/common.js +94 -0
  37. package/src/solver-tools/lsoda/common.js.map +1 -0
  38. package/src/solver-tools/lsoda/common.ts +135 -0
  39. package/src/solver-tools/lsoda/corfailure.js +25 -0
  40. package/src/solver-tools/lsoda/corfailure.js.map +1 -0
  41. package/src/solver-tools/lsoda/corfailure.ts +30 -0
  42. package/src/solver-tools/lsoda/correction.js +101 -0
  43. package/src/solver-tools/lsoda/correction.js.map +1 -0
  44. package/src/solver-tools/lsoda/correction.ts +119 -0
  45. package/src/solver-tools/lsoda/dense.js +110 -0
  46. package/src/solver-tools/lsoda/dense.js.map +1 -0
  47. package/src/solver-tools/lsoda/dense.ts +129 -0
  48. package/src/solver-tools/lsoda/index.js +4 -0
  49. package/src/solver-tools/lsoda/index.js.map +1 -0
  50. package/src/solver-tools/lsoda/index.ts +5 -0
  51. package/src/solver-tools/lsoda/intdy.js +43 -0
  52. package/src/solver-tools/lsoda/intdy.js.map +1 -0
  53. package/src/solver-tools/lsoda/intdy.ts +50 -0
  54. package/src/solver-tools/lsoda/lsoda.js +567 -0
  55. package/src/solver-tools/lsoda/lsoda.js.map +1 -0
  56. package/src/solver-tools/lsoda/lsoda.ts +632 -0
  57. package/src/solver-tools/lsoda/methodswitch.js +97 -0
  58. package/src/solver-tools/lsoda/methodswitch.js.map +1 -0
  59. package/src/solver-tools/lsoda/methodswitch.ts +107 -0
  60. package/src/solver-tools/lsoda/orderswitch.js +86 -0
  61. package/src/solver-tools/lsoda/orderswitch.js.map +1 -0
  62. package/src/solver-tools/lsoda/orderswitch.ts +95 -0
  63. package/src/solver-tools/lsoda/prja.js +43 -0
  64. package/src/solver-tools/lsoda/prja.js.map +1 -0
  65. package/src/solver-tools/lsoda/prja.ts +49 -0
  66. package/src/solver-tools/lsoda/scaleh.js +30 -0
  67. package/src/solver-tools/lsoda/scaleh.js.map +1 -0
  68. package/src/solver-tools/lsoda/scaleh.ts +33 -0
  69. package/src/solver-tools/lsoda/solsy.js +14 -0
  70. package/src/solver-tools/lsoda/solsy.js.map +1 -0
  71. package/src/solver-tools/lsoda/solsy.ts +18 -0
  72. package/src/solver-tools/lsoda/stoda.js +259 -0
  73. package/src/solver-tools/lsoda/stoda.js.map +1 -0
  74. package/src/solver-tools/lsoda/stoda.ts +286 -0
  75. package/src/solver-tools/lsoda-method.js +120 -0
  76. package/src/solver-tools/lsoda-method.js.map +1 -0
  77. package/src/solver-tools/lsoda-method.ts +136 -0
  78. package/src/solver-tools/mrt-method.js +81 -18
  79. package/src/solver-tools/mrt-method.js.map +1 -1
  80. package/src/solver-tools/mrt-method.ts +111 -21
  81. package/src/solver-tools/rk3-method.js +210 -0
  82. package/src/solver-tools/rk3-method.js.map +1 -0
  83. package/src/solver-tools/rk3-method.ts +257 -0
  84. package/src/solver-tools/rk4-method.js +236 -0
  85. package/src/solver-tools/rk4-method.js.map +1 -0
  86. package/src/solver-tools/rk4-method.ts +286 -0
  87. package/src/solver-tools/rkdp-method.js +247 -0
  88. package/src/solver-tools/rkdp-method.js.map +1 -0
  89. package/src/solver-tools/rkdp-method.ts +300 -0
  90. package/src/solver-tools/ros34prw-method.js +1 -1
  91. package/src/solver-tools/ros34prw-method.js.map +1 -1
  92. package/src/solver-tools/ros34prw-method.ts +1 -1
  93. package/src/solver-tools/ros3prw-method.js +1 -1
  94. package/src/solver-tools/ros3prw-method.js.map +1 -1
  95. package/src/solver-tools/ros3prw-method.ts +1 -1
  96. package/src/solver-tools/solver-defs.js +6 -0
  97. package/src/solver-tools/solver-defs.js.map +1 -1
  98. package/src/solver-tools/solver-defs.ts +6 -0
  99. package/src/tests/correctness.test.js +6 -4
  100. package/src/tests/correctness.test.js.map +1 -1
  101. package/src/tests/correctness.test.ts +6 -4
  102. package/src/tests/lsoda-lib-correctness.test.js +223 -0
  103. package/src/tests/lsoda-lib-correctness.test.js.map +1 -0
  104. package/src/tests/lsoda-lib-correctness.test.ts +283 -0
  105. package/src/tests/lsoda-lib-performance.test.js +95 -0
  106. package/src/tests/lsoda-lib-performance.test.js.map +1 -0
  107. package/src/tests/lsoda-lib-performance.test.ts +126 -0
  108. package/src/tests/performance.test.js +10 -8
  109. package/src/tests/performance.test.js.map +1 -1
  110. package/src/tests/performance.test.ts +10 -8
  111. package/src/tests/test-defs.js +14 -1
  112. package/src/tests/test-defs.js.map +1 -1
  113. package/src/tests/test-defs.ts +15 -1
  114. package/src/worker-tools/solving.js +13 -1
  115. package/src/worker-tools/solving.js.map +1 -1
  116. package/src/worker-tools/solving.ts +20 -1
  117. package/docs/.nojekyll +0 -1
  118. package/docs/assets/hierarchy.js +0 -1
  119. package/docs/assets/highlight.css +0 -99
  120. package/docs/assets/icons.js +0 -18
  121. package/docs/assets/icons.svg +0 -1
  122. package/docs/assets/main.js +0 -60
  123. package/docs/assets/navigation.js +0 -1
  124. package/docs/assets/search.js +0 -1
  125. package/docs/assets/style.css +0 -1633
  126. package/docs/classes/BasicModelPipelineCreator.html +0 -10
  127. package/docs/classes/Callback.html +0 -7
  128. package/docs/classes/CyclicModelPipelineCreator.html +0 -10
  129. package/docs/classes/IterCheckerCallback.html +0 -8
  130. package/docs/classes/PipelineCreator.html +0 -6
  131. package/docs/classes/TimeCheckerCallback.html +0 -8
  132. package/docs/classes/UpdatesModelPipelineCreator.html +0 -10
  133. package/docs/functions/applyPipeline.html +0 -9
  134. package/docs/functions/getCallback.html +0 -3
  135. package/docs/functions/getIVP.html +0 -6
  136. package/docs/functions/getInputVector.html +0 -2
  137. package/docs/functions/getIvp2WebWorker.html +0 -6
  138. package/docs/functions/getJScode.html +0 -6
  139. package/docs/functions/getOutputNames.html +0 -4
  140. package/docs/functions/getPipelineCreator.html +0 -7
  141. package/docs/functions/mrt.html +0 -11
  142. package/docs/functions/printE5.html +0 -76
  143. package/docs/functions/printHires.html +0 -76
  144. package/docs/functions/printOrego.html +0 -66
  145. package/docs/functions/printPollution.html +0 -163
  146. package/docs/functions/printRobertson.html +0 -60
  147. package/docs/functions/printVdpol.html +0 -66
  148. package/docs/functions/ros34prw.html +0 -8
  149. package/docs/functions/ros3prw.html +0 -8
  150. package/docs/functions/solveIvp.html +0 -5
  151. package/docs/hierarchy.html +0 -1
  152. package/docs/index.html +0 -683
  153. package/docs/media/CONTRIBUTING.md +0 -74
  154. package/docs/media/POLL.png +0 -0
  155. package/docs/media/VDPOL.png +0 -0
  156. package/docs/media/acid-prod.gif +0 -0
  157. package/docs/media/basic-use.js +0 -40
  158. package/docs/media/basic-use.js.map +0 -1
  159. package/docs/media/basic-use.ts +0 -44
  160. package/docs/media/check-methods.js +0 -59
  161. package/docs/media/check-methods.js.map +0 -1
  162. package/docs/media/check-methods.ts +0 -81
  163. package/docs/media/corr-probs.js +0 -132
  164. package/docs/media/corr-probs.js.map +0 -1
  165. package/docs/media/corr-probs.ts +0 -155
  166. package/docs/media/cyclic-model.js +0 -100
  167. package/docs/media/cyclic-model.js.map +0 -1
  168. package/docs/media/cyclic-model.ts +0 -110
  169. package/docs/media/e5.js +0 -36
  170. package/docs/media/e5.js.map +0 -1
  171. package/docs/media/e5.ts +0 -36
  172. package/docs/media/hires.js +0 -39
  173. package/docs/media/hires.js.map +0 -1
  174. package/docs/media/hires.ts +0 -40
  175. package/docs/media/model-updates.js +0 -112
  176. package/docs/media/model-updates.js.map +0 -1
  177. package/docs/media/model-updates.ts +0 -122
  178. package/docs/media/orego.js +0 -24
  179. package/docs/media/orego.js.map +0 -1
  180. package/docs/media/orego.ts +0 -25
  181. package/docs/media/pipeline-use.js +0 -87
  182. package/docs/media/pipeline-use.js.map +0 -1
  183. package/docs/media/pipeline-use.ts +0 -98
  184. package/docs/media/pollution.js +0 -132
  185. package/docs/media/pollution.js.map +0 -1
  186. package/docs/media/pollution.ts +0 -133
  187. package/docs/media/print-benchmark.js +0 -581
  188. package/docs/media/print-benchmark.js.map +0 -1
  189. package/docs/media/print-benchmark.ts +0 -594
  190. package/docs/media/robertson.js +0 -19
  191. package/docs/media/robertson.js.map +0 -1
  192. package/docs/media/robertson.ts +0 -19
  193. package/docs/media/scripting.js +0 -30
  194. package/docs/media/scripting.js.map +0 -1
  195. package/docs/media/scripting.ts +0 -35
  196. package/docs/media/vdpol.js +0 -17
  197. package/docs/media/vdpol.js.map +0 -1
  198. package/docs/media/vdpol.ts +0 -17
  199. package/docs/modules.html +0 -1
  200. package/docs/types/Arg.html +0 -12
  201. package/docs/types/DifEqs.html +0 -8
  202. package/docs/types/Func.html +0 -7
  203. package/docs/types/IVP.html +0 -40
  204. package/docs/types/IVP2WebWorker.html +0 -12
  205. package/docs/types/Input.html +0 -8
  206. package/docs/types/Loop.html +0 -7
  207. package/docs/types/ODEs.html +0 -31
  208. package/docs/types/Output.html +0 -6
  209. package/docs/types/Pipeline.html +0 -6
  210. package/docs/types/SolverOptions.html +0 -8
  211. package/docs/types/Update.html +0 -9
  212. package/docs/types/Wrapper.html +0 -8
@@ -0,0 +1,259 @@
1
+ import { CCMAX, MSBP } from './common';
2
+ import { vmnorm } from './blas';
3
+ import { cfode } from './cfode';
4
+ import { scaleh } from './scaleh';
5
+ import { correction } from './correction';
6
+ import { orderswitch } from './orderswitch';
7
+ import { methodswitch } from './methodswitch';
8
+ /**
9
+ * Perform one step of the integration.
10
+ *
11
+ * jstart: 0 = first step, >0 = continue, -1 = new h/meth/miter, -2 = new h only
12
+ * Returns kflag: 0 = success, -1 = error test failed, -2 = convergence failed.
13
+ */
14
+ export function stoda(ctx, y, jstart) {
15
+ const c = ctx.common;
16
+ const hmin = ctx.opt.hmin;
17
+ const mxords = ctx.opt.mxords;
18
+ const mxordn = ctx.opt.mxordn;
19
+ const neq = ctx.neq;
20
+ let kflag = 0;
21
+ const told = c.tn;
22
+ c.ncf = 0;
23
+ let delp = 0.;
24
+ let maxord = mxordn;
25
+ if (c.meth === 2)
26
+ maxord = mxords;
27
+ // Helper: endstoda — finalize step, scale acor
28
+ function endstoda() {
29
+ const r = 1. / c.tesco[c.nqu][2];
30
+ for (let i = 1; i <= neq; i++)
31
+ c.acor[i] *= r;
32
+ c.hold = c.h;
33
+ }
34
+ // Helper: resetcoeff — reload el from elco for current order
35
+ function resetcoeff() {
36
+ const el0 = c.el[1];
37
+ for (let i = 1; i <= c.nq + 1; i++)
38
+ c.el[i] = c.elco[c.nq][i];
39
+ c.rc = c.rc * c.el[1] / el0;
40
+ }
41
+ // --- Initialization based on jstart ---
42
+ if (jstart === 0) {
43
+ c.nq = 1;
44
+ c.ialth = 2;
45
+ c.rmax = 10000.;
46
+ c.rc = 0.;
47
+ c.crate = 0.7;
48
+ c.hold = c.h;
49
+ c.nslp = 0;
50
+ c.ipup = c.miter;
51
+ c.el[1] = 1.0;
52
+ c.icount = 20;
53
+ c.irflag = 0;
54
+ c.pdest = 0.;
55
+ c.pdlast = 0.;
56
+ cfode(ctx, 1);
57
+ resetcoeff();
58
+ }
59
+ if (jstart === -1) {
60
+ c.ipup = c.miter;
61
+ if (c.ialth === 1)
62
+ c.ialth = 2;
63
+ if (c.meth !== c.mused) {
64
+ cfode(ctx, c.meth);
65
+ c.ialth = c.nq + 1;
66
+ resetcoeff();
67
+ }
68
+ if (c.h !== c.hold) {
69
+ const rh = c.h / c.hold;
70
+ c.h = c.hold;
71
+ scaleh(ctx, rh);
72
+ }
73
+ }
74
+ if (jstart === -2) {
75
+ if (c.h !== c.hold) {
76
+ const rh = c.h / c.hold;
77
+ c.h = c.hold;
78
+ scaleh(ctx, rh);
79
+ }
80
+ }
81
+ // --- Main integration loop ---
82
+ let dsm = 0.0;
83
+ const cs = { del: 0, delp: delp, m: 0 };
84
+ const osResult = { rh: 0 };
85
+ const msResult = { rh: 0 };
86
+ let rh;
87
+ outer: while (true) {
88
+ // Before the corrector starts
89
+ c.jcur = 0;
90
+ inner: while (true) {
91
+ if (Math.abs(c.rc - 1.) > CCMAX)
92
+ c.ipup = c.miter;
93
+ if (c.nst >= c.nslp + MSBP)
94
+ c.ipup = c.miter;
95
+ c.tn += c.h;
96
+ // Prediction: multiply yh by Pascal triangle matrix
97
+ for (let j = c.nq; j >= 1; j--) {
98
+ for (let i1 = j; i1 <= c.nq; i1++) {
99
+ for (let i = 1; i <= neq; i++)
100
+ c.yh[i1][i] += c.yh[i1 + 1][i];
101
+ }
102
+ }
103
+ const pnorm = vmnorm(neq, c.yh[1], c.ewt);
104
+ cs.del = 0;
105
+ cs.delp = delp;
106
+ cs.m = 0;
107
+ const corflag = correction(ctx, y, pnorm, cs, told);
108
+ delp = cs.delp;
109
+ if (corflag === 0)
110
+ break inner;
111
+ if (corflag === 1) {
112
+ rh = Math.max(0.25, hmin / Math.abs(c.h));
113
+ scaleh(ctx, rh);
114
+ continue inner;
115
+ }
116
+ if (corflag === 2) {
117
+ kflag = -2;
118
+ c.hold = c.h;
119
+ jstart = 1;
120
+ return kflag;
121
+ }
122
+ }
123
+ // Local error test
124
+ if (cs.m === 0)
125
+ dsm = cs.del / c.tesco[c.nq][2];
126
+ if (cs.m > 0)
127
+ dsm = vmnorm(neq, c.acor, c.ewt) / c.tesco[c.nq][2];
128
+ if (dsm <= 1.) {
129
+ // Successful step
130
+ kflag = 0;
131
+ c.nst++;
132
+ c.hu = c.h;
133
+ c.nqu = c.nq;
134
+ c.mused = c.meth;
135
+ for (let j = 1; j <= c.nq + 1; j++) {
136
+ const r = c.el[j];
137
+ for (let i = 1; i <= neq; i++)
138
+ c.yh[j][i] += r * c.acor[i];
139
+ }
140
+ c.icount--;
141
+ if (c.icount < 0) {
142
+ msResult.rh = 0;
143
+ methodswitch(ctx, dsm, vmnorm(neq, c.yh[1], c.ewt), msResult);
144
+ if (c.meth !== c.mused) {
145
+ rh = Math.max(msResult.rh, hmin / Math.abs(c.h));
146
+ scaleh(ctx, rh);
147
+ c.rmax = 10.;
148
+ endstoda();
149
+ break outer;
150
+ }
151
+ }
152
+ // No method switch — do step/order selection
153
+ c.ialth--;
154
+ if (c.ialth === 0) {
155
+ let rhup = 0.;
156
+ if (c.nq + 1 !== maxord + 1) {
157
+ for (let i = 1; i <= neq; i++)
158
+ c.savf[i] = c.acor[i] - c.yh[maxord + 1][i];
159
+ const dup = vmnorm(neq, c.savf, c.ewt) / c.tesco[c.nq][3];
160
+ const exup = 1. / (c.nq + 2);
161
+ rhup = 1. / (1.4 * Math.pow(dup, exup) + 0.0000014);
162
+ }
163
+ osResult.rh = 0;
164
+ const orderflag = orderswitch(ctx, rhup, dsm, osResult, kflag, maxord);
165
+ if (orderflag === 0) {
166
+ endstoda();
167
+ break outer;
168
+ }
169
+ if (orderflag === 1) {
170
+ rh = Math.max(osResult.rh, hmin / Math.abs(c.h));
171
+ scaleh(ctx, rh);
172
+ c.rmax = 10.;
173
+ endstoda();
174
+ break outer;
175
+ }
176
+ if (orderflag === 2) {
177
+ resetcoeff();
178
+ rh = Math.max(osResult.rh, hmin / Math.abs(c.h));
179
+ scaleh(ctx, rh);
180
+ c.rmax = 10.;
181
+ endstoda();
182
+ break outer;
183
+ }
184
+ }
185
+ if (c.ialth > 1 || c.nq + 1 === maxord + 1) {
186
+ endstoda();
187
+ break outer;
188
+ }
189
+ for (let i = 1; i <= neq; i++)
190
+ c.yh[maxord + 1][i] = c.acor[i];
191
+ endstoda();
192
+ break outer;
193
+ }
194
+ else {
195
+ // Error test failed
196
+ kflag--;
197
+ c.tn = told;
198
+ // Retract yh array
199
+ for (let j = c.nq; j >= 1; j--) {
200
+ for (let i1 = j; i1 <= c.nq; i1++) {
201
+ for (let i = 1; i <= neq; i++)
202
+ c.yh[i1][i] -= c.yh[i1 + 1][i];
203
+ }
204
+ }
205
+ c.rmax = 2.;
206
+ if (Math.abs(c.h) <= hmin * 1.00001) {
207
+ kflag = -1;
208
+ c.hold = c.h;
209
+ jstart = 1;
210
+ break outer;
211
+ }
212
+ if (kflag > -3) {
213
+ osResult.rh = 0;
214
+ const orderflag = orderswitch(ctx, 0., dsm, osResult, kflag, maxord);
215
+ if (orderflag === 1 || orderflag === 0) {
216
+ if (orderflag === 0)
217
+ osResult.rh = Math.min(osResult.rh, 0.2);
218
+ osResult.rh = Math.max(osResult.rh, hmin / Math.abs(c.h));
219
+ scaleh(ctx, osResult.rh);
220
+ }
221
+ if (orderflag === 2) {
222
+ resetcoeff();
223
+ osResult.rh = Math.max(osResult.rh, hmin / Math.abs(c.h));
224
+ scaleh(ctx, osResult.rh);
225
+ }
226
+ continue outer;
227
+ }
228
+ else {
229
+ // 3 or more failures
230
+ if (kflag === -10) {
231
+ kflag = -1;
232
+ c.hold = c.h;
233
+ jstart = 1;
234
+ break outer;
235
+ }
236
+ else {
237
+ rh = 0.1;
238
+ rh = Math.max(hmin / Math.abs(c.h), rh);
239
+ c.h *= rh;
240
+ for (let i = 1; i <= neq; i++)
241
+ y[i] = c.yh[1][i];
242
+ ctx.func(c.tn, y.subarray(1), c.savf.subarray(1), ctx.data);
243
+ c.nfe++;
244
+ for (let i = 1; i <= neq; i++)
245
+ c.yh[2][i] = c.h * c.savf[i];
246
+ c.ipup = c.miter;
247
+ c.ialth = 5;
248
+ if (c.nq === 1)
249
+ continue outer;
250
+ c.nq = 1;
251
+ resetcoeff();
252
+ continue outer;
253
+ }
254
+ }
255
+ }
256
+ }
257
+ return kflag;
258
+ }
259
+ //# sourceMappingURL=stoda.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stoda.js","sourceRoot":"","sources":["stoda.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,EAAE,IAAI,EAAC,MAAM,UAAU,CAAC;AACnD,OAAO,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAChC,OAAO,EAAC,UAAU,EAAkB,MAAM,cAAc,CAAC;AACzD,OAAO,EAAC,WAAW,EAAoB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAC,YAAY,EAAqB,MAAM,gBAAgB,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,GAAiB,EAAE,CAAe,EAAE,MAAc;IACtE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAO,CAAC;IACtB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAI,CAAC,IAAI,CAAC;IAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,GAAI,CAAC,MAAM,CAAC;IAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,GAAI,CAAC,MAAM,CAAC;IAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAEpB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;IAClB,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACV,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;QAAE,MAAM,GAAG,MAAM,CAAC;IAElC,+CAA+C;IAC/C,SAAS,QAAQ;QACf,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;YAC3B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;IAED,6DAA6D;IAC7D,SAAS,UAAU;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE;YAChC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC9B,CAAC;IAED,yCAAyC;IAEzC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACT,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC;QAChB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;QACV,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC;QACd,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QACX,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC;QACjB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACd,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;QACd,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACb,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACb,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;QACd,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACd,UAAU,EAAE,CAAC;IACf,CAAC;IAED,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAClB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC;QACjB,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;YAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YACvB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACnB,UAAU,EAAE,CAAC;QACf,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACxB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACb,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACxB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACb,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,gCAAgC;IAEhC,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,MAAM,EAAE,GAAoB,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAC,CAAC;IACvD,MAAM,QAAQ,GAAsB,EAAC,EAAE,EAAE,CAAC,EAAC,CAAC;IAC5C,MAAM,QAAQ,GAAuB,EAAC,EAAE,EAAE,CAAC,EAAC,CAAC;IAC7C,IAAI,EAAU,CAAC;IAEf,KAAK,EACL,OAAO,IAAI,EAAE,CAAC;QACZ,8BAA8B;QAC9B,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAEX,KAAK,EACL,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK;gBAC7B,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC;YACnB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI;gBACxB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC;YAEnB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAEZ,oDAAoD;YACpD,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;oBAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;wBAC3B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YAE1C,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;YACX,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;YACf,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YACT,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;YAEf,IAAI,OAAO,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;YAE/B,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAChB,SAAS,KAAK,CAAC;YACjB,CAAC;YAED,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACX,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;gBACb,MAAM,GAAG,CAAC,CAAC;gBACX,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;YACZ,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC;YACV,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtD,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC;YACd,kBAAkB;YAClB,KAAK,GAAG,CAAC,CAAC;YACV,CAAC,CAAC,GAAG,EAAE,CAAC;YACR,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACX,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;YACb,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;YAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;oBAC3B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC;YAED,CAAC,CAAC,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjB,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;gBAChB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAC9D,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;oBACvB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjD,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAChB,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;oBACb,QAAQ,EAAE,CAAC;oBACX,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;YAED,6CAA6C;YAC7C,CAAC,CAAC,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gBAClB,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;wBAC3B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1D,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBAC7B,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;gBACtD,CAAC;gBAED,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;gBAChB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBAEvE,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;oBACpB,QAAQ,EAAE,CAAC;oBACX,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;oBACpB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjD,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAChB,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;oBACb,QAAQ,EAAE,CAAC;oBACX,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;oBACpB,UAAU,EAAE,CAAC;oBACb,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjD,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAChB,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;oBACb,QAAQ,EAAE,CAAC;oBACX,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;YAED,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,QAAQ,EAAE,CAAC;gBACX,MAAM,KAAK,CAAC;YACd,CAAC;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;gBAC3B,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,QAAQ,EAAE,CAAC;YACX,MAAM,KAAK,CAAC;QACd,CAAC;aAAM,CAAC;YACN,oBAAoB;YACpB,KAAK,EAAE,CAAC;YACR,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;YAEZ,mBAAmB;YACnB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;oBAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;wBAC3B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;gBACpC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACX,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;gBACb,MAAM,GAAG,CAAC,CAAC;gBACX,MAAM,KAAK,CAAC;YACd,CAAC;YAED,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;gBACf,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;gBAChB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBACrE,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;oBACvC,IAAI,SAAS,KAAK,CAAC;wBACjB,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBAC3C,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1D,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC3B,CAAC;gBACD,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;oBACpB,UAAU,EAAE,CAAC;oBACb,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1D,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC3B,CAAC;gBACD,SAAS,KAAK,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,qBAAqB;gBACrB,IAAI,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;oBAClB,KAAK,GAAG,CAAC,CAAC,CAAC;oBACX,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;oBACb,MAAM,GAAG,CAAC,CAAC;oBACX,MAAM,KAAK,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,EAAE,GAAG,GAAG,CAAC;oBACT,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACxC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;wBAC3B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;oBAC5D,CAAC,CAAC,GAAG,EAAE,CAAC;oBACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;wBAC3B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC/B,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC;oBACjB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;oBACZ,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;wBAAE,SAAS,KAAK,CAAC;oBAC/B,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBACT,UAAU,EAAE,CAAC;oBACb,SAAS,KAAK,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,286 @@
1
+ import {LsodaContext, CCMAX, MSBP} from './common';
2
+ import {vmnorm} from './blas';
3
+ import {cfode} from './cfode';
4
+ import {scaleh} from './scaleh';
5
+ import {correction, CorrectionState} from './correction';
6
+ import {orderswitch, OrderSwitchResult} from './orderswitch';
7
+ import {methodswitch, MethodSwitchResult} from './methodswitch';
8
+
9
+ /**
10
+ * Perform one step of the integration.
11
+ *
12
+ * jstart: 0 = first step, >0 = continue, -1 = new h/meth/miter, -2 = new h only
13
+ * Returns kflag: 0 = success, -1 = error test failed, -2 = convergence failed.
14
+ */
15
+ export function stoda(ctx: LsodaContext, y: Float64Array, jstart: number): number {
16
+ const c = ctx.common!;
17
+ const hmin = ctx.opt!.hmin;
18
+ const mxords = ctx.opt!.mxords;
19
+ const mxordn = ctx.opt!.mxordn;
20
+ const neq = ctx.neq;
21
+
22
+ let kflag = 0;
23
+ const told = c.tn;
24
+ c.ncf = 0;
25
+ let delp = 0.;
26
+
27
+ let maxord = mxordn;
28
+ if (c.meth === 2) maxord = mxords;
29
+
30
+ // Helper: endstoda — finalize step, scale acor
31
+ function endstoda(): void {
32
+ const r = 1. / c.tesco[c.nqu][2];
33
+ for (let i = 1; i <= neq; i++)
34
+ c.acor[i] *= r;
35
+ c.hold = c.h;
36
+ }
37
+
38
+ // Helper: resetcoeff — reload el from elco for current order
39
+ function resetcoeff(): void {
40
+ const el0 = c.el[1];
41
+ for (let i = 1; i <= c.nq + 1; i++)
42
+ c.el[i] = c.elco[c.nq][i];
43
+ c.rc = c.rc * c.el[1] / el0;
44
+ }
45
+
46
+ // --- Initialization based on jstart ---
47
+
48
+ if (jstart === 0) {
49
+ c.nq = 1;
50
+ c.ialth = 2;
51
+ c.rmax = 10000.;
52
+ c.rc = 0.;
53
+ c.crate = 0.7;
54
+ c.hold = c.h;
55
+ c.nslp = 0;
56
+ c.ipup = c.miter;
57
+ c.el[1] = 1.0;
58
+ c.icount = 20;
59
+ c.irflag = 0;
60
+ c.pdest = 0.;
61
+ c.pdlast = 0.;
62
+ cfode(ctx, 1);
63
+ resetcoeff();
64
+ }
65
+
66
+ if (jstart === -1) {
67
+ c.ipup = c.miter;
68
+ if (c.ialth === 1) c.ialth = 2;
69
+ if (c.meth !== c.mused) {
70
+ cfode(ctx, c.meth);
71
+ c.ialth = c.nq + 1;
72
+ resetcoeff();
73
+ }
74
+ if (c.h !== c.hold) {
75
+ const rh = c.h / c.hold;
76
+ c.h = c.hold;
77
+ scaleh(ctx, rh);
78
+ }
79
+ }
80
+
81
+ if (jstart === -2) {
82
+ if (c.h !== c.hold) {
83
+ const rh = c.h / c.hold;
84
+ c.h = c.hold;
85
+ scaleh(ctx, rh);
86
+ }
87
+ }
88
+
89
+ // --- Main integration loop ---
90
+
91
+ let dsm = 0.0;
92
+ const cs: CorrectionState = {del: 0, delp: delp, m: 0};
93
+ const osResult: OrderSwitchResult = {rh: 0};
94
+ const msResult: MethodSwitchResult = {rh: 0};
95
+ let rh: number;
96
+
97
+ outer:
98
+ while (true) {
99
+ // Before the corrector starts
100
+ c.jcur = 0;
101
+
102
+ inner:
103
+ while (true) {
104
+ if (Math.abs(c.rc - 1.) > CCMAX)
105
+ c.ipup = c.miter;
106
+ if (c.nst >= c.nslp + MSBP)
107
+ c.ipup = c.miter;
108
+
109
+ c.tn += c.h;
110
+
111
+ // Prediction: multiply yh by Pascal triangle matrix
112
+ for (let j = c.nq; j >= 1; j--) {
113
+ for (let i1 = j; i1 <= c.nq; i1++) {
114
+ for (let i = 1; i <= neq; i++)
115
+ c.yh[i1][i] += c.yh[i1 + 1][i];
116
+ }
117
+ }
118
+
119
+ const pnorm = vmnorm(neq, c.yh[1], c.ewt);
120
+
121
+ cs.del = 0;
122
+ cs.delp = delp;
123
+ cs.m = 0;
124
+ const corflag = correction(ctx, y, pnorm, cs, told);
125
+ delp = cs.delp;
126
+
127
+ if (corflag === 0) break inner;
128
+
129
+ if (corflag === 1) {
130
+ rh = Math.max(0.25, hmin / Math.abs(c.h));
131
+ scaleh(ctx, rh);
132
+ continue inner;
133
+ }
134
+
135
+ if (corflag === 2) {
136
+ kflag = -2;
137
+ c.hold = c.h;
138
+ jstart = 1;
139
+ return kflag;
140
+ }
141
+ }
142
+
143
+ // Local error test
144
+ if (cs.m === 0)
145
+ dsm = cs.del / c.tesco[c.nq][2];
146
+ if (cs.m > 0)
147
+ dsm = vmnorm(neq, c.acor, c.ewt) / c.tesco[c.nq][2];
148
+
149
+ if (dsm <= 1.) {
150
+ // Successful step
151
+ kflag = 0;
152
+ c.nst++;
153
+ c.hu = c.h;
154
+ c.nqu = c.nq;
155
+ c.mused = c.meth;
156
+
157
+ for (let j = 1; j <= c.nq + 1; j++) {
158
+ const r = c.el[j];
159
+ for (let i = 1; i <= neq; i++)
160
+ c.yh[j][i] += r * c.acor[i];
161
+ }
162
+
163
+ c.icount--;
164
+ if (c.icount < 0) {
165
+ msResult.rh = 0;
166
+ methodswitch(ctx, dsm, vmnorm(neq, c.yh[1], c.ewt), msResult);
167
+ if (c.meth !== c.mused) {
168
+ rh = Math.max(msResult.rh, hmin / Math.abs(c.h));
169
+ scaleh(ctx, rh);
170
+ c.rmax = 10.;
171
+ endstoda();
172
+ break outer;
173
+ }
174
+ }
175
+
176
+ // No method switch — do step/order selection
177
+ c.ialth--;
178
+ if (c.ialth === 0) {
179
+ let rhup = 0.;
180
+ if (c.nq + 1 !== maxord + 1) {
181
+ for (let i = 1; i <= neq; i++)
182
+ c.savf[i] = c.acor[i] - c.yh[maxord + 1][i];
183
+ const dup = vmnorm(neq, c.savf, c.ewt) / c.tesco[c.nq][3];
184
+ const exup = 1. / (c.nq + 2);
185
+ rhup = 1. / (1.4 * Math.pow(dup, exup) + 0.0000014);
186
+ }
187
+
188
+ osResult.rh = 0;
189
+ const orderflag = orderswitch(ctx, rhup, dsm, osResult, kflag, maxord);
190
+
191
+ if (orderflag === 0) {
192
+ endstoda();
193
+ break outer;
194
+ }
195
+ if (orderflag === 1) {
196
+ rh = Math.max(osResult.rh, hmin / Math.abs(c.h));
197
+ scaleh(ctx, rh);
198
+ c.rmax = 10.;
199
+ endstoda();
200
+ break outer;
201
+ }
202
+ if (orderflag === 2) {
203
+ resetcoeff();
204
+ rh = Math.max(osResult.rh, hmin / Math.abs(c.h));
205
+ scaleh(ctx, rh);
206
+ c.rmax = 10.;
207
+ endstoda();
208
+ break outer;
209
+ }
210
+ }
211
+
212
+ if (c.ialth > 1 || c.nq + 1 === maxord + 1) {
213
+ endstoda();
214
+ break outer;
215
+ }
216
+
217
+ for (let i = 1; i <= neq; i++)
218
+ c.yh[maxord + 1][i] = c.acor[i];
219
+ endstoda();
220
+ break outer;
221
+ } else {
222
+ // Error test failed
223
+ kflag--;
224
+ c.tn = told;
225
+
226
+ // Retract yh array
227
+ for (let j = c.nq; j >= 1; j--) {
228
+ for (let i1 = j; i1 <= c.nq; i1++) {
229
+ for (let i = 1; i <= neq; i++)
230
+ c.yh[i1][i] -= c.yh[i1 + 1][i];
231
+ }
232
+ }
233
+
234
+ c.rmax = 2.;
235
+ if (Math.abs(c.h) <= hmin * 1.00001) {
236
+ kflag = -1;
237
+ c.hold = c.h;
238
+ jstart = 1;
239
+ break outer;
240
+ }
241
+
242
+ if (kflag > -3) {
243
+ osResult.rh = 0;
244
+ const orderflag = orderswitch(ctx, 0., dsm, osResult, kflag, maxord);
245
+ if (orderflag === 1 || orderflag === 0) {
246
+ if (orderflag === 0)
247
+ osResult.rh = Math.min(osResult.rh, 0.2);
248
+ osResult.rh = Math.max(osResult.rh, hmin / Math.abs(c.h));
249
+ scaleh(ctx, osResult.rh);
250
+ }
251
+ if (orderflag === 2) {
252
+ resetcoeff();
253
+ osResult.rh = Math.max(osResult.rh, hmin / Math.abs(c.h));
254
+ scaleh(ctx, osResult.rh);
255
+ }
256
+ continue outer;
257
+ } else {
258
+ // 3 or more failures
259
+ if (kflag === -10) {
260
+ kflag = -1;
261
+ c.hold = c.h;
262
+ jstart = 1;
263
+ break outer;
264
+ } else {
265
+ rh = 0.1;
266
+ rh = Math.max(hmin / Math.abs(c.h), rh);
267
+ c.h *= rh;
268
+ for (let i = 1; i <= neq; i++)
269
+ y[i] = c.yh[1][i];
270
+ ctx.func(c.tn, y.subarray(1), c.savf.subarray(1), ctx.data);
271
+ c.nfe++;
272
+ for (let i = 1; i <= neq; i++)
273
+ c.yh[2][i] = c.h * c.savf[i];
274
+ c.ipup = c.miter;
275
+ c.ialth = 5;
276
+ if (c.nq === 1) continue outer;
277
+ c.nq = 1;
278
+ resetcoeff();
279
+ continue outer;
280
+ }
281
+ }
282
+ }
283
+ }
284
+
285
+ return kflag;
286
+ }
@@ -0,0 +1,120 @@
1
+ /* LSODA library wrapper method.
2
+
3
+ Wraps the variable-order Nordsieck-based LSODA solver into the standard SolverMethod interface.
4
+ Automatically switches between Adams (non-stiff) and BDF (stiff) methods.
5
+
6
+ References:
7
+ [1] Hindmarsh, A.C. "ODEPACK, A Systematized Collection of ODE Solvers."
8
+ [2] Petzold, L.R. "Automatic Selection of Methods for Solving Stiff and Nonstiff
9
+ Systems of Ordinary Differential Equations."
10
+ */
11
+ import { ERROR_MSG } from './solver-defs';
12
+ import { Lsoda } from './lsoda';
13
+ /** Wraps an ODEs func into the OdeFunction signature compatible with Lsoda (returns 0). */
14
+ function wrapFunc(f) {
15
+ return (t, y, ydot) => {
16
+ f(t, y, ydot);
17
+ return 0;
18
+ };
19
+ }
20
+ /** Solve initial value problem using the LSODA library method
21
+ * @param odes initial value problem for ordinary differential equations
22
+ * @param callback computations control callback
23
+ * @returns solution of the problem
24
+ * @example
25
+ * // Example. Solve the following initial value problem using the LSODA method:
26
+ * // dx/dt = x + y - t
27
+ * // dy/dt = x * y + t
28
+ * // x(0) = 1
29
+ * // y(0) = -1
30
+ * // on [0, 2] with the step 0.01.
31
+ * import { ODEs, lsoda } from 'diff-grok';
32
+ *
33
+ * const task: ODEs = {
34
+ * name: 'Example', // name of your model
35
+ * arg: {
36
+ * name: 't', // name of the argument
37
+ * start: 0, // initial value of the argument
38
+ * finish: 2, // final value of the argument
39
+ * step: 0.01, // solution grid step
40
+ * },
41
+ * initial: [1, -1], // initial values
42
+ * func: (t: number, y: Float64Array, output: Float64Array) => { // right-hand side of the system
43
+ * output[0] = y[0] + y[1] - t; // 1-st equation
44
+ * output[1] = y[0] * y[1] + t; // 2-nd equation
45
+ * },
46
+ * tolerance: 1e-7, // tolerance
47
+ * solutionColNames: ['x', 'y'], // names of solution functions
48
+ * };
49
+ *
50
+ * try {
51
+ * // Solve the problem using the LSODA method
52
+ * const solution = lsoda(task);
53
+ *
54
+ * // Print a table with the results
55
+ * console.log(task.arg.name, task.solutionColNames[0], task.solutionColNames[1]);
56
+ * const length = solution[0].length;
57
+ * for (let i = 0; i < length; ++i)
58
+ * console.log(solution[0][i], solution[1][i], solution[2][i]);
59
+ * } catch (err) {
60
+ * console.log('Solver failed: ', err instanceof Error ? err.message : 'Unknown problem!');
61
+ * }
62
+ */
63
+ export function lsoda(odes, callback) {
64
+ // 1. Extract problem parameters
65
+ const t0 = odes.arg.start;
66
+ const t1 = odes.arg.finish;
67
+ const step = odes.arg.step;
68
+ const tolerance = odes.tolerance;
69
+ const dim = odes.initial.length;
70
+ const mxstep = 50000;
71
+ // 2. Create LSODA solver with dense output enabled
72
+ const rtol = new Float64Array(dim).fill(tolerance);
73
+ const atol = new Float64Array(dim).fill(tolerance);
74
+ const solver = new Lsoda(wrapFunc(odes.func), dim, {
75
+ rtol, atol, itask: 1, dense: true, mxstep,
76
+ });
77
+ // 3. Integrate through checkpoints, collecting Nordsieck snapshots for dense output.
78
+ // Checkpoints are spaced coarsely (up to 1000) so the solver handles adaptive
79
+ // stepping internally; mxstep per call stays within bounds.
80
+ if (callback)
81
+ callback.onIterationStart();
82
+ let y = [...odes.initial];
83
+ let t = t0;
84
+ // Warmup: a tiny initial step bootstraps the BDF method for extremely stiff problems
85
+ const warmupTout = t0 + Math.min(step, 1.0) * 1e-5;
86
+ if (warmupTout > t0 && warmupTout < t1) {
87
+ const wr = solver.solve(y, t, warmupTout);
88
+ y = wr.y;
89
+ t = wr.t;
90
+ if (solver.state <= 0)
91
+ throw new Error(ERROR_MSG.LSODA_FAILS);
92
+ }
93
+ const gridPoints = Math.trunc((t1 - t0) / step) + 1;
94
+ const numCheckpoints = Math.min(gridPoints, 1000);
95
+ const cpStep = (t1 - t0) / numCheckpoints;
96
+ for (let i = 1; i <= numCheckpoints; i++) {
97
+ const tout = (i < numCheckpoints) ? t0 + i * cpStep : t1;
98
+ const result = solver.solve(y, t, tout);
99
+ y = result.y;
100
+ t = result.t;
101
+ if (solver.state <= 0)
102
+ throw new Error(ERROR_MSG.LSODA_FAILS);
103
+ }
104
+ // 4. Use dense output to interpolate on the uniform output grid
105
+ const dense = solver.getDenseOutput();
106
+ const grid = dense.solveOnGrid(t0, t1, step);
107
+ if (callback)
108
+ callback.onComputationsCompleted();
109
+ // 5. Return solution: [tArr, y0Arr, y1Arr, ...]
110
+ const rowCount = grid.t.length;
111
+ const solution = Array(dim + 1);
112
+ solution[0] = grid.t;
113
+ for (let i = 0; i < dim; ++i)
114
+ solution[i + 1] = grid.y[i];
115
+ // Patch last y values with the exact endpoint from the solver
116
+ for (let i = 0; i < dim; ++i)
117
+ solution[i + 1][rowCount - 1] = y[i];
118
+ return solution;
119
+ } // lsoda
120
+ //# sourceMappingURL=lsoda-method.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsoda-method.js","sourceRoot":"","sources":["lsoda-method.ts"],"names":[],"mappings":"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"}