diff-grok 1.0.8

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 (136) hide show
  1. package/.eslintrc.json +45 -0
  2. package/.github/scripts/bump-js-api-version.sh +106 -0
  3. package/.github/scripts/check-output.sh +20 -0
  4. package/.github/scripts/iac-cfn-deploy.sh +90 -0
  5. package/.github/scripts/slack_api_request.sh +65 -0
  6. package/.github/scripts/test_package.sh +270 -0
  7. package/.github/workflows/libraries.yaml +305 -0
  8. package/LICENSE +21 -0
  9. package/README.MD +396 -0
  10. package/eslintrc.json +45 -0
  11. package/images/acid-prod.gif +0 -0
  12. package/index.js +6 -0
  13. package/index.js.map +1 -0
  14. package/index.ts +15 -0
  15. package/package.json +45 -0
  16. package/src/examples/basic-use.js +40 -0
  17. package/src/examples/basic-use.js.map +1 -0
  18. package/src/examples/basic-use.ts +44 -0
  19. package/src/examples/check-methods.js +45 -0
  20. package/src/examples/check-methods.js.map +1 -0
  21. package/src/examples/check-methods.ts +62 -0
  22. package/src/examples/corr-probs.js +130 -0
  23. package/src/examples/corr-probs.js.map +1 -0
  24. package/src/examples/corr-probs.ts +151 -0
  25. package/src/examples/cyclic-model.js +100 -0
  26. package/src/examples/cyclic-model.js.map +1 -0
  27. package/src/examples/cyclic-model.ts +110 -0
  28. package/src/examples/e5.js +30 -0
  29. package/src/examples/e5.js.map +1 -0
  30. package/src/examples/e5.ts +29 -0
  31. package/src/examples/hires.js +29 -0
  32. package/src/examples/hires.js.map +1 -0
  33. package/src/examples/hires.ts +29 -0
  34. package/src/examples/index.js +17 -0
  35. package/src/examples/index.js.map +1 -0
  36. package/src/examples/index.ts +18 -0
  37. package/src/examples/model-updates.js +112 -0
  38. package/src/examples/model-updates.js.map +1 -0
  39. package/src/examples/model-updates.ts +122 -0
  40. package/src/examples/orego.js +19 -0
  41. package/src/examples/orego.js.map +1 -0
  42. package/src/examples/orego.ts +19 -0
  43. package/src/examples/pipeline-use.js +87 -0
  44. package/src/examples/pipeline-use.js.map +1 -0
  45. package/src/examples/pipeline-use.ts +98 -0
  46. package/src/examples/pollution.js +110 -0
  47. package/src/examples/pollution.js.map +1 -0
  48. package/src/examples/pollution.ts +110 -0
  49. package/src/examples/robertson.js +14 -0
  50. package/src/examples/robertson.js.map +1 -0
  51. package/src/examples/robertson.ts +13 -0
  52. package/src/examples/scripting.js +31 -0
  53. package/src/examples/scripting.js.map +1 -0
  54. package/src/examples/scripting.ts +36 -0
  55. package/src/examples/vdpol.js +13 -0
  56. package/src/examples/vdpol.js.map +1 -0
  57. package/src/examples/vdpol.ts +12 -0
  58. package/src/pipeline/basic-pipeline-creator.js +21 -0
  59. package/src/pipeline/basic-pipeline-creator.js.map +1 -0
  60. package/src/pipeline/basic-pipeline-creator.ts +24 -0
  61. package/src/pipeline/constants.js +21 -0
  62. package/src/pipeline/constants.js.map +1 -0
  63. package/src/pipeline/constants.ts +21 -0
  64. package/src/pipeline/index.js +8 -0
  65. package/src/pipeline/index.js.map +1 -0
  66. package/src/pipeline/index.ts +7 -0
  67. package/src/pipeline/input.js +45 -0
  68. package/src/pipeline/input.js.map +1 -0
  69. package/src/pipeline/input.ts +55 -0
  70. package/src/pipeline/loops-pipeline-creator.js +107 -0
  71. package/src/pipeline/loops-pipeline-creator.js.map +1 -0
  72. package/src/pipeline/loops-pipeline-creator.ts +138 -0
  73. package/src/pipeline/output.js +146 -0
  74. package/src/pipeline/output.js.map +1 -0
  75. package/src/pipeline/output.ts +196 -0
  76. package/src/pipeline/pipeline-creator.js +10 -0
  77. package/src/pipeline/pipeline-creator.js.map +1 -0
  78. package/src/pipeline/pipeline-creator.ts +16 -0
  79. package/src/pipeline/pipeline.js +71 -0
  80. package/src/pipeline/pipeline.js.map +1 -0
  81. package/src/pipeline/pipeline.ts +104 -0
  82. package/src/pipeline/updates-pipeline-creator.js +98 -0
  83. package/src/pipeline/updates-pipeline-creator.js.map +1 -0
  84. package/src/pipeline/updates-pipeline-creator.ts +125 -0
  85. package/src/scripting-tools/constants.js +53 -0
  86. package/src/scripting-tools/constants.js.map +1 -0
  87. package/src/scripting-tools/constants.ts +51 -0
  88. package/src/scripting-tools/index.js +4 -0
  89. package/src/scripting-tools/index.js.map +1 -0
  90. package/src/scripting-tools/index.ts +7 -0
  91. package/src/scripting-tools/model-error.js +17 -0
  92. package/src/scripting-tools/model-error.js.map +1 -0
  93. package/src/scripting-tools/model-error.ts +19 -0
  94. package/src/scripting-tools/scripting-tools.js +1032 -0
  95. package/src/scripting-tools/scripting-tools.js.map +1 -0
  96. package/src/scripting-tools/scripting-tools.ts +1375 -0
  97. package/src/solver-tools/callbacks/callback-base.js +10 -0
  98. package/src/solver-tools/callbacks/callback-base.js.map +1 -0
  99. package/src/solver-tools/callbacks/callback-base.ts +8 -0
  100. package/src/solver-tools/callbacks/callback-tools.js +14 -0
  101. package/src/solver-tools/callbacks/callback-tools.js.map +1 -0
  102. package/src/solver-tools/callbacks/callback-tools.ts +20 -0
  103. package/src/solver-tools/callbacks/iter-checker-callback.js +16 -0
  104. package/src/solver-tools/callbacks/iter-checker-callback.js.map +1 -0
  105. package/src/solver-tools/callbacks/iter-checker-callback.ts +21 -0
  106. package/src/solver-tools/callbacks/time-checker-callback.js +17 -0
  107. package/src/solver-tools/callbacks/time-checker-callback.js.map +1 -0
  108. package/src/solver-tools/callbacks/time-checker-callback.ts +19 -0
  109. package/src/solver-tools/index.js +6 -0
  110. package/src/solver-tools/index.js.map +1 -0
  111. package/src/solver-tools/index.ts +6 -0
  112. package/src/solver-tools/lin-alg-tools.js +56 -0
  113. package/src/solver-tools/lin-alg-tools.js.map +1 -0
  114. package/src/solver-tools/lin-alg-tools.ts +75 -0
  115. package/src/solver-tools/mrt-method.js +210 -0
  116. package/src/solver-tools/mrt-method.js.map +1 -0
  117. package/src/solver-tools/mrt-method.ts +269 -0
  118. package/src/solver-tools/ros34prw-method.js +257 -0
  119. package/src/solver-tools/ros34prw-method.js.map +1 -0
  120. package/src/solver-tools/ros34prw-method.ts +335 -0
  121. package/src/solver-tools/ros3prw-method.js +233 -0
  122. package/src/solver-tools/ros3prw-method.js.map +1 -0
  123. package/src/solver-tools/ros3prw-method.ts +304 -0
  124. package/src/solver-tools/solver-defs.js +58 -0
  125. package/src/solver-tools/solver-defs.js.map +1 -0
  126. package/src/solver-tools/solver-defs.ts +100 -0
  127. package/src/worker-tools/index.js +3 -0
  128. package/src/worker-tools/index.js.map +1 -0
  129. package/src/worker-tools/index.ts +2 -0
  130. package/src/worker-tools/scripting.js +68 -0
  131. package/src/worker-tools/scripting.js.map +1 -0
  132. package/src/worker-tools/scripting.ts +95 -0
  133. package/src/worker-tools/solving.js +48 -0
  134. package/src/worker-tools/solving.js.map +1 -0
  135. package/src/worker-tools/solving.ts +60 -0
  136. package/tsconfig.json +71 -0
