@essrt/physics 4.8.0 → 4.9.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.
- package/README.md +4 -0
- package/package.json +40 -38
- package/src/constants/coefficients.d.ts +772 -0
- package/src/constants/generated.d.ts +38 -38
- package/src/model.js +14 -3
- package/types/cardinal/index.d.cts +80 -0
- package/types/cardinal/one-source-structure.d.cts +35 -0
- package/types/chain-cycles/index.d.cts +33 -0
- package/types/climate/l1-orbital.d.cts +32 -0
- package/types/constants/coefficients.d.ts +772 -0
- package/types/constants/generated.d.ts +753 -0
- package/types/constants/index.d.ts +2 -0
- package/types/deltat/cycles.d.cts +72 -0
- package/types/deltat/deep-time.d.cts +122 -0
- package/types/deltat/historical.d.cts +8 -0
- package/types/deltat/recession-history.d.cts +80 -0
- package/types/earth/deep-orbital-history.d.cts +77 -0
- package/types/earth/sidereal-channel-artifact.d.cts +12 -0
- package/types/earth/sidereal-year-channel.d.cts +38 -0
- package/types/earth/year-lengths.d.cts +57 -0
- package/types/eclipse/besselian.d.cts +101 -0
- package/types/eclipse/finders.d.cts +116 -0
- package/types/eclipse/sun-planetary-completion.d.cts +39 -0
- package/types/index.d.ts +77 -0
- package/types/layer0/derive-params.d.ts +36 -0
- package/types/layer0/index.d.ts +49 -0
- package/types/layer1/index.d.ts +10 -0
- package/types/model.d.ts +156 -0
- package/types/moon/apparent.d.cts +78 -0
- package/types/moon/arguments.d.cts +138 -0
- package/types/moon/deep-ecc-channel.d.cts +25 -0
- package/types/moon/deep-modes-artifact.d.cts +140 -0
- package/types/moon/ecc-channel.d.cts +30 -0
- package/types/moon/month-chain.d.cts +79 -0
- package/types/moon/series-extension.d.cts +11 -0
- package/types/moon/series.d.cts +91 -0
- package/types/phase/index.d.cts +38 -0
- package/types/planets/asc-node-integrator.d.cts +30 -0
- package/types/planets/chain-artifact.d.ts +15 -0
- package/types/planets/ecc-channel.d.cts +20 -0
- package/types/planets/fibonacci-laws.d.cts +90 -0
- package/types/planets/geometry.d.cts +60 -0
- package/types/planets/inv-plane-frame.d.cts +36 -0
- package/types/planets/keplerian-chain.d.cts +173 -0
- package/types/planets/model.d.cts +116 -0
- package/types/planets/orbit-chain.d.cts +12 -0
- package/types/planets/orientation.d.cts +67 -0
- package/types/planets/predict.d.cts +88 -0
- package/types/planets/secular-series.d.cts +73 -0
- package/types/sun/longitude-correction.d.cts +41 -0
|
@@ -17,7 +17,7 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
17
17
|
"type": string;
|
|
18
18
|
"angleCorrection": number;
|
|
19
19
|
"startpos": number;
|
|
20
|
-
"perihelionEclipticFraction": number
|
|
20
|
+
"perihelionEclipticFraction": [number, number];
|
|
21
21
|
"ascendingNodeInvPlane": number;
|
|
22
22
|
"inclinationCycleAnchor": number;
|
|
23
23
|
"invPlaneInclinationMean": number;
|
|
@@ -29,7 +29,7 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
29
29
|
"type": string;
|
|
30
30
|
"angleCorrection": number;
|
|
31
31
|
"startpos": number;
|
|
32
|
-
"perihelionEclipticFraction": number
|
|
32
|
+
"perihelionEclipticFraction": [number, number];
|
|
33
33
|
"ascendingNodeInvPlane": number;
|
|
34
34
|
"inclinationCycleAnchor": number;
|
|
35
35
|
"invPlaneInclinationMean": number;
|
|
@@ -41,7 +41,7 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
41
41
|
"type": string;
|
|
42
42
|
"angleCorrection": number;
|
|
43
43
|
"startpos": number;
|
|
44
|
-
"perihelionEclipticFraction": number
|
|
44
|
+
"perihelionEclipticFraction": [number, number];
|
|
45
45
|
"ascendingNodeInvPlane": number;
|
|
46
46
|
"inclinationCycleAnchor": number;
|
|
47
47
|
"invPlaneInclinationMean": number;
|
|
@@ -53,7 +53,7 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
53
53
|
"orbitDistanceOverride": number;
|
|
54
54
|
"angleCorrection": number;
|
|
55
55
|
"startpos": number;
|
|
56
|
-
"perihelionEclipticFraction": number
|
|
56
|
+
"perihelionEclipticFraction": [number, number];
|
|
57
57
|
"ascendingNodeInvPlane": number;
|
|
58
58
|
"inclinationCycleAnchor": number;
|
|
59
59
|
"invPlaneInclinationMean": number;
|
|
@@ -377,7 +377,7 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
377
377
|
"eocFraction": number;
|
|
378
378
|
"startpos": number;
|
|
379
379
|
"angleCorrection": number;
|
|
380
|
-
"perihelionEclipticFraction": number
|
|
380
|
+
"perihelionEclipticFraction": [number, number];
|
|
381
381
|
"type": string;
|
|
382
382
|
"mirrorPair": string;
|
|
383
383
|
"fibonacciD": number;
|
|
@@ -385,16 +385,16 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
385
385
|
"inclinationCycleAnchor": number;
|
|
386
386
|
"antiPhase": boolean;
|
|
387
387
|
"ascendingNodeCyclesIn8H": number;
|
|
388
|
-
"obliquityCycleFraction": number
|
|
389
|
-
"axialPrecessionFraction": number
|
|
390
|
-
"eccentricityCycleFraction": number
|
|
388
|
+
"obliquityCycleFraction": [number, number];
|
|
389
|
+
"axialPrecessionFraction": [number, number];
|
|
390
|
+
"eccentricityCycleFraction": [number, number];
|
|
391
391
|
};
|
|
392
392
|
"venus": {
|
|
393
393
|
"name": string;
|
|
394
394
|
"eocFraction": number;
|
|
395
395
|
"startpos": number;
|
|
396
396
|
"angleCorrection": number;
|
|
397
|
-
"perihelionEclipticFraction": number
|
|
397
|
+
"perihelionEclipticFraction": [number, number];
|
|
398
398
|
"type": string;
|
|
399
399
|
"mirrorPair": string;
|
|
400
400
|
"fibonacciD": number;
|
|
@@ -403,15 +403,15 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
403
403
|
"antiPhase": boolean;
|
|
404
404
|
"ascendingNodeCyclesIn8H": number;
|
|
405
405
|
"obliquityCycleFraction": null;
|
|
406
|
-
"axialPrecessionFraction": number
|
|
407
|
-
"eccentricityCycleFraction": number
|
|
406
|
+
"axialPrecessionFraction": [number, number];
|
|
407
|
+
"eccentricityCycleFraction": [number, number];
|
|
408
408
|
};
|
|
409
409
|
"mars": {
|
|
410
410
|
"name": string;
|
|
411
411
|
"eocFraction": number;
|
|
412
412
|
"startpos": number;
|
|
413
413
|
"angleCorrection": number;
|
|
414
|
-
"perihelionEclipticFraction": number
|
|
414
|
+
"perihelionEclipticFraction": [number, number];
|
|
415
415
|
"type": string;
|
|
416
416
|
"mirrorPair": string;
|
|
417
417
|
"fibonacciD": number;
|
|
@@ -419,16 +419,16 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
419
419
|
"inclinationCycleAnchor": number;
|
|
420
420
|
"antiPhase": boolean;
|
|
421
421
|
"ascendingNodeCyclesIn8H": number;
|
|
422
|
-
"obliquityCycleFraction": number
|
|
423
|
-
"axialPrecessionFraction": number
|
|
424
|
-
"eccentricityCycleFraction": number
|
|
422
|
+
"obliquityCycleFraction": [number, number];
|
|
423
|
+
"axialPrecessionFraction": [number, number];
|
|
424
|
+
"eccentricityCycleFraction": [number, number];
|
|
425
425
|
};
|
|
426
426
|
"jupiter": {
|
|
427
427
|
"name": string;
|
|
428
428
|
"eocFraction": number;
|
|
429
429
|
"startpos": number;
|
|
430
430
|
"angleCorrection": number;
|
|
431
|
-
"perihelionEclipticFraction": number
|
|
431
|
+
"perihelionEclipticFraction": [number, number];
|
|
432
432
|
"type": string;
|
|
433
433
|
"mirrorPair": string;
|
|
434
434
|
"fibonacciD": number;
|
|
@@ -436,16 +436,16 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
436
436
|
"inclinationCycleAnchor": number;
|
|
437
437
|
"antiPhase": boolean;
|
|
438
438
|
"ascendingNodeCyclesIn8H": number;
|
|
439
|
-
"obliquityCycleFraction": number
|
|
440
|
-
"axialPrecessionFraction": number
|
|
441
|
-
"eccentricityCycleFraction": number
|
|
439
|
+
"obliquityCycleFraction": [number, number];
|
|
440
|
+
"axialPrecessionFraction": [number, number];
|
|
441
|
+
"eccentricityCycleFraction": [number, number];
|
|
442
442
|
};
|
|
443
443
|
"saturn": {
|
|
444
444
|
"name": string;
|
|
445
445
|
"eocFraction": number;
|
|
446
446
|
"startpos": number;
|
|
447
447
|
"angleCorrection": number;
|
|
448
|
-
"perihelionEclipticFraction": number
|
|
448
|
+
"perihelionEclipticFraction": [number, number];
|
|
449
449
|
"type": string;
|
|
450
450
|
"mirrorPair": string;
|
|
451
451
|
"fibonacciD": number;
|
|
@@ -453,16 +453,16 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
453
453
|
"inclinationCycleAnchor": number;
|
|
454
454
|
"antiPhase": boolean;
|
|
455
455
|
"ascendingNodeCyclesIn8H": number;
|
|
456
|
-
"obliquityCycleFraction": number
|
|
457
|
-
"axialPrecessionFraction": number
|
|
458
|
-
"eccentricityCycleFraction": number
|
|
456
|
+
"obliquityCycleFraction": [number, number];
|
|
457
|
+
"axialPrecessionFraction": [number, number];
|
|
458
|
+
"eccentricityCycleFraction": [number, number];
|
|
459
459
|
};
|
|
460
460
|
"uranus": {
|
|
461
461
|
"name": string;
|
|
462
462
|
"eocFraction": number;
|
|
463
463
|
"startpos": number;
|
|
464
464
|
"angleCorrection": number;
|
|
465
|
-
"perihelionEclipticFraction": number
|
|
465
|
+
"perihelionEclipticFraction": [number, number];
|
|
466
466
|
"type": string;
|
|
467
467
|
"mirrorPair": string;
|
|
468
468
|
"fibonacciD": number;
|
|
@@ -470,9 +470,9 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
470
470
|
"inclinationCycleAnchor": number;
|
|
471
471
|
"antiPhase": boolean;
|
|
472
472
|
"ascendingNodeCyclesIn8H": number;
|
|
473
|
-
"obliquityCycleFraction": number
|
|
474
|
-
"axialPrecessionFraction": number
|
|
475
|
-
"eccentricityCycleFraction": number
|
|
473
|
+
"obliquityCycleFraction": [number, number];
|
|
474
|
+
"axialPrecessionFraction": [number, number];
|
|
475
|
+
"eccentricityCycleFraction": [number, number];
|
|
476
476
|
"eccentricityCycleApprox": boolean;
|
|
477
477
|
};
|
|
478
478
|
"neptune": {
|
|
@@ -480,7 +480,7 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
480
480
|
"eocFraction": number;
|
|
481
481
|
"startpos": number;
|
|
482
482
|
"angleCorrection": number;
|
|
483
|
-
"perihelionEclipticFraction": number
|
|
483
|
+
"perihelionEclipticFraction": [number, number];
|
|
484
484
|
"type": string;
|
|
485
485
|
"mirrorPair": string;
|
|
486
486
|
"fibonacciD": number;
|
|
@@ -489,8 +489,8 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
489
489
|
"antiPhase": boolean;
|
|
490
490
|
"ascendingNodeCyclesIn8H": number;
|
|
491
491
|
"obliquityCycleFraction": null;
|
|
492
|
-
"axialPrecessionFraction": number
|
|
493
|
-
"eccentricityCycleFraction": number
|
|
492
|
+
"axialPrecessionFraction": [number, number];
|
|
493
|
+
"eccentricityCycleFraction": [number, number];
|
|
494
494
|
"eccentricityCycleApprox": boolean;
|
|
495
495
|
};
|
|
496
496
|
};
|
|
@@ -690,14 +690,14 @@ export declare const REFERENCE_DATA: {
|
|
|
690
690
|
"exeligmosDays": number;
|
|
691
691
|
};
|
|
692
692
|
readonly laplaceLagrangeBounds: {
|
|
693
|
-
"mercury": number
|
|
694
|
-
"venus": number
|
|
695
|
-
"earth": number
|
|
696
|
-
"mars": number
|
|
697
|
-
"jupiter": number
|
|
698
|
-
"saturn": number
|
|
699
|
-
"uranus": number
|
|
700
|
-
"neptune": number
|
|
693
|
+
"mercury": [number, number];
|
|
694
|
+
"venus": [number, number];
|
|
695
|
+
"earth": [number, number];
|
|
696
|
+
"mars": [number, number];
|
|
697
|
+
"jupiter": [number, number];
|
|
698
|
+
"saturn": [number, number];
|
|
699
|
+
"uranus": [number, number];
|
|
700
|
+
"neptune": [number, number];
|
|
701
701
|
};
|
|
702
702
|
readonly moonGrailWilliams2014: {
|
|
703
703
|
"j2E6": number;
|
package/src/model.js
CHANGED
|
@@ -147,12 +147,23 @@ export function assembleModel(C, F, laws = {}, secularSeriesArtifact = /** @type
|
|
|
147
147
|
let latticeAlphaPin = false;
|
|
148
148
|
/** @type {number|null} */
|
|
149
149
|
let alphaL1J2000 = null;
|
|
150
|
+
// Exact-argument memo (mirrors src/script.js + tools/lib/deep-time.js —
|
|
151
|
+
// the round-5 perf campaign): same tMa → bit-identical value; the pin
|
|
152
|
+
// branch bypasses the memo; bounded by wholesale clear.
|
|
153
|
+
/** @type {Map<number, number>} */
|
|
154
|
+
const alphaMemo = new Map();
|
|
150
155
|
/** @param {number} tMa @returns {number} */
|
|
151
156
|
const earthMoiFactorAtAge = (tMa) => {
|
|
152
157
|
if (latticeAlphaPin) return earthMoiFactorJ2000;
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
158
|
+
let v = alphaMemo.get(tMa);
|
|
159
|
+
if (v === undefined) {
|
|
160
|
+
if (alphaL1J2000 === null) alphaL1J2000 = evalClimateL1(2000);
|
|
161
|
+
const L1at = evalClimateL1(2000 - tMa * 1e6);
|
|
162
|
+
v = earthMoiFactorJ2000 - alphaClimateScale * (L1at - alphaL1J2000);
|
|
163
|
+
if (alphaMemo.size >= 8192) alphaMemo.clear();
|
|
164
|
+
alphaMemo.set(tMa, v);
|
|
165
|
+
}
|
|
166
|
+
return v;
|
|
156
167
|
};
|
|
157
168
|
|
|
158
169
|
// ── Layer 0 + deep-time core ──────────────────────────────────────────────
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export type DerivedCoefs = {
|
|
2
|
+
lincoef: number;
|
|
3
|
+
h0: number;
|
|
4
|
+
h1: number;
|
|
5
|
+
};
|
|
6
|
+
export type EccTerm = {
|
|
7
|
+
order: number;
|
|
8
|
+
sin: number;
|
|
9
|
+
cos: number;
|
|
10
|
+
};
|
|
11
|
+
export type JointTerm = {
|
|
12
|
+
order: number;
|
|
13
|
+
div: number;
|
|
14
|
+
sin: number;
|
|
15
|
+
cos: number;
|
|
16
|
+
};
|
|
17
|
+
/** @typedef {{ lincoef: number, h0: number, h1: number }} DerivedCoefs */
|
|
18
|
+
/** @typedef {{ order: number, sin: number, cos: number }} EccTerm */
|
|
19
|
+
/** @typedef {{ order: number, div: number, sin: number, cos: number }} JointTerm */
|
|
20
|
+
/**
|
|
21
|
+
* @param {{
|
|
22
|
+
* isDeepTime: () => boolean,
|
|
23
|
+
* constants: {
|
|
24
|
+
* anchors: Record<string, number>,
|
|
25
|
+
* harmonics: Record<string, Array<[number, number, number]>>,
|
|
26
|
+
* eccTerms: (Record<string, EccTerm[]> | null),
|
|
27
|
+
* jointTerms: ({ terms: JointTerm[] } | null),
|
|
28
|
+
* derived: (DerivedCoefs | null),
|
|
29
|
+
* tropicalHarmonics: Array<[number, number, number]>,
|
|
30
|
+
* balancedYear: number,
|
|
31
|
+
* meanSolarYearDays: number,
|
|
32
|
+
* hJ2000: number,
|
|
33
|
+
* tiltMeanDeg: number,
|
|
34
|
+
* raAngleDeg: number,
|
|
35
|
+
* inclAmplitudeDeg: number,
|
|
36
|
+
* },
|
|
37
|
+
* fns: {
|
|
38
|
+
* cyclesBetween: (yearA: number, yearB: number, divisorN: number) => (number | null),
|
|
39
|
+
* analyticTropicalDays: (year: number) => (number | null),
|
|
40
|
+
* meanHAtAgeMa: (tMa: number) => (number | null),
|
|
41
|
+
* meanYearRealLodDays: (tMa: number) => (number | null),
|
|
42
|
+
* eccentricityAt: (year: number) => number,
|
|
43
|
+
* eccentricityRateAt: (year: number) => number,
|
|
44
|
+
* },
|
|
45
|
+
* }} deps
|
|
46
|
+
*/
|
|
47
|
+
export function createCardinalModel({ isDeepTime, constants, fns }: {
|
|
48
|
+
isDeepTime: () => boolean;
|
|
49
|
+
constants: {
|
|
50
|
+
anchors: Record<string, number>;
|
|
51
|
+
harmonics: Record<string, Array<[number, number, number]>>;
|
|
52
|
+
eccTerms: (Record<string, EccTerm[]> | null);
|
|
53
|
+
jointTerms: ({
|
|
54
|
+
terms: JointTerm[];
|
|
55
|
+
} | null);
|
|
56
|
+
derived: (DerivedCoefs | null);
|
|
57
|
+
tropicalHarmonics: Array<[number, number, number]>;
|
|
58
|
+
balancedYear: number;
|
|
59
|
+
meanSolarYearDays: number;
|
|
60
|
+
hJ2000: number;
|
|
61
|
+
tiltMeanDeg: number;
|
|
62
|
+
raAngleDeg: number;
|
|
63
|
+
inclAmplitudeDeg: number;
|
|
64
|
+
};
|
|
65
|
+
fns: {
|
|
66
|
+
cyclesBetween: (yearA: number, yearB: number, divisorN: number) => (number | null);
|
|
67
|
+
analyticTropicalDays: (year: number) => (number | null);
|
|
68
|
+
meanHAtAgeMa: (tMa: number) => (number | null);
|
|
69
|
+
meanYearRealLodDays: (tMa: number) => (number | null);
|
|
70
|
+
eccentricityAt: (year: number) => number;
|
|
71
|
+
eccentricityRateAt: (year: number) => number;
|
|
72
|
+
};
|
|
73
|
+
}): {
|
|
74
|
+
computeSolsticeJD: (year: number, type?: string) => number;
|
|
75
|
+
computeSolsticeYearLength: (year: number, type?: string) => number;
|
|
76
|
+
computeSolsticeRA: (year: number, type?: string) => number;
|
|
77
|
+
computeTropicalYearLength: (year: number) => number;
|
|
78
|
+
};
|
|
79
|
+
/** @type {Record<string, number>} */
|
|
80
|
+
export const JOINT_LAMBDA: Record<string, number>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {object} opts
|
|
3
|
+
* @param {(year: number) => {e: number, periOfDateDeg: number}} opts.sampleAt
|
|
4
|
+
* the one-source history sampler (createDeepOrbitalHistory build().at,
|
|
5
|
+
* year-keyed by the caller)
|
|
6
|
+
* @param {(year: number) => number} opts.tropicalYearSecondsAtYearFn
|
|
7
|
+
* the movement's mean tropical year of date, SI SECONDS (see header)
|
|
8
|
+
*/
|
|
9
|
+
export function createCardinalStructure({ sampleAt, tropicalYearSecondsAtYearFn }: {
|
|
10
|
+
sampleAt: (year: number) => {
|
|
11
|
+
e: number;
|
|
12
|
+
periOfDateDeg: number;
|
|
13
|
+
};
|
|
14
|
+
tropicalYearSecondsAtYearFn: (year: number) => number;
|
|
15
|
+
}): {
|
|
16
|
+
eocOffsetSeconds: (year: number, type: "VE" | "SS" | "AE" | "WS") => number;
|
|
17
|
+
yearLengthSeconds: (year: number, type: "VE" | "SS" | "AE" | "WS") => number;
|
|
18
|
+
spreadSeconds: (year: number) => {
|
|
19
|
+
VE: number;
|
|
20
|
+
SS: number;
|
|
21
|
+
AE: number;
|
|
22
|
+
WS: number;
|
|
23
|
+
meanSeconds: number;
|
|
24
|
+
};
|
|
25
|
+
anomalisticYearSeconds: (year: number) => number;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Equation of center in degrees, to e⁴ (the computeSunPositionFast family).
|
|
29
|
+
* @param {number} e eccentricity
|
|
30
|
+
* @param {number} meanAnomalyDeg
|
|
31
|
+
* @returns {number} degrees
|
|
32
|
+
*/
|
|
33
|
+
export function equationOfCenterDeg(e: number, meanAnomalyDeg: number): number;
|
|
34
|
+
/** Cardinal longitudes, equinox of date. @type {Record<string, number>} */
|
|
35
|
+
export const CARDINAL_LONGITUDE_DEG: Record<string, number>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export type PeriodSecondsAtAge = (tMa: number) => (number | null);
|
|
2
|
+
/**
|
|
3
|
+
* @typedef {(tMa: number) => (number | null)} PeriodSecondsAtAge
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @param {{
|
|
7
|
+
* ageAnchorYear: number,
|
|
8
|
+
* tropicalYearSecondsAtAge: (tMa: number) => (number | null),
|
|
9
|
+
* tropicalYearJ2000Seconds: number,
|
|
10
|
+
* isDeepTime: () => boolean,
|
|
11
|
+
* gridMinYear?: number,
|
|
12
|
+
* gridMaxYear?: number,
|
|
13
|
+
* gridStepYears?: number,
|
|
14
|
+
* gridAnchorYear?: number,
|
|
15
|
+
* maxCacheEntries?: number,
|
|
16
|
+
* }} deps — ageAnchorYear is the year whose age is 0 in the period
|
|
17
|
+
* functions' t_Ma coordinate (startmodelYear = 2000.5, the certified
|
|
18
|
+
* convention); tropicalYearJ2000Seconds feeds the snapshot branch;
|
|
19
|
+
* isDeepTime is read PER CALL so the engine's runtime toggle works.
|
|
20
|
+
*/
|
|
21
|
+
export function createChainCycleIntegrator({ ageAnchorYear, tropicalYearSecondsAtAge, tropicalYearJ2000Seconds, isDeepTime, gridMinYear, gridMaxYear, gridStepYears, gridAnchorYear, maxCacheEntries, }: {
|
|
22
|
+
ageAnchorYear: number;
|
|
23
|
+
tropicalYearSecondsAtAge: (tMa: number) => (number | null);
|
|
24
|
+
tropicalYearJ2000Seconds: number;
|
|
25
|
+
isDeepTime: () => boolean;
|
|
26
|
+
gridMinYear?: number;
|
|
27
|
+
gridMaxYear?: number;
|
|
28
|
+
gridStepYears?: number;
|
|
29
|
+
gridAnchorYear?: number;
|
|
30
|
+
maxCacheEntries?: number;
|
|
31
|
+
}): {
|
|
32
|
+
cyclesBetween: (periodFnSeconds: PeriodSecondsAtAge, yearA: number, yearB: number) => number | null;
|
|
33
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type ClimateL1Regime = {
|
|
2
|
+
/**
|
|
3
|
+
* - 8H-lattice
|
|
4
|
+
* harmonics (n = cycles per 8H)
|
|
5
|
+
*/
|
|
6
|
+
l1Terms: Array<{
|
|
7
|
+
n: number;
|
|
8
|
+
a: number;
|
|
9
|
+
b: number;
|
|
10
|
+
}>;
|
|
11
|
+
/**
|
|
12
|
+
* - the fit's y_std scale-back
|
|
13
|
+
*/
|
|
14
|
+
yStdDenormalization: number;
|
|
15
|
+
/**
|
|
16
|
+
* - 8H in kyr (the fit's period base)
|
|
17
|
+
*/
|
|
18
|
+
eightHKyr: number;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* @typedef {Object} ClimateL1Regime
|
|
22
|
+
* @property {Array<{n: number, a: number, b: number}>} l1Terms - 8H-lattice
|
|
23
|
+
* harmonics (n = cycles per 8H)
|
|
24
|
+
* @property {number} yStdDenormalization - the fit's y_std scale-back
|
|
25
|
+
* @property {number} eightHKyr - 8H in kyr (the fit's period base)
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* @param {number} year - calendar year
|
|
29
|
+
* @param {ClimateL1Regime} regime
|
|
30
|
+
* @returns {number} L1 orbital δ¹⁸O contribution, ‰
|
|
31
|
+
*/
|
|
32
|
+
export function evalClimateL1OrbitalPermil(year: number, regime: ClimateL1Regime): number;
|