@essrt/physics 20.0.1 → 22.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/README.md +4 -4
- package/package.json +4 -8
- package/src/cardinal/one-source-structure.cjs +3 -2
- package/src/chain-cycles/index.cjs +12 -30
- package/src/climate/l1-orbital.cjs +3 -1
- package/src/constants/coefficients.d.ts +17 -93
- package/src/constants/coefficients.js +7 -22
- package/src/constants/generated.d.ts +18 -156
- package/src/constants/generated.js +33 -168
- package/src/deltat/deep-time.cjs +36 -92
- package/src/deltat/recession-history.cjs +2 -1
- package/src/earth/deep-orbital-history.cjs +4 -4
- package/src/earth/frame-of-date.cjs +25 -1
- package/src/earth/precession-composed.cjs +3 -3
- package/src/earth/year-lengths.cjs +16 -1
- package/src/eclipse/sun-planetary-completion.cjs +11 -12
- package/src/index.js +28 -48
- package/src/layer0/derive-params.js +10 -5
- package/src/layer0/index.js +27 -73
- package/src/layer1/index.js +6 -37
- package/src/model.js +200 -225
- package/src/moon/arguments.cjs +57 -83
- package/src/moon/deep-modes-artifact.cjs +2 -2
- package/src/moon/month-chain.cjs +25 -59
- package/src/moon/series.cjs +14 -10
- package/src/phase/deep-calendar.cjs +35 -80
- package/src/planets/chain-artifact.js +2 -2
- package/src/planets/display-names.cjs +30 -0
- package/src/planets/geometry.cjs +79 -29
- package/src/planets/model.cjs +12 -11
- package/src/planets/spin-channel.cjs +46 -2
- package/types/chain-cycles/index.d.cts +9 -4
- package/types/climate/l1-orbital.d.cts +3 -1
- package/types/constants/coefficients.d.ts +17 -93
- package/types/constants/generated.d.ts +18 -156
- package/types/deltat/deep-time.d.cts +3 -16
- package/types/earth/frame-of-date.d.cts +9 -0
- package/types/earth/year-lengths.d.cts +12 -0
- package/types/eclipse/sun-planetary-completion.d.cts +0 -9
- package/types/index.d.ts +4 -13
- package/types/layer0/derive-params.d.ts +7 -4
- package/types/layer0/index.d.ts +6 -13
- package/types/layer1/index.d.ts +0 -2
- package/types/model.d.ts +8 -6
- package/types/moon/arguments.d.cts +23 -22
- package/types/moon/deep-modes-artifact.d.cts +3 -3
- package/types/moon/month-chain.d.cts +7 -16
- package/types/moon/series.d.cts +2 -4
- package/types/phase/deep-calendar.d.cts +14 -50
- package/types/planets/display-names.d.cts +2 -0
- package/types/planets/geometry.d.cts +36 -13
- package/types/planets/model.d.cts +7 -6
- package/types/planets/spin-channel.d.cts +4 -0
- package/src/cardinal/index.cjs +0 -324
- package/src/moon/ecc-channel.cjs +0 -141
- package/src/phase/index.cjs +0 -186
- package/src/planets/ecc-channel.cjs +0 -59
- package/src/sun/longitude-correction.cjs +0 -68
- package/types/cardinal/index.d.cts +0 -80
- package/types/moon/ecc-channel.d.cts +0 -30
- package/types/phase/index.d.cts +0 -38
- package/types/planets/ecc-channel.d.cts +0 -20
- package/types/sun/longitude-correction.d.cts +0 -41
|
@@ -25,17 +25,12 @@ export type DeepTimeLodConstants = {
|
|
|
25
25
|
alpha1PerMa: number;
|
|
26
26
|
alpha3PerMa3: number;
|
|
27
27
|
alpha4PerMa4: number;
|
|
28
|
-
holisticYearJ2000: number;
|
|
29
28
|
/**
|
|
30
|
-
* - the
|
|
29
|
+
* - ω₀, the J2000 day length (the SI day since plan 09; identifier kept)
|
|
31
30
|
*/
|
|
32
31
|
lodNowH13Seconds: number;
|
|
33
32
|
meanSiderealYearJ2000Seconds: number;
|
|
34
33
|
solarMassLossFracPerYear: number;
|
|
35
|
-
/**
|
|
36
|
-
* - Actual-LOD numerator
|
|
37
|
-
*/
|
|
38
|
-
siderealYearDaysKinematicJ2000: number;
|
|
39
34
|
/**
|
|
40
35
|
* - f_S, the solar fraction of the J2000
|
|
41
36
|
* precession torque (derive-params) — the unit H(t) = 13·T_p,composed needs it
|
|
@@ -49,7 +44,6 @@ export type DeepTimeLodDeps = {
|
|
|
49
44
|
* - GIA α(t)
|
|
50
45
|
*/
|
|
51
46
|
moiFactorAtAge: (tMa: number) => number;
|
|
52
|
-
siderealYearDaysFourierAt: (year: number) => number;
|
|
53
47
|
/**
|
|
54
48
|
* - gated δLOD sum (incl. swing)
|
|
55
49
|
*/
|
|
@@ -101,11 +95,9 @@ export type DeepTimeLodDeps = {
|
|
|
101
95
|
* @property {number} aMoonNowMetres - Farhat polynomial anchor
|
|
102
96
|
* @property {number} alpha1PerMa @property {number} alpha3PerMa3
|
|
103
97
|
* @property {number} alpha4PerMa4
|
|
104
|
-
* @property {number}
|
|
105
|
-
* @property {number} lodNowH13Seconds - the H/13-identity mean LOD at J2000
|
|
98
|
+
* @property {number} lodNowH13Seconds - ω₀, the J2000 day length (the SI day since plan 09; identifier kept)
|
|
106
99
|
* @property {number} meanSiderealYearJ2000Seconds
|
|
107
100
|
* @property {number} solarMassLossFracPerYear
|
|
108
|
-
* @property {number} siderealYearDaysKinematicJ2000 - Actual-LOD numerator
|
|
109
101
|
* @property {number} precessionSolarShareJ2000 - f_S, the solar fraction of the J2000
|
|
110
102
|
* precession torque (derive-params) — the unit H(t) = 13·T_p,composed needs it
|
|
111
103
|
*/
|
|
@@ -114,7 +106,6 @@ export type DeepTimeLodDeps = {
|
|
|
114
106
|
* @property {DeepTimeLodConstants} constants
|
|
115
107
|
* @property {(tMa: number) => number} moonDistanceMetresAtAge
|
|
116
108
|
* @property {(tMa: number) => number} moiFactorAtAge - GIA α(t)
|
|
117
|
-
* @property {(year: number) => number} siderealYearDaysFourierAt
|
|
118
109
|
* @property {(year: number) => number} cycleLodSumAt - gated δLOD sum (incl. swing)
|
|
119
110
|
* @property {(year: number) => number} swingLodAt - gated swing δLOD alone
|
|
120
111
|
* @property {(year: number) => number} swingLodRateAt - gated analytic swing rate
|
|
@@ -141,7 +132,6 @@ export function createDeepTimeLod(deps: DeepTimeLodDeps): {
|
|
|
141
132
|
lodSecondsAtAge: (t_Ma: number) => number | null;
|
|
142
133
|
lodSecondsAtAgeWithAlpha: (t_Ma: number, alpha: number) => number | null;
|
|
143
134
|
lodHoursAtAge: (t_Ma: number) => number | null;
|
|
144
|
-
hAtAge: (t_Ma: number) => number | null;
|
|
145
135
|
lunisolarPrecessionRateArcsecPerYrAtAge: (t_Ma: number) => number | null;
|
|
146
136
|
lunisolarPrecessionPeriodYearsAtAge: (t_Ma: number) => number | null;
|
|
147
137
|
lunarTorqueFactorAtAge: (tMa: number) => (number | null);
|
|
@@ -149,11 +139,11 @@ export function createDeepTimeLod(deps: DeepTimeLodDeps): {
|
|
|
149
139
|
siderealYearSecondsAtAge: (t_Ma: number) => number;
|
|
150
140
|
tropicalYearSecondsAtAge: (t_Ma: number) => number;
|
|
151
141
|
tropicalYearDaysAtAge: (t_Ma: number) => number | null;
|
|
142
|
+
tropicalYearSecondsFromLod: (t_Ma: number, LOD_s: number | null) => number;
|
|
152
143
|
eclipticLodCorrectionSecondsAtAge: (t_Ma: number) => number | null;
|
|
153
144
|
yearInDaysAtAge: (t_Ma: number) => number | null;
|
|
154
145
|
deltaTRawSecondsAtAge: (t_Ma: number) => number;
|
|
155
146
|
lodSecondsWithCorrectionsAtAge: (t_Ma: number) => number | null;
|
|
156
|
-
lodSecondsActualAtAge: (t_Ma: number) => number | null;
|
|
157
147
|
dLodDtDecompositionAtAge: (t_Ma: number) => {
|
|
158
148
|
tidal: number | null;
|
|
159
149
|
gia: number | null;
|
|
@@ -163,7 +153,4 @@ export function createDeepTimeLod(deps: DeepTimeLodDeps): {
|
|
|
163
153
|
net_L3: number | null;
|
|
164
154
|
net_L4: number | null;
|
|
165
155
|
};
|
|
166
|
-
eraClockHAtAge: (t_Ma: number) => number | null;
|
|
167
|
-
eraClockTropicalYearSecondsAtAge: (t_Ma: number) => number;
|
|
168
|
-
eraClockYearInDaysAtAge: (t_Ma: number) => number | null;
|
|
169
156
|
};
|
|
@@ -35,3 +35,12 @@ export function computeEarthFrameOfDate(sample: {
|
|
|
35
35
|
* @returns {number} θ in radians, in (−π, π]
|
|
36
36
|
*/
|
|
37
37
|
export function solveWheelAngleForLongitude(lambdaRad: number, e: number, periRad: number): number;
|
|
38
|
+
/**
|
|
39
|
+
* The scene's world frame: R maps a J2000-ecliptic vector to world, columns
|
|
40
|
+
* [ĝ, n̂ × ĝ, n̂] = [the equinox, longitude 90°, the ecliptic pole] with
|
|
41
|
+
* n̂ = world Y exactly and ĝ at the view azimuth.
|
|
42
|
+
* @returns {number[][]} a 3×3 rotation matrix, rows × columns
|
|
43
|
+
*/
|
|
44
|
+
export function computeSceneWorldFrameJ2000(): number[][];
|
|
45
|
+
/** The J2000 equinox's azimuth in the scene's world XZ plane, degrees (atan2(x, z)) — the view convention. */
|
|
46
|
+
export const SCENE_EQUINOX_VIEW_AZIMUTH_DEG: 158.2265109779131;
|
|
@@ -53,6 +53,18 @@ export function createYearLengths({ sampleAt, massLossSiderealSecondsAtYearFn }:
|
|
|
53
53
|
/** The planetary λ̇ ratio (diagnostic; ≡1 at J2000). */
|
|
54
54
|
planetaryRelAtYear: (year: number) => number;
|
|
55
55
|
}>;
|
|
56
|
+
/** The J2000 mean tropical year, DAYS — derived in ONE home from two IAU
|
|
57
|
+
* inputs, the sidereal year and the general precession in longitude p_A
|
|
58
|
+
* (″ per JULIAN year), in the exact rate form
|
|
59
|
+
* 1/T_trop = 1/T_sid + p_A / (1,296,000″ · 365.25 d)
|
|
60
|
+
* — the same beat `shorterYear` evaluates of date. 365.242190469 d on the
|
|
61
|
+
* IAU 2006 inputs. Plan 09: replaces the Meeus & Savoie 1992 input
|
|
62
|
+
* 365.2421897 (66 ms shorter, whose beat with the sidereal year read
|
|
63
|
+
* 25,770.7 yr against p_A's 25,771.6 — three inputs over-determining a
|
|
64
|
+
* two-parameter identity). Counting p_A per tropical or sidereal year
|
|
65
|
+
* instead moves this by 26 ms; IAU states p_A per Julian year.
|
|
66
|
+
* @param {number} siderealYearDays @param {number} generalPrecessionArcsecPerJulianYr @returns {number} */
|
|
67
|
+
export function computeMeanTropicalYearJ2000Days(siderealYearDays: number, generalPrecessionArcsecPerJulianYr: number): number;
|
|
56
68
|
/**
|
|
57
69
|
* The published of-date window (plan 06 Phase 3 S2): inside |year − 2000| ≤
|
|
58
70
|
* this span the one-family route is THE published year-length / precession
|
|
@@ -63,15 +63,6 @@ export function computeCarrierRatesDegPerCy({ meanSiderealYearDays, moonSidereal
|
|
|
63
63
|
* @returns {[number, number]}
|
|
64
64
|
*/
|
|
65
65
|
export function eccVectorOfDateEmbedded(bodyIndex: number, T: number): [number, number];
|
|
66
|
-
/** sha256/16 of JSON.stringify(FITTED_COEFFICIENTS.SUN_LONGITUDE_HARMONICS)
|
|
67
|
-
* at derivation time — the matched-pair fingerprint asserted by test:model.
|
|
68
|
-
* Unchanged from v1/v2: SUN_HARMONICS did not move in the D2 or N3
|
|
69
|
-
* landings. Plan 07 R10 moved the hash WITHOUT a refit: the three (sin, cos)
|
|
70
|
-
* pairs were rotated exactly from the t₀ phase origin to J2000
|
|
71
|
-
* (tools/fit/reorigin-combs-j2000.mjs), the finder Sun is bit-identical, so
|
|
72
|
-
* the residual this table was derived from is unchanged — the table stands
|
|
73
|
-
* (fidelity 0.616″, 70 terms), only the fingerprint is re-recorded. */
|
|
74
|
-
export const PAIRED_SUN_HARMONICS_SHA256: "53530a28a60b3c4a";
|
|
75
66
|
/** sha256/16 of JSON.stringify([...planets, moonElongation]) — the seven
|
|
76
67
|
* full-precision carrier rates (deg/cy TT) the tables pair with: since plan
|
|
77
68
|
* 06 I3 the model's own banked J2000 sidereal mean motions for the planets
|
package/types/index.d.ts
CHANGED
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
export { createEpochPrimitives } from "./layer0/index.js";
|
|
2
2
|
export { deriveEpochParams } from "./layer0/derive-params.js";
|
|
3
3
|
export { createDerivedViews } from "./layer1/index.js";
|
|
4
|
-
export { createPhaseMachinery } from "./phase/index.cjs";
|
|
5
4
|
export { createDeepCalendar } from "./phase/deep-calendar.cjs";
|
|
6
|
-
export { createCardinalModel } from "./cardinal/index.cjs";
|
|
7
5
|
export { createCardinalStructure } from "./cardinal/one-source-structure.cjs";
|
|
8
|
-
export { createMoonEccChannel } from "./moon/ecc-channel.cjs";
|
|
9
6
|
export { createMoonMonthChain } from "./moon/month-chain.cjs";
|
|
10
7
|
export { createChainCycleIntegrator } from "./chain-cycles/index.cjs";
|
|
11
8
|
export { createMoonArguments } from "./moon/arguments.cjs";
|
|
12
9
|
export { createMoonSeries } from "./moon/series.cjs";
|
|
13
10
|
export { createMoonApparent } from "./moon/apparent.cjs";
|
|
14
|
-
export { derivePlanetGeometry } from "./planets/geometry.cjs";
|
|
15
11
|
export * as planetOrbitChain from "./planets/orbit-chain.cjs";
|
|
16
12
|
export { computeSecularShape } from "./planets/secular-shape.cjs";
|
|
17
13
|
export { createSecularSeriesOverride } from "./planets/secular-series.cjs";
|
|
@@ -19,11 +15,11 @@ export { createDeepEccChannel } from "./moon/deep-ecc-channel.cjs";
|
|
|
19
15
|
export { createDeepOrbitalHistory } from "./earth/deep-orbital-history.cjs";
|
|
20
16
|
export { createSiderealYearChannel } from "./earth/sidereal-year-channel.cjs";
|
|
21
17
|
export { createPlanetModel } from "./planets/model.cjs";
|
|
18
|
+
export { PLANET_DISPLAY_NAMES } from "./planets/display-names.cjs";
|
|
22
19
|
export { createDeltaTCycles } from "./deltat/cycles.cjs";
|
|
23
20
|
export { createDeepTimeLod } from "./deltat/deep-time.cjs";
|
|
24
21
|
export { deltaTEspenakMeeusCanonSeconds } from "./deltat/historical.cjs";
|
|
25
22
|
export { createEclipseFinders } from "./eclipse/finders.cjs";
|
|
26
|
-
export { createSunLongitudeCorrection } from "./sun/longitude-correction.cjs";
|
|
27
23
|
export function createModel(constants?: Constants, opts?: {
|
|
28
24
|
laws?: {
|
|
29
25
|
eccentricityAt?: (year: number) => number;
|
|
@@ -50,11 +46,6 @@ export type ModelIdentity = {
|
|
|
50
46
|
export type Model = {
|
|
51
47
|
constants: Constants;
|
|
52
48
|
hash: string;
|
|
53
|
-
computeLatticePeriodsYears: () => {
|
|
54
|
-
axialPrecessionPeriodYears: number;
|
|
55
|
-
inclinationPrecessionPeriodYears: number;
|
|
56
|
-
perihelionPrecessionPeriodYears: number;
|
|
57
|
-
};
|
|
58
49
|
eccentricity: (year: number) => number;
|
|
59
50
|
identity: ModelIdentity;
|
|
60
51
|
} & ModelSurfaces;
|
|
@@ -66,14 +57,14 @@ import { REFERENCE_DATA } from './constants/index.js';
|
|
|
66
57
|
import { assembleModel } from './model.js';
|
|
67
58
|
export { GENERATED as DEFAULT_CONSTANTS, CONSTANTS_HASH, MODEL_VERSION, PREPRINT_DOI, REFERENCE_DATA };
|
|
68
59
|
export { FITTED_COEFFICIENTS, COEFFICIENTS_HASH } from "./constants/index.js";
|
|
69
|
-
export { computeEarthFrameOfDate, solveWheelAngleForLongitude } from "./earth/frame-of-date.cjs";
|
|
70
|
-
export {
|
|
60
|
+
export { computeEarthFrameOfDate, solveWheelAngleForLongitude, computeSceneWorldFrameJ2000, SCENE_EQUINOX_VIEW_AZIMUTH_DEG } from "./earth/frame-of-date.cjs";
|
|
61
|
+
export { derivePlanetGeometry, scaffoldOrbitInputs } from "./planets/geometry.cjs";
|
|
71
62
|
export { buildPlanetChainsFromArtifactData, computePlanetElementsAtYear, computeHeliocentricEclipticFromElements, computePoissonArgRad, computeOsculatingElements, solveKeplerRad, computeApsidalSecularDegPerYr, ANCHOR_EPOCH_YEAR, ANCHOR_EPOCH_JD } from "./planets/keplerian-chain.cjs";
|
|
72
63
|
export { computeEquatorNodeOriginSFrameDeg, convertNodeSFrameToEquatorOriginDeg } from "./planets/inv-plane-frame.cjs";
|
|
73
64
|
export { computePlanetPrecessionConstant, createPlanetSpinChannel, createPlanetSpinChannelFromArtifacts, computeObliquityJ2000Deg } from "./planets/spin-channel.cjs";
|
|
74
65
|
export { CHAIN_ARTIFACT, CHAIN_ARTIFACT_HASH } from "./planets/chain-artifact.js";
|
|
75
66
|
export { DEEP_MODES_ARTIFACT, DEEP_MODES_ARTIFACT_HASH } from "./moon/deep-modes-artifact.cjs";
|
|
76
|
-
export { createYearLengths, ONE_FAMILY_WINDOW_YEARS } from "./earth/year-lengths.cjs";
|
|
67
|
+
export { createYearLengths, computeMeanTropicalYearJ2000Days, ONE_FAMILY_WINDOW_YEARS } from "./earth/year-lengths.cjs";
|
|
77
68
|
export { computeSolarTorqueShare, createComposedPrecession } from "./earth/precession-composed.cjs";
|
|
78
69
|
export { createMoonRecessionHistory, createSolarChannelBudget } from "./deltat/recession-history.cjs";
|
|
79
70
|
export { evalClimateL1OrbitalPermil, laggedL1Terms, createAlphaGiaChannel } from "./climate/l1-orbital.cjs";
|
|
@@ -15,12 +15,11 @@ export type RawEpochConstants = {
|
|
|
15
15
|
alpha1PerMa: number;
|
|
16
16
|
alpha3PerMa3: number;
|
|
17
17
|
alpha4PerMa4: number;
|
|
18
|
+
meanSiderealYearSeconds: number;
|
|
18
19
|
/**
|
|
19
|
-
*
|
|
20
|
+
* ω₀: the J2000 day length, SI seconds (the SI day since plan 09)
|
|
20
21
|
*/
|
|
21
|
-
|
|
22
|
-
meanSiderealYearSeconds: number;
|
|
23
|
-
meanSiderealYearDaysKinematic: number;
|
|
22
|
+
lodJ2000Seconds: number;
|
|
24
23
|
/**
|
|
25
24
|
* M_SUN
|
|
26
25
|
*/
|
|
@@ -43,4 +42,8 @@ export type RawEpochConstants = {
|
|
|
43
42
|
astronomicalUnitKm: number;
|
|
44
43
|
earthOrbitalEccentricityJ2000: number;
|
|
45
44
|
moonEclipticInclinationJ2000Deg: number;
|
|
45
|
+
/**
|
|
46
|
+
* the model's ONE J2000 precession reading (1,296,000/p_A; plan 09)
|
|
47
|
+
*/
|
|
48
|
+
axialPrecessionJ2000Years: number;
|
|
46
49
|
};
|
package/types/layer0/index.d.ts
CHANGED
|
@@ -33,7 +33,6 @@ export type EpochParams = {
|
|
|
33
33
|
moonEccentricityFactor: number;
|
|
34
34
|
earthMassKg: number;
|
|
35
35
|
earthRadiusM: number;
|
|
36
|
-
holisticYearJ2000: number;
|
|
37
36
|
lodNowH13Seconds: number;
|
|
38
37
|
siderealYearJ2000Seconds: number;
|
|
39
38
|
solarMassLossFracPerYear: number;
|
|
@@ -41,24 +40,18 @@ export type EpochParams = {
|
|
|
41
40
|
* f_S, the solar fraction of the J2000 precession torque
|
|
42
41
|
*/
|
|
43
42
|
precessionSolarShareJ2000: number;
|
|
43
|
+
/**
|
|
44
|
+
* p₀, the composed precession rate's J2000 anchor (1,296,000/axial0)
|
|
45
|
+
*/
|
|
46
|
+
precessionRateJ2000ArcsecPerYr: number;
|
|
44
47
|
};
|
|
45
48
|
export type EpochPrimitives = {
|
|
46
49
|
tMa: (year: number) => number;
|
|
47
50
|
moonDistanceMetres: (year: number) => number;
|
|
48
51
|
lodSeconds: (year: number) => number | null;
|
|
49
|
-
/**
|
|
50
|
-
* the UNIT: 13 × the composed lunisolar precession period
|
|
51
|
-
*/
|
|
52
|
-
holisticH: (year: number) => number | null;
|
|
53
52
|
siderealYearSeconds: (year: number) => number;
|
|
54
|
-
tropicalYearSeconds: (year: number) => number;
|
|
55
|
-
anomalisticYearSeconds: (year: number) => number | null;
|
|
56
|
-
/**
|
|
57
|
-
* the frozen era clock's phase convention H₀·LOD/LOD₀ (device tier)
|
|
58
|
-
*/
|
|
59
|
-
eraClockH: (year: number) => number | null;
|
|
60
53
|
/**
|
|
61
|
-
*
|
|
54
|
+
* sidereal less one equinox turn per T_p(t) (the composed precession period)
|
|
62
55
|
*/
|
|
63
|
-
|
|
56
|
+
tropicalYearSeconds: (year: number) => number;
|
|
64
57
|
};
|
package/types/layer1/index.d.ts
CHANGED
|
@@ -5,6 +5,4 @@ export type EpochPrimitives = import("../layer0/index.js").EpochPrimitives;
|
|
|
5
5
|
export type DerivedViews = {
|
|
6
6
|
tropicalYearDays: (year: number) => number | null;
|
|
7
7
|
siderealYearDays: (year: number) => number | null;
|
|
8
|
-
anomalisticYearDays: (year: number) => number | null;
|
|
9
|
-
siderealYearDaysViaLattice: (year: number) => number | null;
|
|
10
8
|
};
|
package/types/model.d.ts
CHANGED
|
@@ -32,16 +32,20 @@ export function assembleModel(C: Readonly<Record<string, any>>, F: Readonly<Reco
|
|
|
32
32
|
jdFromYear: (year: number) => number;
|
|
33
33
|
siTropicalYearDays: number;
|
|
34
34
|
}>;
|
|
35
|
+
sun: Readonly<{
|
|
36
|
+
/** Mean longitude of date, degrees, unwrapped — L0 + 360·∫dt/T_trop (the one-family tropical year). @param {number} year @returns {number} */
|
|
37
|
+
meanLongitudeDegAt: (year: number) => number;
|
|
38
|
+
/** The Sun's mean perihelion longitude of date (Earth's ϖ, mean elements), degrees, wrapped to [0, 360). @param {number} year @returns {number} */
|
|
39
|
+
perihelionLongitudeDegAt: (year: number) => number;
|
|
40
|
+
}>;
|
|
35
41
|
epoch: Readonly<{
|
|
36
42
|
yearToTMa: (year: number) => number;
|
|
37
|
-
hAtYear: (year: number) => number | null;
|
|
38
43
|
lodSecondsAtYear: (year: number) => number | null;
|
|
39
44
|
lodRealSecondsAtYear: (year: number) => number;
|
|
40
45
|
alphaAtYear: (year: number) => number;
|
|
41
46
|
moonDistanceKmAtYear: (year: number) => number;
|
|
42
47
|
siderealYearSecondsAtYear: (year: number) => number;
|
|
43
48
|
deltaTSecondsAtYear: (year: number) => number;
|
|
44
|
-
cyclesBetween: (yearA: number, yearB: number, divisorN: number) => number;
|
|
45
49
|
axialPrecessionYearsAtYear: (year: number) => number;
|
|
46
50
|
tropicalYearSecondsAtYear: (year: number) => number;
|
|
47
51
|
}>;
|
|
@@ -119,22 +123,18 @@ export function assembleModel(C: Readonly<Record<string, any>>, F: Readonly<Reco
|
|
|
119
123
|
earth: Readonly<{
|
|
120
124
|
perihelionLongitudeDeg: (year: number) => number;
|
|
121
125
|
obliquityDeg: (year: number) => number;
|
|
122
|
-
obliquityCombDeg: (year: number) => number;
|
|
123
126
|
eccentricity: (year: number) => number;
|
|
124
127
|
inclinationDeg: (year: number) => number;
|
|
125
128
|
ascendingNodeDeg: (year: number) => number;
|
|
126
129
|
}>;
|
|
127
130
|
lengths: Readonly<{
|
|
128
131
|
tropicalYearDays: (year: number) => number;
|
|
129
|
-
tropicalYearDirectDays: (year: number) => number;
|
|
130
132
|
siderealYearDays: (year: number) => number;
|
|
131
133
|
anomalisticYearDays: (year: number) => number;
|
|
132
134
|
dayLengthSeconds: (year: number) => number;
|
|
133
135
|
lodRealSeconds: (year: number) => number;
|
|
134
136
|
siderealDaySeconds: (year: number) => number;
|
|
135
137
|
stellarDaySeconds: (year: number) => number;
|
|
136
|
-
measuredSolarDaySeconds: (year: number) => number;
|
|
137
|
-
raDayOffsetMs: (year: number) => number;
|
|
138
138
|
}>;
|
|
139
139
|
cardinal: Readonly<{
|
|
140
140
|
jd: (year: number, type: string) => number;
|
|
@@ -261,6 +261,8 @@ export function assembleModel(C: Readonly<Record<string, any>>, F: Readonly<Reco
|
|
|
261
261
|
meanDeg: number;
|
|
262
262
|
maxDeg: number;
|
|
263
263
|
} | null;
|
|
264
|
+
spinAxisEclipticJ2000AtYear: (year: number) => number[] | null;
|
|
265
|
+
orbitNormalEclipticJ2000AtYear: (year: number) => number[];
|
|
264
266
|
stepYr: number;
|
|
265
267
|
maxSpanYr: 10000000;
|
|
266
268
|
}>;
|
|
@@ -5,20 +5,11 @@ export type MoonArgsDeg = {
|
|
|
5
5
|
Mp: number;
|
|
6
6
|
F: number;
|
|
7
7
|
};
|
|
8
|
-
/**
|
|
9
|
-
* @typedef {{Lp: number, D: number, M: number, Mp: number, F: number}} MoonArgsDeg
|
|
10
|
-
*/
|
|
11
8
|
/**
|
|
12
9
|
* @param {{
|
|
13
10
|
* constants: {
|
|
14
11
|
* j2000JD: number,
|
|
15
12
|
* julianCenturyDays: number,
|
|
16
|
-
* holisticYearJ2000: number,
|
|
17
|
-
* balancedYearJ2000: number,
|
|
18
|
-
* meanSolarYearDays: number,
|
|
19
|
-
* meanAnomalisticYearDays: number,
|
|
20
|
-
* tropicalYearHarmonics: Array<[number, number, number]>,
|
|
21
|
-
* anomalisticYearHarmonics: Array<[number, number, number]>,
|
|
22
13
|
* eccentricityJ2000: number,
|
|
23
14
|
* eccentricityDotJ2000: number,
|
|
24
15
|
* eccentricityDotDotJ2000: number,
|
|
@@ -30,11 +21,12 @@ export type MoonArgsDeg = {
|
|
|
30
21
|
* eccAt: (tYr: number) => number,
|
|
31
22
|
* channelIntegral: (T: number, s: number) => number,
|
|
32
23
|
* computeObliquityEarth: (year: number) => number,
|
|
24
|
+
* sunMeanLonDegAtJdTT: (jdTT: number) => number,
|
|
25
|
+
* sunPerihelionLonDegAtJdTT: (jdTT: number) => number,
|
|
33
26
|
* jdToSIyear: (jd: number) => number,
|
|
34
27
|
* tropicalOrbitsBetween: (yearA: number, yearB: number) => (number | null),
|
|
35
28
|
* apsidalOfDateCyclesBetween: (yearA: number, yearB: number) => (number | null),
|
|
36
29
|
* nodalOfDateCyclesBetween: (yearA: number, yearB: number) => (number | null),
|
|
37
|
-
* cyclesBetween: (yearA: number, yearB: number, divisorN: number) => (number | null),
|
|
38
30
|
* isDeepTime: () => boolean,
|
|
39
31
|
* isFrameworkNative: () => boolean,
|
|
40
32
|
* pDynDegPerYearAt?: (year: number) => number,
|
|
@@ -48,17 +40,20 @@ export type MoonArgsDeg = {
|
|
|
48
40
|
* evaluators — the tweakpane identity, real at J2000, epoch-valid);
|
|
49
41
|
* pKin = the KINEMATIC pair's beat (the H/13-family mean the chains
|
|
50
42
|
* embed). Absent ⇒ the completion is disabled (pre-(d′) behaviour).
|
|
43
|
+
* Plan 09: the Sun of the arguments is the engine's ONE certified Sun —
|
|
44
|
+
* sunMeanLonDegAtJdTT (the mean longitude that integrates the one-family
|
|
45
|
+
* tropical year, unwrapped) and sunPerihelionLonDegAtJdTT (the mean
|
|
46
|
+
* perihelion of date, wrapped — the arguments wrap M, and the rate anchors
|
|
47
|
+
* difference it over ±25 days wrapped to ±180°). The former "model timeline" Sun — 360° per mean solar
|
|
48
|
+
* year plus the closed-form integrals of the retired year-length combs,
|
|
49
|
+
* the perihelion on the H/16 chain count — sat 0.2° behind the IAU mean
|
|
50
|
+
* Sun at −2000 (the combs could not carry the tropical year's secular
|
|
51
|
+
* drift); measured against Meeus L0 before the move.
|
|
51
52
|
*/
|
|
52
53
|
export function createMoonArguments({ constants, fns }: {
|
|
53
54
|
constants: {
|
|
54
55
|
j2000JD: number;
|
|
55
56
|
julianCenturyDays: number;
|
|
56
|
-
holisticYearJ2000: number;
|
|
57
|
-
balancedYearJ2000: number;
|
|
58
|
-
meanSolarYearDays: number;
|
|
59
|
-
meanAnomalisticYearDays: number;
|
|
60
|
-
tropicalYearHarmonics: Array<[number, number, number]>;
|
|
61
|
-
anomalisticYearHarmonics: Array<[number, number, number]>;
|
|
62
57
|
eccentricityJ2000: number;
|
|
63
58
|
eccentricityDotJ2000: number;
|
|
64
59
|
eccentricityDotDotJ2000: number;
|
|
@@ -70,11 +65,12 @@ export function createMoonArguments({ constants, fns }: {
|
|
|
70
65
|
eccAt: (tYr: number) => number;
|
|
71
66
|
channelIntegral: (T: number, s: number) => number;
|
|
72
67
|
computeObliquityEarth: (year: number) => number;
|
|
68
|
+
sunMeanLonDegAtJdTT: (jdTT: number) => number;
|
|
69
|
+
sunPerihelionLonDegAtJdTT: (jdTT: number) => number;
|
|
73
70
|
jdToSIyear: (jd: number) => number;
|
|
74
71
|
tropicalOrbitsBetween: (yearA: number, yearB: number) => (number | null);
|
|
75
72
|
apsidalOfDateCyclesBetween: (yearA: number, yearB: number) => (number | null);
|
|
76
73
|
nodalOfDateCyclesBetween: (yearA: number, yearB: number) => (number | null);
|
|
77
|
-
cyclesBetween: (yearA: number, yearB: number, divisorN: number) => (number | null);
|
|
78
74
|
isDeepTime: () => boolean;
|
|
79
75
|
isFrameworkNative: () => boolean;
|
|
80
76
|
pDynDegPerYearAt?: (year: number) => number;
|
|
@@ -85,10 +81,6 @@ export function createMoonArguments({ constants, fns }: {
|
|
|
85
81
|
fwArgs: (jdTT: number) => MoonArgsDeg;
|
|
86
82
|
fwArgsDeep: (jd: number) => MoonArgsDeg | null;
|
|
87
83
|
pureMeeusArgs: (jdTT: number) => MoonArgsDeg;
|
|
88
|
-
sunSecularDeviations: (jdTT: number) => {
|
|
89
|
-
dLs: number;
|
|
90
|
-
dPeri: number;
|
|
91
|
-
};
|
|
92
84
|
planetaryCarrier: (T: number) => number;
|
|
93
85
|
obliquityCarrier: (T: number) => number;
|
|
94
86
|
lpSecularCompletion: (T: number) => number;
|
|
@@ -101,7 +93,6 @@ export function createMoonArguments({ constants, fns }: {
|
|
|
101
93
|
LPR: number;
|
|
102
94
|
DR: number;
|
|
103
95
|
MR: number;
|
|
104
|
-
P_DEGCY: number;
|
|
105
96
|
WDOT: number;
|
|
106
97
|
NDOT: number;
|
|
107
98
|
T2_W: number;
|
|
@@ -136,3 +127,13 @@ export function createMoonArguments({ constants, fns }: {
|
|
|
136
127
|
* Sun secular deviations. @param {number} jd @returns {number}
|
|
137
128
|
*/
|
|
138
129
|
export function jdToDecimalYear(jd: number): number;
|
|
130
|
+
/**
|
|
131
|
+
* @typedef {{Lp: number, D: number, M: number, Mp: number, F: number}} MoonArgsDeg
|
|
132
|
+
*/
|
|
133
|
+
/** The secular-completion taper half-width, Julian years: the cos² envelope
|
|
134
|
+
* inside which the chain's Meeus-measured rate anchors and the Lp secular
|
|
135
|
+
* completion act (full at the anchor, zero beyond). A recorded window of the
|
|
136
|
+
* completion, not a law — the anchors were measured with it (plan 09 step
|
|
137
|
+
* 5c: it was written as the era unit's twelfth, H/12, "lattice-derived";
|
|
138
|
+
* the value is kept bit-identical and named for what it is). */
|
|
139
|
+
export const SECULAR_COMPLETION_TAPER_YEARS: 27943.083333333332;
|
|
@@ -151,11 +151,11 @@ export const DEEP_MODES_ARTIFACT: Readonly<{
|
|
|
151
151
|
im: number;
|
|
152
152
|
}[];
|
|
153
153
|
};
|
|
154
|
-
anchorE: 0.
|
|
155
|
-
anchorPeriEclipticDeg: 462.
|
|
154
|
+
anchorE: 0.016702435651957125;
|
|
155
|
+
anchorPeriEclipticDeg: 462.9179213996576;
|
|
156
156
|
anchorInclEclipticDeg: 0.00010345820355474172;
|
|
157
157
|
anchorAscNodeEclipticDeg: 140.29217988414328;
|
|
158
158
|
anchorZDotPerYr: number[];
|
|
159
159
|
slopeTaperYears: 27943.083333333332;
|
|
160
160
|
}>;
|
|
161
|
-
export const DEEP_MODES_ARTIFACT_HASH: "
|
|
161
|
+
export const DEEP_MODES_ARTIFACT_HASH: "87c325fac77d94a4";
|
|
@@ -8,14 +8,9 @@
|
|
|
8
8
|
* gmEarthMoonM3PerS2: number,
|
|
9
9
|
* massRatioEarthMoon: number,
|
|
10
10
|
* moonSiderealMonthInputDays: number,
|
|
11
|
-
* holisticYearJ2000: number,
|
|
12
11
|
* meanSiderealYearJ2000Seconds: number,
|
|
13
|
-
* nApsidalOfDateJ2000: number,
|
|
14
|
-
* nNodalOfDateJ2000: number,
|
|
15
12
|
* moonApsidalJ2000Seconds: number,
|
|
16
13
|
* moonNodalJ2000Seconds: number,
|
|
17
|
-
* moonApsidalOfDateJ2000Seconds: number,
|
|
18
|
-
* moonNodalOfDateJ2000Seconds: number,
|
|
19
14
|
* moonSiderealMonthJ2000Seconds: number,
|
|
20
15
|
* sPerigee: number,
|
|
21
16
|
* sNode: number,
|
|
@@ -23,13 +18,18 @@
|
|
|
23
18
|
* fns: {
|
|
24
19
|
* meanLodSecondsAtAge: (tMa: number) => (number | null),
|
|
25
20
|
* meanSiderealYearSecondsAtAge: (tMa: number) => number,
|
|
26
|
-
*
|
|
21
|
+
* precessionPeriodYearsAtAge: (tMa: number) => (number | null),
|
|
27
22
|
* modulation: (tMa: number, s: number) => number,
|
|
28
23
|
* distanceMetresAtAge?: (tMa: number) => number,
|
|
29
24
|
* },
|
|
30
25
|
* }} deps — fns are the ENGINE'S OWN layer-0/1 evaluators and the shared
|
|
31
26
|
* eccentricity channel's modulation; constants are the engine's derived
|
|
32
27
|
* J2000 anchors (both engines derive them from the same JSON).
|
|
28
|
+
* fns.precessionPeriodYearsAtAge is the engine's lunisolar precession period
|
|
29
|
+
* of date T_p(t), Julian years (the composed rate's period; plan 09 step
|
|
30
|
+
* 5c — the tropical month's equinox turn, formerly the counter's 13/H(t),
|
|
31
|
+
* 0.086 % slow: the chain's J2000 tropical month sat 5.85 ms above the IAU
|
|
32
|
+
* input, the 1/T_p form is within 0.1 ms of it).
|
|
33
33
|
* fns.distanceMetresAtAge, when present, OVERRIDES the internal quartic —
|
|
34
34
|
* the Driver-1½ regime-aware history (recession-history.cjs); absent, the
|
|
35
35
|
* internal quartic is the pure twin (bit-identical for t ≤ jointMa).
|
|
@@ -43,14 +43,9 @@ export function createMoonMonthChain({ constants, fns }: {
|
|
|
43
43
|
gmEarthMoonM3PerS2: number;
|
|
44
44
|
massRatioEarthMoon: number;
|
|
45
45
|
moonSiderealMonthInputDays: number;
|
|
46
|
-
holisticYearJ2000: number;
|
|
47
46
|
meanSiderealYearJ2000Seconds: number;
|
|
48
|
-
nApsidalOfDateJ2000: number;
|
|
49
|
-
nNodalOfDateJ2000: number;
|
|
50
47
|
moonApsidalJ2000Seconds: number;
|
|
51
48
|
moonNodalJ2000Seconds: number;
|
|
52
|
-
moonApsidalOfDateJ2000Seconds: number;
|
|
53
|
-
moonNodalOfDateJ2000Seconds: number;
|
|
54
49
|
moonSiderealMonthJ2000Seconds: number;
|
|
55
50
|
sPerigee: number;
|
|
56
51
|
sNode: number;
|
|
@@ -58,7 +53,7 @@ export function createMoonMonthChain({ constants, fns }: {
|
|
|
58
53
|
fns: {
|
|
59
54
|
meanLodSecondsAtAge: (tMa: number) => (number | null);
|
|
60
55
|
meanSiderealYearSecondsAtAge: (tMa: number) => number;
|
|
61
|
-
|
|
56
|
+
precessionPeriodYearsAtAge: (tMa: number) => (number | null);
|
|
62
57
|
modulation: (tMa: number, s: number) => number;
|
|
63
58
|
distanceMetresAtAge?: (tMa: number) => number;
|
|
64
59
|
};
|
|
@@ -70,10 +65,6 @@ export function createMoonMonthChain({ constants, fns }: {
|
|
|
70
65
|
siderealMonthSecondsAtAge: (tMa: number) => number | null;
|
|
71
66
|
synodicMonthSecondsAtAge: (tMa: number) => number | null;
|
|
72
67
|
tropicalMonthSecondsAtAge: (tMa: number) => number | null;
|
|
73
|
-
apsidalCyclesOfDateAtAge: (tMa: number) => number | null;
|
|
74
|
-
nodalCyclesOfDateAtAge: (tMa: number) => number | null;
|
|
75
|
-
apsidalPrecessionSecondsOfDateAtAge: (tMa: number) => number | null;
|
|
76
|
-
nodalPrecessionSecondsOfDateAtAge: (tMa: number) => number | null;
|
|
77
68
|
perigeePrecessionSecondsAtAge: (tMa: number) => number | null;
|
|
78
69
|
nodePrecessionSecondsAtAge: (tMa: number) => number | null;
|
|
79
70
|
anomalisticMonthSecondsAtAge: (tMa: number) => number | null;
|
package/types/moon/series.d.cts
CHANGED
|
@@ -12,7 +12,6 @@ export type MeeusTermTable = Array<[number, number, number, number, number]>;
|
|
|
12
12
|
* moonDistanceJ2000Km: number,
|
|
13
13
|
* j2000JD: number,
|
|
14
14
|
* julianCenturyDays: number,
|
|
15
|
-
* moonMeeusLpCorrectionDeg: number,
|
|
16
15
|
* fwA2RateDegPerCy: number,
|
|
17
16
|
* fwA3RateDegPerCy: number,
|
|
18
17
|
* },
|
|
@@ -26,7 +25,7 @@ export type MeeusTermTable = Array<[number, number, number, number, number]>;
|
|
|
26
25
|
* jdToSIyear: (jd: number) => number,
|
|
27
26
|
* tropicalOrbitsBetween: (yearA: number, yearB: number) => (number | null),
|
|
28
27
|
* apsidalOfDateCyclesBetween: (yearA: number, yearB: number) => (number | null),
|
|
29
|
-
*
|
|
28
|
+
* siderealOrbitsBetween: (yearA: number, yearB: number) => (number | null),
|
|
30
29
|
* jupiterOrbitsBetween: (yearA: number, yearB: number) => (number | null),
|
|
31
30
|
* isDeepTime: () => boolean,
|
|
32
31
|
* isFrameworkNative: () => boolean,
|
|
@@ -46,7 +45,6 @@ export function createMoonSeries({ constants, fns }: {
|
|
|
46
45
|
moonDistanceJ2000Km: number;
|
|
47
46
|
j2000JD: number;
|
|
48
47
|
julianCenturyDays: number;
|
|
49
|
-
moonMeeusLpCorrectionDeg: number;
|
|
50
48
|
fwA2RateDegPerCy: number;
|
|
51
49
|
fwA3RateDegPerCy: number;
|
|
52
50
|
};
|
|
@@ -66,7 +64,7 @@ export function createMoonSeries({ constants, fns }: {
|
|
|
66
64
|
jdToSIyear: (jd: number) => number;
|
|
67
65
|
tropicalOrbitsBetween: (yearA: number, yearB: number) => (number | null);
|
|
68
66
|
apsidalOfDateCyclesBetween: (yearA: number, yearB: number) => (number | null);
|
|
69
|
-
|
|
67
|
+
siderealOrbitsBetween: (yearA: number, yearB: number) => (number | null);
|
|
70
68
|
jupiterOrbitsBetween: (yearA: number, yearB: number) => (number | null);
|
|
71
69
|
isDeepTime: () => boolean;
|
|
72
70
|
isFrameworkNative: () => boolean;
|