diff-grok 1.2.0 → 1.3.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 (624) hide show
  1. package/README.MD +39 -8
  2. package/dist/index.d.ts +6 -0
  3. package/{index.js → dist/index.js} +1 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/src/examples/basic-use.d.ts +10 -0
  6. package/dist/src/examples/basic-use.js.map +1 -0
  7. package/dist/src/examples/check-methods.d.ts +1 -0
  8. package/dist/src/examples/check-methods.js.map +1 -0
  9. package/dist/src/examples/corr-probs.d.ts +15 -0
  10. package/{src → dist/src}/examples/corr-probs.js +2 -2
  11. package/dist/src/examples/corr-probs.js.map +1 -0
  12. package/dist/src/examples/cyclic-model.d.ts +6 -0
  13. package/dist/src/examples/cyclic-model.js.map +1 -0
  14. package/dist/src/examples/e5.d.ts +15 -0
  15. package/dist/src/examples/e5.js.map +1 -0
  16. package/dist/src/examples/hires.d.ts +15 -0
  17. package/dist/src/examples/hires.js.map +1 -0
  18. package/dist/src/examples/index.d.ts +22 -0
  19. package/dist/src/examples/index.js.map +1 -0
  20. package/dist/src/examples/model-updates.d.ts +6 -0
  21. package/dist/src/examples/model-updates.js.map +1 -0
  22. package/dist/src/examples/orego.d.ts +15 -0
  23. package/dist/src/examples/orego.js.map +1 -0
  24. package/dist/src/examples/pipeline-use.d.ts +6 -0
  25. package/dist/src/examples/pipeline-use.js.map +1 -0
  26. package/dist/src/examples/pollution.d.ts +15 -0
  27. package/dist/src/examples/pollution.js.map +1 -0
  28. package/{src/examples/print-benchmark.ts → dist/src/examples/print-benchmark.d.ts} +8 -58
  29. package/dist/src/examples/print-benchmark.js.map +1 -0
  30. package/dist/src/examples/robertson.d.ts +15 -0
  31. package/{docs/media → dist/src/examples}/robertson.js +2 -2
  32. package/dist/src/examples/robertson.js.map +1 -0
  33. package/dist/src/examples/scripting.d.ts +1 -0
  34. package/dist/src/examples/scripting.js.map +1 -0
  35. package/dist/src/examples/vdpol.d.ts +15 -0
  36. package/dist/src/examples/vdpol.js.map +1 -0
  37. package/dist/src/latex-export/examples/advanced-to-latex.d.ts +2 -0
  38. package/dist/src/latex-export/examples/advanced-to-latex.js +41 -0
  39. package/dist/src/latex-export/examples/advanced-to-latex.js.map +1 -0
  40. package/dist/src/latex-export/examples/basic-to-latex.d.ts +2 -0
  41. package/dist/src/latex-export/examples/basic-to-latex.js +17 -0
  42. package/dist/src/latex-export/examples/basic-to-latex.js.map +1 -0
  43. package/dist/src/latex-export/examples/bioreactor-to-latex-selective.d.ts +2 -0
  44. package/dist/src/latex-export/examples/bioreactor-to-latex-selective.js +145 -0
  45. package/dist/src/latex-export/examples/bioreactor-to-latex-selective.js.map +1 -0
  46. package/dist/src/latex-export/examples/chem-react-to-latex-no-cdot.d.ts +2 -0
  47. package/dist/src/latex-export/examples/chem-react-to-latex-no-cdot.js +41 -0
  48. package/dist/src/latex-export/examples/chem-react-to-latex-no-cdot.js.map +1 -0
  49. package/dist/src/latex-export/examples/energy-n-control-to-markdown.d.ts +2 -0
  50. package/dist/src/latex-export/examples/energy-n-control-to-markdown.js +58 -0
  51. package/dist/src/latex-export/examples/energy-n-control-to-markdown.js.map +1 -0
  52. package/dist/src/latex-export/examples/extended-to-markdown.d.ts +2 -0
  53. package/dist/src/latex-export/examples/extended-to-markdown.js +37 -0
  54. package/dist/src/latex-export/examples/extended-to-markdown.js.map +1 -0
  55. package/dist/src/latex-export/examples/fermentation-to-latex.d.ts +2 -0
  56. package/dist/src/latex-export/examples/fermentation-to-latex.js +32 -0
  57. package/dist/src/latex-export/examples/fermentation-to-latex.js.map +1 -0
  58. package/dist/src/latex-export/examples/ga-production-to-markdown.d.ts +2 -0
  59. package/dist/src/latex-export/examples/ga-production-to-markdown.js +58 -0
  60. package/dist/src/latex-export/examples/ga-production-to-markdown.js.map +1 -0
  61. package/dist/src/latex-export/examples/nimotuzumab-to-latex.d.ts +2 -0
  62. package/dist/src/latex-export/examples/nimotuzumab-to-latex.js +53 -0
  63. package/dist/src/latex-export/examples/nimotuzumab-to-latex.js.map +1 -0
  64. package/dist/src/latex-export/examples/pk-pd-to-markdown-minimal.d.ts +2 -0
  65. package/dist/src/latex-export/examples/pk-pd-to-markdown-minimal.js +50 -0
  66. package/dist/src/latex-export/examples/pk-pd-to-markdown-minimal.js.map +1 -0
  67. package/dist/src/latex-export/examples/pk-to-markdown.d.ts +2 -0
  68. package/dist/src/latex-export/examples/pk-to-markdown.js +35 -0
  69. package/dist/src/latex-export/examples/pk-to-markdown.js.map +1 -0
  70. package/dist/src/latex-export/examples/pollution-to-latex.d.ts +2 -0
  71. package/dist/src/latex-export/examples/pollution-to-latex.js +141 -0
  72. package/dist/src/latex-export/examples/pollution-to-latex.js.map +1 -0
  73. package/dist/src/latex-export/examples/robertson-to-latex-no-meta.d.ts +2 -0
  74. package/dist/src/latex-export/examples/robertson-to-latex-no-meta.js +25 -0
  75. package/dist/src/latex-export/examples/robertson-to-latex-no-meta.js.map +1 -0
  76. package/dist/src/latex-export/generator/bracket-manager.d.ts +19 -0
  77. package/dist/src/latex-export/generator/bracket-manager.js +58 -0
  78. package/dist/src/latex-export/generator/bracket-manager.js.map +1 -0
  79. package/dist/src/latex-export/generator/document-builder.d.ts +13 -0
  80. package/dist/src/latex-export/generator/document-builder.js +433 -0
  81. package/dist/src/latex-export/generator/document-builder.js.map +1 -0
  82. package/dist/src/latex-export/generator/latex-generator.d.ts +23 -0
  83. package/dist/src/latex-export/generator/latex-generator.js +176 -0
  84. package/dist/src/latex-export/generator/latex-generator.js.map +1 -0
  85. package/dist/src/latex-export/index.d.ts +8 -0
  86. package/dist/src/latex-export/index.js +25 -0
  87. package/dist/src/latex-export/index.js.map +1 -0
  88. package/dist/src/latex-export/output/md-formatter.d.ts +16 -0
  89. package/dist/src/latex-export/output/md-formatter.js +27 -0
  90. package/dist/src/latex-export/output/md-formatter.js.map +1 -0
  91. package/dist/src/latex-export/output/tex-formatter.d.ts +5 -0
  92. package/dist/src/latex-export/output/tex-formatter.js +20 -0
  93. package/dist/src/latex-export/output/tex-formatter.js.map +1 -0
  94. package/dist/src/latex-export/parser/ast-parser.d.ts +7 -0
  95. package/dist/src/latex-export/parser/ast-parser.js +153 -0
  96. package/dist/src/latex-export/parser/ast-parser.js.map +1 -0
  97. package/dist/src/latex-export/parser/ivp-parser.d.ts +6 -0
  98. package/dist/src/latex-export/parser/ivp-parser.js +219 -0
  99. package/dist/src/latex-export/parser/ivp-parser.js.map +1 -0
  100. package/dist/src/latex-export/parser/line-joiner.d.ts +25 -0
  101. package/dist/src/latex-export/parser/line-joiner.js +80 -0
  102. package/dist/src/latex-export/parser/line-joiner.js.map +1 -0
  103. package/dist/src/latex-export/parser/tokenizer.d.ts +7 -0
  104. package/dist/src/latex-export/parser/tokenizer.js +143 -0
  105. package/dist/src/latex-export/parser/tokenizer.js.map +1 -0
  106. package/dist/src/latex-export/transformer/functions.d.ts +12 -0
  107. package/dist/src/latex-export/transformer/functions.js +47 -0
  108. package/dist/src/latex-export/transformer/functions.js.map +1 -0
  109. package/dist/src/latex-export/transformer/identifier.d.ts +23 -0
  110. package/dist/src/latex-export/transformer/identifier.js +194 -0
  111. package/dist/src/latex-export/transformer/identifier.js.map +1 -0
  112. package/dist/src/latex-export/transformer/operators.d.ts +9 -0
  113. package/dist/src/latex-export/transformer/operators.js +41 -0
  114. package/dist/src/latex-export/transformer/operators.js.map +1 -0
  115. package/dist/src/latex-export/types.d.ts +122 -0
  116. package/dist/src/latex-export/types.js +10 -0
  117. package/dist/src/latex-export/types.js.map +1 -0
  118. package/{src/pipeline/basic-pipeline-creator.ts → dist/src/pipeline/basic-pipeline-creator.d.ts} +11 -28
  119. package/dist/src/pipeline/basic-pipeline-creator.js.map +1 -0
  120. package/dist/src/pipeline/constants.d.ts +14 -0
  121. package/dist/src/pipeline/constants.js.map +1 -0
  122. package/dist/src/pipeline/index.d.ts +7 -0
  123. package/dist/src/pipeline/index.js.map +1 -0
  124. package/dist/src/pipeline/input.d.ts +3 -0
  125. package/dist/src/pipeline/input.js.map +1 -0
  126. package/dist/src/pipeline/loops-pipeline-creator.d.ts +124 -0
  127. package/dist/src/pipeline/loops-pipeline-creator.js.map +1 -0
  128. package/dist/src/pipeline/output.d.ts +10 -0
  129. package/{src → dist/src}/pipeline/output.js +1 -1
  130. package/dist/src/pipeline/output.js.map +1 -0
  131. package/dist/src/pipeline/pipeline-creator.d.ts +12 -0
  132. package/{src → dist/src}/pipeline/pipeline-creator.js +2 -0
  133. package/dist/src/pipeline/pipeline-creator.js.map +1 -0
  134. package/{src/pipeline/pipeline.ts → dist/src/pipeline/pipeline.d.ts} +10 -97
  135. package/dist/src/pipeline/pipeline.js.map +1 -0
  136. package/{src/pipeline/updates-pipeline-creator.ts → dist/src/pipeline/updates-pipeline-creator.d.ts} +15 -131
  137. package/dist/src/pipeline/updates-pipeline-creator.js.map +1 -0
  138. package/dist/src/scripting-tools/constants.d.ts +59 -0
  139. package/dist/src/scripting-tools/constants.js.map +1 -0
  140. package/dist/src/scripting-tools/index.d.ts +3 -0
  141. package/dist/src/scripting-tools/index.js.map +1 -0
  142. package/dist/src/scripting-tools/model-error.d.ts +10 -0
  143. package/{src → dist/src}/scripting-tools/model-error.js +2 -1
  144. package/dist/src/scripting-tools/model-error.js.map +1 -0
  145. package/dist/src/scripting-tools/scripting-tools.d.ts +277 -0
  146. package/{src → dist/src}/scripting-tools/scripting-tools.js +2 -4
  147. package/dist/src/scripting-tools/scripting-tools.js.map +1 -0
  148. package/dist/src/solver-tools/ab4-method.d.ts +46 -0
  149. package/{src → dist/src}/solver-tools/ab4-method.js +3 -3
  150. package/dist/src/solver-tools/ab4-method.js.map +1 -0
  151. package/dist/src/solver-tools/ab5-method.d.ts +46 -0
  152. package/{src → dist/src}/solver-tools/ab5-method.js +3 -3
  153. package/dist/src/solver-tools/ab5-method.js.map +1 -0
  154. package/dist/src/solver-tools/callbacks/callback-base.d.ts +8 -0
  155. package/dist/src/solver-tools/callbacks/callback-base.js.map +1 -0
  156. package/dist/src/solver-tools/callbacks/callback-tools.d.ts +6 -0
  157. package/dist/src/solver-tools/callbacks/callback-tools.js.map +1 -0
  158. package/dist/src/solver-tools/callbacks/iter-checker-callback.d.ts +12 -0
  159. package/{src → dist/src}/solver-tools/callbacks/iter-checker-callback.js +2 -0
  160. package/dist/src/solver-tools/callbacks/iter-checker-callback.js.map +1 -0
  161. package/dist/src/solver-tools/callbacks/time-checker-callback.d.ts +12 -0
  162. package/{src → dist/src}/solver-tools/callbacks/time-checker-callback.js +2 -2
  163. package/dist/src/solver-tools/callbacks/time-checker-callback.js.map +1 -0
  164. package/dist/src/solver-tools/cvode/common.d.ts +395 -0
  165. package/dist/src/solver-tools/cvode/common.js +483 -0
  166. package/dist/src/solver-tools/cvode/common.js.map +1 -0
  167. package/dist/src/solver-tools/cvode/cvode.d.ts +23 -0
  168. package/dist/src/solver-tools/cvode/cvode.js.map +1 -0
  169. package/dist/src/solver-tools/cvode/cvode_adams.d.ts +22 -0
  170. package/dist/src/solver-tools/cvode/cvode_adams.js.map +1 -0
  171. package/dist/src/solver-tools/cvode/cvode_bdf.d.ts +37 -0
  172. package/dist/src/solver-tools/cvode/cvode_bdf.js.map +1 -0
  173. package/dist/src/solver-tools/cvode/cvode_class.d.ts +116 -0
  174. package/{src → dist/src}/solver-tools/cvode/cvode_class.js +9 -4
  175. package/dist/src/solver-tools/cvode/cvode_class.js.map +1 -0
  176. package/dist/src/solver-tools/cvode/cvode_hin.d.ts +24 -0
  177. package/dist/src/solver-tools/cvode/cvode_hin.js.map +1 -0
  178. package/dist/src/solver-tools/cvode/cvode_io.d.ts +98 -0
  179. package/{src → dist/src}/solver-tools/cvode/cvode_io.js +1 -2
  180. package/dist/src/solver-tools/cvode/cvode_io.js.map +1 -0
  181. package/dist/src/solver-tools/cvode/cvode_ls.d.ts +23 -0
  182. package/dist/src/solver-tools/cvode/cvode_ls.js.map +1 -0
  183. package/dist/src/solver-tools/cvode/cvode_nls.d.ts +25 -0
  184. package/dist/src/solver-tools/cvode/cvode_nls.js.map +1 -0
  185. package/dist/src/solver-tools/cvode/cvode_root.d.ts +64 -0
  186. package/dist/src/solver-tools/cvode/cvode_root.js.map +1 -0
  187. package/dist/src/solver-tools/cvode/dense_linalg.d.ts +50 -0
  188. package/dist/src/solver-tools/cvode/dense_linalg.js.map +1 -0
  189. package/dist/src/solver-tools/cvode/index.d.ts +24 -0
  190. package/dist/src/solver-tools/cvode/index.js.map +1 -0
  191. package/dist/src/solver-tools/cvode-method.d.ts +47 -0
  192. package/dist/src/solver-tools/cvode-method.js.map +1 -0
  193. package/dist/src/solver-tools/index.d.ts +16 -0
  194. package/dist/src/solver-tools/index.js.map +1 -0
  195. package/dist/src/solver-tools/lin-alg-tools.d.ts +6 -0
  196. package/dist/src/solver-tools/lin-alg-tools.js.map +1 -0
  197. package/dist/src/solver-tools/lsoda/blas.d.ts +59 -0
  198. package/dist/src/solver-tools/lsoda/blas.js.map +1 -0
  199. package/{src/solver-tools/lsoda/index.ts → dist/src/solver-tools/lsoda/cfode.d.ts} +7 -6
  200. package/dist/src/solver-tools/lsoda/cfode.js.map +1 -0
  201. package/dist/src/solver-tools/lsoda/common.d.ts +85 -0
  202. package/dist/src/solver-tools/lsoda/common.js +96 -0
  203. package/dist/src/solver-tools/lsoda/common.js.map +1 -0
  204. package/{src/solver-tools/lsoda/corfailure.ts → dist/src/solver-tools/lsoda/corfailure.d.ts} +2 -26
  205. package/dist/src/solver-tools/lsoda/corfailure.js.map +1 -0
  206. package/dist/src/solver-tools/lsoda/correction.d.ts +23 -0
  207. package/dist/src/solver-tools/lsoda/correction.js.map +1 -0
  208. package/dist/src/solver-tools/lsoda/dense.d.ts +47 -0
  209. package/{src → dist/src}/solver-tools/lsoda/dense.js +2 -0
  210. package/dist/src/solver-tools/lsoda/dense.js.map +1 -0
  211. package/dist/src/solver-tools/lsoda/index.d.ts +16 -0
  212. package/dist/src/solver-tools/lsoda/index.js.map +1 -0
  213. package/dist/src/solver-tools/lsoda/intdy.d.ts +19 -0
  214. package/dist/src/solver-tools/lsoda/intdy.js.map +1 -0
  215. package/dist/src/solver-tools/lsoda/lsoda.d.ts +66 -0
  216. package/{src → dist/src}/solver-tools/lsoda/lsoda.js +13 -5
  217. package/dist/src/solver-tools/lsoda/lsoda.js.map +1 -0
  218. package/dist/src/solver-tools/lsoda/methodswitch.d.ts +21 -0
  219. package/dist/src/solver-tools/lsoda/methodswitch.js.map +1 -0
  220. package/dist/src/solver-tools/lsoda/orderswitch.d.ts +21 -0
  221. package/dist/src/solver-tools/lsoda/orderswitch.js.map +1 -0
  222. package/dist/src/solver-tools/lsoda/prja.d.ts +18 -0
  223. package/dist/src/solver-tools/lsoda/prja.js.map +1 -0
  224. package/dist/src/solver-tools/lsoda/scaleh.d.ts +16 -0
  225. package/dist/src/solver-tools/lsoda/scaleh.js.map +1 -0
  226. package/{src/solver-tools/lsoda/solsy.ts → dist/src/solver-tools/lsoda/solsy.d.ts} +2 -15
  227. package/dist/src/solver-tools/lsoda/solsy.js.map +1 -0
  228. package/dist/src/solver-tools/lsoda/stoda.d.ts +19 -0
  229. package/dist/src/solver-tools/lsoda/stoda.js.map +1 -0
  230. package/dist/src/solver-tools/lsoda-method.d.ts +46 -0
  231. package/dist/src/solver-tools/lsoda-method.js.map +1 -0
  232. package/dist/src/solver-tools/mrt-method.d.ts +47 -0
  233. package/{src → dist/src}/solver-tools/mrt-method.js +2 -2
  234. package/dist/src/solver-tools/mrt-method.js.map +1 -0
  235. package/dist/src/solver-tools/rk3-method.d.ts +46 -0
  236. package/{src → dist/src}/solver-tools/rk3-method.js +2 -2
  237. package/dist/src/solver-tools/rk3-method.js.map +1 -0
  238. package/dist/src/solver-tools/rk4-method.d.ts +46 -0
  239. package/{src → dist/src}/solver-tools/rk4-method.js +2 -2
  240. package/dist/src/solver-tools/rk4-method.js.map +1 -0
  241. package/dist/src/solver-tools/rkdp-method.d.ts +46 -0
  242. package/{src → dist/src}/solver-tools/rkdp-method.js +2 -2
  243. package/dist/src/solver-tools/rkdp-method.js.map +1 -0
  244. package/dist/src/solver-tools/ros34prw-method.d.ts +46 -0
  245. package/{src → dist/src}/solver-tools/ros34prw-method.js +2 -2
  246. package/dist/src/solver-tools/ros34prw-method.js.map +1 -0
  247. package/dist/src/solver-tools/ros3prw-method.d.ts +46 -0
  248. package/{src → dist/src}/solver-tools/ros3prw-method.js +2 -2
  249. package/dist/src/solver-tools/ros3prw-method.js.map +1 -0
  250. package/{src/solver-tools/solver-defs.ts → dist/src/solver-tools/solver-defs.d.ts} +45 -85
  251. package/dist/src/solver-tools/solver-defs.js.map +1 -0
  252. package/dist/src/worker-tools/index.d.ts +2 -0
  253. package/dist/src/worker-tools/index.js.map +1 -0
  254. package/{src/worker-tools/scripting.ts → dist/src/worker-tools/scripting.d.ts} +9 -91
  255. package/dist/src/worker-tools/scripting.js.map +1 -0
  256. package/dist/src/worker-tools/solving.d.ts +7 -0
  257. package/dist/src/worker-tools/solving.js.map +1 -0
  258. package/package.json +10 -11
  259. package/.claude/settings.local.json +0 -11
  260. package/.claude/skills/license-updater/SKILL.md +0 -149
  261. package/.claude/skills/license-updater/references/compatibility.md +0 -68
  262. package/.claude/skills/license-updater/references/templates.md +0 -151
  263. package/.claude/skills/license-updater/scripts/generate_license_files.py +0 -467
  264. package/.eslintrc.json +0 -45
  265. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -29
  266. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  267. package/.github/PULL_REQUEST_TEMPLATE.md +0 -22
  268. package/.github/scripts/bump-js-api-version.sh +0 -106
  269. package/.github/scripts/check-output.sh +0 -20
  270. package/.github/scripts/iac-cfn-deploy.sh +0 -90
  271. package/.github/scripts/slack_api_request.sh +0 -65
  272. package/.github/scripts/test_package.sh +0 -270
  273. package/.github/workflows/deploy-docs.yml +0 -15
  274. package/.github/workflows/libraries.yaml +0 -305
  275. package/.github/workflows/test.yaml +0 -19
  276. package/CLAUDE.md +0 -104
  277. package/CONTRIBUTING.md +0 -74
  278. package/THIRD_PARTY_LICENSES +0 -135
  279. package/docs/.nojekyll +0 -1
  280. package/docs/assets/hierarchy.js +0 -1
  281. package/docs/assets/highlight.css +0 -99
  282. package/docs/assets/icons.js +0 -18
  283. package/docs/assets/icons.svg +0 -1
  284. package/docs/assets/main.js +0 -60
  285. package/docs/assets/navigation.js +0 -1
  286. package/docs/assets/search.js +0 -1
  287. package/docs/assets/style.css +0 -1633
  288. package/docs/classes/BasicModelPipelineCreator.html +0 -10
  289. package/docs/classes/Callback.html +0 -7
  290. package/docs/classes/CyclicModelPipelineCreator.html +0 -10
  291. package/docs/classes/IterCheckerCallback.html +0 -8
  292. package/docs/classes/PipelineCreator.html +0 -6
  293. package/docs/classes/TimeCheckerCallback.html +0 -8
  294. package/docs/classes/UpdatesModelPipelineCreator.html +0 -10
  295. package/docs/functions/ab4.html +0 -8
  296. package/docs/functions/ab5.html +0 -8
  297. package/docs/functions/applyPipeline.html +0 -9
  298. package/docs/functions/getCallback.html +0 -3
  299. package/docs/functions/getIVP.html +0 -6
  300. package/docs/functions/getInputVector.html +0 -2
  301. package/docs/functions/getIvp2WebWorker.html +0 -6
  302. package/docs/functions/getJScode.html +0 -6
  303. package/docs/functions/getOutputNames.html +0 -4
  304. package/docs/functions/getPipelineCreator.html +0 -7
  305. package/docs/functions/lsoda.html +0 -8
  306. package/docs/functions/mrt.html +0 -11
  307. package/docs/functions/printE5.html +0 -76
  308. package/docs/functions/printHires.html +0 -76
  309. package/docs/functions/printOrego.html +0 -66
  310. package/docs/functions/printPollution.html +0 -163
  311. package/docs/functions/printRobertson.html +0 -60
  312. package/docs/functions/printVdpol.html +0 -66
  313. package/docs/functions/rk3.html +0 -8
  314. package/docs/functions/rk4.html +0 -8
  315. package/docs/functions/rkdp.html +0 -8
  316. package/docs/functions/ros34prw.html +0 -8
  317. package/docs/functions/ros3prw.html +0 -8
  318. package/docs/functions/solveIvp.html +0 -5
  319. package/docs/hierarchy.html +0 -1
  320. package/docs/index.html +0 -768
  321. package/docs/media/CONTRIBUTING.md +0 -74
  322. package/docs/media/E5.png +0 -0
  323. package/docs/media/HIRES.png +0 -0
  324. package/docs/media/OREGO.png +0 -0
  325. package/docs/media/POLL-full.png +0 -0
  326. package/docs/media/POLL.png +0 -0
  327. package/docs/media/ROBER.png +0 -0
  328. package/docs/media/VDP0L.png +0 -0
  329. package/docs/media/VDPOL.png +0 -0
  330. package/docs/media/acid-prod.gif +0 -0
  331. package/docs/media/basic-use.js.map +0 -1
  332. package/docs/media/basic-use.ts +0 -44
  333. package/docs/media/check-methods.js +0 -59
  334. package/docs/media/check-methods.js.map +0 -1
  335. package/docs/media/check-methods.ts +0 -81
  336. package/docs/media/corr-probs.js +0 -132
  337. package/docs/media/corr-probs.js.map +0 -1
  338. package/docs/media/corr-probs.ts +0 -155
  339. package/docs/media/cyclic-model.js.map +0 -1
  340. package/docs/media/cyclic-model.ts +0 -112
  341. package/docs/media/e5.js.map +0 -1
  342. package/docs/media/e5.ts +0 -36
  343. package/docs/media/hires.js.map +0 -1
  344. package/docs/media/hires.ts +0 -40
  345. package/docs/media/model-updates.js.map +0 -1
  346. package/docs/media/model-updates.ts +0 -122
  347. package/docs/media/orego.js.map +0 -1
  348. package/docs/media/orego.ts +0 -25
  349. package/docs/media/pipeline-use.js.map +0 -1
  350. package/docs/media/pipeline-use.ts +0 -98
  351. package/docs/media/pollution.js.map +0 -1
  352. package/docs/media/pollution.ts +0 -133
  353. package/docs/media/print-benchmark.js.map +0 -1
  354. package/docs/media/print-benchmark.ts +0 -594
  355. package/docs/media/robertson.js.map +0 -1
  356. package/docs/media/robertson.ts +0 -19
  357. package/docs/media/scripting.js.map +0 -1
  358. package/docs/media/scripting.ts +0 -35
  359. package/docs/media/vdpol.js.map +0 -1
  360. package/docs/media/vdpol.ts +0 -17
  361. package/docs/modules.html +0 -1
  362. package/docs/types/Arg.html +0 -12
  363. package/docs/types/DifEqs.html +0 -8
  364. package/docs/types/Func.html +0 -7
  365. package/docs/types/IVP.html +0 -40
  366. package/docs/types/IVP2WebWorker.html +0 -12
  367. package/docs/types/Input.html +0 -8
  368. package/docs/types/Loop.html +0 -7
  369. package/docs/types/ODEs.html +0 -31
  370. package/docs/types/Output.html +0 -6
  371. package/docs/types/Pipeline.html +0 -6
  372. package/docs/types/SolverOptions.html +0 -8
  373. package/docs/types/Update.html +0 -9
  374. package/docs/types/Wrapper.html +0 -8
  375. package/eslintrc.json +0 -45
  376. package/images/E5.png +0 -0
  377. package/images/HIRES.png +0 -0
  378. package/images/OREGO.png +0 -0
  379. package/images/POLL-full.png +0 -0
  380. package/images/POLL.png +0 -0
  381. package/images/ROBER.png +0 -0
  382. package/images/VDP0L.png +0 -0
  383. package/images/VDPOL.png +0 -0
  384. package/images/acid-prod.gif +0 -0
  385. package/index.js.map +0 -1
  386. package/index.ts +0 -17
  387. package/jest.config.js +0 -13
  388. package/src/examples/basic-use.js +0 -40
  389. package/src/examples/basic-use.js.map +0 -1
  390. package/src/examples/basic-use.ts +0 -44
  391. package/src/examples/check-methods.js.map +0 -1
  392. package/src/examples/check-methods.ts +0 -96
  393. package/src/examples/corr-probs.js.map +0 -1
  394. package/src/examples/corr-probs.ts +0 -155
  395. package/src/examples/cyclic-model.js +0 -102
  396. package/src/examples/cyclic-model.js.map +0 -1
  397. package/src/examples/cyclic-model.ts +0 -112
  398. package/src/examples/e5.js +0 -36
  399. package/src/examples/e5.js.map +0 -1
  400. package/src/examples/e5.ts +0 -36
  401. package/src/examples/hires.js +0 -39
  402. package/src/examples/hires.js.map +0 -1
  403. package/src/examples/hires.ts +0 -40
  404. package/src/examples/index.js.map +0 -1
  405. package/src/examples/index.ts +0 -34
  406. package/src/examples/model-updates.js +0 -112
  407. package/src/examples/model-updates.js.map +0 -1
  408. package/src/examples/model-updates.ts +0 -122
  409. package/src/examples/orego.js +0 -24
  410. package/src/examples/orego.js.map +0 -1
  411. package/src/examples/orego.ts +0 -25
  412. package/src/examples/pipeline-use.js +0 -87
  413. package/src/examples/pipeline-use.js.map +0 -1
  414. package/src/examples/pipeline-use.ts +0 -98
  415. package/src/examples/pollution.js +0 -132
  416. package/src/examples/pollution.js.map +0 -1
  417. package/src/examples/pollution.ts +0 -133
  418. package/src/examples/print-benchmark.js +0 -581
  419. package/src/examples/print-benchmark.js.map +0 -1
  420. package/src/examples/robertson.js +0 -19
  421. package/src/examples/robertson.js.map +0 -1
  422. package/src/examples/robertson.ts +0 -19
  423. package/src/examples/scripting.js +0 -30
  424. package/src/examples/scripting.js.map +0 -1
  425. package/src/examples/scripting.ts +0 -35
  426. package/src/examples/vdpol.js +0 -17
  427. package/src/examples/vdpol.js.map +0 -1
  428. package/src/examples/vdpol.ts +0 -17
  429. package/src/pipeline/basic-pipeline-creator.js.map +0 -1
  430. package/src/pipeline/constants.js.map +0 -1
  431. package/src/pipeline/constants.ts +0 -21
  432. package/src/pipeline/index.js.map +0 -1
  433. package/src/pipeline/index.ts +0 -7
  434. package/src/pipeline/input.js.map +0 -1
  435. package/src/pipeline/input.ts +0 -55
  436. package/src/pipeline/loops-pipeline-creator.js.map +0 -1
  437. package/src/pipeline/loops-pipeline-creator.ts +0 -252
  438. package/src/pipeline/output.js.map +0 -1
  439. package/src/pipeline/output.ts +0 -201
  440. package/src/pipeline/pipeline-creator.js.map +0 -1
  441. package/src/pipeline/pipeline-creator.ts +0 -20
  442. package/src/pipeline/pipeline.js.map +0 -1
  443. package/src/pipeline/updates-pipeline-creator.js.map +0 -1
  444. package/src/scripting-tools/constants.js.map +0 -1
  445. package/src/scripting-tools/constants.ts +0 -69
  446. package/src/scripting-tools/index.js.map +0 -1
  447. package/src/scripting-tools/index.ts +0 -8
  448. package/src/scripting-tools/model-error.js.map +0 -1
  449. package/src/scripting-tools/model-error.ts +0 -21
  450. package/src/scripting-tools/scripting-tools.js.map +0 -1
  451. package/src/scripting-tools/scripting-tools.ts +0 -1582
  452. package/src/solver-tools/ab4-method.js.map +0 -1
  453. package/src/solver-tools/ab4-method.ts +0 -395
  454. package/src/solver-tools/ab5-method.js.map +0 -1
  455. package/src/solver-tools/ab5-method.ts +0 -397
  456. package/src/solver-tools/callbacks/callback-base.js.map +0 -1
  457. package/src/solver-tools/callbacks/callback-base.ts +0 -12
  458. package/src/solver-tools/callbacks/callback-tools.js.map +0 -1
  459. package/src/solver-tools/callbacks/callback-tools.ts +0 -22
  460. package/src/solver-tools/callbacks/iter-checker-callback.js.map +0 -1
  461. package/src/solver-tools/callbacks/iter-checker-callback.ts +0 -25
  462. package/src/solver-tools/callbacks/time-checker-callback.js.map +0 -1
  463. package/src/solver-tools/callbacks/time-checker-callback.ts +0 -23
  464. package/src/solver-tools/cvode/common.js +0 -487
  465. package/src/solver-tools/cvode/common.js.map +0 -1
  466. package/src/solver-tools/cvode/common.ts +0 -549
  467. package/src/solver-tools/cvode/cvode.js.map +0 -1
  468. package/src/solver-tools/cvode/cvode.ts +0 -1226
  469. package/src/solver-tools/cvode/cvode_adams.js.map +0 -1
  470. package/src/solver-tools/cvode/cvode_adams.ts +0 -142
  471. package/src/solver-tools/cvode/cvode_bdf.js.map +0 -1
  472. package/src/solver-tools/cvode/cvode_bdf.ts +0 -164
  473. package/src/solver-tools/cvode/cvode_class.js.map +0 -1
  474. package/src/solver-tools/cvode/cvode_class.ts +0 -271
  475. package/src/solver-tools/cvode/cvode_hin.js.map +0 -1
  476. package/src/solver-tools/cvode/cvode_hin.ts +0 -150
  477. package/src/solver-tools/cvode/cvode_io.js.map +0 -1
  478. package/src/solver-tools/cvode/cvode_io.ts +0 -258
  479. package/src/solver-tools/cvode/cvode_ls.js.map +0 -1
  480. package/src/solver-tools/cvode/cvode_ls.ts +0 -249
  481. package/src/solver-tools/cvode/cvode_nls.js.map +0 -1
  482. package/src/solver-tools/cvode/cvode_nls.ts +0 -259
  483. package/src/solver-tools/cvode/cvode_root.js.map +0 -1
  484. package/src/solver-tools/cvode/cvode_root.ts +0 -503
  485. package/src/solver-tools/cvode/dense_linalg.js.map +0 -1
  486. package/src/solver-tools/cvode/dense_linalg.ts +0 -144
  487. package/src/solver-tools/cvode/index.js.map +0 -1
  488. package/src/solver-tools/cvode/index.ts +0 -64
  489. package/src/solver-tools/cvode-method.js.map +0 -1
  490. package/src/solver-tools/cvode-method.ts +0 -129
  491. package/src/solver-tools/index.js.map +0 -1
  492. package/src/solver-tools/index.ts +0 -16
  493. package/src/solver-tools/lin-alg-tools.js.map +0 -1
  494. package/src/solver-tools/lin-alg-tools.ts +0 -75
  495. package/src/solver-tools/lsoda/blas.js.map +0 -1
  496. package/src/solver-tools/lsoda/blas.ts +0 -279
  497. package/src/solver-tools/lsoda/cfode.js.map +0 -1
  498. package/src/solver-tools/lsoda/cfode.ts +0 -95
  499. package/src/solver-tools/lsoda/common.js +0 -94
  500. package/src/solver-tools/lsoda/common.js.map +0 -1
  501. package/src/solver-tools/lsoda/common.ts +0 -135
  502. package/src/solver-tools/lsoda/corfailure.js.map +0 -1
  503. package/src/solver-tools/lsoda/correction.js.map +0 -1
  504. package/src/solver-tools/lsoda/correction.ts +0 -131
  505. package/src/solver-tools/lsoda/dense.js.map +0 -1
  506. package/src/solver-tools/lsoda/dense.ts +0 -141
  507. package/src/solver-tools/lsoda/index.js.map +0 -1
  508. package/src/solver-tools/lsoda/intdy.js.map +0 -1
  509. package/src/solver-tools/lsoda/intdy.ts +0 -62
  510. package/src/solver-tools/lsoda/lsoda.js.map +0 -1
  511. package/src/solver-tools/lsoda/lsoda.ts +0 -644
  512. package/src/solver-tools/lsoda/methodswitch.js.map +0 -1
  513. package/src/solver-tools/lsoda/methodswitch.ts +0 -119
  514. package/src/solver-tools/lsoda/orderswitch.js.map +0 -1
  515. package/src/solver-tools/lsoda/orderswitch.ts +0 -107
  516. package/src/solver-tools/lsoda/prja.js.map +0 -1
  517. package/src/solver-tools/lsoda/prja.ts +0 -61
  518. package/src/solver-tools/lsoda/scaleh.js.map +0 -1
  519. package/src/solver-tools/lsoda/scaleh.ts +0 -45
  520. package/src/solver-tools/lsoda/solsy.js.map +0 -1
  521. package/src/solver-tools/lsoda/stoda.js.map +0 -1
  522. package/src/solver-tools/lsoda/stoda.ts +0 -298
  523. package/src/solver-tools/lsoda-method.js.map +0 -1
  524. package/src/solver-tools/lsoda-method.ts +0 -154
  525. package/src/solver-tools/mrt-method.js.map +0 -1
  526. package/src/solver-tools/mrt-method.ts +0 -398
  527. package/src/solver-tools/rk3-method.js.map +0 -1
  528. package/src/solver-tools/rk3-method.ts +0 -257
  529. package/src/solver-tools/rk4-method.js.map +0 -1
  530. package/src/solver-tools/rk4-method.ts +0 -286
  531. package/src/solver-tools/rkdp-method.js.map +0 -1
  532. package/src/solver-tools/rkdp-method.ts +0 -300
  533. package/src/solver-tools/ros34prw-method.js.map +0 -1
  534. package/src/solver-tools/ros34prw-method.ts +0 -373
  535. package/src/solver-tools/ros3prw-method.js.map +0 -1
  536. package/src/solver-tools/ros3prw-method.ts +0 -342
  537. package/src/solver-tools/solver-defs.js.map +0 -1
  538. package/src/tests/correctness.test.js +0 -15
  539. package/src/tests/correctness.test.js.map +0 -1
  540. package/src/tests/correctness.test.ts +0 -16
  541. package/src/tests/cvode-lib-correctness.test.js +0 -404
  542. package/src/tests/cvode-lib-correctness.test.js.map +0 -1
  543. package/src/tests/cvode-lib-correctness.test.ts +0 -505
  544. package/src/tests/cvode-lib-performance.test.js +0 -103
  545. package/src/tests/cvode-lib-performance.test.js.map +0 -1
  546. package/src/tests/cvode-lib-performance.test.ts +0 -128
  547. package/src/tests/lsoda-lib-correctness.test.js +0 -223
  548. package/src/tests/lsoda-lib-correctness.test.js.map +0 -1
  549. package/src/tests/lsoda-lib-correctness.test.ts +0 -283
  550. package/src/tests/lsoda-lib-performance.test.js +0 -95
  551. package/src/tests/lsoda-lib-performance.test.js.map +0 -1
  552. package/src/tests/lsoda-lib-performance.test.ts +0 -126
  553. package/src/tests/performance.test.js +0 -18
  554. package/src/tests/performance.test.js.map +0 -1
  555. package/src/tests/performance.test.ts +0 -19
  556. package/src/tests/pipeline.test.js +0 -10
  557. package/src/tests/pipeline.test.js.map +0 -1
  558. package/src/tests/pipeline.test.ts +0 -11
  559. package/src/tests/test-defs.js +0 -213
  560. package/src/tests/test-defs.js.map +0 -1
  561. package/src/tests/test-defs.ts +0 -232
  562. package/src/tests/test-utils.js +0 -28
  563. package/src/tests/test-utils.js.map +0 -1
  564. package/src/tests/test-utils.ts +0 -37
  565. package/src/worker-tools/index.js.map +0 -1
  566. package/src/worker-tools/index.ts +0 -2
  567. package/src/worker-tools/scripting.js.map +0 -1
  568. package/src/worker-tools/solving.js.map +0 -1
  569. package/src/worker-tools/solving.ts +0 -86
  570. package/tsconfig.json +0 -71
  571. package/typedoc.json +0 -8
  572. /package/{docs/media → dist/src/examples}/basic-use.js +0 -0
  573. /package/{src → dist/src}/examples/check-methods.js +0 -0
  574. /package/{docs/media → dist/src/examples}/cyclic-model.js +0 -0
  575. /package/{docs/media → dist/src/examples}/e5.js +0 -0
  576. /package/{docs/media → dist/src/examples}/hires.js +0 -0
  577. /package/{src → dist/src}/examples/index.js +0 -0
  578. /package/{docs/media → dist/src/examples}/model-updates.js +0 -0
  579. /package/{docs/media → dist/src/examples}/orego.js +0 -0
  580. /package/{docs/media → dist/src/examples}/pipeline-use.js +0 -0
  581. /package/{docs/media → dist/src/examples}/pollution.js +0 -0
  582. /package/{docs/media → dist/src/examples}/print-benchmark.js +0 -0
  583. /package/{docs/media → dist/src/examples}/scripting.js +0 -0
  584. /package/{docs/media → dist/src/examples}/vdpol.js +0 -0
  585. /package/{src → dist/src}/pipeline/basic-pipeline-creator.js +0 -0
  586. /package/{src → dist/src}/pipeline/constants.js +0 -0
  587. /package/{src → dist/src}/pipeline/index.js +0 -0
  588. /package/{src → dist/src}/pipeline/input.js +0 -0
  589. /package/{src → dist/src}/pipeline/loops-pipeline-creator.js +0 -0
  590. /package/{src → dist/src}/pipeline/pipeline.js +0 -0
  591. /package/{src → dist/src}/pipeline/updates-pipeline-creator.js +0 -0
  592. /package/{src → dist/src}/scripting-tools/constants.js +0 -0
  593. /package/{src → dist/src}/scripting-tools/index.js +0 -0
  594. /package/{src → dist/src}/solver-tools/callbacks/callback-base.js +0 -0
  595. /package/{src → dist/src}/solver-tools/callbacks/callback-tools.js +0 -0
  596. /package/{src → dist/src}/solver-tools/cvode/cvode.js +0 -0
  597. /package/{src → dist/src}/solver-tools/cvode/cvode_adams.js +0 -0
  598. /package/{src → dist/src}/solver-tools/cvode/cvode_bdf.js +0 -0
  599. /package/{src → dist/src}/solver-tools/cvode/cvode_hin.js +0 -0
  600. /package/{src → dist/src}/solver-tools/cvode/cvode_ls.js +0 -0
  601. /package/{src → dist/src}/solver-tools/cvode/cvode_nls.js +0 -0
  602. /package/{src → dist/src}/solver-tools/cvode/cvode_root.js +0 -0
  603. /package/{src → dist/src}/solver-tools/cvode/dense_linalg.js +0 -0
  604. /package/{src → dist/src}/solver-tools/cvode/index.js +0 -0
  605. /package/{src → dist/src}/solver-tools/cvode-method.js +0 -0
  606. /package/{src → dist/src}/solver-tools/index.js +0 -0
  607. /package/{src → dist/src}/solver-tools/lin-alg-tools.js +0 -0
  608. /package/{src → dist/src}/solver-tools/lsoda/blas.js +0 -0
  609. /package/{src → dist/src}/solver-tools/lsoda/cfode.js +0 -0
  610. /package/{src → dist/src}/solver-tools/lsoda/corfailure.js +0 -0
  611. /package/{src → dist/src}/solver-tools/lsoda/correction.js +0 -0
  612. /package/{src → dist/src}/solver-tools/lsoda/index.js +0 -0
  613. /package/{src → dist/src}/solver-tools/lsoda/intdy.js +0 -0
  614. /package/{src → dist/src}/solver-tools/lsoda/methodswitch.js +0 -0
  615. /package/{src → dist/src}/solver-tools/lsoda/orderswitch.js +0 -0
  616. /package/{src → dist/src}/solver-tools/lsoda/prja.js +0 -0
  617. /package/{src → dist/src}/solver-tools/lsoda/scaleh.js +0 -0
  618. /package/{src → dist/src}/solver-tools/lsoda/solsy.js +0 -0
  619. /package/{src → dist/src}/solver-tools/lsoda/stoda.js +0 -0
  620. /package/{src → dist/src}/solver-tools/lsoda-method.js +0 -0
  621. /package/{src → dist/src}/solver-tools/solver-defs.js +0 -0
  622. /package/{src → dist/src}/worker-tools/index.js +0 -0
  623. /package/{src → dist/src}/worker-tools/scripting.js +0 -0
  624. /package/{src → dist/src}/worker-tools/solving.js +0 -0
