@essrt/physics 23.3.2 → 23.6.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.
Files changed (57) hide show
  1. package/README.md +6 -1
  2. package/package.json +2 -2
  3. package/src/constants/coefficients.d.ts +5 -1
  4. package/src/constants/coefficients.js +3 -2
  5. package/src/constants/generated.d.ts +2 -3
  6. package/src/constants/generated.js +3 -4
  7. package/src/constants/units.cjs +4 -1
  8. package/src/deltat/deep-time.cjs +37 -72
  9. package/src/index.js +35 -48
  10. package/src/model/cardinal-instants.js +101 -0
  11. package/src/model/context.js +54 -0
  12. package/src/model/deep-time-chain.js +79 -0
  13. package/src/model/delta-t.js +38 -0
  14. package/src/model/derived-constants.js +58 -0
  15. package/src/model/earth-scalars.js +47 -0
  16. package/src/model/inv-plane-elements.js +56 -0
  17. package/src/model/lunar-theory.js +216 -0
  18. package/src/model/moon-epoch.js +28 -0
  19. package/src/model/one-source-movement.js +192 -0
  20. package/src/model/planet-elements-of-date.js +61 -0
  21. package/src/model/planet-records.js +63 -0
  22. package/src/model/planet-spin-channel.js +41 -0
  23. package/src/model/published-periods.js +38 -0
  24. package/src/model/sun-and-eclipses.js +199 -0
  25. package/src/model/surface.js +330 -0
  26. package/src/model/time-axis.js +24 -0
  27. package/src/model/year-day-lengths.js +42 -0
  28. package/src/model.js +62 -1612
  29. package/src/moon/arguments.cjs +27 -43
  30. package/src/planets/chain-artifact.js +2 -2
  31. package/src/planets/keplerian-chain.cjs +1 -1
  32. package/types/constants/coefficients.d.ts +5 -1
  33. package/types/constants/generated.d.ts +2 -3
  34. package/types/constants/units.d.cts +3 -0
  35. package/types/deltat/deep-time.d.cts +18 -24
  36. package/types/index.d.ts +1 -1
  37. package/types/model/cardinal-instants.d.ts +14 -0
  38. package/types/model/context.d.ts +87 -0
  39. package/types/model/deep-time-chain.d.ts +288 -0
  40. package/types/model/delta-t.d.ts +11 -0
  41. package/types/model/derived-constants.d.ts +25 -0
  42. package/types/model/earth-scalars.d.ts +14 -0
  43. package/types/model/inv-plane-elements.d.ts +6 -0
  44. package/types/model/lunar-theory.d.ts +72 -0
  45. package/types/model/moon-epoch.d.ts +10 -0
  46. package/types/model/one-source-movement.d.ts +74 -0
  47. package/types/model/planet-elements-of-date.d.ts +9 -0
  48. package/types/model/planet-records.d.ts +7 -0
  49. package/types/model/planet-spin-channel.d.ts +29 -0
  50. package/types/model/published-periods.d.ts +7 -0
  51. package/types/model/sun-and-eclipses.d.ts +52 -0
  52. package/types/model/surface.d.ts +279 -0
  53. package/types/model/time-axis.d.ts +12 -0
  54. package/types/model/year-day-lengths.d.ts +8 -0
  55. package/types/model.d.ts +9 -81
  56. package/types/moon/arguments.d.cts +5 -11
  57. package/types/planets/keplerian-chain.d.cts +3 -1
