@essrt/physics 1.7.0 → 1.8.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
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@essrt/physics",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "ESSRT (Expanding Solar System Resonance Theory) physics core \u2014 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": "v11.0",
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
"./deltat/recession-history": "./src/deltat/recession-history.cjs",
|
|
53
53
|
"./climate/l1-orbital": "./src/climate/l1-orbital.cjs",
|
|
54
54
|
"./eclipse/finders": "./src/eclipse/finders.cjs",
|
|
55
|
+
"./eclipse/sun-planetary-completion": "./src/eclipse/sun-planetary-completion.cjs",
|
|
55
56
|
"./reference/published-curves": "./src/reference/published-curves.cjs",
|
|
56
57
|
"./sun/longitude-correction": "./src/sun/longitude-correction.cjs"
|
|
57
58
|
},
|
|
@@ -57,6 +57,7 @@
|
|
|
57
57
|
* @property {(dDaysTT: number) => {lonDeg: number, latDeg: number, distKm: number}} moonFullAtDaysTT
|
|
58
58
|
* full-series Moon: ecliptic-of-date longitude/latitude (deg) + distance (km), TT axis (days since J2000)
|
|
59
59
|
* @property {(jdUT: number) => number} sunLonDegAt - geometric mean sun longitude (deg), JD(UT) axis with the finder's internal ΔT
|
|
60
|
+
* @property {(T: number) => number} sunCompletionDeg - planetary completion (deg) at T centuries TT, SUBTRACTED from the finder sun (see eclipse/sun-planetary-completion.cjs; the finders deliberately stay without it — their fitted anchors and certified canon statistics were produced on the bare form, and elongation-class timing absorbs the omission into the fitted phases)
|
|
60
61
|
* @property {(jd: number) => number} deltaTSecondsAt - framework ΔT (J2000-zeroed convention)
|
|
61
62
|
* @property {(year: number) => number} obliquityDegAt - framework obliquity (deg) at calendar year
|
|
62
63
|
* @property {(year: number) => number} eccentricityAt - framework Earth-orbit eccentricity at calendar year
|
|
@@ -122,8 +123,8 @@ function createBesselian(deps) {
|
|
|
122
123
|
const jb = jdUT + K.ttBridgeSeconds / 86400; // finder-axis input → its internal ΔT lands on true TT
|
|
123
124
|
const year = deps.yearFromJD(jb);
|
|
124
125
|
const eps = deps.obliquityDegAt(year) * D2R;
|
|
125
|
-
const sunLon = deps.sunLonDegAt(jb);
|
|
126
126
|
const dTT = (jb - K.j2000JD) + deps.deltaTSecondsAt(jb) / 86400;
|
|
127
|
+
const sunLon = deps.sunLonDegAt(jb) - deps.sunCompletionDeg(dTT / K.julianCenturyDays);
|
|
127
128
|
const moon = deps.moonFullAtDaysTT(dTT);
|
|
128
129
|
return {
|
|
129
130
|
S: eclToEq(sunLon, 0, sunDistanceKm(year, sunLon), eps),
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sun planetary completion — the 20.3h location-tier term table.
|
|
3
|
+
*
|
|
4
|
+
* The finder Sun (framework linear rate + Kepler EoC + the fitted
|
|
5
|
+
* SUN_HARMONICS) omits the classical planetary perturbations of the
|
|
6
|
+
* geocentric Sun (the Newcomb Venus/Jupiter/Mars terms and the
|
|
7
|
+
* Earth-around-EMB wobble). Measured against JPL Horizons (ObsEcLon,
|
|
8
|
+
* geocentric, leading-nutation-bridged to mean-of-date) on 960
|
|
9
|
+
* deterministic all-phase epochs 1970–2049: the omission is 10.0″ RMS
|
|
10
|
+
* of Sun-longitude scatter; this table removes the coherent part,
|
|
11
|
+
* 10.0″ → 2.9″ RMS, with every term era-stable (amplitude and phase
|
|
12
|
+
* agree between the 1970–2009 and 2010–2049 half-samples).
|
|
13
|
+
*
|
|
14
|
+
* THE CONSTANT-ATTRIBUTION RULE (the 20.3h-lite trap, resolved here):
|
|
15
|
+
* the table carries NO constant term — the all-phase fit attributes the
|
|
16
|
+
* constant to the tier's existing anchors, so the terms ship without
|
|
17
|
+
* the +6″ syzygy-mean penalty that an eclipse-sample fit produced (at
|
|
18
|
+
* new moon the EMB argument D locks near 0 and its cos-component
|
|
19
|
+
* becomes a constant; fitting on eclipses alone poisons the mean).
|
|
20
|
+
* Verified on the 179-eclipse-syzygy sample: elongation mean stays
|
|
21
|
+
* +1.1″ → +1.5″ while RMS drops 10.6″ → 5.5″; and on the 15 NASA
|
|
22
|
+
* path-table centerline points: shadow-plane mean 6.0″ → 3.6″, max
|
|
23
|
+
* 10.1″ → 5.0″, every event improved.
|
|
24
|
+
*
|
|
25
|
+
* Arguments are of-date mean longitudes (IAU-class instrument
|
|
26
|
+
* polynomials, degrees/Julian-century TT). They are phase carriers for
|
|
27
|
+
* the fitted amplitudes — the framework-native derivation of these
|
|
28
|
+
* term tables is the 20.3e research item. Terms with ambiguous
|
|
29
|
+
* identifications (the ~8-yr band, the 414-day Venus/three-planet
|
|
30
|
+
* blend, E−M, E−S) are deliberately NOT shipped: each failed the
|
|
31
|
+
* half-sample stability test or has no unique two-planet argument at
|
|
32
|
+
* the window's frequency resolution (~1.5″ RSS accepted as floor).
|
|
33
|
+
*
|
|
34
|
+
* Sign convention: the table models (framework − truth), so consumers
|
|
35
|
+
* SUBTRACT the evaluation from the finder Sun longitude.
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
'use strict';
|
|
39
|
+
|
|
40
|
+
/** Of-date mean-longitude polynomials, degrees per Julian century TT. */
|
|
41
|
+
const ARG_RATES = {
|
|
42
|
+
lV: [181.979801, 58517.815676], // Venus
|
|
43
|
+
lE: [100.466457, 36000.769780], // Earth (EMB)
|
|
44
|
+
lM: [355.433000, 19141.696300], // Mars
|
|
45
|
+
lJ: [34.351519, 3036.302389], // Jupiter
|
|
46
|
+
D: [297.8501921, 445267.1114034], // Moon mean elongation (EMB wobble carrier)
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The fitted table: [k·lV, k·lE, k·lM, k·lJ, k·D, cosAmp″, sinAmp″].
|
|
51
|
+
* Fit: 960-epoch all-phase LSQ vs JPL Horizons DE441-class ObsEcLon,
|
|
52
|
+
* free constant excluded from shipment; SE 0.13″ per coefficient.
|
|
53
|
+
*/
|
|
54
|
+
const TERMS = [
|
|
55
|
+
[1, -1, 0, 0, 0, 0, -5.08], // V−E (Venus synodic)
|
|
56
|
+
[2, -2, 0, 0, 0, 0, 5.55], // 2(V−E)
|
|
57
|
+
[3, -3, 0, 0, 0, 0, 0.68], // 3(V−E)
|
|
58
|
+
[2, -3, 0, 0, 0, -2.64, 0], // 2V−3E (the classic Newcomb Venus term)
|
|
59
|
+
[0, 1, 0, -1, 0, 0, 7.19], // E−J (Jupiter synodic)
|
|
60
|
+
[0, 2, 0, -2, 0, 0, -2.81], // 2(E−J)
|
|
61
|
+
[0, 1, 0, -2, 0, -1.34, 0.97],// E−2J
|
|
62
|
+
[0, 2, -2, 0, 0, 0, 2.05], // 2(E−M) (Mars)
|
|
63
|
+
[0, 2, 0, 0, 0, 0, 1.42], // 2lE (semiannual Kepler leftover)
|
|
64
|
+
[0, 0, 0, 0, 1, 0, -6.64], // D (Earth-around-EMB wobble, 6.44″ theory)
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
const D2R = Math.PI / 180;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Planetary-completion correction to the finder Sun longitude.
|
|
71
|
+
* @param {number} T - Julian centuries TT from J2000
|
|
72
|
+
* @returns {number} degrees — SUBTRACT from the finder Sun longitude
|
|
73
|
+
*/
|
|
74
|
+
function sunPlanetaryCompletionDeg(T) {
|
|
75
|
+
const lV = (ARG_RATES.lV[0] + ARG_RATES.lV[1] * T) * D2R;
|
|
76
|
+
const lE = (ARG_RATES.lE[0] + ARG_RATES.lE[1] * T) * D2R;
|
|
77
|
+
const lM = (ARG_RATES.lM[0] + ARG_RATES.lM[1] * T) * D2R;
|
|
78
|
+
const lJ = (ARG_RATES.lJ[0] + ARG_RATES.lJ[1] * T) * D2R;
|
|
79
|
+
const D = (ARG_RATES.D[0] + ARG_RATES.D[1] * T) * D2R;
|
|
80
|
+
let arcsec = 0;
|
|
81
|
+
for (const [kV, kE, kM, kJ, kD, cA, sA] of TERMS) {
|
|
82
|
+
const th = kV * lV + kE * lE + kM * lM + kJ * lJ + kD * D;
|
|
83
|
+
arcsec += cA * Math.cos(th) + sA * Math.sin(th);
|
|
84
|
+
}
|
|
85
|
+
return arcsec / 3600;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
module.exports = { sunPlanetaryCompletionDeg };
|
package/src/model.js
CHANGED
|
@@ -31,6 +31,7 @@ import { createMoonMonthChain } from './moon/month-chain.cjs';
|
|
|
31
31
|
import { createChainCycleIntegrator } from './chain-cycles/index.cjs';
|
|
32
32
|
import { createMoonArguments, jdToDecimalYear } from './moon/arguments.cjs';
|
|
33
33
|
import { createMoonSeries } from './moon/series.cjs';
|
|
34
|
+
import { sunPlanetaryCompletionDeg } from './eclipse/sun-planetary-completion.cjs';
|
|
34
35
|
import { createEclipseFinders } from './eclipse/finders.cjs';
|
|
35
36
|
import { createBesselian } from './eclipse/besselian.cjs';
|
|
36
37
|
import { driver2PeriodSecondsAtAge } from './planets/orbit-chain.cjs';
|
|
@@ -861,6 +862,7 @@ export function assembleModel(C, F) {
|
|
|
861
862
|
return { lonDeg: ev.lonDeg, latDeg: ev.latDeg, distKm: ev.distKm };
|
|
862
863
|
},
|
|
863
864
|
sunLonDegAt: /** @param {number} jdUT */ (jdUT) => eclipseFinders.sunLonDegAt(jdUT),
|
|
865
|
+
sunCompletionDeg: sunPlanetaryCompletionDeg,
|
|
864
866
|
deltaTSecondsAt: /** @param {number} jd */ (jd) => (jdTTFromUT(jd) - jd) * 86400,
|
|
865
867
|
obliquityDegAt: obliquityDeg,
|
|
866
868
|
eccentricityAt,
|