@essrt/physics 11.2.0 → 11.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/model.js +43 -32
- package/src/planets/orientation.cjs +9 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@essrt/physics",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.3.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
6
|
"modelVersion": "v16.2",
|
package/src/model.js
CHANGED
|
@@ -19,7 +19,9 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import { deriveEpochParams } from './layer0/derive-params.js';
|
|
21
21
|
import * as FL from './planets/fibonacci-laws.cjs';
|
|
22
|
-
import
|
|
22
|
+
import { buildPlanetChainsFromArtifactData, computePlanetElementsAtYear } from './planets/keplerian-chain.cjs';
|
|
23
|
+
import { createSecularSeriesOverride } from './planets/secular-series.cjs';
|
|
24
|
+
import { computeEquatorNodeOriginSFrameDeg, convertNodeSFrameToEquatorOriginDeg } from './planets/inv-plane-frame.cjs';
|
|
23
25
|
import { createPhaseMachinery } from './phase/index.cjs';
|
|
24
26
|
import { createYearLengths, ONE_FAMILY_WINDOW_YEARS } from './earth/year-lengths.cjs';
|
|
25
27
|
import { createDeepOrbitalHistory } from './earth/deep-orbital-history.cjs';
|
|
@@ -728,7 +730,6 @@ export function assembleModel(C, F, laws = {}, secularSeriesArtifact = /** @type
|
|
|
728
730
|
});
|
|
729
731
|
const systemResetN = C.foundational.systemResetN;
|
|
730
732
|
const t2000 = 2000 - (balancedYear - systemResetN * H);
|
|
731
|
-
const balancedJD = startmodelJD - meanSolarYearDays * (startModelYearWithCorrection - balancedYear);
|
|
732
733
|
|
|
733
734
|
/** @param {[number, number]|null} frac @returns {number|null} */
|
|
734
735
|
const fractionToYears = (frac) => (frac === null ? null : (H * frac[0]) / frac[1]);
|
|
@@ -824,39 +825,49 @@ export function assembleModel(C, F, laws = {}, secularSeriesArtifact = /** @type
|
|
|
824
825
|
return ch;
|
|
825
826
|
};
|
|
826
827
|
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
828
|
+
// The planets' elements of date ride THE CHAIN — the only planet path the
|
|
829
|
+
// simulator renders (K5) — with the D5 series handover beyond each planet's
|
|
830
|
+
// measured boundary when the series artifact is supplied: the mirror of the
|
|
831
|
+
// browser's _kcElementsOfDate → _kcSeriesSecularEl. Until v16.2 the API
|
|
832
|
+
// served the retired device here (the record's linear lattice rates:
|
|
833
|
+
// perihelionEclipticYears, ascendingNodePeriod = −8H/N, the balanced-year
|
|
834
|
+
// inclination oscillation) — a published surface disagreeing with the
|
|
835
|
+
// simulator (owner-found audit, 2026-10). Those forms
|
|
836
|
+
// (planets/orientation.cjs) now serve only the structural record and the
|
|
837
|
+
// browser's no-chain bodies (Pluto, Halley, Eros). The chain's argument is
|
|
838
|
+
// dynamical time; the API's decimal year is taken as that argument (ΔT on a
|
|
839
|
+
// secular element is far below its stated accuracy).
|
|
840
|
+
let planetChains = /** @type {any} */ (null);
|
|
841
|
+
let planetSeriesOverride = /** @type {any} */ (null);
|
|
842
|
+
let planetNodeOriginSSDeg = /** @type {number|null} */ (null);
|
|
843
|
+
/** @param {string} k @param {number} year */
|
|
844
|
+
const planetChainElementsAt = (k, year) => {
|
|
845
|
+
if (!planetChains) planetChains = buildPlanetChainsFromArtifactData(/** @type {any} */ (CHAIN_ARTIFACT));
|
|
846
|
+
const el = computePlanetElementsAtYear(year, planetChains[k], planetChains);
|
|
847
|
+
const seriesArt = /** @type {any} */ (secularSeriesArtifact);
|
|
848
|
+
if (!seriesArt) return el;
|
|
849
|
+
if (!planetSeriesOverride) {
|
|
850
|
+
planetSeriesOverride = createSecularSeriesOverride({
|
|
851
|
+
series: seriesArt,
|
|
852
|
+
anchorElements: /** @type {any} */ (CHAIN_ARTIFACT).j2000AnchorElements,
|
|
853
|
+
invariablePlane: /** @type {any} */ (CHAIN_ARTIFACT).invariablePlane,
|
|
854
|
+
planetZModes: /** @type {any} */ (DEEP_MODES_ARTIFACT).planetZ,
|
|
855
|
+
planetZetaModes: /** @type {any} */ (DEEP_MODES_ARTIFACT).planetZeta,
|
|
856
|
+
});
|
|
857
|
+
}
|
|
858
|
+
return planetSeriesOverride.applyToElements(k, year, el);
|
|
831
859
|
};
|
|
832
|
-
/**
|
|
860
|
+
/** Ecliptic longitude of perihelion, J2000 ecliptic and equinox (the chain's ϖ). @param {string} k @param {number} year @returns {number} */
|
|
861
|
+
const planetPerihelionDeg = (k, year) => planetChainElementsAt(k, year).lonPeriEclipticDeg;
|
|
862
|
+
/** Ascending node on the model's invariable plane, from the plane's ascending node on the ICRF equator (the Souami & Souchay 2012 origin; derived conversion, inv-plane-frame). @param {string} k @param {number} year @returns {number} */
|
|
833
863
|
const planetAscNodeDeg = (k, year) => {
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
perihelionEclipticYears: p.perihelionEclipticYears,
|
|
839
|
-
}, year);
|
|
840
|
-
};
|
|
841
|
-
/** Invariable-plane inclination (signed ICRF rate, scene year→JD axis). @param {string} k @param {number} year @returns {number} */
|
|
842
|
-
const planetInclinationDeg = (k, year) => {
|
|
843
|
-
const p = PLANET_RECORDS[k];
|
|
844
|
-
const jd = startmodelJD + (year - startmodelYear) * meanSolarYearDays;
|
|
845
|
-
const yearsSinceBalanced = (jd - balancedJD) / meanSolarYearDays;
|
|
846
|
-
return planetOrientation.invPlaneInclinationAt({
|
|
847
|
-
isEarth: false,
|
|
848
|
-
invPlaneInclinationJ2000: p.invPlaneInclinationJ2000,
|
|
849
|
-
invPlaneInclinationMean: p.invPlaneInclinationMean,
|
|
850
|
-
invPlaneInclinationAmplitude: p.invPlaneInclinationAmplitude,
|
|
851
|
-
inclinationCycleAnchor: p.inclinationCycleAnchor,
|
|
852
|
-
longitudePerihelion: p.longitudePerihelion,
|
|
853
|
-
perihelionEclipticYears: p.perihelionEclipticYears,
|
|
854
|
-
antiPhase: p.antiPhase,
|
|
855
|
-
}, yearsSinceBalanced, {
|
|
856
|
-
H,
|
|
857
|
-
yearsFromBalancedToJ2000: (startmodelJD - balancedJD) / meanSolarYearDays,
|
|
858
|
-
});
|
|
864
|
+
if (planetNodeOriginSSDeg === null) {
|
|
865
|
+
planetNodeOriginSSDeg = computeEquatorNodeOriginSFrameDeg(/** @type {any} */ (CHAIN_ARTIFACT).invariablePlane, C.earthOrbital.obliquityJ2000_deg);
|
|
866
|
+
}
|
|
867
|
+
return convertNodeSFrameToEquatorOriginDeg(planetChainElementsAt(k, year).ascNodeInvPlaneDeg, planetNodeOriginSSDeg);
|
|
859
868
|
};
|
|
869
|
+
/** Inclination to the model's invariable plane (exact orbit-normal rotation). @param {string} k @param {number} year @returns {number} */
|
|
870
|
+
const planetInclinationDeg = (k, year) => planetChainElementsAt(k, year).inclInvPlaneDeg;
|
|
860
871
|
|
|
861
872
|
// ── Time axis: exact JD ↔ model-year conversion ───────────────────────────
|
|
862
873
|
// The model's `year` inputs live on the SI axis (the axis the fits were
|
|
@@ -17,6 +17,15 @@
|
|
|
17
17
|
* (ascendingNodeInvPlaneLinearAt — the node-integrator mirror)
|
|
18
18
|
* and the balanced-year −8H/N node inside the scene tilt
|
|
19
19
|
* (eclipticInclinationFromBalanced). Do not merge them.
|
|
20
|
+
*
|
|
21
|
+
* SCOPE SINCE v16.2 (owner-found audit): these record-based forms — the
|
|
22
|
+
* planet record's linear lattice rates, the −8H/N node period, the
|
|
23
|
+
* balanced-year inclination oscillation — are the RETIRED device. They serve
|
|
24
|
+
* the structural record and the browser's no-chain bodies (Pluto, Halley,
|
|
25
|
+
* Eros) only. The seven planets' elements of date on every published surface
|
|
26
|
+
* (the simulator, the API's /v1/bodies, the MCP essrt_bodies) ride the N-body
|
|
27
|
+
* Keplerian chain with the series handover (model.js planetChainElementsAt;
|
|
28
|
+
* src/script.js _kcElementsOfDate).
|
|
20
29
|
*/
|
|
21
30
|
|
|
22
31
|
'use strict';
|