@@ -0,0 +1,74 @@
1
+ /** @param {import('./year-day-lengths.js').Ctx} ctx @returns the bindings the later slices read */
2
+ export function assembleOneSourceMovement(ctx: import("./year-day-lengths.js").Ctx): {
3
+ lodRealSeconds: (year: number) => number;
4
+ oneFamilyTropicalYearSeconds: (year: number) => number;
5
+ oneSourceM: {
6
+ yearLengths: Readonly<{
7
+ tropicalYearSecondsAtYear: (year: number) => number;
8
+ siderealYearSecondsAtYear: (year: number) => number;
9
+ anomalisticYearSecondsAtYear: (year: number) => number;
10
+ axialPrecessionYearsAtYear: (y: number) => number;
11
+ perihelionPrecessionYearsAtYear: (y: number) => number;
12
+ inclinationPrecessionYearsAtYear: (y: number) => number;
13
+ generalPrecessionArcsecPerJulianYr: (y: number) => number;
14
+ apsidalRateFixedArcsecPerJulianYr: (y: number) => number;
15
+ cardinal: Readonly<{
16
+ yearLengthSeconds: (y: number, type: "VE" | "SS" | "AE" | "WS") => number;
17
+ eocOffsetSeconds: (y: number, type: "VE" | "SS" | "AE" | "WS") => number;
18
+ spreadSeconds: (y: number) => {
19
+ VE: number;
20
+ SS: number;
21
+ AE: number;
22
+ WS: number;
23
+ meanSeconds: number;
24
+ };
25
+ }>;
26
+ planetaryRelAtYear: (year: number) => number;
27
+ }>;
28
+ /** The one-source sample at a decimal year (the engine year) — ε, e, ϖ of date, the Earth-orbit normal (the fields the frame of date and the invariable-plane elements read). @param {number} year */
29
+ sampleAt: (year: number) => any;
30
+ /** EXPERIMENT accessors: the series' e and equinox-referenced ϖ of date. @param {number} year @returns {number} */
31
+ eAt: (year: number) => number;
32
+ /** @param {number} year @returns {number} */
33
+ periOfDateDegAt: (year: number) => number;
34
+ /** The hybrid's obliquity at a decimal year, degrees — the banked series inside its span, the α(t)-coupled ζ-tail integration beyond (the deep sampler grows ~0.1 s/Myr). @param {number} year @returns {number} */
35
+ epsAt: (year: number) => number;
36
+ /** The hybrid's own domain, [yearFrom, yearTo] — the banked ζ series' span (plan 12 §8.5); null without a series. */
37
+ obliquityHybridDomainYears: [number, number] | null;
38
+ /** The precession of date's two factors at a decimal year (the factory's own — ONE home). @param {number} year @returns {{solarTorque: number, ellipticity: number}} */
39
+ precessionOfDateFactorsAt: (year: number) => {
40
+ solarTorque: number;
41
+ ellipticity: number;
42
+ };
43
+ /** The spin axis's INERTIAL precession period at J2000, years — the self-anchored
44
+ * lunisolar rate the hybrid integrates ŝ on (deep-orbital-history D4e): the general
45
+ * precession anchor plus the planetary mean the ecliptic's own motion carries. */
46
+ axialPrecessionYearsLunisolarJ2000: number;
47
+ };
48
+ siderealDaySeconds: (year: number) => number;
49
+ stellarDaySeconds: (year: number) => number;
50
+ tropicalYearDays: (year: number) => number;
51
+ yearLengthsM: Readonly<{
52
+ tropicalYearSecondsAtYear: (year: number) => number;
53
+ siderealYearSecondsAtYear: (year: number) => number;
54
+ anomalisticYearSecondsAtYear: (year: number) => number;
55
+ axialPrecessionYearsAtYear: (y: number) => number;
56
+ perihelionPrecessionYearsAtYear: (y: number) => number;
57
+ inclinationPrecessionYearsAtYear: (y: number) => number;
58
+ generalPrecessionArcsecPerJulianYr: (y: number) => number;
59
+ apsidalRateFixedArcsecPerJulianYr: (y: number) => number;
60
+ cardinal: Readonly<{
61
+ yearLengthSeconds: (y: number, type: "VE" | "SS" | "AE" | "WS") => number;
62
+ eocOffsetSeconds: (y: number, type: "VE" | "SS" | "AE" | "WS") => number;
63
+ spreadSeconds: (y: number) => {
64
+ VE: number;
65
+ SS: number;
66
+ AE: number;
67
+ WS: number;
68
+ meanSeconds: number;
69
+ };
70
+ }>;
71
+ planetaryRelAtYear: (year: number) => number;
72
+ }>;
73
+ };
74
+ export type Ctx = import("./year-day-lengths.js").Ctx & ReturnType<typeof assembleOneSourceMovement>;
@@ -0,0 +1,9 @@
1
+ /** @param {import('./planet-spin-channel.js').Ctx} ctx @returns the bindings the later slices read */
2
+ export function assemblePlanetElementsOfDate(ctx: import("./planet-spin-channel.js").Ctx): {
3
+ nodeOriginSSDeg: () => number;
4
+ planetAscNodeDeg: (k: string, year: number) => number;
5
+ planetEccentricity: (k: string, year: number) => number;
6
+ planetInclinationDeg: (k: string, year: number) => number;
7
+ planetPerihelionDeg: (k: string, year: number) => number;
8
+ };
9
+ export type Ctx = import("./planet-spin-channel.js").Ctx & ReturnType<typeof assemblePlanetElementsOfDate>;
@@ -0,0 +1,7 @@
1
+ /** @param {import('./delta-t.js').Ctx} ctx @returns the bindings the later slices read */
2
+ export function assemblePlanetRecords(ctx: import("./delta-t.js").Ctx): {
3
+ PLANET_KEYS: string[];
4
+ PUBLISHED_PLANET_RECORDS: Record<string, Record<string, any>>;
5
+ massFraction: Record<string, number>;
6
+ };
7
+ export type Ctx = import("./delta-t.js").Ctx & ReturnType<typeof assemblePlanetRecords>;
@@ -0,0 +1,29 @@
1
+ /** @param {import('./planet-records.js').Ctx} ctx @returns the bindings the later slices read */
2
+ export function assemblePlanetSpinChannel(ctx: import("./planet-records.js").Ctx): {
3
+ planetSpin: (k: string) => Readonly<{
4
+ key: string;
5
+ cassiniLocked: boolean;
6
+ momentOfInertiaFactor: number;
7
+ momentOfInertiaFactorClass: string;
8
+ alphaArcsecPerYr: number;
9
+ satelliteQuadrupole: number;
10
+ satelliteAngularMomentum: number;
11
+ spinRetrograde: boolean;
12
+ meanMotionRadPerYr: number;
13
+ obliquityJ2000Deg: number;
14
+ spinPrecessionRateArcsecPerYrJ2000: number | null;
15
+ axialPrecessionPeriodYearsJ2000: number | null;
16
+ obliquityDegAtYear: (year: number) => number | null;
17
+ spinPrecessionRateArcsecPerYrAtYear: (year: number) => number | null;
18
+ obliquityEnvelopeDeg: (year: number, spanYr: number) => {
19
+ minDeg: number;
20
+ meanDeg: number;
21
+ maxDeg: number;
22
+ } | null;
23
+ spinAxisEclipticJ2000AtYear: (year: number) => number[] | null;
24
+ orbitNormalEclipticJ2000AtYear: (year: number) => number[];
25
+ stepYr: number;
26
+ maxSpanYr: 10000000;
27
+ }>;
28
+ };
29
+ export type Ctx = import("./planet-records.js").Ctx & ReturnType<typeof assemblePlanetSpinChannel>;
@@ -0,0 +1,7 @@
1
+ /** @param {import('./sun-and-eclipses.js').Ctx} ctx @returns the bindings the later slices read */
2
+ export function assemblePublishedPeriods(ctx: import("./sun-and-eclipses.js").Ctx): {
3
+ publishedAxialPrecessionYearsAtYear: (year: number) => number;
4
+ publishedSiderealYearSecondsAtYear: (year: number) => number;
5
+ publishedTropicalYearSecondsAtYear: (year: number) => number;
6
+ };
7
+ export type Ctx = import("./sun-and-eclipses.js").Ctx & ReturnType<typeof assemblePublishedPeriods>;
@@ -0,0 +1,52 @@
1
+ /** @param {import('./lunar-theory.js').Ctx} ctx @returns the bindings the later slices read */
2
+ export function assembleSunAndEclipses(ctx: import("./lunar-theory.js").Ctx): {
3
+ besselian: {
4
+ umbraGroundAt: (jdUT: number) => {
5
+ latDeg: number;
6
+ lonDeg: number;
7
+ } | null;
8
+ shadowStateAt: (jdUT: number, latDeg: number, lonDeg: number) => {
9
+ offsetKm: number;
10
+ penumbraKm: number;
11
+ umbraKm: number;
12
+ magnitude: number;
13
+ };
14
+ localCircumstances: (jdGreatest: number, latDeg: number, lonDeg: number) => {
15
+ kind: "none" | "partial" | "annular" | "total";
16
+ magnitude: number;
17
+ maxJd: number;
18
+ contacts: {
19
+ c1: number | null;
20
+ c2: number | null;
21
+ c3: number | null;
22
+ c4: number | null;
23
+ };
24
+ centralDurationSeconds: number | null;
25
+ };
26
+ };
27
+ eclipseFinders: {
28
+ sunLonDegAt: (jd: number) => number;
29
+ findLunarEclipsesInRange: (jdStart: number, jdEnd: number) => Array<{
30
+ jd: number;
31
+ beta: number;
32
+ moonDistance_km: number;
33
+ type: string;
34
+ magnitudeUmbral: number;
35
+ magnitudePenumbral: number;
36
+ }>;
37
+ findSolarEclipsesInRange: (jdStart: number, jdEnd: number) => Array<{
38
+ jd: number;
39
+ beta: number;
40
+ moonDistance_km: number;
41
+ type: string;
42
+ moonAppR_topo: number;
43
+ sunAppR: number;
44
+ moonSunRatio: number;
45
+ }>;
46
+ };
47
+ sunL0Deg: any;
48
+ sunMeanLongitudeDegAt: (year: number) => number;
49
+ sunPlanetaryCompletionDeg: (T: number) => number;
50
+ sunTropicalRateDegPerCy: number;
51
+ };
52
+ export type Ctx = import("./lunar-theory.js").Ctx & ReturnType<typeof assembleSunAndEclipses>;
@@ -0,0 +1,279 @@
1
+ /** @param {import('./cardinal-instants.js').Ctx} ctx @returns the published surface (frozen) */
2
+ export function assembleSurface(ctx: import("./cardinal-instants.js").Ctx): Readonly<{
3
+ time: Readonly<{
4
+ yearFromJD: (jd: number) => number;
5
+ jdFromYear: (year: number) => number;
6
+ siTropicalYearDays: number;
7
+ }>;
8
+ massChain: Readonly<{
9
+ moonDistanceKm: any;
10
+ moonSiderealMonthDays: any;
11
+ siderealYearDays: any;
12
+ dayLengthSeconds: any;
13
+ massRatioEarthMoon: any;
14
+ lunarSmallParameter: number;
15
+ moonMassFraction: number;
16
+ solarTidalShiftKm: number;
17
+ moonDistanceCorrectedKm: number;
18
+ gmEarthMoonSystemKm3S2: number;
19
+ gmEarthKm3S2: number;
20
+ gmMoonKm3S2: number;
21
+ gmSunPlusEarthKm3S2: number;
22
+ gmSunKm3S2: number;
23
+ sunMassKg: number;
24
+ earthMassKg: number;
25
+ gravitationalConstantKm3KgS2: any;
26
+ }>;
27
+ sun: Readonly<{
28
+ /** Mean longitude of date, degrees, unwrapped — L0 + 360·∫dt/T_trop (the one-family tropical year). @param {number} year @returns {number} */
29
+ meanLongitudeDegAt: (year: number) => number;
30
+ /** The Sun's mean perihelion longitude of date (Earth's ϖ, mean elements), degrees, wrapped to [0, 360). @param {number} year @returns {number} */
31
+ perihelionLongitudeDegAt: (year: number) => number;
32
+ }>;
33
+ epoch: Readonly<{
34
+ yearToTMa: (year: number) => number;
35
+ lodSecondsAtYear: (year: number) => number | null;
36
+ lodRealSecondsAtYear: (year: number) => number;
37
+ alphaAtYear: (year: number) => number;
38
+ moonDistanceKmAtYear: (year: number) => number;
39
+ siderealYearSecondsAtYear: (year: number) => number;
40
+ deltaTSecondsAtYear: (year: number) => number;
41
+ axialPrecessionYearsAtYear: (year: number) => number;
42
+ tropicalYearSecondsAtYear: (year: number) => number;
43
+ }>;
44
+ lunisolar: Readonly<{
45
+ /** The mean lunisolar precession period T_p(t), years — 1,296,000/the precession RATE of date (25,771.6 at J2000): THE published deep-time clock. @param {number} year @returns {number} */
46
+ meanPeriodYearsAtYear: (year: number) => number;
47
+ /** THE PRECESSION RATE OF DATE ψ̇(t) = [ω/ω₀]·p₀·[f_S + (1 − f_S)(a₀/a_M)³] × cos ε̄(t)/cos ε̄(0), ″/yr — the constant's scaling on the spin and the lunar torque times the cited mean obliquity's cosine (plan 12 §8 option (a); p₀ = 50.2880, the IAU 2006 input). @param {number} year @returns {number} */
48
+ meanRateArcsecPerYrAtYear: (year: number) => number;
49
+ /** THE PRECESSION CONSTANT OF DATE as a rate on the J2000 obliquity, ″/yr — the spin and torque scaling alone (the hybrid obliquity integration's integrand: its own ŝ·n̂ carries the cosine). @param {number} year @returns {number} */
50
+ torqueRateArcsecPerYrAtYear: (year: number) => number;
51
+ /** 1,296,000/the torque rate, years. @param {number} year @returns {number} */
52
+ torquePeriodYearsAtYear: (year: number) => number;
53
+ /** cos ε̄(t)/cos ε̄(0) — the rate of date's obliquity factor on the constant (1 at J2000; 1.0075 at the Devonian, 1.0245 at 2.46 Ga). @param {number} year @returns {number} */
54
+ precessionObliquityFactorAtYear: (year: number) => number;
55
+ /** THE CITED MEAN OBLIQUITY OF DATE ε̄(t), degrees — Farhat et al. 2022's own column of the Earth–Moon history (a Myr-scale MEAN: 23.25° at age 0 against the J2000 instant 23.44°; 22.23° Devonian, 19.73° at 2.46 Ga); read as the shape cos ε̄(t)/cos ε̄(0) on the precession rate. NaN beyond the input's span (4,429 Ma); forward of J2000 the J2000 slope is held. @param {number} year @returns {number} */
56
+ meanObliquityCitedDegAtYear: (year: number) => number;
57
+ /** The of-date period — the one-family beat inside ±2 Myr, the composed mean beyond. @param {number} year @returns {number} */
58
+ ofDatePeriodYearsAtYear: (year: number) => number;
59
+ /** f_S, the solar fraction of the J2000 precession torque. */
60
+ solarShareJ2000: number;
61
+ /** THE PRECESSION OF DATE — the solar-torque factor 1 + f_S·([(1 − e²)/(1 − e₀²)]^(−3/2) − 1) at the eccentricity of date (1 at J2000; +3.2·10⁻⁴ on the million-year mean). The spin integration multiplies it into the secular rate. @param {number} year @returns {number} */
62
+ solarTorqueFactorOfDateAtYear: (year: number) => number;
63
+ /** THE PRECESSION OF DATE — J₂(t)/J₂₀, the oblateness of date from the GIA channel (ψ̇ ∝ J₂; 1 at J2000, bounded ±5·10⁻⁴; dJ₂/dt at J2000 = the observed satellite rate). @param {number} year @returns {number} */
64
+ ellipticityRatioOfDateAtYear: (year: number) => number;
65
+ /** (a₀/a_M(t))³ — the lunar torque's growth on the recession history. @param {number} year @returns {number} */
66
+ lunarTorqueFactorAtYear: (year: number) => number;
67
+ /** f_S + (1 − f_S)(a₀/a_M)³ — the torque term of the composed precession rate. @param {number} year @returns {number} */
68
+ torqueTermAtYear: (year: number) => number;
69
+ /** The hybrid's precession constant α = p₀ / cos ε₀, ″/yr (p₀ the derived J2000 rate, ε₀ the J2000 obliquity input; 54.81). */
70
+ torqueConstantJ2000ArcsecPerYr: number;
71
+ /** |s₃|, the dominant nodal mode of Earth's orbit — the largest-amplitude ζ mode of the banked deep secular modes, ″/yr (18.85; the obliquity beat's partner). ONE home for the registry, the browser and the API. */
72
+ nodalModeS3ArcsecPerYr: number;
73
+ /** The ecliptic (nodal) precession period 1,296,000/|s₃|, years (68,751) — an orbital quantity, fixed at every epoch at the two-body level. */
74
+ nodalPeriodYears: number;
75
+ /** THE SPIN AXIS'S INERTIAL PRECESSION RATE OF DATE, ″/yr — the composed rate scaled by the
76
+ * hybrid's self-anchor factor (the inertial-to-general ratio at J2000, the multiplicative form
77
+ * the obliquity integration itself applies): 50.385 at J2000 (series-driven). The obliquity beat and the
78
+ * obliquity lines ride THIS rate; the general precession (meanRateArcsecPerYrAtYear) is the
79
+ * equinox along the ecliptic of date. @param {number} year @returns {number} */
80
+ spinAxisInertialRateArcsecPerYrAtYear: (year: number) => number;
81
+ /** The obliquity beat 2π/(ψ̇ᵢₙ(t) − |s₃|), years — the SHIPPED deep-time obliquity period at an INSTANT
82
+ * (falsification leg 1; 41,098 at J2000). ψ̇ᵢₙ is the spin axis's INERTIAL rate (above): the equator
83
+ * against the ecliptic's nodal mode in the inertial frame, the rate the hybrid obliquity integration
84
+ * self-anchors on — not the general precession, which reads the beat 0.3 % long (41,224). v23.0: a
85
+ * dated record sees the beat of the pole rate's mean over its own window, with the pole's of-date
86
+ * factors (obliquityPeriodRealizedYears below: 40,927 over the LR04 record, the climate formula's p+s₀
87
+ * line; La2004's own series reads 40,900 on the same window — compare realized with realized, never
88
+ * this instant with Laskar's long-window precession frequency 50.476). @param {number} year @returns {number} */
89
+ obliquityBeatYearsAtYear: (year: number) => number;
90
+ /** THE REALIZED POLE RATE OVER A WINDOW, ″/yr — see the one home above (the mean of the inertial rate of
91
+ * date with its three of-date factors); the rate the obliquity lines of a record spanning the window carry. */
92
+ spinAxisInertialRateMeanArcsecPerYr: (yearFrom: number, yearTo: number, stepYears?: number, opts?: {
93
+ ellipticity?: boolean;
94
+ }) => number;
95
+ /** THE REALIZED OBLIQUITY PERIOD OVER A WINDOW, years — 1,296,000/(⟨ψ̇ᵢₙ⟩_window − |s₃|): the period a record
96
+ * spanning [yearFrom, yearTo] sees (40,930 over the LR04 record 0–5.32 Ma, 41,018 over the last Myr); the
97
+ * J2000 beat (obliquityBeatYearsAtYear) is its instantaneous limit.
98
+ * @param {number} yearFrom @param {number} yearTo @returns {number} */
99
+ obliquityPeriodRealizedYears: (yearFrom: number, yearTo: number) => number;
100
+ /** The apsidal (perihelion vs the stars) period of date, JULIAN years — the ONE movement's own apsidal rate (the scene's perihelion; anom/(anom − sid) of the one family, ≡ 360°/apsidalRateFixedArcsecPerJulianYr), inside the published window only; null beyond. Before 2026-09 this rode the planet chain's secular tangent, which parted from the scene's perihelion passages by seconds of anomalistic year within a few millennia (year-lengths.cjs). @param {number} year @returns {number|null} */
101
+ apsidalPeriodYearsAtYear: (year: number) => number | null;
102
+ /** T_aps(t) / T_p(t) — the apsidal period in of-date precession periods (4.33 at J2000, a reading; 0.84 … 9.9 across ±26 kyr, measured); null beyond the published window. @param {number} year @returns {number|null} */
103
+ apsidalPerPrecessionAtYear: (year: number) => number | null;
104
+ /** T_peri(t) = 1/(1/T_p + 1/T_aps) — the perihelion-of-date period (equinox precession + inertial perihelion motion, frame arithmetic at every epoch), JULIAN years, on the of-date T_p — ≡ the one family's anom/(anom − trop); null beyond the published window. @param {number} year @returns {number|null} */
105
+ periOfDatePeriodYearsAtYear: (year: number) => number | null;
106
+ /** T_peri(t) / T_p(t) (0.812 at J2000 — the J2000 reading); null beyond the published window. @param {number} year @returns {number|null} */
107
+ periOfDatePerPrecessionAtYear: (year: number) => number | null;
108
+ /** The published of-date window, years from 2000. */
109
+ publishedWindowYears: 2000000;
110
+ /** THE SPIN AXIS'S INERTIAL PRECESSION PERIOD at J2000, years (25,722 in the shipped,
111
+ * series-driven configuration) — the rate the hybrid obliquity integration self-anchors
112
+ * ŝ on (earth/deep-orbital-history, D4e): the general-precession anchor p₀ PLUS the
113
+ * planetary mean the N-body ecliptic's own motion carries (+0.097 ″/yr ≡ IAU's planetary
114
+ * precession ψ_A − p_A; the bare 18-mode table anchors 0.18 — the g₂-gap trap: pass the
115
+ * secular series). Two rates, two uses — the obliquity line frequencies p + s_i (the
116
+ * spin axis against the ecliptic's nodal modes, in the inertial frame) carry THIS
117
+ * rate; the climatic-precession lines p + g_i (the perihelion from the equinox along
118
+ * the ecliptic of date) carry p₀. */
119
+ spinAxisInertialPeriodYearsJ2000: number;
120
+ /** The same as a rate, ″/yr (50.385 at J2000 with the series; p₀ = 50.288 is the general precession). */
121
+ spinAxisInertialRateArcsecPerYrJ2000: number;
122
+ }>;
123
+ earth: Readonly<{
124
+ perihelionLongitudeDeg: (year: number) => number;
125
+ obliquityDeg: (year: number) => number;
126
+ /** The hybrid's own domain, [yearFrom, yearTo] — the banked ζ series' span, ±10 Myr about J2000 (plan 12 §8.5: the published surfaces serve `obliquityDeg` inside it only; null without a series, i.e. a bare createModel()). */
127
+ obliquityHybridDomainYears: [number, number] | null;
128
+ /** The cited mean obliquity of date ε̄(t) (Farhat et al. 2022's column; plan 12 §8 option (a)), degrees — a Myr-scale mean; NaN beyond 4,429 Ma. @param {number} year @returns {number} */
129
+ meanObliquityCitedDeg: (year: number) => number;
130
+ eccentricity: (year: number) => number;
131
+ inclinationDeg: (year: number) => number;
132
+ ascendingNodeDeg: (year: number) => number;
133
+ }>;
134
+ lengths: Readonly<{
135
+ tropicalYearDays: (year: number) => number;
136
+ siderealYearDays: (year: number) => number;
137
+ anomalisticYearDays: (year: number) => number;
138
+ dayLengthSeconds: (year: number) => number;
139
+ lodRealSeconds: (year: number) => number;
140
+ siderealDaySeconds: (year: number) => number;
141
+ stellarDaySeconds: (year: number) => number;
142
+ }>;
143
+ cardinal: Readonly<{
144
+ jd: (year: number, type: string) => number;
145
+ jdNearUT: (jdUT: number, type: string) => number;
146
+ raDeg: (year: number, type: string) => number;
147
+ yearLengthDays: (year: number, type: string) => number;
148
+ }>;
149
+ cardinalStructure: Readonly<{
150
+ yearLengthSeconds: (year: number, type: "VE" | "SS" | "AE" | "WS") => number;
151
+ eocOffsetSeconds: (year: number, type: "VE" | "SS" | "AE" | "WS") => number;
152
+ spreadSeconds: (year: number) => {
153
+ VE: number;
154
+ SS: number;
155
+ AE: number;
156
+ WS: number;
157
+ meanSeconds: number;
158
+ };
159
+ anomalisticYearSeconds: (year: number) => number;
160
+ }>;
161
+ yearLengths: Readonly<{
162
+ tropicalYearSecondsAtYear: (year: number) => number;
163
+ siderealYearSecondsAtYear: (year: number) => number;
164
+ anomalisticYearSecondsAtYear: (year: number) => number;
165
+ axialPrecessionYearsAtYear: (y: number) => number;
166
+ perihelionPrecessionYearsAtYear: (y: number) => number;
167
+ inclinationPrecessionYearsAtYear: (y: number) => number;
168
+ generalPrecessionArcsecPerJulianYr: (y: number) => number;
169
+ apsidalRateFixedArcsecPerJulianYr: (y: number) => number;
170
+ cardinal: Readonly<{
171
+ yearLengthSeconds: (y: number, type: "VE" | "SS" | "AE" | "WS") => number;
172
+ eocOffsetSeconds: (y: number, type: "VE" | "SS" | "AE" | "WS") => number;
173
+ spreadSeconds: (y: number) => {
174
+ VE: number;
175
+ SS: number;
176
+ AE: number;
177
+ WS: number;
178
+ meanSeconds: number;
179
+ };
180
+ }>;
181
+ planetaryRelAtYear: (year: number) => number;
182
+ }>;
183
+ moon: Readonly<{
184
+ distanceKmAtYear: (year: number) => number;
185
+ siderealMonthDaysAtYear: (year: number) => number;
186
+ synodicMonthDays: number;
187
+ lonDegAtJD: (jd: number) => number;
188
+ betaDegAtJD: (jd: number) => number;
189
+ distanceKmAtJD: (jd: number) => number;
190
+ }>;
191
+ eclipse: Readonly<{
192
+ sunLonDegAtJD: (jd: number) => number;
193
+ sunLonCompletedDegAtJD: (jd: number) => number;
194
+ /** The APPARENT Sun (completed geometric − the derived aberration constant + the leading nutation terms on the model's own arguments) — the quantity Horizons' observer ecliptic longitude is; the cardinal instants are its crossings (plan 06 R1/I1). @param {number} jdUT @returns {number} */
195
+ sunApparentLonDegAtJD: (jdUT: number) => number;
196
+ findLunarInRange: (jdStart: number, jdEnd: number) => {
197
+ jd: number;
198
+ beta: number;
199
+ moonDistance_km: number;
200
+ type: string;
201
+ magnitudeUmbral: number;
202
+ magnitudePenumbral: number;
203
+ }[];
204
+ findSolarInRange: (jdStart: number, jdEnd: number) => {
205
+ jd: number;
206
+ beta: number;
207
+ moonDistance_km: number;
208
+ type: string;
209
+ moonAppR_topo: number;
210
+ sunAppR: number;
211
+ moonSunRatio: number;
212
+ }[];
213
+ deltaTSecondsAtJD: (jd: number) => number;
214
+ /** The ΔT trend anchor at J2000 (seconds): the TT − UT bridge every finder axis adds to a
215
+ * true-UT JD. The joint ΔT fit's output, shipped in its own artifact (FIT.DT_ANCHOR —
216
+ * plan 14: never a constants-file input), exposed here so no consumer reaches into the
217
+ * constants for it. */
218
+ ttBridgeSeconds: any;
219
+ frameworkSunDeps: Readonly<{
220
+ sunMeanLongitudeJ2000Deg: any;
221
+ tropicalRateDegPerCy: number;
222
+ eccentricityAt: (year: number) => any;
223
+ perihelionLongitudeDegAt: (year: number) => number;
224
+ meanLongitudeDegAt: (year: number) => number;
225
+ }>;
226
+ umbraGroundAtJD: (jd: number) => {
227
+ latDeg: number;
228
+ lonDeg: number;
229
+ } | null;
230
+ solarLocalCircumstances: (jdGreatest: number, latDeg: number, lonDeg: number) => {
231
+ kind: "none" | "partial" | "annular" | "total";
232
+ magnitude: number;
233
+ maxJd: number;
234
+ contacts: {
235
+ c1: number | null;
236
+ c2: number | null;
237
+ c3: number | null;
238
+ c4: number | null;
239
+ };
240
+ centralDurationSeconds: number | null;
241
+ };
242
+ }>;
243
+ climate: Readonly<{
244
+ l1OrbitalPermil: (year: number) => number;
245
+ }>;
246
+ planets: Readonly<{
247
+ keys: readonly string[];
248
+ record: (k: string) => Record<string, any> | undefined;
249
+ perihelionLongitudeDeg: (k: string, year: number) => number;
250
+ ascendingNodeInvPlaneDeg: (k: string, year: number) => number;
251
+ invPlaneInclinationDeg: (k: string, year: number) => number;
252
+ eccentricity: (k: string, year: number) => number;
253
+ spin: (k: string) => Readonly<{
254
+ key: string;
255
+ cassiniLocked: boolean;
256
+ momentOfInertiaFactor: number;
257
+ momentOfInertiaFactorClass: string;
258
+ alphaArcsecPerYr: number;
259
+ satelliteQuadrupole: number;
260
+ satelliteAngularMomentum: number;
261
+ spinRetrograde: boolean;
262
+ meanMotionRadPerYr: number;
263
+ obliquityJ2000Deg: number;
264
+ spinPrecessionRateArcsecPerYrJ2000: number | null;
265
+ axialPrecessionPeriodYearsJ2000: number | null;
266
+ obliquityDegAtYear: (year: number) => number | null;
267
+ spinPrecessionRateArcsecPerYrAtYear: (year: number) => number | null;
268
+ obliquityEnvelopeDeg: (year: number, spanYr: number) => {
269
+ minDeg: number;
270
+ meanDeg: number;
271
+ maxDeg: number;
272
+ } | null;
273
+ spinAxisEclipticJ2000AtYear: (year: number) => number[] | null;
274
+ orbitNormalEclipticJ2000AtYear: (year: number) => number[];
275
+ stepYr: number;
276
+ maxSpanYr: 10000000;
277
+ }>;
278
+ }>;
279
+ }>;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The time axis — exact JD ↔ model-year conversion on the SI axis.
3
+ *
4
+ * One slice of `assembleModel` (../model.js): receives the context the earlier slices built, returns the bindings the later ones read.
5
+ */
6
+ /** @param {import('./inv-plane-elements.js').Ctx} ctx @returns the bindings the later slices read */
7
+ export function assembleTimeAxis(ctx: import("./inv-plane-elements.js").Ctx): {
8
+ jdFromYear: (year: number) => number;
9
+ siTropicalYearDays: number;
10
+ yearFromJD: (jd: number) => number;
11
+ };
12
+ export type Ctx = import("./inv-plane-elements.js").Ctx & ReturnType<typeof assembleTimeAxis>;
@@ -0,0 +1,8 @@
1
+ /** @param {import('./earth-scalars.js').Ctx} ctx @returns the bindings the later slices read */
2
+ export function assembleYearDayLengths(ctx: import("./earth-scalars.js").Ctx): {
3
+ anomalisticYearDays: (year: number) => number;
4
+ certifiedAxialPrecessionJ2000Years: () => number;
5
+ dayLengthSeconds: (year: number) => number;
6
+ siderealYearDays: (year: number) => number;
7
+ };
8
+ export type Ctx = import("./earth-scalars.js").Ctx & ReturnType<typeof assembleYearDayLengths>;