@@ -0,0 +1,10 @@
1
+ // Solver's callback base
2
+ /** Solver callback */
3
+ export class Callback {
4
+ constructor() { }
5
+ ;
6
+ onIterationStart() { }
7
+ onComputationsCompleted() { }
8
+ }
9
+ ;
10
+ //# sourceMappingURL=callback-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callback-base.js","sourceRoot":"","sources":["callback-base.ts"],"names":[],"mappings":"AAAA,yBAAyB;AAEzB,sBAAsB;AACtB,MAAM,OAAO,QAAQ;IACnB,gBAAe,CAAC;IAAA,CAAC;IACV,gBAAgB,KAAU,CAAC;IAC3B,uBAAuB,KAAU,CAAC;CAC1C;AAAA,CAAC"}
@@ -0,0 +1,8 @@
1
+ // Solver's callback base
2
+
3
+ /** Solver callback */
4
+ export class Callback {
5
+ constructor() {};
6
+ public onIterationStart(): void {}
7
+ public onComputationsCompleted(): void {}
8
+ };
@@ -0,0 +1,14 @@
1
+ // Manager of callbacks
2
+ import { TimeCheckerCallback } from './time-checker-callback';
3
+ import { IterCheckerCallback } from './iter-checker-callback';
4
+ /** Get callback corresponding to the options */
5
+ export function getCallback(options) {
6
+ if (options === undefined)
7
+ return undefined;
8
+ if (options.maxIterations !== undefined)
9
+ return new IterCheckerCallback(options.maxIterations);
10
+ if (options.maxTimeMs !== undefined)
11
+ return new TimeCheckerCallback(options.maxTimeMs);
12
+ return undefined;
13
+ }
14
+ //# sourceMappingURL=callback-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callback-tools.js","sourceRoot":"","sources":["callback-tools.ts"],"names":[],"mappings":"AAAA,uBAAuB;AAIvB,OAAO,EAAC,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAC,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AAE5D,gDAAgD;AAChD,MAAM,UAAU,WAAW,CAAC,OAAgC;IAC1D,IAAI,OAAO,KAAK,SAAS;QACvB,OAAO,SAAS,CAAC;IAEnB,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;QACrC,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAExD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QACjC,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEpD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,20 @@
1
+ // Manager of callbacks
2
+
3
+ import {SolverOptions} from '../solver-defs';
4
+ import {Callback} from './callback-base';
5
+ import {TimeCheckerCallback} from './time-checker-callback';
6
+ import {IterCheckerCallback} from './iter-checker-callback';
7
+
8
+ /** Get callback corresponding to the options */
9
+ export function getCallback(options?: Partial<SolverOptions>): Callback | undefined {
10
+ if (options === undefined)
11
+ return undefined;
12
+
13
+ if (options.maxIterations !== undefined)
14
+ return new IterCheckerCallback(options.maxIterations);
15
+
16
+ if (options.maxTimeMs !== undefined)
17
+ return new TimeCheckerCallback(options.maxTimeMs);
18
+
19
+ return undefined;
20
+ }
@@ -0,0 +1,16 @@
1
+ import { Callback } from './callback-base';
2
+ import { CallbackAction } from '../solver-defs';
3
+ /** This callback terminates computations if the maximum iterations is exceeded */
4
+ export class IterCheckerCallback extends Callback {
5
+ constructor(maxIter) {
6
+ super();
7
+ this.maxIter = maxIter;
8
+ this.currentIter = 0;
9
+ }
10
+ onIterationStart() {
11
+ ++this.currentIter;
12
+ if (this.currentIter > this.maxIter)
13
+ throw new CallbackAction(`Max iterations count exceeded (${this.maxIter})`);
14
+ }
15
+ }
16
+ //# sourceMappingURL=iter-checker-callback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iter-checker-callback.js","sourceRoot":"","sources":["iter-checker-callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAC,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAE9C,kFAAkF;AAClF,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAI/C,YAAY,OAAe;QACzB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IACvB,CAAC;IAEM,gBAAgB;QACrB,EAAE,IAAI,CAAC,WAAW,CAAC;QAEnB,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;YACjC,MAAM,IAAI,cAAc,CAAC,kCAAkC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IAChF,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import {Callback} from './callback-base';
2
+ import {CallbackAction} from '../solver-defs';
3
+
4
+ /** This callback terminates computations if the maximum iterations is exceeded */
5
+ export class IterCheckerCallback extends Callback {
6
+ private maxIter: number;
7
+ private currentIter: number;
8
+
9
+ constructor(maxIter: number) {
10
+ super();
11
+ this.maxIter = maxIter;
12
+ this.currentIter = 0;
13
+ }
14
+
15
+ public onIterationStart(): void {
16
+ ++this.currentIter;
17
+
18
+ if (this.currentIter > this.maxIter)
19
+ throw new CallbackAction(`Max iterations count exceeded (${this.maxIter})`);
20
+ }
21
+ }
@@ -0,0 +1,17 @@
1
+ import { Callback } from './callback-base';
2
+ import { CallbackAction } from '../solver-defs';
3
+ /** This callback terminates computations if the maximum calculation time is exceeded */
4
+ export class TimeCheckerCallback extends Callback {
5
+ constructor(maxTime) {
6
+ super();
7
+ this.maxTime = 0;
8
+ this.startingTime = 0;
9
+ this.maxTime = maxTime;
10
+ this.startingTime = performance.now();
11
+ }
12
+ onIterationStart() {
13
+ if (performance.now() - this.startingTime > this.maxTime)
14
+ throw new CallbackAction(`Max time exceeded (${this.maxTime} ms)`);
15
+ }
16
+ }
17
+ //# sourceMappingURL=time-checker-callback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-checker-callback.js","sourceRoot":"","sources":["time-checker-callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAC,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAE9C,wFAAwF;AACxF,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAI/C,YAAY,OAAe;QACzB,KAAK,EAAE,CAAC;QAJF,YAAO,GAAG,CAAC,CAAC;QACZ,iBAAY,GAAG,CAAC,CAAC;QAIvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACxC,CAAC;IAEM,gBAAgB;QACrB,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO;YACtD,MAAM,IAAI,cAAc,CAAC,sBAAsB,IAAI,CAAC,OAAO,MAAM,CAAC,CAAC;IACvE,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import {Callback} from './callback-base';
2
+ import {CallbackAction} from '../solver-defs';
3
+
4
+ /** This callback terminates computations if the maximum calculation time is exceeded */
5
+ export class TimeCheckerCallback extends Callback {
6
+ private maxTime = 0;
7
+ private startingTime = 0;
8
+
9
+ constructor(maxTime: number) {
10
+ super();
11
+ this.maxTime = maxTime;
12
+ this.startingTime = performance.now();
13
+ }
14
+
15
+ public onIterationStart(): void {
16
+ if (performance.now() - this.startingTime > this.maxTime)
17
+ throw new CallbackAction(`Max time exceeded (${this.maxTime} ms)`);
18
+ }
19
+ }
@@ -0,0 +1,6 @@
1
+ export { mrt } from './mrt-method';
2
+ export { ros3prw } from './ros3prw-method';
3
+ export { ros34prw } from './ros34prw-method';
4
+ export { CallbackAction, DEFAULT_OPTIONS } from './solver-defs';
5
+ export { getCallback } from './callbacks/callback-tools';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,cAAc,CAAC;AACjC,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAC,cAAc,EAAE,eAAe,EAA8B,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAC,WAAW,EAAC,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,6 @@
1
+ export {ODEs, Func} from './solver-defs';
2
+ export {mrt} from './mrt-method';
3
+ export {ros3prw} from './ros3prw-method';
4
+ export {ros34prw} from './ros34prw-method';
5
+ export {CallbackAction, DEFAULT_OPTIONS, SolverOptions, SolverMethod} from './solver-defs';
6
+ export {getCallback} from './callbacks/callback-tools';
@@ -0,0 +1,56 @@
1
+ // LU-decomposition tools
2
+ /** Compute LU-decomposition of matrix */
3
+ export function luDecomp(A, L, U, n) {
4
+ L.fill(0);
5
+ U.fill(0);
6
+ for (let i = 0; i < n; ++i)
7
+ L[i * n + i] = 1;
8
+ let sumU = 0;
9
+ let sumL = 0;
10
+ let k = 0;
11
+ let j = 0;
12
+ let p = 0;
13
+ let i = 0;
14
+ for (k = 0; k < n; ++k) {
15
+ for (j = k; j < n; ++j) {
16
+ sumU = 0;
17
+ for (p = 0; p < k; ++p)
18
+ sumU += L[k * n + p] * U[p * n + j];
19
+ U[k * n + j] = A[k * n + j] - sumU;
20
+ }
21
+ for (i = k + 1; i < n; ++i) {
22
+ sumL = 0;
23
+ for (p = 0; p < k; ++p)
24
+ sumL += L[i * n + p] * U[p * n + k];
25
+ L[i * n + k] = (A[i * n + k] - sumL) / U[k * n + k];
26
+ }
27
+ }
28
+ } // luDecomp
29
+ /** Solve the system Ax = b using pre-computed LU-decomposition */
30
+ export function luSolve(L, U, b, y, x, n) {
31
+ let sumLy = 0;
32
+ for (let i = 0; i < n; ++i) {
33
+ sumLy = 0;
34
+ for (let j = 0; j < i; ++j)
35
+ sumLy += L[i * n + j] * y[j];
36
+ y[i] = (b[i] - sumLy) / L[i * n + i];
37
+ }
38
+ let sumUx = 0;
39
+ for (let i = n - 1; i > -1; --i) {
40
+ sumUx = 0;
41
+ for (let j = i + 1; j < n; ++j)
42
+ sumUx += U[i * n + j] * x[j];
43
+ x[i] = (y[i] - sumUx) / U[i * n + i];
44
+ }
45
+ } // luSolve
46
+ /** Solve Ax = b for 1D & 2D cases */
47
+ export function solve1d2d(A, b, x) {
48
+ if (x.length === 1) {
49
+ x[0] = b[0] / A[0];
50
+ return;
51
+ }
52
+ const delta = A[0] * A[3] - A[1] * A[2];
53
+ x[0] = (b[0] * A[3] - b[1] * A[1]) / delta;
54
+ x[1] = (A[0] * b[1] - A[2] * b[0]) / delta;
55
+ }
56
+ //# sourceMappingURL=lin-alg-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lin-alg-tools.js","sourceRoot":"","sources":["lin-alg-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ // LU-decomposition tools
2
+
3
+ /** Compute LU-decomposition of matrix */
4
+ export function luDecomp(A: Float64Array, L: Float64Array, U: Float64Array, n: number) {
5
+ L.fill(0);
6
+ U.fill(0);
7
+
8
+ for (let i = 0; i < n; ++i)
9
+ L[i * n + i] = 1;
10
+
11
+ let sumU = 0;
12
+ let sumL = 0;
13
+ let k = 0;
14
+ let j = 0;
15
+ let p = 0;
16
+ let i =0;
17
+
18
+ for (k = 0; k < n; ++k) {
19
+ for (j = k; j < n; ++j) {
20
+ sumU = 0;
21
+
22
+ for (p = 0; p < k; ++p)
23
+ sumU += L[k * n + p] * U[p * n + j];
24
+
25
+ U[k * n + j] = A[k * n +j] - sumU;
26
+ }
27
+
28
+ for (i = k + 1; i < n; ++i) {
29
+ sumL = 0;
30
+
31
+ for (p = 0; p < k; ++p)
32
+ sumL += L[i * n + p] * U[p * n + k];
33
+
34
+ L[i * n + k] = (A[i * n + k] - sumL) / U[k * n + k];
35
+ }
36
+ }
37
+ } // luDecomp
38
+
39
+ /** Solve the system Ax = b using pre-computed LU-decomposition */
40
+ export function luSolve(L: Float64Array, U: Float64Array, b: Float64Array, y: Float64Array,
41
+ x: Float64Array, n: number) {
42
+ let sumLy = 0;
43
+
44
+ for (let i = 0; i < n; ++i) {
45
+ sumLy = 0;
46
+
47
+ for (let j = 0; j < i; ++j)
48
+ sumLy += L[i * n + j] * y[j];
49
+
50
+ y[i] = (b[i] - sumLy) / L[i * n + i];
51
+ }
52
+
53
+ let sumUx = 0;
54
+
55
+ for (let i = n - 1; i > -1; --i) {
56
+ sumUx = 0;
57
+
58
+ for (let j = i + 1; j < n; ++j)
59
+ sumUx += U[i * n + j] * x[j];
60
+
61
+ x[i] = (y[i] - sumUx) / U[i * n + i];
62
+ }
63
+ } // luSolve
64
+
65
+ /** Solve Ax = b for 1D & 2D cases */
66
+ export function solve1d2d(A: Float64Array, b: Float64Array, x: Float64Array) {
67
+ if (x.length === 1) {
68
+ x[0] = b[0] / A[0];
69
+ return;
70
+ }
71
+
72
+ const delta = A[0] * A[3] - A[1] * A[2];
73
+ x[0] = (b[0] * A[3] - b[1] * A[1]) / delta;
74
+ x[1] = (A[0] * b[1] - A[2] * b[0]) / delta;
75
+ }
@@ -0,0 +1,210 @@
1
+ /* The modified Rosenbrock triple method (MTR).
2
+
3
+ References:
4
+ [1] https://doi.org/10.1137/S1064827594276424
5
+ [2] https://doi.org/10.1016/S0898-1221(00)00175-9
6
+ */
7
+ import { max, abs, SAFETY, PSHRNK, PSGROW, REDUCE_COEF, GROW_COEF, ERR_CONTR, TINY, EPS, tDerivative, jacobian, ERROR_MSG } from './solver-defs';
8
+ import { luDecomp, luSolve, solve1d2d } from './lin-alg-tools';
9
+ // Quantities used in Rosenbrock method (see [1], [2] for more details)
10
+ const D = 1.0 - Math.sqrt(2.0) / 2.0;
11
+ const E32 = 6.0 + Math.sqrt(2.0);
12
+ /** Solve initial value problem the modified Rosenbrock triple (MRT) method [1, 2]
13
+ * @param odes initial value problem for ordinary differential equations
14
+ * @param callback computations control callback
15
+ * @returns solution of the problem
16
+ */
17
+ export function mrt(odes, callback) {
18
+ /** right-hand side of the IVP solved */
19
+ const f = odes.func;
20
+ // operating variables
21
+ const t0 = odes.arg.start;
22
+ const t1 = odes.arg.finish;
23
+ let h = odes.arg.step;
24
+ const hDataframe = h;
25
+ const tolerance = odes.tolerance;
26
+ /** number of solution dataframe rows */
27
+ const rowCount = Math.trunc((t1 - t0) / h) + 1;
28
+ /** dimension of the problem */
29
+ const dim = odes.initial.length;
30
+ const dimSquared = dim * dim;
31
+ /** independent variable values */
32
+ const tArr = new Float64Array(rowCount);
33
+ /** arrays of solution values */
34
+ const yArrs = Array(dim);
35
+ for (let i = 0; i < dim; ++i)
36
+ yArrs[i] = new Float64Array(rowCount);
37
+ // method routine
38
+ let timeDataframe = t0 + hDataframe;
39
+ let t = t0;
40
+ let tPrev = t0;
41
+ let hNext = 0.0;
42
+ let flag = true;
43
+ let index = 1;
44
+ let errmax = 0;
45
+ let hTemp = 0;
46
+ let tNew = 0;
47
+ // 0 BUFFERS & TEMP STRUCTURES
48
+ /** identity matrix */
49
+ const I = new Float64Array(dim * dim);
50
+ // compute identity matrix
51
+ for (let i = 0; i < dim; ++i) {
52
+ for (let j = 0; j < dim; ++j)
53
+ I[j + i * dim] = (i === j) ? 1 : 0;
54
+ }
55
+ const y = new Float64Array(odes.initial);
56
+ const yPrev = new Float64Array(odes.initial);
57
+ const dydt = new Float64Array(dim);
58
+ const yScale = new Float64Array(dim);
59
+ const yTemp = new Float64Array(dim);
60
+ const yErr = new Float64Array(dim);
61
+ const W = new Float64Array(dimSquared);
62
+ const f0 = new Float64Array(dim);
63
+ const k1 = new Float64Array(dim);
64
+ const f1 = new Float64Array(dim);
65
+ const k2 = new Float64Array(dim);
66
+ const f2 = new Float64Array(dim);
67
+ const k3 = new Float64Array(dim);
68
+ const yDer = new Float64Array(dim);
69
+ const hdT = new Float64Array(dim);
70
+ const f0Buf = new Float64Array(dim);
71
+ const f1Buf = new Float64Array(dim);
72
+ let hd = 0;
73
+ let hDivNum = 0;
74
+ const L = new Float64Array(dimSquared);
75
+ const U = new Float64Array(dimSquared);
76
+ const luBuf = new Float64Array(dim);
77
+ const toUseLU = dim > 2;
78
+ // 1. SOLUTION AT THE POINT t0
79
+ tArr[0] = t0;
80
+ for (let i = 0; i < dim; ++i)
81
+ yArrs[i][0] = y[i];
82
+ // 2. COMPUTE NUMERICAL SOLUTION FOR THE POINTS FROM THE INTERVAL (t0, t1)
83
+ while (flag) {
84
+ // compute derivative
85
+ f(t, y, dydt);
86
+ // check whether to go on computations
87
+ if (callback)
88
+ callback.onIterationStart();
89
+ // compute scale vector
90
+ for (let i = 0; i < dim; ++i)
91
+ yScale[i] = abs(y[i]) + h * abs(dydt[i]) + TINY;
92
+ // check end point
93
+ if (t + h > t1) {
94
+ h = t1 - t;
95
+ flag = false;
96
+ }
97
+ // call of adaptive step modified Rosenbrok triple method
98
+ // computation of solution (y), time (t) and next step (hNext)
99
+ while (true) {
100
+ // one stage of the modified Rosenbrok triple approach
101
+ // hdT = h * d * T(t, y, EPS);
102
+ tDerivative(t, y, f, EPS, f0Buf, f1Buf, hdT);
103
+ hd = h * D;
104
+ for (let i = 0; i < dim; ++i)
105
+ hdT[i] *= hd;
106
+ // The main computations
107
+ // f0 = f(t, y);
108
+ f(t, y, f0);
109
+ // W = I - h * d * J(t, y, EPS);
110
+ jacobian(t, y, f, EPS, f0Buf, f1Buf, W);
111
+ for (let i = 0; i < dimSquared; ++i)
112
+ W[i] = I[i] - hd * W[i];
113
+ // compute LU-decomposition
114
+ if (toUseLU)
115
+ luDecomp(W, L, U, dim);
116
+ // compute k1: solve the system W * k1 = f0 + hdT
117
+ for (let i = 0; i < dim; ++i)
118
+ f0Buf[i] = f0[i] + hdT[i];
119
+ if (toUseLU)
120
+ luSolve(L, U, f0Buf, luBuf, k1, dim);
121
+ else
122
+ solve1d2d(W, f0Buf, k1);
123
+ hDivNum = 0.5 * h;
124
+ // yDer = y + 0.5 * h * k1;
125
+ for (let i = 0; i < dim; ++i)
126
+ yDer[i] = y[i] + hDivNum * k1[i];
127
+ // f1 = f(t + 0.5 * h, yDer);
128
+ f(t + hDivNum, yDer, f1);
129
+ // compute k2: solve the system W * (k2 - k1) = f1 - k1
130
+ for (let i = 0; i < dim; ++i)
131
+ f1Buf[i] = f1[i] - k1[i];
132
+ if (toUseLU)
133
+ luSolve(L, U, f1Buf, luBuf, k2, dim);
134
+ else
135
+ solve1d2d(W, f1Buf, k2);
136
+ for (let i = 0; i < dim; ++i)
137
+ k2[i] = k2[i] + k1[i];
138
+ // yOut = y + k2 * h; <--> yTemp
139
+ for (let i = 0; i < dim; ++i)
140
+ yTemp[i] = y[i] + h * k2[i];
141
+ // f2 = f(t + h, yOut);
142
+ f(t + h, yTemp, f2);
143
+ // compute k3: solve the system W * k3 = f2 - e32 * (k2 - f1) - 2.0 * (k1 - f0) + hdT
144
+ for (let i = 0; i < dim; ++i)
145
+ f1Buf[i] = f2[i] - E32 * (k2[i] - f1[i]) - 2.0 * (k1[i] - f0[i]) + hdT[i];
146
+ if (toUseLU)
147
+ luSolve(L, U, f1Buf, luBuf, k3, dim);
148
+ else
149
+ solve1d2d(W, f1Buf, k3);
150
+ // yErr = (k1 - 2.0 * k2 + k3) * h / 6;
151
+ hDivNum = h / 6;
152
+ for (let i = 0; i < dim; ++i)
153
+ yErr[i] = (k1[i] - 2.0 * k2[i] + k3[i]) * hDivNum;
154
+ // estimating error
155
+ errmax = 0;
156
+ for (let i = 0; i < dim; ++i)
157
+ errmax = max(errmax, abs(yErr[i] / yScale[i]));
158
+ errmax /= tolerance;
159
+ // processing the error obtained
160
+ if (errmax > 1) {
161
+ hTemp = SAFETY * h * Math.pow(errmax, PSHRNK);
162
+ h = max(hTemp, REDUCE_COEF * h);
163
+ tNew = t + h;
164
+ if (tNew == t)
165
+ throw new Error(ERROR_MSG.MRT_FAILS);
166
+ }
167
+ else {
168
+ if (errmax > ERR_CONTR)
169
+ hNext = SAFETY * h * Math.pow(errmax, PSGROW);
170
+ else
171
+ hNext = GROW_COEF * h;
172
+ t = t + h;
173
+ for (let i = 0; i < dim; ++i)
174
+ y[i] = yTemp[i];
175
+ break;
176
+ }
177
+ } // while (true)
178
+ // compute lineraly interpolated results and store them in dataframe
179
+ while (timeDataframe < t) {
180
+ const cLeft = (t - timeDataframe) / (t - tPrev);
181
+ const cRight = 1.0 - cLeft;
182
+ tArr[index] = timeDataframe;
183
+ for (let j = 0; j < dim; ++j)
184
+ yArrs[j][index] = cRight * y[j] + cLeft * yPrev[j];
185
+ timeDataframe += hDataframe;
186
+ ++index;
187
+ }
188
+ h = hNext;
189
+ tPrev = t;
190
+ for (let i = 0; i < dim; ++i)
191
+ yPrev[i] = y[i];
192
+ } // while (flag)
193
+ // perform final callback actions
194
+ if (callback)
195
+ callback.onComputationsCompleted();
196
+ // 3. solution at the point t1
197
+ tArr[rowCount - 1] = t1;
198
+ for (let i = 0; i < dim; ++i)
199
+ yArrs[i][rowCount - 1] = y[i];
200
+ // 4. prepare output
201
+ const solution = Array(dim);
202
+ // independent variable
203
+ solution[0] = tArr;
204
+ // functions
205
+ for (let i = 0; i < dim; ++i)
206
+ solution[i + 1] = yArrs[i];
207
+ return solution;
208
+ //return [tArr].concat(yArrs);
209
+ } // MTR
210
+ //# sourceMappingURL=mrt-method.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mrt-method.js","sourceRoot":"","sources":["mrt-method.ts"],"names":[],"mappings":"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"}