@essrt/physics 1.16.0 → 2.0.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/cardinal/index.cjs +7 -6
- package/src/constants/coefficients.js +20 -20
- package/src/constants/generated.d.ts +2 -2
- package/src/constants/generated.js +18 -18
- package/src/eclipse/sun-planetary-completion.cjs +72 -68
- package/src/model.js +54 -25
- package/src/moon/ecc-channel.cjs +37 -7
- package/src/planets/predict.cjs +1 -1
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
// Gives the TypeScript website full type safety at the boundary (§2g) while
|
|
3
3
|
// packages/physics stays JavaScript.
|
|
4
4
|
|
|
5
|
-
export declare const CONSTANTS_HASH: "
|
|
5
|
+
export declare const CONSTANTS_HASH: "ccc3b87d48a05bcd";
|
|
6
6
|
|
|
7
7
|
export declare const MODEL_VERSION: string;
|
|
8
8
|
|
|
9
9
|
export declare const PREPRINT_DOI: string;
|
|
10
10
|
|
|
11
11
|
export declare const DEFAULT_CONSTANTS: {
|
|
12
|
-
readonly hash: "
|
|
12
|
+
readonly hash: "ccc3b87d48a05bcd";
|
|
13
13
|
readonly additionalBodies: {
|
|
14
14
|
"pluto": {
|
|
15
15
|
"name": string;
|
|
@@ -32,17 +32,17 @@
|
|
|
32
32
|
* carry it so a counterfactual is reproducible (§2d).
|
|
33
33
|
* @type {string}
|
|
34
34
|
*/
|
|
35
|
-
export const CONSTANTS_HASH = "
|
|
35
|
+
export const CONSTANTS_HASH = "ccc3b87d48a05bcd";
|
|
36
36
|
|
|
37
37
|
/** Model version label — single source: public/input/model-version.json (§10 two-axis scheme). */
|
|
38
|
-
export const MODEL_VERSION = "
|
|
38
|
+
export const MODEL_VERSION = "v12.0";
|
|
39
39
|
|
|
40
40
|
/** Canonical preprint DOI — single source: public/input/model-version.json. */
|
|
41
41
|
export const PREPRINT_DOI = "10.21203/rs.3.rs-8758810/v4";
|
|
42
42
|
|
|
43
43
|
/** @type {Readonly<Record<string, unknown>>} */
|
|
44
44
|
export const DEFAULT_CONSTANTS = Object.freeze({
|
|
45
|
-
hash: "
|
|
45
|
+
hash: "ccc3b87d48a05bcd",
|
|
46
46
|
additionalBodies: {
|
|
47
47
|
"pluto": {
|
|
48
48
|
"name": "Pluto",
|
|
@@ -207,8 +207,8 @@ export const DEFAULT_CONSTANTS = Object.freeze({
|
|
|
207
207
|
}
|
|
208
208
|
},
|
|
209
209
|
earth: {
|
|
210
|
-
"earthtiltMean": 23.
|
|
211
|
-
"earthInvPlaneInclinationAmplitude": 0.
|
|
210
|
+
"earthtiltMean": 23.413526608469965,
|
|
211
|
+
"earthInvPlaneInclinationAmplitude": 0.636069722432876,
|
|
212
212
|
"eccentricityBase": 0.015386009686374918,
|
|
213
213
|
"eccentricityAmplitude": 0.0013559440307290061
|
|
214
214
|
},
|
|
@@ -228,7 +228,7 @@ export const DEFAULT_CONSTANTS = Object.freeze({
|
|
|
228
228
|
"perihelionPassageJ2000_JD": 2451547.042,
|
|
229
229
|
"earthInclinationJ2000_deg": 1.57869,
|
|
230
230
|
"earthInclinationRate_arcsecPerCentury": -18,
|
|
231
|
-
"deltaTStart": 55.
|
|
231
|
+
"deltaTStart": 55.47104318258222,
|
|
232
232
|
"sunTilt": 7.155
|
|
233
233
|
},
|
|
234
234
|
foundational: {
|
|
@@ -238,7 +238,7 @@ export const DEFAULT_CONSTANTS = Object.freeze({
|
|
|
238
238
|
"startmodelJD": 2451716.5,
|
|
239
239
|
"startmodelYear": 2000.5,
|
|
240
240
|
"correctionDays": -0.828832119703292,
|
|
241
|
-
"correctionSun": 0.
|
|
241
|
+
"correctionSun": 0.4971540149655503,
|
|
242
242
|
"temperatureGraphMostLikely": 14.5,
|
|
243
243
|
"startAngleModel": 89.91949879,
|
|
244
244
|
"useVariableSpeed": true,
|
|
@@ -248,7 +248,7 @@ export const DEFAULT_CONSTANTS = Object.freeze({
|
|
|
248
248
|
"moonStartposApsidal": 347.5476,
|
|
249
249
|
"moonStartposNodal": 64.0435,
|
|
250
250
|
"moonStartposMoon": 67.8443,
|
|
251
|
-
"moonMeeusLpCorrection": 0.
|
|
251
|
+
"moonMeeusLpCorrection": 0.00908174470925335
|
|
252
252
|
},
|
|
253
253
|
moonMeeus: {
|
|
254
254
|
"elpW1T2Decomposition_arcsecPerCy2": {
|
|
@@ -432,8 +432,8 @@ export const DEFAULT_CONSTANTS = Object.freeze({
|
|
|
432
432
|
"mercury": {
|
|
433
433
|
"name": "Mercury",
|
|
434
434
|
"eocFraction": -0.527,
|
|
435
|
-
"startpos": 83.
|
|
436
|
-
"angleCorrection": 0.
|
|
435
|
+
"startpos": 83.64651142941864,
|
|
436
|
+
"angleCorrection": 0.9727205912043573,
|
|
437
437
|
"perihelionEclipticFraction": [
|
|
438
438
|
8,
|
|
439
439
|
11
|
|
@@ -462,7 +462,7 @@ export const DEFAULT_CONSTANTS = Object.freeze({
|
|
|
462
462
|
"name": "Venus",
|
|
463
463
|
"eocFraction": 0.436,
|
|
464
464
|
"startpos": 249.28769121856186,
|
|
465
|
-
"angleCorrection": -2.
|
|
465
|
+
"angleCorrection": -2.789778861448692,
|
|
466
466
|
"perihelionEclipticFraction": [
|
|
467
467
|
-8,
|
|
468
468
|
6
|
|
@@ -488,7 +488,7 @@ export const DEFAULT_CONSTANTS = Object.freeze({
|
|
|
488
488
|
"name": "Mars",
|
|
489
489
|
"eocFraction": -0.066224,
|
|
490
490
|
"startpos": 121.4634461571797,
|
|
491
|
-
"angleCorrection": -2.
|
|
491
|
+
"angleCorrection": -2.104652936098656,
|
|
492
492
|
"perihelionEclipticFraction": [
|
|
493
493
|
8,
|
|
494
494
|
36
|
|
@@ -517,7 +517,7 @@ export const DEFAULT_CONSTANTS = Object.freeze({
|
|
|
517
517
|
"name": "Jupiter",
|
|
518
518
|
"eocFraction": 0.495,
|
|
519
519
|
"startpos": 13.887946755371052,
|
|
520
|
-
"angleCorrection": 0.
|
|
520
|
+
"angleCorrection": 0.9333205235053406,
|
|
521
521
|
"perihelionEclipticFraction": [
|
|
522
522
|
8,
|
|
523
523
|
39
|
|
@@ -545,8 +545,8 @@ export const DEFAULT_CONSTANTS = Object.freeze({
|
|
|
545
545
|
"saturn": {
|
|
546
546
|
"name": "Saturn",
|
|
547
547
|
"eocFraction": 0.54,
|
|
548
|
-
"startpos": 11.
|
|
549
|
-
"angleCorrection": -0.
|
|
548
|
+
"startpos": 11.279308392461772,
|
|
549
|
+
"angleCorrection": -0.1784695052193328,
|
|
550
550
|
"perihelionEclipticFraction": [
|
|
551
551
|
-8,
|
|
552
552
|
65
|
|
@@ -575,7 +575,7 @@ export const DEFAULT_CONSTANTS = Object.freeze({
|
|
|
575
575
|
"name": "Uranus",
|
|
576
576
|
"eocFraction": 0.53,
|
|
577
577
|
"startpos": 44.900388945775106,
|
|
578
|
-
"angleCorrection": -0.
|
|
578
|
+
"angleCorrection": -0.7343433510960402,
|
|
579
579
|
"perihelionEclipticFraction": [
|
|
580
580
|
1,
|
|
581
581
|
3
|
|
@@ -605,7 +605,7 @@ export const DEFAULT_CONSTANTS = Object.freeze({
|
|
|
605
605
|
"name": "Neptune",
|
|
606
606
|
"eocFraction": 0.585,
|
|
607
607
|
"startpos": 47.9552024382285,
|
|
608
|
-
"angleCorrection": 2.
|
|
608
|
+
"angleCorrection": 2.3327665835675617,
|
|
609
609
|
"perihelionEclipticFraction": [
|
|
610
610
|
2,
|
|
611
611
|
1
|
|
@@ -764,7 +764,7 @@ export const REFERENCE_DATA = Object.freeze({
|
|
|
764
764
|
"sunModelTrueErrorDeg": 0.003,
|
|
765
765
|
"sunTropicalYearDiffSeconds": 0.1,
|
|
766
766
|
"sunSiderealYearDiffSeconds": 0.02,
|
|
767
|
-
"frameworkSunVsJplRmsArcsec": 0.
|
|
767
|
+
"frameworkSunVsJplRmsArcsec": 0.8,
|
|
768
768
|
"meeusCh25SunVsJplRmsArcsec": 1.22,
|
|
769
769
|
"moonSeriesLonVsJplRmsArcsec": 2.84,
|
|
770
770
|
"moonSeriesLatVsJplRmsArcsec": 0.35,
|
|
@@ -110,79 +110,83 @@ const ARG_D0 = 297.8501921;
|
|
|
110
110
|
* [[6 mean-longitude multipliers lMe,lV,lE,lM,lJ,lS],
|
|
111
111
|
* [6 mean-anomaly multipliers MMe,MV,ME,MMa,MJ,MS], cos″, sin″].
|
|
112
112
|
* 70 terms ≥ 0.05″ from the N3 framework-carrier extraction (79-term
|
|
113
|
-
* LSQ on the D2 derived signal, fidelity 0.
|
|
113
|
+
* LSQ on the D2 derived signal, fidelity 0.616″) — re-derived under the
|
|
114
|
+
* ONE eccentricity law (unification; D2 combined residual 0.60″,
|
|
115
|
+
* composed difference vs the previous table ≤1.5″ at the ancient presets,
|
|
116
|
+
* detrended 0.033 min). Individual coefficients redistribute between the
|
|
117
|
+
* near-degenerate ±M sideband families; only the composed function ships.
|
|
114
118
|
* @type {Array<[number[], number[], number, number]>}
|
|
115
119
|
*/
|
|
116
120
|
const TERMS = [
|
|
117
|
-
[[0,
|
|
118
|
-
[[0,
|
|
119
|
-
[[0, 0,
|
|
120
|
-
[[0,
|
|
121
|
-
[[0,
|
|
122
|
-
[[0,
|
|
123
|
-
[[0,
|
|
124
|
-
[[0,
|
|
125
|
-
[[0, 0,
|
|
126
|
-
[[0, 0,
|
|
127
|
-
[[0, 0, 1, -1, 0, 0], [0, 0, 0, -1, 0, 0],
|
|
128
|
-
[[0, 0,
|
|
129
|
-
[[0, 0,
|
|
130
|
-
[[0, 2, -
|
|
131
|
-
[[0,
|
|
132
|
-
[[0, 0,
|
|
133
|
-
[[0,
|
|
134
|
-
[[0, 0, 1, 0, -
|
|
135
|
-
[[0, 0,
|
|
136
|
-
[[0, 3, -
|
|
137
|
-
[[0,
|
|
138
|
-
[[0,
|
|
139
|
-
[[0,
|
|
140
|
-
[[0, 0,
|
|
141
|
-
[[0,
|
|
142
|
-
[[0, 0,
|
|
143
|
-
[[0,
|
|
144
|
-
[[0, 0, 2,
|
|
145
|
-
[[0, 0,
|
|
146
|
-
[[0,
|
|
147
|
-
[[0, 0,
|
|
148
|
-
[[0, 0,
|
|
149
|
-
[[0, 2, -3, 0, 0, 0], [0, 1, 0, 0, 0, 0], 0.
|
|
150
|
-
[[0,
|
|
151
|
-
[[0, 0,
|
|
152
|
-
[[0, 0,
|
|
153
|
-
[[0,
|
|
154
|
-
[[0, 0,
|
|
155
|
-
[[0, 0,
|
|
156
|
-
[[0,
|
|
157
|
-
[[0, 0, 1, 0,
|
|
158
|
-
[[0, 0,
|
|
159
|
-
[[0, 0,
|
|
160
|
-
[[0, 0, 1, 0,
|
|
161
|
-
[[0,
|
|
162
|
-
[[0,
|
|
163
|
-
[[0,
|
|
164
|
-
[[0, 0, 1, 0, 0, -1], [0, 0, -1, 0, 0, 0], -0.0456, 0.2371],
|
|
165
|
-
[[0, 0, 2, 0, -3, 0], [0, 0, 0, 0, 0, 0], 0.1560, -0.1469],
|
|
166
|
-
[[0, 3, -4, 0, 0, 0], [0, 1, 0, 0, 0, 0], -0.1412, 0.1568],
|
|
167
|
-
[[0, 3, -4, 0, 0, 0], [0, -1, 0, 0, 0, 0], -0.1616, -0.1314],
|
|
168
|
-
[[0, 0, -2, 4, 0, 0], [0, 0, 0, 0, 0, 0], 0.1728, -0.0849],
|
|
169
|
-
[[0, 1, -1, 0, 0, 0], [0, 0, -1, 0, 0, 0], -0.0449, 0.1649],
|
|
121
|
+
[[0, 3, -3, 0, 0, 0], [0, 0, -1, 0, 0, 0], -9.2558, -0.3232],
|
|
122
|
+
[[0, 3, -4, 0, 0, 0], [0, 0, 0, 0, 0, 0], -0.1950, -9.2459],
|
|
123
|
+
[[0, 0, 1, 0, -2, 0], [0, 0, 0, 0, 1, 0], -1.4662, -6.4341],
|
|
124
|
+
[[0, 1, -1, 0, 0, 0], [0, 0, 0, 0, 0, 0], 0.1345, 4.8332],
|
|
125
|
+
[[0, 2, -2, 0, 0, 0], [0, 0, 0, 0, 0, 0], -2.1364, -2.9549],
|
|
126
|
+
[[0, 2, -3, 0, 0, 0], [0, 0, 1, 0, 0, 0], -2.8927, -1.1913],
|
|
127
|
+
[[0, 0, 1, 0, -2, 0], [0, 0, 1, 0, 0, 0], 2.8982, -1.0900],
|
|
128
|
+
[[0, 2, -2, 0, 0, 0], [0, 0, -1, 0, 0, 0], 0.7820, 2.8796],
|
|
129
|
+
[[0, 0, 1, 0, -1, 0], [0, 0, -1, 0, 0, 0], -2.5401, -0.1829],
|
|
130
|
+
[[0, 0, 2, 0, -2, 0], [0, 0, 0, 0, 0, 0], -0.2456, -2.1163],
|
|
131
|
+
[[0, 0, 1, -1, 0, 0], [0, 0, 0, -1, 0, 0], 2.1028, 0.1572],
|
|
132
|
+
[[0, 0, 2, -2, 0, 0], [0, 0, -1, 0, 0, 0], 2.0062, 0.4493],
|
|
133
|
+
[[0, 0, 2, 0, -3, 0], [0, 0, 0, 0, 1, 0], 0.2164, 1.7839],
|
|
134
|
+
[[0, 2, -3, 0, 0, 0], [0, 0, 0, 0, 0, 0], -1.5284, 0.8126],
|
|
135
|
+
[[0, 0, 1, 0, -1, 0], [0, 0, 0, 0, -1, 0], -0.9353, -1.1855],
|
|
136
|
+
[[0, 0, 2, -3, 0, 0], [0, 0, 0, 1, 0, 0], 0.4254, -1.4438],
|
|
137
|
+
[[0, 3, -3, 0, 0, 0], [0, -1, 0, 0, 0, 0], -1.2408, 0.7438],
|
|
138
|
+
[[0, 0, 1, 0, -2, 0], [0, 0, 0, 0, 0, 0], 1.3145, -0.1985],
|
|
139
|
+
[[0, 0, 2, 0, -2, 0], [0, 0, -1, 0, 0, 0], -0.4728, 1.1130],
|
|
140
|
+
[[0, 3, -4, 0, 0, 0], [0, 0, -1, 0, 0, 0], 0.9746, 0.3524],
|
|
141
|
+
[[0, 0, -1, 2, 0, 0], [0, 0, -1, 0, 0, 0], -0.9141, -0.1697],
|
|
142
|
+
[[0, 3, -4, 0, 0, 0], [0, 0, 1, 0, 0, 0], -0.7605, 0.1501],
|
|
143
|
+
[[0, 0, -1, 2, 0, 0], [0, 0, 0, -1, 0, 0], 0.6794, -0.0282],
|
|
144
|
+
[[0, 0, -1, 2, 0, 0], [0, 0, 0, 0, 0, 0], -0.6021, 0.2300],
|
|
145
|
+
[[0, 0, 1, 0, -1, 0], [0, 0, 0, 0, 0, 0], -0.2055, -0.6053],
|
|
146
|
+
[[0, 0, 1, -1, 0, 0], [0, 0, 0, 0, 0, 0], -0.6212, -0.0277],
|
|
147
|
+
[[0, 0, 2, 0, -3, 0], [0, 0, 0, 0, 0, 0], 0.0277, 0.5852],
|
|
148
|
+
[[0, 0, -2, 4, 0, 0], [0, 0, -1, 0, 0, 0], -0.4801, 0.2245],
|
|
149
|
+
[[0, 0, 2, -2, 0, 0], [0, 0, 0, -1, 0, 0], 0.0605, -0.5014],
|
|
150
|
+
[[0, 0, -2, 4, 0, 0], [0, 0, 0, 0, 0, 0], 0.4682, 0.1671],
|
|
151
|
+
[[0, 0, 2, -2, 0, 0], [0, 0, 0, 0, 0, 0], 0.2949, 0.3878],
|
|
152
|
+
[[0, 0, 1, 0, 0, -1], [0, 0, 0, 0, 0, 0], 0.0845, -0.4011],
|
|
153
|
+
[[0, 2, -3, 0, 0, 0], [0, 1, 0, 0, 0, 0], 0.0589, -0.3744],
|
|
154
|
+
[[0, 3, -3, 0, 0, 0], [0, 0, 0, 0, 0, 0], -0.3257, -0.1827],
|
|
155
|
+
[[0, 0, 2, 0, -3, 0], [0, 0, -1, 0, 0, 0], 0.0149, 0.3557],
|
|
156
|
+
[[0, 0, -2, 4, 0, 0], [0, 0, 0, -1, 0, 0], -0.3152, -0.0762],
|
|
157
|
+
[[0, 3, -4, 0, 0, 0], [0, -1, 0, 0, 0, 0], 0.0714, 0.3142],
|
|
158
|
+
[[0, 0, -1, 2, 0, 0], [0, 0, 0, 1, 0, 0], 0.1331, -0.2622],
|
|
159
|
+
[[0, 0, 2, -3, 0, 0], [0, 0, -1, 0, 0, 0], 0.2826, 0.0458],
|
|
160
|
+
[[0, 2, -3, 0, 0, 0], [0, 0, -1, 0, 0, 0], -0.1689, -0.2243],
|
|
161
|
+
[[0, 0, 1, 0, -1, 0], [0, 0, 1, 0, 0, 0], -0.0262, -0.2757],
|
|
162
|
+
[[0, 0, 2, -3, 0, 0], [0, 0, 0, 0, 0, 0], 0.2267, -0.1326],
|
|
163
|
+
[[0, 0, 1, 0, -2, 0], [0, 0, 0, 0, -1, 0], -0.2245, -0.0951],
|
|
164
|
+
[[0, 0, 1, 0, 0, -1], [0, 0, -1, 0, 0, 0], -0.0453, 0.2368],
|
|
165
|
+
[[0, 2, -2, 0, 0, 0], [0, -1, 0, 0, 0, 0], -0.2075, 0.0622],
|
|
166
|
+
[[0, 3, -4, 0, 0, 0], [0, 1, 0, 0, 0, 0], -0.1413, 0.1567],
|
|
167
|
+
[[0, 1, -1, 0, 0, 0], [0, 0, -1, 0, 0, 0], 0.0858, -0.1399],
|
|
170
168
|
[[0, 0, 2, 0, -3, 0], [0, 0, 1, 0, 0, 0], 0.1632, -0.0164],
|
|
171
|
-
[[0,
|
|
172
|
-
[[0, 0, 2,
|
|
173
|
-
[[0, 0,
|
|
174
|
-
[[0,
|
|
175
|
-
[[0, 0,
|
|
176
|
-
[[0, 0,
|
|
177
|
-
[[0, 0, 1, 0,
|
|
178
|
-
[[0,
|
|
169
|
+
[[0, 0, 2, -3, 0, 0], [0, 0, 1, 0, 0, 0], 0.1316, -0.0276],
|
|
170
|
+
[[0, 0, -2, 4, 0, 0], [0, 0, 1, 0, 0, 0], 0.1219, 0.0452],
|
|
171
|
+
[[0, 0, 2, 0, -2, 0], [0, 0, 0, 0, 1, 0], -0.1243, -0.0271],
|
|
172
|
+
[[0, 1, -1, 0, 0, 0], [0, -1, 0, 0, 0, 0], 0.1139, -0.0172],
|
|
173
|
+
[[0, 0, 2, 0, 0, -2], [0, 0, 0, 0, 0, 0], -0.0385, 0.1031],
|
|
174
|
+
[[0, 0, 1, 0, 0, -1], [0, 0, 0, 0, 0, -1], -0.0309, 0.1052],
|
|
175
|
+
[[0, 0, 1, 0, -1, 0], [0, 0, 0, 0, 1, 0], 0.0945, 0.0475],
|
|
176
|
+
[[0, 0, 2, -3, 0, 0], [0, 0, 0, -1, 0, 0], -0.0981, -0.0051],
|
|
177
|
+
[[0, 0, 1, 0, 0, -1], [0, 0, 0, 0, 0, 1], -0.0827, 0.0500],
|
|
178
|
+
[[0, 0, 2, 0, -2, 0], [0, 0, 0, 0, -1, 0], 0.0866, -0.0204],
|
|
179
|
+
[[0, 1, -1, 0, 0, 0], [0, 1, 0, 0, 0, 0], -0.0085, -0.0855],
|
|
179
180
|
[[0, 0, 1, 0, -2, 0], [0, 0, -1, 0, 0, 0], -0.0738, 0.0295],
|
|
180
181
|
[[0, 0, 2, 0, -3, 0], [0, 0, 0, 0, -1, 0], 0.0097, 0.0787],
|
|
181
|
-
[[0, 1, -1, 0, 0, 0], [0, 0, 1, 0, 0, 0], -0.0016, 0.
|
|
182
|
-
[[0,
|
|
183
|
-
[[0, 3, -3, 0, 0, 0], [0, 0, 1, 0, 0, 0], 0.
|
|
184
|
-
[[0, 0, 2, 0, -2, 0], [0, 0, 1, 0, 0, 0], -0.0085, 0.
|
|
185
|
-
[[0, 2, -2, 0, 0, 0], [0, 1, 0, 0, 0, 0], -0.
|
|
182
|
+
[[0, 1, -1, 0, 0, 0], [0, 0, 1, 0, 0, 0], -0.0016, 0.0764],
|
|
183
|
+
[[0, 0, 1, -1, 0, 0], [0, 0, 0, 1, 0, 0], 0.0655, 0.0358],
|
|
184
|
+
[[0, 3, -3, 0, 0, 0], [0, 0, 1, 0, 0, 0], 0.0517, -0.0513],
|
|
185
|
+
[[0, 0, 2, 0, -2, 0], [0, 0, 1, 0, 0, 0], -0.0085, 0.0687],
|
|
186
|
+
[[0, 2, -2, 0, 0, 0], [0, 1, 0, 0, 0, 0], -0.0274, 0.0580],
|
|
187
|
+
[[0, 0, 2, -2, 0, 0], [0, 0, 0, 1, 0, 0], 0.0521, 0.0217],
|
|
188
|
+
[[0, 0, 1, -1, 0, 0], [0, 0, 1, 0, 0, 0], 0.0188, 0.0523],
|
|
189
|
+
[[0, 2, -2, 0, 0, 0], [0, 0, 1, 0, 0, 0], -0.0421, -0.0340],
|
|
186
190
|
[[0, 0, 1, -1, 0, 0], [0, 0, -1, 0, 0, 0], -0.0353, -0.0379],
|
|
187
191
|
];
|
|
188
192
|
|
|
@@ -240,7 +244,7 @@ function createSunPlanetaryCompletion({ embWobbleArcsec, carrierRatesDegPerCy })
|
|
|
240
244
|
* at derivation time — the matched-pair fingerprint asserted by test:model.
|
|
241
245
|
* Unchanged from v1/v2: SUN_HARMONICS did not move in the D2 or N3
|
|
242
246
|
* landings. */
|
|
243
|
-
const PAIRED_SUN_HARMONICS_SHA256 = '
|
|
247
|
+
const PAIRED_SUN_HARMONICS_SHA256 = 'cbc189cea1c20292'; // eccentricity unification: Step-0 refit → N2/N3 re-derived (fidelity 0.616″, 70 terms)
|
|
244
248
|
|
|
245
249
|
/** sha256/16 of JSON.stringify([...planets, moonElongation]) — the seven
|
|
246
250
|
* full-precision carrier rates (deg/cy TT) the TERMS table was extracted
|
package/src/model.js
CHANGED
|
@@ -86,7 +86,10 @@ export function assembleModel(C, F) {
|
|
|
86
86
|
|
|
87
87
|
const earthtiltMean = C.earth.earthtiltMean;
|
|
88
88
|
const earthInclAmplitude = C.earth.earthInvPlaneInclinationAmplitude;
|
|
89
|
-
|
|
89
|
+
// eccentricityAmplitude: the v11 H/16-beat amplitude, RETAINED ONLY as the
|
|
90
|
+
// Law-4 K calibration input (plan IP-eccentricity-unification, decision D2:
|
|
91
|
+
// K keeps its value). Earth's eccentricity law no longer uses it — see
|
|
92
|
+
// eccentricityAt (base' derived) below.
|
|
90
93
|
const eccentricityAmplitude = C.earth.eccentricityAmplitude;
|
|
91
94
|
const earthRAAngle = 2 * earthInclAmplitude - (earthInclAmplitude * earthInclAmplitude) / earthtiltMean;
|
|
92
95
|
const earthInclMean = C.earthOrbital.earthInclinationJ2000_deg
|
|
@@ -305,13 +308,46 @@ export function assembleModel(C, F) {
|
|
|
305
308
|
}
|
|
306
309
|
return obliq;
|
|
307
310
|
};
|
|
311
|
+
// ECCENTRICITY UNIFICATION — ONE law for the whole model (plan
|
|
312
|
+
// IP-eccentricity-unification, decision D1 = form (e)). Earth's orbital
|
|
313
|
+
// eccentricity is the magnitude of a vector sum, e = |v₁ + v₂|: v₁ of
|
|
314
|
+
// length base' along the ICRF perihelion (rotating once per H/3), v₂ of
|
|
315
|
+
// length base'/2 FIXED in space along the inclination-cycle anchor
|
|
316
|
+
// direction. Their relative angle θ rides the System-Reset lattice phase
|
|
317
|
+
// (θ(t) = 3(t − balancedYear)/H·360° − 180°, θ(J2000) = 81.178°) — the
|
|
318
|
+
// SAME anchor the inclination law and the Moon channel ride (their
|
|
319
|
+
// extremes coincide: max −23,200, min −79,100). Then
|
|
320
|
+
// e(t) = base' · (1 + cos θ(t) / 2), base' = e(J2000) / (1 + cos θ(J2000) / 2)
|
|
321
|
+
// base' is DERIVED from the observed J2000 eccentricity and the anchor
|
|
322
|
+
// (0.015520; the Law-5 balance moves 99.8636 → 99.8645%, Earth's weight
|
|
323
|
+
// there being 0.05%). No new constants. Why H/3 and not the former H/16
|
|
324
|
+
// beat law: eccentricity is frame-invariant and may carry only fixed-frame
|
|
325
|
+
// lattice periods; H/16 is the OF-DATE perihelion period (13 + 3 = 16 —
|
|
326
|
+
// the H/3 rotation seen from the H/13 equinox) and belongs to ϖ_of-date;
|
|
327
|
+
// measured, the H/16 law's present ė (−0.84e-5/cy) is 5× below the
|
|
328
|
+
// observed −4.20e-5 while this law reads −4.31e-5 (Phase-0 record:
|
|
329
|
+
// tools/explore/fq7s-h3-law-candidate.mjs; JPL Sun 1.49″, registry 0.80″,
|
|
330
|
+
// syzygy 3.72″). Consumers: the eclipse Sun (equation of centre), the
|
|
331
|
+
// besselian Sun distance, the Moon channel (E-factor, perigee/node T²),
|
|
332
|
+
// and the cardinal-point braid — one eccentricity everywhere.
|
|
333
|
+
// ONE implementation for all three runtimes: moon/ecc-channel.cjs (the
|
|
334
|
+
// Node engine's deep-time.js and the browser's script.js instantiate the
|
|
335
|
+
// same channel with the same inputs). Its phase counter runs from J2000
|
|
336
|
+
// (θ₀ = ϖ_ICRF(J2000) − 21.77° = 81.178°, the System-Reset anchor in
|
|
337
|
+
// anchor form — doc 66 §1); base' is derived inside from the observed
|
|
338
|
+
// J2000 eccentricity.
|
|
339
|
+
const moonEcc = createMoonEccChannel({
|
|
340
|
+
cyclesBetween,
|
|
341
|
+
eccentricityBase: C.earth.eccentricityBase,
|
|
342
|
+
perihelionLongitudeJ2000Deg: C.earthOrbital.earthPerihelionLongitudeJ2000,
|
|
343
|
+
inclinationCycleAnchorDeg: C.earthOrbital.earthInclinationCycleAnchor,
|
|
344
|
+
eccentricityJ2000: C.earthOrbital.earthEccentricityJ2000,
|
|
345
|
+
});
|
|
308
346
|
/** @param {number} year @returns {number} */
|
|
309
|
-
const eccentricityAt = (year) =>
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
- 2 * eccentricityBase * eccentricityAmplitude * Math.cos(th));
|
|
314
|
-
};
|
|
347
|
+
const eccentricityAt = (year) => moonEcc.eccAt(year - 2000);
|
|
348
|
+
/** de/dyear of the one law — the cardinal braid's equation-of-centre
|
|
349
|
+
* derivative rides it. @param {number} year @returns {number} */
|
|
350
|
+
const eccentricityRateAt = (year) => moonEcc.eccRateAt(year - 2000);
|
|
315
351
|
/** @param {number} year @returns {number} */
|
|
316
352
|
const inclinationDeg = (year) => earthInclMean
|
|
317
353
|
- earthInclAmplitude * Math.cos(phaseRadians(balancedYear, year, 3));
|
|
@@ -379,8 +415,6 @@ export function assembleModel(C, F) {
|
|
|
379
415
|
balancedYear,
|
|
380
416
|
meanSolarYearDays,
|
|
381
417
|
hJ2000: H,
|
|
382
|
-
eccentricityBase,
|
|
383
|
-
eccentricityAmplitude,
|
|
384
418
|
tiltMeanDeg: earthtiltMean,
|
|
385
419
|
raAngleDeg: earthRAAngle,
|
|
386
420
|
inclAmplitudeDeg: earthInclAmplitude,
|
|
@@ -396,6 +430,7 @@ export function assembleModel(C, F) {
|
|
|
396
430
|
meanHAtAgeMa: (tMa) => deepLod.hAtAge(tMa),
|
|
397
431
|
meanYearRealLodDays: (tMa) => deepLod.yearInDaysAtAge(tMa),
|
|
398
432
|
eccentricityAt,
|
|
433
|
+
eccentricityRateAt,
|
|
399
434
|
},
|
|
400
435
|
});
|
|
401
436
|
/** Tropical year: mean of the four cardinal intervals. @param {number} year @returns {number} */
|
|
@@ -612,14 +647,9 @@ export function assembleModel(C, F) {
|
|
|
612
647
|
const moonAnomalisticMonthDays = totalDaysInH / (nSid - nApsidalEJ2000);
|
|
613
648
|
const moonSynodicMonthDays = totalDaysInH / (nSid + 13 - H);
|
|
614
649
|
|
|
615
|
-
//
|
|
616
|
-
//
|
|
617
|
-
|
|
618
|
-
cyclesBetween,
|
|
619
|
-
eccentricityBase,
|
|
620
|
-
perihelionLongitudeJ2000Deg: C.earthOrbital.earthPerihelionLongitudeJ2000,
|
|
621
|
-
inclinationCycleAnchorDeg: C.earthOrbital.earthInclinationCycleAnchor,
|
|
622
|
-
});
|
|
650
|
+
// moonEcc — the model's ONE eccentricity law — is created above (with
|
|
651
|
+
// eccentricityAt); the Moon channel's E-factor e(t)/e(J2000) and its
|
|
652
|
+
// perigee/node T² channel ride it, e(J2000) being the observed value exactly.
|
|
623
653
|
|
|
624
654
|
// Layer-2 month/precession chain (Brouwer-Clemence m² scaling × the
|
|
625
655
|
// e_E-line modulation)
|
|
@@ -860,12 +890,11 @@ export function assembleModel(C, F) {
|
|
|
860
890
|
// D2 completion table is unchanged (residual 2lE re-fit ≈ 0.1″ — noise).
|
|
861
891
|
const sunL0Deg = C.earthOrbital.sunMeanLongitudeJ2000_deg;
|
|
862
892
|
const sunTropicalRateDegPerCy = 360 * julianCenturyDays / meanSolarYearDays;
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
};
|
|
893
|
+
// The eclipse Sun's eccentricity IS the model's one eccentricity law
|
|
894
|
+
// (eccentricityAt above) — the former sunEccentricityAt (FQ-7-Sun option
|
|
895
|
+
// C-small: the J2000-anchored H/3 line) was the additive-anchor form of the
|
|
896
|
+
// same movement and is retired by the unification (measured identical on
|
|
897
|
+
// every modern gate).
|
|
869
898
|
const sunMeanLongitudeDegAt = (() => {
|
|
870
899
|
// SW PHASE B — the CLOSED FORM on the integrated lattice phase
|
|
871
900
|
// (supersedes the E5 ±3,000-yr trapezoid table; valid at EVERY epoch,
|
|
@@ -943,7 +972,7 @@ export function assembleModel(C, F) {
|
|
|
943
972
|
frameworkSun: {
|
|
944
973
|
sunMeanLongitudeJ2000Deg: sunL0Deg,
|
|
945
974
|
tropicalRateDegPerCy: sunTropicalRateDegPerCy,
|
|
946
|
-
eccentricityAt
|
|
975
|
+
eccentricityAt,
|
|
947
976
|
perihelionLongitudeDegAt: earthPerihelionDeg,
|
|
948
977
|
meanLongitudeDegAt: sunMeanLongitudeDegAt,
|
|
949
978
|
},
|
|
@@ -1087,7 +1116,7 @@ export function assembleModel(C, F) {
|
|
|
1087
1116
|
frameworkSunDeps: Object.freeze({
|
|
1088
1117
|
sunMeanLongitudeJ2000Deg: sunL0Deg,
|
|
1089
1118
|
tropicalRateDegPerCy: sunTropicalRateDegPerCy,
|
|
1090
|
-
eccentricityAt
|
|
1119
|
+
eccentricityAt,
|
|
1091
1120
|
perihelionLongitudeDegAt: earthPerihelionDeg,
|
|
1092
1121
|
meanLongitudeDegAt: sunMeanLongitudeDegAt,
|
|
1093
1122
|
}),
|
package/src/moon/ecc-channel.cjs
CHANGED
|
@@ -8,10 +8,14 @@
|
|
|
8
8
|
* max. The observed J2000 e (−0.86%), ė (+1.7%) and the sign of ë are
|
|
9
9
|
* PREDICTIONS of this line, not inputs.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
11
|
+
* ONE law for the eclipse chain (FQ-7-Sun option C-small, doc 66 §5): the
|
|
12
|
+
* eclipse Sun's equation of centre rides this same H/3 line (anchored at
|
|
13
|
+
* its J2000 value, model.js sunEccentricityAt) — eccentricity is
|
|
14
|
+
* frame-invariant and may carry only fixed-frame lattice periods; the
|
|
15
|
+
* H/16 perihelion cycle is the H/3 rotation seen from the H/13 equinox
|
|
16
|
+
* (13 + 3 = 16) and belongs to ϖ, not e (doc 108). Only the
|
|
17
|
+
* cardinal-point/deep-time path still keeps the H/16 law (`cardinal`'s
|
|
18
|
+
* injected eccentricityAt) — a recorded, not yet resolved, split.
|
|
15
19
|
*
|
|
16
20
|
* Extracted VERBATIM from src/script.js (_FW_ECC, _fwEarthEcc,
|
|
17
21
|
* _eCompModulation, _fwChannelIntegral, the framework branch of _fwEFactor),
|
|
@@ -39,6 +43,7 @@
|
|
|
39
43
|
* @param {{
|
|
40
44
|
* cyclesBetween: (yearA: number, yearB: number, divisorN: number) => (number | null),
|
|
41
45
|
* eccentricityBase: number,
|
|
46
|
+
* eccentricityJ2000?: number,
|
|
42
47
|
* perihelionLongitudeJ2000Deg: number,
|
|
43
48
|
* inclinationCycleAnchorDeg: number,
|
|
44
49
|
* }} deps — cyclesBetween MUST be the engine's own H-lattice phase counter
|
|
@@ -51,10 +56,21 @@ function createMoonEccChannel({
|
|
|
51
56
|
eccentricityBase,
|
|
52
57
|
perihelionLongitudeJ2000Deg,
|
|
53
58
|
inclinationCycleAnchorDeg,
|
|
59
|
+
eccentricityJ2000,
|
|
54
60
|
}) {
|
|
55
61
|
const th0 = (perihelionLongitudeJ2000Deg - inclinationCycleAnchorDeg) * Math.PI / 180;
|
|
56
|
-
|
|
57
|
-
|
|
62
|
+
// ECCENTRICITY UNIFICATION (plan IP-eccentricity-unification, D1 = form
|
|
63
|
+
// (e)): this line is the model's ONE eccentricity law for every consumer
|
|
64
|
+
// (eclipse Sun, Sun distance, Moon E-factor and T² channel, cardinal
|
|
65
|
+
// braid, scene). When the observed J2000 eccentricity is supplied the
|
|
66
|
+
// mean is DERIVED from it and the shared anchor — base' = e0 / (1 +
|
|
67
|
+
// cos θ₀ / 2) = 0.015520 — so e(J2000) is exact by construction; the
|
|
68
|
+
// legacy form (mean = the Law-5 base, e(J2000) a −0.86% prediction) is
|
|
69
|
+
// kept for callers that do not supply it.
|
|
70
|
+
const mean = eccentricityJ2000 !== undefined
|
|
71
|
+
? eccentricityJ2000 / (1 + Math.cos(th0) / 2)
|
|
72
|
+
: eccentricityBase;
|
|
73
|
+
const amplitude = mean / 2;
|
|
58
74
|
const e0 = mean + amplitude * Math.cos(th0); // J2000 anchor, exact by construction
|
|
59
75
|
const g0 = Math.pow(1 - e0 * e0, -1.5); // (1−e²)^(−3/2) at the anchor
|
|
60
76
|
|
|
@@ -102,7 +118,21 @@ function createMoonEccChannel({
|
|
|
102
118
|
return eccAt(tYr) / e0;
|
|
103
119
|
}
|
|
104
120
|
|
|
105
|
-
|
|
121
|
+
/** de/dyear of the line at tYr years from J2000 (the cardinal braid's
|
|
122
|
+
* equation-of-centre derivative): −amplitude·sin(θ)·dθ/dt, with dθ/dt
|
|
123
|
+
* from the phase counter's two-point difference over ±1 yr (exact for a
|
|
124
|
+
* linear phase, ppm-class under the integrated one). Returns 0 past the
|
|
125
|
+
* tidal-lock asymptote, where eccAt returns the mean.
|
|
126
|
+
* @param {number} tYr @returns {number} */
|
|
127
|
+
function eccRateAt(tYr) {
|
|
128
|
+
const c = cyclesBetween(2000, 2000 + tYr, 3);
|
|
129
|
+
if (c === null) return 0;
|
|
130
|
+
const cp = cyclesBetween(2000, 2000 + tYr + 1, 3), cm = cyclesBetween(2000, 2000 + tYr - 1, 3);
|
|
131
|
+
const dth = 2 * Math.PI * ((cp === null || cm === null) ? 0 : (cp - cm) / 2);
|
|
132
|
+
return -amplitude * Math.sin(th0 + 2 * Math.PI * c) * dth;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return { eccAt, eccRateAt, modulation, channelIntegral, eFactorAt, th0, amplitude, mean, e0, g0 };
|
|
106
136
|
}
|
|
107
137
|
|
|
108
138
|
module.exports = { createMoonEccChannel };
|
package/src/planets/predict.cjs
CHANGED
|
@@ -87,7 +87,7 @@ function beatPair(t1, t2) {
|
|
|
87
87
|
* @property {(year: number) => number} computeObliquityEarthDeg
|
|
88
88
|
* @property {(year: number) => number} computeEccentricityEarth
|
|
89
89
|
* @property {number} obliquityMeanDeg - the fitted solstice-obliquity mean
|
|
90
|
-
* @property {number} eccentricityMean -
|
|
90
|
+
* @property {number} eccentricityMean - Earth's mean eccentricity (the one law's base′)
|
|
91
91
|
*/
|
|
92
92
|
|
|
93
93
|
/**
|