@essrt/physics 23.6.0 → 24.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.
@@ -98,3 +98,26 @@ export function createDeepOrbitalHistory({ zModes, zetaModes, zetaSeries, zSerie
98
98
  ellipticity: number;
99
99
  };
100
100
  };
101
+ /**
102
+ * The CO-ROTATING anchored mode sum — the z-side evaluator of the history
103
+ * (the ϖ̇ fix, measured): the plain DC anchor residual is a spurious
104
+ * zero-frequency mode that preserves the J2000 VALUE but dilutes the local
105
+ * argument rate by |sum(0)|/|anchor| (z: 11.47 → 7.93″/yr, a 92 s-class
106
+ * anomalistic-year bias in the mode tier). Here the residual ROTATES at the
107
+ * raw sum's own local arg-rate g* = Im(ż·z̄)/|z|² (analytic), so at t = 0
108
+ * both the value AND the rate are exact, and at depth the residual is one
109
+ * |R|-amplitude term at a physical frequency instead of a DC offset (deep
110
+ * envelope measured unchanged: [0.0001, 0.0672] → [0.0003, 0.0678] over
111
+ * 10–50 Myr). Exported: e(t) = hypot(sum(t)) needs no spin integration,
112
+ * so a fixture can read a deep eccentricity node here (bit-identical at the
113
+ * grid nodes; the published surface is the grid's linear interpolation and
114
+ * stays on the history).
115
+ * @param {ReadonlyArray<{omegaRadPerYr: number, re: number, im: number}>} modes
116
+ * @param {[number, number]} anchor the J2000 value (q, p) the sum is pinned to
117
+ * @returns {(t: number) => [number, number]} t in years from J2000
118
+ */
119
+ export function createCoRotatingAnchoredModeSum(modes: ReadonlyArray<{
120
+ omegaRadPerYr: number;
121
+ re: number;
122
+ im: number;
123
+ }>, anchor: [number, number]): (t: number) => [number, number];
@@ -54,24 +54,6 @@ export type BesselianDeps = {
54
54
  speedOfLightKmS: number;
55
55
  };
56
56
  };
57
- /**
58
- * @typedef {Object} BesselianDeps
59
- * @property {(dDaysTT: number) => {lonDeg: number, latDeg: number, distKm: number}} moonFullAtDaysTT
60
- * full-series Moon: ecliptic-of-date longitude/latitude (deg) + distance (km), TT axis (days since J2000)
61
- * @property {(jdUT: number) => number} sunLonDegAt - geometric mean sun longitude (deg), JD(UT) axis with the finder's internal ΔT
62
- * @property {(T: number) => number} sunCompletionDeg - planetary completion (deg) at T centuries TT, SUBTRACTED from the finder sun (see eclipse/sun-planetary-completion.cjs; the finders deliberately stay without it — their fitted anchors and certified canon statistics were produced on the bare form, and elongation-class timing absorbs the omission into the fitted phases)
63
- * @property {(year: number) => number} sunAberrationDegAt - the Sun's derived planetary aberration κ (deg) at calendar year, SUBTRACTED from the geometric Sun longitude (the apparent Sun; see the header)
64
- * @property {(jd: number) => number} deltaTSecondsAt - framework ΔT (J2000-zeroed convention)
65
- * @property {(year: number) => number} obliquityDegAt - framework obliquity (deg) at calendar year
66
- * @property {(year: number) => number} eccentricityAt - framework Earth-orbit eccentricity at calendar year
67
- * @property {(year: number) => number} perihelionLongitudeDegAt - framework perihelion longitude (deg) at calendar year
68
- * @property {(jd: number) => number} yearFromJD - the model's own JD → calendar-year conversion
69
- * @property {{ j2000JD: number, julianCenturyDays: number, earthDiameterKm: number,
70
- * moonDiameterKm: number, sunDiameterKm: number, sunDistanceKm: number,
71
- * earthFlatteningInverse: number, ttBridgeSeconds: number,
72
- * gmstMeanSiderealT0Deg: number, gmstMeanSiderealRateDegPerDay: number,
73
- * gmstMeanSiderealT2Deg: number, speedOfLightKmS: number }} constants
74
- */
75
57
  /** @param {BesselianDeps} deps */
76
58
  export function createBesselian(deps: BesselianDeps): {
77
59
  umbraGroundAt: (jdUT: number) => {
@@ -96,4 +78,41 @@ export function createBesselian(deps: BesselianDeps): {
96
78
  };
97
79
  centralDurationSeconds: number | null;
98
80
  };
81
+ gmstDeg: (jdUT: number) => number;
99
82
  };