package/docs/index.html DELETED
@@ -1,768 +0,0 @@
1
- <!DOCTYPE html><html class="default" lang="en" data-base="./"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>diff-grok - v1.1.0</title><meta name="description" content="Documentation for diff-grok"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script defer src="assets/main.js"></script><script async src="assets/icons.js" id="tsd-icons-script"></script><script async src="assets/search.js" id="tsd-search-script"></script><script async src="assets/navigation.js" id="tsd-nav-script"></script><script async src="assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="index.html" class="title">diff-grok - v1.1.0</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><h1>diff-grok - v1.1.0</h1></div><div class="tsd-panel tsd-typography"><h1 id="diff-grok" class="tsd-anchor-link">Diff Grok<a href="#diff-grok" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h1><p><a href="https://doi.org/10.5281/zenodo.17974378"><img src="https://zenodo.org/badge/635090135.svg" alt="DOI"></a>
2
- <a href="https://datagrok-ai.github.io/diff-grok/"><img src="https://img.shields.io/badge/docs-stable-blue.svg" alt="Docs-stable"></a>
3
- <a href="https://github.com/datagrok-ai/diff-grok/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-success.svg" alt="License: MIT"></a>
4
- <a href="https://github.com/datagrok-ai/diff-grok/actions/workflows/libraries.yaml"><img src="https://github.com/datagrok-ai/diff-grok/actions/workflows/libraries.yaml/badge.svg" alt="Build Status"></a>
5
- <a href="https://github.com/datagrok-ai/diff-grok/actions/workflows/test.yaml"><img src="https://github.com/datagrok-ai/diff-grok/actions/workflows/test.yaml/badge.svg" alt="Run tests"></a></p>
6
- <p>A lightweight TypeScript library for solving initial value problem (<a href="https://en.wikipedia.org/wiki/Initial_value_problem">IVP</a>) for ordinary differential equations (<a href="https://en.wikipedia.org/wiki/Ordinary_differential_equation">ODEs</a>) using numerical methods. The primary solver is <a href="https://doi.org/10.1137/0904010">LSODA</a> — a variable-order method that automatically detects stiffness and switches between Adams (non-stiff) and BDF (stiff) formulations.</p>
7
- <h2 id="features" class="tsd-anchor-link">Features<a href="#features" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><ul>
8
- <li>Solving both <a href="https://en.wikipedia.org/wiki/Stiff_equation">stiff</a> and non-stiff equations</li>
9
- <li>Fast computations</li>
10
- <li>Automatic stiffness-detecting method:
11
- <ul>
12
- <li><a href="https://doi.org/10.1137/0904010">LSODA</a> - variable-order Nordsieck-based solver with automatic switching between Adams (non-stiff) and BDF (stiff) methods (<a href="https://doi.org/10.1137/0904010">Petzold, 1983</a>; <a href="https://computing.llnl.gov/sites/default/files/ODEPACK_pub1_u88007.pdf">Hindmarsh, 1983</a>). Ported to TypeScript from the C library <a href="https://github.com/sdwfrost/liblsoda">liblsoda</a></li>
13
- </ul>
14
- </li>
15
- <li>Implicit methods (for stiff ODEs) - Rosenbrock–Wanner type:
16
- <ul>
17
- <li>The modified Rosenbrock triple (<a href="https://doi.org/10.1137/S1064827594276424">MRT</a>)</li>
18
- <li>The <a href="https://doi.org/10.1016/j.cam.2015.03.010">ROS3PRw</a> method</li>
19
- <li>The <a href="https://doi.org/10.1016/j.cam.2015.03.010">ROS34PRw</a> method</li>
20
- </ul>
21
- </li>
22
- <li>Explicit methods (for non-stiff ODEs):
23
- <ul>
24
- <li>Runge-Kutta type:
25
- <ul>
26
- <li>The Bogacki-Shampine 3(2) method (<a href="https://en.wikipedia.org/wiki/Bogacki%E2%80%93Shampine_method">RK3</a>)</li>
27
- <li>The Runge-Kutta-Fehlberg method (<a href="https://en.wikipedia.org/wiki/Runge%E2%80%93Kutta%E2%80%93Fehlberg_method">RK4</a>)</li>
28
- <li>The Dormand-Prince 5(4) method (<a href="https://en.wikipedia.org/wiki/Dormand%E2%80%93Prince_method">RKDP</a>)</li>
29
- </ul>
30
- </li>
31
- <li>Adams-Bashforth type:
32
- <ul>
33
- <li>The predictor-corrector method of order 4 (<a href="https://en.wikipedia.org/wiki/Linear_multistep_method">AB4</a>)</li>
34
- <li>The predictor-corrector method of order 5 (<a href="https://en.wikipedia.org/wiki/Linear_multistep_method">AB5</a>)</li>
35
- </ul>
36
- </li>
37
- </ul>
38
- </li>
39
- <li>Scripting:
40
- <ul>
41
- <li>declarative specification of models</li>
42
- <li>auto-generated JavaScript code</li>
43
- </ul>
44
- </li>
45
- <li>Integration with the <a href="https://datagrok.ai">Datagrok</a> platform</li>
46
- <li>Zero dependencies</li>
47
- </ul>
48
- <h2 id="installation" class="tsd-anchor-link">Installation<a href="#installation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>To install via npm:</p>
49
- <pre><code class="bash"><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-2">install</span><span class="hl-1"> </span><span class="hl-2">diff-grok</span>
50
- </code><button type="button">Copy</button></pre>
51
-
52
- <p>Minimal &quot;Hello World&quot; example:</p>
53
- <pre><code class="typescript"><span class="hl-3">// example.ts</span><br/><br/><span class="hl-4">import</span><span class="hl-1"> {</span><span class="hl-5">ODEs</span><span class="hl-1">, </span><span class="hl-5">mrt</span><span class="hl-1">} </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">&#39;diff-grok&#39;</span><span class="hl-1">;</span><br/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">task</span><span class="hl-1">: </span><span class="hl-8">ODEs</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-5">name:</span><span class="hl-1"> </span><span class="hl-2">&#39;Example&#39;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">arg:</span><span class="hl-1"> {</span><span class="hl-5">name:</span><span class="hl-1"> </span><span class="hl-2">&#39;t&#39;</span><span class="hl-1">, </span><span class="hl-5">start:</span><span class="hl-1"> </span><span class="hl-9">0</span><span class="hl-1">, </span><span class="hl-5">finish:</span><span class="hl-1"> </span><span class="hl-9">1</span><span class="hl-1">, </span><span class="hl-5">step:</span><span class="hl-1"> </span><span class="hl-9">0.1</span><span class="hl-1">},</span><br/><span class="hl-1"> </span><span class="hl-5">initial:</span><span class="hl-1"> [</span><span class="hl-9">1</span><span class="hl-1">, -</span><span class="hl-9">1</span><span class="hl-1">],</span><br/><span class="hl-1"> </span><span class="hl-0">func</span><span class="hl-5">:</span><span class="hl-1"> (</span><span class="hl-5">t</span><span class="hl-1">: </span><span class="hl-8">number</span><span class="hl-1">, </span><span class="hl-5">y</span><span class="hl-1">: </span><span class="hl-8">Float64Array</span><span class="hl-1">, </span><span class="hl-5">output</span><span class="hl-1">: </span><span class="hl-8">Float64Array</span><span class="hl-1">) </span><span class="hl-6">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">out</span><span class="hl-1">[</span><span class="hl-9">0</span><span class="hl-1">] = </span><span class="hl-5">y</span><span class="hl-1">[</span><span class="hl-9">0</span><span class="hl-1">] - </span><span class="hl-5">t</span><span class="hl-1">;</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-5">tolerance:</span><span class="hl-1"> </span><span class="hl-9">1e-7</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">solutionColNames:</span><span class="hl-1"> [</span><span class="hl-2">&#39;y(t)&#39;</span><span class="hl-1">],</span><br/><span class="hl-1">};</span><br/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">solution</span><span class="hl-1"> = </span><span class="hl-0">mrt</span><span class="hl-1">(</span><span class="hl-5">task</span><span class="hl-1">);</span><br/><br/><span class="hl-5">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-2">&#39;t:&#39;</span><span class="hl-1">, </span><span class="hl-5">solution</span><span class="hl-1">[</span><span class="hl-9">0</span><span class="hl-1">]);</span><br/><span class="hl-5">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-2">&#39;y(t):&#39;</span><span class="hl-1">, </span><span class="hl-5">solution</span><span class="hl-1">[</span><span class="hl-9">1</span><span class="hl-1">]);</span>
54
- </code><button type="button">Copy</button></pre>
55
-
56
- <h2 id="solving" class="tsd-anchor-link">Solving<a href="#solving" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><h3 id="general" class="tsd-anchor-link">General<a href="#general" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>To find numerical solution of a problem:</p>
57
- <p>$$\frac{dy}{dt} = f(t, y)$$
58
- $$y(t_{0}) = y_0$$</p>
59
- <p>on the segment $[t_0, t_1]$ with the step $h$:</p>
60
- <ol>
61
- <li>
62
- <p>Import <code>ODEs</code> and a desired numerical method:</p>
63
- <p>Automatic method:</p>
64
- <ul>
65
- <li><code>lsoda</code> - <a href="https://doi.org/10.1137/0904010">LSODA</a> variable-order solver with automatic switching between Adams (non-stiff) and BDF (stiff)</li>
66
- </ul>
67
- <p>Implicit methods (for stiff ODEs):</p>
68
- <ul>
69
- <li><code>mrt</code> - the <a href="https://doi.org/10.1137/S1064827594276424">MRT</a> method</li>
70
- <li><code>ros3prw</code>- the <a href="https://doi.org/10.1016/j.cam.2015.03.010">ROS3PRw</a> method</li>
71
- <li><code>ros34prw</code> - the <a href="https://doi.org/10.1016/j.cam.2015.03.010">ROS34PRw</a> method</li>
72
- </ul>
73
- <p>Explicit methods (for non-stiff ODEs) — Runge-Kutta type:</p>
74
- <ul>
75
- <li><code>rk3</code> - the Bogacki-Shampine 3(2) method</li>
76
- <li><code>rk4</code> - the Runge-Kutta-Fehlberg 4(5) method</li>
77
- <li><code>rkdp</code> - the Dormand-Prince 5(4) method</li>
78
- </ul>
79
- <p>Explicit methods (for non-stiff ODEs) — Adams-Bashforth type:</p>
80
- <ul>
81
- <li><code>ab4</code> - the predictor-corrector method of order 4</li>
82
- <li><code>ab5</code> - the predictor-corrector method of order 5</li>
83
- </ul>
84
- </li>
85
- <li>
86
- <p>Specify <code>ODEs</code> object that defines a problem:</p>
87
- <ul>
88
- <li>
89
- <p><code>name</code> - name of a model</p>
90
- </li>
91
- <li>
92
- <p><code>arg</code> - independent variable specification. This is in object with fields:</p>
93
- <ul>
94
- <li><code>name</code> - name of the argument, $t$</li>
95
- <li><code>start</code> - initial value of the argument, $t_0$</li>
96
- <li><code>finish</code> - final value of the argument, $t_1$</li>
97
- <li><code>step</code> - solution grid step, $h$</li>
98
- </ul>
99
- </li>
100
- <li>
101
- <p><code>initial</code> - initial values, $y_0$</p>
102
- </li>
103
- <li>
104
- <p><code>func</code> - right-hand side of the system, $f(t, y)$. This is a function <code>(t: number, y: Float64Array, output: Float64Array) =&gt; void</code>:</p>
105
- <ul>
106
- <li><code>t</code> - value of independent variable $t$</li>
107
- <li><code>y</code> - values of $y$</li>
108
- <li><code>output</code> - output values of $f(t, y)$</li>
109
- </ul>
110
- </li>
111
- <li>
112
- <p><code>tolerance</code> - numerical tolerance</p>
113
- </li>
114
- <li>
115
- <p><code>solutionColNames</code> - names of solutions, i.e. names of the vector $y$ elements</p>
116
- </li>
117
- </ul>
118
- </li>
119
- <li>
120
- <p>Call numerical method. It returns <code>Float64Array</code>-arrays with values of an argument and approximate solutions.</p>
121
- </li>
122
- </ol>
123
- <p>Diff Grok is designed to provide fast computations. Check <a href="#performance">performance</a> for the details.</p>
124
- <h3 id="example" class="tsd-anchor-link">Example<a href="#example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Consider the following problem:</p>
125
- <p>$$\begin{cases}
126
- \frac{dx}{dt} = x + y - t \
127
- \frac{dy}{dt} = x y + t \
128
- x(0) = 1 \
129
- y(0) = -1
130
- \end{cases}$$</p>
131
- <p>To solve it on the segment $[0, 2]$ with the step $0.01$ using <a href="https://doi.org/10.1137/0904010">LSODA</a> with the tolerance $10^{-7}$, we start with imports:</p>
132
- <pre><code class="typescript"><span class="hl-4">import</span><span class="hl-1"> {</span><span class="hl-5">ODEs</span><span class="hl-1">, </span><span class="hl-5">lsoda</span><span class="hl-1">} </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">&#39;diff-grok&#39;</span><span class="hl-1">;</span>
133
- </code><button type="button">Copy</button></pre>
134
-
135
- <p>Next, we create</p>
136
- <pre><code class="typescript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">task</span><span class="hl-1">: </span><span class="hl-8">ODEs</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-5">name:</span><span class="hl-1"> </span><span class="hl-2">&#39;Example&#39;</span><span class="hl-1">, </span><span class="hl-3">// name of your model</span><br/><span class="hl-1"> </span><span class="hl-5">arg:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">name:</span><span class="hl-1"> </span><span class="hl-2">&#39;t&#39;</span><span class="hl-1">, </span><span class="hl-3">// name of the argument</span><br/><span class="hl-1"> </span><span class="hl-5">start:</span><span class="hl-1"> </span><span class="hl-9">0</span><span class="hl-1">, </span><span class="hl-3">// initial value of the argument</span><br/><span class="hl-1"> </span><span class="hl-5">finish:</span><span class="hl-1"> </span><span class="hl-9">2</span><span class="hl-1">, </span><span class="hl-3">// final value of the argument</span><br/><span class="hl-1"> </span><span class="hl-5">step:</span><span class="hl-1"> </span><span class="hl-9">0.01</span><span class="hl-1">, </span><span class="hl-3">// solution grid step</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-5">initial:</span><span class="hl-1"> [</span><span class="hl-9">1</span><span class="hl-1">, -</span><span class="hl-9">1</span><span class="hl-1">], </span><span class="hl-3">// initial values</span><br/><span class="hl-1"> </span><span class="hl-0">func</span><span class="hl-5">:</span><span class="hl-1"> (</span><span class="hl-5">t</span><span class="hl-1">: </span><span class="hl-8">number</span><span class="hl-1">, </span><span class="hl-5">y</span><span class="hl-1">: </span><span class="hl-8">Float64Array</span><span class="hl-1">, </span><span class="hl-5">output</span><span class="hl-1">: </span><span class="hl-8">Float64Array</span><span class="hl-1">) </span><span class="hl-6">=&gt;</span><span class="hl-1"> { </span><span class="hl-3">// right-hand side of the system</span><br/><span class="hl-1"> </span><span class="hl-5">output</span><span class="hl-1">[</span><span class="hl-9">0</span><span class="hl-1">] = </span><span class="hl-5">y</span><span class="hl-1">[</span><span class="hl-9">0</span><span class="hl-1">] + </span><span class="hl-5">y</span><span class="hl-1">[</span><span class="hl-9">1</span><span class="hl-1">] - </span><span class="hl-5">t</span><span class="hl-1">; </span><span class="hl-3">// 1-st equation</span><br/><span class="hl-1"> </span><span class="hl-5">output</span><span class="hl-1">[</span><span class="hl-9">1</span><span class="hl-1">] = </span><span class="hl-5">y</span><span class="hl-1">[</span><span class="hl-9">0</span><span class="hl-1">] * </span><span class="hl-5">y</span><span class="hl-1">[</span><span class="hl-9">1</span><span class="hl-1">] + </span><span class="hl-5">t</span><span class="hl-1">; </span><span class="hl-3">// 2-nd equation</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-5">tolerance:</span><span class="hl-1"> </span><span class="hl-9">1e-7</span><span class="hl-1">, </span><span class="hl-3">// tolerance</span><br/><span class="hl-1"> </span><span class="hl-5">solutionColNames:</span><span class="hl-1"> [</span><span class="hl-2">&#39;x&#39;</span><span class="hl-1">, </span><span class="hl-2">&#39;y&#39;</span><span class="hl-1">], </span><span class="hl-3">// names of solution functions</span><br/><span class="hl-1">};</span>
137
- </code><button type="button">Copy</button></pre>
138
-
139
- <p>Finally, we call the specified numerical method to solve <code>task</code>:</p>
140
- <pre><code class="typescript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">solution</span><span class="hl-1"> = </span><span class="hl-0">lsoda</span><span class="hl-1">(</span><span class="hl-5">task</span><span class="hl-1">);</span>
141
- </code><button type="button">Copy</button></pre>
142
-
143
- <p>Currently, <code>solution</code> contains:</p>
144
- <ul>
145
- <li><code>solution[0]</code> - values of $t$, i.e. the range $0..2$ with the step $0.01$</li>
146
- <li><code>solution[1]</code> - values of $x(t)$ at the points of this range</li>
147
- <li><code>solution[2]</code> - values of $y(t)$ at the points of the same range</li>
148
- </ul>
149
- <p>Find this example in <a href="media/basic-use.ts">basic-use.ts</a>.</p>
150
- <h2 id="performance" class="tsd-anchor-link">Performance<a href="#performance" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>The following <a href="https://archimede.uniba.it/~testset/testsetivpsolvers/?page_id=26#ODE">classic problems</a> are used to evaluate efficiency of Diff Grok methods:</p>
151
- <ul>
152
- <li><a href="https://archimede.uniba.it/~testset/report/rober.pdf">Rober</a>
153
- <ul>
154
- <li>a stiff system of 3 nonlinear ODEs</li>
155
- <li>describes the kinetics of an autocatalytic reaction given by Robertson</li>
156
- <li><a href="media/robertson.ts">robertson.ts</a></li>
157
- </ul>
158
- </li>
159
- <li><a href="https://archimede.uniba.it/~testset/report/hires.pdf">HIRES</a>
160
- <ul>
161
- <li>a stiff system of 8 non-linear equations</li>
162
- <li>explains the `High Irradiance Responses' (HIRES) of photomorphogenesis on the basis of phytochrome, by means of a chemical reaction involving eight reactants</li>
163
- <li><a href="media/hires.ts">hires.ts</a></li>
164
- </ul>
165
- </li>
166
- <li><a href="https://archimede.uniba.it/~testset/report/vdpol.pdf">VDPOL</a>
167
- <ul>
168
- <li>a system of 2 ODEs proposed by B. van der Pol</li>
169
- <li>describes the behaviour of nonlinear vacuum tube circuits</li>
170
- <li><a href="media/vdpol.ts">vdpol.ts</a></li>
171
- </ul>
172
- </li>
173
- <li><a href="https://archimede.uniba.it/~testset/report/orego.pdf">OREGO</a>
174
- <ul>
175
- <li>a stiff system of 3 non-linear equations</li>
176
- <li>simulates Belousov-Zhabotinskii reaction</li>
177
- <li><a href="media/orego.ts">orego.ts</a></li>
178
- </ul>
179
- </li>
180
- <li><a href="https://archimede.uniba.it/~testset/report/e5.pdf">E5</a>
181
- <ul>
182
- <li>a stiff system of 4 non-linear ODEs</li>
183
- <li>represents a chemical pyrolysis model</li>
184
- <li><a href="media/e5.ts">e5.ts</a></li>
185
- </ul>
186
- </li>
187
- <li><a href="https://archimede.uniba.it/~testset/report/pollu.pdf">Pollution</a>
188
- <ul>
189
- <li>a stiff system of 20 non-linear equations</li>
190
- <li>describes a chemical reaction part of the air pollution model designed at The Dutch National Institute of Public Health and Environmental Protection</li>
191
- <li><a href="media/pollution.ts">pollution.ts</a></li>
192
- </ul>
193
- </li>
194
- </ul>
195
- <p>The LSODA, MRT, ROS3PRw and ROS34PRw methods demonstrate the following time performance (AMD Ryzen 5 5600H 3.30 GHz CPU):</p>
196
- <table>
197
- <thead>
198
- <tr>
199
- <th>Problem</th>
200
- <th>Segment</th>
201
- <th>Points</th>
202
- <th>Tolerance</th>
203
- <th>LSODA, ms</th>
204
- <th>MRT, ms</th>
205
- <th>ROS3PRw, ms</th>
206
- <th>ROS34PRw, ms</th>
207
- </tr>
208
- </thead>
209
- <tbody>
210
- <tr>
211
- <td><a href="https://archimede.uniba.it/~testset/report/rober.pdf">Rober</a></td>
212
- <td>[0, 10E+11]</td>
213
- <td>40K</td>
214
- <td>1E-7</td>
215
- <td>67</td>
216
- <td>175</td>
217
- <td>446</td>
218
- <td>285</td>
219
- </tr>
220
- <tr>
221
- <td><a href="https://archimede.uniba.it/~testset/report/hires.pdf">HIRES</a></td>
222
- <td>[0, 321.8122]</td>
223
- <td>32K</td>
224
- <td>1E-10</td>
225
- <td>125</td>
226
- <td>122</td>
227
- <td>362</td>
228
- <td>215</td>
229
- </tr>
230
- <tr>
231
- <td><a href="https://archimede.uniba.it/~testset/report/vdpol.pdf">VDPOL</a></td>
232
- <td>[0, 2000]</td>
233
- <td>20K</td>
234
- <td>1E-12</td>
235
- <td>268</td>
236
- <td>492</td>
237
- <td>1576</td>
238
- <td>760</td>
239
- </tr>
240
- <tr>
241
- <td><a href="https://archimede.uniba.it/~testset/report/orego.pdf">OREGO</a></td>
242
- <td>[0, 360]</td>
243
- <td>36K</td>
244
- <td>1E-8</td>
245
- <td>76</td>
246
- <td>205</td>
247
- <td>483</td>
248
- <td>199</td>
249
- </tr>
250
- <tr>
251
- <td><a href="https://archimede.uniba.it/~testset/report/e5.pdf">E5</a></td>
252
- <td>[0, 10E+13]</td>
253
- <td>40K</td>
254
- <td>1E-6</td>
255
- <td>7</td>
256
- <td>6</td>
257
- <td>17</td>
258
- <td>8</td>
259
- </tr>
260
- <tr>
261
- <td><a href="https://archimede.uniba.it/~testset/report/pollu.pdf">Pollution</a></td>
262
- <td>[0, 60]</td>
263
- <td>30K</td>
264
- <td>1E-6</td>
265
- <td>12</td>
266
- <td>18</td>
267
- <td>50</td>
268
- <td>23</td>
269
- </tr>
270
- </tbody>
271
- </table>
272
- <p>Maximum absolute deviations (MADs) from the reference solutions obtained using SciPy (Radau) are summarized in the table below:</p>
273
- <table>
274
- <thead>
275
- <tr>
276
- <th>Problem</th>
277
- <th>LSODA</th>
278
- <th>MRT</th>
279
- <th>ROS3PRw</th>
280
- <th>ROS34PRw</th>
281
- </tr>
282
- </thead>
283
- <tbody>
284
- <tr>
285
- <td><a href="https://archimede.uniba.it/~testset/report/rober.pdf">Rober</a></td>
286
- <td>1.87e-8</td>
287
- <td>1.87e-8</td>
288
- <td>1.88e-8</td>
289
- <td>1.88e-8</td>
290
- </tr>
291
- <tr>
292
- <td><a href="https://archimede.uniba.it/~testset/report/hires.pdf">HIRES</a></td>
293
- <td>1.51e-11</td>
294
- <td>4.80e-11</td>
295
- <td>1.05e-14</td>
296
- <td>2.87e-14</td>
297
- </tr>
298
- <tr>
299
- <td><a href="https://archimede.uniba.it/~testset/report/vdpol.pdf">VDPOL</a></td>
300
- <td>5.12e-4</td>
301
- <td>5.12e-4</td>
302
- <td>5.12e-4</td>
303
- <td>5.12e-4</td>
304
- </tr>
305
- <tr>
306
- <td><a href="https://archimede.uniba.it/~testset/report/orego.pdf">OREGO</a></td>
307
- <td>3.84e-6</td>
308
- <td>3.05e-5</td>
309
- <td>3.45e-7</td>
310
- <td>2.31e-6</td>
311
- </tr>
312
- <tr>
313
- <td><a href="https://archimede.uniba.it/~testset/report/e5.pdf">E5</a></td>
314
- <td>3.02e-19</td>
315
- <td>1.12e-19</td>
316
- <td>1.33e-19</td>
317
- <td>3.40e-17</td>
318
- </tr>
319
- <tr>
320
- <td><a href="https://archimede.uniba.it/~testset/report/pollu.pdf">Pollution</a></td>
321
- <td>1.23e-10</td>
322
- <td>4.06e-10</td>
323
- <td>9.16e-12</td>
324
- <td>1.58e-10</td>
325
- </tr>
326
- </tbody>
327
- </table>
328
- <p>Run <a href="media/check-methods.ts">check-methods.ts</a> to reproduce these results (see <a href="#examples">here</a> how to run scripts standalone).</p>
329
- <p>The following charts compare the Diff Grok and Radau solutions for the <strong>van der Pol</strong> system:</p>
330
- <p><img src="media/VDPOL.png" alt="VDPOL"></p>
331
- <p>The following graphs present a comparison of the Diff Grok and Radau solutions for the <strong>Pollution</strong> model, highlighting a portion of the functions:</p>
332
- <p><img src="media/POLL.png" alt="Pollution"></p>
333
- <details>
334
- <summary><strong>Gallery</strong></summary>
335
- <p><strong>VDPOL</strong></p>
336
- <p><img src="media/VDP0L.png" alt="VDPOL"></p>
337
- <p><strong>HIRES</strong></p>
338
- <p><img src="media/HIRES.png" alt="HIRES"></p>
339
- <p><strong>E5</strong></p>
340
- <p><img src="media/E5.png" alt="E5"></p>
341
- <p><strong>POLL</strong></p>
342
- <p><img src="media/POLL-full.png" alt="POLL"></p>
343
- <p><strong>OREGO</strong></p>
344
- <p><img src="media/OREGO.png" alt="OREGO"></p>
345
- <p><strong>Rober</strong></p>
346
- <p><img src="media/ROBER.png" alt="ROBER"></p>
347
- </details>
348
- <details>
349
- <summary><strong>Run benchmarks</strong></summary>
350
- <p>Run benchmark models and find the reference solutions via the following links to the <a href="https://public.datagrok.ai">Datagrok</a> platform:</p>
351
- <table>
352
- <thead>
353
- <tr>
354
- <th>Problem</th>
355
- <th>Diff Grok</th>
356
- <th>Radau</th>
357
- </tr>
358
- </thead>
359
- <tbody>
360
- <tr>
361
- <td>Rober</td>
362
- <td><a href="https://public.datagrok.ai/file/System.AppData/DiffStudio/benchmarks/ROBER.ivp">ROBER.ivp</a></td>
363
- <td><a href="https://public.datagrok.ai/file/System.AppData/DiffStudio/benchmarks/ROBER-using-Radau.csv?browse=files">ROBER.csv</a></td>
364
- </tr>
365
- <tr>
366
- <td>HIRES</td>
367
- <td><a href="https://public.datagrok.ai/file/System.AppData/DiffStudio/benchmarks/HIRES.ivp">HIRES.ivp</a></td>
368
- <td><a href="https://public.datagrok.ai/file/System.AppData/DiffStudio/benchmarks/HIRES-using-Radau.csv?browse=files">HIRES.csv</a></td>
369
- </tr>
370
- <tr>
371
- <td>VDPOL</td>
372
- <td><a href="https://public.datagrok.ai/file/System.AppData/DiffStudio/benchmarks/VDPOL.ivp">VDPOL.ivp</a></td>
373
- <td><a href="https://public.datagrok.ai/file/System.AppData/DiffStudio/benchmarks/VANDERPOL-using-Radau.csv?browse=files">VDPOL.csv</a></td>
374
- </tr>
375
- <tr>
376
- <td>OREGO</td>
377
- <td><a href="https://public.datagrok.ai/file/System.AppData/DiffStudio/benchmarks/OREGO.ivp">OREGO.ivp</a></td>
378
- <td><a href="https://public.datagrok.ai/file/System.AppData/DiffStudio/benchmarks/OREGO-using-Radau.csv?browse=files">OREGO.csv</a></td>
379
- </tr>
380
- <tr>
381
- <td>E5</td>
382
- <td><a href="https://public.datagrok.ai/file/System.AppData/DiffStudio/benchmarks/E5.ivp">E5.ivp</a></td>
383
- <td><a href="https://public.datagrok.ai/file/System.AppData/DiffStudio/benchmarks/E5-using-Radau.csv?browse=files">E5.csv</a></td>
384
- </tr>
385
- <tr>
386
- <td>Pollution</td>
387
- <td><a href="https://public.datagrok.ai/file/System.AppData/DiffStudio/benchmarks/POLL.ivp">POLL.ivp</a></td>
388
- <td><a href="https://public.datagrok.ai/file/System.AppData/DiffStudio/benchmarks/POLL-using-Radau.csv?browse=files">POLL.csv</a></td>
389
- </tr>
390
- </tbody>
391
- </table>
392
- <p>In the file <a href="media/print-benchmark.ts">print-benchmark.ts</a>, you can find standalone functions that print the solutions of these problems to the console, as well as Python scripts for computing the solutions using SciPy.</p>
393
- </details>
394
- <h2 id="scripting" class="tsd-anchor-link">Scripting<a href="#scripting" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>The library provides tools for declarative specifying models defined by IVPs. This feature enables a development of &quot;no-code&quot; modeling tools seamlessly integrated with the <a href="https://datagrok.ai">Datagrok</a> platform.</p>
395
- <h3 id="model-components-and-syntax" class="tsd-anchor-link">Model components and syntax<a href="#model-components-and-syntax" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Each <strong>model</strong> has a simple declarative syntax.</p>
396
- <h4 id="core-blocks" class="tsd-anchor-link">Core blocks<a href="#core-blocks" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p>These blocks define the basic mathematical model and are required for any model:</p>
397
- <ol>
398
- <li>
399
- <p><code>#name</code>: Add a model identifier</p>
400
- <pre><code class="python">#name: Problem
401
- </code><button type="button">Copy</button></pre>
402
-
403
- </li>
404
- <li>
405
- <p><code>#equations</code>: Define the system of ODEs to solve. Diff Grok supports any number of equations with single or multi-letter variable names</p>
406
- <pre><code class="python">#equations:
407
- dx/dt = x + y + exp(t)
408
- dy/dt = x - y - cos(t)
409
- </code><button type="button">Copy</button></pre>
410
-
411
- </li>
412
- <li>
413
- <p><code>#argument</code>: Defines</p>
414
- <ul>
415
- <li>independent variable</li>
416
- <li>its initial value (<code>initial</code>)</li>
417
- <li>final value (<code>final</code>), and</li>
418
- <li>grid step (<code>step</code>)</li>
419
- </ul>
420
- <p>The solver calculates values at each step interval across the specified [<em>initial,final</em>] range.</p>
421
- <pre><code class="python">#argument: t
422
- initial = 0
423
- final = 1
424
- step = 0.01
425
- </code><button type="button">Copy</button></pre>
426
-
427
- </li>
428
- <li>
429
- <p><code>#inits</code>: Defines initial values for functions being solved</p>
430
- <pre><code class="python">#inits:
431
- x = 2
432
- y = 5
433
- </code><button type="button">Copy</button></pre>
434
-
435
- </li>
436
- </ol>
437
- <h4 id="comments" class="tsd-anchor-link">Comments<a href="#comments" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><ul>
438
- <li>
439
- <p><code>#comment</code>: Write a comment in any place of your model</p>
440
- <pre><code class="python">#comment:
441
- You can provide any text here. The lib ignores it.
442
- </code><button type="button">Copy</button></pre>
443
-
444
- </li>
445
- <li>
446
- <p>Place comments right in formulas using <code>//</code></p>
447
- <pre><code class="python">#equations:
448
- dx/dt = x + y + exp(t) // 1-st equation
449
- dy/dt = x - y - cos(t) // 2-nd equation
450
- </code><button type="button">Copy</button></pre>
451
-
452
- </li>
453
- </ul>
454
- <h4 id="model-parameters" class="tsd-anchor-link">Model parameters<a href="#model-parameters" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p>These blocks define values used in equations. Choose type based on intended use:</p>
455
- <ul>
456
- <li>
457
- <p><code>#parameters</code>: Generate UI controls for model exploration</p>
458
- <pre><code class="python">#parameters:
459
- P1 = 1
460
- P2 = -1
461
-
462
- </code><button type="button">Copy</button></pre>
463
-
464
- </li>
465
- <li>
466
- <p><code>#constants</code>: Use for fixed values in equations that don't require UI controls</p>
467
- <pre><code class="python">#constants:
468
- C1 = 1
469
- C2 = 3
470
- </code><button type="button">Copy</button></pre>
471
-
472
- </li>
473
- </ul>
474
- <h4 id="auxiliary-calculations" class="tsd-anchor-link">Auxiliary calculations<a href="#auxiliary-calculations" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p>This block defines mathematical functions using <code>#parameters</code>, <code>#constants</code>,
475
- <code>#argument</code>, and other functions. These are direct calculations (no ODEs involved). Use them to break
476
- down complex calculations and simplify your equations.</p>
477
- <ul>
478
- <li>
479
- <p><code>#expressions</code></p>
480
- <pre><code class="python">#expressions:
481
- E1 = C1 * t + P1
482
- E2 = C2 * cos(2 * t) + P2
483
- </code><button type="button">Copy</button></pre>
484
-
485
- </li>
486
- </ul>
487
- <h3 id="js-code-generation" class="tsd-anchor-link">JS-code generation<a href="#js-code-generation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>To transform any model to JavaScript code with an appropriate specification of <code>ODEs</code> object, follow the steps:</p>
488
- <ol>
489
- <li>Import the parsing and code generating tools:</li>
490
- </ol>
491
- <pre><code class="typescript"><span class="hl-4">import</span><span class="hl-1"> {</span><span class="hl-5">getIVP</span><span class="hl-1">, </span><span class="hl-5">getJScode</span><span class="hl-1">} </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">&#39;diff-grok&#39;</span><span class="hl-1">;</span>
492
- </code><button type="button">Copy</button></pre>
493
-
494
- <ol start="2">
495
- <li>Define a string with a model specification, use a simple <a href="#model-components-and-syntax">model syntax</a>:</li>
496
- </ol>
497
- <pre><code class="typescript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">model</span><span class="hl-1"> = </span><span class="hl-2">`</span><br/><span class="hl-2">#name: Example</span><br/><span class="hl-2">#equations:</span><br/><span class="hl-2"> dx/dt = x + y - cos(t)</span><br/><span class="hl-2"> dy/dt = x - y + sin(t)</span><br/><span class="hl-2">...</span><br/><span class="hl-2">`</span><span class="hl-1">;</span>
498
- </code><button type="button">Copy</button></pre>
499
-
500
- <ol start="3">
501
- <li>Parse formulas:</li>
502
- </ol>
503
- <pre><code class="typescript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">ivp</span><span class="hl-1"> = </span><span class="hl-0">getIVP</span><span class="hl-1">(</span><span class="hl-5">model</span><span class="hl-1">);</span>
504
- </code><button type="button">Copy</button></pre>
505
-
506
- <p>The method <code>getIVP</code> parses formulas and returns <code>IVP</code> object specifying a model.</p>
507
- <ol start="4">
508
- <li>Generate JS-code:</li>
509
- </ol>
510
- <pre><code class="typescript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">lines</span><span class="hl-1"> = </span><span class="hl-0">getJScode</span><span class="hl-1">(</span><span class="hl-5">ivp</span><span class="hl-1">);</span>
511
- </code><button type="button">Copy</button></pre>
512
-
513
- <p>The method <code>getJScode</code> transforms <code>IVP</code> object to JavaScript code. It returns an array of strings with this code.</p>
514
- <p>Find this example in <a href="media/scripting.ts">scripting.ts</a>.</p>
515
- <h3 id="pipelines" class="tsd-anchor-link">Pipelines<a href="#pipelines" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Diff Grok <strong>pipeline</strong> is a powerful feature for complex process simulation and model analysis in webworkers. It wraps the main solver with a set of actions that perform pre- and post-processing of a model inputs &amp; outputs. In addition, they provide an output customization.</p>
516
- <ol>
517
- <li>Start with imports:</li>
518
- </ol>
519
- <pre><code class="typescript"><span class="hl-4">import</span><span class="hl-1"> </span><span class="hl-6">*</span><span class="hl-1"> </span><span class="hl-4">as</span><span class="hl-1"> </span><span class="hl-5">DGL</span><span class="hl-1"> </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">&#39;diff-grok&#39;</span><span class="hl-1">;</span>
520
- </code><button type="button">Copy</button></pre>
521
-
522
- <ol start="2">
523
- <li>Define your model:</li>
524
- </ol>
525
- <pre><code class="typescript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">model</span><span class="hl-1"> = </span><span class="hl-2">`#name: My model</span><br/><span class="hl-2">#equations:</span><br/><span class="hl-2"> dx/dt = ...</span><br/><span class="hl-2"> dy/dt = ...</span><br/><span class="hl-2"> ...</span><br/><br/><span class="hl-2">#inits:</span><br/><span class="hl-2"> x = 2</span><br/><span class="hl-2"> y = 3</span><br/><span class="hl-2"> ...</span>
526
- </code><button type="button">Copy</button></pre>
527
-
528
- <ol start="3">
529
- <li>Generate IVP-objects:</li>
530
- </ol>
531
- <ul>
532
- <li>for the main thread computations:</li>
533
- </ul>
534
- <pre><code class="typescript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">ivp</span><span class="hl-1"> = </span><span class="hl-7">DGL</span><span class="hl-1">.</span><span class="hl-0">getIVP</span><span class="hl-1">(</span><span class="hl-5">model</span><span class="hl-1">);</span>
535
- </code><button type="button">Copy</button></pre>
536
-
537
- <ul>
538
- <li>for computations in workers:</li>
539
- </ul>
540
- <pre><code class="typescript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">ivpWW</span><span class="hl-1"> = </span><span class="hl-7">DGL</span><span class="hl-1">.</span><span class="hl-0">getIvp2WebWorker</span><span class="hl-1">(</span><span class="hl-5">ivp</span><span class="hl-1">);</span>
541
- </code><button type="button">Copy</button></pre>
542
-
543
- <ol start="4">
544
- <li>Set model inputs:</li>
545
- </ol>
546
- <pre><code class="typescript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">inputs</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-5">x:</span><span class="hl-1"> </span><span class="hl-9">2</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">y:</span><span class="hl-1"> </span><span class="hl-9">30</span><span class="hl-1">,</span><br/><span class="hl-1"> ...</span><br/><span class="hl-1">};</span>
547
- </code><button type="button">Copy</button></pre>
548
-
549
- <ol start="5">
550
- <li>Create typed input array:</li>
551
- </ol>
552
- <pre><code class="typescript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">inputVector</span><span class="hl-1"> = </span><span class="hl-7">DGL</span><span class="hl-1">.</span><span class="hl-0">getInputVector</span><span class="hl-1">(</span><span class="hl-5">inputs</span><span class="hl-1">, </span><span class="hl-5">ivp</span><span class="hl-1">);</span>
553
- </code><button type="button">Copy</button></pre>
554
-
555
- <ol start="6">
556
- <li>Get a pipeline:</li>
557
- </ol>
558
- <pre><code class="typescript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">creator</span><span class="hl-1"> = </span><span class="hl-7">DGL</span><span class="hl-1">.</span><span class="hl-0">getPipelineCreator</span><span class="hl-1">(</span><span class="hl-5">ivp</span><span class="hl-1">);</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">pipeline</span><span class="hl-1"> = </span><span class="hl-5">creator</span><span class="hl-1">.</span><span class="hl-0">getPipeline</span><span class="hl-1">(</span><span class="hl-5">inputVector</span><span class="hl-1">);</span>
559
- </code><button type="button">Copy</button></pre>
560
-
561
- <p>You can pass <code>pipeline</code>, <code>ivpWW</code>, and <code>inputVector</code> to webworkers.</p>
562
- <ol start="7">
563
- <li>Apply pipeline to perform computations:</li>
564
- </ol>
565
- <pre><code class="typescript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">solution</span><span class="hl-1"> = </span><span class="hl-7">DGL</span><span class="hl-1">.</span><span class="hl-0">applyPipeline</span><span class="hl-1">(</span><span class="hl-5">pipeline</span><span class="hl-1">, </span><span class="hl-5">ivpWW</span><span class="hl-1">, </span><span class="hl-5">inputVector</span><span class="hl-1">);</span>
566
- </code><button type="button">Copy</button></pre>
567
-
568
- <p>Find complete examples in these files:</p>
569
- <ul>
570
- <li><a href="media/pipeline-use.ts">pipeline-use.ts</a> - A basic example demonstrating pipeline usage</li>
571
- <li><a href="media/model-updates.ts">model-updates.ts</a> - A simulation of a multi-stage process using pipelines</li>
572
- <li><a href="media/cyclic-model.ts">cyclic-model.ts</a> - A simulation of a cyclic process using pipelines</li>
573
- </ul>
574
- <h2 id="integration-with-datagrok" class="tsd-anchor-link">Integration with Datagrok<a href="#integration-with-datagrok" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p><a href="https://datagrok.ai">Datagrok</a> is a platform enabling powerful scientific computing capabilities. It provides next-generation environment for leveraging interactive visualizations, data access, machine learning, and enterprise features to enable developing, publishing, discovering, and using scientific applications.</p>
575
- <p>The library is seamlessly integrated to Datagrok via the <a href="https://github.com/datagrok-ai/public/tree/master/packages/DiffStudio">Diff Studio</a> package. It provides</p>
576
- <ul>
577
- <li>Numerical solving IVPs directly in the browser</li>
578
- <li>&quot;No-code&quot; models development</li>
579
- <li>Solving both stiff and non-stiff systems of ODEs</li>
580
- <li>Automatic generation of user interfaces</li>
581
- <li>Interactive visualization and model exploration</li>
582
- <li>Sensitivity analysis and parameters optimization</li>
583
- <li>Sharing models and computational results</li>
584
- </ul>
585
- <p>Run the Diff Studio <a href="https://public.datagrok.ai/apps/DiffStudio">app</a> and check interactive modeling:</p>
586
- <p><img src="media/acid-prod.gif" alt="DiffStudio"></p>
587
- <p>Learn more</p>
588
- <ul>
589
- <li>Diff Studio application <a href="https://datagrok.ai/help/compute/diff-studio">docs</a></li>
590
- <li>Diff Studio example <a href="https://datagrok.ai/help/compute/models">models</a></li>
591
- <li><a href="https://datagrok.ai/help/compute/function-analysis#parameter-optimization">Parameters optimization</a></li>
592
- <li><a href="https://datagrok.ai/help/compute/function-analysis#sensitivity-analysis">Sensitivity analysis</a></li>
593
- </ul>
594
- <h2 id="environment-requirements" class="tsd-anchor-link">Environment Requirements<a href="#environment-requirements" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><h3 id="development-build" class="tsd-anchor-link">Development &amp; Build<a href="#development-build" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><ul>
595
- <li><strong>Node.js ≥ 19.3.0</strong> (required for development and building the library)</li>
596
- <li><strong>npm</strong> or <strong>yarn</strong> package manager</li>
597
- </ul>
598
- <h3 id="runtime-environments" class="tsd-anchor-link">Runtime Environments<a href="#runtime-environments" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><h4 id="server-side-nodejs" class="tsd-anchor-link">Server-Side (Node.js)<a href="#server-side-nodejs" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><ul>
599
- <li><strong>Node.js ≥ 16.0.0</strong> (for server-side usage)
600
- <ul>
601
- <li>Requires support for ES modules</li>
602
- <li><code>Float64Array</code> and typed arrays support (available since Node.js 0.10+)</li>
603
- </ul>
604
- </li>
605
- </ul>
606
- <h4 id="operating-systems" class="tsd-anchor-link">Operating Systems<a href="#operating-systems" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><ul>
607
- <li>Windows (x64, ARM64)</li>
608
- <li>macOS (Intel &amp; Apple Silicon)</li>
609
- <li>Linux (most common distributions)</li>
610
- </ul>
611
- <h4 id="browser-support" class="tsd-anchor-link">Browser Support<a href="#browser-support" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p>The library runs in all modern browsers with ES2015+ support. Key requirements:</p>
612
- <ul>
613
- <li><strong>ES Modules</strong> (native <code>import</code>/<code>export</code>)</li>
614
- <li><strong>Typed Arrays</strong> (<code>Float64Array</code>, <code>Uint8Array</code>)</li>
615
- <li><strong>WebWorkers</strong> (for pipeline computations)</li>
616
- <li><strong>ArrayBuffer</strong> support</li>
617
- </ul>
618
- <table>
619
- <thead>
620
- <tr>
621
- <th>Browser</th>
622
- <th>Minimum Version</th>
623
- <th>Supported?</th>
624
- <th>Notes</th>
625
- </tr>
626
- </thead>
627
- <tbody>
628
- <tr>
629
- <td><strong>Chrome</strong></td>
630
- <td>63+</td>
631
- <td>✔️ Yes</td>
632
- <td>Full ES2015+ and WebWorker support</td>
633
- </tr>
634
- <tr>
635
- <td><strong>Firefox</strong></td>
636
- <td>60+</td>
637
- <td>✔️ Yes</td>
638
- <td>Full ES2015+ and WebWorker support</td>
639
- </tr>
640
- <tr>
641
- <td><strong>Safari (macOS/iOS)</strong></td>
642
- <td>11.1+</td>
643
- <td>✔️ Yes</td>
644
- <td>Native ES module and WebWorker support</td>
645
- </tr>
646
- <tr>
647
- <td><strong>Edge (Chromium)</strong></td>
648
- <td>79+</td>
649
- <td>✔️ Yes</td>
650
- <td>Same support level as Chrome</td>
651
- </tr>
652
- <tr>
653
- <td><strong>Opera</strong></td>
654
- <td>50+</td>
655
- <td>✔️ Yes</td>
656
- <td>Chromium-based, full support</td>
657
- </tr>
658
- <tr>
659
- <td><strong>Legacy Browsers</strong></td>
660
- <td>-</td>
661
- <td>❌ No</td>
662
- <td>IE 11, pre-Chromium Edge, old Android browsers</td>
663
- </tr>
664
- </tbody>
665
- </table>
666
- <p><strong>Browser Feature Requirements:</strong></p>
667
- <ul>
668
- <li>ES2015 (ES6) JavaScript support</li>
669
- <li>Native ES modules (<code>&lt;script type=&quot;module&quot;&gt;</code>)</li>
670
- <li><code>Float64Array</code> and other typed arrays</li>
671
- <li><code>WebWorker</code> API (for parallel computations)</li>
672
- <li><code>Promise</code> support</li>
673
- <li><code>Math</code> object with standard functions (<code>exp</code>, <code>sin</code>, <code>cos</code>, etc.)</li>
674
- </ul>
675
- <p><strong>Notes:</strong></p>
676
- <ul>
677
- <li>For older browsers, consider using a transpiler (Babel) and bundler (Webpack/Rollup)</li>
678
- <li>TypeScript compilation target should be ES2015 or higher</li>
679
- <li>WebWorker support is required for pipeline computations; without it, computations run on the main thread</li>
680
- </ul>
681
- <h3 id="bundler-configuration" class="tsd-anchor-link">Bundler Configuration<a href="#bundler-configuration" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>When bundling for browsers, ensure:</p>
682
- <ul>
683
- <li>ES module output format is preserved or properly transformed</li>
684
- <li>TypedArray polyfills are not included (not needed for target browsers)</li>
685
- <li>WebWorker files are properly handled by your bundler</li>
686
- </ul>
687
- <h3 id="polyfills" class="tsd-anchor-link">Polyfills<a href="#polyfills" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>No polyfills required for target environments. All required features are natively supported in the minimum browser versions listed above.</p>
688
- <h2 id="examples" class="tsd-anchor-link">Examples<a href="#examples" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>Diff Grok contains a set of examples located in the folder <a href="media/examples">src/examples</a>:</p>
689
- <table>
690
- <thead>
691
- <tr>
692
- <th>File</th>
693
- <th>Features</th>
694
- </tr>
695
- </thead>
696
- <tbody>
697
- <tr>
698
- <td><a href="media/basic-use.ts">basic-use.ts</a></td>
699
- <td>Minimal &quot;Hello World&quot; example. Illustrates the use of the <a href="https://doi.org/10.1137/0904010">LSODA</a> method.</td>
700
- </tr>
701
- <tr>
702
- <td><a href="media/check-methods.ts">check-methods.ts</a></td>
703
- <td>Checks the <a href="#performance">performance</a> of numerical methods.</td>
704
- </tr>
705
- <tr>
706
- <td><a href="media/corr-probs.ts">corr-probs.ts</a></td>
707
- <td>Solves a set of problems with exact solutions and evaluate the deviation.</td>
708
- </tr>
709
- <tr>
710
- <td><a href="media/cyclic-model.ts">cyclic-model.ts</a></td>
711
- <td>Considers pharmacokinetic-pharmacodynamic (PK-PD) simulation and shows how to apply pipelines and cyclic models.</td>
712
- </tr>
713
- <tr>
714
- <td><a href="media/model-updates.ts">model-updates.ts</a></td>
715
- <td>Considers gluconic acid (GA) production by Aspergillus niger modeling and shows how to apply pipelines and models with updates.</td>
716
- </tr>
717
- <tr>
718
- <td><a href="media/pipeline-use.ts">pipeline-use.ts</a></td>
719
- <td>Considers modeling queues and shows shows how to apply pipelines and models with customized outputs.</td>
720
- </tr>
721
- <tr>
722
- <td><a href="media/scripting.ts">scripting.ts</a></td>
723
- <td>Shows how to generate JS-script from Diff Grok model.</td>
724
- </tr>
725
- </tbody>
726
- </table>
727
- <details>
728
- <summary><strong>Run examples</strong></summary>
729
- <p>To run examples standalone:</p>
730
- <ol>
731
- <li>Install TypeScript locally. If your project does not already include TypeScript:</li>
732
- </ol>
733
- <pre><code class="bash"><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-2">install</span><span class="hl-1"> </span><span class="hl-6">--save-dev</span><span class="hl-1"> </span><span class="hl-2">typescript</span>
734
- </code><button type="button">Copy</button></pre>
735
-
736
- <ol start="2">
737
- <li>Create a tsconfig.json. If you do not have one yet:</li>
738
- </ol>
739
- <pre><code class="bash"><span class="hl-0">npx</span><span class="hl-1"> </span><span class="hl-2">tsc</span><span class="hl-1"> </span><span class="hl-6">--init</span>
740
- </code><button type="button">Copy</button></pre>
741
-
742
- <p>Recommended configuration:</p>
743
- <pre><code class="json"><span class="hl-1">{</span><br/><span class="hl-1"> </span><span class="hl-10">&quot;compilerOptions&quot;</span><span class="hl-1">: {</span><br/><span class="hl-1"> </span><span class="hl-10">&quot;target&quot;</span><span class="hl-1">: </span><span class="hl-2">&quot;es6&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-10">&quot;lib&quot;</span><span class="hl-1">: [</span><span class="hl-2">&quot;ES2022&quot;</span><span class="hl-1">, </span><span class="hl-2">&quot;dom&quot;</span><span class="hl-1">],</span><br/><span class="hl-1"> </span><span class="hl-10">&quot;sourceMap&quot;</span><span class="hl-1">: </span><span class="hl-6">true</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-10">&quot;strict&quot;</span><span class="hl-1">: </span><span class="hl-6">true</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-10">&quot;moduleResolution&quot;</span><span class="hl-1">: </span><span class="hl-2">&quot;node&quot;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-10">&quot;types&quot;</span><span class="hl-1">: [</span><span class="hl-2">&quot;jest&quot;</span><span class="hl-1">, </span><span class="hl-2">&quot;node&quot;</span><span class="hl-1">],</span><br/><span class="hl-1"> </span><span class="hl-10">&quot;esModuleInterop&quot;</span><span class="hl-1">: </span><span class="hl-6">true</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-10">&quot;skipLibCheck&quot;</span><span class="hl-1">: </span><span class="hl-6">true</span><span class="hl-1">,</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">}</span>
744
- </code><button type="button">Copy</button></pre>
745
-
746
- <ol start="3">
747
- <li>Compile the TypeScript file:</li>
748
- </ol>
749
- <pre><code class="bash"><span class="hl-0">tsc</span><span class="hl-1"> </span><span class="hl-2">src/examples/basic-use.ts</span>
750
- </code><button type="button">Copy</button></pre>
751
-
752
- <ol start="4">
753
- <li>Run:</li>
754
- </ol>
755
- <pre><code class="bash"><span class="hl-0">node</span><span class="hl-1"> </span><span class="hl-2">src/examples/basic-use.js</span>
756
- </code><button type="button">Copy</button></pre>
757
-
758
- </details>
759
- <h2 id="references" class="tsd-anchor-link">References<a href="#references" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><ul>
760
- <li>L. Petzold, &quot;Automatic Selection of Methods for Solving Stiff and Nonstiff Systems of Ordinary Differential Equations,&quot; <em>SIAM J. Sci. Stat. Comput.</em>, 4(1), 136–148, 1983. <a href="https://doi.org/10.1137/0904010">doi:10.1137/0904010</a></li>
761
- <li>A. C. Hindmarsh, &quot;ODEPACK, A Systematized Collection of ODE Solvers,&quot; <em>Scientific Computing</em>, R. S. Stepleman et al. (eds.), North-Holland, Amsterdam, pp. 55–64, 1983. <a href="https://computing.llnl.gov/sites/default/files/ODEPACK_pub1_u88007.pdf">link</a></li>
762
- <li>The LSODA solver is ported to TypeScript from the C library <a href="https://github.com/sdwfrost/liblsoda">liblsoda</a></li>
763
- <li>T. Rang and L. Angermann, &quot;New Rosenbrock W-Methods of Order 3 for Partial Differential Algebraic Equations of Index 1,&quot; <em>BIT Numer. Math.</em>, 45, 761–787, 2005. <a href="https://doi.org/10.1016/j.cam.2015.03.010">doi:10.1007/s10543-005-0035-y</a></li>
764
- <li>E. Hairer and G. Wanner, <em>Solving Ordinary Differential Equations II: Stiff and Differential-Algebraic Problems</em>, Springer, 1996. <a href="https://doi.org/10.1137/S1064827594276424">doi:10.1137/S1064827594276424</a></li>
765
- </ul>
766
- <h2 id="contributing" class="tsd-anchor-link">Contributing<a href="#contributing" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>We welcome contributions of all kinds - bug reports, feature requests, documentation updates, and pull requests.</p>
767
- <p>Before contributing, please read our <a href="media/CONTRIBUTING.md">Contributing Guidelines</a>.</p>
768
- </div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#diff-grok"><span>Diff <wbr/>Grok</span></a><ul><li><a href="#features"><span>Features</span></a></li><li><a href="#installation"><span>Installation</span></a></li><li><a href="#solving"><span>Solving</span></a></li><li><ul><li><a href="#general"><span>General</span></a></li><li><a href="#example"><span>Example</span></a></li></ul></li><li><a href="#performance"><span>Performance</span></a></li><li><a href="#scripting"><span>Scripting</span></a></li><li><ul><li><a href="#model-components-and-syntax"><span>Model components and syntax</span></a></li><li><ul><li><a href="#core-blocks"><span>Core blocks</span></a></li><li><a href="#comments"><span>Comments</span></a></li><li><a href="#model-parameters"><span>Model parameters</span></a></li><li><a href="#auxiliary-calculations"><span>Auxiliary calculations</span></a></li></ul></li><li><a href="#js-code-generation"><span>JS-<wbr/>code generation</span></a></li><li><a href="#pipelines"><span>Pipelines</span></a></li></ul></li><li><a href="#integration-with-datagrok"><span>Integration with <wbr/>Datagrok</span></a></li><li><a href="#environment-requirements"><span>Environment <wbr/>Requirements</span></a></li><li><ul><li><a href="#development-build"><span>Development &amp; <wbr/>Build</span></a></li><li><a href="#runtime-environments"><span>Runtime <wbr/>Environments</span></a></li><li><ul><li><a href="#server-side-nodejs"><span>Server-<wbr/>Side (<wbr/>Node.js)</span></a></li><li><a href="#operating-systems"><span>Operating <wbr/>Systems</span></a></li><li><a href="#browser-support"><span>Browser <wbr/>Support</span></a></li></ul></li><li><a href="#bundler-configuration"><span>Bundler <wbr/>Configuration</span></a></li><li><a href="#polyfills"><span>Polyfills</span></a></li></ul></li><li><a href="#examples"><span>Examples</span></a></li><li><a href="#references"><span>References</span></a></li><li><a href="#contributing"><span>Contributing</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="modules.html">diff-grok - v1.1.0</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>