diff-grok 1.2.0 → 1.3.1
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.
- package/README.MD +56 -8
- package/dist/index.d.ts +6 -0
- package/{index.js → dist/index.js} +1 -0
- package/dist/index.js.map +1 -0
- package/dist/src/examples/basic-use.d.ts +10 -0
- package/dist/src/examples/basic-use.js.map +1 -0
- package/dist/src/examples/check-methods.d.ts +1 -0
- package/dist/src/examples/check-methods.js.map +1 -0
- package/dist/src/examples/corr-probs.d.ts +15 -0
- package/{src → dist/src}/examples/corr-probs.js +2 -2
- package/dist/src/examples/corr-probs.js.map +1 -0
- package/dist/src/examples/cyclic-model.d.ts +6 -0
- package/dist/src/examples/cyclic-model.js.map +1 -0
- package/dist/src/examples/e5.d.ts +15 -0
- package/dist/src/examples/e5.js.map +1 -0
- package/dist/src/examples/hires.d.ts +15 -0
- package/dist/src/examples/hires.js.map +1 -0
- package/dist/src/examples/index.d.ts +22 -0
- package/dist/src/examples/index.js.map +1 -0
- package/dist/src/examples/model-updates.d.ts +6 -0
- package/dist/src/examples/model-updates.js.map +1 -0
- package/dist/src/examples/orego.d.ts +15 -0
- package/dist/src/examples/orego.js.map +1 -0
- package/dist/src/examples/pipeline-use.d.ts +6 -0
- package/dist/src/examples/pipeline-use.js.map +1 -0
- package/dist/src/examples/pollution.d.ts +15 -0
- package/dist/src/examples/pollution.js.map +1 -0
- package/{src/examples/print-benchmark.ts → dist/src/examples/print-benchmark.d.ts} +8 -58
- package/dist/src/examples/print-benchmark.js.map +1 -0
- package/dist/src/examples/robertson.d.ts +15 -0
- package/{docs/media → dist/src/examples}/robertson.js +2 -2
- package/dist/src/examples/robertson.js.map +1 -0
- package/dist/src/examples/scripting.d.ts +1 -0
- package/dist/src/examples/scripting.js.map +1 -0
- package/dist/src/examples/vdpol.d.ts +15 -0
- package/dist/src/examples/vdpol.js.map +1 -0
- package/dist/src/latex-export/examples/advanced-to-latex.d.ts +2 -0
- package/dist/src/latex-export/examples/advanced-to-latex.js +41 -0
- package/dist/src/latex-export/examples/advanced-to-latex.js.map +1 -0
- package/dist/src/latex-export/examples/basic-to-latex.d.ts +2 -0
- package/dist/src/latex-export/examples/basic-to-latex.js +17 -0
- package/dist/src/latex-export/examples/basic-to-latex.js.map +1 -0
- package/dist/src/latex-export/examples/bioreactor-to-latex-selective.d.ts +2 -0
- package/dist/src/latex-export/examples/bioreactor-to-latex-selective.js +145 -0
- package/dist/src/latex-export/examples/bioreactor-to-latex-selective.js.map +1 -0
- package/dist/src/latex-export/examples/chem-react-to-latex-no-cdot.d.ts +2 -0
- package/dist/src/latex-export/examples/chem-react-to-latex-no-cdot.js +41 -0
- package/dist/src/latex-export/examples/chem-react-to-latex-no-cdot.js.map +1 -0
- package/dist/src/latex-export/examples/energy-n-control-to-markdown.d.ts +2 -0
- package/dist/src/latex-export/examples/energy-n-control-to-markdown.js +58 -0
- package/dist/src/latex-export/examples/energy-n-control-to-markdown.js.map +1 -0
- package/dist/src/latex-export/examples/extended-to-markdown.d.ts +2 -0
- package/dist/src/latex-export/examples/extended-to-markdown.js +37 -0
- package/dist/src/latex-export/examples/extended-to-markdown.js.map +1 -0
- package/dist/src/latex-export/examples/fermentation-to-latex.d.ts +2 -0
- package/dist/src/latex-export/examples/fermentation-to-latex.js +32 -0
- package/dist/src/latex-export/examples/fermentation-to-latex.js.map +1 -0
- package/dist/src/latex-export/examples/ga-production-to-markdown.d.ts +2 -0
- package/dist/src/latex-export/examples/ga-production-to-markdown.js +58 -0
- package/dist/src/latex-export/examples/ga-production-to-markdown.js.map +1 -0
- package/dist/src/latex-export/examples/nimotuzumab-to-latex.d.ts +2 -0
- package/dist/src/latex-export/examples/nimotuzumab-to-latex.js +53 -0
- package/dist/src/latex-export/examples/nimotuzumab-to-latex.js.map +1 -0
- package/dist/src/latex-export/examples/pk-pd-to-markdown-minimal.d.ts +2 -0
- package/dist/src/latex-export/examples/pk-pd-to-markdown-minimal.js +50 -0
- package/dist/src/latex-export/examples/pk-pd-to-markdown-minimal.js.map +1 -0
- package/dist/src/latex-export/examples/pk-to-markdown.d.ts +2 -0
- package/dist/src/latex-export/examples/pk-to-markdown.js +35 -0
- package/dist/src/latex-export/examples/pk-to-markdown.js.map +1 -0
- package/dist/src/latex-export/examples/pollution-to-latex.d.ts +2 -0
- package/dist/src/latex-export/examples/pollution-to-latex.js +141 -0
- package/dist/src/latex-export/examples/pollution-to-latex.js.map +1 -0
- package/dist/src/latex-export/examples/robertson-to-latex-no-meta.d.ts +2 -0
- package/dist/src/latex-export/examples/robertson-to-latex-no-meta.js +25 -0
- package/dist/src/latex-export/examples/robertson-to-latex-no-meta.js.map +1 -0
- package/dist/src/latex-export/generator/bracket-manager.d.ts +19 -0
- package/dist/src/latex-export/generator/bracket-manager.js +58 -0
- package/dist/src/latex-export/generator/bracket-manager.js.map +1 -0
- package/dist/src/latex-export/generator/document-builder.d.ts +13 -0
- package/dist/src/latex-export/generator/document-builder.js +433 -0
- package/dist/src/latex-export/generator/document-builder.js.map +1 -0
- package/dist/src/latex-export/generator/latex-generator.d.ts +26 -0
- package/dist/src/latex-export/generator/latex-generator.js +180 -0
- package/dist/src/latex-export/generator/latex-generator.js.map +1 -0
- package/dist/src/latex-export/index.d.ts +8 -0
- package/dist/src/latex-export/index.js +25 -0
- package/dist/src/latex-export/index.js.map +1 -0
- package/dist/src/latex-export/output/md-formatter.d.ts +16 -0
- package/dist/src/latex-export/output/md-formatter.js +27 -0
- package/dist/src/latex-export/output/md-formatter.js.map +1 -0
- package/dist/src/latex-export/output/tex-formatter.d.ts +5 -0
- package/dist/src/latex-export/output/tex-formatter.js +20 -0
- package/dist/src/latex-export/output/tex-formatter.js.map +1 -0
- package/dist/src/latex-export/parser/ast-parser.d.ts +7 -0
- package/dist/src/latex-export/parser/ast-parser.js +153 -0
- package/dist/src/latex-export/parser/ast-parser.js.map +1 -0
- package/dist/src/latex-export/parser/ivp-parser.d.ts +6 -0
- package/dist/src/latex-export/parser/ivp-parser.js +219 -0
- package/dist/src/latex-export/parser/ivp-parser.js.map +1 -0
- package/dist/src/latex-export/parser/line-joiner.d.ts +25 -0
- package/dist/src/latex-export/parser/line-joiner.js +80 -0
- package/dist/src/latex-export/parser/line-joiner.js.map +1 -0
- package/dist/src/latex-export/parser/tokenizer.d.ts +7 -0
- package/dist/src/latex-export/parser/tokenizer.js +143 -0
- package/dist/src/latex-export/parser/tokenizer.js.map +1 -0
- package/dist/src/latex-export/transformer/functions.d.ts +12 -0
- package/dist/src/latex-export/transformer/functions.js +47 -0
- package/dist/src/latex-export/transformer/functions.js.map +1 -0
- package/dist/src/latex-export/transformer/identifier.d.ts +23 -0
- package/dist/src/latex-export/transformer/identifier.js +194 -0
- package/dist/src/latex-export/transformer/identifier.js.map +1 -0
- package/dist/src/latex-export/transformer/operators.d.ts +9 -0
- package/dist/src/latex-export/transformer/operators.js +41 -0
- package/dist/src/latex-export/transformer/operators.js.map +1 -0
- package/dist/src/latex-export/types.d.ts +122 -0
- package/dist/src/latex-export/types.js +10 -0
- package/dist/src/latex-export/types.js.map +1 -0
- package/{src/pipeline/basic-pipeline-creator.ts → dist/src/pipeline/basic-pipeline-creator.d.ts} +11 -28
- package/dist/src/pipeline/basic-pipeline-creator.js.map +1 -0
- package/dist/src/pipeline/constants.d.ts +14 -0
- package/dist/src/pipeline/constants.js.map +1 -0
- package/dist/src/pipeline/index.d.ts +7 -0
- package/dist/src/pipeline/index.js.map +1 -0
- package/dist/src/pipeline/input.d.ts +3 -0
- package/dist/src/pipeline/input.js.map +1 -0
- package/dist/src/pipeline/loops-pipeline-creator.d.ts +124 -0
- package/dist/src/pipeline/loops-pipeline-creator.js.map +1 -0
- package/dist/src/pipeline/output.d.ts +10 -0
- package/{src → dist/src}/pipeline/output.js +1 -1
- package/dist/src/pipeline/output.js.map +1 -0
- package/dist/src/pipeline/pipeline-creator.d.ts +12 -0
- package/{src → dist/src}/pipeline/pipeline-creator.js +2 -0
- package/dist/src/pipeline/pipeline-creator.js.map +1 -0
- package/{src/pipeline/pipeline.ts → dist/src/pipeline/pipeline.d.ts} +10 -97
- package/dist/src/pipeline/pipeline.js.map +1 -0
- package/{src/pipeline/updates-pipeline-creator.ts → dist/src/pipeline/updates-pipeline-creator.d.ts} +15 -131
- package/dist/src/pipeline/updates-pipeline-creator.js.map +1 -0
- package/dist/src/scripting-tools/constants.d.ts +59 -0
- package/dist/src/scripting-tools/constants.js.map +1 -0
- package/dist/src/scripting-tools/index.d.ts +3 -0
- package/dist/src/scripting-tools/index.js.map +1 -0
- package/dist/src/scripting-tools/model-error.d.ts +10 -0
- package/{src → dist/src}/scripting-tools/model-error.js +2 -1
- package/dist/src/scripting-tools/model-error.js.map +1 -0
- package/dist/src/scripting-tools/scripting-tools.d.ts +277 -0
- package/{src → dist/src}/scripting-tools/scripting-tools.js +2 -4
- package/dist/src/scripting-tools/scripting-tools.js.map +1 -0
- package/dist/src/solver-tools/ab4-method.d.ts +46 -0
- package/{src → dist/src}/solver-tools/ab4-method.js +3 -3
- package/dist/src/solver-tools/ab4-method.js.map +1 -0
- package/dist/src/solver-tools/ab5-method.d.ts +46 -0
- package/{src → dist/src}/solver-tools/ab5-method.js +3 -3
- package/dist/src/solver-tools/ab5-method.js.map +1 -0
- package/dist/src/solver-tools/callbacks/callback-base.d.ts +8 -0
- package/dist/src/solver-tools/callbacks/callback-base.js.map +1 -0
- package/dist/src/solver-tools/callbacks/callback-tools.d.ts +6 -0
- package/dist/src/solver-tools/callbacks/callback-tools.js.map +1 -0
- package/dist/src/solver-tools/callbacks/iter-checker-callback.d.ts +12 -0
- package/{src → dist/src}/solver-tools/callbacks/iter-checker-callback.js +2 -0
- package/dist/src/solver-tools/callbacks/iter-checker-callback.js.map +1 -0
- package/dist/src/solver-tools/callbacks/time-checker-callback.d.ts +12 -0
- package/{src → dist/src}/solver-tools/callbacks/time-checker-callback.js +2 -2
- package/dist/src/solver-tools/callbacks/time-checker-callback.js.map +1 -0
- package/dist/src/solver-tools/cvode/common.d.ts +395 -0
- package/dist/src/solver-tools/cvode/common.js +483 -0
- package/dist/src/solver-tools/cvode/common.js.map +1 -0
- package/dist/src/solver-tools/cvode/cvode.d.ts +23 -0
- package/dist/src/solver-tools/cvode/cvode.js.map +1 -0
- package/dist/src/solver-tools/cvode/cvode_adams.d.ts +22 -0
- package/dist/src/solver-tools/cvode/cvode_adams.js.map +1 -0
- package/dist/src/solver-tools/cvode/cvode_bdf.d.ts +37 -0
- package/dist/src/solver-tools/cvode/cvode_bdf.js.map +1 -0
- package/dist/src/solver-tools/cvode/cvode_class.d.ts +116 -0
- package/{src → dist/src}/solver-tools/cvode/cvode_class.js +9 -4
- package/dist/src/solver-tools/cvode/cvode_class.js.map +1 -0
- package/dist/src/solver-tools/cvode/cvode_hin.d.ts +24 -0
- package/dist/src/solver-tools/cvode/cvode_hin.js.map +1 -0
- package/dist/src/solver-tools/cvode/cvode_io.d.ts +98 -0
- package/{src → dist/src}/solver-tools/cvode/cvode_io.js +1 -2
- package/dist/src/solver-tools/cvode/cvode_io.js.map +1 -0
- package/dist/src/solver-tools/cvode/cvode_ls.d.ts +23 -0
- package/dist/src/solver-tools/cvode/cvode_ls.js.map +1 -0
- package/dist/src/solver-tools/cvode/cvode_nls.d.ts +25 -0
- package/dist/src/solver-tools/cvode/cvode_nls.js.map +1 -0
- package/dist/src/solver-tools/cvode/cvode_root.d.ts +64 -0
- package/dist/src/solver-tools/cvode/cvode_root.js.map +1 -0
- package/dist/src/solver-tools/cvode/dense_linalg.d.ts +50 -0
- package/dist/src/solver-tools/cvode/dense_linalg.js.map +1 -0
- package/dist/src/solver-tools/cvode/index.d.ts +24 -0
- package/dist/src/solver-tools/cvode/index.js.map +1 -0
- package/dist/src/solver-tools/cvode-method.d.ts +47 -0
- package/dist/src/solver-tools/cvode-method.js.map +1 -0
- package/dist/src/solver-tools/index.d.ts +16 -0
- package/dist/src/solver-tools/index.js.map +1 -0
- package/dist/src/solver-tools/lin-alg-tools.d.ts +6 -0
- package/dist/src/solver-tools/lin-alg-tools.js.map +1 -0
- package/dist/src/solver-tools/lsoda/blas.d.ts +59 -0
- package/dist/src/solver-tools/lsoda/blas.js.map +1 -0
- package/{src/solver-tools/lsoda/index.ts → dist/src/solver-tools/lsoda/cfode.d.ts} +7 -6
- package/dist/src/solver-tools/lsoda/cfode.js.map +1 -0
- package/dist/src/solver-tools/lsoda/common.d.ts +85 -0
- package/dist/src/solver-tools/lsoda/common.js +96 -0
- package/dist/src/solver-tools/lsoda/common.js.map +1 -0
- package/{src/solver-tools/lsoda/corfailure.ts → dist/src/solver-tools/lsoda/corfailure.d.ts} +2 -26
- package/dist/src/solver-tools/lsoda/corfailure.js.map +1 -0
- package/dist/src/solver-tools/lsoda/correction.d.ts +23 -0
- package/dist/src/solver-tools/lsoda/correction.js.map +1 -0
- package/dist/src/solver-tools/lsoda/dense.d.ts +47 -0
- package/{src → dist/src}/solver-tools/lsoda/dense.js +2 -0
- package/dist/src/solver-tools/lsoda/dense.js.map +1 -0
- package/dist/src/solver-tools/lsoda/index.d.ts +16 -0
- package/dist/src/solver-tools/lsoda/index.js.map +1 -0
- package/dist/src/solver-tools/lsoda/intdy.d.ts +19 -0
- package/dist/src/solver-tools/lsoda/intdy.js.map +1 -0
- package/dist/src/solver-tools/lsoda/lsoda.d.ts +66 -0
- package/{src → dist/src}/solver-tools/lsoda/lsoda.js +13 -5
- package/dist/src/solver-tools/lsoda/lsoda.js.map +1 -0
- package/dist/src/solver-tools/lsoda/methodswitch.d.ts +21 -0
- package/dist/src/solver-tools/lsoda/methodswitch.js.map +1 -0
- package/dist/src/solver-tools/lsoda/orderswitch.d.ts +21 -0
- package/dist/src/solver-tools/lsoda/orderswitch.js.map +1 -0
- package/dist/src/solver-tools/lsoda/prja.d.ts +18 -0
- package/dist/src/solver-tools/lsoda/prja.js.map +1 -0
- package/dist/src/solver-tools/lsoda/scaleh.d.ts +16 -0
- package/dist/src/solver-tools/lsoda/scaleh.js.map +1 -0
- package/{src/solver-tools/lsoda/solsy.ts → dist/src/solver-tools/lsoda/solsy.d.ts} +2 -15
- package/dist/src/solver-tools/lsoda/solsy.js.map +1 -0
- package/dist/src/solver-tools/lsoda/stoda.d.ts +19 -0
- package/dist/src/solver-tools/lsoda/stoda.js.map +1 -0
- package/dist/src/solver-tools/lsoda-method.d.ts +46 -0
- package/dist/src/solver-tools/lsoda-method.js.map +1 -0
- package/dist/src/solver-tools/mrt-method.d.ts +47 -0
- package/{src → dist/src}/solver-tools/mrt-method.js +2 -2
- package/dist/src/solver-tools/mrt-method.js.map +1 -0
- package/dist/src/solver-tools/rk3-method.d.ts +46 -0
- package/{src → dist/src}/solver-tools/rk3-method.js +2 -2
- package/dist/src/solver-tools/rk3-method.js.map +1 -0
- package/dist/src/solver-tools/rk4-method.d.ts +46 -0
- package/{src → dist/src}/solver-tools/rk4-method.js +2 -2
- package/dist/src/solver-tools/rk4-method.js.map +1 -0
- package/dist/src/solver-tools/rkdp-method.d.ts +46 -0
- package/{src → dist/src}/solver-tools/rkdp-method.js +2 -2
- package/dist/src/solver-tools/rkdp-method.js.map +1 -0
- package/dist/src/solver-tools/ros34prw-method.d.ts +46 -0
- package/{src → dist/src}/solver-tools/ros34prw-method.js +2 -2
- package/dist/src/solver-tools/ros34prw-method.js.map +1 -0
- package/dist/src/solver-tools/ros3prw-method.d.ts +46 -0
- package/{src → dist/src}/solver-tools/ros3prw-method.js +2 -2
- package/dist/src/solver-tools/ros3prw-method.js.map +1 -0
- package/{src/solver-tools/solver-defs.ts → dist/src/solver-tools/solver-defs.d.ts} +45 -85
- package/dist/src/solver-tools/solver-defs.js.map +1 -0
- package/dist/src/worker-tools/index.d.ts +2 -0
- package/dist/src/worker-tools/index.js.map +1 -0
- package/{src/worker-tools/scripting.ts → dist/src/worker-tools/scripting.d.ts} +9 -91
- package/dist/src/worker-tools/scripting.js.map +1 -0
- package/dist/src/worker-tools/solving.d.ts +7 -0
- package/dist/src/worker-tools/solving.js.map +1 -0
- package/package.json +10 -11
- package/.claude/settings.local.json +0 -11
- package/.claude/skills/license-updater/SKILL.md +0 -149
- package/.claude/skills/license-updater/references/compatibility.md +0 -68
- package/.claude/skills/license-updater/references/templates.md +0 -151
- package/.claude/skills/license-updater/scripts/generate_license_files.py +0 -467
- package/.eslintrc.json +0 -45
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -29
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -22
- package/.github/scripts/bump-js-api-version.sh +0 -106
- package/.github/scripts/check-output.sh +0 -20
- package/.github/scripts/iac-cfn-deploy.sh +0 -90
- package/.github/scripts/slack_api_request.sh +0 -65
- package/.github/scripts/test_package.sh +0 -270
- package/.github/workflows/deploy-docs.yml +0 -15
- package/.github/workflows/libraries.yaml +0 -305
- package/.github/workflows/test.yaml +0 -19
- package/CLAUDE.md +0 -104
- package/CONTRIBUTING.md +0 -74
- package/THIRD_PARTY_LICENSES +0 -135
- package/docs/.nojekyll +0 -1
- package/docs/assets/hierarchy.js +0 -1
- package/docs/assets/highlight.css +0 -99
- package/docs/assets/icons.js +0 -18
- package/docs/assets/icons.svg +0 -1
- package/docs/assets/main.js +0 -60
- package/docs/assets/navigation.js +0 -1
- package/docs/assets/search.js +0 -1
- package/docs/assets/style.css +0 -1633
- package/docs/classes/BasicModelPipelineCreator.html +0 -10
- package/docs/classes/Callback.html +0 -7
- package/docs/classes/CyclicModelPipelineCreator.html +0 -10
- package/docs/classes/IterCheckerCallback.html +0 -8
- package/docs/classes/PipelineCreator.html +0 -6
- package/docs/classes/TimeCheckerCallback.html +0 -8
- package/docs/classes/UpdatesModelPipelineCreator.html +0 -10
- package/docs/functions/ab4.html +0 -8
- package/docs/functions/ab5.html +0 -8
- package/docs/functions/applyPipeline.html +0 -9
- package/docs/functions/getCallback.html +0 -3
- package/docs/functions/getIVP.html +0 -6
- package/docs/functions/getInputVector.html +0 -2
- package/docs/functions/getIvp2WebWorker.html +0 -6
- package/docs/functions/getJScode.html +0 -6
- package/docs/functions/getOutputNames.html +0 -4
- package/docs/functions/getPipelineCreator.html +0 -7
- package/docs/functions/lsoda.html +0 -8
- package/docs/functions/mrt.html +0 -11
- package/docs/functions/printE5.html +0 -76
- package/docs/functions/printHires.html +0 -76
- package/docs/functions/printOrego.html +0 -66
- package/docs/functions/printPollution.html +0 -163
- package/docs/functions/printRobertson.html +0 -60
- package/docs/functions/printVdpol.html +0 -66
- package/docs/functions/rk3.html +0 -8
- package/docs/functions/rk4.html +0 -8
- package/docs/functions/rkdp.html +0 -8
- package/docs/functions/ros34prw.html +0 -8
- package/docs/functions/ros3prw.html +0 -8
- package/docs/functions/solveIvp.html +0 -5
- package/docs/hierarchy.html +0 -1
- package/docs/index.html +0 -768
- package/docs/media/CONTRIBUTING.md +0 -74
- package/docs/media/E5.png +0 -0
- package/docs/media/HIRES.png +0 -0
- package/docs/media/OREGO.png +0 -0
- package/docs/media/POLL-full.png +0 -0
- package/docs/media/POLL.png +0 -0
- package/docs/media/ROBER.png +0 -0
- package/docs/media/VDP0L.png +0 -0
- package/docs/media/VDPOL.png +0 -0
- package/docs/media/acid-prod.gif +0 -0
- package/docs/media/basic-use.js.map +0 -1
- package/docs/media/basic-use.ts +0 -44
- package/docs/media/check-methods.js +0 -59
- package/docs/media/check-methods.js.map +0 -1
- package/docs/media/check-methods.ts +0 -81
- package/docs/media/corr-probs.js +0 -132
- package/docs/media/corr-probs.js.map +0 -1
- package/docs/media/corr-probs.ts +0 -155
- package/docs/media/cyclic-model.js.map +0 -1
- package/docs/media/cyclic-model.ts +0 -112
- package/docs/media/e5.js.map +0 -1
- package/docs/media/e5.ts +0 -36
- package/docs/media/hires.js.map +0 -1
- package/docs/media/hires.ts +0 -40
- package/docs/media/model-updates.js.map +0 -1
- package/docs/media/model-updates.ts +0 -122
- package/docs/media/orego.js.map +0 -1
- package/docs/media/orego.ts +0 -25
- package/docs/media/pipeline-use.js.map +0 -1
- package/docs/media/pipeline-use.ts +0 -98
- package/docs/media/pollution.js.map +0 -1
- package/docs/media/pollution.ts +0 -133
- package/docs/media/print-benchmark.js.map +0 -1
- package/docs/media/print-benchmark.ts +0 -594
- package/docs/media/robertson.js.map +0 -1
- package/docs/media/robertson.ts +0 -19
- package/docs/media/scripting.js.map +0 -1
- package/docs/media/scripting.ts +0 -35
- package/docs/media/vdpol.js.map +0 -1
- package/docs/media/vdpol.ts +0 -17
- package/docs/modules.html +0 -1
- package/docs/types/Arg.html +0 -12
- package/docs/types/DifEqs.html +0 -8
- package/docs/types/Func.html +0 -7
- package/docs/types/IVP.html +0 -40
- package/docs/types/IVP2WebWorker.html +0 -12
- package/docs/types/Input.html +0 -8
- package/docs/types/Loop.html +0 -7
- package/docs/types/ODEs.html +0 -31
- package/docs/types/Output.html +0 -6
- package/docs/types/Pipeline.html +0 -6
- package/docs/types/SolverOptions.html +0 -8
- package/docs/types/Update.html +0 -9
- package/docs/types/Wrapper.html +0 -8
- package/eslintrc.json +0 -45
- package/images/E5.png +0 -0
- package/images/HIRES.png +0 -0
- package/images/OREGO.png +0 -0
- package/images/POLL-full.png +0 -0
- package/images/POLL.png +0 -0
- package/images/ROBER.png +0 -0
- package/images/VDP0L.png +0 -0
- package/images/VDPOL.png +0 -0
- package/images/acid-prod.gif +0 -0
- package/index.js.map +0 -1
- package/index.ts +0 -17
- package/jest.config.js +0 -13
- package/src/examples/basic-use.js +0 -40
- package/src/examples/basic-use.js.map +0 -1
- package/src/examples/basic-use.ts +0 -44
- package/src/examples/check-methods.js.map +0 -1
- package/src/examples/check-methods.ts +0 -96
- package/src/examples/corr-probs.js.map +0 -1
- package/src/examples/corr-probs.ts +0 -155
- package/src/examples/cyclic-model.js +0 -102
- package/src/examples/cyclic-model.js.map +0 -1
- package/src/examples/cyclic-model.ts +0 -112
- package/src/examples/e5.js +0 -36
- package/src/examples/e5.js.map +0 -1
- package/src/examples/e5.ts +0 -36
- package/src/examples/hires.js +0 -39
- package/src/examples/hires.js.map +0 -1
- package/src/examples/hires.ts +0 -40
- package/src/examples/index.js.map +0 -1
- package/src/examples/index.ts +0 -34
- package/src/examples/model-updates.js +0 -112
- package/src/examples/model-updates.js.map +0 -1
- package/src/examples/model-updates.ts +0 -122
- package/src/examples/orego.js +0 -24
- package/src/examples/orego.js.map +0 -1
- package/src/examples/orego.ts +0 -25
- package/src/examples/pipeline-use.js +0 -87
- package/src/examples/pipeline-use.js.map +0 -1
- package/src/examples/pipeline-use.ts +0 -98
- package/src/examples/pollution.js +0 -132
- package/src/examples/pollution.js.map +0 -1
- package/src/examples/pollution.ts +0 -133
- package/src/examples/print-benchmark.js +0 -581
- package/src/examples/print-benchmark.js.map +0 -1
- package/src/examples/robertson.js +0 -19
- package/src/examples/robertson.js.map +0 -1
- package/src/examples/robertson.ts +0 -19
- package/src/examples/scripting.js +0 -30
- package/src/examples/scripting.js.map +0 -1
- package/src/examples/scripting.ts +0 -35
- package/src/examples/vdpol.js +0 -17
- package/src/examples/vdpol.js.map +0 -1
- package/src/examples/vdpol.ts +0 -17
- package/src/pipeline/basic-pipeline-creator.js.map +0 -1
- package/src/pipeline/constants.js.map +0 -1
- package/src/pipeline/constants.ts +0 -21
- package/src/pipeline/index.js.map +0 -1
- package/src/pipeline/index.ts +0 -7
- package/src/pipeline/input.js.map +0 -1
- package/src/pipeline/input.ts +0 -55
- package/src/pipeline/loops-pipeline-creator.js.map +0 -1
- package/src/pipeline/loops-pipeline-creator.ts +0 -252
- package/src/pipeline/output.js.map +0 -1
- package/src/pipeline/output.ts +0 -201
- package/src/pipeline/pipeline-creator.js.map +0 -1
- package/src/pipeline/pipeline-creator.ts +0 -20
- package/src/pipeline/pipeline.js.map +0 -1
- package/src/pipeline/updates-pipeline-creator.js.map +0 -1
- package/src/scripting-tools/constants.js.map +0 -1
- package/src/scripting-tools/constants.ts +0 -69
- package/src/scripting-tools/index.js.map +0 -1
- package/src/scripting-tools/index.ts +0 -8
- package/src/scripting-tools/model-error.js.map +0 -1
- package/src/scripting-tools/model-error.ts +0 -21
- package/src/scripting-tools/scripting-tools.js.map +0 -1
- package/src/scripting-tools/scripting-tools.ts +0 -1582
- package/src/solver-tools/ab4-method.js.map +0 -1
- package/src/solver-tools/ab4-method.ts +0 -395
- package/src/solver-tools/ab5-method.js.map +0 -1
- package/src/solver-tools/ab5-method.ts +0 -397
- package/src/solver-tools/callbacks/callback-base.js.map +0 -1
- package/src/solver-tools/callbacks/callback-base.ts +0 -12
- package/src/solver-tools/callbacks/callback-tools.js.map +0 -1
- package/src/solver-tools/callbacks/callback-tools.ts +0 -22
- package/src/solver-tools/callbacks/iter-checker-callback.js.map +0 -1
- package/src/solver-tools/callbacks/iter-checker-callback.ts +0 -25
- package/src/solver-tools/callbacks/time-checker-callback.js.map +0 -1
- package/src/solver-tools/callbacks/time-checker-callback.ts +0 -23
- package/src/solver-tools/cvode/common.js +0 -487
- package/src/solver-tools/cvode/common.js.map +0 -1
- package/src/solver-tools/cvode/common.ts +0 -549
- package/src/solver-tools/cvode/cvode.js.map +0 -1
- package/src/solver-tools/cvode/cvode.ts +0 -1226
- package/src/solver-tools/cvode/cvode_adams.js.map +0 -1
- package/src/solver-tools/cvode/cvode_adams.ts +0 -142
- package/src/solver-tools/cvode/cvode_bdf.js.map +0 -1
- package/src/solver-tools/cvode/cvode_bdf.ts +0 -164
- package/src/solver-tools/cvode/cvode_class.js.map +0 -1
- package/src/solver-tools/cvode/cvode_class.ts +0 -271
- package/src/solver-tools/cvode/cvode_hin.js.map +0 -1
- package/src/solver-tools/cvode/cvode_hin.ts +0 -150
- package/src/solver-tools/cvode/cvode_io.js.map +0 -1
- package/src/solver-tools/cvode/cvode_io.ts +0 -258
- package/src/solver-tools/cvode/cvode_ls.js.map +0 -1
- package/src/solver-tools/cvode/cvode_ls.ts +0 -249
- package/src/solver-tools/cvode/cvode_nls.js.map +0 -1
- package/src/solver-tools/cvode/cvode_nls.ts +0 -259
- package/src/solver-tools/cvode/cvode_root.js.map +0 -1
- package/src/solver-tools/cvode/cvode_root.ts +0 -503
- package/src/solver-tools/cvode/dense_linalg.js.map +0 -1
- package/src/solver-tools/cvode/dense_linalg.ts +0 -144
- package/src/solver-tools/cvode/index.js.map +0 -1
- package/src/solver-tools/cvode/index.ts +0 -64
- package/src/solver-tools/cvode-method.js.map +0 -1
- package/src/solver-tools/cvode-method.ts +0 -129
- package/src/solver-tools/index.js.map +0 -1
- package/src/solver-tools/index.ts +0 -16
- package/src/solver-tools/lin-alg-tools.js.map +0 -1
- package/src/solver-tools/lin-alg-tools.ts +0 -75
- package/src/solver-tools/lsoda/blas.js.map +0 -1
- package/src/solver-tools/lsoda/blas.ts +0 -279
- package/src/solver-tools/lsoda/cfode.js.map +0 -1
- package/src/solver-tools/lsoda/cfode.ts +0 -95
- package/src/solver-tools/lsoda/common.js +0 -94
- package/src/solver-tools/lsoda/common.js.map +0 -1
- package/src/solver-tools/lsoda/common.ts +0 -135
- package/src/solver-tools/lsoda/corfailure.js.map +0 -1
- package/src/solver-tools/lsoda/correction.js.map +0 -1
- package/src/solver-tools/lsoda/correction.ts +0 -131
- package/src/solver-tools/lsoda/dense.js.map +0 -1
- package/src/solver-tools/lsoda/dense.ts +0 -141
- package/src/solver-tools/lsoda/index.js.map +0 -1
- package/src/solver-tools/lsoda/intdy.js.map +0 -1
- package/src/solver-tools/lsoda/intdy.ts +0 -62
- package/src/solver-tools/lsoda/lsoda.js.map +0 -1
- package/src/solver-tools/lsoda/lsoda.ts +0 -644
- package/src/solver-tools/lsoda/methodswitch.js.map +0 -1
- package/src/solver-tools/lsoda/methodswitch.ts +0 -119
- package/src/solver-tools/lsoda/orderswitch.js.map +0 -1
- package/src/solver-tools/lsoda/orderswitch.ts +0 -107
- package/src/solver-tools/lsoda/prja.js.map +0 -1
- package/src/solver-tools/lsoda/prja.ts +0 -61
- package/src/solver-tools/lsoda/scaleh.js.map +0 -1
- package/src/solver-tools/lsoda/scaleh.ts +0 -45
- package/src/solver-tools/lsoda/solsy.js.map +0 -1
- package/src/solver-tools/lsoda/stoda.js.map +0 -1
- package/src/solver-tools/lsoda/stoda.ts +0 -298
- package/src/solver-tools/lsoda-method.js.map +0 -1
- package/src/solver-tools/lsoda-method.ts +0 -154
- package/src/solver-tools/mrt-method.js.map +0 -1
- package/src/solver-tools/mrt-method.ts +0 -398
- package/src/solver-tools/rk3-method.js.map +0 -1
- package/src/solver-tools/rk3-method.ts +0 -257
- package/src/solver-tools/rk4-method.js.map +0 -1
- package/src/solver-tools/rk4-method.ts +0 -286
- package/src/solver-tools/rkdp-method.js.map +0 -1
- package/src/solver-tools/rkdp-method.ts +0 -300
- package/src/solver-tools/ros34prw-method.js.map +0 -1
- package/src/solver-tools/ros34prw-method.ts +0 -373
- package/src/solver-tools/ros3prw-method.js.map +0 -1
- package/src/solver-tools/ros3prw-method.ts +0 -342
- package/src/solver-tools/solver-defs.js.map +0 -1
- package/src/tests/correctness.test.js +0 -15
- package/src/tests/correctness.test.js.map +0 -1
- package/src/tests/correctness.test.ts +0 -16
- package/src/tests/cvode-lib-correctness.test.js +0 -404
- package/src/tests/cvode-lib-correctness.test.js.map +0 -1
- package/src/tests/cvode-lib-correctness.test.ts +0 -505
- package/src/tests/cvode-lib-performance.test.js +0 -103
- package/src/tests/cvode-lib-performance.test.js.map +0 -1
- package/src/tests/cvode-lib-performance.test.ts +0 -128
- package/src/tests/lsoda-lib-correctness.test.js +0 -223
- package/src/tests/lsoda-lib-correctness.test.js.map +0 -1
- package/src/tests/lsoda-lib-correctness.test.ts +0 -283
- package/src/tests/lsoda-lib-performance.test.js +0 -95
- package/src/tests/lsoda-lib-performance.test.js.map +0 -1
- package/src/tests/lsoda-lib-performance.test.ts +0 -126
- package/src/tests/performance.test.js +0 -18
- package/src/tests/performance.test.js.map +0 -1
- package/src/tests/performance.test.ts +0 -19
- package/src/tests/pipeline.test.js +0 -10
- package/src/tests/pipeline.test.js.map +0 -1
- package/src/tests/pipeline.test.ts +0 -11
- package/src/tests/test-defs.js +0 -213
- package/src/tests/test-defs.js.map +0 -1
- package/src/tests/test-defs.ts +0 -232
- package/src/tests/test-utils.js +0 -28
- package/src/tests/test-utils.js.map +0 -1
- package/src/tests/test-utils.ts +0 -37
- package/src/worker-tools/index.js.map +0 -1
- package/src/worker-tools/index.ts +0 -2
- package/src/worker-tools/scripting.js.map +0 -1
- package/src/worker-tools/solving.js.map +0 -1
- package/src/worker-tools/solving.ts +0 -86
- package/tsconfig.json +0 -71
- package/typedoc.json +0 -8
- /package/{docs/media → dist/src/examples}/basic-use.js +0 -0
- /package/{src → dist/src}/examples/check-methods.js +0 -0
- /package/{docs/media → dist/src/examples}/cyclic-model.js +0 -0
- /package/{docs/media → dist/src/examples}/e5.js +0 -0
- /package/{docs/media → dist/src/examples}/hires.js +0 -0
- /package/{src → dist/src}/examples/index.js +0 -0
- /package/{docs/media → dist/src/examples}/model-updates.js +0 -0
- /package/{docs/media → dist/src/examples}/orego.js +0 -0
- /package/{docs/media → dist/src/examples}/pipeline-use.js +0 -0
- /package/{docs/media → dist/src/examples}/pollution.js +0 -0
- /package/{docs/media → dist/src/examples}/print-benchmark.js +0 -0
- /package/{docs/media → dist/src/examples}/scripting.js +0 -0
- /package/{docs/media → dist/src/examples}/vdpol.js +0 -0
- /package/{src → dist/src}/pipeline/basic-pipeline-creator.js +0 -0
- /package/{src → dist/src}/pipeline/constants.js +0 -0
- /package/{src → dist/src}/pipeline/index.js +0 -0
- /package/{src → dist/src}/pipeline/input.js +0 -0
- /package/{src → dist/src}/pipeline/loops-pipeline-creator.js +0 -0
- /package/{src → dist/src}/pipeline/pipeline.js +0 -0
- /package/{src → dist/src}/pipeline/updates-pipeline-creator.js +0 -0
- /package/{src → dist/src}/scripting-tools/constants.js +0 -0
- /package/{src → dist/src}/scripting-tools/index.js +0 -0
- /package/{src → dist/src}/solver-tools/callbacks/callback-base.js +0 -0
- /package/{src → dist/src}/solver-tools/callbacks/callback-tools.js +0 -0
- /package/{src → dist/src}/solver-tools/cvode/cvode.js +0 -0
- /package/{src → dist/src}/solver-tools/cvode/cvode_adams.js +0 -0
- /package/{src → dist/src}/solver-tools/cvode/cvode_bdf.js +0 -0
- /package/{src → dist/src}/solver-tools/cvode/cvode_hin.js +0 -0
- /package/{src → dist/src}/solver-tools/cvode/cvode_ls.js +0 -0
- /package/{src → dist/src}/solver-tools/cvode/cvode_nls.js +0 -0
- /package/{src → dist/src}/solver-tools/cvode/cvode_root.js +0 -0
- /package/{src → dist/src}/solver-tools/cvode/dense_linalg.js +0 -0
- /package/{src → dist/src}/solver-tools/cvode/index.js +0 -0
- /package/{src → dist/src}/solver-tools/cvode-method.js +0 -0
- /package/{src → dist/src}/solver-tools/index.js +0 -0
- /package/{src → dist/src}/solver-tools/lin-alg-tools.js +0 -0
- /package/{src → dist/src}/solver-tools/lsoda/blas.js +0 -0
- /package/{src → dist/src}/solver-tools/lsoda/cfode.js +0 -0
- /package/{src → dist/src}/solver-tools/lsoda/corfailure.js +0 -0
- /package/{src → dist/src}/solver-tools/lsoda/correction.js +0 -0
- /package/{src → dist/src}/solver-tools/lsoda/index.js +0 -0
- /package/{src → dist/src}/solver-tools/lsoda/intdy.js +0 -0
- /package/{src → dist/src}/solver-tools/lsoda/methodswitch.js +0 -0
- /package/{src → dist/src}/solver-tools/lsoda/orderswitch.js +0 -0
- /package/{src → dist/src}/solver-tools/lsoda/prja.js +0 -0
- /package/{src → dist/src}/solver-tools/lsoda/scaleh.js +0 -0
- /package/{src → dist/src}/solver-tools/lsoda/solsy.js +0 -0
- /package/{src → dist/src}/solver-tools/lsoda/stoda.js +0 -0
- /package/{src → dist/src}/solver-tools/lsoda-method.js +0 -0
- /package/{src → dist/src}/solver-tools/solver-defs.js +0 -0
- /package/{src → dist/src}/worker-tools/index.js +0 -0
- /package/{src → dist/src}/worker-tools/scripting.js +0 -0
- /package/{src → dist/src}/worker-tools/solving.js +0 -0
|
@@ -1,503 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TypeScript port of SUNDIALS CVODE v7.5.0 (https://github.com/LLNL/sundials)
|
|
3
|
-
*
|
|
4
|
-
* Copyright (c) 2025, Lawrence Livermore National Security, University of
|
|
5
|
-
* Maryland Baltimore County, and the SUNDIALS contributors.
|
|
6
|
-
* Copyright (c) 2013-2025, Lawrence Livermore National Security and
|
|
7
|
-
* Southern Methodist University.
|
|
8
|
-
* Copyright (c) 2002-2013, Lawrence Livermore National Security.
|
|
9
|
-
* Copyright (c) 2026 Datagrok.
|
|
10
|
-
*
|
|
11
|
-
* Licensed under the BSD-3-Clause License. See THIRD_PARTY_LICENSES
|
|
12
|
-
* for the full license text and provenance chain of the original code.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
// CVODE rootfinding routines
|
|
16
|
-
// Ported from SUNDIALS cvode.c v7.5.0 (rootfinding section, lines ~821-4737)
|
|
17
|
-
|
|
18
|
-
import {
|
|
19
|
-
CvodeMem,
|
|
20
|
-
CvodeRootFn,
|
|
21
|
-
cvodeGetDky,
|
|
22
|
-
vLinearSum,
|
|
23
|
-
vScale,
|
|
24
|
-
CV_SUCCESS,
|
|
25
|
-
CV_RTFUNC_FAIL,
|
|
26
|
-
RTFOUND,
|
|
27
|
-
CLOSERT,
|
|
28
|
-
UROUND,
|
|
29
|
-
FUZZ_FACTOR,
|
|
30
|
-
CV_NORMAL,
|
|
31
|
-
CV_ONE_STEP,
|
|
32
|
-
} from './common';
|
|
33
|
-
|
|
34
|
-
// ============================================================================
|
|
35
|
-
// Local constants (matching SUNDIALS cvode.c)
|
|
36
|
-
// ============================================================================
|
|
37
|
-
|
|
38
|
-
const ZERO = 0.0;
|
|
39
|
-
const HALF = 0.5;
|
|
40
|
-
const ONE = 1.0;
|
|
41
|
-
const TWO = 2.0;
|
|
42
|
-
const FIVE = 5.0;
|
|
43
|
-
const HUNDRED = 100.0;
|
|
44
|
-
const PT1 = 0.1;
|
|
45
|
-
|
|
46
|
-
// ============================================================================
|
|
47
|
-
// Exported functions
|
|
48
|
-
// ============================================================================
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* CVodeRootInit - Initialize rootfinding for CVODE.
|
|
52
|
-
*
|
|
53
|
-
* C reference: CVodeRootInit (cvode.c, lines ~821-1012)
|
|
54
|
-
*
|
|
55
|
-
* If nrtfn <= 0, disables rootfinding and returns CV_SUCCESS.
|
|
56
|
-
* Otherwise, allocates arrays for root functions and sets defaults.
|
|
57
|
-
*
|
|
58
|
-
* @param mem - CVODE memory block
|
|
59
|
-
* @param nrtfn - number of root functions
|
|
60
|
-
* @param g - root function callback
|
|
61
|
-
* @returns CV_SUCCESS on success
|
|
62
|
-
*/
|
|
63
|
-
export function cvodeRootInit(mem: CvodeMem, nrtfn: number, g: CvodeRootFn): number {
|
|
64
|
-
// If nrtfn <= 0, disable rootfinding
|
|
65
|
-
if (nrtfn <= 0) {
|
|
66
|
-
mem.cv_nrtfn = 0;
|
|
67
|
-
mem.cv_gfun = null;
|
|
68
|
-
return CV_SUCCESS;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
mem.cv_nrtfn = nrtfn;
|
|
72
|
-
mem.cv_gfun = g;
|
|
73
|
-
|
|
74
|
-
// Allocate Float64Arrays for g values
|
|
75
|
-
mem.cv_glo = new Float64Array(nrtfn);
|
|
76
|
-
mem.cv_ghi = new Float64Array(nrtfn);
|
|
77
|
-
mem.cv_grout = new Float64Array(nrtfn);
|
|
78
|
-
|
|
79
|
-
// Allocate Int32Arrays for root info and direction
|
|
80
|
-
mem.cv_iroots = new Int32Array(nrtfn);
|
|
81
|
-
mem.cv_rootdir = new Int32Array(nrtfn);
|
|
82
|
-
|
|
83
|
-
// Allocate Uint8Array for active flags
|
|
84
|
-
mem.cv_gactive = new Uint8Array(nrtfn);
|
|
85
|
-
|
|
86
|
-
// Set default values: rootdir = 0 (both directions), gactive = 1 (all active)
|
|
87
|
-
mem.cv_rootdir.fill(0);
|
|
88
|
-
mem.cv_gactive.fill(1);
|
|
89
|
-
|
|
90
|
-
return CV_SUCCESS;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* cvRcheck1 - First-step root check.
|
|
95
|
-
*
|
|
96
|
-
* C reference: cvRcheck1 (cvode.c, lines ~4251-4300)
|
|
97
|
-
*
|
|
98
|
-
* Completes initialization of rootfinding memory and checks whether g
|
|
99
|
-
* has a zero both at and very near the initial point of the IVP.
|
|
100
|
-
*
|
|
101
|
-
* @param mem - CVODE memory block
|
|
102
|
-
* @returns CV_SUCCESS or CV_RTFUNC_FAIL
|
|
103
|
-
*/
|
|
104
|
-
export function cvRcheck1(mem: CvodeMem): number {
|
|
105
|
-
const nrtfn = mem.cv_nrtfn;
|
|
106
|
-
const N = mem.cv_N;
|
|
107
|
-
|
|
108
|
-
for (let i = 0; i < nrtfn; i++)
|
|
109
|
-
mem.cv_iroots[i] = 0;
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
mem.cv_tlo = mem.cv_tn;
|
|
113
|
-
mem.cv_ttol = (Math.abs(mem.cv_tn) + Math.abs(mem.cv_h)) * UROUND * HUNDRED;
|
|
114
|
-
|
|
115
|
-
// Evaluate g at initial t and check for zero values
|
|
116
|
-
const retval = mem.cv_gfun!(mem.cv_tlo, mem.cv_zn[0], mem.cv_glo, mem.cv_user_data);
|
|
117
|
-
mem.cv_nge = 1;
|
|
118
|
-
if (retval !== 0)
|
|
119
|
-
return CV_RTFUNC_FAIL;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
let zroot = false;
|
|
123
|
-
for (let i = 0; i < nrtfn; i++) {
|
|
124
|
-
if (Math.abs(mem.cv_glo[i]) === ZERO) {
|
|
125
|
-
zroot = true;
|
|
126
|
-
mem.cv_gactive[i] = 0; // SUNFALSE
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
if (!zroot)
|
|
130
|
-
return CV_SUCCESS;
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
// Some g_i is zero at t0; look at g at t0+(small increment)
|
|
134
|
-
const hratio = Math.max(mem.cv_ttol / Math.abs(mem.cv_h), PT1);
|
|
135
|
-
const smallh = hratio * mem.cv_h;
|
|
136
|
-
const tplus = mem.cv_tlo + smallh;
|
|
137
|
-
|
|
138
|
-
// y = zn[0] + hratio * zn[1]
|
|
139
|
-
vLinearSum(ONE, mem.cv_zn[0], hratio, mem.cv_zn[1], mem.cv_y, N);
|
|
140
|
-
|
|
141
|
-
const retval2 = mem.cv_gfun!(tplus, mem.cv_y, mem.cv_ghi, mem.cv_user_data);
|
|
142
|
-
mem.cv_nge++;
|
|
143
|
-
if (retval2 !== 0)
|
|
144
|
-
return CV_RTFUNC_FAIL;
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
// Re-activate components where g moved away from zero
|
|
148
|
-
for (let i = 0; i < nrtfn; i++) {
|
|
149
|
-
if (mem.cv_gactive[i] === 0 && Math.abs(mem.cv_ghi[i]) !== ZERO) {
|
|
150
|
-
mem.cv_gactive[i] = 1; // SUNTRUE
|
|
151
|
-
mem.cv_glo[i] = mem.cv_ghi[i];
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
return CV_SUCCESS;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* cvRcheck2 - Subsequent-step root check for exact zeros at last root.
|
|
160
|
-
*
|
|
161
|
-
* C reference: cvRcheck2 (cvode.c, lines ~4323-4385)
|
|
162
|
-
*
|
|
163
|
-
* Checks for exact zeros of g at the last root found, for close pairs
|
|
164
|
-
* of zeros (error condition), and for a new root at a nearby point.
|
|
165
|
-
*
|
|
166
|
-
* @param mem - CVODE memory block
|
|
167
|
-
* @returns CV_SUCCESS, CLOSERT, RTFOUND, or CV_RTFUNC_FAIL
|
|
168
|
-
*/
|
|
169
|
-
export function cvRcheck2(mem: CvodeMem): number {
|
|
170
|
-
const nrtfn = mem.cv_nrtfn;
|
|
171
|
-
const N = mem.cv_N;
|
|
172
|
-
|
|
173
|
-
if (mem.cv_irfnd === 0)
|
|
174
|
-
return CV_SUCCESS;
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
// Get y at tlo via interpolation
|
|
178
|
-
cvodeGetDky(mem, mem.cv_tlo, 0, mem.cv_y);
|
|
179
|
-
|
|
180
|
-
// Evaluate g(tlo, y)
|
|
181
|
-
let retval = mem.cv_gfun!(mem.cv_tlo, mem.cv_y, mem.cv_glo, mem.cv_user_data);
|
|
182
|
-
mem.cv_nge++;
|
|
183
|
-
if (retval !== 0)
|
|
184
|
-
return CV_RTFUNC_FAIL;
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
let zroot = false;
|
|
188
|
-
for (let i = 0; i < nrtfn; i++)
|
|
189
|
-
mem.cv_iroots[i] = 0;
|
|
190
|
-
|
|
191
|
-
for (let i = 0; i < nrtfn; i++) {
|
|
192
|
-
if (mem.cv_gactive[i] === 0) continue;
|
|
193
|
-
if (Math.abs(mem.cv_glo[i]) === ZERO) {
|
|
194
|
-
zroot = true;
|
|
195
|
-
mem.cv_iroots[i] = 1;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
if (!zroot)
|
|
199
|
-
return CV_SUCCESS;
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
// One or more g_i has a zero at tlo. Check g at tlo+smallh.
|
|
203
|
-
mem.cv_ttol = (Math.abs(mem.cv_tn) + Math.abs(mem.cv_h)) * UROUND * HUNDRED;
|
|
204
|
-
const smallh = (mem.cv_h > ZERO) ? mem.cv_ttol : -mem.cv_ttol;
|
|
205
|
-
const tplus = mem.cv_tlo + smallh;
|
|
206
|
-
|
|
207
|
-
if ((tplus - mem.cv_tn) * mem.cv_h >= ZERO) {
|
|
208
|
-
const hratio = smallh / mem.cv_h;
|
|
209
|
-
// y = y + hratio * zn[1]
|
|
210
|
-
vLinearSum(ONE, mem.cv_y, hratio, mem.cv_zn[1], mem.cv_y, N);
|
|
211
|
-
} else
|
|
212
|
-
cvodeGetDky(mem, tplus, 0, mem.cv_y);
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
retval = mem.cv_gfun!(tplus, mem.cv_y, mem.cv_ghi, mem.cv_user_data);
|
|
216
|
-
mem.cv_nge++;
|
|
217
|
-
if (retval !== 0)
|
|
218
|
-
return CV_RTFUNC_FAIL;
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
// Check for close roots (error return), new zero at tlo+smallh,
|
|
222
|
-
// and g_i that changed from zero to nonzero.
|
|
223
|
-
zroot = false;
|
|
224
|
-
for (let i = 0; i < nrtfn; i++) {
|
|
225
|
-
if (mem.cv_gactive[i] === 0) continue;
|
|
226
|
-
if (Math.abs(mem.cv_ghi[i]) === ZERO) {
|
|
227
|
-
if (mem.cv_iroots[i] === 1)
|
|
228
|
-
return CLOSERT;
|
|
229
|
-
|
|
230
|
-
zroot = true;
|
|
231
|
-
mem.cv_iroots[i] = 1;
|
|
232
|
-
} else {
|
|
233
|
-
if (mem.cv_iroots[i] === 1)
|
|
234
|
-
mem.cv_glo[i] = mem.cv_ghi[i];
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
if (zroot)
|
|
238
|
-
return RTFOUND;
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
return CV_SUCCESS;
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
/**
|
|
245
|
-
* cvRcheck3 - Root search between tlo and tn (or tout).
|
|
246
|
-
*
|
|
247
|
-
* C reference: cvRcheck3 (cvode.c, lines ~4400-4453)
|
|
248
|
-
*
|
|
249
|
-
* Interfaces to cvRootfind to look for a root of g between tlo and
|
|
250
|
-
* either tn or tout, whichever comes first.
|
|
251
|
-
*
|
|
252
|
-
* @param mem - CVODE memory block
|
|
253
|
-
* @returns CV_SUCCESS, RTFOUND, or CV_RTFUNC_FAIL
|
|
254
|
-
*/
|
|
255
|
-
export function cvRcheck3(mem: CvodeMem): number {
|
|
256
|
-
const nrtfn = mem.cv_nrtfn;
|
|
257
|
-
const N = mem.cv_N;
|
|
258
|
-
|
|
259
|
-
// Set thi = tn or tout, whichever comes first; set y = y(thi)
|
|
260
|
-
if (mem.cv_taskc === CV_ONE_STEP) {
|
|
261
|
-
mem.cv_thi = mem.cv_tn;
|
|
262
|
-
vScale(ONE, mem.cv_zn[0], mem.cv_y, N);
|
|
263
|
-
}
|
|
264
|
-
if (mem.cv_taskc === CV_NORMAL) {
|
|
265
|
-
if ((mem.cv_toutc - mem.cv_tn) * mem.cv_h >= ZERO) {
|
|
266
|
-
mem.cv_thi = mem.cv_tn;
|
|
267
|
-
vScale(ONE, mem.cv_zn[0], mem.cv_y, N);
|
|
268
|
-
} else {
|
|
269
|
-
mem.cv_thi = mem.cv_toutc;
|
|
270
|
-
cvodeGetDky(mem, mem.cv_thi, 0, mem.cv_y);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
// Evaluate g(thi, y) and call cvRootfind
|
|
275
|
-
const retval = mem.cv_gfun!(mem.cv_thi, mem.cv_y, mem.cv_ghi, mem.cv_user_data);
|
|
276
|
-
mem.cv_nge++;
|
|
277
|
-
if (retval !== 0)
|
|
278
|
-
return CV_RTFUNC_FAIL;
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
mem.cv_ttol = (Math.abs(mem.cv_tn) + Math.abs(mem.cv_h)) * UROUND * HUNDRED;
|
|
282
|
-
const ier = cvRootfind(mem);
|
|
283
|
-
if (ier === CV_RTFUNC_FAIL)
|
|
284
|
-
return CV_RTFUNC_FAIL;
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
// Re-activate g components that moved away from zero
|
|
288
|
-
for (let i = 0; i < nrtfn; i++) {
|
|
289
|
-
if (mem.cv_gactive[i] === 0 && mem.cv_grout[i] !== ZERO)
|
|
290
|
-
mem.cv_gactive[i] = 1; // SUNTRUE
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
mem.cv_tlo = mem.cv_trout;
|
|
294
|
-
for (let i = 0; i < nrtfn; i++)
|
|
295
|
-
mem.cv_glo[i] = mem.cv_grout[i];
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
// If no root found, return CV_SUCCESS
|
|
299
|
-
if (ier === CV_SUCCESS)
|
|
300
|
-
return CV_SUCCESS;
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
// If a root was found, interpolate to get y(trout) and return
|
|
304
|
-
cvodeGetDky(mem, mem.cv_trout, 0, mem.cv_y);
|
|
305
|
-
return RTFOUND;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
// ============================================================================
|
|
309
|
-
// Internal (non-exported) functions
|
|
310
|
-
// ============================================================================
|
|
311
|
-
|
|
312
|
-
/**
|
|
313
|
-
* cvRootfind - Illinois algorithm for root finding.
|
|
314
|
-
*
|
|
315
|
-
* C reference: cvRootfind (cvode.c, lines ~4532-4737)
|
|
316
|
-
*
|
|
317
|
-
* Solves for a root of g(t) between tlo and thi using a modified secant
|
|
318
|
-
* method (Illinois algorithm). Only roots of odd multiplicity (sign changes)
|
|
319
|
-
* or exact zeros are found. When multiple roots exist, the one closest to
|
|
320
|
-
* tlo is returned.
|
|
321
|
-
*
|
|
322
|
-
* @param mem - CVODE memory block
|
|
323
|
-
* @returns CV_SUCCESS, RTFOUND, or CV_RTFUNC_FAIL
|
|
324
|
-
*/
|
|
325
|
-
function cvRootfind(mem: CvodeMem): number {
|
|
326
|
-
const nrtfn = mem.cv_nrtfn;
|
|
327
|
-
|
|
328
|
-
let imax = 0;
|
|
329
|
-
let alph: number;
|
|
330
|
-
let tmid: number;
|
|
331
|
-
let gfrac: number;
|
|
332
|
-
let maxfrac: number;
|
|
333
|
-
let fracint: number;
|
|
334
|
-
let fracsub: number;
|
|
335
|
-
|
|
336
|
-
// First check for change in sign in ghi or for a zero in ghi.
|
|
337
|
-
maxfrac = ZERO;
|
|
338
|
-
let zroot = false;
|
|
339
|
-
let sgnchg = false;
|
|
340
|
-
|
|
341
|
-
for (let i = 0; i < nrtfn; i++) {
|
|
342
|
-
if (mem.cv_gactive[i] === 0) continue;
|
|
343
|
-
if (Math.abs(mem.cv_ghi[i]) === ZERO) {
|
|
344
|
-
if (mem.cv_rootdir[i] * mem.cv_glo[i] <= ZERO)
|
|
345
|
-
zroot = true;
|
|
346
|
-
} else {
|
|
347
|
-
if ((mem.cv_glo[i] * mem.cv_ghi[i] < 0) &&
|
|
348
|
-
(mem.cv_rootdir[i] * mem.cv_glo[i] <= ZERO)) {
|
|
349
|
-
gfrac = Math.abs(mem.cv_ghi[i] / (mem.cv_ghi[i] - mem.cv_glo[i]));
|
|
350
|
-
if (gfrac > maxfrac) {
|
|
351
|
-
sgnchg = true;
|
|
352
|
-
maxfrac = gfrac;
|
|
353
|
-
imax = i;
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
// If no sign change was found, reset trout and grout.
|
|
360
|
-
// Return CV_SUCCESS if no zero was found, or set iroots and return RTFOUND.
|
|
361
|
-
if (!sgnchg) {
|
|
362
|
-
mem.cv_trout = mem.cv_thi;
|
|
363
|
-
for (let i = 0; i < nrtfn; i++)
|
|
364
|
-
mem.cv_grout[i] = mem.cv_ghi[i];
|
|
365
|
-
|
|
366
|
-
if (!zroot)
|
|
367
|
-
return CV_SUCCESS;
|
|
368
|
-
|
|
369
|
-
for (let i = 0; i < nrtfn; i++) {
|
|
370
|
-
mem.cv_iroots[i] = 0;
|
|
371
|
-
if (mem.cv_gactive[i] === 0) continue;
|
|
372
|
-
if ((Math.abs(mem.cv_ghi[i]) === ZERO) &&
|
|
373
|
-
(mem.cv_rootdir[i] * mem.cv_glo[i] <= ZERO))
|
|
374
|
-
mem.cv_iroots[i] = mem.cv_glo[i] > 0 ? -1 : 1;
|
|
375
|
-
}
|
|
376
|
-
return RTFOUND;
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
// Initialize alph
|
|
380
|
-
alph = ONE;
|
|
381
|
-
|
|
382
|
-
// A sign change was found. Loop to locate nearest root.
|
|
383
|
-
let side = 0;
|
|
384
|
-
let sideprev = -1;
|
|
385
|
-
|
|
386
|
-
for (;;) {
|
|
387
|
-
// If interval size is already less than tolerance ttol, break.
|
|
388
|
-
if (Math.abs(mem.cv_thi - mem.cv_tlo) <= mem.cv_ttol)
|
|
389
|
-
break;
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
// Set weight alph.
|
|
393
|
-
// On the first two passes, set alph = 1. Thereafter, reset alph
|
|
394
|
-
// according to the side of the subinterval where the sign change was found.
|
|
395
|
-
if (sideprev === side)
|
|
396
|
-
alph = (side === 2) ? alph * TWO : alph * HALF;
|
|
397
|
-
else
|
|
398
|
-
alph = ONE;
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
// Set next root approximation tmid and get g(tmid).
|
|
402
|
-
// If tmid is too close to tlo or thi, adjust it inward.
|
|
403
|
-
tmid = mem.cv_thi -
|
|
404
|
-
(mem.cv_thi - mem.cv_tlo) * mem.cv_ghi[imax] /
|
|
405
|
-
(mem.cv_ghi[imax] - alph * mem.cv_glo[imax]);
|
|
406
|
-
|
|
407
|
-
if (Math.abs(tmid - mem.cv_tlo) < HALF * mem.cv_ttol) {
|
|
408
|
-
fracint = Math.abs(mem.cv_thi - mem.cv_tlo) / mem.cv_ttol;
|
|
409
|
-
fracsub = (fracint > FIVE) ? PT1 : HALF / fracint;
|
|
410
|
-
tmid = mem.cv_tlo + fracsub * (mem.cv_thi - mem.cv_tlo);
|
|
411
|
-
}
|
|
412
|
-
if (Math.abs(mem.cv_thi - tmid) < HALF * mem.cv_ttol) {
|
|
413
|
-
fracint = Math.abs(mem.cv_thi - mem.cv_tlo) / mem.cv_ttol;
|
|
414
|
-
fracsub = (fracint > FIVE) ? PT1 : HALF / fracint;
|
|
415
|
-
tmid = mem.cv_thi - fracsub * (mem.cv_thi - mem.cv_tlo);
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
// Interpolate to get y(tmid) and evaluate g(tmid)
|
|
419
|
-
cvodeGetDky(mem, tmid, 0, mem.cv_y);
|
|
420
|
-
const retval = mem.cv_gfun!(tmid, mem.cv_y, mem.cv_grout, mem.cv_user_data);
|
|
421
|
-
mem.cv_nge++;
|
|
422
|
-
if (retval !== 0)
|
|
423
|
-
return CV_RTFUNC_FAIL;
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
// Check in which subinterval g changes sign, and reset imax.
|
|
427
|
-
// Set side = 1 if sign change is on low side, or 2 if on high side.
|
|
428
|
-
maxfrac = ZERO;
|
|
429
|
-
zroot = false;
|
|
430
|
-
sgnchg = false;
|
|
431
|
-
sideprev = side;
|
|
432
|
-
|
|
433
|
-
for (let i = 0; i < nrtfn; i++) {
|
|
434
|
-
if (mem.cv_gactive[i] === 0) continue;
|
|
435
|
-
if (Math.abs(mem.cv_grout[i]) === ZERO) {
|
|
436
|
-
if (mem.cv_rootdir[i] * mem.cv_glo[i] <= ZERO)
|
|
437
|
-
zroot = true;
|
|
438
|
-
} else {
|
|
439
|
-
if ((mem.cv_glo[i] * mem.cv_grout[i] < 0) &&
|
|
440
|
-
(mem.cv_rootdir[i] * mem.cv_glo[i] <= ZERO)) {
|
|
441
|
-
gfrac = Math.abs(mem.cv_grout[i] /
|
|
442
|
-
(mem.cv_grout[i] - mem.cv_glo[i]));
|
|
443
|
-
if (gfrac > maxfrac) {
|
|
444
|
-
sgnchg = true;
|
|
445
|
-
maxfrac = gfrac;
|
|
446
|
-
imax = i;
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
if (sgnchg) {
|
|
453
|
-
// Sign change found in (tlo, tmid); replace thi with tmid.
|
|
454
|
-
mem.cv_thi = tmid;
|
|
455
|
-
for (let i = 0; i < nrtfn; i++)
|
|
456
|
-
mem.cv_ghi[i] = mem.cv_grout[i];
|
|
457
|
-
|
|
458
|
-
side = 1;
|
|
459
|
-
// Stop at root thi if converged; otherwise loop.
|
|
460
|
-
if (Math.abs(mem.cv_thi - mem.cv_tlo) <= mem.cv_ttol)
|
|
461
|
-
break;
|
|
462
|
-
|
|
463
|
-
continue;
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
if (zroot) {
|
|
467
|
-
// No sign change in (tlo, tmid), but g = 0 at tmid; return root tmid.
|
|
468
|
-
mem.cv_thi = tmid;
|
|
469
|
-
for (let i = 0; i < nrtfn; i++)
|
|
470
|
-
mem.cv_ghi[i] = mem.cv_grout[i];
|
|
471
|
-
|
|
472
|
-
break;
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
// No sign change in (tlo, tmid), and no zero at tmid.
|
|
476
|
-
// Sign change must be in (tmid, thi). Replace tlo with tmid.
|
|
477
|
-
mem.cv_tlo = tmid;
|
|
478
|
-
for (let i = 0; i < nrtfn; i++)
|
|
479
|
-
mem.cv_glo[i] = mem.cv_grout[i];
|
|
480
|
-
|
|
481
|
-
side = 2;
|
|
482
|
-
// Stop at root thi if converged; otherwise loop back.
|
|
483
|
-
if (Math.abs(mem.cv_thi - mem.cv_tlo) <= mem.cv_ttol)
|
|
484
|
-
break;
|
|
485
|
-
} // End of root-search loop
|
|
486
|
-
|
|
487
|
-
// Reset trout and grout, set iroots, and return RTFOUND.
|
|
488
|
-
mem.cv_trout = mem.cv_thi;
|
|
489
|
-
for (let i = 0; i < nrtfn; i++) {
|
|
490
|
-
mem.cv_grout[i] = mem.cv_ghi[i];
|
|
491
|
-
mem.cv_iroots[i] = 0;
|
|
492
|
-
if (mem.cv_gactive[i] === 0) continue;
|
|
493
|
-
if ((Math.abs(mem.cv_ghi[i]) === ZERO) &&
|
|
494
|
-
(mem.cv_rootdir[i] * mem.cv_glo[i] <= ZERO))
|
|
495
|
-
mem.cv_iroots[i] = mem.cv_glo[i] > 0 ? -1 : 1;
|
|
496
|
-
|
|
497
|
-
if ((mem.cv_glo[i] * mem.cv_ghi[i] < 0) &&
|
|
498
|
-
(mem.cv_rootdir[i] * mem.cv_glo[i] <= ZERO))
|
|
499
|
-
mem.cv_iroots[i] = mem.cv_glo[i] > 0 ? -1 : 1;
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
return RTFOUND;
|
|
503
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dense_linalg.js","sourceRoot":"","sources":["dense_linalg.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TypeScript port of SUNDIALS CVODE v7.5.0 (https://github.com/LLNL/sundials)
|
|
3
|
-
*
|
|
4
|
-
* Copyright (c) 2025, Lawrence Livermore National Security, University of
|
|
5
|
-
* Maryland Baltimore County, and the SUNDIALS contributors.
|
|
6
|
-
* Copyright (c) 2013-2025, Lawrence Livermore National Security and
|
|
7
|
-
* Southern Methodist University.
|
|
8
|
-
* Copyright (c) 2002-2013, Lawrence Livermore National Security.
|
|
9
|
-
* Copyright (c) 2026 Datagrok.
|
|
10
|
-
*
|
|
11
|
-
* Licensed under the BSD-3-Clause License. See THIRD_PARTY_LICENSES
|
|
12
|
-
* for the full license text and provenance chain of the original code.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
// Dense linear algebra routines for CVODE (0-based indexing).
|
|
16
|
-
//
|
|
17
|
-
// These are fresh 0-based implementations of LU factorization with partial
|
|
18
|
-
// pivoting and triangular solve. The existing src/blas.ts uses 1-based
|
|
19
|
-
// indexing inherited from the Fortran/Linpack convention; CVODE needs 0-based.
|
|
20
|
-
//
|
|
21
|
-
// Matrix layout: row-major Float64Array[], where a[i][j] is row i, column j.
|
|
22
|
-
// This matches the LSODA convention (see CVODE-C-to-TS.md section 2.3) and
|
|
23
|
-
// differs from SUNDIALS column-major storage. The algorithms are translated
|
|
24
|
-
// from SUNDIALS sundials_dense.c (denseGETRF / denseGETRS) with the storage
|
|
25
|
-
// order transposed.
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* LU factorization of an n-by-n dense matrix by Gaussian elimination
|
|
29
|
-
* with partial pivoting (row-major, 0-based).
|
|
30
|
-
*
|
|
31
|
-
* On exit, `a` is overwritten with the LU factors:
|
|
32
|
-
* - The upper triangle (including diagonal) holds U.
|
|
33
|
-
* - The strict lower triangle holds the multipliers L (unit diagonal implied).
|
|
34
|
-
*
|
|
35
|
-
* The pivot vector `ipvt` records row interchanges: at step k, row k was
|
|
36
|
-
* swapped with row ipvt[k] before elimination.
|
|
37
|
-
*
|
|
38
|
-
* @param a - n-by-n matrix stored as `Float64Array[]` (a[i] = row i).
|
|
39
|
-
* Overwritten with LU factors in place.
|
|
40
|
-
* @param n - matrix dimension (number of rows and columns).
|
|
41
|
-
* @param ipvt - pivot index output array (`Int32Array` of length n, 0-based).
|
|
42
|
-
* @returns 0 on success, or k+1 (1-based) if U[k][k] is exactly zero
|
|
43
|
-
* (the matrix is singular or nearly so). A nonzero return means
|
|
44
|
-
* the factorization completed but the factor U is singular.
|
|
45
|
-
*/
|
|
46
|
-
export function dgefa(a: Float64Array[], n: number, ipvt: Int32Array): number {
|
|
47
|
-
let info = 0;
|
|
48
|
-
|
|
49
|
-
for (let k = 0; k < n; k++) {
|
|
50
|
-
// --- Find pivot: row index l in [k, n) with largest |a[l][k]| ---
|
|
51
|
-
let l = k;
|
|
52
|
-
let maxAbs = Math.abs(a[k][k]);
|
|
53
|
-
for (let i = k + 1; i < n; i++) {
|
|
54
|
-
const v = Math.abs(a[i][k]);
|
|
55
|
-
if (v > maxAbs) {
|
|
56
|
-
maxAbs = v;
|
|
57
|
-
l = i;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
ipvt[k] = l;
|
|
61
|
-
|
|
62
|
-
// --- Check for zero pivot ---
|
|
63
|
-
if (a[l][k] === 0.0) {
|
|
64
|
-
info = k + 1;
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// --- Swap rows k and l (swap row references, O(1)) ---
|
|
69
|
-
if (l !== k) {
|
|
70
|
-
const tmp = a[k];
|
|
71
|
-
a[k] = a[l];
|
|
72
|
-
a[l] = tmp;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// --- Compute multipliers: a[i][k] = a[i][k] / a[k][k], i = k+1..n-1 ---
|
|
76
|
-
// These multipliers form the strict lower triangle of L.
|
|
77
|
-
const pivot = a[k][k];
|
|
78
|
-
const mult = 1.0 / pivot;
|
|
79
|
-
for (let i = k + 1; i < n; i++)
|
|
80
|
-
a[i][k] *= mult;
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
// --- Eliminate: update the trailing (n-k-1)-by-(n-k-1) submatrix ---
|
|
84
|
-
// a[i][j] -= a[i][k] * a[k][j], for i = k+1..n-1, j = k+1..n-1
|
|
85
|
-
for (let i = k + 1; i < n; i++) {
|
|
86
|
-
const m = a[i][k]; // multiplier (already computed above)
|
|
87
|
-
if (m !== 0.0) {
|
|
88
|
-
const rowI = a[i];
|
|
89
|
-
const rowK = a[k];
|
|
90
|
-
for (let j = k + 1; j < n; j++)
|
|
91
|
-
rowI[j] -= m * rowK[j];
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
return info;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Solve A * x = b using the LU factorization produced by {@link dgefa}.
|
|
101
|
-
*
|
|
102
|
-
* On entry, `b` contains the right-hand side vector. On exit, `b` is
|
|
103
|
-
* overwritten with the solution vector x.
|
|
104
|
-
*
|
|
105
|
-
* The solve proceeds in three stages:
|
|
106
|
-
* 1. Permute b according to the pivot vector (row interchanges).
|
|
107
|
-
* 2. Forward substitution: solve L * y = P * b.
|
|
108
|
-
* 3. Back substitution: solve U * x = y.
|
|
109
|
-
*
|
|
110
|
-
* @param a - LU-factored n-by-n matrix from dgefa (row-major, 0-based).
|
|
111
|
-
* @param n - matrix dimension.
|
|
112
|
-
* @param ipvt - pivot indices from dgefa (0-based, length n).
|
|
113
|
-
* @param b - right-hand side on input (length n, 0-based), solution on output.
|
|
114
|
-
*/
|
|
115
|
-
export function dgesl(
|
|
116
|
-
a: Float64Array[], n: number, ipvt: Int32Array, b: Float64Array,
|
|
117
|
-
): void {
|
|
118
|
-
// --- Permute b according to pivot vector ---
|
|
119
|
-
for (let k = 0; k < n; k++) {
|
|
120
|
-
const p = ipvt[k];
|
|
121
|
-
if (p !== k) {
|
|
122
|
-
const tmp = b[k];
|
|
123
|
-
b[k] = b[p];
|
|
124
|
-
b[p] = tmp;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// --- Forward substitution: solve L * y = P*b ---
|
|
129
|
-
// L has unit diagonal; multipliers are in strict lower triangle of a.
|
|
130
|
-
// y[i] = b[i] - sum_{k=0}^{i-1} a[i][k] * y[k], but since we process
|
|
131
|
-
// column-by-column (outer loop on k), we update all rows below k:
|
|
132
|
-
for (let k = 0; k < n - 1; k++) {
|
|
133
|
-
for (let i = k + 1; i < n; i++)
|
|
134
|
-
b[i] -= a[i][k] * b[k];
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// --- Back substitution: solve U * x = y ---
|
|
138
|
-
// U is in the upper triangle (including diagonal) of a.
|
|
139
|
-
for (let k = n - 1; k >= 0; k--) {
|
|
140
|
-
b[k] /= a[k][k];
|
|
141
|
-
for (let i = 0; i < k; i++)
|
|
142
|
-
b[i] -= a[i][k] * b[k];
|
|
143
|
-
}
|
|
144
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,yCAAyC;AACzC,yCAAyC;AAEzC,uBAAuB;AACvB,OAAO,EAAC,KAAK,EAAC,MAAM,eAAe,CAAC;AAGpC,2BAA2B;AAC3B,OAAO,EAAC,WAAW,EAAE,SAAS,EAAE,KAAK,EAAC,MAAM,SAAS,CAAC;AACtD,OAAO,EAAC,WAAW,EAAC,MAAM,UAAU,CAAC;AACrC,OAAO,EAAC,oBAAoB,EAAE,aAAa,EAAC,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAI3C,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,EAC1B,8BAA8B,EAC9B,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAC,QAAQ,EAAE,OAAO,EAAC,MAAM,UAAU,CAAC;AAC3C,OAAO,EACL,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,WAAW,EACtB,UAAU,EAAE,eAAe,EAAE,cAAc,EAC3C,gBAAgB,EAAE,eAAe,EAAE,cAAc,EACjD,eAAe,EAAE,eAAe,GACjC,MAAM,UAAU,CAAC"}
|