@essrt/physics 1.17.0 → 2.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/cardinal/index.cjs +7 -6
- package/src/constants/coefficients.js +21 -21
- 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 +53 -42
- 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: "2f39a17827ddce26";
|
|
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: "2f39a17827ddce26";
|
|
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 = "2f39a17827ddce26";
|
|
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: "2f39a17827ddce26",
|
|
46
46
|
additionalBodies: {
|
|
47
47
|
"pluto": {
|
|
48
48
|
"name": "Pluto",
|
|
@@ -179,7 +179,7 @@ export const DEFAULT_CONSTANTS = Object.freeze({
|
|
|
179
179
|
"alpha1PerMa": -0.000099375895103,
|
|
180
180
|
"alpha3PerMa3": -6.4186463489e-12,
|
|
181
181
|
"alpha4PerMa4": 1.3619800519e-16,
|
|
182
|
-
"alphaClimateScalePerMille": -3.
|
|
182
|
+
"alphaClimateScalePerMille": -3.665e-7,
|
|
183
183
|
"dtStackTaperFullHalfwidthYr": 300000,
|
|
184
184
|
"dtStackTaperTotalHalfwidthYr": 400000,
|
|
185
185
|
"recessionRegime": {
|
|
@@ -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.15957982403355,
|
|
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
|
|
@@ -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,9 @@ 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 Law-4 input A (the 1246 triangle closure; the
|
|
90
|
+
// wobble-marker distance). It is the K calibration input ONLY — Earth's
|
|
91
|
+
// eccentricity law does not use it; see eccentricityAt (base' derived) below.
|
|
90
92
|
const eccentricityAmplitude = C.earth.eccentricityAmplitude;
|
|
91
93
|
const earthRAAngle = 2 * earthInclAmplitude - (earthInclAmplitude * earthInclAmplitude) / earthtiltMean;
|
|
92
94
|
const earthInclMean = C.earthOrbital.earthInclinationJ2000_deg
|
|
@@ -305,13 +307,46 @@ export function assembleModel(C, F) {
|
|
|
305
307
|
}
|
|
306
308
|
return obliq;
|
|
307
309
|
};
|
|
310
|
+
// ECCENTRICITY UNIFICATION — ONE law for the whole model (plan
|
|
311
|
+
// IP-eccentricity-unification, decision D1 = form (e)). Earth's orbital
|
|
312
|
+
// eccentricity is the magnitude of a vector sum, e = |v₁ + v₂|: v₁ of
|
|
313
|
+
// length base' along the ICRF perihelion (rotating once per H/3), v₂ of
|
|
314
|
+
// length base'/2 FIXED in space along the inclination-cycle anchor
|
|
315
|
+
// direction. Their relative angle θ rides the System-Reset lattice phase
|
|
316
|
+
// (θ(t) = 3(t − balancedYear)/H·360° − 180°, θ(J2000) = 81.178°) — the
|
|
317
|
+
// SAME anchor the inclination law and the Moon channel ride (their
|
|
318
|
+
// extremes coincide: max −23,200, min −79,100). Then
|
|
319
|
+
// e(t) = base' · (1 + cos θ(t) / 2), base' = e(J2000) / (1 + cos θ(J2000) / 2)
|
|
320
|
+
// base' is DERIVED from the observed J2000 eccentricity and the anchor
|
|
321
|
+
// (0.015520; the Law-5 balance moves 99.8636 → 99.8645%, Earth's weight
|
|
322
|
+
// there being 0.05%). No new constants. Why H/3 and not the former H/16
|
|
323
|
+
// beat law: eccentricity is frame-invariant and may carry only fixed-frame
|
|
324
|
+
// lattice periods; H/16 is the OF-DATE perihelion period (13 + 3 = 16 —
|
|
325
|
+
// the H/3 rotation seen from the H/13 equinox) and belongs to ϖ_of-date;
|
|
326
|
+
// measured, the H/16 law's present ė (−0.84e-5/cy) is 5× below the
|
|
327
|
+
// observed −4.20e-5 while this law reads −4.31e-5 (Phase-0 record:
|
|
328
|
+
// tools/explore/fq7s-h3-law-candidate.mjs; JPL Sun 1.49″, registry 0.80″,
|
|
329
|
+
// syzygy 3.72″). Consumers: the eclipse Sun (equation of centre), the
|
|
330
|
+
// besselian Sun distance, the Moon channel (E-factor, perigee/node T²),
|
|
331
|
+
// and the cardinal-point braid — one eccentricity everywhere.
|
|
332
|
+
// ONE implementation for all three runtimes: moon/ecc-channel.cjs (the
|
|
333
|
+
// Node engine's deep-time.js and the browser's script.js instantiate the
|
|
334
|
+
// same channel with the same inputs). Its phase counter runs from J2000
|
|
335
|
+
// (θ₀ = ϖ_ICRF(J2000) − 21.77° = 81.178°, the System-Reset anchor in
|
|
336
|
+
// anchor form — doc 66 §1); base' is derived inside from the observed
|
|
337
|
+
// J2000 eccentricity.
|
|
338
|
+
const moonEcc = createMoonEccChannel({
|
|
339
|
+
cyclesBetween,
|
|
340
|
+
eccentricityBase: C.earth.eccentricityBase,
|
|
341
|
+
perihelionLongitudeJ2000Deg: C.earthOrbital.earthPerihelionLongitudeJ2000,
|
|
342
|
+
inclinationCycleAnchorDeg: C.earthOrbital.earthInclinationCycleAnchor,
|
|
343
|
+
eccentricityJ2000: C.earthOrbital.earthEccentricityJ2000,
|
|
344
|
+
});
|
|
308
345
|
/** @param {number} year @returns {number} */
|
|
309
|
-
const eccentricityAt = (year) =>
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
- 2 * eccentricityBase * eccentricityAmplitude * Math.cos(th));
|
|
314
|
-
};
|
|
346
|
+
const eccentricityAt = (year) => moonEcc.eccAt(year - 2000);
|
|
347
|
+
/** de/dyear of the one law — the cardinal braid's equation-of-centre
|
|
348
|
+
* derivative rides it. @param {number} year @returns {number} */
|
|
349
|
+
const eccentricityRateAt = (year) => moonEcc.eccRateAt(year - 2000);
|
|
315
350
|
/** @param {number} year @returns {number} */
|
|
316
351
|
const inclinationDeg = (year) => earthInclMean
|
|
317
352
|
- earthInclAmplitude * Math.cos(phaseRadians(balancedYear, year, 3));
|
|
@@ -379,8 +414,6 @@ export function assembleModel(C, F) {
|
|
|
379
414
|
balancedYear,
|
|
380
415
|
meanSolarYearDays,
|
|
381
416
|
hJ2000: H,
|
|
382
|
-
eccentricityBase,
|
|
383
|
-
eccentricityAmplitude,
|
|
384
417
|
tiltMeanDeg: earthtiltMean,
|
|
385
418
|
raAngleDeg: earthRAAngle,
|
|
386
419
|
inclAmplitudeDeg: earthInclAmplitude,
|
|
@@ -396,6 +429,7 @@ export function assembleModel(C, F) {
|
|
|
396
429
|
meanHAtAgeMa: (tMa) => deepLod.hAtAge(tMa),
|
|
397
430
|
meanYearRealLodDays: (tMa) => deepLod.yearInDaysAtAge(tMa),
|
|
398
431
|
eccentricityAt,
|
|
432
|
+
eccentricityRateAt,
|
|
399
433
|
},
|
|
400
434
|
});
|
|
401
435
|
/** Tropical year: mean of the four cardinal intervals. @param {number} year @returns {number} */
|
|
@@ -612,14 +646,9 @@ export function assembleModel(C, F) {
|
|
|
612
646
|
const moonAnomalisticMonthDays = totalDaysInH / (nSid - nApsidalEJ2000);
|
|
613
647
|
const moonSynodicMonthDays = totalDaysInH / (nSid + 13 - H);
|
|
614
648
|
|
|
615
|
-
//
|
|
616
|
-
//
|
|
617
|
-
|
|
618
|
-
cyclesBetween,
|
|
619
|
-
eccentricityBase,
|
|
620
|
-
perihelionLongitudeJ2000Deg: C.earthOrbital.earthPerihelionLongitudeJ2000,
|
|
621
|
-
inclinationCycleAnchorDeg: C.earthOrbital.earthInclinationCycleAnchor,
|
|
622
|
-
});
|
|
649
|
+
// moonEcc — the model's ONE eccentricity law — is created above (with
|
|
650
|
+
// eccentricityAt); the Moon channel's E-factor e(t)/e(J2000) and its
|
|
651
|
+
// perigee/node T² channel ride it, e(J2000) being the observed value exactly.
|
|
623
652
|
|
|
624
653
|
// Layer-2 month/precession chain (Brouwer-Clemence m² scaling × the
|
|
625
654
|
// e_E-line modulation)
|
|
@@ -860,29 +889,11 @@ export function assembleModel(C, F) {
|
|
|
860
889
|
// D2 completion table is unchanged (residual 2lE re-fit ≈ 0.1″ — noise).
|
|
861
890
|
const sunL0Deg = C.earthOrbital.sunMeanLongitudeJ2000_deg;
|
|
862
891
|
const sunTropicalRateDegPerCy = 360 * julianCenturyDays / meanSolarYearDays;
|
|
863
|
-
//
|
|
864
|
-
//
|
|
865
|
-
//
|
|
866
|
-
//
|
|
867
|
-
//
|
|
868
|
-
// H/13 equinox) — it belongs to ϖ_of-date, not to e. The previous form
|
|
869
|
-
// added the H/16 law's own slope (−0.84e-5/cy) on top of the H/3 line,
|
|
870
|
-
// and that slope WAS the measured Sun-side ė tension (annual channel
|
|
871
|
-
// T·sinM −3.7″/cy; JPL sides with the H/3 line: fq7s-ecc-consistency.mjs).
|
|
872
|
-
// Anchor: the H/16 law's J2000 value (the observed e, anchored by design),
|
|
873
|
-
// evaluated once — an explicit law change, not a hidden freeze; the
|
|
874
|
-
// cardinal-point path keeps the H/16 law (eccentricityAt) unchanged.
|
|
875
|
-
// Measured at the swap: JPL Sun 2.123 → 1.487″ (1900–2100), registry
|
|
876
|
-
// window 0.93 → 0.80″, syzygy fleet 3.756 → 3.719″, T·sinM −3.65 → −0.19″/cy,
|
|
877
|
-
// curvature term unchanged in size; the H/16 term at the corpus epochs
|
|
878
|
-
// detrends to 0.174 min — below the ancient corpus's discrimination.
|
|
879
|
-
const sunEccentricityJ2000 = eccentricityAt(2000);
|
|
880
|
-
/** @param {number} year @returns {number} */
|
|
881
|
-
const sunEccentricityAt = (year) => {
|
|
882
|
-
const cos3 = -Math.cos(phaseRadians(balancedYear, year, 3));
|
|
883
|
-
const cos3J2000 = -Math.cos(phaseRadians(balancedYear, 2000, 3));
|
|
884
|
-
return sunEccentricityJ2000 + (eccentricityBase / 2) * (cos3 - cos3J2000);
|
|
885
|
-
};
|
|
892
|
+
// The eclipse Sun's eccentricity IS the model's one eccentricity law
|
|
893
|
+
// (eccentricityAt above) — the former sunEccentricityAt (FQ-7-Sun option
|
|
894
|
+
// C-small: the J2000-anchored H/3 line) was the additive-anchor form of the
|
|
895
|
+
// same movement and is retired by the unification (measured identical on
|
|
896
|
+
// every modern gate).
|
|
886
897
|
const sunMeanLongitudeDegAt = (() => {
|
|
887
898
|
// SW PHASE B — the CLOSED FORM on the integrated lattice phase
|
|
888
899
|
// (supersedes the E5 ±3,000-yr trapezoid table; valid at EVERY epoch,
|
|
@@ -960,7 +971,7 @@ export function assembleModel(C, F) {
|
|
|
960
971
|
frameworkSun: {
|
|
961
972
|
sunMeanLongitudeJ2000Deg: sunL0Deg,
|
|
962
973
|
tropicalRateDegPerCy: sunTropicalRateDegPerCy,
|
|
963
|
-
eccentricityAt
|
|
974
|
+
eccentricityAt,
|
|
964
975
|
perihelionLongitudeDegAt: earthPerihelionDeg,
|
|
965
976
|
meanLongitudeDegAt: sunMeanLongitudeDegAt,
|
|
966
977
|
},
|
|
@@ -1104,7 +1115,7 @@ export function assembleModel(C, F) {
|
|
|
1104
1115
|
frameworkSunDeps: Object.freeze({
|
|
1105
1116
|
sunMeanLongitudeJ2000Deg: sunL0Deg,
|
|
1106
1117
|
tropicalRateDegPerCy: sunTropicalRateDegPerCy,
|
|
1107
|
-
eccentricityAt
|
|
1118
|
+
eccentricityAt,
|
|
1108
1119
|
perihelionLongitudeDegAt: earthPerihelionDeg,
|
|
1109
1120
|
meanLongitudeDegAt: sunMeanLongitudeDegAt,
|
|
1110
1121
|
}),
|
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
|
/**
|