83
+ /**
84
+ * @typedef {Object} BesselianDeps
85
+ * @property {(dDaysTT: number) => {lonDeg: number, latDeg: number, distKm: number}} moonFullAtDaysTT
86
+ * full-series Moon: ecliptic-of-date longitude/latitude (deg) + distance (km), TT axis (days since J2000)
87
+ * @property {(jdUT: number) => number} sunLonDegAt - geometric mean sun longitude (deg), JD(UT) axis with the finder's internal ΔT
88
+ * @property {(T: number) => number} sunCompletionDeg - planetary completion (deg) at T centuries TT, SUBTRACTED from the finder sun (see eclipse/sun-planetary-completion.cjs; the finders deliberately stay without it — their fitted anchors and certified canon statistics were produced on the bare form, and elongation-class timing absorbs the omission into the fitted phases)
89
+ * @property {(year: number) => number} sunAberrationDegAt - the Sun's derived planetary aberration κ (deg) at calendar year, SUBTRACTED from the geometric Sun longitude (the apparent Sun; see the header)
90
+ * @property {(jd: number) => number} deltaTSecondsAt - framework ΔT (J2000-zeroed convention)
91
+ * @property {(year: number) => number} obliquityDegAt - framework obliquity (deg) at calendar year
92
+ * @property {(year: number) => number} eccentricityAt - framework Earth-orbit eccentricity at calendar year
93
+ * @property {(year: number) => number} perihelionLongitudeDegAt - framework perihelion longitude (deg) at calendar year
94
+ * @property {(jd: number) => number} yearFromJD - the model's own JD → calendar-year conversion
95
+ * @property {{ j2000JD: number, julianCenturyDays: number, earthDiameterKm: number,
96
+ * moonDiameterKm: number, sunDiameterKm: number, sunDistanceKm: number,
97
+ * earthFlatteningInverse: number, ttBridgeSeconds: number,
98
+ * gmstMeanSiderealT0Deg: number, gmstMeanSiderealRateDegPerDay: number,
99
+ * gmstMeanSiderealT2Deg: number, speedOfLightKmS: number }} constants
100
+ */
101
+ /** Mean sidereal time at Greenwich, degrees (mean equinox — pairs with the
102
+ * mean-of-date body longitudes; coefficients single-sourced from
103
+ * astro-reference.json physicalConstants). THE ONE GMST of the model: the
104
+ * eclipse location tier, the API's observer tier, the eclipse and lunar
105
+ * audits and the browser's diagnostics all read it. Meeus 12.4's
106
+ * cubic term (−T³/38,710,000) is deliberately absent: it is 0.9″ in the
107
+ * eclipse canon and at most 93″ (6 s of time) at the edge of the observer
108
+ * era, and every recorded eclipse and lunar value was measured without it.
109
+ * @param {number} jdUT
110
+ * @param {{ j2000JD: number, julianCenturyDays: number, gmstMeanSiderealT0Deg: number, gmstMeanSiderealRateDegPerDay: number, gmstMeanSiderealT2Deg: number }} K
111
+ * @returns {number} */
112
+ export function computeGmstDeg(jdUT: number, K: {
113
+ j2000JD: number;
114
+ julianCenturyDays: number;
115
+ gmstMeanSiderealT0Deg: number;
116
+ gmstMeanSiderealRateDegPerDay: number;
117
+ gmstMeanSiderealT2Deg: number;
118
+ }): number;
package/types/index.d.ts CHANGED
@@ -66,7 +66,7 @@ export { computeMassChainJ2000, computeMoonPeriodsJ2000 } from "./earth/mass-cha
66
66
  export { SECONDS_PER_DAY, DAYS_PER_JULIAN_YEAR, JULIAN_CENTURY_DAYS, SECONDS_PER_JULIAN_YEAR } from "./constants/units.cjs";
67
67
  export { computeEarthFrameOfDate, solveWheelAngleForLongitude, computeSceneWorldFrameJ2000, SCENE_EQUINOX_VIEW_AZIMUTH_DEG } from "./earth/frame-of-date.cjs";
68
68
  export { derivePlanetGeometry, scaffoldOrbitInputs } from "./planets/geometry.cjs";
69
- export { buildPlanetChainsFromArtifactData, computePlanetElementsAtYear, computeHeliocentricEclipticFromElements, computePoissonArgRad, computeOsculatingElements, solveKeplerRad, computeApsidalSecularDegPerYr, computeApsidalSecularDegPerYr as computeApsidalTangentDegPerYr, ANCHOR_EPOCH_YEAR, ANCHOR_EPOCH_JD } from "./planets/keplerian-chain.cjs";
69
+ export { buildPlanetChainsFromArtifactData, computePlanetElementsAtYear, computeHeliocentricEclipticFromElements, computePoissonArgRad, computeOsculatingElements, solveKeplerRad, computeApsidalTangentDegPerYr, ANCHOR_EPOCH_YEAR, ANCHOR_EPOCH_JD } from "./planets/keplerian-chain.cjs";
70
70
  export { computeEquatorNodeOriginSFrameDeg, convertNodeSFrameToEquatorOriginDeg } from "./planets/inv-plane-frame.cjs";
