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
@@ -45,7 +45,9 @@ const model = `#name: PK-PD
45
45
  Kin = 0.2 {caption: Kin; category: Parameters; min: 0.1; max: 0.5} [The first-order production constant]
46
46
  Kout = 0.2 {caption: Kout; category: Parameters; min: 0.1; max: 0.5} [The first-order dissipation rate constant]
47
47
 
48
- #tolerance: 1e-9`;
48
+ #tolerance: 1e-9
49
+
50
+ #meta.solver: {method: 'rkdp'; maxTimeMs: 5000}`;
49
51
  /** 2. Generate IVP-objects: for the main thread & for computations in webworkers */
50
52
  const ivp = DGL.getIVP(model);
51
53
  const ivpWW = DGL.getIvp2WebWorker(ivp);
@@ -1 +1 @@
1
- {"version":3,"file":"cyclic-model.js","sourceRoot":"","sources":["cyclic-model.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B;;;;EAIE;AAEF,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AAEnC,6BAA6B;AAC7B,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuCG,CAAC;AAElB,oFAAoF;AACpF,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAExC,8BAA8B;AAC9B,IAAI,CAAC;IACH,gCAAgC;IAChC,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;IAEnC,wBAAwB;IACxB,MAAM,MAAM,GAAG;QACb,MAAM,EAAE,EAAE;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,EAAE,EAAE,CAAC;QACL,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,KAAK;QACX,EAAE,EAAE,IAAI;QACR,EAAE,EAAE,GAAG;QACP,EAAE,EAAE,IAAI;QACR,CAAC,EAAE,KAAK;QACR,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,KAAK;KACZ,CAAC;IACF,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEpD,yBAAyB;IACzB,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAElD,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAEjE,qBAAqB;IAErB,sBAAsB;IACtB,IAAI,IAAI,GAAG,WAAW,CAAC;IACvB,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,GAAG,aAAa,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAElB,6BAA6B;IAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QAChC,IAAI,GAAG,EAAE,CAAC;QAEV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC;YAC9B,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;QAE9C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC9F,CAAC"}
1
+ {"version":3,"file":"cyclic-model.js","sourceRoot":"","sources":["cyclic-model.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B;;;;EAIE;AAEF,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AAEnC,6BAA6B;AAC7B,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAyCkC,CAAC;AAEjD,oFAAoF;AACpF,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAExC,8BAA8B;AAC9B,IAAI,CAAC;IACH,gCAAgC;IAChC,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;IAEnC,wBAAwB;IACxB,MAAM,MAAM,GAAG;QACb,MAAM,EAAE,EAAE;QACV,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,EAAE,EAAE,CAAC;QACL,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,KAAK;QACX,EAAE,EAAE,IAAI;QACR,EAAE,EAAE,GAAG;QACP,EAAE,EAAE,IAAI;QACR,CAAC,EAAE,KAAK;QACR,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,KAAK;KACZ,CAAC;IACF,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEpD,yBAAyB;IACzB,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAElD,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAEjE,qBAAqB;IAErB,sBAAsB;IACtB,IAAI,IAAI,GAAG,WAAW,CAAC;IACvB,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,GAAG,aAAa,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAElB,6BAA6B;IAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QAChC,IAAI,GAAG,EAAE,CAAC;QAEV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC;YAC9B,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;QAE9C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC9F,CAAC"}
@@ -47,7 +47,9 @@ const model = `#name: PK-PD
47
47
  Kin = 0.2 {caption: Kin; category: Parameters; min: 0.1; max: 0.5} [The first-order production constant]
48
48
  Kout = 0.2 {caption: Kout; category: Parameters; min: 0.1; max: 0.5} [The first-order dissipation rate constant]
49
49
 
50
- #tolerance: 1e-9`;
50
+ #tolerance: 1e-9
51
+
52
+ #meta.solver: {method: 'rkdp'; maxTimeMs: 5000}`;
51
53
 
52
54
  /** 2. Generate IVP-objects: for the main thread & for computations in webworkers */
53
55
  const ivp = DGL.getIVP(model);
@@ -0,0 +1,332 @@
1
+ /* The Adams-Bashforth-Moulton predictor-corrector method of order 4 (AB4).
2
+
3
+ Uses the 4-step Adams-Bashforth formula as predictor and the 3-step
4
+ Adams-Moulton formula as corrector in PECE mode (Predict-Evaluate-
5
+ Correct-Evaluate), with Milne's device for local error estimation.
6
+ Bootstrapping is performed using the Runge-Kutta-Fehlberg 4(5) method.
7
+
8
+ References:
9
+ [1] E. Hairer, S.P. Norsett, G. Wanner, "Solving Ordinary Differential
10
+ Equations I: Nonstiff Problems", Springer, 2nd ed., 1993.
11
+ [2] L.F. Shampine, M.K. Gordon, "Computer Solution of Ordinary Differential
12
+ Equations: The Initial Value Problem", W.H. Freeman, 1975.
13
+ */
14
+ import { max, abs, SAFETY, PSHRNK, PSGROW, REDUCE_COEF, GROW_COEF, ERR_CONTR, TINY, ERROR_MSG } from './solver-defs';
15
+ // Adams-Bashforth 4-step coefficients (pre-divided by 24)
16
+ // y_{n+1} = y_n + h * (AB0*f_n + AB1*f_{n-1} + AB2*f_{n-2} + AB3*f_{n-3})
17
+ const AB0 = 55.0 / 24.0;
18
+ const AB1 = -59.0 / 24.0;
19
+ const AB2 = 37.0 / 24.0;
20
+ const AB3 = -9.0 / 24.0;
21
+ // Adams-Moulton 3-step coefficients (pre-divided by 24)
22
+ // y_{n+1} = y_n + h * (AM_NEW*f_{n+1} + AM0*f_n + AM1*f_{n-1} + AM2*f_{n-2})
23
+ const AM_NEW = 9.0 / 24.0;
24
+ const AM0 = 19.0 / 24.0;
25
+ const AM1 = -5.0 / 24.0;
26
+ const AM2 = 1.0 / 24.0;
27
+ // Milne error estimation coefficient for the AB4-AM3 pair: 19/270
28
+ const MILNE = 19.0 / 270.0;
29
+ // Number of uniformly-spaced history points required for AB4
30
+ const HIST_LEN = 4;
31
+ // Fehlberg 4(5) Butcher tableau coefficients (used during bootstrap phase)
32
+ const C2 = 1.0 / 4.0;
33
+ const C3 = 3.0 / 8.0;
34
+ const C4 = 12.0 / 13.0;
35
+ const C6 = 1.0 / 2.0;
36
+ const A21 = 1.0 / 4.0;
37
+ const A31 = 3.0 / 32.0;
38
+ const A32 = 9.0 / 32.0;
39
+ const A41 = 1932.0 / 2197.0;
40
+ const A42 = -7200.0 / 2197.0;
41
+ const A43 = 7296.0 / 2197.0;
42
+ const A51 = 439.0 / 216.0;
43
+ const A52 = -8.0;
44
+ const A53 = 3680.0 / 513.0;
45
+ const A54 = -845.0 / 4104.0;
46
+ const A61 = -8.0 / 27.0;
47
+ const A62 = 2.0;
48
+ const A63 = -3544.0 / 2565.0;
49
+ const A64 = 1859.0 / 4104.0;
50
+ const A65 = -11.0 / 40.0;
51
+ const B1 = 25.0 / 216.0;
52
+ const B3 = 1408.0 / 2565.0;
53
+ const B4 = 2197.0 / 4104.0;
54
+ const B5 = -1.0 / 5.0;
55
+ const RKE1 = 1.0 / 360.0;
56
+ const RKE3 = -128.0 / 4275.0;
57
+ const RKE4 = -2197.0 / 75240.0;
58
+ const RKE5 = 1.0 / 50.0;
59
+ const RKE6 = 2.0 / 55.0;
60
+ /** Solve initial value problem using the Adams-Bashforth-Moulton predictor-corrector method of order 4
61
+ * @param odes initial value problem for ordinary differential equations
62
+ * @param callback computations control callback
63
+ * @returns solution of the problem
64
+ * @example
65
+ * // Example. Solve the following initial value problem using the AB4 method:
66
+ * // dx/dt = x + y - t
67
+ * // dy/dt = x * y + t
68
+ * // x(0) = 1
69
+ * // y(0) = -1
70
+ * // on [0, 2] with the step 0.01.
71
+ * import { ODEs, ab4 } from 'diff-grok';
72
+ *
73
+ * const task: ODEs = {
74
+ * name: 'Example', // name of your model
75
+ * arg: {
76
+ * name: 't', // name of the argument
77
+ * start: 0, // initial value of the argument
78
+ * finish: 2, // final value of the argument
79
+ * step: 0.01, // solution grid step
80
+ * },
81
+ * initial: [1, -1], // initial values
82
+ * func: (t: number, y: Float64Array, output: Float64Array) => { // right-hand side of the system
83
+ * output[0] = y[0] + y[1] - t; // 1-st equation
84
+ * output[1] = y[0] * y[1] + t; // 2-nd equation
85
+ * },
86
+ * tolerance: 1e-7, // tolerance
87
+ * solutionColNames: ['x', 'y'], // names of solution functions
88
+ * };
89
+ *
90
+ * try {
91
+ * // Solve the problem using the AB4 method
92
+ * const solution = ab4(task);
93
+ *
94
+ * // Print a table with the results
95
+ * console.log(task.arg.name, task.solutionColNames[0], task.solutionColNames[1]);
96
+ * const length = solution[0].length;
97
+ * for (let i = 0; i < length; ++i)
98
+ * console.log(solution[0][i], solution[1][i], solution[2][i]);
99
+ * } catch (err) {
100
+ * console.log('Solver failed: ', err instanceof Error ? err.message : 'Unknown problem!');
101
+ * }
102
+ */
103
+ export function ab4(odes, callback) {
104
+ const f = odes.func;
105
+ // operating variables
106
+ const t0 = odes.arg.start;
107
+ const t1 = odes.arg.finish;
108
+ let h = odes.arg.step;
109
+ const hDataframe = h;
110
+ const hMax = hDataframe * 10;
111
+ const tolerance = odes.tolerance;
112
+ const rowCount = Math.trunc((t1 - t0) / h) + 1;
113
+ const dim = odes.initial.length;
114
+ // result arrays
115
+ const tArr = new Float64Array(rowCount);
116
+ const yArrs = Array(dim);
117
+ for (let i = 0; i < dim; ++i)
118
+ yArrs[i] = new Float64Array(rowCount);
119
+ // method routine
120
+ let timeDataframe = t0 + hDataframe;
121
+ let t = t0;
122
+ let tPrev = t0;
123
+ let hNext = 0.0;
124
+ let flag = true;
125
+ let index = 1;
126
+ let errmax = 0;
127
+ let hTemp = 0;
128
+ let tNew = 0;
129
+ // working buffers
130
+ const y = new Float64Array(odes.initial);
131
+ const yPrev = new Float64Array(odes.initial);
132
+ const dydt = new Float64Array(dim);
133
+ const yScale = new Float64Array(dim);
134
+ const yTemp = new Float64Array(dim);
135
+ const yErr = new Float64Array(dim);
136
+ // AB4-AM3 history: fBuf[0] = f(t_n, y_n), fBuf[3] = f(t_{n-3}, y_{n-3})
137
+ const fBuf = [];
138
+ for (let i = 0; i < HIST_LEN; ++i)
139
+ fBuf[i] = new Float64Array(dim);
140
+ let histCount = 0;
141
+ let lastH = 0;
142
+ // AB4-AM3 corrector buffers
143
+ const yCorr = new Float64Array(dim);
144
+ const fPred = new Float64Array(dim);
145
+ // RKF45 stage buffers (bootstrap)
146
+ const k1 = new Float64Array(dim);
147
+ const k2 = new Float64Array(dim);
148
+ const k3 = new Float64Array(dim);
149
+ const k4 = new Float64Array(dim);
150
+ const k5 = new Float64Array(dim);
151
+ const k6 = new Float64Array(dim);
152
+ // store initial f-value
153
+ f(t, y, fBuf[0]);
154
+ histCount = 1;
155
+ // 1. SOLUTION AT THE POINT t0
156
+ tArr[0] = t0;
157
+ for (let i = 0; i < dim; ++i)
158
+ yArrs[i][0] = y[i];
159
+ // 2. COMPUTE NUMERICAL SOLUTION FOR THE POINTS FROM THE INTERVAL (t0, t1)
160
+ while (flag) {
161
+ // compute derivative
162
+ f(t, y, dydt);
163
+ // check whether to go on computations
164
+ if (callback)
165
+ callback.onIterationStart();
166
+ // compute scale vector
167
+ for (let i = 0; i < dim; ++i)
168
+ yScale[i] = abs(y[i]) + h * abs(dydt[i]) + TINY;
169
+ // check end point
170
+ if (t + h > t1) {
171
+ h = t1 - t;
172
+ flag = false;
173
+ }
174
+ // if step size changed, history is invalid (AB4 needs uniform spacing)
175
+ if (histCount > 1 && h !== lastH) {
176
+ histCount = 1;
177
+ f(t, y, fBuf[0]);
178
+ }
179
+ // adaptive step loop
180
+ while (true) {
181
+ if (histCount < HIST_LEN) {
182
+ // BOOTSTRAP PHASE: RKF45 single step to build up history
183
+ // Stage 1: k1 = f(t, y)
184
+ f(t, y, k1);
185
+ // Stage 2: k2 = f(t + C2*h, y + h*A21*k1)
186
+ for (let i = 0; i < dim; ++i)
187
+ yTemp[i] = y[i] + h * A21 * k1[i];
188
+ f(t + C2 * h, yTemp, k2);
189
+ // Stage 3: k3 = f(t + C3*h, y + h*(A31*k1 + A32*k2))
190
+ for (let i = 0; i < dim; ++i)
191
+ yTemp[i] = y[i] + h * (A31 * k1[i] + A32 * k2[i]);
192
+ f(t + C3 * h, yTemp, k3);
193
+ // Stage 4: k4 = f(t + C4*h, y + h*(A41*k1 + A42*k2 + A43*k3))
194
+ for (let i = 0; i < dim; ++i)
195
+ yTemp[i] = y[i] + h * (A41 * k1[i] + A42 * k2[i] + A43 * k3[i]);
196
+ f(t + C4 * h, yTemp, k4);
197
+ // Stage 5: k5 = f(t + h, y + h*(A51*k1 + A52*k2 + A53*k3 + A54*k4))
198
+ for (let i = 0; i < dim; ++i)
199
+ yTemp[i] = y[i] + h * (A51 * k1[i] + A52 * k2[i] + A53 * k3[i] + A54 * k4[i]);
200
+ f(t + h, yTemp, k5);
201
+ // Stage 6: k6 = f(t + C6*h, y + h*(A61*k1 + A62*k2 + A63*k3 + A64*k4 + A65*k5))
202
+ for (let i = 0; i < dim; ++i)
203
+ yTemp[i] = y[i] + h * (A61 * k1[i] + A62 * k2[i] + A63 * k3[i] + A64 * k4[i] + A65 * k5[i]);
204
+ f(t + C6 * h, yTemp, k6);
205
+ // 4th-order solution
206
+ for (let i = 0; i < dim; ++i)
207
+ yTemp[i] = y[i] + h * (B1 * k1[i] + B3 * k3[i] + B4 * k4[i] + B5 * k5[i]);
208
+ // Error estimate: difference between 4th and 5th order solutions
209
+ for (let i = 0; i < dim; ++i)
210
+ yErr[i] = h * (RKE1 * k1[i] + RKE3 * k3[i] + RKE4 * k4[i] + RKE5 * k5[i] + RKE6 * k6[i]);
211
+ // estimating error
212
+ errmax = 0;
213
+ for (let i = 0; i < dim; ++i)
214
+ errmax = max(errmax, abs(yErr[i] / yScale[i]));
215
+ errmax /= tolerance;
216
+ // processing the error obtained
217
+ if (errmax > 1) {
218
+ hTemp = SAFETY * h * Math.pow(errmax, PSHRNK);
219
+ h = max(hTemp, REDUCE_COEF * h);
220
+ tNew = t + h;
221
+ if (tNew == t)
222
+ throw new Error(ERROR_MSG.AB4_FAILS);
223
+ // step size changed, reset history if needed
224
+ if (histCount > 1) {
225
+ histCount = 1;
226
+ f(t, y, fBuf[0]);
227
+ }
228
+ }
229
+ else {
230
+ // step accepted
231
+ t = t + h;
232
+ for (let i = 0; i < dim; ++i)
233
+ y[i] = yTemp[i];
234
+ // shift history and store new f-value
235
+ for (let j = Math.min(histCount, HIST_LEN - 1); j > 0; --j)
236
+ fBuf[j].set(fBuf[j - 1]);
237
+ f(t, y, fBuf[0]);
238
+ histCount++;
239
+ lastH = h;
240
+ // during bootstrap, keep h constant for uniform spacing
241
+ hNext = h;
242
+ if (hNext > hMax)
243
+ hNext = hMax;
244
+ break;
245
+ }
246
+ }
247
+ else {
248
+ // AB4-AM3 PHASE: Predictor-Corrector (PECE)
249
+ // Predict (Adams-Bashforth 4-step)
250
+ for (let i = 0; i < dim; ++i) {
251
+ yTemp[i] = y[i] + h * (AB0 * fBuf[0][i] + AB1 * fBuf[1][i] +
252
+ AB2 * fBuf[2][i] + AB3 * fBuf[3][i]);
253
+ }
254
+ // Evaluate f at predicted point
255
+ f(t + h, yTemp, fPred);
256
+ // Correct (Adams-Moulton 3-step)
257
+ for (let i = 0; i < dim; ++i) {
258
+ yCorr[i] = y[i] + h * (AM_NEW * fPred[i] + AM0 * fBuf[0][i] +
259
+ AM1 * fBuf[1][i] + AM2 * fBuf[2][i]);
260
+ }
261
+ // Error estimate (Milne's device)
262
+ for (let i = 0; i < dim; ++i)
263
+ yErr[i] = MILNE * (yCorr[i] - yTemp[i]);
264
+ // estimating error
265
+ errmax = 0;
266
+ for (let i = 0; i < dim; ++i)
267
+ errmax = max(errmax, abs(yErr[i] / yScale[i]));
268
+ errmax /= tolerance;
269
+ // processing the error obtained
270
+ if (errmax > 1) {
271
+ // step rejected: shrink step and re-bootstrap
272
+ hTemp = SAFETY * h * Math.pow(errmax, PSHRNK);
273
+ h = max(hTemp, REDUCE_COEF * h);
274
+ tNew = t + h;
275
+ if (tNew == t)
276
+ throw new Error(ERROR_MSG.AB4_FAILS);
277
+ histCount = 1;
278
+ f(t, y, fBuf[0]);
279
+ }
280
+ else {
281
+ if (errmax > ERR_CONTR)
282
+ hNext = SAFETY * h * Math.pow(errmax, PSGROW);
283
+ else
284
+ hNext = GROW_COEF * h;
285
+ if (hNext > hMax)
286
+ hNext = hMax;
287
+ t = t + h;
288
+ for (let i = 0; i < dim; ++i)
289
+ y[i] = yCorr[i];
290
+ // shift history and store f at corrected point (PECE final evaluate)
291
+ const recycled = fBuf[HIST_LEN - 1];
292
+ for (let j = HIST_LEN - 1; j > 0; --j)
293
+ fBuf[j] = fBuf[j - 1];
294
+ fBuf[0] = recycled;
295
+ f(t, y, fBuf[0]);
296
+ lastH = h;
297
+ break;
298
+ }
299
+ }
300
+ } // while (true)
301
+ // compute linearly interpolated results and store them in dataframe
302
+ while (timeDataframe < t) {
303
+ const cLeft = (t - timeDataframe) / (t - tPrev);
304
+ const cRight = 1.0 - cLeft;
305
+ tArr[index] = timeDataframe;
306
+ for (let j = 0; j < dim; ++j)
307
+ yArrs[j][index] = cRight * y[j] + cLeft * yPrev[j];
308
+ timeDataframe += hDataframe;
309
+ ++index;
310
+ }
311
+ h = hNext;
312
+ tPrev = t;
313
+ for (let i = 0; i < dim; ++i)
314
+ yPrev[i] = y[i];
315
+ } // while (flag)
316
+ // perform final callback actions
317
+ if (callback)
318
+ callback.onComputationsCompleted();
319
+ // 3. solution at the point t1
320
+ tArr[rowCount - 1] = t1;
321
+ for (let i = 0; i < dim; ++i)
322
+ yArrs[i][rowCount - 1] = y[i];
323
+ // 4. prepare output
324
+ const solution = Array(dim + 1);
325
+ // independent variable
326
+ solution[0] = tArr;
327
+ // functions
328
+ for (let i = 0; i < dim; ++i)
329
+ solution[i + 1] = yArrs[i];
330
+ return solution;
331
+ } // ab4
332
+ //# sourceMappingURL=ab4-method.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ab4-method.js","sourceRoot":"","sources":["ab4-method.ts"],"names":[],"mappings":"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"}