@essrt/physics 26.0.0 → 26.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/chain-cycles/index.cjs +23 -7
- package/src/constants/coefficients.d.ts +3 -3
- package/src/constants/coefficients.js +5 -5
- package/src/constants/generated.js +1 -1
- package/src/earth/deep-orbital-history.cjs +178 -60
- package/src/index.js +12 -2
- package/src/model/context.js +4 -1
- package/src/model/one-source-movement.js +11 -2
- package/src/moon/arguments.cjs +61 -73
- package/types/constants/coefficients.d.ts +3 -3
- package/types/earth/deep-orbital-history.d.cts +20 -1
- package/types/index.d.ts +1 -0
- package/types/model/context.d.ts +10 -0
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@essrt/physics",
|
|
3
|
-
"version": "26.
|
|
3
|
+
"version": "26.1.0",
|
|
4
4
|
"description": "ESSRT (Expanding Solar System Resonance Theory) physics core — pure, injectable-constants, no I/O, no globals, no DOM. The complete model incl. fitted coefficients; every published version immutably ships one recorded model identity.",
|
|
5
5
|
"essrt": {
|
|
6
|
-
"modelVersion": "v27.
|
|
6
|
+
"modelVersion": "v27.2",
|
|
7
7
|
"_note": "The model identity this package version ships (IP-unified-architecture §10: package semver tracks the API axis; the model version + CONSTANTS_HASH/COEFFICIENTS_HASH in src/constants/ carry the scientific identity). The version-pinning gate enforces this pairing against public/input/model-version.json."
|
|
8
8
|
},
|
|
9
9
|
"type": "module",
|
|
@@ -28,7 +28,9 @@
|
|
|
28
28
|
* NUMERICS ARE LOAD-BEARING: fixed 10-yr grid over ±250 kyr, per-cell
|
|
29
29
|
* 3-point Simpson at build, LINEAR interpolation on read; beyond the dense
|
|
30
30
|
* grid a COARSE cumulative table (1-kyr cells, the same per-cell Simpson,
|
|
31
|
-
* anchored at the dense edge
|
|
31
|
+
* anchored at the dense edge; read with a 3-point Simpson over the partial
|
|
32
|
+
* cell, so the count's RATE is continuous — plan 23 follow-up, see the tier
|
|
33
|
+
* note below) grown lazily in 250-kyr chunks in the direction
|
|
32
34
|
* asked for — the owner's playback at 1,000 yr/s past year 250,000 had fallen
|
|
33
35
|
* to 190 ms of JS per frame: the former fallback, an adaptive Simpson of up to
|
|
34
36
|
* 1,024 samples per call cached by exact year pair, re-integrated every one
|
|
@@ -136,9 +138,19 @@ function createChainCycleIntegrator({
|
|
|
136
138
|
// Per chain and per direction, a cumulative table in COARSE_STEP cells that
|
|
137
139
|
// starts at the dense edge with the edge's own value and grows by COARSE_CHUNK
|
|
138
140
|
// years whenever a year beyond its reach is asked for. The cells are built
|
|
139
|
-
// with the same 3-point Simpson as the dense grid; the read is
|
|
140
|
-
//
|
|
141
|
-
//
|
|
141
|
+
// with the same 3-point Simpson as the dense grid; the read is a 3-point
|
|
142
|
+
// Simpson over the partial cell from the cell's start (three integrand
|
|
143
|
+
// evaluations per read), NOT the dense grid's linear interpolation: a
|
|
144
|
+
// linear read makes the count's rate piecewise constant per cell, and the
|
|
145
|
+
// of-date node and perigee are SMALL differences of two large counts
|
|
146
|
+
// (N_drac − N_trop: 13.4 − 13.37 cycles/yr), so each table's per-cell slope
|
|
147
|
+
// step — 1e-6 of its own rate, the month's tidal drift over 1 kyr — landed
|
|
148
|
+
// fully on the difference: a ±0.3-d sawtooth per cell on the node period
|
|
149
|
+
// beyond ±250 kyr (measured on the Node Regression panel, plan 23
|
|
150
|
+
// follow-up). On the dense 10-yr grid the same step is 100× smaller and
|
|
151
|
+
// below every reader, so its linear read — the byte-identical in-window
|
|
152
|
+
// path — stays. The period laws vary on Myr scales at deep time, so 1-kyr
|
|
153
|
+
// cells hold the count to far below a cycle — the old fallback sampled
|
|
142
154
|
// ~1 per kyr too, but re-did the whole span on every call.
|
|
143
155
|
const COARSE_STEP = 1000, COARSE_CHUNK = 250000, COARSE_LIMIT_YEARS = 600e6;
|
|
144
156
|
/** @typedef {{ cum: number[], ok: boolean }} CoarseSide */
|
|
@@ -178,9 +190,13 @@ function createChainCycleIntegrator({
|
|
|
178
190
|
if (distance > COARSE_LIMIT_YEARS) return null;
|
|
179
191
|
if (side.cum.length < Math.ceil(distance / COARSE_STEP) + 1) growCoarse(periodFnSeconds, side, edgeYear, dir, distance);
|
|
180
192
|
if (!side.ok || side.cum.length < Math.ceil(distance / COARSE_STEP) + 1) return null;
|
|
181
|
-
const
|
|
182
|
-
|
|
183
|
-
|
|
193
|
+
const i = Math.floor(distance / COARSE_STEP);
|
|
194
|
+
// the partial cell from its start y0 to y: a 3-point Simpson, signed by (y − y0)
|
|
195
|
+
const y0 = edgeYear + dir * i * COARSE_STEP;
|
|
196
|
+
if (y === y0) return side.cum[i];
|
|
197
|
+
const f0 = integrandAt(periodFnSeconds, y0), fm = integrandAt(periodFnSeconds, (y0 + y) / 2), f1 = integrandAt(periodFnSeconds, y);
|
|
198
|
+
if (f0 === null || fm === null || f1 === null) return null;
|
|
199
|
+
return side.cum[i] + (f0 + 4 * fm + f1) * ((y - y0) / 6);
|
|
184
200
|
}
|
|
185
201
|
/** C(y) anywhere the tables reach: dense inside the grid, coarse beyond.
|
|
186
202
|
* @param {PeriodSecondsAtAge} periodFnSeconds @param {Float64Array} tab @param {number} y @returns {number | null} */
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// The fitted coefficients' shapes for TypeScript consumers (§2g); values live
|
|
3
3
|
// in coefficients.js, emitted VERBATIM from the fit artifacts under data/.
|
|
4
4
|
|
|
5
|
-
export declare const COEFFICIENTS_HASH: "
|
|
5
|
+
export declare const COEFFICIENTS_HASH: "a1e5567e03d1936e";
|
|
6
6
|
|
|
7
7
|
export declare const FITTED_COEFFICIENTS: {
|
|
8
8
|
readonly BALANCE_PRESETS: Array<Array<number | string>>;
|
|
@@ -310,7 +310,7 @@ export declare const FITTED_COEFFICIENTS: {
|
|
|
310
310
|
"ratio": number;
|
|
311
311
|
"label": string;
|
|
312
312
|
};
|
|
313
|
-
"39.
|
|
313
|
+
"39.5561": {
|
|
314
314
|
"period_kyr": number;
|
|
315
315
|
"lr04_post_mpt_amp": number;
|
|
316
316
|
"epica_amp": number;
|
|
@@ -324,7 +324,7 @@ export declare const FITTED_COEFFICIENTS: {
|
|
|
324
324
|
"ratio": number;
|
|
325
325
|
"label": string;
|
|
326
326
|
};
|
|
327
|
-
"40.
|
|
327
|
+
"40.9240": {
|
|
328
328
|
"period_kyr": number;
|
|
329
329
|
"lr04_post_mpt_amp": number;
|
|
330
330
|
"epica_amp": number;
|
|
@@ -20,15 +20,15 @@
|
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
22
|
/** @type {string} */
|
|
23
|
-
export const COEFFICIENTS_HASH = "
|
|
23
|
+
export const COEFFICIENTS_HASH = "a1e5567e03d1936e";
|
|
24
24
|
|
|
25
25
|
/** @type {Readonly<Record<string, unknown>>} */
|
|
26
26
|
export const FITTED_COEFFICIENTS = Object.freeze({
|
|
27
27
|
BALANCE_PRESETS: [["A",99.99472339,34,1,34,0,3,0,5,0,3,1,8,0,34,1,99.8851,7,7,5.5,0,12,1,85,36,36,11,3,54.52,218.64,236.07,287.06,116.26,21.33,354.04],["A",99.99776117,55,1,34,0,3,0,5,0,3,1,8,0,34,1,99.883,7,7,5.1,0,15,1,85,36,36,11,3,54.52,218.64,236.07,287.06,116.26,21.33,354.04],["A",99.99422845,13,1,55,1,3,0,5,0,3,1,21,0,34,0,99.8669,7,7,3.5,0,2,1,85,36,36,12,3,54.52,38.64,236.07,287.06,116.26,21.33,174.04],["A",99.99744637,21,0,34,0,5,0,5,0,3,1,21,0,34,0,99.8636,7,7,5.1,1,9,1,62,36,36,12,3,234.52,218.64,236.07,287.06,116.26,21.33,174.04],["A",99.99403253,21,0,55,0,3,0,5,0,3,1,8,0,34,1,99.863,7,7,3.3,0,9,1,85,36,36,11,3,234.52,218.64,236.07,287.06,116.26,21.33,354.04],["B",99.99533843,21,1,34,1,21,0,8,0,5,1,13,0,34,1,99.3938,7,7,4,0,9,1,35,39,39,12,3,54.52,38.64,236.07,287.06,116.26,21.33,354.04],["B",99.99507239,21,1,55,1,34,0,8,0,5,1,13,0,34,1,99.3775,7,7,2.2,0,9,1,32,39,39,12,3,54.52,38.64,236.07,287.06,116.26,21.33,354.04],["B",99.99738873,55,1,55,1,55,0,8,0,5,1,13,0,34,1,99.3701,7,7,1.9,0,15,1,30,39,39,12,3,54.52,38.64,236.07,287.06,116.26,21.33,354.04],["B",99.99487312,13,0,55,1,55,1,8,0,5,1,13,0,34,1,99.3024,7,7,2.2,0,2,1,30,39,39,12,3,234.52,38.64,56.07,287.06,116.26,21.33,354.04],["B",99.99489704,13,1,55,0,34,1,8,0,5,1,13,0,34,1,99.2544,7,7,2.3,0,2,1,32,39,39,12,3,54.52,218.64,56.07,287.06,116.26,21.33,354.04],["B",99.99530418,21,0,55,0,13,1,8,0,5,1,13,0,34,1,99.2526,7,7,1.9,0,9,1,40,39,39,12,3,234.52,218.64,56.07,287.06,116.26,21.33,354.04],["B",99.99888446,34,1,55,0,21,1,8,0,5,1,13,0,34,1,99.2452,7,7,2.1,0,12,1,35,39,39,12,3,54.52,218.64,56.07,287.06,116.26,21.33,354.04],["A",99.99955832,13,0,34,0,3,1,5,0,3,1,8,0,55,1,99.1096,7,7,5.6,0,2,1,85,36,36,11,3,234.52,218.64,56.07,287.06,116.26,21.33,354.04],["A",99.99648221,21,1,55,1,5,1,5,0,3,1,8,0,55,1,99.1063,7,7,3.1,0,9,1,62,36,36,11,3,54.52,38.64,56.07,287.06,116.26,21.33,354.04],["A",99.99973516,55,0,34,1,5,1,5,0,3,1,8,0,55,1,99.086,7,7,4.9,0,15,1,62,36,36,11,3,234.52,38.64,56.07,287.06,116.26,21.33,354.04]],
|
|
28
|
-
CLIMATE_FORMULA_COEFFS: {"config":{"L1_lines":[{"family":"climatic precession","label":"p+g4","arcsecPerYr":68.20497787152276,"periodKyr":19.001545641452537,"relAmp":0.6717464199951804},{"family":"climatic precession","label":"p+g3","arcsecPerYr":67.65690623723043,"periodKyr":19.15547239857139,"relAmp":0.460782442830978},{"family":"climatic precession","label":"p+g2","arcsecPerYr":57.7403835908232,"periodKyr":22.44529598528639,"relAmp":0.8620464713605362},{"family":"climatic precession","label":"p+g1","arcsecPerYr":55.878226162522175,"periodKyr":23.19329171671584,"relAmp":0.19921489972571554},{"family":"climatic precession","label":"p+g5","arcsecPerYr":54.545319108164605,"periodKyr":23.76005899662999,"relAmp":1},{"family":"obliquity","label":"p+s7","arcsecPerYr":47.52668719388872,"periodKyr":27.268889891543882,"relAmp":0.10427252954025028},{"family":"obliquity","label":"p+s1","arcsecPerYr":44.933851006791144,"periodKyr":28.842397679293658,"relAmp":0.5416339451073867},{"family":"obliquity","label":"p+ζ14","arcsecPerYr":44.68230043443376,"periodKyr":29.004773420333045,"relAmp":0.14236226024182447},{"family":"obliquity","label":"p+ζ9","arcsecPerYr":43.758346063718456,"periodKyr":29.61720715204449,"relAmp":0.1009465170347195},{"family":"obliquity","label":"p+s2","arcsecPerYr":43.476583344095644,"periodKyr":29.809150128997057,"relAmp":0.47895780932341964},{"family":"obliquity","label":"p+s4","arcsecPerYr":32.763640723164436,"periodKyr":39.5560435713027,"relAmp":0.4849220480959469},{"family":"obliquity","label":"p+ζ4","arcsecPerYr":32.21536211501139,"periodKyr":40.229254458577174,"relAmp":0.3238058217329259},{"family":"obliquity","label":"p+s3","arcsecPerYr":31.668510863152665,"periodKyr":40.92393247034353,"relAmp":1},{"family":"obliquity","label":"p+ζ7","arcsecPerYr":31.12051824153533,"periodKyr":41.644550709000725,"relAmp":0.17878079100604266},{"family":"obliquity","label":"p+s6","arcsecPerYr":24.17122814428236,"periodKyr":53.6174658674332,"relAmp":0.16050040214935987},{"family":"eccentricity","label":"g4−g5","arcsecPerYr":13.659658763358156,"periodKyr":94.8779191670953,"relAmp":0.7792461802378098},{"family":"eccentricity","label":"z6−g5","arcsecPerYr":13.381652320125703,"periodKyr":96.84902648762181,"relAmp":0.10995041848327905},{"family":"eccentricity","label":"g3−g5","arcsecPerYr":13.111587129065821,"periodKyr":98.8438689567201,"relAmp":0.5345215810740946},{"family":"eccentricity","label":"z5−g5","arcsecPerYr":12.831040163189634,"periodKyr":101.00506143827943,"relAmp":0.15474467548919818},{"family":"eccentricity","label":"z7−g5","arcsecPerYr":12.567419265426008,"periodKyr":103.12379754572216,"relAmp":0.10461932722318636},{"family":"eccentricity","label":"g4−g1","arcsecPerYr":12.326751709000584,"periodKyr":105.13718703798536,"relAmp":0.15523744965772213},{"family":"eccentricity","label":"g3−g1","arcsecPerYr":11.77868007470825,"periodKyr":110.0293064910417,"relAmp":0.1064846631749067},{"family":"eccentricity","label":"g4−g2","arcsecPerYr":10.464594280699554,"periodKyr":123.8461774280429,"relAmp":0.6717464199951804},{"family":"eccentricity","label":"g3−g2","arcsecPerYr":9.91652264640722,"periodKyr":130.69097366197656,"relAmp":0.460782442830978},{"family":"eccentricity","label":"z5−g2","arcsecPerYr":9.635975680531033,"periodKyr":134.49598078775747,"relAmp":0.13339710146729455},{"family":"eccentricity fundamental","label":"g₂−g₅","periodKyr":405.6256163323513,"arcsecPerYr":3.1950644826586005,"note":"the engine’s 20-Myr mean beat; the long-eccentricity metronome"},{"family":"climate-internal harmonic","label":"(g₂−g₅)/2","periodKyr":202.81280816617564,"note":"carbon-thermostat 2nd harmonic (doc 92 §3), not orbital forcing"},{"family":"climate-internal harmonic","label":"(g₂−g₅)/3","periodKyr":135.20853877745043,"note":"carbon-thermostat 3rd harmonic (doc 92 §3), not orbital forcing"}],"L1_source":"data/l1-physical-lines.json","L2_periods_kyr":{"405-kyr (fundamental)":404.5,"202-kyr (2nd harmonic)":202.25,"135-kyr (3rd harmonic)":134.83},"L3_transitions_ma":{"PETM":56,"EOT":34,"Mi-1":23,"MMCT":14,"iNHG":2.7,"MPT":1},"description":"Climate formula = intercept + L1 + L2 + L3 (in normalized units). De-normalize: y_raw = y_norm * y_std + y_mean + (trend_slope*t_kyr + trend_intercept)."},"regimes":{"lr04-post-mpt":{"label":"LR04 post-MPT","regime":"post-mpt","window_kyr":[0,1000],"n_samples":1001,"intercept":-0.006261479472116254,"L1":[{"period_kyr":19.001545641452537,"label":"climatic precession p+g4","a":0.08243240524922227,"b":-0.13304882592424963},{"period_kyr":19.15547239857139,"label":"climatic precession p+g3","a":0.055467018911117716,"b":0.0361252309677097},{"period_kyr":22.44529598528639,"label":"climatic precession p+g2","a":0.1356814594372895,"b":0.10397401220238245},{"period_kyr":23.19329171671584,"label":"climatic precession p+g1","a":0.004029396320670009,"b":-0.12019564741136535},{"period_kyr":23.76005899662999,"label":"climatic precession p+g5","a":-0.1741892047467476,"b":-0.0894619114957137},{"period_kyr":27.268889891543882,"label":"obliquity p+s7","a":0.0019179579971294047,"b":0.045652411597653014},{"period_kyr":28.842397679293658,"label":"obliquity p+s1","a":-0.0776831184333972,"b":-0.27561881164941293},{"period_kyr":29.004773420333045,"label":"obliquity p+ζ14","a":0.10709251537972231,"b":0.16481016562432482},{"period_kyr":29.61720715204449,"label":"obliquity p+ζ9","a":-0.6221367449208888,"b":0.09703216393216468},{"period_kyr":29.809150128997057,"label":"obliquity p+s2","a":0.3906872073645143,"b":-0.3974044955904187},{"period_kyr":39.5560435713027,"label":"obliquity p+s4","a":0.03286470555244542,"b":0.31826889014339},{"period_kyr":40.229254458577174,"label":"obliquity p+ζ4","a":-1.0063540117559187,"b":0.011829200163799403},{"period_kyr":40.92393247034353,"label":"obliquity p+s3","a":-0.32304958008169904,"b":-1.136404569230472},{"period_kyr":41.644550709000725,"label":"obliquity p+ζ7","a":0.5719436695842656,"b":0.2977185771922728},{"period_kyr":53.6174658674332,"label":"obliquity p+s6","a":0.03013201836874352,"b":0.01772074727072398},{"period_kyr":94.8779191670953,"label":"eccentricity g4−g5","a":-0.021088386357628833,"b":-2.195508899861955},{"period_kyr":96.84902648762181,"label":"eccentricity z6−g5","a":0.5991316818649339,"b":1.1476243724890838},{"period_kyr":98.8438689567201,"label":"eccentricity g3−g5","a":1.186923212842382,"b":0.31207279706718605},{"period_kyr":101.00506143827943,"label":"eccentricity z5−g5","a":-0.2104698841408345,"b":-0.13274643330087674},{"period_kyr":103.12379754572216,"label":"eccentricity z7−g5","a":-0.6785302619449846,"b":0.8192703043142138},{"period_kyr":105.13718703798536,"label":"eccentricity g4−g1","a":0.02944413337667165,"b":0.9936969221330343},{"period_kyr":110.0293064910417,"label":"eccentricity g3−g1","a":-0.9979419969659299,"b":-0.20796003201060137},{"period_kyr":123.8461774280429,"label":"eccentricity g4−g2","a":-0.3841854998790626,"b":-0.14573560890988857},{"period_kyr":130.69097366197656,"label":"eccentricity g3−g2","a":0.9854674214965893,"b":0.3880259413113173},{"period_kyr":134.49598078775747,"label":"eccentricity z5−g2","a":-0.2514289239233489,"b":-0.06535702517105219},{"period_kyr":405.6256163323513,"label":"eccentricity fundamental g₂−g₅","a":-0.07967976063217527,"b":-0.0475325959700533},{"period_kyr":202.81280816617564,"label":"climate-internal harmonic (g₂−g₅)/2","a":-0.024237037439603676,"b":0.17942472816716207},{"period_kyr":135.20853877745043,"label":"climate-internal harmonic (g₂−g₅)/3","a":-0.6840182828195369,"b":0.18329165821989277}],"L2":[],"L3":[],"denormalization":{"y_mean":1.5012965895430689e-15,"y_std":0.43131092949760913,"trend_slope":-0.00008678094360729054,"trend_intercept":4.192006855420027},"r2":{"l1_only":0.7804378878452816,"l1_l2":0.7804378878452816,"l1_l2_l3":0.7804378878452816,"delta_l2":0,"delta_l3":0}},"lr04-inhg-mpt":{"label":"LR04 inhg-MPT","regime":"inhg-mpt","window_kyr":[1000,2700],"n_samples":1701,"intercept":0.0005407849101125603,"L1":[{"period_kyr":19.001545641452537,"label":"climatic precession p+g4","a":0.03503877506864678,"b":-0.09856246238430366},{"period_kyr":19.15547239857139,"label":"climatic precession p+g3","a":-0.005005693307662373,"b":0.07295430743550124},{"period_kyr":22.44529598528639,"label":"climatic precession p+g2","a":0.11897109293971353,"b":-0.061556377105412174},{"period_kyr":23.19329171671584,"label":"climatic precession p+g1","a":-0.022416871997079618,"b":-0.07917844873891108},{"period_kyr":23.76005899662999,"label":"climatic precession p+g5","a":-0.12822120342945703,"b":0.01172670259894143},{"period_kyr":27.268889891543882,"label":"obliquity p+s7","a":0.019252355487766215,"b":-0.006808609813554689},{"period_kyr":28.842397679293658,"label":"obliquity p+s1","a":-0.10404810022894623,"b":-0.13081433820526067},{"period_kyr":29.004773420333045,"label":"obliquity p+ζ14","a":-0.004623963342169635,"b":-0.15757830994963606},{"period_kyr":29.61720715204449,"label":"obliquity p+ζ9","a":0.19982877327336845,"b":-0.03031495540202861},{"period_kyr":29.809150128997057,"label":"obliquity p+s2","a":0.12354646397869687,"b":0.10862284559119528},{"period_kyr":39.5560435713027,"label":"obliquity p+s4","a":0.11668229925473106,"b":-0.2691641896579636},{"period_kyr":40.229254458577174,"label":"obliquity p+ζ4","a":0.00453142560761946,"b":-0.2056884780191695},{"period_kyr":40.92393247034353,"label":"obliquity p+s3","a":-0.5826353220778854,"b":-0.5193032125987076},{"period_kyr":41.644550709000725,"label":"obliquity p+ζ7","a":0.22531232553500583,"b":0.017688684764672058},{"period_kyr":53.6174658674332,"label":"obliquity p+s6","a":-0.2293234422961013,"b":0.1088135079622009},{"period_kyr":94.8779191670953,"label":"eccentricity g4−g5","a":0.1609120605368916,"b":0.03757149633919268},{"period_kyr":96.84902648762181,"label":"eccentricity z6−g5","a":-0.053464905746749336,"b":1.3428130379574261},{"period_kyr":98.8438689567201,"label":"eccentricity g3−g5","a":-0.953206115882617,"b":1.198468176780739},{"period_kyr":101.00506143827943,"label":"eccentricity z5−g5","a":0.0697660042105355,"b":0.18007778017482998},{"period_kyr":103.12379754572216,"label":"eccentricity z7−g5","a":1.2361966199819392,"b":0.6242750704518865},{"period_kyr":105.13718703798536,"label":"eccentricity g4−g1","a":0.278251208675922,"b":0.7838878059317373},{"period_kyr":110.0293064910417,"label":"eccentricity g3−g1","a":0.1181957404284075,"b":-0.22218992068223625},{"period_kyr":123.8461774280429,"label":"eccentricity g4−g2","a":-0.11106886118721995,"b":-0.0021299158908131555},{"period_kyr":130.69097366197656,"label":"eccentricity g3−g2","a":0.04948019917501678,"b":-0.06668089878492656},{"period_kyr":134.49598078775747,"label":"eccentricity z5−g2","a":0.44223319062230126,"b":-0.31488032653078424},{"period_kyr":405.6256163323513,"label":"eccentricity fundamental g₂−g₅","a":0.13859459137445662,"b":0.08861345077557807},{"period_kyr":202.81280816617564,"label":"climate-internal harmonic (g₂−g₅)/2","a":-0.15224783180023477,"b":0.08152674915375335},{"period_kyr":135.20853877745043,"label":"climate-internal harmonic (g₂−g₅)/3","a":-0.2435177242679818,"b":0.5907913888353428}],"L2":[],"L3":[],"denormalization":{"y_mean":2.117321276827753e-15,"y_std":0.2533430989053228,"trend_slope":-0.00028446235786389366,"trend_intercept":4.264486402612575},"r2":{"l1_only":0.6089630016266958,"l1_l2":0.6089630016266958,"l1_l2_l3":0.6089630016266958,"delta_l2":0,"delta_l3":0}},"lr04-pre-inhg":{"label":"LR04 pre-iNHG","regime":"pre-inhg","window_kyr":[2700,5320],"n_samples":2621,"intercept":-0.019780930727055078,"L1":[{"period_kyr":19.001545641452537,"label":"climatic precession p+g4","a":-0.035805318768695416,"b":-0.004163434196977289},{"period_kyr":19.15547239857139,"label":"climatic precession p+g3","a":0.029482033603654978,"b":-0.019598473935002414},{"period_kyr":22.44529598528639,"label":"climatic precession p+g2","a":-0.02793575500828427,"b":-0.056285852892666854},{"period_kyr":23.19329171671584,"label":"climatic precession p+g1","a":-0.03339282100161001,"b":-0.010058177000955015},{"period_kyr":23.76005899662999,"label":"climatic precession p+g5","a":0.04866527102370943,"b":-0.007002487725596251},{"period_kyr":27.268889891543882,"label":"obliquity p+s7","a":0.01494876216897791,"b":-0.00600395082493102},{"period_kyr":28.842397679293658,"label":"obliquity p+s1","a":0.03662170896068062,"b":-0.03183419814670585},{"period_kyr":29.004773420333045,"label":"obliquity p+ζ14","a":-0.021943012656484573,"b":-0.014608030305763298},{"period_kyr":29.61720715204449,"label":"obliquity p+ζ9","a":0.022948381776825955,"b":-0.014611274220878268},{"period_kyr":29.809150128997057,"label":"obliquity p+s2","a":-0.03508296021275506,"b":0.07685077337256473},{"period_kyr":39.5560435713027,"label":"obliquity p+s4","a":-0.03573136549654231,"b":-0.16083844295608896},{"period_kyr":40.229254458577174,"label":"obliquity p+ζ4","a":-0.015687032747370627,"b":-0.10021667133442705},{"period_kyr":40.92393247034353,"label":"obliquity p+s3","a":-0.38903903447828914,"b":-0.3594149228478518},{"period_kyr":41.644550709000725,"label":"obliquity p+ζ7","a":0.06662831466813979,"b":0.12304542048600829},{"period_kyr":53.6174658674332,"label":"obliquity p+s6","a":-0.18571987618832642,"b":0.20076484098397995},{"period_kyr":94.8779191670953,"label":"eccentricity g4−g5","a":0.20725718824624959,"b":-0.13573905739305128},{"period_kyr":96.84902648762181,"label":"eccentricity z6−g5","a":-1.016197228050766,"b":-0.3791586630016193},{"period_kyr":98.8438689567201,"label":"eccentricity g3−g5","a":0.588952118966851,"b":2.0260550833505913},{"period_kyr":101.00506143827943,"label":"eccentricity z5−g5","a":0.67416919090064,"b":-2.4475589224592733},{"period_kyr":103.12379754572216,"label":"eccentricity z7−g5","a":-1.9393057263933409,"b":0.8411568643788081},{"period_kyr":105.13718703798536,"label":"eccentricity g4−g1","a":0.5703002446288725,"b":0.6882960432008728},{"period_kyr":110.0293064910417,"label":"eccentricity g3−g1","a":0.16670952357483337,"b":-0.1573271009310834},{"period_kyr":123.8461774280429,"label":"eccentricity g4−g2","a":-0.02856253535420218,"b":0.032546781500317146},{"period_kyr":130.69097366197656,"label":"eccentricity g3−g2","a":0.037215669189511996,"b":-0.33646151609290054},{"period_kyr":134.49598078775747,"label":"eccentricity z5−g2","a":-0.1658706246879772,"b":1.539988216595495},{"period_kyr":405.6256163323513,"label":"eccentricity fundamental g₂−g₅","a":0.2741625959109228,"b":0.12324647540286211},{"period_kyr":202.81280816617564,"label":"climate-internal harmonic (g₂−g₅)/2","a":0.02857267433363002,"b":-0.06634102256884705},{"period_kyr":135.20853877745043,"label":"climate-internal harmonic (g₂−g₅)/3","a":-1.1531669594196328,"b":-0.6431671723141338}],"L2":[],"L3":[],"denormalization":{"y_mean":2.2229875746786803e-16,"y_std":0.1419188719967453,"trend_slope":-0.0001616384823512257,"trend_intercept":3.7150997304817532},"r2":{"l1_only":0.45467379777332084,"l1_l2":0.45467379777332084,"l1_l2_l3":0.45467379777332084,"delta_l2":0,"delta_l3":0}},"lr04-full":{"label":"LR04 full","regime":"lr04-full","window_kyr":[0,5320],"n_samples":5321,"intercept":-0.0017589880483601524,"L1":[{"period_kyr":19.001545641452537,"label":"climatic precession p+g4","a":0.03065294954958657,"b":-0.05942340186614521},{"period_kyr":19.15547239857139,"label":"climatic precession p+g3","a":0.007132695862213462,"b":0.008893436015245587},{"period_kyr":22.44529598528639,"label":"climatic precession p+g2","a":0.08099490602121032,"b":-0.015103919935149979},{"period_kyr":23.19329171671584,"label":"climatic precession p+g1","a":-0.002268964818697816,"b":-0.06635825644407431},{"period_kyr":23.76005899662999,"label":"climatic precession p+g5","a":-0.07546505691235277,"b":-0.03155946054640326},{"period_kyr":27.268889891543882,"label":"obliquity p+s7","a":0.014043408537645977,"b":0.006715083715687971},{"period_kyr":28.842397679293658,"label":"obliquity p+s1","a":0.01816121699590161,"b":-0.057687903639246606},{"period_kyr":29.004773420333045,"label":"obliquity p+ζ14","a":-0.016937378888613464,"b":-0.04998298185931903},{"period_kyr":29.61720715204449,"label":"obliquity p+ζ9","a":0.0022086271646274205,"b":-0.01446306003921708},{"period_kyr":29.809150128997057,"label":"obliquity p+s2","a":-0.025581978214192315,"b":0.0309901479615117},{"period_kyr":39.5560435713027,"label":"obliquity p+s4","a":-0.01912379263568336,"b":-0.16671053844571732},{"period_kyr":40.229254458577174,"label":"obliquity p+ζ4","a":-0.04630363429779309,"b":-0.10917338902200727},{"period_kyr":40.92393247034353,"label":"obliquity p+s3","a":-0.41712274283288603,"b":-0.3046404579465512},{"period_kyr":41.644550709000725,"label":"obliquity p+ζ7","a":0.13911951669837083,"b":0.07911630465552824},{"period_kyr":53.6174658674332,"label":"obliquity p+s6","a":-0.11986934492884664,"b":0.10752585565025971},{"period_kyr":94.8779191670953,"label":"eccentricity g4−g5","a":-0.07815055836386586,"b":-0.26561277912623493},{"period_kyr":96.84902648762181,"label":"eccentricity z6−g5","a":-0.07259616119062533,"b":-0.030964091224476492},{"period_kyr":98.8438689567201,"label":"eccentricity g3−g5","a":-0.17395488558053873,"b":0.000791562409108805},{"period_kyr":101.00506143827943,"label":"eccentricity z5−g5","a":-0.09381475188544089,"b":-0.030909749477917838},{"period_kyr":103.12379754572216,"label":"eccentricity z7−g5","a":-0.08438264932950987,"b":0.07861972783593148},{"period_kyr":105.13718703798536,"label":"eccentricity g4−g1","a":-0.10328452012029149,"b":-0.005340280670694572},{"period_kyr":110.0293064910417,"label":"eccentricity g3−g1","a":0.05724261959550306,"b":0.0032869687306770756},{"period_kyr":123.8461774280429,"label":"eccentricity g4−g2","a":-0.07899912903992748,"b":0.12103605418237409},{"period_kyr":130.69097366197656,"label":"eccentricity g3−g2","a":0.07725377061255671,"b":-0.042569198289196725},{"period_kyr":134.49598078775747,"label":"eccentricity z5−g2","a":0.05454951133541687,"b":0.12003087432548318},{"period_kyr":405.6256163323513,"label":"eccentricity fundamental g₂−g₅","a":0.09355861032874926,"b":0.04910094786175068},{"period_kyr":202.81280816617564,"label":"climate-internal harmonic (g₂−g₅)/2","a":-0.015314835256918,"b":0.06009591046934088},{"period_kyr":135.20853877745043,"label":"climate-internal harmonic (g₂−g₅)/3","a":-0.1348709644191516,"b":0.038488007580443406}],"L2":[],"L3":[{"label":"iNHG","t_kyr":2700,"beta":-0.18331470559226293},{"label":"MPT","t_kyr":1000,"beta":0.07582828689178801}],"denormalization":{"y_mean":8.786640107689267e-16,"y_std":0.26728652336026737,"trend_slope":-0.0002890388734746666,"trend_intercept":4.253595893576046},"r2":{"l1_only":0.3253727364799045,"l1_l2":0.3253727364799045,"l1_l2_l3":0.3329006744474764,"delta_l2":0,"delta_l3":0.007527937967571896}},"cenogrid-d18o":{"label":"CENOGRID δ¹⁸O","regime":"cenogrid","window_kyr":[0,67000],"n_samples":13401,"intercept":-0.000017149874728015547,"L1":[{"period_kyr":19.001545641452537,"label":"climatic precession p+g4","a":0.004113360713096271,"b":0.000612283902668832},{"period_kyr":19.15547239857139,"label":"climatic precession p+g3","a":-0.0012149371734561723,"b":-0.0009668646537135993},{"period_kyr":22.44529598528639,"label":"climatic precession p+g2","a":0.0012714780768614783,"b":-0.0002881147551297321},{"period_kyr":23.19329171671584,"label":"climatic precession p+g1","a":-0.0006778613450571236,"b":-0.005621596479389052},{"period_kyr":23.76005899662999,"label":"climatic precession p+g5","a":-0.001515503629558838,"b":-0.002068925655515646},{"period_kyr":27.268889891543882,"label":"obliquity p+s7","a":-0.002565411547005455,"b":-0.005348100347444994},{"period_kyr":28.842397679293658,"label":"obliquity p+s1","a":0.00205522005878024,"b":-0.00495817115741807},{"period_kyr":29.004773420333045,"label":"obliquity p+ζ14","a":0.00016456274134544775,"b":-0.004296237979604353},{"period_kyr":29.61720715204449,"label":"obliquity p+ζ9","a":-0.0006244500892602428,"b":-0.001165673604421498},{"period_kyr":29.809150128997057,"label":"obliquity p+s2","a":-0.0010393464818332387,"b":0.005147306929711322},{"period_kyr":39.5560435713027,"label":"obliquity p+s4","a":-0.0018512861037702439,"b":-0.009394782199841967},{"period_kyr":40.229254458577174,"label":"obliquity p+ζ4","a":-0.011344743890066494,"b":0.002808220849832007},{"period_kyr":40.92393247034353,"label":"obliquity p+s3","a":-0.009436854682939293,"b":-0.01468445459856143},{"period_kyr":41.644550709000725,"label":"obliquity p+ζ7","a":0.0042241945335908405,"b":0.0017810339313177066},{"period_kyr":53.6174658674332,"label":"obliquity p+s6","a":-0.0025897836013760184,"b":0.011152367274696552},{"period_kyr":94.8779191670953,"label":"eccentricity g4−g5","a":0.008877256794435202,"b":-0.030348499725273995},{"period_kyr":96.84902648762181,"label":"eccentricity z6−g5","a":0.002058215396660861,"b":-0.0102380290686626},{"period_kyr":98.8438689567201,"label":"eccentricity g3−g5","a":-0.013651372027095434,"b":0.026204095651746275},{"period_kyr":101.00506143827943,"label":"eccentricity z5−g5","a":0.0016749310912643912,"b":0.0032330230939125173},{"period_kyr":103.12379754572216,"label":"eccentricity z7−g5","a":-0.0045207256593481245,"b":0.007893320582307411},{"period_kyr":105.13718703798536,"label":"eccentricity g4−g1","a":-0.00903932084953775,"b":-0.003374507433399841},{"period_kyr":110.0293064910417,"label":"eccentricity g3−g1","a":0.012542290542401285,"b":0.007438159113483984},{"period_kyr":123.8461774280429,"label":"eccentricity g4−g2","a":-0.008945876001624905,"b":0.024560145567884547},{"period_kyr":130.69097366197656,"label":"eccentricity g3−g2","a":0.007764302786340008,"b":-0.01256656435499126},{"period_kyr":134.49598078775747,"label":"eccentricity z5−g2","a":-0.005043269259928858,"b":-0.010094256207375025},{"period_kyr":405.6256163323513,"label":"eccentricity fundamental g₂−g₅","a":0.04455260862673471,"b":-0.04012837519912692},{"period_kyr":202.81280816617564,"label":"climate-internal harmonic (g₂−g₅)/2","a":0.003128157801043029,"b":0.005403795833748374},{"period_kyr":135.20853877745043,"label":"climate-internal harmonic (g₂−g₅)/3","a":-0.004077914496712917,"b":0.005390561847374758}],"L2":[],"L3":[{"label":"PETM","t_kyr":56000,"beta":1.9399569971013908},{"label":"EOT","t_kyr":34000,"beta":-1.6915666401480203},{"label":"Mi-1","t_kyr":23000,"beta":1.3791513990309312},{"label":"MMCT","t_kyr":14000,"beta":-0.572671926373438},{"label":"iNHG","t_kyr":2700,"beta":-0.9437051105483468},{"label":"MPT","t_kyr":1000,"beta":0.9558155283721813}],"denormalization":{"y_mean":3.1388799311243884e-16,"y_std":0.5138368170014185,"trend_slope":-0.000060475169948230774,"trend_intercept":3.5886100819307556},"r2":{"l1_only":0.003982477644316917,"l1_l2":0.003982477644316917,"l1_l2_l3":0.6165986669115189,"delta_l2":0,"delta_l3":0.612616189267202}},"cenogrid-d13c":{"label":"CENOGRID δ¹³C","regime":"cenogrid","window_kyr":[0,67000],"n_samples":13401,"intercept":0.000029167142837877794,"L1":[{"period_kyr":19.001545641452537,"label":"climatic precession p+g4","a":0.0009091211263757299,"b":-0.00022116955382656643},{"period_kyr":19.15547239857139,"label":"climatic precession p+g3","a":-0.0036110914239109258,"b":-0.0013639914286166707},{"period_kyr":22.44529598528639,"label":"climatic precession p+g2","a":-0.003593719675301214,"b":-0.0005757686344194319},{"period_kyr":23.19329171671584,"label":"climatic precession p+g1","a":0.0017764098127505648,"b":0.0002860904810720027},{"period_kyr":23.76005899662999,"label":"climatic precession p+g5","a":0.0032087474575965857,"b":-0.005816006950035958},{"period_kyr":27.268889891543882,"label":"obliquity p+s7","a":-0.003452658156298422,"b":-0.0038120306386585506},{"period_kyr":28.842397679293658,"label":"obliquity p+s1","a":-0.002875785120574504,"b":-0.0007160123280881073},{"period_kyr":29.004773420333045,"label":"obliquity p+ζ14","a":-0.0022073252427677035,"b":-0.006006795458916419},{"period_kyr":29.61720715204449,"label":"obliquity p+ζ9","a":-0.004491336700841414,"b":-0.0021993238453384637},{"period_kyr":29.809150128997057,"label":"obliquity p+s2","a":-0.0029297335798159473,"b":0.0044208048966603505},{"period_kyr":39.5560435713027,"label":"obliquity p+s4","a":0.004978066935301678,"b":0.007304975606576264},{"period_kyr":40.229254458577174,"label":"obliquity p+ζ4","a":-0.005517829851657612,"b":-0.0072555999128625995},{"period_kyr":40.92393247034353,"label":"obliquity p+s3","a":0.016532384832742213,"b":0.005779168971437518},{"period_kyr":41.644550709000725,"label":"obliquity p+ζ7","a":-0.0020334137893681346,"b":-0.0032463318268662984},{"period_kyr":53.6174658674332,"label":"obliquity p+s6","a":0.008915520385862822,"b":-0.004054842658865113},{"period_kyr":94.8779191670953,"label":"eccentricity g4−g5","a":0.009282350179674114,"b":-0.003845643885828626},{"period_kyr":96.84902648762181,"label":"eccentricity z6−g5","a":0.003148705803677386,"b":0.0010190486063635078},{"period_kyr":98.8438689567201,"label":"eccentricity g3−g5","a":-0.006504944756519977,"b":0.02207049906695835},{"period_kyr":101.00506143827943,"label":"eccentricity z5−g5","a":0.005252439907282622,"b":0.010723726397858617},{"period_kyr":103.12379754572216,"label":"eccentricity z7−g5","a":0.015463024799094347,"b":-0.007890675546466504},{"period_kyr":105.13718703798536,"label":"eccentricity g4−g1","a":-0.006704077743705797,"b":-0.004724121909536135},{"period_kyr":110.0293064910417,"label":"eccentricity g3−g1","a":0.015135186028105955,"b":0.004363573345518807},{"period_kyr":123.8461774280429,"label":"eccentricity g4−g2","a":0.0004352946111127517,"b":0.007735862744259145},{"period_kyr":130.69097366197656,"label":"eccentricity g3−g2","a":0.003434785257031687,"b":-0.015481600223384788},{"period_kyr":134.49598078775747,"label":"eccentricity z5−g2","a":-0.002674848114343516,"b":-0.019656539178381276},{"period_kyr":405.6256163323513,"label":"eccentricity fundamental g₂−g₅","a":0.04090552798768797,"b":-0.08954033006650247},{"period_kyr":202.81280816617564,"label":"climate-internal harmonic (g₂−g₅)/2","a":0.006897983129686607,"b":-0.0012436409136020801},{"period_kyr":135.20853877745043,"label":"climate-internal harmonic (g₂−g₅)/3","a":0.0010627051676048676,"b":-0.007315104756639584}],"L2":[],"L3":[{"label":"PETM","t_kyr":56000,"beta":1.2940570130685973},{"label":"EOT","t_kyr":34000,"beta":-0.6519384387930998},{"label":"Mi-1","t_kyr":23000,"beta":-0.7981218317897845},{"label":"MMCT","t_kyr":14000,"beta":0.8751969732966116},{"label":"iNHG","t_kyr":2700,"beta":1.3323529427123229},{"label":"MPT","t_kyr":1000,"beta":-1.3351822986622328}],"denormalization":{"y_mean":-1.6966918546618317e-16,"y_std":0.5116419176812778,"trend_slope":0.000014091551862757799,"trend_intercept":0.17563680335949733},"r2":{"l1_only":0.006340718980238025,"l1_l2":0.006340718980238025,"l1_l2_l3":0.3485557923662824,"delta_l2":0,"delta_l3":0.3422150733860444}},"epica-co2":{"label":"EPICA CO₂","regime":"epica-co2","window_kyr":[0,800],"n_samples":801,"intercept":0.04772254604975318,"L1":[{"period_kyr":19.001545641452537,"label":"climatic precession p+g4","a":-0.057570776887117814,"b":-0.09305753505681291},{"period_kyr":19.15547239857139,"label":"climatic precession p+g3","a":0.09859328006243295,"b":-0.029102256953414563},{"period_kyr":22.44529598528639,"label":"climatic precession p+g2","a":-0.007484720088752561,"b":-0.07760955237320875},{"period_kyr":23.19329171671584,"label":"climatic precession p+g1","a":-0.0909416836692997,"b":0.12567965726306307},{"period_kyr":23.76005899662999,"label":"climatic precession p+g5","a":0.11298232171200909,"b":0.046583545925097766},{"period_kyr":27.268889891543882,"label":"obliquity p+s7","a":0.0008630260369831555,"b":-0.08271274340575904},{"period_kyr":28.842397679293658,"label":"obliquity p+s1","a":-0.13415104828436483,"b":-0.3066079534826644},{"period_kyr":29.004773420333045,"label":"obliquity p+ζ14","a":0.30261366057060307,"b":0.37231443283049376},{"period_kyr":29.61720715204449,"label":"obliquity p+ζ9","a":-0.10401218357234651,"b":0.06069068218917706},{"period_kyr":29.809150128997057,"label":"obliquity p+s2","a":0.07675437255974785,"b":0.08743704031465308},{"period_kyr":39.5560435713027,"label":"obliquity p+s4","a":0.25267178254331357,"b":-0.21263516454336073},{"period_kyr":40.229254458577174,"label":"obliquity p+ζ4","a":0.19849521917299795,"b":0.3201965078162932},{"period_kyr":40.92393247034353,"label":"obliquity p+s3","a":0.3341068581562226,"b":0.07642828266009302},{"period_kyr":41.644550709000725,"label":"obliquity p+ζ7","a":-0.18113992323652417,"b":0.19410852702442669},{"period_kyr":53.6174658674332,"label":"obliquity p+s6","a":-0.1024218182699044,"b":0.0723717802476003},{"period_kyr":94.8779191670953,"label":"eccentricity g4−g5","a":-0.621846077440066,"b":1.1004444096667692},{"period_kyr":96.84902648762181,"label":"eccentricity z6−g5","a":-0.23620585040294723,"b":-0.017168309605683746},{"period_kyr":98.8438689567201,"label":"eccentricity g3−g5","a":-0.27726306323229327,"b":-0.3987499029607976},{"period_kyr":101.00506143827943,"label":"eccentricity z5−g5","a":-0.21762767555019835,"b":-0.3914548769902655},{"period_kyr":103.12379754572216,"label":"eccentricity z7−g5","a":0.0028804917250010997,"b":-0.3340840253957438},{"period_kyr":105.13718703798536,"label":"eccentricity g4−g1","a":0.24680293909130355,"b":-0.3624401368740964},{"period_kyr":110.0293064910417,"label":"eccentricity g3−g1","a":0.5954751281788466,"b":-0.628274638605115},{"period_kyr":123.8461774280429,"label":"eccentricity g4−g2","a":0.31357248585780995,"b":-0.8333120447957345},{"period_kyr":130.69097366197656,"label":"eccentricity g3−g2","a":0.2126406564260409,"b":-0.3953416358958512},{"period_kyr":134.49598078775747,"label":"eccentricity z5−g2","a":0.32440577796298,"b":0.15122266440140847},{"period_kyr":405.6256163323513,"label":"eccentricity fundamental g₂−g₅","a":0.2715566850177307,"b":0.10051230972588084},{"period_kyr":202.81280816617564,"label":"climate-internal harmonic (g₂−g₅)/2","a":0.2223335990505698,"b":-0.14842020528136166},{"period_kyr":135.20853877745043,"label":"climate-internal harmonic (g₂−g₅)/3","a":0.3958866159294755,"b":0.287857524742149}],"L2":[],"L3":[],"denormalization":{"y_mean":2.980553797944989e-14,"y_std":25.51737494167102,"trend_slope":-0.006455378442643299,"trend_intercept":227.89326737247322},"r2":{"l1_only":0.7238243015482515,"l1_l2":0.7238243015482515,"l1_l2_l3":0.7238243015482515,"delta_l2":0,"delta_l3":0},"carbon_amplification_ratios":{"19.0015":{"period_kyr":19.001545641452537,"lr04_post_mpt_amp":0.15651546733468003,"epica_amp":0.1094262271223689,"ratio":0.6991400210202912,"label":"climatic precession p+g4"},"19.1555":{"period_kyr":19.15547239857139,"lr04_post_mpt_amp":0.0661938252358682,"epica_amp":0.10279871707979582,"ratio":1.5529955658778376,"label":"climatic precession p+g3"},"22.4453":{"period_kyr":22.44529598528639,"lr04_post_mpt_amp":0.1709387423859612,"epica_amp":0.07796963289882035,"ratio":0.4561261643236695,"label":"climatic precession p+g2"},"23.1933":{"period_kyr":23.19329171671584,"lr04_post_mpt_amp":0.12026316847375294,"epica_amp":0.1551314477414814,"ratio":1.2899331500262141,"label":"climatic precession p+g1"},"23.7601":{"period_kyr":23.76005899662999,"lr04_post_mpt_amp":0.19581959212185912,"epica_amp":0.12220896763491464,"ratio":0.6240895832265018,"label":"climatic precession p+g5"},"27.2689":{"period_kyr":27.268889891543882,"lr04_post_mpt_amp":0.045692682647884404,"epica_amp":0.08271724569669524,"ratio":1.8102952355441335,"label":"obliquity p+s7"},"28.8424":{"period_kyr":28.842397679293658,"lr04_post_mpt_amp":0.2863571131028035,"epica_amp":0.3346713924054784,"ratio":1.168720374287786,"label":"obliquity p+s1"},"29.0048":{"period_kyr":29.004773420333045,"lr04_post_mpt_amp":0.19654820666562553,"epica_amp":0.4797843937205882,"ratio":2.4410520037804955,"label":"obliquity p+ζ14"},"29.6172":{"period_kyr":29.61720715204449,"lr04_post_mpt_amp":0.629658137577938,"epica_amp":0.12042380676625035,"ratio":0.19125268074748658,"label":"obliquity p+ζ9"},"29.8092":{"period_kyr":29.809150128997057,"lr04_post_mpt_amp":0.5572852295851364,"epica_amp":0.11634633524966242,"ratio":0.2087734055615917,"label":"obliquity p+s2"},"39.5560":{"period_kyr":39.5560435713027,"lr04_post_mpt_amp":0.3199612090615895,"epica_amp":0.33023740383850775,"ratio":1.0321170019548844,"label":"obliquity p+s4"},"40.2293":{"period_kyr":40.229254458577174,"lr04_post_mpt_amp":1.006423532591397,"epica_amp":0.37673087961074553,"ratio":0.3743263818968116,"label":"obliquity p+ζ4"},"40.9239":{"period_kyr":40.92393247034353,"lr04_post_mpt_amp":1.181429801621263,"epica_amp":0.34273703484945034,"ratio":0.2901035968274341,"label":"obliquity p+s3"},"41.6446":{"period_kyr":41.644550709000725,"lr04_post_mpt_amp":0.6447913712069252,"epica_amp":0.2654991375762386,"ratio":0.41175975584052155,"label":"obliquity p+ζ7"},"53.6175":{"period_kyr":53.6174658674332,"lr04_post_mpt_amp":0.0349565932952164,"epica_amp":0.12541093825468444,"ratio":3.5876189992417302,"label":"obliquity p+s6"},"94.8779":{"period_kyr":94.8779191670953,"lr04_post_mpt_amp":2.195610177015087,"epica_amp":1.2639898903054725,"ratio":0.57568957528875,"label":"eccentricity g4−g5"},"96.8490":{"period_kyr":96.84902648762181,"lr04_post_mpt_amp":1.2946043691202604,"epica_amp":0.23682895646287871,"ratio":0.18293539100583617,"label":"eccentricity z6−g5"},"98.8439":{"period_kyr":98.8438689567201,"lr04_post_mpt_amp":1.2272636814692346,"epica_amp":0.4856709702506422,"ratio":0.3957348185104076,"label":"eccentricity g3−g5"},"101.0051":{"period_kyr":101.00506143827943,"lr04_post_mpt_amp":0.24883566401213555,"epica_amp":0.4478824911568282,"ratio":1.7999127775148231,"label":"eccentricity z5−g5"},"103.1238":{"period_kyr":103.12379754572216,"lr04_post_mpt_amp":1.0637702514670326,"epica_amp":0.33409644304781483,"ratio":0.3140682328604945,"label":"eccentricity z7−g5"},"105.1372":{"period_kyr":105.13718703798536,"lr04_post_mpt_amp":0.9941330544987269,"epica_amp":0.43849121263877044,"ratio":0.4410789990881769,"label":"eccentricity g4−g1"},"110.0293":{"period_kyr":110.0293064910417,"lr04_post_mpt_amp":1.0193800097226737,"epica_amp":0.8656325142888301,"ratio":0.8491754851307403,"label":"eccentricity g3−g1"},"123.8462":{"period_kyr":123.8461774280429,"lr04_post_mpt_amp":0.41089824290408106,"epica_amp":0.890357606745006,"ratio":2.1668566904844337,"label":"eccentricity g4−g2"},"130.6910":{"period_kyr":130.69097366197656,"lr04_post_mpt_amp":1.0591081955880004,"epica_amp":0.44889983051690424,"ratio":0.4238469991894285,"label":"eccentricity g3−g2"},"134.4960":{"period_kyr":134.49598078775747,"lr04_post_mpt_amp":0.2597846117930443,"epica_amp":0.3579209451882179,"ratio":1.3777603789455908,"label":"eccentricity z5−g2"},"405.6256":{"period_kyr":405.6256163323513,"lr04_post_mpt_amp":0.09278045017164487,"epica_amp":0.28956131921278855,"ratio":3.120930311041786,"label":"eccentricity fundamental g₂−g₅"},"202.8128":{"period_kyr":202.81280816617564,"lr04_post_mpt_amp":0.18105432074852218,"epica_amp":0.267321504190256,"ratio":1.4764712771564055,"label":"climate-internal harmonic (g₂−g₅)/2"},"135.2085":{"period_kyr":135.20853877745043,"lr04_post_mpt_amp":0.7081502970446216,"epica_amp":0.4894774430173151,"ratio":0.6912055887854445,"label":"climate-internal harmonic (g₂−g₅)/3"}}},"cenco2pip":{"label":"CenCO2PIP CO₂ (deep-time)","regime":"cenco2pip","window_kyr":[0,66000],"n_samples":661,"intercept":0.012710824053600382,"L1":[{"period_kyr":19.001545641452537,"label":"climatic precession p+g4","a":-0.0020339097875183287,"b":0.00022217434249469092},{"period_kyr":19.15547239857139,"label":"climatic precession p+g3","a":-0.0026330372957351893,"b":-0.0010667673119131998},{"period_kyr":22.44529598528639,"label":"climatic precession p+g2","a":-0.0005776950930113517,"b":0.000032950521448107256},{"period_kyr":23.19329171671584,"label":"climatic precession p+g1","a":-0.0009280348093158135,"b":0.00043817183410515236},{"period_kyr":23.76005899662999,"label":"climatic precession p+g5","a":0.00039345948924086015,"b":-0.0001325991420445382},{"period_kyr":27.268889891543882,"label":"obliquity p+s7","a":-0.00034971658008570356,"b":0.00044797074965526734},{"period_kyr":28.842397679293658,"label":"obliquity p+s1","a":-0.000384552814850494,"b":0.0002464837014044273},{"period_kyr":29.004773420333045,"label":"obliquity p+ζ14","a":-0.0006574156746607922,"b":-0.000012233691518947901},{"period_kyr":29.61720715204449,"label":"obliquity p+ζ9","a":-0.000746100134783839,"b":0.00048357672982657276},{"period_kyr":29.809150128997057,"label":"obliquity p+s2","a":-0.00032599519815770274,"b":-0.00027525326939174447},{"period_kyr":39.5560435713027,"label":"obliquity p+s4","a":-0.0005573847158311762,"b":4.3975189479108535e-7},{"period_kyr":40.229254458577174,"label":"obliquity p+ζ4","a":-0.0005356992277551539,"b":-0.00019124518224546627},{"period_kyr":40.92393247034353,"label":"obliquity p+s3","a":-0.0005284820040348964,"b":-0.0004813309679522161},{"period_kyr":41.644550709000725,"label":"obliquity p+ζ7","a":-0.0001566004948480356,"b":-0.0004534211464664248},{"period_kyr":53.6174658674332,"label":"obliquity p+s6","a":-0.003351261355073938,"b":-0.003242899060603807},{"period_kyr":94.8779191670953,"label":"eccentricity g4−g5","a":-0.031325382675099635,"b":-0.03179415675054521},{"period_kyr":96.84902648762181,"label":"eccentricity z6−g5","a":0.031647279429596026,"b":0.035781144994991465},{"period_kyr":98.8438689567201,"label":"eccentricity g3−g5","a":0.2000640346774423,"b":-0.16437244619996433},{"period_kyr":101.00506143827943,"label":"eccentricity z5−g5","a":0.08062539180186565,"b":0.09521996832194717},{"period_kyr":103.12379754572216,"label":"eccentricity z7−g5","a":-0.024917964042491587,"b":-0.014039090852651901},{"period_kyr":105.13718703798536,"label":"eccentricity g4−g1","a":0.012133891790271134,"b":0.038609897092132146},{"period_kyr":110.0293064910417,"label":"eccentricity g3−g1","a":-0.002137453954107797,"b":-0.015874702815844674},{"period_kyr":123.8461774280429,"label":"eccentricity g4−g2","a":-0.0004683979086828761,"b":0.0007068946905901684},{"period_kyr":130.69097366197656,"label":"eccentricity g3−g2","a":-0.00011026351065852435,"b":0.0017567884155732486},{"period_kyr":134.49598078775747,"label":"eccentricity z5−g2","a":0.00044347228519818526,"b":0.00035600816532370405},{"period_kyr":405.6256163323513,"label":"eccentricity fundamental g₂−g₅","a":0.00010755815185458945,"b":-0.00009538520712884004},{"period_kyr":202.81280816617564,"label":"climate-internal harmonic (g₂−g₅)/2","a":-0.0005635917105186019,"b":0.00013706239529518924},{"period_kyr":135.20853877745043,"label":"climate-internal harmonic (g₂−g₅)/3","a":-0.001380824480642591,"b":0.001765260855687019}],"L2":[],"L3":[{"label":"PETM","t_kyr":56000,"beta":-2.2502412590909224},{"label":"EOT","t_kyr":34000,"beta":1.5689083792079281},{"label":"Mi-1","t_kyr":23000,"beta":-0.21259657117148378},{"label":"MMCT","t_kyr":14000,"beta":-0.3699202766740759},{"label":"iNHG","t_kyr":2700,"beta":-0.242273520660646},{"label":"MPT","t_kyr":1000,"beta":0.24998700836465093}],"denormalization":{"y_mean":-2.091425032821257e-13,"y_std":209.18154000668048,"trend_slope":0.013251639299066168,"trend_intercept":214.15971983891893},"r2":{"l1_only":0.04732438630711089,"l1_l2":0.04732438630711089,"l1_l2_l3":0.6918024309879351,"delta_l2":0,"delta_l3":0.6444780446808243}}},"meta":{"script":"export_climate_formula_browser.py","consumer":"src/script.js — Climate Formula Explorer modal","stitched_lr04_r2":0.9214013227358522,"stitched_lr04_note":"R² of the three-regime stitched curve (post-MPT / iNHG-MPT / pre-iNHG blocks) against the raw gridded LR04 stack, 0-5320 kyr"}},
|
|
29
|
-
DT_ANCHOR: {"deltaTStartSeconds":56.
|
|
30
|
-
DT_RESONATOR: {"display_name":"Core-mantle swing","driver":"Resonator","functional_class":"episode (2-kick IMPULSE-CONSISTENT windowed damped oscillation — sin-only kicks, displacement-continuous; zero before first kick)","kick_epochs_year":[-1600,1600],"kick_coefficients_s":[{"cos":0,"sin":621.
|
|
31
|
-
DT_STACK: {"bond":{"lattice_n":1830,"period_yr":1465.8666666666666,"cos_coeff_s":165.
|
|
28
|
+
CLIMATE_FORMULA_COEFFS: {"config":{"L1_lines":[{"family":"climatic precession","label":"p+g4","arcsecPerYr":68.20497787152276,"periodKyr":19.001545641452537,"relAmp":0.6717464199951804},{"family":"climatic precession","label":"p+g3","arcsecPerYr":67.65690623723043,"periodKyr":19.15547239857139,"relAmp":0.460782442830978},{"family":"climatic precession","label":"p+g2","arcsecPerYr":57.7403835908232,"periodKyr":22.44529598528639,"relAmp":0.8620464713605362},{"family":"climatic precession","label":"p+g1","arcsecPerYr":55.878226162522175,"periodKyr":23.19329171671584,"relAmp":0.19921489972571554},{"family":"climatic precession","label":"p+g5","arcsecPerYr":54.545319108164605,"periodKyr":23.76005899662999,"relAmp":1},{"family":"obliquity","label":"p+s7","arcsecPerYr":47.5266588616995,"periodKyr":27.268906147417248,"relAmp":0.10427252954025028},{"family":"obliquity","label":"p+s1","arcsecPerYr":44.93382267460193,"periodKyr":28.842415865333038,"relAmp":0.5416339451073867},{"family":"obliquity","label":"p+ζ14","arcsecPerYr":44.682272102244546,"periodKyr":29.004791811714906,"relAmp":0.14236226024182447},{"family":"obliquity","label":"p+ζ9","arcsecPerYr":43.75831773152924,"periodKyr":29.617226328291668,"relAmp":0.1009465170347195},{"family":"obliquity","label":"p+s2","arcsecPerYr":43.47655501190643,"periodKyr":29.8091695546043,"relAmp":0.47895780932341964},{"family":"obliquity","label":"p+s4","arcsecPerYr":32.76361239097522,"periodKyr":39.55607777721681,"relAmp":0.4849220480959469},{"family":"obliquity","label":"p+ζ4","arcsecPerYr":32.21533378282217,"periodKyr":40.2292898387119,"relAmp":0.3238058217329259},{"family":"obliquity","label":"p+s3","arcsecPerYr":31.66848253096345,"periodKyr":40.923969082915576,"relAmp":1},{"family":"obliquity","label":"p+ζ7","arcsecPerYr":31.120489909346112,"periodKyr":41.644588622327085,"relAmp":0.17878079100604266},{"family":"obliquity","label":"p+s6","arcsecPerYr":24.171199812093143,"periodKyr":53.61752871496249,"relAmp":0.16050040214935987},{"family":"eccentricity","label":"g4−g5","arcsecPerYr":13.659658763358156,"periodKyr":94.8779191670953,"relAmp":0.7792461802378098},{"family":"eccentricity","label":"z6−g5","arcsecPerYr":13.381652320125703,"periodKyr":96.84902648762181,"relAmp":0.10995041848327905},{"family":"eccentricity","label":"g3−g5","arcsecPerYr":13.111587129065821,"periodKyr":98.8438689567201,"relAmp":0.5345215810740946},{"family":"eccentricity","label":"z5−g5","arcsecPerYr":12.831040163189634,"periodKyr":101.00506143827943,"relAmp":0.15474467548919818},{"family":"eccentricity","label":"z7−g5","arcsecPerYr":12.567419265426008,"periodKyr":103.12379754572216,"relAmp":0.10461932722318636},{"family":"eccentricity","label":"g4−g1","arcsecPerYr":12.326751709000584,"periodKyr":105.13718703798536,"relAmp":0.15523744965772213},{"family":"eccentricity","label":"g3−g1","arcsecPerYr":11.77868007470825,"periodKyr":110.0293064910417,"relAmp":0.1064846631749067},{"family":"eccentricity","label":"g4−g2","arcsecPerYr":10.464594280699554,"periodKyr":123.8461774280429,"relAmp":0.6717464199951804},{"family":"eccentricity","label":"g3−g2","arcsecPerYr":9.91652264640722,"periodKyr":130.69097366197656,"relAmp":0.460782442830978},{"family":"eccentricity","label":"z5−g2","arcsecPerYr":9.635975680531033,"periodKyr":134.49598078775747,"relAmp":0.13339710146729455},{"family":"eccentricity fundamental","label":"g₂−g₅","periodKyr":405.6256163323513,"arcsecPerYr":3.1950644826586005,"note":"the engine’s 20-Myr mean beat; the long-eccentricity metronome"},{"family":"climate-internal harmonic","label":"(g₂−g₅)/2","periodKyr":202.81280816617564,"note":"carbon-thermostat 2nd harmonic (doc 92 §3), not orbital forcing"},{"family":"climate-internal harmonic","label":"(g₂−g₅)/3","periodKyr":135.20853877745043,"note":"carbon-thermostat 3rd harmonic (doc 92 §3), not orbital forcing"}],"L1_source":"data/l1-physical-lines.json","L2_periods_kyr":{"405-kyr (fundamental)":404.5,"202-kyr (2nd harmonic)":202.25,"135-kyr (3rd harmonic)":134.83},"L3_transitions_ma":{"PETM":56,"EOT":34,"Mi-1":23,"MMCT":14,"iNHG":2.7,"MPT":1},"description":"Climate formula = intercept + L1 + L2 + L3 (in normalized units). De-normalize: y_raw = y_norm * y_std + y_mean + (trend_slope*t_kyr + trend_intercept)."},"regimes":{"lr04-post-mpt":{"label":"LR04 post-MPT","regime":"post-mpt","window_kyr":[0,1000],"n_samples":1001,"intercept":-0.006261599801050812,"L1":[{"period_kyr":19.001545641452537,"label":"climatic precession p+g4","a":0.082432569026859,"b":-0.13304910582737045},{"period_kyr":19.15547239857139,"label":"climatic precession p+g3","a":0.055467205713348844,"b":0.036125403621177665},{"period_kyr":22.44529598528639,"label":"climatic precession p+g2","a":0.1356815395217974,"b":0.10397374581445296},{"period_kyr":23.19329171671584,"label":"climatic precession p+g1","a":0.004029541170622819,"b":-0.12019560019609504},{"period_kyr":23.76005899662999,"label":"climatic precession p+g5","a":-0.17418905453714204,"b":-0.08946188630724133},{"period_kyr":27.268906147417248,"label":"obliquity p+s7","a":0.0019230416069616063,"b":0.045651647891608305},{"period_kyr":28.842415865333038,"label":"obliquity p+s1","a":-0.07772762434063019,"b":-0.2756250852104706},{"period_kyr":29.004791811714906,"label":"obliquity p+ζ14","a":0.10714373913583963,"b":0.1647900025830038},{"period_kyr":29.617226328291668,"label":"obliquity p+ζ9","a":-0.6220964418038535,"b":0.09708536990429989},{"period_kyr":29.8091695546043,"label":"obliquity p+s2","a":0.3906413121270396,"b":-0.397425433031512},{"period_kyr":39.55607777721681,"label":"obliquity p+s4","a":0.03287092051454721,"b":0.3182437726095808},{"period_kyr":40.2292898387119,"label":"obliquity p+ζ4","a":-1.0063110076137878,"b":0.011863846564191899},{"period_kyr":40.923969082915576,"label":"obliquity p+s3","a":-0.32312414242408694,"b":-1.136345395979474},{"period_kyr":41.644588622327085,"label":"obliquity p+ζ7","a":0.5719591440543469,"b":0.2976615710688269},{"period_kyr":53.61752871496249,"label":"obliquity p+s6","a":0.030139847024031358,"b":0.01771557720651296},{"period_kyr":94.8779191670953,"label":"eccentricity g4−g5","a":-0.02108847154972597,"b":-2.19551138151326},{"period_kyr":96.84902648762181,"label":"eccentricity z6−g5","a":0.5991339544857626,"b":1.1476263766560002},{"period_kyr":98.8438689567201,"label":"eccentricity g3−g5","a":1.1869253433369662,"b":0.31207343960571327},{"period_kyr":101.00506143827943,"label":"eccentricity z5−g5","a":-0.21047050684922874,"b":-0.13274559347681283},{"period_kyr":103.12379754572216,"label":"eccentricity z7−g5","a":-0.6785313191175962,"b":0.8192726341367963},{"period_kyr":105.13718703798536,"label":"eccentricity g4−g1","a":0.029443915700263487,"b":0.9936986491668811},{"period_kyr":110.0293064910417,"label":"eccentricity g3−g1","a":-0.9979454733740254,"b":-0.20796044328115149},{"period_kyr":123.8461774280429,"label":"eccentricity g4−g2","a":-0.3841888407687438,"b":-0.1457354872697259},{"period_kyr":130.69097366197656,"label":"eccentricity g3−g2","a":0.9854679028340256,"b":0.3880220645216982},{"period_kyr":134.49598078775747,"label":"eccentricity z5−g2","a":-0.25142886456814856,"b":-0.06535721911085138},{"period_kyr":405.6256163323513,"label":"eccentricity fundamental g₂−g₅","a":-0.07967979956456855,"b":-0.047532666125553624},{"period_kyr":202.81280816617564,"label":"climate-internal harmonic (g₂−g₅)/2","a":-0.024237211304726045,"b":0.17942475404584923},{"period_kyr":135.20853877745043,"label":"climate-internal harmonic (g₂−g₅)/3","a":-0.68401721864114,"b":0.18329294138954288}],"L2":[],"L3":[],"denormalization":{"y_mean":1.5012965895430689e-15,"y_std":0.43131092949760913,"trend_slope":-0.00008678094360729054,"trend_intercept":4.192006855420027},"r2":{"l1_only":0.7804375067209136,"l1_l2":0.7804375067209136,"l1_l2_l3":0.7804375067209136,"delta_l2":0,"delta_l3":0}},"lr04-inhg-mpt":{"label":"LR04 inhg-MPT","regime":"inhg-mpt","window_kyr":[1000,2700],"n_samples":1701,"intercept":0.0005407945238550157,"L1":[{"period_kyr":19.001545641452537,"label":"climatic precession p+g4","a":0.035038697900469776,"b":-0.09856233456883343},{"period_kyr":19.15547239857139,"label":"climatic precession p+g3","a":-0.0050055873000230955,"b":0.07295450844777218},{"period_kyr":22.44529598528639,"label":"climatic precession p+g2","a":0.1189707336083613,"b":-0.061556481183347445},{"period_kyr":23.19329171671584,"label":"climatic precession p+g1","a":-0.022417211678624593,"b":-0.07917860548424852},{"period_kyr":23.76005899662999,"label":"climatic precession p+g5","a":-0.12822098008948085,"b":0.011726379273122145},{"period_kyr":27.268906147417248,"label":"obliquity p+s7","a":0.019253583137398833,"b":-0.006811777303043942},{"period_kyr":28.842415865333038,"label":"obliquity p+s1","a":-0.10407446438276668,"b":-0.1307970655195877},{"period_kyr":29.004791811714906,"label":"obliquity p+ζ14","a":-0.004653228450289371,"b":-0.15758023790494996},{"period_kyr":29.617226328291668,"label":"obliquity p+ζ9","a":0.19983427595294445,"b":-0.030365954887064533},{"period_kyr":29.8091695546043,"label":"obliquity p+s2","a":0.12358880765404787,"b":0.10860240473230665},{"period_kyr":39.55607777721681,"label":"obliquity p+s4","a":0.11660509555060611,"b":-0.2692086622401496},{"period_kyr":40.2292898387119,"label":"obliquity p+ζ4","a":0.004438742288984998,"b":-0.2056720629293153},{"period_kyr":40.923969082915576,"label":"obliquity p+s3","a":-0.5827733879668409,"b":-0.5191599231280841},{"period_kyr":41.644588622327085,"label":"obliquity p+ζ7","a":0.22529730269500345,"b":0.017663100228184708},{"period_kyr":53.61752871496249,"label":"obliquity p+s6","a":-0.22929202500409512,"b":0.10886523178026528},{"period_kyr":94.8779191670953,"label":"eccentricity g4−g5","a":0.16091225627385192,"b":0.03756959488628836},{"period_kyr":96.84902648762181,"label":"eccentricity z6−g5","a":-0.05346309938007432,"b":1.3428060555145303},{"period_kyr":98.8438689567201,"label":"eccentricity g3−g5","a":-0.9532005030349247,"b":1.1984612690364072},{"period_kyr":101.00506143827943,"label":"eccentricity z5−g5","a":0.06976557078692491,"b":0.18007593952402745},{"period_kyr":103.12379754572216,"label":"eccentricity z7−g5","a":1.2361887687342203,"b":0.6242698241337999},{"period_kyr":105.13718703798536,"label":"eccentricity g4−g1","a":0.2782500662455729,"b":0.7838810405427987},{"period_kyr":110.0293064910417,"label":"eccentricity g3−g1","a":0.11819499898152587,"b":-0.2221892717784572},{"period_kyr":123.8461774280429,"label":"eccentricity g4−g2","a":-0.11106845333381837,"b":-0.0021299971398698186},{"period_kyr":130.69097366197656,"label":"eccentricity g3−g2","a":0.04947901851561723,"b":-0.06668073514545314},{"period_kyr":134.49598078775747,"label":"eccentricity z5−g2","a":0.44222786180672413,"b":-0.31488000222020074},{"period_kyr":405.6256163323513,"label":"eccentricity fundamental g₂−g₅","a":0.1385945293920966,"b":0.08861358143487359},{"period_kyr":202.81280816617564,"label":"climate-internal harmonic (g₂−g₅)/2","a":-0.15224767486821475,"b":0.08152656948678338},{"period_kyr":135.20853877745043,"label":"climate-internal harmonic (g₂−g₅)/3","a":-0.24351423105434325,"b":0.5907889361502039}],"L2":[],"L3":[],"denormalization":{"y_mean":2.117321276827753e-15,"y_std":0.2533430989053228,"trend_slope":-0.00028446235786389366,"trend_intercept":4.264486402612575},"r2":{"l1_only":0.6089622611717074,"l1_l2":0.6089622611717074,"l1_l2_l3":0.6089622611717074,"delta_l2":0,"delta_l3":0}},"lr04-pre-inhg":{"label":"LR04 pre-iNHG","regime":"pre-inhg","window_kyr":[2700,5320],"n_samples":2621,"intercept":-0.01978128420246711,"L1":[{"period_kyr":19.001545641452537,"label":"climatic precession p+g4","a":-0.03580507973907532,"b":-0.004163296038171838},{"period_kyr":19.15547239857139,"label":"climatic precession p+g3","a":0.029482146560380618,"b":-0.019598575387339112},{"period_kyr":22.44529598528639,"label":"climatic precession p+g2","a":-0.02793561984412768,"b":-0.056285597003484567},{"period_kyr":23.19329171671584,"label":"climatic precession p+g1","a":-0.03339344700332514,"b":-0.010057893440145294},{"period_kyr":23.76005899662999,"label":"climatic precession p+g5","a":0.04866558654249398,"b":-0.007003106339032228},{"period_kyr":27.268906147417248,"label":"obliquity p+s7","a":0.014945206229944758,"b":-0.006013718029498849},{"period_kyr":28.842415865333038,"label":"obliquity p+s1","a":0.03659352999829785,"b":-0.031848715912644376},{"period_kyr":29.004791811714906,"label":"obliquity p+ζ14","a":-0.021945277796354024,"b":-0.014588070628483996},{"period_kyr":29.617226328291668,"label":"obliquity p+ζ9","a":0.022945223074794158,"b":-0.014615341699566353},{"period_kyr":29.8091695546043,"label":"obliquity p+s2","a":-0.03504174594236702,"b":0.07686265798004002},{"period_kyr":39.55607777721681,"label":"obliquity p+s4","a":-0.035834461164148707,"b":-0.16080639830211058},{"period_kyr":40.2292898387119,"label":"obliquity p+ζ4","a":-0.01574863690392035,"b":-0.10018327768000293},{"period_kyr":40.923969082915576,"label":"obliquity p+s3","a":-0.38923561668464834,"b":-0.3592128864512913},{"period_kyr":41.644588622327085,"label":"obliquity p+ζ7","a":0.0666644162931373,"b":0.12301623264822864},{"period_kyr":53.61752871496249,"label":"obliquity p+s6","a":-0.18560482759086044,"b":0.20084798554298505},{"period_kyr":94.8779191670953,"label":"eccentricity g4−g5","a":0.20725858472850203,"b":-0.13573555478071403},{"period_kyr":96.84902648762181,"label":"eccentricity z6−g5","a":-1.0161864008771713,"b":-0.37916952305916485},{"period_kyr":98.8438689567201,"label":"eccentricity g3−g5","a":0.5889243526694297,"b":2.026043894219197},{"period_kyr":101.00506143827943,"label":"eccentricity z5−g5","a":0.674179064635289,"b":-2.447521913872399},{"period_kyr":103.12379754572216,"label":"eccentricity z7−g5","a":-1.9392786388870076,"b":0.8411384140330604},{"period_kyr":105.13718703798536,"label":"eccentricity g4−g1","a":0.5702933503358304,"b":0.6882833795705612},{"period_kyr":110.0293064910417,"label":"eccentricity g3−g1","a":0.16670723937186288,"b":-0.157327138899017},{"period_kyr":123.8461774280429,"label":"eccentricity g4−g2","a":-0.028563986340683856,"b":0.032547454212518846},{"period_kyr":130.69097366197656,"label":"eccentricity g3−g2","a":0.03721523736581127,"b":-0.3364571543706422},{"period_kyr":134.49598078775747,"label":"eccentricity z5−g2","a":-0.16585357364556103,"b":1.5399798343428315},{"period_kyr":405.6256163323513,"label":"eccentricity fundamental g₂−g₅","a":0.27416217667042886,"b":0.1232463684579172},{"period_kyr":202.81280816617564,"label":"climate-internal harmonic (g₂−g₅)/2","a":0.028572513361765937,"b":-0.06634153361168266},{"period_kyr":135.20853877745043,"label":"climate-internal harmonic (g₂−g₅)/3","a":-1.1531696833038918,"b":-0.6431516714664054}],"L2":[],"L3":[],"denormalization":{"y_mean":2.2229875746786803e-16,"y_std":0.1419188719967453,"trend_slope":-0.0001616384823512257,"trend_intercept":3.7150997304817532},"r2":{"l1_only":0.45466691777331913,"l1_l2":0.45466691777331913,"l1_l2_l3":0.45466691777331913,"delta_l2":0,"delta_l3":0}},"lr04-full":{"label":"LR04 full","regime":"lr04-full","window_kyr":[0,5320],"n_samples":5321,"intercept":-0.0017594442067554764,"L1":[{"period_kyr":19.001545641452537,"label":"climatic precession p+g4","a":0.030653248828978838,"b":-0.05942350042079483},{"period_kyr":19.15547239857139,"label":"climatic precession p+g3","a":0.007132467646760274,"b":0.00889346045248779},{"period_kyr":22.44529598528639,"label":"climatic precession p+g2","a":0.08099544126604592,"b":-0.015104023210019024},{"period_kyr":23.19329171671584,"label":"climatic precession p+g1","a":-0.0022687884125290325,"b":-0.06635740004795854},{"period_kyr":23.76005899662999,"label":"climatic precession p+g5","a":-0.07546493808551995,"b":-0.031559806535336785},{"period_kyr":27.268906147417248,"label":"obliquity p+s7","a":0.014044611584100156,"b":0.0067116130949529396},{"period_kyr":28.842415865333038,"label":"obliquity p+s1","a":0.018156070504627007,"b":-0.05769209107673573},{"period_kyr":29.004791811714906,"label":"obliquity p+ζ14","a":-0.016937892903193467,"b":-0.04998100183225644},{"period_kyr":29.617226328291668,"label":"obliquity p+ζ9","a":0.0022108299667193652,"b":-0.014471741599317106},{"period_kyr":29.8091695546043,"label":"obliquity p+s2","a":-0.025563882575889194,"b":0.030997389732802638},{"period_kyr":39.55607777721681,"label":"obliquity p+s4","a":-0.019174276513080974,"b":-0.16670301535160126},{"period_kyr":40.2292898387119,"label":"obliquity p+ζ4","a":-0.046332620172037334,"b":-0.10915920384492028},{"period_kyr":40.923969082915576,"label":"obliquity p+s3","a":-0.41722734354102786,"b":-0.3045429714864705},{"period_kyr":41.644588622327085,"label":"obliquity p+ζ7","a":0.13911640253566376,"b":0.07908102204296569},{"period_kyr":53.61752871496249,"label":"obliquity p+s6","a":-0.11982484735154347,"b":0.1075601512063676},{"period_kyr":94.8779191670953,"label":"eccentricity g4−g5","a":-0.07815149309609569,"b":-0.26561311217061434},{"period_kyr":96.84902648762181,"label":"eccentricity z6−g5","a":-0.07259701223776335,"b":-0.030963823278142608},{"period_kyr":98.8438689567201,"label":"eccentricity g3−g5","a":-0.17395536780158055,"b":0.0007920877657910108},{"period_kyr":101.00506143827943,"label":"eccentricity z5−g5","a":-0.09381457474099936,"b":-0.030909390200411946},{"period_kyr":103.12379754572216,"label":"eccentricity z7−g5","a":-0.08438228103346493,"b":0.07861984239215711},{"period_kyr":105.13718703798536,"label":"eccentricity g4−g1","a":-0.10328419278380341,"b":-0.005340015475780911},{"period_kyr":110.0293064910417,"label":"eccentricity g3−g1","a":0.05724257014471312,"b":0.003286266021403028},{"period_kyr":123.8461774280429,"label":"eccentricity g4−g2","a":-0.07900004842300087,"b":0.12103628420135798},{"period_kyr":130.69097366197656,"label":"eccentricity g3−g2","a":0.07725354094784148,"b":-0.04256825456998332},{"period_kyr":134.49598078775747,"label":"eccentricity z5−g2","a":0.05454973179068978,"b":0.1200357372085461},{"period_kyr":405.6256163323513,"label":"eccentricity fundamental g₂−g₅","a":0.09355780768106586,"b":0.0491005306751859},{"period_kyr":202.81280816617564,"label":"climate-internal harmonic (g₂−g₅)/2","a":-0.015315361983286493,"b":0.060095183483304365},{"period_kyr":135.20853877745043,"label":"climate-internal harmonic (g₂−g₅)/3","a":-0.134874128816246,"b":0.03848362052622878}],"L2":[],"L3":[{"label":"iNHG","t_kyr":2700,"beta":-0.18331459595720692},{"label":"MPT","t_kyr":1000,"beta":0.07582824645011141}],"denormalization":{"y_mean":8.786640107689267e-16,"y_std":0.26728652336026737,"trend_slope":-0.0002890388734746666,"trend_intercept":4.253595893576046},"r2":{"l1_only":0.32538277595053355,"l1_l2":0.32538277595053355,"l1_l2_l3":0.3329107046316774,"delta_l2":0,"delta_l3":0.007527928681143825}},"cenogrid-d18o":{"label":"CENOGRID δ¹⁸O","regime":"cenogrid","window_kyr":[0,67000],"n_samples":13401,"intercept":-0.000017153189963441282,"L1":[{"period_kyr":19.001545641452537,"label":"climatic precession p+g4","a":0.0041133563757953726,"b":0.0006122983124506615},{"period_kyr":19.15547239857139,"label":"climatic precession p+g3","a":-0.0012149238468332543,"b":-0.0009668638659978924},{"period_kyr":22.44529598528639,"label":"climatic precession p+g2","a":0.001271474975558205,"b":-0.0002880835940532768},{"period_kyr":23.19329171671584,"label":"climatic precession p+g1","a":-0.0006778305944323756,"b":-0.005621586695796224},{"period_kyr":23.76005899662999,"label":"climatic precession p+g5","a":-0.0015154728839008066,"b":-0.0020688961615997646},{"period_kyr":27.268906147417248,"label":"obliquity p+s7","a":-0.0025838705308555013,"b":-0.005343337153924464},{"period_kyr":28.842415865333038,"label":"obliquity p+s1","a":0.0020378113308972034,"b":-0.004964761212448048},{"period_kyr":29.004791811714906,"label":"obliquity p+ζ14","a":0.00015190071101328032,"b":-0.004300567138597734},{"period_kyr":29.617226328291668,"label":"obliquity p+ζ9","a":-0.0006289738284916266,"b":-0.0011571215814992946},{"period_kyr":29.8091695546043,"label":"obliquity p+s2","a":-0.0010285392327511055,"b":0.005153146635298594},{"period_kyr":39.55607777721681,"label":"obliquity p+s4","a":-0.001866579735495099,"b":-0.009381223027510955},{"period_kyr":40.2292898387119,"label":"obliquity p+ζ4","a":-0.011305875483692452,"b":0.0028442994919008584},{"period_kyr":40.923969082915576,"label":"obliquity p+s3","a":-0.009463768159600965,"b":-0.014712775901222155},{"period_kyr":41.644588622327085,"label":"obliquity p+ζ7","a":0.004221879395797408,"b":0.0017683663051216685},{"period_kyr":53.61752871496249,"label":"obliquity p+s6","a":-0.0025427431745709064,"b":0.011125457232795979},{"period_kyr":94.8779191670953,"label":"eccentricity g4−g5","a":0.008877268834356383,"b":-0.030348507200221336},{"period_kyr":96.84902648762181,"label":"eccentricity z6−g5","a":0.002058209296970645,"b":-0.010238014497041124},{"period_kyr":98.8438689567201,"label":"eccentricity g3−g5","a":-0.013651379318455887,"b":0.026204106335075465},{"period_kyr":101.00506143827943,"label":"eccentricity z5−g5","a":0.0016749516949839862,"b":0.003233024729202968},{"period_kyr":103.12379754572216,"label":"eccentricity z7−g5","a":-0.00452072476296185,"b":0.00789334014868309},{"period_kyr":105.13718703798536,"label":"eccentricity g4−g1","a":-0.00903930523210411,"b":-0.0033745117991191027},{"period_kyr":110.0293064910417,"label":"eccentricity g3−g1","a":0.01254228306792841,"b":0.007438162399727605},{"period_kyr":123.8461774280429,"label":"eccentricity g4−g2","a":-0.008945881544730524,"b":0.02456014359917774},{"period_kyr":130.69097366197656,"label":"eccentricity g3−g2","a":0.007764308761380718,"b":-0.012566547694615883},{"period_kyr":134.49598078775747,"label":"eccentricity z5−g2","a":-0.005043263446453649,"b":-0.010094265773878905},{"period_kyr":405.6256163323513,"label":"eccentricity fundamental g₂−g₅","a":0.04455260970399607,"b":-0.04012838466748332},{"period_kyr":202.81280816617564,"label":"climate-internal harmonic (g₂−g₅)/2","a":0.0031281720790908413,"b":0.005403791627168142},{"period_kyr":135.20853877745043,"label":"climate-internal harmonic (g₂−g₅)/3","a":-0.00407789816964086,"b":0.005390573907260856}],"L2":[],"L3":[{"label":"PETM","t_kyr":56000,"beta":1.9399569133341423},{"label":"EOT","t_kyr":34000,"beta":-1.6915666426837683},{"label":"Mi-1","t_kyr":23000,"beta":1.3791514319762492},{"label":"MMCT","t_kyr":14000,"beta":-0.5726719293808323},{"label":"iNHG","t_kyr":2700,"beta":-0.9437043782356765},{"label":"MPT","t_kyr":1000,"beta":0.9558147944349952}],"denormalization":{"y_mean":3.1388799311243884e-16,"y_std":0.5138368170014185,"trend_slope":-0.000060475169948230774,"trend_intercept":3.5886100819307556},"r2":{"l1_only":0.003982293170482154,"l1_l2":0.003982293170482154,"l1_l2_l3":0.6165984200404458,"delta_l2":0,"delta_l3":0.6126161268699637}},"cenogrid-d13c":{"label":"CENOGRID δ¹³C","regime":"cenogrid","window_kyr":[0,67000],"n_samples":13401,"intercept":0.000029171728885359142,"L1":[{"period_kyr":19.001545641452537,"label":"climatic precession p+g4","a":0.0009091320399139437,"b":-0.00022115928548263435},{"period_kyr":19.15547239857139,"label":"climatic precession p+g3","a":-0.0036110811186118646,"b":-0.0013639908854225027},{"period_kyr":22.44529598528639,"label":"climatic precession p+g2","a":-0.0035936996494176513,"b":-0.0005757456806313066},{"period_kyr":23.19329171671584,"label":"climatic precession p+g1","a":0.0017764391388285852,"b":0.00028609196921533693},{"period_kyr":23.76005899662999,"label":"climatic precession p+g5","a":0.0032087864912957284,"b":-0.005815994175685588},{"period_kyr":27.268906147417248,"label":"obliquity p+s7","a":-0.0034613398621327444,"b":-0.0038007916055494088},{"period_kyr":28.842415865333038,"label":"obliquity p+s1","a":-0.002880030481366175,"b":-0.0007184357446750403},{"period_kyr":29.004791811714906,"label":"obliquity p+ζ14","a":-0.00222924550740814,"b":-0.005993305851952227},{"period_kyr":29.617226328291668,"label":"obliquity p+ζ9","a":-0.0045122307992258226,"b":-0.002182774632434506},{"period_kyr":29.8091695546043,"label":"obliquity p+s2","a":-0.002911752724172761,"b":0.00443735412417718},{"period_kyr":39.55607777721681,"label":"obliquity p+s4","a":0.004970040842946216,"b":0.007303213638112271},{"period_kyr":40.2292898387119,"label":"obliquity p+ζ4","a":-0.005537469385975506,"b":-0.007230261221794727},{"period_kyr":40.923969082915576,"label":"obliquity p+s3","a":0.016532276911093206,"b":0.005746291082190887},{"period_kyr":41.644588622327085,"label":"obliquity p+ζ7","a":-0.00202261648778182,"b":-0.003241192550382815},{"period_kyr":53.61752871496249,"label":"obliquity p+s6","a":0.008930111444512818,"b":-0.004090929946156231},{"period_kyr":94.8779191670953,"label":"eccentricity g4−g5","a":0.00928235281110003,"b":-0.0038456358179925565},{"period_kyr":96.84902648762181,"label":"eccentricity z6−g5","a":0.0031487257084246633,"b":0.001019046575856615},{"period_kyr":98.8438689567201,"label":"eccentricity g3−g5","a":-0.006504925311475366,"b":0.02207049946408811},{"period_kyr":101.00506143827943,"label":"eccentricity z5−g5","a":0.005252438822833155,"b":0.010723725703556185},{"period_kyr":103.12379754572216,"label":"eccentricity z7−g5","a":0.015463040483976124,"b":-0.007890682816031471},{"period_kyr":105.13718703798536,"label":"eccentricity g4−g1","a":-0.006704077568200228,"b":-0.004724118051800087},{"period_kyr":110.0293064910417,"label":"eccentricity g3−g1","a":0.01513520161974935,"b":0.004363577757359086},{"period_kyr":123.8461774280429,"label":"eccentricity g4−g2","a":0.00043530659007362527,"b":0.007735868213717512},{"period_kyr":130.69097366197656,"label":"eccentricity g3−g2","a":0.003434795162201869,"b":-0.01548160717282774},{"period_kyr":134.49598078775747,"label":"eccentricity z5−g2","a":-0.002674843271039882,"b":-0.01965653360618317},{"period_kyr":405.6256163323513,"label":"eccentricity fundamental g₂−g₅","a":0.04090553415162765,"b":-0.08954032654679996},{"period_kyr":202.81280816617564,"label":"climate-internal harmonic (g₂−g₅)/2","a":0.006897984812984875,"b":-0.0012436402634086845},{"period_kyr":135.20853877745043,"label":"climate-internal harmonic (g₂−g₅)/3","a":0.0010627090126314764,"b":-0.007315110344460395}],"L2":[],"L3":[{"label":"PETM","t_kyr":56000,"beta":1.2940570636469433},{"label":"EOT","t_kyr":34000,"beta":-0.651938379643522},{"label":"Mi-1","t_kyr":23000,"beta":-0.7981219419366887},{"label":"MMCT","t_kyr":14000,"beta":0.875197090932599},{"label":"iNHG","t_kyr":2700,"beta":1.3323528555767734},{"label":"MPT","t_kyr":1000,"beta":-1.335182279280602}],"denormalization":{"y_mean":-1.6966918546618317e-16,"y_std":0.5116419176812778,"trend_slope":0.000014091551862757799,"trend_intercept":0.17563680335949733},"r2":{"l1_only":0.006340691329060011,"l1_l2":0.006340691329060011,"l1_l2_l3":0.34855578574981616,"delta_l2":0,"delta_l3":0.34221509442075615}},"epica-co2":{"label":"EPICA CO₂","regime":"epica-co2","window_kyr":[0,800],"n_samples":801,"intercept":0.04772250565346167,"L1":[{"period_kyr":19.001545641452537,"label":"climatic precession p+g4","a":-0.05757052391935907,"b":-0.09305698714821553},{"period_kyr":19.15547239857139,"label":"climatic precession p+g3","a":0.09859259619848049,"b":-0.029102368881593788},{"period_kyr":22.44529598528639,"label":"climatic precession p+g2","a":-0.007485074899471478,"b":-0.07760949021966575},{"period_kyr":23.19329171671584,"label":"climatic precession p+g1","a":-0.09094210739116673,"b":0.12567998232492333},{"period_kyr":23.76005899662999,"label":"climatic precession p+g5","a":0.1129816995567211,"b":0.04658363645006909},{"period_kyr":27.268906147417248,"label":"obliquity p+s7","a":0.0008573046772781812,"b":-0.08271460205364659},{"period_kyr":28.842415865333038,"label":"obliquity p+s1","a":-0.13418427589390933,"b":-0.3065802210556564},{"period_kyr":29.004791811714906,"label":"obliquity p+ζ14","a":0.30264371068997126,"b":0.372269555996678},{"period_kyr":29.617226328291668,"label":"obliquity p+ζ9","a":-0.10400040514362394,"b":0.06071412030976109},{"period_kyr":29.8091695546043,"label":"obliquity p+s2","a":0.07674807125272162,"b":0.08742294868218459},{"period_kyr":39.55607777721681,"label":"obliquity p+s4","a":0.25267469088322486,"b":-0.21264732735656397},{"period_kyr":40.2292898387119,"label":"obliquity p+ζ4","a":0.1985065673388669,"b":0.32022925390857215},{"period_kyr":40.923969082915576,"label":"obliquity p+s3","a":0.33407907444977286,"b":0.07638772763941364},{"period_kyr":41.644588622327085,"label":"obliquity p+ζ7","a":-0.18111984141723292,"b":0.19412014579724163},{"period_kyr":53.61752871496249,"label":"obliquity p+s6","a":-0.102421483378701,"b":0.07238187610949562},{"period_kyr":94.8779191670953,"label":"eccentricity g4−g5","a":-0.6218471138338892,"b":1.1004457556552618},{"period_kyr":96.84902648762181,"label":"eccentricity z6−g5","a":-0.2362041415387267,"b":-0.01716911823443268},{"period_kyr":98.8438689567201,"label":"eccentricity g3−g5","a":-0.2772633452327795,"b":-0.3987515044009958},{"period_kyr":101.00506143827943,"label":"eccentricity z5−g5","a":-0.21762888581514123,"b":-0.3914542724050446},{"period_kyr":103.12379754572216,"label":"eccentricity z7−g5","a":0.0028810008532560716,"b":-0.3340823690226681},{"period_kyr":105.13718703798536,"label":"eccentricity g4−g1","a":0.2468045673913495,"b":-0.36243987669955635},{"period_kyr":110.0293064910417,"label":"eccentricity g3−g1","a":0.5954725578323181,"b":-0.6282748203534358},{"period_kyr":123.8461774280429,"label":"eccentricity g4−g2","a":0.31357278944415057,"b":-0.8333137268990354},{"period_kyr":130.69097366197656,"label":"eccentricity g3−g2","a":0.21264050907592402,"b":-0.3953396925919381},{"period_kyr":134.49598078775747,"label":"eccentricity z5−g2","a":0.32440609087814,"b":0.1512223862227542},{"period_kyr":405.6256163323513,"label":"eccentricity fundamental g₂−g₅","a":0.27155662596449115,"b":0.10051237650574972},{"period_kyr":202.81280816617564,"label":"climate-internal harmonic (g₂−g₅)/2","a":0.2223336292381805,"b":-0.14842010272579745},{"period_kyr":135.20853877745043,"label":"climate-internal harmonic (g₂−g₅)/3","a":0.39588643435898874,"b":0.28785664530604516}],"L2":[],"L3":[],"denormalization":{"y_mean":2.980553797944989e-14,"y_std":25.51737494167102,"trend_slope":-0.006455378442643299,"trend_intercept":227.89326737247322},"r2":{"l1_only":0.723825049396513,"l1_l2":0.723825049396513,"l1_l2_l3":0.723825049396513,"delta_l2":0,"delta_l3":0},"carbon_amplification_ratios":{"19.0015":{"period_kyr":19.001545641452537,"lr04_post_mpt_amp":0.15651579152862083,"epica_amp":0.10942562808342772,"ratio":0.699134745540471,"label":"climatic precession p+g4"},"19.1555":{"period_kyr":19.15547239857139,"lr04_post_mpt_amp":0.06619407599203991,"epica_amp":0.1027980928795714,"ratio":1.5529802529751038,"label":"climatic precession p+g3"},"22.4453":{"period_kyr":22.44529598528639,"lr04_post_mpt_amp":0.1709386439214186,"epica_amp":0.07796960509331242,"ratio":0.4561262643990288,"label":"climatic precession p+g2"},"23.1933":{"period_kyr":23.19329171671584,"lr04_post_mpt_amp":0.12026312613825264,"epica_amp":0.1551319594859149,"ratio":1.2899378593200512,"label":"climatic precession p+g1"},"23.7601":{"period_kyr":23.76005899662999,"lr04_post_mpt_amp":0.19581944699695486,"epica_amp":0.12220842695836241,"ratio":0.6240872846518806,"label":"climatic precession p+g5"},"27.2689":{"period_kyr":27.268906147417248,"lr04_post_mpt_amp":0.045692133286174004,"epica_amp":0.08271904474909511,"ratio":1.8103563742804079,"label":"obliquity p+s7"},"28.8424":{"period_kyr":28.842415865333038,"lr04_post_mpt_amp":0.28637522794913195,"epica_amp":0.33465930711651803,"ratio":1.1686042452525351,"label":"obliquity p+s1"},"29.0048":{"period_kyr":29.004791811714906,"lr04_post_mpt_amp":0.1965592169991406,"epica_amp":0.47976852537672665,"ratio":2.440834536794193,"label":"obliquity p+ζ14"},"29.6172":{"period_kyr":29.617226328291668,"lr04_post_mpt_amp":0.6296265178297925,"epica_amp":0.12042544861874531,"ratio":0.19126489308904876,"label":"obliquity p+ζ9"},"29.8092":{"period_kyr":29.8091695546043,"lr04_post_mpt_amp":0.5572679872024051,"epica_amp":0.11633158813194598,"ratio":0.20875340196007566,"label":"obliquity p+s2"},"39.5561":{"period_kyr":39.55607777721681,"lr04_post_mpt_amp":0.31993686286555395,"epica_amp":0.3302474606182808,"ratio":1.032226976473979,"label":"obliquity p+s4"},"40.2293":{"period_kyr":40.2292898387119,"lr04_post_mpt_amp":1.0063809392570864,"epica_amp":0.3767646909352054,"ratio":0.37437582155851873,"label":"obliquity p+ζ4"},"40.9240":{"period_kyr":40.923969082915576,"lr04_post_mpt_amp":1.1813932750701814,"epica_amp":0.3427009088390781,"ratio":0.29008198715090855,"label":"obliquity p+s3"},"41.6446":{"period_kyr":41.644588622327085,"lr04_post_mpt_amp":0.6447787786198793,"epica_amp":0.2654939320574878,"ratio":0.4117597242045805,"label":"obliquity p+ζ7"},"53.6175":{"period_kyr":53.61752871496249,"lr04_post_mpt_amp":0.03496072159426824,"epica_amp":0.1254164911270599,"ratio":3.587354190870642,"label":"obliquity p+s6"},"94.8779":{"period_kyr":94.8779191670953,"lr04_post_mpt_amp":2.1956126593701737,"epica_amp":1.2639915720143144,"ratio":0.5756896903559022,"label":"eccentricity g4−g5"},"96.8490":{"period_kyr":96.84902648762181,"lr04_post_mpt_amp":1.2946071974982711,"epica_amp":0.23682731071604635,"ratio":0.18293372010730122,"label":"eccentricity z6−g5"},"98.8439":{"period_kyr":98.8438689567201,"lr04_post_mpt_amp":1.2272659053208135,"epica_amp":0.4856724460701151,"ratio":0.39573530395041645,"label":"eccentricity g3−g5"},"101.0051":{"period_kyr":101.00506143827943,"lr04_post_mpt_amp":0.2488357426916047,"epica_amp":0.44788255081583905,"ratio":1.7999124481522881,"label":"eccentricity z5−g5"},"103.1238":{"period_kyr":103.12379754572216,"lr04_post_mpt_amp":1.0637727201187808,"epica_amp":0.33409479112628293,"ratio":0.3140659511262687,"label":"eccentricity z7−g5"},"105.1372":{"period_kyr":105.13718703798536,"lr04_post_mpt_amp":0.9941347743278315,"epica_amp":0.438491914072792,"ratio":0.44107894160454386,"label":"eccentricity g4−g1"},"110.0293":{"period_kyr":110.0293064910417,"lr04_post_mpt_amp":1.019383496922233,"epica_amp":0.865630878043006,"ratio":0.8491709750614527,"label":"eccentricity g3−g1"},"123.8462":{"period_kyr":123.8461774280429,"lr04_post_mpt_amp":0.41090132345975183,"epica_amp":0.8903592879945408,"ratio":2.166844537023625,"label":"eccentricity g4−g2"},"130.6910":{"period_kyr":130.69097366197656,"lr04_post_mpt_amp":1.059107223123218,"epica_amp":0.4488980492703841,"ratio":0.42384570652499337,"label":"eccentricity g3−g2"},"134.4960":{"period_kyr":134.49598078775747,"lr04_post_mpt_amp":0.2597846031387007,"epica_amp":0.3579211112713804,"ratio":1.377761064154691,"label":"eccentricity z5−g2"},"405.6256":{"period_kyr":405.6256163323513,"lr04_post_mpt_amp":0.09278051954830373,"epica_amp":0.28956128701201084,"ratio":3.1209276303012983,"label":"eccentricity fundamental g₂−g₅"},"202.8128":{"period_kyr":202.81280816617564,"lr04_post_mpt_amp":0.18105436966901248,"epica_amp":0.2673214723574539,"ratio":1.4764707023981098,"label":"climate-internal harmonic (g₂−g₅)/2"},"135.2085":{"period_kyr":135.20853877745043,"lr04_post_mpt_amp":0.7081496012572424,"epica_amp":0.4894767789755957,"ratio":0.6912053302107113,"label":"climate-internal harmonic (g₂−g₅)/3"}}},"cenco2pip":{"label":"CenCO2PIP CO₂ (deep-time)","regime":"cenco2pip","window_kyr":[0,66000],"n_samples":661,"intercept":0.012710823332535535,"L1":[{"period_kyr":19.001545641452537,"label":"climatic precession p+g4","a":-0.0020338617801976266,"b":0.00022208633139098044},{"period_kyr":19.15547239857139,"label":"climatic precession p+g3","a":-0.0026329706784686893,"b":-0.0010668787332187707},{"period_kyr":22.44529598528639,"label":"climatic precession p+g2","a":-0.0005773515330844987,"b":0.00003291307390918333},{"period_kyr":23.19329171671584,"label":"climatic precession p+g1","a":-0.0009279217927520931,"b":0.00043826337409753457},{"period_kyr":23.76005899662999,"label":"climatic precession p+g5","a":0.0003935664632165048,"b":-0.00013247538208650822},{"period_kyr":27.268906147417248,"label":"obliquity p+s7","a":-0.00034673240956895274,"b":0.0004492328879011475},{"period_kyr":28.842415865333038,"label":"obliquity p+s1","a":-0.0003814047506930234,"b":0.00024647169666917456},{"period_kyr":29.004791811714906,"label":"obliquity p+ζ14","a":-0.0006561438457021104,"b":-0.000009234244011747765},{"period_kyr":29.617226328291668,"label":"obliquity p+ζ9","a":-0.0007415078762596315,"b":0.00048539168484503263},{"period_kyr":29.8091695546043,"label":"obliquity p+s2","a":-0.00032575297135806897,"b":-0.0002768928850926805},{"period_kyr":39.55607777721681,"label":"obliquity p+s4","a":-0.0005578089164868538,"b":0.000002532301888910431},{"period_kyr":40.2292898387119,"label":"obliquity p+ζ4","a":-0.0005369607748816922,"b":-0.00018901440570610276},{"period_kyr":40.923969082915576,"label":"obliquity p+s3","a":-0.0005310699479013138,"b":-0.00047953946468817354},{"period_kyr":41.644588622327085,"label":"obliquity p+ζ7","a":-0.00016030653793037454,"b":-0.00045444969546296066},{"period_kyr":53.61752871496249,"label":"obliquity p+s6","a":-0.0033519053865770287,"b":-0.0032382954142333026},{"period_kyr":94.8779191670953,"label":"eccentricity g4−g5","a":-0.03132542098776035,"b":-0.03179411879600634},{"period_kyr":96.84902648762181,"label":"eccentricity z6−g5","a":0.031647295012709374,"b":0.03578118100828458},{"period_kyr":98.8438689567201,"label":"eccentricity g3−g5","a":0.20006403256246674,"b":-0.16437243706923396},{"period_kyr":101.00506143827943,"label":"eccentricity z5−g5","a":0.08062540387177358,"b":0.09521995627738682},{"period_kyr":103.12379754572216,"label":"eccentricity z7−g5","a":-0.02491796986013184,"b":-0.014039062779737035},{"period_kyr":105.13718703798536,"label":"eccentricity g4−g1","a":0.012133958115513273,"b":0.03860990013383617},{"period_kyr":110.0293064910417,"label":"eccentricity g3−g1","a":-0.002137273435450621,"b":-0.015874644486902144},{"period_kyr":123.8461774280429,"label":"eccentricity g4−g2","a":-0.00046859356446693305,"b":0.0007067808363629786},{"period_kyr":130.69097366197656,"label":"eccentricity g3−g2","a":-0.00011035789585776747,"b":0.0017566689342053362},{"period_kyr":134.49598078775747,"label":"eccentricity z5−g2","a":0.0004433859046877901,"b":0.00035608509416867537},{"period_kyr":405.6256163323513,"label":"eccentricity fundamental g₂−g₅","a":0.00010765685191621403,"b":-0.00009531205076887192},{"period_kyr":202.81280816617564,"label":"climate-internal harmonic (g₂−g₅)/2","a":-0.0005633780713438881,"b":0.0001369956977748804},{"period_kyr":135.20853877745043,"label":"climate-internal harmonic (g₂−g₅)/3","a":-0.0013808240665499367,"b":0.0017651150118173323}],"L2":[],"L3":[{"label":"PETM","t_kyr":56000,"beta":-2.2502408814529162},{"label":"EOT","t_kyr":34000,"beta":1.5689079946773803},{"label":"Mi-1","t_kyr":23000,"beta":-0.21259643895733238},{"label":"MMCT","t_kyr":14000,"beta":-0.3699202105260202},{"label":"iNHG","t_kyr":2700,"beta":-0.24227399068087263},{"label":"MPT","t_kyr":1000,"beta":0.24998745524516897}],"denormalization":{"y_mean":-2.091425032821257e-13,"y_std":209.18154000668048,"trend_slope":0.013251639299066168,"trend_intercept":214.15971983891893},"r2":{"l1_only":0.047324371008972466,"l1_l2":0.047324371008972466,"l1_l2_l3":0.6918021804874894,"delta_l2":0,"delta_l3":0.644477809478517}}},"meta":{"script":"export_climate_formula_browser.py","consumer":"src/script.js — Climate Formula Explorer modal","stitched_lr04_r2":0.9214009610608173,"stitched_lr04_note":"R² of the three-regime stitched curve (post-MPT / iNHG-MPT / pre-iNHG blocks) against the raw gridded LR04 stack, 0-5320 kyr"}},
|
|
29
|
+
DT_ANCHOR: {"deltaTStartSeconds":56.07581799402068,"usnoTargetLodSeconds":86400.0012},
|
|
30
|
+
DT_RESONATOR: {"display_name":"Core-mantle swing","driver":"Resonator","functional_class":"episode (2-kick IMPULSE-CONSISTENT windowed damped oscillation — sin-only kicks, displacement-continuous; zero before first kick)","kick_epochs_year":[-1600,1600],"kick_coefficients_s":[{"cos":0,"sin":621.6253091372357},{"cos":0,"sin":1.2850007806442048}],"T0_lattice_n":685,"T0_yr":3916.1109489051096,"Q":1.8,"drive_tones":[{"pair":"bond-hallstatt","dn":726,"period_yr":3694.9531680440773,"phi_locked_rad":-0.4616152283022974,"amp_s":0,"phase_convention":"cos(2π·dn/8H·y − φ_locked), kick-1-envelope-shared","retired":"RETIRED (plan 06 D7 follow-up, 2026-09): shipped at amplitude 0 — measured to buy nothing once the GIA channel became the lagged response (kicks-only 11.89 / 21.04 s vs all three 12.04 / 21.34 s); dn/phase kept as the convention for the diagnostic column (DT_RESONATOR_COMPONENTS)."}],"rms_s":21.41469844571876,"raw_at_j2000_s":-83.11960900896855,"lod_raw_at_j2000_s_per_day":0.0004964512181330436,"deep_time_checks_s":{"900":-245.8439379884609,"2000":-82.32559425279462,"5000":5.334235000224568,"100000":-1.545960510634632e-17,"-100000":0,"-5000":0,"-801":0},"regeneration_rule":"drive-tone menu = Δn difference tones of the ACTIVE flag set (any count); refit this script after any stack change (3rd/5th cycle)","status":"JOINT WORLD SHIPPED (--joint --write): the two impulse kicks from the joint equality-constrained fit, the drive tone retired at amplitude 0 (plan 06 D7 follow-up); phases/epochs/T0/Q remain the Stage-1/3 convention. Default-ON.","impulse_consistent":true},
|
|
31
|
+
DT_STACK: {"bond":{"lattice_n":1830,"period_yr":1465.8666666666666,"cos_coeff_s":165.17830836273438,"sin_coeff_s":329.72368120425097,"raw_at_j2000_s":139.42483205973076,"amplitude_s":368.7839197964807,"phase_deg":63.39097186679068,"source":"Stage D anchored fit (USNO LOD constraint active)","joint_mode":true},"hallstatt":{"lattice_n":1104,"period_yr":2429.8333333333335,"cos_coeff_s":-63.68853392916495,"sin_coeff_s":48.41250505761507,"raw_at_j2000_s":-71.6300451611975,"amplitude_s":80,"phase_deg":142.75990910530456,"target_amp_source":"CAPPED from anchored quad-fit free amp 100.73 s → 80 s prior","joint_mode":true},"jose5":{"lattice_n":2989,"period_yr":897.469387755102,"cos_coeff_s":-41.0905713231876,"sin_coeff_s":28.487979014560363,"raw_at_j2000_s":22.691156700635617,"amplitude_s":49.99999999999999,"phase_deg":145.26653774170026,"target_amp_source":"CAPPED from anchored quad-fit free amp 86.44 s → 50 s prior","joint_mode":true},"jose4":{"lattice_n":3749,"period_yr":715.5337423312883,"cos_coeff_s":38.291732965080044,"sin_coeff_s":-32.15187687415778,"raw_at_j2000_s":41.578595054682985,"amplitude_s":50,"phase_deg":-40.018695741432126,"target_amp_source":"unconstrained: quad-fit free amp 47.06 s (below 50 s prior — no cap applied)","joint_mode":true}},
|
|
32
32
|
MEEUS_DISTANCE_TERMS: {"meanKm":385000.56,"terms":[[0,0,1,0,-20905355],[2,0,-1,0,-3699111],[2,0,0,0,-2955968],[0,0,2,0,-569925],[0,1,0,0,48888],[0,0,0,2,-3149],[2,0,-2,0,246158],[2,-1,-1,0,-152138],[2,0,1,0,-170733],[2,-1,0,0,-204586],[0,1,-1,0,-129620],[1,0,0,0,108743],[0,1,1,0,104755],[2,0,0,-2,10321],[0,0,1,2,0],[0,0,1,-2,79661],[4,0,-1,0,-34782],[0,0,3,0,-23210],[4,0,-2,0,-21636],[2,1,-1,0,24208],[2,1,0,0,30824],[1,0,-1,0,-8379],[1,1,0,0,-16675],[2,-1,1,0,-12831],[2,0,2,0,-10445],[4,0,0,0,-11650],[2,0,-3,0,14403],[0,1,-2,0,-7003],[2,0,-1,2,0],[2,-1,-2,0,10056],[1,0,1,0,6322],[2,-2,0,0,-9884],[0,1,2,0,5751],[0,2,0,0,0],[2,-2,-1,0,-4950],[2,0,1,-2,4130],[2,0,0,2,0],[4,-1,-1,0,-3958],[0,0,2,2,0],[3,0,-1,0,3258],[2,1,1,0,2616],[4,-1,-2,0,-1897],[0,2,-1,0,-2117],[2,2,-1,0,2354],[2,1,-2,0,0],[2,-1,0,-2,0],[4,0,1,0,-1423],[0,0,4,0,-1117],[4,-1,0,0,-1571],[1,0,-2,0,-1739],[2,1,0,-2,0],[0,0,2,-2,-4421],[1,1,1,0,0],[3,0,-2,0,0],[4,0,-3,0,0],[2,-1,2,0,0],[0,2,1,0,1165],[1,1,-1,0,0],[2,0,3,0,0],[2,0,-1,-2,8752]]},
|
|
33
33
|
MEEUS_LATITUDE_TERMS: [[0,0,0,1,5128122],[0,0,1,1,280602],[0,0,1,-1,277693],[2,0,0,-1,173237],[2,0,-1,1,55413],[2,0,-1,-1,46271],[2,0,0,1,32573],[0,0,2,1,17198],[2,0,1,-1,9266],[0,0,2,-1,8822],[2,-1,0,-1,8216],[2,0,-2,-1,4324],[2,0,1,1,4200],[2,1,0,-1,-3359],[2,-1,-1,1,2463],[2,-1,0,1,2211],[2,-1,-1,-1,2065],[0,1,-1,-1,-1870],[4,0,-1,-1,1828],[0,1,0,1,-1794],[0,0,0,3,-1749],[0,1,-1,1,-1565],[1,0,0,1,-1491],[0,1,1,1,-1475],[0,1,1,-1,-1410],[0,1,0,-1,-1344],[1,0,0,-1,-1335],[0,0,3,1,1107],[4,0,0,-1,1021],[4,0,-1,1,833],[0,0,1,-3,777],[4,0,-2,1,671],[2,0,0,-3,607],[2,0,2,-1,596],[2,-1,1,-1,491],[2,0,-2,1,-451],[0,0,3,-1,439],[2,0,2,1,422],[2,0,-3,-1,421],[2,1,-1,1,-366],[2,1,0,1,-351],[4,0,0,1,331],[2,-1,1,1,315],[2,-2,0,-1,302],[0,0,1,3,-283],[2,1,1,-1,-229],[1,1,0,-1,223],[1,1,0,1,223],[0,1,-2,-1,-220],[2,1,-1,-1,-220],[1,0,1,1,-185],[2,-1,-2,-1,181],[0,1,2,1,-177],[4,0,-2,-1,176],[4,-1,-1,-1,166],[1,0,1,-1,-164],[4,0,1,-1,132],[1,0,-1,-1,-119],[4,-1,0,-1,115],[2,-2,0,1,107]],
|
|
34
34
|
MEEUS_LONGITUDE_TERMS: [[0,0,1,0,6288774],[2,0,-1,0,1274027],[2,0,0,0,658314],[0,0,2,0,213618],[0,1,0,0,-185116],[0,0,0,2,-114332],[2,0,-2,0,58793],[2,-1,-1,0,57066],[2,0,1,0,53322],[2,-1,0,0,45758],[0,1,-1,0,-40923],[1,0,0,0,-34720],[0,1,1,0,-30383],[2,0,0,-2,15327],[0,0,1,2,-12528],[0,0,1,-2,10980],[4,0,-1,0,10675],[0,0,3,0,10034],[4,0,-2,0,8548],[2,1,-1,0,-7888],[2,1,0,0,-6766],[1,0,-1,0,-5163],[1,1,0,0,4987],[2,-1,1,0,4036],[2,0,2,0,3994],[4,0,0,0,3861],[2,0,-3,0,3665],[0,1,-2,0,-2689],[2,0,-1,2,-2602],[2,-1,-2,0,2390],[1,0,1,0,-2348],[2,-2,0,0,2236],[0,1,2,0,-2120],[0,2,0,0,-2069],[2,-2,-1,0,2048],[2,0,1,-2,-1773],[2,0,0,2,-1595],[4,-1,-1,0,1215],[0,0,2,2,-1110],[3,0,-1,0,-892],[2,1,1,0,-810],[4,-1,-2,0,759],[0,2,-1,0,-713],[2,2,-1,0,-700],[2,1,-2,0,691],[2,-1,0,-2,596],[4,0,1,0,549],[0,0,4,0,537],[4,-1,0,0,520],[1,0,-2,0,-487],[2,1,0,-2,-399],[0,0,2,-2,-381],[1,1,1,0,351],[3,0,-2,0,-340],[4,0,-3,0,330],[2,-1,2,0,327],[0,2,1,0,-323],[1,1,-1,0,299],[2,0,3,0,294]],
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
export const CONSTANTS_HASH = "da713fc2d846767d";
|
|
40
40
|
|
|
41
41
|
/** Model version label — single source: public/input/model-version.json (§10 two-axis scheme). */
|
|
42
|
-
export const MODEL_VERSION = "v27.
|
|
42
|
+
export const MODEL_VERSION = "v27.2";
|
|
43
43
|
|
|
44
44
|
/** Canonical preprint DOI — single source: public/input/model-version.json. */
|
|
45
45
|
export const PREPRINT_DOI = "10.21203/rs.3.rs-8758810/v4";
|
|
@@ -90,6 +90,7 @@ function createCoRotatingAnchoredModeSum(modes, anchor) {
|
|
|
90
90
|
* axialPrecessionYearsAtYearFn?: (year: number) => number,
|
|
91
91
|
* solarTorqueShareJ2000?: number,
|
|
92
92
|
* dynamicalEllipticityRatioAtYearFn?: (year: number) => number,
|
|
93
|
+
* spinCheckpoints?: { spacingYr: number, checkpoints: ReadonlyArray<{t: number, s: number[]}> },
|
|
93
94
|
* }} deps — mode tables from the governed deep artifact (choose the ζ tier
|
|
94
95
|
* per consumer: era = its own 8-term extraction, deep = the 16-term
|
|
95
96
|
* table; NEVER a slice); anchors from the chain artifact's one home; the
|
|
@@ -115,6 +116,14 @@ function createDeepOrbitalHistory({
|
|
|
115
116
|
axialPrecessionYearsJ2000, obliquityJ2000Deg,
|
|
116
117
|
axialPrecessionYearsAtYearFn,
|
|
117
118
|
solarTorqueShareJ2000, dynamicalEllipticityRatioAtYearFn,
|
|
119
|
+
// PLAN 24 — the checkpoint bank: the walk's exact state (ŝ, t) every `spacingYr`
|
|
120
|
+
// from J2000 over the model's domain, written by the continuous walk
|
|
121
|
+
// (tools/verify/spin-axis-bank.js, data/spin-axis-checkpoints.json). A build
|
|
122
|
+
// seats its walk on the nearest checkpoint on the near side of the query and
|
|
123
|
+
// walks at most one spacing — the same step sequence as the continuous walk,
|
|
124
|
+
// so every node is bit-identical (the purity gate's bank row). Absent, the
|
|
125
|
+
// walk runs from S0 as before.
|
|
126
|
+
spinCheckpoints,
|
|
118
127
|
}) {
|
|
119
128
|
const D2R = Math.PI / 180, R2D = 180 / Math.PI;
|
|
120
129
|
|
|
@@ -551,23 +560,91 @@ function createDeepOrbitalHistory({
|
|
|
551
560
|
};
|
|
552
561
|
}
|
|
553
562
|
|
|
554
|
-
|
|
563
|
+
// ── THE STEP SCHEDULE — ONE place, the generator's and every runtime's (plan 24) ──
|
|
564
|
+
// 5-yr RK4 inside ±50 kyr (the certified-precision zone, unchanged). Beyond:
|
|
565
|
+
// the largest divisor of 1000 up to 50 yr that keeps ≥ 100 steps per
|
|
566
|
+
// precession cycle of the torque period at the 1000-yr cell's near edge —
|
|
567
|
+
// 50 yr over the whole ±500-Myr validity domain and to ~3.5 Ga (T_p ≥ 5 kyr),
|
|
568
|
+
// shrinking toward genesis (T_p 598 yr at 4.4 Ga → 5-yr steps). Constant per
|
|
569
|
+
// 1000-yr cell and an integer, so the walk lands exactly on every grid node
|
|
570
|
+
// (1000, 5000) and on the bank's (250 kyr), and t stays exact.
|
|
571
|
+
// MEASURED (plan 24, 2026-10): the former fixed 250-yr step was outside RK4's
|
|
572
|
+
// asymptotic regime beyond a few Myr — against a 50-yr walk the obliquity
|
|
573
|
+
// parted by 0.8″ at 5 Ma, 318″ at 100 Ma, 0.12° at 500 Ma, 2° at 2.46 Ga, and
|
|
574
|
+
// at 4 Ga the axis had collapsed onto the orbit normal (ε 0.07°); the equinox
|
|
575
|
+
// phase by 9° at 100 Ma. The 50-yr walk IS converged: 0.10″ / 10″ at 100 Ma
|
|
576
|
+
// against a 10-yr walk (ratios 3,000–30,000 where fourth order predicts 625).
|
|
577
|
+
// STRICT < so the walk switches AT the ±50,000 boundary (a grid node).
|
|
578
|
+
const STEP_CANDIDATES = [50, 25, 20, 10, 5, 4, 2, 1];
|
|
579
|
+
let stepCellKey = NaN, stepCellH = 5;
|
|
580
|
+
const hStepAt = (/** @type {number} */ t) => {
|
|
581
|
+
const a = Math.abs(t);
|
|
582
|
+
if (a < 50000) return 5;
|
|
583
|
+
const cellKey = (t < 0 ? -1 : 1) * Math.floor(a / 1000) * 1000;
|
|
584
|
+
if (cellKey === stepCellKey) return stepCellH;
|
|
585
|
+
const Tp = axialPrecessionYearsAtYearFn ? axialPrecessionYearsAtYearFn(2000 + cellKey) : axialPrecessionYearsJ2000;
|
|
586
|
+
let h = 1;
|
|
587
|
+
for (const c of STEP_CANDIDATES) if (c * 100 <= Tp) { h = c; break; }
|
|
588
|
+
stepCellKey = cellKey; stepCellH = h;
|
|
589
|
+
return h;
|
|
590
|
+
};
|
|
591
|
+
/** One RK4 walk from (s, t) to tEnd (|tEnd| ≥ |t|, same side of J2000), the schedule's steps
|
|
592
|
+
* — or a FIXED step for a diagnostic (the generator's convergence row); returns the end state.
|
|
593
|
+
* @param {number[]} s @param {number} t @param {number} tEnd @param {number} [fixedStepYr]
|
|
594
|
+
* @returns {{ s: number[], t: number }} */
|
|
595
|
+
function walkFrom(s, t, tEnd, fixedStepYr) {
|
|
596
|
+
const dir = tEnd < t ? -1 : 1;
|
|
597
|
+
while (dir < 0 ? t > tEnd : t < tEnd) {
|
|
598
|
+
const h = fixedStepYr ?? hStepAt(t);
|
|
599
|
+
s = rk4(s, t, dir * h);
|
|
600
|
+
t += dir * h;
|
|
601
|
+
}
|
|
602
|
+
return { s, t };
|
|
603
|
+
}
|
|
604
|
+
/** The continuous walk's states at every multiple of spacingYr from J2000 to tEndYr (one
|
|
605
|
+
* direction) — the bank generator's instrument; no grid is built.
|
|
606
|
+
* @param {number} tEndYr @param {number} spacingYr @returns {Array<{t: number, s: number[]}>} */
|
|
607
|
+
function recordStates(tEndYr, spacingYr) {
|
|
608
|
+
const dir = tEndYr < 0 ? -1 : 1;
|
|
609
|
+
/** @type {Array<{t: number, s: number[]}>} */ const out = [];
|
|
610
|
+
let s = S0A, t = 0;
|
|
611
|
+
while (dir < 0 ? t > tEndYr : t < tEndYr) {
|
|
612
|
+
const h = hStepAt(t);
|
|
613
|
+
s = rk4(s, t, dir * h);
|
|
614
|
+
t += dir * h;
|
|
615
|
+
if (t % spacingYr === 0) out.push({ t, s: s.slice() });
|
|
616
|
+
}
|
|
617
|
+
return out;
|
|
618
|
+
}
|
|
619
|
+
// The bank, indexed by t (years from J2000; both directions).
|
|
620
|
+
/** @type {Map<number, number[]> | null} */
|
|
621
|
+
const bank = spinCheckpoints && spinCheckpoints.checkpoints ? new Map(spinCheckpoints.checkpoints.map((/** @type {{t: number, s: number[]}} */ c) => [c.t, c.s])) : null;
|
|
622
|
+
const bankSpacing = spinCheckpoints && bank ? spinCheckpoints.spacingYr : 0;
|
|
623
|
+
|
|
624
|
+
/** The factory's walks, one per grid step: the shared node grid and, per direction, the
|
|
625
|
+
* COVERED SEGMENTS — contiguous node ranges [from, to] (|t|) each with the live frontier
|
|
626
|
+
* state at `to` (plan 24: a frontier per direction became segments, so a seated walk can
|
|
627
|
+
* start anywhere and a later nearer query fills its own gap).
|
|
628
|
+
* @typedef {{ from: number, to: number, s: number[], t: number }} Seg
|
|
629
|
+
* @type {Map<number, { grid: Map<number, any>, segs: Record<number, Seg[]> }>} */
|
|
555
630
|
const walks = new Map();
|
|
556
631
|
/**
|
|
557
|
-
*
|
|
558
|
-
*
|
|
559
|
-
*
|
|
632
|
+
* Return a sampler on a stepYr grid over [min(t0,t1,0), max(t0,t1,0)]:
|
|
633
|
+
* the nodes around the far ends are built now (linear interpolation of the
|
|
634
|
+
* scalars, C1 on the angles); any node the sampler meets missing is built on
|
|
635
|
+
* demand. t in years from J2000, negative = past.
|
|
560
636
|
* @param {number} t0Yr @param {number} t1Yr @param {number} stepYr
|
|
561
637
|
*/
|
|
562
638
|
function build(t0Yr, t1Yr, stepYr) {
|
|
563
639
|
const tMin = Math.min(t0Yr, t1Yr, 0), tMax = Math.max(t0Yr, t1Yr, 0);
|
|
564
|
-
//
|
|
565
|
-
//
|
|
566
|
-
//
|
|
567
|
-
|
|
568
|
-
|
|
640
|
+
// The stepping contract: beyond the ±50-kyr fine zone the walk steps on
|
|
641
|
+
// STEP_CANDIDATES, every one a divisor of 100, so a grid there must be
|
|
642
|
+
// 100-aligned (the samplers' 1000/5000, the series generator's 500-yr seam
|
|
643
|
+
// probe) or at() would meet missing keys. Fail loud, not subtly coarse.
|
|
644
|
+
if (Math.max(Math.abs(tMin), Math.abs(tMax)) > 50000 && stepYr % 100 !== 0) {
|
|
645
|
+
throw new Error(`deep-orbital-history: builds beyond ±50 kyr need stepYr % 100 === 0 (got ${stepYr})`);
|
|
569
646
|
}
|
|
570
|
-
// ONE WALK PER STEP
|
|
647
|
+
// ONE WALK PER GRID STEP, EXTENDED, NEVER RESTARTED (plan 13 A1, measured):
|
|
571
648
|
// every caller's tier routing asked for `build(span, -span, step)` and
|
|
572
649
|
// rebuilt from J2000 whenever a deeper epoch arrived, so the four deep
|
|
573
650
|
// fixture anchors (380…2460 Ma) walked ~49 million RK4 steps — 14 of the
|
|
@@ -575,56 +652,68 @@ function createDeepOrbitalHistory({
|
|
|
575
652
|
// ~5 million. The walk is a pure function of t from the fixed J2000 state
|
|
576
653
|
// S0, so continuing a stored walk from its last (s, t) yields the SAME
|
|
577
654
|
// step sequence as a fresh walk to the farther end: bit-identical nodes
|
|
578
|
-
// (the sampler-order-purity gate pins this).
|
|
579
|
-
//
|
|
580
|
-
//
|
|
655
|
+
// (the sampler-order-purity gate pins this). PLAN 24: the same purity lets
|
|
656
|
+
// a walk start from a BANKED state — a checkpoint IS the continuous walk's
|
|
657
|
+
// state at that t — so a query seats on the nearest checkpoint on its near
|
|
658
|
+
// side and walks at most one spacing (250 kyr: ~5,000 steps) instead of
|
|
659
|
+
// from J2000 (−4.43 Gyr: 17.7 million steps at the former step, ~90
|
|
660
|
+
// million at this one).
|
|
581
661
|
let w = walks.get(stepYr);
|
|
582
662
|
const S0 = S0A;
|
|
583
|
-
// D1-revised adaptive stepping: 5-yr RK4 near the era (the certified-
|
|
584
|
-
// precision zone), 250-yr beyond ±50 kyr — still 103 steps per
|
|
585
|
-
// precession cycle and ≥196 samples of the fastest ζ mode (49 kyr), so
|
|
586
|
-
// the integration stays deep in RK4's convergence regime while ±500 Myr
|
|
587
|
-
// becomes a seconds-class one-time build (measured: coarse-vs-fine
|
|
588
|
-
// agree to <1e-4° at ±1 Myr — the generator's regression gate).
|
|
589
|
-
// STRICT < so the walk switches AT the ±50,000 boundary (50,000 is
|
|
590
|
-
// 250-aligned; switching one fine-step later would leave the coarse walk
|
|
591
|
-
// permanently off-grid — measured: every key beyond ±50 kyr missing).
|
|
592
|
-
const hStepAt = (/** @type {number} */ t) => (Math.abs(t) < 50000 ? 5 : 250);
|
|
593
663
|
if (!w) {
|
|
594
|
-
w = { grid: new Map(),
|
|
664
|
+
w = { grid: new Map(), segs: { [-1]: [], [1]: [] } };
|
|
595
665
|
walks.set(stepYr, w);
|
|
596
666
|
}
|
|
597
667
|
const grid = w.grid;
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
668
|
+
// Each stored node also carries the equinox-node RATE (deg/yr) from a
|
|
669
|
+
// ±2.5-yr central difference on the integrator's own state — the C1
|
|
670
|
+
// (Hermite) interpolation input. Linear interpolation of the node
|
|
671
|
+
// longitude made the realized equinox rate PIECEWISE-CONSTANT per
|
|
672
|
+
// grid cell — the report's per-year precession column showed flat
|
|
673
|
+
// centuries with steps at the 1700/1800/1900/2000 cell edges
|
|
674
|
+
// (measured; the levels were the real wobble at 100-yr resolution,
|
|
675
|
+
// the staircase was this interpolation order).
|
|
676
|
+
// The perihelion longitude of date gets the same C1 treatment (2026-09,
|
|
677
|
+
// owner-found): linear interpolation of periOfDateDeg made the
|
|
678
|
+
// movement's year-over-year apsidal rate — the anomalistic year, the
|
|
679
|
+
// Prec. cell — a staircase of ±0.1 s across the 100-yr cells, reading
|
|
680
|
+
// 365.2596375 d at 2000.0 and 365.2596390 d at 2000.5, and the panel's
|
|
681
|
+
// apsidal beat 111,494 where the registry read 111,548.
|
|
682
|
+
const storeWithRate = (/** @type {number} */ key, /** @type {number[]} */ sv, /** @type {number} */ tv) => {
|
|
683
|
+
const smp = sampleAt(sv, tv);
|
|
684
|
+
const hR = 2.5;
|
|
685
|
+
const lp = eqLonsOnlyDeg(rk4(sv, tv, +hR), tv + hR);
|
|
686
|
+
const lm = eqLonsOnlyDeg(rk4(sv, tv, -hR), tv - hR);
|
|
687
|
+
smp.equinoxLonRateDegPerYr = (((lp.proj - lm.proj + 540) % 360) - 180) / (2 * hR);
|
|
688
|
+
smp.generalPrecessionLonRateDegPerYr = (((lp.general - lm.general + 540) % 360) - 180) / (2 * hR);
|
|
689
|
+
smp.periOfDateRateDegPerYr = (((lp.peri - lm.peri + 540) % 360) - 180) / (2 * hR);
|
|
690
|
+
grid.set(key, smp);
|
|
691
|
+
};
|
|
692
|
+
if (!grid.has(0)) storeWithRate(0, S0, 0);
|
|
693
|
+
/** Make the nodes up to |t| = need exist in direction dir: a covering segment, or a walk
|
|
694
|
+
* seated on the nearest start on the near side — an existing segment's frontier or a bank
|
|
695
|
+
* checkpoint, whichever is nearer — storing nodes at exact grid multiples on the way.
|
|
696
|
+
* @param {1|-1} dir @param {number} need */
|
|
697
|
+
const cover = (dir, need) => {
|
|
698
|
+
if (need === 0) return;
|
|
699
|
+
const segs = w.segs[dir];
|
|
700
|
+
for (const sg of segs) if (sg.from <= need && need <= sg.to) return;
|
|
701
|
+
/** @type {{ a: number, s: number[], t: number, seg: Seg | null }} */
|
|
702
|
+
let start = { a: 0, s: S0, t: 0, seg: null };
|
|
703
|
+
for (const sg of segs) if (sg.to <= need && sg.to > start.a) start = { a: sg.to, s: sg.s, t: sg.t, seg: sg };
|
|
704
|
+
if (bank) {
|
|
705
|
+
for (let a = Math.floor(need / bankSpacing) * bankSpacing; a > start.a; a -= bankSpacing) {
|
|
706
|
+
const cs = bank.get(dir * a);
|
|
707
|
+
if (cs) { start = { a, s: cs, t: dir * a, seg: null }; break; }
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
let s = start.s, t = start.t;
|
|
711
|
+
const end = dir * need;
|
|
712
|
+
// A seat on a bank checkpoint IS a walk state at an exact t: when that t is a grid
|
|
713
|
+
// multiple its node must be stored too — a query at the checkpoint itself (need ===
|
|
714
|
+
// the seat; the loop below then takes no step) found no node otherwise (measured:
|
|
715
|
+
// the fixture recorder at +250 kyr and the docs writer at −1 Myr threw).
|
|
716
|
+
if (start.seg === null && start.a > 0 && Math.abs(t - Math.round(t / stepYr) * stepYr) < 1e-6 && !grid.has(Math.round(t / stepYr) * stepYr)) storeWithRate(Math.round(t / stepYr) * stepYr, s, t);
|
|
628
717
|
while (dir < 0 ? t > end : t < end) {
|
|
629
718
|
const H_STEP = hStepAt(t);
|
|
630
719
|
s = rk4(s, t, dir * H_STEP);
|
|
@@ -632,19 +721,40 @@ function createDeepOrbitalHistory({
|
|
|
632
721
|
// Store ONLY at EXACT step multiples: an off-grid sample under a
|
|
633
722
|
// ROUNDED key collides with (or shifts) a real grid node (measured
|
|
634
723
|
// during C-3: build(+200, …, 1000) stored ε(+200) under key 0,
|
|
635
|
-
// clobbering the t = 0 sample by 94
|
|
636
|
-
// the
|
|
637
|
-
//
|
|
638
|
-
// guard below (coarse builds use 250-aligned grids; the 50,000-yr
|
|
639
|
-
// zone boundary is itself 250-aligned, so the walk stays on-grid).
|
|
724
|
+
// clobbering the t = 0 sample by 94″). Exact alignment is guaranteed
|
|
725
|
+
// by the schedule (integer divisors of 100 beyond the 50,000-yr zone
|
|
726
|
+
// boundary, itself a grid node) and the guard above.
|
|
640
727
|
if (Math.abs(t - Math.round(t / stepYr) * stepYr) < 1e-6) storeWithRate(Math.round(t / stepYr) * stepYr, s, t);
|
|
641
728
|
}
|
|
642
|
-
|
|
729
|
+
const to = Math.abs(t);
|
|
730
|
+
let seg = start.seg;
|
|
731
|
+
if (seg) { seg.to = to; seg.s = s; seg.t = t; } else { seg = { from: start.a, to, s, t }; segs.push(seg); }
|
|
732
|
+
// merge the segments this walk reached (their nodes are the same nodes)
|
|
733
|
+
for (let i = segs.length - 1; i >= 0; i--) {
|
|
734
|
+
const o = segs[i];
|
|
735
|
+
if (o === seg || o.from > seg.to || o.to < seg.from) continue;
|
|
736
|
+
if (o.to > seg.to) { seg.to = o.to; seg.s = o.s; seg.t = o.t; }
|
|
737
|
+
if (o.from < seg.from) seg.from = o.from;
|
|
738
|
+
segs.splice(i, 1);
|
|
739
|
+
}
|
|
740
|
+
};
|
|
741
|
+
for (const dir of /** @type {Array<1|-1>} */ ([-1, 1])) {
|
|
742
|
+
const end = dir < 0 ? tMin : tMax;
|
|
743
|
+
if (end !== 0) cover(dir, Math.abs(end));
|
|
643
744
|
}
|
|
745
|
+
/** The two grid nodes around tYr, built on demand. @param {number} k0 @param {number} k1 */
|
|
746
|
+
const ensureNodes = (k0, k1) => {
|
|
747
|
+
for (const k of [k0, k1]) {
|
|
748
|
+
if (k === 0 || grid.has(k)) continue;
|
|
749
|
+
if (Math.abs(k) > Math.max(Math.abs(tMin), Math.abs(tMax)) + stepYr) continue; // beyond the built range: the throw below says so
|
|
750
|
+
cover(k < 0 ? -1 : 1, Math.abs(k));
|
|
751
|
+
}
|
|
752
|
+
};
|
|
644
753
|
return {
|
|
645
754
|
/** @param {number} tYr */
|
|
646
755
|
at(tYr) {
|
|
647
756
|
const k0 = Math.floor(tYr / stepYr) * stepYr, k1 = k0 + stepYr;
|
|
757
|
+
ensureNodes(k0, k1);
|
|
648
758
|
const a = grid.get(k0), b = grid.get(k1) ?? a;
|
|
649
759
|
if (!a) throw new Error(`deep-orbital-history: ${tYr} outside the built range`);
|
|
650
760
|
const f = (tYr - k0) / stepYr;
|
|
@@ -685,6 +795,14 @@ function createDeepOrbitalHistory({
|
|
|
685
795
|
|
|
686
796
|
return {
|
|
687
797
|
build,
|
|
798
|
+
// PLAN 24 — the bank generator's instruments: the continuous walk's states at a spacing,
|
|
799
|
+
// a pure walk from a given state (the seat-and-resume self-check; a fixed step for the
|
|
800
|
+
// convergence row), the step the schedule takes at t, and the state the walk starts from.
|
|
801
|
+
recordStates,
|
|
802
|
+
walkFrom,
|
|
803
|
+
stepYearsAt: hStepAt,
|
|
804
|
+
stateJ2000: S0A,
|
|
805
|
+
bankLoaded: bank !== null,
|
|
688
806
|
alphaArcsecPerYr: ALPHA * R2D * 3600, // the injected GENERAL-anchor form (input echo, unchanged semantics)
|
|
689
807
|
// D4e diagnostics: the self-anchored lunisolar rate actually integrated.
|
|
690
808
|
alphaLunisolarArcsecPerYr: ALPHA * K_LUNI * R2D * 3600,
|
package/src/index.js
CHANGED
|
@@ -200,7 +200,7 @@ export { createEclipseFinders } from './eclipse/finders.cjs';
|
|
|
200
200
|
* even though the body is empty.
|
|
201
201
|
*
|
|
202
202
|
* @param {Constants} [constants]
|
|
203
|
-
* @param {{ laws?: { eccentricityAt?: (year: number) => number, eccentricityRateAt?: (year: number) => number, perihelionLongitudeDegAt?: (year: number) => number }, secularSeriesArtifact?: any, giaEllipticityOfDate?: boolean }} [opts]
|
|
203
|
+
* @param {{ laws?: { eccentricityAt?: (year: number) => number, eccentricityRateAt?: (year: number) => number, perihelionLongitudeDegAt?: (year: number) => number }, secularSeriesArtifact?: any, giaEllipticityOfDate?: boolean, spinCheckpointsArtifact?: any }} [opts]
|
|
204
204
|
* `laws` — research overrides for Earth's orbit laws (doc 109 §7); absent = the shipped laws, bit-identical. Not part of the hash.
|
|
205
205
|
* @returns {Model}
|
|
206
206
|
*/
|
|
@@ -251,8 +251,18 @@ export const createModel = (constants = GENERATED, opts = {}) => {
|
|
|
251
251
|
// opts.giaEllipticityOfDate — false builds the one-source history on the
|
|
252
252
|
// orbital forcing alone (no ice-driven J₂(t) factor): the T1 line derivation
|
|
253
253
|
// (see assembleModel). Default true = the shipped physics. Never part of the hash.
|
|
254
|
+
// opts.spinCheckpointsArtifact — plan 24: the spin-axis checkpoint bank
|
|
255
|
+
// (data/spin-axis-checkpoints.json, parsed), the walk's exact state every
|
|
256
|
+
// 250 kyr; a deep POINT read then walks at most one spacing (a cumulative
|
|
257
|
+
// lunar table still integrates from J2000). Never part of the
|
|
258
|
+
// hash: it is the governed artifact of the walk this context runs, and the
|
|
259
|
+
// nodes it yields are bit-identical to the full walk's (the purity gate).
|
|
260
|
+
// The bank is the SHIPPED context's walk: under altered constants (a counterfactual) or
|
|
261
|
+
// research law overrides α(t) differs and the walk must be its own — the bank is ignored
|
|
262
|
+
// there by construction, never trusted to the caller.
|
|
263
|
+
const bankAllowed = hash === CONSTANTS_HASH && !(opts.laws && Object.keys(opts.laws).length) && opts.giaEllipticityOfDate !== false;
|
|
254
264
|
const surfaces = assembleModel(ctx, FITTED, opts.laws ?? {}, opts.secularSeriesArtifact ?? null,
|
|
255
|
-
{ giaEllipticityOfDate: opts.giaEllipticityOfDate !== false });
|
|
265
|
+
{ giaEllipticityOfDate: opts.giaEllipticityOfDate !== false, spinCheckpointsArtifact: bankAllowed ? (opts.spinCheckpointsArtifact ?? null) : null });
|
|
256
266
|
|
|
257
267
|
return {
|
|
258
268
|
constants: ctx,
|
package/src/model/context.js
CHANGED
|
@@ -24,7 +24,10 @@
|
|
|
24
24
|
* FORCING alone. The T1 exporter derives the climate lines' obliquity rate on it, so the lines
|
|
25
25
|
* cannot depend on their own fit (v23.0; measured 3e-5 of the rate, 2–3 yr of period). Default true =
|
|
26
26
|
* the shipped physics.
|
|
27
|
-
*
|
|
27
|
+
* `spinCheckpointsArtifact` (plan 24): the parsed spin-axis checkpoint bank — the walk's exact state
|
|
28
|
+
* every 250 kyr; a deep read then walks at most one spacing, bit-identical to the full walk. Null =
|
|
29
|
+
* the full walk from J2000.
|
|
30
|
+
* @typedef {{ giaEllipticityOfDate?: boolean, spinCheckpointsArtifact?: { spacingYr: number, checkpoints: ReadonlyArray<{t: number, s: number[]}> } | null }} Options
|
|
28
31
|
*/
|
|
29
32
|
|
|
30
33
|
/**
|
|
@@ -12,7 +12,7 @@ import { CHAIN_ARTIFACT } from '../planets/chain-artifact.js';
|
|
|
12
12
|
export function assembleOneSourceMovement(ctx) {
|
|
13
13
|
const {
|
|
14
14
|
C, options, secularSeriesArtifact, EPOCH_PARAMS, alphaGia, certifiedAxialPrecessionJ2000Years, dayLengthSeconds,
|
|
15
|
-
deepLod, dtCycleLodCorrectionSum, meanSolarYearDays,
|
|
15
|
+
deepLod, dtCycleLodCorrectionSum, meanSolarYearDays, yearToTMa,
|
|
16
16
|
} = ctx;
|
|
17
17
|
// The cardinal INSTANTS are the crossings of the one Sun the scene renders
|
|
18
18
|
// and the eclipse chain certifies (cardinal-instants.js); the cardinal
|
|
@@ -74,7 +74,12 @@ export function assembleOneSourceMovement(ctx) {
|
|
|
74
74
|
// The CONSTANT's scaling (the torque period), not the published rate of date: the
|
|
75
75
|
// integration's own ŝ·n̂ carries the obliquity's cosine, so the cited mean obliquity's
|
|
76
76
|
// factor must not enter twice.
|
|
77
|
-
|
|
77
|
+
// The age is yearToTMa(yr) — the ONE mapping (J2000 = 2000.0 on the engine year axis,
|
|
78
|
+
// as the factory's own t and the browser's and tools/lib's twins read it). Plan 24
|
|
79
|
+
// measured the former (startmodelYear − yr)/1e6, a 0.5-yr offset, as a twin split of
|
|
80
|
+
// 1e-6″ at −100 kyr / 7e-6″ at −1 Myr in ε — invisible to every gate until the bank,
|
|
81
|
+
// walked by the tools/lib twin, had to be bit-identical to this walk.
|
|
82
|
+
axialPrecessionYearsAtYearFn: (yr) => deepLod.lunisolarTorquePeriodYearsAtAge(yearToTMa(yr)) ?? axial0,
|
|
78
83
|
// THE PRECESSION OF DATE: on top of the secular law above, the solar
|
|
79
84
|
// torque at the eccentricity of date and the oblateness of date from
|
|
80
85
|
// the GIA channel — both exactly 1 at J2000, so the J2000 anchor is
|
|
@@ -84,6 +89,10 @@ export function assembleOneSourceMovement(ctx) {
|
|
|
84
89
|
solarTorqueShareJ2000: EPOCH_PARAMS.precessionSolarShareJ2000,
|
|
85
90
|
// options.giaEllipticityOfDate === false: the orbital forcing alone (the T1 line derivation).
|
|
86
91
|
dynamicalEllipticityRatioAtYearFn: options.giaEllipticityOfDate === false ? undefined : alphaGia.j2RatioAt,
|
|
92
|
+
// PLAN 24 — the spin-axis checkpoint bank (data/spin-axis-checkpoints.json, loaded by the
|
|
93
|
+
// API and the Node scene beside the series; never part of the hash): a deep jump walks at
|
|
94
|
+
// most one spacing from the nearest banked state, bit-identical to the continuous walk.
|
|
95
|
+
spinCheckpoints: options.spinCheckpointsArtifact ?? undefined,
|
|
87
96
|
});
|
|
88
97
|
// PER-TIER ROUTING (the anomalistic-contamination fix): one sampler PER
|
|
89
98
|
// grid tier, built on first entry and KEPT — a query always reads the
|
package/src/moon/arguments.cjs
CHANGED
|
@@ -163,59 +163,63 @@ function createMoonArguments({ constants, fns }) {
|
|
|
163
163
|
return kPl;
|
|
164
164
|
}
|
|
165
165
|
// ── Deep-time carrier tables ────────────────────────────────────────────────
|
|
166
|
-
//
|
|
167
|
-
//
|
|
168
|
-
//
|
|
169
|
-
//
|
|
170
|
-
//
|
|
171
|
-
//
|
|
172
|
-
//
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
|
|
166
|
+
// Every carrier is ∫₀ᵀ f dt on ONE cumulative table per direction: fine
|
|
167
|
+
// cells of CARRIER_FINE_CY (100 yr) to ±CARRIER_FINE_RANGE_CY (250 kyr),
|
|
168
|
+
// grown in CARRIER_FINE_CHUNK cells (10 kyr — an in-window call never
|
|
169
|
+
// samples deeper than it must), then CARRIER_CELL_CY cells (1 kyr) grown in
|
|
170
|
+
// CARRIER_CHUNK (the former deep tier, unchanged); per-cell 3-point Simpson
|
|
171
|
+
// and a 3-point Simpson over the partial last cell. Continuous in value AND
|
|
172
|
+
// in rate: the per-cell error is fixed by the cell, so nothing jumps when T
|
|
173
|
+
// grows. (Plan 23 follow-up, measured on the Node Regression panel: the
|
|
174
|
+
// in-era form was one Simpson from J2000 to T whose node count stepped every
|
|
175
|
+
// 2 kyr (obliquity) / 8 kyr (planetary), so the accumulated error jumped
|
|
176
|
+
// there — 0.3–6″ on the obliquity carrier at 20–250 kyr, 10–15″ on the
|
|
177
|
+
// planetary one at ±6/22 kyr — invisible on L′'s rate, a notch of 0.5 d on
|
|
178
|
+
// the node period once the remainder rode Ω. The earlier form that
|
|
179
|
+
// re-integrated the whole span on every call cost the deep-time playback
|
|
180
|
+
// 190 ms a frame — the owner's measurement behind the tables.)
|
|
181
|
+
const CARRIER_FINE_CY = 1, CARRIER_FINE_RANGE_CY = 2500, CARRIER_FINE_CHUNK = 100;
|
|
182
|
+
const CARRIER_CELL_CY = 10, CARRIER_CHUNK = 2500;
|
|
176
183
|
/** @param {(t: number) => number} f the SCALED integrand per century
|
|
177
|
-
* @
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
/** @type {{ fwd: number[] | null, bwd: number[] | null }} */
|
|
184
|
+
* @returns {(T: number) => number} ∫₀ᵀ f dt, T in Julian centuries (signed) */
|
|
185
|
+
function makeDeepCarrier(f) {
|
|
186
|
+
/** @type {{ fwd: {fine: number[], coarse: number[] | null} | null, bwd: {fine: number[], coarse: number[] | null} | null }} */
|
|
181
187
|
const sides = { fwd: null, bwd: null };
|
|
188
|
+
const NF = CARRIER_FINE_RANGE_CY / CARRIER_FINE_CY;
|
|
189
|
+
/** The signed cell integral from t0 (nearer J2000) to t1. @param {number} t0 @param {number} t1 */
|
|
190
|
+
const cell = (t0, t1) => (f(t0) + 4 * f((t0 + t1) / 2) + f(t1)) * ((t1 - t0) / 6);
|
|
191
|
+
/** @param {{fine: number[]}} s @param {number} dir @param {number} upTo grow the fine table to this many cells */
|
|
192
|
+
const growFine = (s, dir, upTo) => {
|
|
193
|
+
for (let i = s.fine.length; i <= upTo; i++) s.fine.push(s.fine[i - 1] + cell(dir * (i - 1) * CARRIER_FINE_CY, dir * i * CARRIER_FINE_CY));
|
|
194
|
+
};
|
|
182
195
|
return (T) => {
|
|
183
|
-
if (
|
|
184
|
-
const dir = T > 0 ? 1 : -1;
|
|
185
|
-
let
|
|
186
|
-
if (!
|
|
187
|
-
|
|
196
|
+
if (T === 0) return 0;
|
|
197
|
+
const dir = T > 0 ? 1 : -1, a = Math.abs(T);
|
|
198
|
+
let s = dir === 1 ? sides.fwd : sides.bwd;
|
|
199
|
+
if (!s) { s = { fine: [0], coarse: null }; if (dir === 1) sides.fwd = s; else sides.bwd = s; }
|
|
200
|
+
if (a <= CARRIER_FINE_RANGE_CY) {
|
|
201
|
+
const k = Math.floor(a / CARRIER_FINE_CY);
|
|
202
|
+
if (s.fine.length < k + 2) growFine(s, dir, Math.min(NF, Math.ceil((k + 1) / CARRIER_FINE_CHUNK) * CARRIER_FINE_CHUNK));
|
|
203
|
+
return s.fine[k] + cell(dir * k * CARRIER_FINE_CY, T);
|
|
204
|
+
}
|
|
205
|
+
if (!s.coarse) { growFine(s, dir, NF); s.coarse = [s.fine[NF]]; }
|
|
206
|
+
const dist = a - CARRIER_FINE_RANGE_CY;
|
|
188
207
|
const k = Math.floor(dist / CARRIER_CELL_CY);
|
|
189
|
-
let target =
|
|
208
|
+
let target = s.coarse.length;
|
|
190
209
|
while (target < k + 2) target += CARRIER_CHUNK;
|
|
191
|
-
for (let i =
|
|
192
|
-
const t0 = dir * (
|
|
193
|
-
|
|
210
|
+
for (let i = s.coarse.length; i < target; i++) {
|
|
211
|
+
const t0 = dir * (CARRIER_FINE_RANGE_CY + (i - 1) * CARRIER_CELL_CY);
|
|
212
|
+
s.coarse.push(s.coarse[i - 1] + cell(t0, t0 + dir * CARRIER_CELL_CY));
|
|
194
213
|
}
|
|
195
|
-
|
|
196
|
-
const hp = T - ta;
|
|
197
|
-
return cum[k] + (f(ta) + 4 * f(ta + hp / 2) + f(T)) * (hp / 6);
|
|
214
|
+
return s.coarse[k] + cell(dir * (CARRIER_FINE_RANGE_CY + k * CARRIER_CELL_CY), T);
|
|
198
215
|
};
|
|
199
216
|
}
|
|
200
217
|
|
|
201
|
-
/** The planetary carrier's SCALED integrand, k_PL · (e² − e0²), per century
|
|
218
|
+
/** The planetary carrier's SCALED integrand, k_PL · (e² − e0²), per century
|
|
219
|
+
* (e0 the channel's anchor CONST — not eccAt(0), which under integrated
|
|
220
|
+
* phase carries the R3 drift correction, the 8.2-2 convention). @param {number} t */
|
|
202
221
|
const planetaryIntegrand = (t) => { const e = eccAt(t * 100); return kPlValue() * (e * e - eccE0 * eccE0); };
|
|
203
|
-
|
|
204
|
-
function planetaryCarrierDense(T) {
|
|
205
|
-
if (T === 0) return 0;
|
|
206
|
-
const k = kPlValue();
|
|
207
|
-
// The channel's e0 anchor CONST — not eccAt(0), which under integrated
|
|
208
|
-
// phase carries the R3 drift correction (the 8.2-2 convention).
|
|
209
|
-
const e0sq = eccE0 * eccE0;
|
|
210
|
-
/** @param {number} t */
|
|
211
|
-
const f = (t) => { const e = eccAt(t * 100); return e * e - e0sq; };
|
|
212
|
-
const N = Math.max(2, 2 * Math.ceil(Math.abs(T) * 100 / 8000));
|
|
213
|
-
const h = T / N;
|
|
214
|
-
let sum = f(0) + f(T);
|
|
215
|
-
for (let i = 1; i < N; i++) sum += f(i * h) * (i % 2 ? 4 : 2);
|
|
216
|
-
return k * sum * h / 3;
|
|
217
|
-
}
|
|
218
|
-
const planetaryCarrier = makeDeepCarrier(planetaryIntegrand, planetaryCarrierDense);
|
|
222
|
+
const planetaryCarrier = makeDeepCarrier(planetaryIntegrand);
|
|
219
223
|
|
|
220
224
|
/** @type {{eps0: number, C: number} | null} */
|
|
221
225
|
let obl = null;
|
|
@@ -238,19 +242,7 @@ function createMoonArguments({ constants, fns }) {
|
|
|
238
242
|
}
|
|
239
243
|
/** The obliquity carrier's SCALED integrand, C · (ε − ε0), per century. @param {number} t */
|
|
240
244
|
const obliquityIntegrand = (t) => { const O = oblInit(); return O.C * (computeObliquityEarth(2000 + t * 100) - O.eps0); };
|
|
241
|
-
|
|
242
|
-
function obliquityCarrierDense(T) {
|
|
243
|
-
if (T === 0) return 0;
|
|
244
|
-
const O = oblInit();
|
|
245
|
-
/** @param {number} t */
|
|
246
|
-
const f = (t) => computeObliquityEarth(2000 + t * 100) - O.eps0;
|
|
247
|
-
const N = Math.max(2, 2 * Math.ceil(Math.abs(T) * 100 / 2000));
|
|
248
|
-
const h = T / N;
|
|
249
|
-
let sum = f(0) + f(T);
|
|
250
|
-
for (let i = 1; i < N; i++) sum += f(i * h) * (i % 2 ? 4 : 2);
|
|
251
|
-
return O.C * sum * h / 3;
|
|
252
|
-
}
|
|
253
|
-
const obliquityCarrier = makeDeepCarrier(obliquityIntegrand, obliquityCarrierDense);
|
|
245
|
+
const obliquityCarrier = makeDeepCarrier(obliquityIntegrand);
|
|
254
246
|
|
|
255
247
|
/** The frame share's REMAINDER for ϖ and Ω (plan 23). The physical exponents gave
|
|
256
248
|
* up the frame's T² the Meeus-effective pair carried (T2F, Lieske's); pFix
|
|
@@ -307,24 +299,20 @@ function createMoonArguments({ constants, fns }) {
|
|
|
307
299
|
const d2Ch = (e2(10) - 2 * e2(0) + e2(-10)) / 100;
|
|
308
300
|
secComp = { dd2: d2Sec - d2Ch, d3Sec, Tq: SECULAR_COMPLETION_TAPER_YEARS / 100 };
|
|
309
301
|
}
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
const
|
|
313
|
-
|
|
314
|
-
if (q >= 1) return 0;
|
|
315
|
-
const env = Math.cos(Math.PI / 2 * q) ** 2;
|
|
316
|
-
return (0.5 * S.dd2 * t * t + S.d3Sec * t * t * t / 6) * env;
|
|
317
|
-
};
|
|
318
|
-
// Beyond the era the envelope has long closed (|t| ≥ Tq ≈ 279 cy → 0): the
|
|
319
|
-
// integral is the constant to ±Tq, so integrate exactly that span instead of
|
|
320
|
-
// N ∝ |T| nodes of zeros (in-era calls untouched).
|
|
321
|
-
if (Math.abs(T) > CARRIER_DENSE_CY) T = Math.sign(T) * S.Tq;
|
|
322
|
-
const N = Math.max(2, 2 * Math.ceil(Math.abs(T) * 100 / 2000));
|
|
323
|
-
const h = T / N;
|
|
324
|
-
let sum = f(0) + f(T);
|
|
325
|
-
for (let i = 1; i < N; i++) sum += f(i * h) * (i % 2 ? 4 : 2);
|
|
326
|
-
return kPlValue() * sum * h / 3;
|
|
302
|
+
// Beyond the taper the envelope has closed (|t| ≥ Tq ≈ 279 cy → 0): the
|
|
303
|
+
// integral is the constant to ±Tq, so the table is read at ±Tq there.
|
|
304
|
+
const Tq = secComp.Tq;
|
|
305
|
+
return secCarrier(Math.abs(T) > Tq ? Math.sign(T) * Tq : T);
|
|
327
306
|
}
|
|
307
|
+
/** The completion's SCALED integrand, k_PL · the tapered curvature difference, per century. @param {number} t */
|
|
308
|
+
const secIntegrand = (t) => {
|
|
309
|
+
const S = /** @type {{dd2: number, d3Sec: number, Tq: number}} */ (secComp);
|
|
310
|
+
const q = Math.abs(t) / S.Tq;
|
|
311
|
+
if (q >= 1) return 0;
|
|
312
|
+
const env = Math.cos(Math.PI / 2 * q) ** 2;
|
|
313
|
+
return kPlValue() * (0.5 * S.dd2 * t * t + S.d3Sec * t * t * t / 6) * env;
|
|
314
|
+
};
|
|
315
|
+
const secCarrier = makeDeepCarrier(secIntegrand);
|
|
328
316
|
|
|
329
317
|
// ── Deep-time branch: always-chains (Stage B) ────────────────────────────
|
|
330
318
|
/** @type {number | null} */
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// The fitted coefficients' shapes for TypeScript consumers (§2g); values live
|
|
3
3
|
// in coefficients.js, emitted VERBATIM from the fit artifacts under data/.
|
|
4
4
|
|
|
5
|
-
export declare const COEFFICIENTS_HASH: "
|
|
5
|
+
export declare const COEFFICIENTS_HASH: "a1e5567e03d1936e";
|
|
6
6
|
|
|
7
7
|
export declare const FITTED_COEFFICIENTS: {
|
|
8
8
|
readonly BALANCE_PRESETS: Array<Array<number | string>>;
|
|
@@ -310,7 +310,7 @@ export declare const FITTED_COEFFICIENTS: {
|
|
|
310
310
|
"ratio": number;
|
|
311
311
|
"label": string;
|
|
312
312
|
};
|
|
313
|
-
"39.
|
|
313
|
+
"39.5561": {
|
|
314
314
|
"period_kyr": number;
|
|
315
315
|
"lr04_post_mpt_amp": number;
|
|
316
316
|
"epica_amp": number;
|
|
@@ -324,7 +324,7 @@ export declare const FITTED_COEFFICIENTS: {
|
|
|
324
324
|
"ratio": number;
|
|
325
325
|
"label": string;
|
|
326
326
|
};
|
|
327
|
-
"40.
|
|
327
|
+
"40.9240": {
|
|
328
328
|
"period_kyr": number;
|
|
329
329
|
"lr04_post_mpt_amp": number;
|
|
330
330
|
"epica_amp": number;
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* axialPrecessionYearsAtYearFn?: (year: number) => number,
|
|
16
16
|
* solarTorqueShareJ2000?: number,
|
|
17
17
|
* dynamicalEllipticityRatioAtYearFn?: (year: number) => number,
|
|
18
|
+
* spinCheckpoints?: { spacingYr: number, checkpoints: ReadonlyArray<{t: number, s: number[]}> },
|
|
18
19
|
* }} deps — mode tables from the governed deep artifact (choose the ζ tier
|
|
19
20
|
* per consumer: era = its own 8-term extraction, deep = the 16-term
|
|
20
21
|
* table; NEVER a slice); anchors from the chain artifact's one home; the
|
|
@@ -34,7 +35,7 @@
|
|
|
34
35
|
* factors on the precession constant (see alphaAtGeneral below); absent,
|
|
35
36
|
* the constant is the secular law alone, bit-identical.
|
|
36
37
|
*/
|
|
37
|
-
export function createDeepOrbitalHistory({ zModes, zetaModes, zetaSeries, zSeries, anchorE, anchorPeriEclipticDeg, anchorInclEclipticDeg, anchorAscNodeEclipticDeg, axialPrecessionYearsJ2000, obliquityJ2000Deg, axialPrecessionYearsAtYearFn, solarTorqueShareJ2000, dynamicalEllipticityRatioAtYearFn, }: {
|
|
38
|
+
export function createDeepOrbitalHistory({ zModes, zetaModes, zetaSeries, zSeries, anchorE, anchorPeriEclipticDeg, anchorInclEclipticDeg, anchorAscNodeEclipticDeg, axialPrecessionYearsJ2000, obliquityJ2000Deg, axialPrecessionYearsAtYearFn, solarTorqueShareJ2000, dynamicalEllipticityRatioAtYearFn, spinCheckpoints, }: {
|
|
38
39
|
zModes: ReadonlyArray<{
|
|
39
40
|
omegaRadPerYr: number;
|
|
40
41
|
re: number;
|
|
@@ -66,6 +67,13 @@ export function createDeepOrbitalHistory({ zModes, zetaModes, zetaSeries, zSerie
|
|
|
66
67
|
axialPrecessionYearsAtYearFn?: (year: number) => number;
|
|
67
68
|
solarTorqueShareJ2000?: number;
|
|
68
69
|
dynamicalEllipticityRatioAtYearFn?: (year: number) => number;
|
|
70
|
+
spinCheckpoints?: {
|
|
71
|
+
spacingYr: number;
|
|
72
|
+
checkpoints: ReadonlyArray<{
|
|
73
|
+
t: number;
|
|
74
|
+
s: number[];
|
|
75
|
+
}>;
|
|
76
|
+
};
|
|
69
77
|
}): {
|
|
70
78
|
build: (t0Yr: number, t1Yr: number, stepYr: number) => {
|
|
71
79
|
/** @param {number} tYr */
|
|
@@ -85,6 +93,17 @@ export function createDeepOrbitalHistory({ zModes, zetaModes, zetaSeries, zSerie
|
|
|
85
93
|
generalPrecessionLonRateDegPerYr: number;
|
|
86
94
|
};
|
|
87
95
|
};
|
|
96
|
+
recordStates: (tEndYr: number, spacingYr: number) => Array<{
|
|
97
|
+
t: number;
|
|
98
|
+
s: number[];
|
|
99
|
+
}>;
|
|
100
|
+
walkFrom: (s: number[], t: number, tEnd: number, fixedStepYr?: number) => {
|
|
101
|
+
s: number[];
|
|
102
|
+
t: number;
|
|
103
|
+
};
|
|
104
|
+
stepYearsAt: (t: number) => number;
|
|
105
|
+
stateJ2000: number[];
|
|
106
|
+
bankLoaded: boolean;
|
|
88
107
|
alphaArcsecPerYr: number;
|
|
89
108
|
alphaLunisolarArcsecPerYr: number;
|
|
90
109
|
axialPrecessionYearsLunisolarJ2000: number;
|
package/types/index.d.ts
CHANGED
package/types/model/context.d.ts
CHANGED
|
@@ -16,9 +16,19 @@ export type Laws = {
|
|
|
16
16
|
* FORCING alone. The T1 exporter derives the climate lines' obliquity rate on it, so the lines
|
|
17
17
|
* cannot depend on their own fit (v23.0; measured 3e-5 of the rate, 2–3 yr of period). Default true =
|
|
18
18
|
* the shipped physics.
|
|
19
|
+
* `spinCheckpointsArtifact` (plan 24): the parsed spin-axis checkpoint bank — the walk's exact state
|
|
20
|
+
* every 250 kyr; a deep read then walks at most one spacing, bit-identical to the full walk. Null =
|
|
21
|
+
* the full walk from J2000.
|
|
19
22
|
*/
|
|
20
23
|
export type Options = {
|
|
21
24
|
giaEllipticityOfDate?: boolean;
|
|
25
|
+
spinCheckpointsArtifact?: {
|
|
26
|
+
spacingYr: number;
|
|
27
|
+
checkpoints: ReadonlyArray<{
|
|
28
|
+
t: number;
|
|
29
|
+
s: number[];
|
|
30
|
+
}>;
|
|
31
|
+
} | null;
|
|
22
32
|
};
|
|
23
33
|
/**
|
|
24
34
|
* The forward bindings — what an early slice reads at call time from a later one. Typed by the
|