71
71
  export { computePlanetPrecessionConstant, createPlanetSpinChannel, createPlanetSpinChannelFromArtifacts, computeObliquityJ2000Deg } from "./planets/spin-channel.cjs";
72
72
  export { CHAIN_ARTIFACT, CHAIN_ARTIFACT_HASH } from "./planets/chain-artifact.js";
@@ -23,6 +23,7 @@ export function assembleSunAndEclipses(ctx: import("./lunar-theory.js").Ctx): {
23
23
  };
24
24
  centralDurationSeconds: number | null;
25
25
  };
26
+ gmstDeg: (jdUT: number) => number;
26
27
  };
27
28
  eclipseFinders: {
28
29
  sunLonDegAt: (jd: number) => number;
@@ -227,6 +227,8 @@ export function assembleSurface(ctx: import("./cardinal-instants.js").Ctx): Read
227
227
  latDeg: number;
228
228
  lonDeg: number;
229
229
  } | null;
230
+ /** THE ONE GMST — mean sidereal time at Greenwich, degrees, at a UT JD (eclipse/besselian.cjs computeGmstDeg; the observer tier's hour angle). @param {number} jdUT @returns {number} */
231
+ gmstDegAtJD: (jdUT: number) => number;
230
232
  solarLocalCircumstances: (jdGreatest: number, latDeg: number, lonDeg: number) => {
231
233
  kind: "none" | "partial" | "annular" | "total";
232
234
  magnitude: number;
package/types/model.d.ts CHANGED
@@ -183,6 +183,7 @@ export function assembleModel(C: Readonly<Record<string, any>>, F: Readonly<Reco
183
183
  latDeg: number;
184
184
  lonDeg: number;
185
185
  } | null;
186
+ gmstDegAtJD: (jdUT: number) => number;
186
187
  solarLocalCircumstances: (jdGreatest: number, latDeg: number, lonDeg: number) => {
187
188
  kind: "none" | "partial" | "annular" | "total";
188
189
  magnitude: number;
@@ -155,7 +155,7 @@ export function computePlanetElementsAtYear(year: number, planetChain: KcPlanetC
155
155
  * @param {Object<string,KcPlanetChain>=} allChains the full chain map
156
156
  * @returns {number} deg/yr, prograde positive
157
157
  */
158
- export function computeApsidalSecularDegPerYr(year: number, planetChain: KcPlanetChain, allChains?: {
158
+ export function computeApsidalTangentDegPerYr(year: number, planetChain: KcPlanetChain, allChains?: {
159
159
  [x: string]: KcPlanetChain;
160
160
  } | undefined): number;
161
161
  /** The chain's canonical constructor from a PARSED governed artifact (K2.1 →
@@ -1,8 +1,8 @@
1
1
  export type PlanetModelBody = {
2
2
  /**
3
- * - the observed sidereal period input, SI days (the scaffold period of the no-chain bodies; the chain planets ride the artifact's elements)
3
+ * - the body's orbital-period input, SI days — for the planets the period OF DATE (measured in sun-and-eclipses.js: their rates sit 1.4–1.6°/cy above the VSOP sidereal mean motions, the precession plus input rounding), not the sidereal period the field was once documented as; the scaffold period of the no-chain bodies — the chain planets ride the artifact's elements
4
4
  */
5
- solarYearInput: number;
5
+ orbitalPeriodInputDays: number;
6
6
  invPlaneInclinationJ2000?: number | undefined;
7
7
  longitudePerihelion?: number | undefined;
8
8
  /**
@@ -43,7 +43,7 @@ export type PlanetModelRecord = {
43
43
  };
44
44
  /**
45
45
  * @typedef {Object} PlanetModelBody
46
- * @property {number} solarYearInput - the observed sidereal period input, SI days (the scaffold period of the no-chain bodies; the chain planets ride the artifact's elements)
46
+ * @property {number} orbitalPeriodInputDays - the body's orbital-period input, SI days — for the planets the period OF DATE (measured in sun-and-eclipses.js: their rates sit 1.4–1.6°/cy above the VSOP sidereal mean motions, the precession plus input rounding), not the sidereal period the field was once documented as; the scaffold period of the no-chain bodies — the chain planets ride the artifact's elements
47
47
  * @property {number} [invPlaneInclinationJ2000]
48
48
  * @property {number} [longitudePerihelion]
49
49
  * @property {number} [wobblePeriodYears] - carriers: the chain's g-mode beat (input since Phase 7 commit 2)