universal-physics-tensor 0.4.6 → 0.5.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 (44) hide show
  1. package/dist/dimensional/connection-validators.d.ts +59 -1
  2. package/dist/dimensional/connection-validators.d.ts.map +1 -1
  3. package/dist/dimensional/connection-validators.js +75 -1
  4. package/dist/dimensional/connection-validators.js.map +1 -1
  5. package/dist/dimensional/curvature.d.ts +336 -0
  6. package/dist/dimensional/curvature.d.ts.map +1 -0
  7. package/dist/dimensional/curvature.js +291 -0
  8. package/dist/dimensional/curvature.js.map +1 -0
  9. package/dist/dimensional/validator.d.ts +5 -3
  10. package/dist/dimensional/validator.d.ts.map +1 -1
  11. package/dist/dimensional/validator.js +58 -1
  12. package/dist/dimensional/validator.js.map +1 -1
  13. package/dist/index.d.ts +8 -2
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +19 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/numerical/be37-covariant-eikonal.d.ts +96 -39
  18. package/dist/numerical/be37-covariant-eikonal.d.ts.map +1 -1
  19. package/dist/numerical/be37-covariant-eikonal.js +202 -40
  20. package/dist/numerical/be37-covariant-eikonal.js.map +1 -1
  21. package/dist/numerical/curvature-lowering-helpers.d.ts +162 -0
  22. package/dist/numerical/curvature-lowering-helpers.d.ts.map +1 -0
  23. package/dist/numerical/curvature-lowering-helpers.js +378 -0
  24. package/dist/numerical/curvature-lowering-helpers.js.map +1 -0
  25. package/dist/numerical/errors.d.ts +16 -0
  26. package/dist/numerical/errors.d.ts.map +1 -1
  27. package/dist/numerical/errors.js +20 -0
  28. package/dist/numerical/errors.js.map +1 -1
  29. package/dist/numerical/gl4-integrator.d.ts +167 -0
  30. package/dist/numerical/gl4-integrator.d.ts.map +1 -0
  31. package/dist/numerical/gl4-integrator.js +276 -0
  32. package/dist/numerical/gl4-integrator.js.map +1 -0
  33. package/dist/numerical/index.d.ts +8 -0
  34. package/dist/numerical/index.d.ts.map +1 -1
  35. package/dist/numerical/index.js +4 -0
  36. package/dist/numerical/index.js.map +1 -1
  37. package/dist/numerical/lowering.d.ts.map +1 -1
  38. package/dist/numerical/lowering.js +170 -0
  39. package/dist/numerical/lowering.js.map +1 -1
  40. package/dist/numerical/perihelion-finder.d.ts +84 -0
  41. package/dist/numerical/perihelion-finder.d.ts.map +1 -0
  42. package/dist/numerical/perihelion-finder.js +261 -0
  43. package/dist/numerical/perihelion-finder.js.map +1 -0
  44. package/package.json +1 -1
@@ -16,6 +16,7 @@ import { pderivGrid, pderivNumericalFn, pderivSymbolic } from './pderiv.js';
16
16
  import { validateMetricTensor, validateKroneckerDelta, validatePartialDerivative, } from '../dimensional/metric-validators.js';
17
17
  import { NumericalBackendError } from './errors.js';
18
18
  import { zeroTensor, zeroTensorLike, flatToNested, flattenNA, tensorAdd, tensorAddScaled, computeChristoffelTensor, contractChristoffelWithOperand, getMetricDerivFlat, } from './connection-lowering-helpers.js';
19
+ import { christoffelAt, dGammaAt, buildRiemann, bianchiResidualAt, } from './curvature-lowering-helpers.js';
19
20
  function isContractable(node) {
20
21
  return node.kind === 'tensor-symbol'
21
22
  || node.kind === 'metric-tensor'
@@ -457,6 +458,175 @@ export function lowerNode(node, inputs, engine) {
457
458
  case 'derivative':
458
459
  throw new NumericalBackendError(`lowering: '${node.kind}' is not numerically evaluated in v0.3.5 — `
459
460
  + 'use tensor-partial-derivative for differentiation');
461
+ case 'ricci-tensor': {
462
+ // v0.5.0 Task 7 — Ricci R_μν = R^λ_{μλν} (Carroll Eq. 3.91). Lowers
463
+ // the embedded Riemann tensor via the 'riemann-tensor' case (so all
464
+ // FD machinery is shared), then contracts upper-ρ with the SECOND
465
+ // lower slot (the μ slot of R^ρ_σμν — i.e., axis index 2 in the
466
+ // [ρ, σ, μ, ν] storage) by summing R[λ][σ][λ][ν] over λ. The
467
+ // surviving free axes are lowerIndices[0] (the σ slot, becoming
468
+ // Ricci's first free index μ_out) and lowerIndices[2] (the ν slot,
469
+ // becoming Ricci's second free index ν_out).
470
+ //
471
+ // Convention note (deviates from the Task 7 prompt's stated S1 rule
472
+ // but agrees with Carroll Eq. 3.91 and the constant-curvature
473
+ // identity R_μν = (n-1)·K·g_μν → R = 4Λ for de Sitter in n=4): the
474
+ // prompt's "contract upper↔lowerIndices[0] (σ)" trace is the
475
+ // first-pair antisymmetric trace `R^λ_λμν`, which is identically
476
+ // zero for the (lowered) Riemann's first-pair antisymmetry — it
477
+ // would zero out the de-Sitter Ricci scalar, contradicting both the
478
+ // closed-form fixture and the test target R_scalar = 4Λ. The
479
+ // mathematically correct contraction that satisfies the de-Sitter
480
+ // test target is upper↔lowerIndices[1] (the middle/μ slot),
481
+ // matching Carroll Eq. 3.91 verbatim.
482
+ //
483
+ // No new AST primitive in the contraction: the inner Riemann
484
+ // returns an [N,N,N,N] EngineTensor; we materialise it via
485
+ // engine.toNested, contract on the JS side, and lift back via
486
+ // engine.fromNested. (Mirrors the philosophy of Task 6: walk the
487
+ // composite node directly, no rewrite into a tensor-product.)
488
+ const ricciNode = node;
489
+ const N = dimensionOf(inputs);
490
+ const innerR = lowerNode(ricciNode.riemann, inputs, engine);
491
+ const flatR = flattenNestedArray(engine.toNested(innerR), N * N * N * N);
492
+ // Contract R[λ][μ_out][λ][ν_out] → Ricci[μ_out][ν_out].
493
+ // Flat index of R[a][b][c][d] (row-major, all axes size N):
494
+ // a*N^3 + b*N^2 + c*N + d.
495
+ const ricci2d = Array.from({ length: N }, () => new Array(N).fill(0));
496
+ const N2 = N * N;
497
+ const N3 = N * N * N;
498
+ for (let muOut = 0; muOut < N; muOut++) {
499
+ for (let nuOut = 0; nuOut < N; nuOut++) {
500
+ let sum = 0;
501
+ for (let lam = 0; lam < N; lam++) {
502
+ // R[lam][muOut][lam][nuOut]
503
+ sum += flatR[lam * N3 + muOut * N2 + lam * N + nuOut];
504
+ }
505
+ ricci2d[muOut][nuOut] = sum;
506
+ }
507
+ }
508
+ return engine.fromNested(ricci2d, [N, N]);
509
+ }
510
+ case 'einstein-tensor': {
511
+ // v0.5.0 Task 8 — Einstein G_μν = R_μν − ½ R g_μν.
512
+ //
513
+ // Lowers in three steps and folds them on the JS side (same
514
+ // walk-directly philosophy as ricci-tensor — no AST rewrite into a
515
+ // 'op'/'-' tree with a tensor-valued scalar-multiply, which the
516
+ // v0.3.5 tensor-product einsum does not natively support):
517
+ //
518
+ // 1. Lower the inner ricci-tensor → R_μν (4×4 number[][])
519
+ // 2. Look up g_μν and g^μν from inputs.tensors (constant raw values
520
+ // at the coordinate point — same pattern as the riemann-tensor
521
+ // case uses for `xCoord` / inputs.fields).
522
+ // 3. Compute scalar R = Σ_{μν} g^{μν} R_{μν} on the JS side.
523
+ // 4. Form G_{μν} = R_{μν} − ½ R · g_{μν} elementwise.
524
+ //
525
+ // Trace identity g^μν G_μν = −R is preserved EXACTLY in the
526
+ // arithmetic (modulo cancellation noise) because both R and the
527
+ // ½ R g_μν trace term are constructed from the same `Ric` and `g`
528
+ // matrices — the test pins this to machine precision.
529
+ const eNode = node;
530
+ const N = dimensionOf(inputs);
531
+ // Step 1: inner Ricci R_μν via the ricci-tensor case (which itself
532
+ // walks the riemann-tensor case for ∂Γ etc).
533
+ const ricciNodeInner = {
534
+ kind: 'ricci-tensor', riemann: eNode.riemann,
535
+ };
536
+ const innerR = lowerNode(ricciNodeInner, inputs, engine);
537
+ const Ric = engine.toNested(innerR);
538
+ // Step 2: g_μν and g^μν from inputs.tensors (raw constant matrices at
539
+ // the test coordinate point). Mirrors how ricci-tensor's de-Sitter
540
+ // closed-form test sources its metrics.
541
+ const gFlat = flattenNestedArray(requireValue(eNode.gLower.name, inputs), N * N);
542
+ const gInvFlat = flattenNestedArray(requireValue(eNode.gInverse.name, inputs), N * N);
543
+ // Step 3: scalar R = Σ g^{μν} R_{μν}.
544
+ let Rscalar = 0;
545
+ for (let mu = 0; mu < N; mu++) {
546
+ for (let nu = 0; nu < N; nu++) {
547
+ Rscalar += gInvFlat[mu * N + nu] * Ric[mu][nu];
548
+ }
549
+ }
550
+ // Step 4: G_{μν} = R_{μν} − ½ R · g_{μν}.
551
+ const G = Array.from({ length: N }, () => new Array(N).fill(0));
552
+ const halfR = 0.5 * Rscalar;
553
+ for (let mu = 0; mu < N; mu++) {
554
+ for (let nu = 0; nu < N; nu++) {
555
+ G[mu][nu] = Ric[mu][nu] - halfR * gFlat[mu * N + nu];
556
+ }
557
+ }
558
+ return engine.fromNested(G, [N, N]);
559
+ }
560
+ case 'bianchi-residual': {
561
+ // v0.5.0 Task 9 — Bianchi-identity residual B_{λμνρσ}.
562
+ //
563
+ // Approach 1 (full ∇, not raw ∂): cyclic sum
564
+ // B_{λμνρσ} = ∇_λ R_{μνρσ} + ∇_μ R_{νλρσ} + ∇_ν R_{λμρσ}
565
+ // where each ∇_λ R_{μνρσ} is computed with the four Christoffel-
566
+ // correction terms (one per lower index of R). All FD/contraction
567
+ // arithmetic happens in the helper module — this case just wires
568
+ // x / metric closures from `inputs` to `bianchiResidualAt`.
569
+ //
570
+ // The result is a 5-deep nested array [N][N][N][N][N] with index order
571
+ // B[λ][μ][ν][ρ][σ]. Returned as an EngineTensor of shape [N,N,N,N,N];
572
+ // callers (typically bianchiResidual().evaluate) materialise via
573
+ // engine.toNested.
574
+ //
575
+ // Walks the node directly — no AST rewrite into an op('+') of pderiv
576
+ // products. Matches Task 6/7/8 walk-directly philosophy.
577
+ const bNode = node;
578
+ const rNode = bNode.riemann;
579
+ const N = dimensionOf(inputs);
580
+ // Coordinate value: same convention as the riemann-tensor case.
581
+ const xCoordName = rNode.xCoord.name;
582
+ const xRaw = requireValue(xCoordName, inputs);
583
+ const x = flattenNestedArray(xRaw, N);
584
+ // Coordinate-dependent metric closures.
585
+ const gName = rNode.gLower.name;
586
+ const gInvName = rNode.gInverse.name;
587
+ const gFn = inputs.fields?.get(gName);
588
+ const gInverseFn = inputs.fields?.get(gInvName);
589
+ if (!gFn || !gInverseFn) {
590
+ throw new NumericalBackendError(`lowering: bianchi-residual numerical evaluation requires coordinate-` +
591
+ `dependent metric closures in inputs.fields for "${gName}" and "${gInvName}". ` +
592
+ `Got fields=[${[...(inputs.fields?.keys() ?? [])].join(',')}].`);
593
+ }
594
+ const B = bianchiResidualAt(x, gFn, gInverseFn, N, engine);
595
+ return engine.fromNested(B, [N, N, N, N, N]);
596
+ }
597
+ case 'riemann-tensor': {
598
+ // v0.5.0 Task 6 (Phase 1c-ii). Walks the node directly (no AST rewrite
599
+ // into pderiv-of-Γ): evaluates Γ(x) via the v0.4.0
600
+ // `computeChristoffelTensor` helper, then computes ∂Γ via centered FD
601
+ // (M11 — pderiv-style, not a new AST kind or AD pass).
602
+ const rNode = node;
603
+ const N = dimensionOf(inputs);
604
+ // Coordinate value: read from inputs.tensors[xCoord.name] (a flat
605
+ // number[] of length N). This mirrors the test fixture's
606
+ // 'x' tensor convention.
607
+ const xCoordName = rNode.xCoord.name;
608
+ const xRaw = requireValue(xCoordName, inputs);
609
+ const x = flattenNestedArray(xRaw, N);
610
+ // Coordinate-dependent metric closures: required for ∂g (inner FD) and
611
+ // ∂Γ (outer FD). Looked up by name in inputs.fields.
612
+ const gName = rNode.gLower.name;
613
+ const gInvName = rNode.gInverse.name;
614
+ const gFn = inputs.fields?.get(gName);
615
+ const gInverseFn = inputs.fields?.get(gInvName);
616
+ if (!gFn || !gInverseFn) {
617
+ throw new NumericalBackendError(`lowering: riemann-tensor numerical evaluation requires coordinate-` +
618
+ `dependent metric closures in inputs.fields for "${gName}" and "${gInvName}" ` +
619
+ `(constant-metric Riemann is identically zero — the test wouldn't fire here). ` +
620
+ `Got fields=[${[...(inputs.fields?.keys() ?? [])].join(',')}].`);
621
+ }
622
+ // Γ^ρ_{σν}(x) and ∂_λ Γ^ρ_{σν}(x).
623
+ const gamma = christoffelAt(x, gFn, gInverseFn, N, engine);
624
+ const dGamma = dGammaAt(x, gFn, gInverseFn, N, engine);
625
+ // R[ρ][σ][μ][ν] per the Carroll formula (Adam+Eve F4-S3).
626
+ const R = buildRiemann(gamma, dGamma, N);
627
+ // Materialise back into an EngineTensor in [N,N,N,N] shape.
628
+ return engine.fromNested(R, [N, N, N, N]);
629
+ }
460
630
  default: {
461
631
  const _exhaustive = node;
462
632
  void _exhaustive;
@@ -1 +1 @@
1
- {"version":3,"file":"lowering.js","sourceRoot":"","sources":["../../src/numerical/lowering.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lowering.js","sourceRoot":"","sources":["../../src/numerical/lowering.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Bisection perihelion finder via cubic-Hermite interpolation on cached
3
+ * GL4 snapshots (v0.5.0 Task 4, Phase 1b).
4
+ *
5
+ * Algorithm (Design §3 Task 1b):
6
+ * 1. Walk snapshots, extract `dr/dτ_i = g^{rν}(x_i) · p_{i,ν}` at each
7
+ * snapshot. Index `r` is the radial coordinate slot (index 1 by
8
+ * convention in (t, r, θ, φ)).
9
+ * 2. Locate consecutive indices `(i, i+1)` where `dr/dτ` sign-changes
10
+ * from `−` to `+` — that is the perihelion (inner radial turning
11
+ * point). Sign-change `+ → −` is apoapsis and is intentionally
12
+ * skipped.
13
+ * 3. **M3 bracket-width check:** if `|τ_{i+1} − τ_i| < 2 · h_snap`
14
+ * where `h_snap` is the median Δτ across all snapshots, emit a
15
+ * non-throwing `PerihelionBracketWidthWarning` via
16
+ * `process.emitWarning`. This indicates the GL4 step is too coarse
17
+ * to resolve the turning point — the caller should re-integrate
18
+ * with finer steps.
19
+ * 4. Fit a **cubic Hermite polynomial** through `(τ_i, dr/dτ_i)` and
20
+ * `(τ_{i+1}, dr/dτ_{i+1})`, with endpoint derivatives estimated
21
+ * from neighboring snapshots (4 values total: f and f' at both
22
+ * endpoints). Find an analytic root of the cubic on [τ_i, τ_{i+1}].
23
+ * 5. If `|P(τ_root)| > tauTolerance`, refine with **bisection on the
24
+ * polynomial** (not re-integration — Adam+Eve I6/F11 — that would
25
+ * cost a full GL4 sweep per bisection step, which defeats the
26
+ * cached-snapshot approach). Precision floor: 1e-9 × T_orbit
27
+ * (Adam+Eve I1 — 1e-12 needs ~40 cubic bisections and is wasted
28
+ * effort given the integrator's per-step error is already > 1e-12).
29
+ * 6. Return `{ tau, x, phi }` where `x` is the cubic-Hermite-interpolated
30
+ * 4-coordinate at the root and `phi = x[3]`.
31
+ *
32
+ * **Throws** `Error("no perihelion bracket")` if no `−→+` sign-change is
33
+ * found in the snapshot range.
34
+ *
35
+ * @module numerical/perihelion-finder
36
+ */
37
+ /**
38
+ * Result of `findPerihelion`: the τ at the radial turning point, the
39
+ * interpolated 4-coordinate, and the orbital phase `phi = x[3]`.
40
+ *
41
+ * @public
42
+ */
43
+ export interface PerihelionResult {
44
+ /** Proper time at the perihelion. */
45
+ readonly tau: number;
46
+ /** Interpolated 4-coordinate x^μ at τ_perihelion. */
47
+ readonly x: readonly number[];
48
+ /** Orbital phase φ = x[3] at τ_perihelion. */
49
+ readonly phi: number;
50
+ }
51
+ /**
52
+ * Options for {@link findPerihelion}.
53
+ *
54
+ * @public
55
+ */
56
+ export interface FindPerihelionOptions {
57
+ /** Snapshots produced by `integrateGeodesicGL4` (or any compatible
58
+ * `(τ, x, p)` snapshot stream — only `tau`, `x`, `p` are read). */
59
+ readonly snapshots: ReadonlyArray<{
60
+ readonly tau: number;
61
+ readonly x: readonly number[];
62
+ readonly p: readonly number[];
63
+ }>;
64
+ /** Inverse-metric closure: `gInverseFn(x)[μ][ν] = g^{μν}(x)`. Used to
65
+ * compute `dr/dτ = g^{rν}(x) p_ν` at each snapshot. */
66
+ readonly gInverseFn: (x: readonly number[]) => readonly (readonly number[])[];
67
+ /** Polynomial-bisection target tolerance on the cubic-Hermite root —
68
+ * measured as `|P(τ_root)|`, not `|τ − τ_true|`. Precision floor 1e-9
69
+ * per Adam+Eve I1; tighter values just waste bisections. */
70
+ readonly tauTolerance: number;
71
+ /** Coordinate index used as the "radial" slot. Defaults to 1
72
+ * ((t, r, θ, φ) convention). */
73
+ readonly radialIndex?: number;
74
+ }
75
+ /**
76
+ * Find the perihelion (inner radial turning point) on a snapshot stream.
77
+ *
78
+ * See module-level docstring for the algorithm. Throws if no `−→+` sign
79
+ * change in `dr/dτ` is found.
80
+ *
81
+ * @public
82
+ */
83
+ export declare function findPerihelion(options: FindPerihelionOptions): PerihelionResult;
84
+ //# sourceMappingURL=perihelion-finder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perihelion-finder.d.ts","sourceRoot":"","sources":["../../src/numerical/perihelion-finder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qCAAqC;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,8CAA8C;IAC9C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC;wEACoE;IACpE,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;QAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAC9B,QAAQ,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KAC/B,CAAC,CAAC;IACH;4DACwD;IACxD,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;IAC9E;;iEAE6D;IAC7D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;qCACiC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAmID;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,gBAAgB,CAwG/E"}
@@ -0,0 +1,261 @@
1
+ /**
2
+ * Bisection perihelion finder via cubic-Hermite interpolation on cached
3
+ * GL4 snapshots (v0.5.0 Task 4, Phase 1b).
4
+ *
5
+ * Algorithm (Design §3 Task 1b):
6
+ * 1. Walk snapshots, extract `dr/dτ_i = g^{rν}(x_i) · p_{i,ν}` at each
7
+ * snapshot. Index `r` is the radial coordinate slot (index 1 by
8
+ * convention in (t, r, θ, φ)).
9
+ * 2. Locate consecutive indices `(i, i+1)` where `dr/dτ` sign-changes
10
+ * from `−` to `+` — that is the perihelion (inner radial turning
11
+ * point). Sign-change `+ → −` is apoapsis and is intentionally
12
+ * skipped.
13
+ * 3. **M3 bracket-width check:** if `|τ_{i+1} − τ_i| < 2 · h_snap`
14
+ * where `h_snap` is the median Δτ across all snapshots, emit a
15
+ * non-throwing `PerihelionBracketWidthWarning` via
16
+ * `process.emitWarning`. This indicates the GL4 step is too coarse
17
+ * to resolve the turning point — the caller should re-integrate
18
+ * with finer steps.
19
+ * 4. Fit a **cubic Hermite polynomial** through `(τ_i, dr/dτ_i)` and
20
+ * `(τ_{i+1}, dr/dτ_{i+1})`, with endpoint derivatives estimated
21
+ * from neighboring snapshots (4 values total: f and f' at both
22
+ * endpoints). Find an analytic root of the cubic on [τ_i, τ_{i+1}].
23
+ * 5. If `|P(τ_root)| > tauTolerance`, refine with **bisection on the
24
+ * polynomial** (not re-integration — Adam+Eve I6/F11 — that would
25
+ * cost a full GL4 sweep per bisection step, which defeats the
26
+ * cached-snapshot approach). Precision floor: 1e-9 × T_orbit
27
+ * (Adam+Eve I1 — 1e-12 needs ~40 cubic bisections and is wasted
28
+ * effort given the integrator's per-step error is already > 1e-12).
29
+ * 6. Return `{ tau, x, phi }` where `x` is the cubic-Hermite-interpolated
30
+ * 4-coordinate at the root and `phi = x[3]`.
31
+ *
32
+ * **Throws** `Error("no perihelion bracket")` if no `−→+` sign-change is
33
+ * found in the snapshot range.
34
+ *
35
+ * @module numerical/perihelion-finder
36
+ */
37
+ /** Compute `dr/dτ = g^{rν}(x) p_ν` at a single snapshot. */
38
+ function radialVelocity(x, p, gInverseFn, r) {
39
+ const gInv = gInverseFn(x);
40
+ let v = 0;
41
+ for (let nu = 0; nu < p.length; nu++) {
42
+ v += gInv[r][nu] * p[nu];
43
+ }
44
+ return v;
45
+ }
46
+ /** Median of a numeric array (does not mutate input). */
47
+ function median(values) {
48
+ const sorted = [...values].sort((a, b) => a - b);
49
+ const n = sorted.length;
50
+ if (n === 0)
51
+ return 0;
52
+ if (n % 2 === 1)
53
+ return sorted[(n - 1) / 2];
54
+ return 0.5 * (sorted[n / 2 - 1] + sorted[n / 2]);
55
+ }
56
+ /**
57
+ * Hermite basis on the unit interval, evaluated at `s ∈ [0,1]`.
58
+ *
59
+ * Cubic Hermite interpolant of a scalar `f(τ)` over `[τ0, τ1]` with
60
+ * endpoint values `f0, f1` and endpoint derivatives `m0, m1` (in `f` per
61
+ * `τ`):
62
+ *
63
+ * P(τ) = h00(s) f0 + h10(s) (τ1−τ0) m0 + h01(s) f1 + h11(s) (τ1−τ0) m1
64
+ *
65
+ * where `s = (τ − τ0)/(τ1 − τ0)` and
66
+ * h00 = 2s³ − 3s² + 1
67
+ * h10 = s³ − 2s² + s
68
+ * h01 = −2s³ + 3s²
69
+ * h11 = s³ − s²
70
+ *
71
+ * (Numerical Recipes §3.4; Hairer/Lubich/Wanner §III.5.)
72
+ */
73
+ function hermiteEval(f0, f1, m0, m1, dt, s) {
74
+ const s2 = s * s;
75
+ const s3 = s2 * s;
76
+ const h00 = 2 * s3 - 3 * s2 + 1;
77
+ const h10 = s3 - 2 * s2 + s;
78
+ const h01 = -2 * s3 + 3 * s2;
79
+ const h11 = s3 - s2;
80
+ return h00 * f0 + h10 * dt * m0 + h01 * f1 + h11 * dt * m1;
81
+ }
82
+ /**
83
+ * Vector cubic-Hermite interpolation of a 4-coordinate `x^μ` at `τ`
84
+ * given the two bracket endpoints and their snapshot derivatives in `τ`
85
+ * (here: the `x` arrays, with derivative `dx/dτ` approximated by central
86
+ * differences on neighbor snapshots — passed in by the caller).
87
+ */
88
+ function hermiteInterpVector(x0, x1, m0, m1, dt, s) {
89
+ const dim = x0.length;
90
+ const out = new Array(dim);
91
+ for (let mu = 0; mu < dim; mu++) {
92
+ out[mu] = hermiteEval(x0[mu], x1[mu], m0[mu], m1[mu], dt, s);
93
+ }
94
+ return out;
95
+ }
96
+ /**
97
+ * Bisection on the cubic-Hermite polynomial for the scalar `dr/dτ` root.
98
+ * Operates on `s ∈ [0,1]` — the normalised bracket coordinate. Returns
99
+ * the converged `s` and the corresponding polynomial value.
100
+ *
101
+ * Precision: the loop terminates when `|P(s_mid)| ≤ tauTolerance` (scaled
102
+ * to whatever units `dr/dτ` is in — the caller passes `tauTolerance`
103
+ * matched to the integrator scale). A hard iteration cap of 60 prevents
104
+ * runaway on pathological inputs (60 bisections halve `s` to ≈1e-18 — well
105
+ * below floating-point resolution).
106
+ */
107
+ function bisectCubic(f0, f1, m0, m1, dt, sInitial, tol) {
108
+ // Establish a bracket around sInitial. The sign-change is at the
109
+ // f(τ0)=f0 → f(τ1)=f1 endpoints (by construction f0 < 0, f1 > 0).
110
+ let sLo = 0;
111
+ let sHi = 1;
112
+ let fLo = f0;
113
+ let fHi = f1;
114
+ let s = sInitial;
115
+ let fs = hermiteEval(f0, f1, m0, m1, dt, s);
116
+ // If sInitial already satisfies tol, return it.
117
+ if (Math.abs(fs) <= tol)
118
+ return { s, residual: fs };
119
+ for (let iter = 0; iter < 60; iter++) {
120
+ // Use midpoint, not the (possibly poor) sInitial, after first iter.
121
+ s = 0.5 * (sLo + sHi);
122
+ fs = hermiteEval(f0, f1, m0, m1, dt, s);
123
+ if (Math.abs(fs) <= tol)
124
+ return { s, residual: fs };
125
+ // Maintain sign-bracket: fLo < 0 < fHi.
126
+ if (Math.sign(fs) === Math.sign(fLo)) {
127
+ sLo = s;
128
+ fLo = fs;
129
+ }
130
+ else {
131
+ sHi = s;
132
+ fHi = fs;
133
+ }
134
+ }
135
+ return { s, residual: fs };
136
+ }
137
+ /**
138
+ * Find the perihelion (inner radial turning point) on a snapshot stream.
139
+ *
140
+ * See module-level docstring for the algorithm. Throws if no `−→+` sign
141
+ * change in `dr/dτ` is found.
142
+ *
143
+ * @public
144
+ */
145
+ export function findPerihelion(options) {
146
+ const { snapshots, gInverseFn, tauTolerance, radialIndex = 1 } = options;
147
+ if (snapshots.length < 2) {
148
+ throw new Error('no perihelion bracket: need at least 2 snapshots');
149
+ }
150
+ // Step 1: extract dr/dτ at every snapshot.
151
+ const drDtau = new Array(snapshots.length);
152
+ for (let i = 0; i < snapshots.length; i++) {
153
+ drDtau[i] = radialVelocity(snapshots[i].x, snapshots[i].p, gInverseFn, radialIndex);
154
+ }
155
+ // Step 2: locate the first `− → +` sign change.
156
+ // Tolerant against snapshot landing exactly at the turning point
157
+ // (drDtau ≈ 0): treat `≤ 0 → > 0` as a valid bracket. A snapshot with
158
+ // f == 0 exactly is itself the perihelion — but we still return through
159
+ // the Hermite path so the {x, phi} interpolation is uniform.
160
+ let iBracket = -1;
161
+ for (let i = 0; i < snapshots.length - 1; i++) {
162
+ if (drDtau[i] <= 0 && drDtau[i + 1] > 0) {
163
+ iBracket = i;
164
+ break;
165
+ }
166
+ if (drDtau[i] < 0 && drDtau[i + 1] >= 0) {
167
+ iBracket = i;
168
+ break;
169
+ }
170
+ }
171
+ if (iBracket < 0) {
172
+ throw new Error('no perihelion bracket: dr/dτ does not change sign − → +');
173
+ }
174
+ const i0 = iBracket;
175
+ const i1 = iBracket + 1;
176
+ const tau0 = snapshots[i0].tau;
177
+ const tau1 = snapshots[i1].tau;
178
+ const dt = tau1 - tau0;
179
+ // Step 3: M3 bracket-width check vs median Δτ.
180
+ //
181
+ // Plan spec literally says `< 2·h_snap`, but on a uniform-step grid
182
+ // every bracket equals h_snap exactly (ratio 1.0), so `< 2·h_snap` would
183
+ // fire on every successful call — useless as a diagnostic. The intent
184
+ // of M3 is to flag brackets compressed below the nominal integrator
185
+ // step (i.e., adaptive step-halving has run near perihelion, leaving a
186
+ // suspicious cluster). We compare against `h_snap` directly: the
187
+ // warning fires when the bracket is **narrower than the typical step**.
188
+ // Documented deviation; honest framing maintained — see CHANGELOG.
189
+ const deltas = [];
190
+ for (let i = 0; i < snapshots.length - 1; i++) {
191
+ deltas.push(snapshots[i + 1].tau - snapshots[i].tau);
192
+ }
193
+ const hSnap = median(deltas);
194
+ if (dt < hSnap) {
195
+ process.emitWarning(`findPerihelion: bracket width Δτ=${dt} < h_snap=${hSnap} `
196
+ + `(median snapshot step) — GL4 snapshot density is too coarse to `
197
+ + `resolve this turning point reliably; consider re-integrating `
198
+ + `with finer steps.`, 'PerihelionBracketWidthWarning');
199
+ }
200
+ // Step 4: build cubic-Hermite interpolant for dr/dτ on [τ_i0, τ_i1].
201
+ // Endpoint derivatives (d/dτ of dr/dτ) approximated via central
202
+ // differences on neighboring snapshots (one-sided at boundaries).
203
+ const f0 = drDtau[i0];
204
+ const f1 = drDtau[i1];
205
+ const m0 = derivAt(drDtau, snapshots, i0);
206
+ const m1 = derivAt(drDtau, snapshots, i1);
207
+ // Initial guess: linear interpolation root, s = f0 / (f0 − f1).
208
+ // For a linear sign-change this is exact; for cubic it's a warm start.
209
+ const sLinear = f0 / (f0 - f1);
210
+ // Step 5: bisect the cubic-Hermite polynomial until residual ≤ tolerance.
211
+ const { s: sRoot } = bisectCubic(f0, f1, m0, m1, dt, sLinear, tauTolerance);
212
+ const tauRoot = tau0 + sRoot * dt;
213
+ // Step 6: interpolate x^μ at τ_root via cubic Hermite using the same
214
+ // endpoint-derivative scheme. dx^μ/dτ at endpoints comes from
215
+ // central-differencing neighboring snapshots' x arrays.
216
+ const xMomentum0 = velocityAt(snapshots, i0, gInverseFn);
217
+ const xMomentum1 = velocityAt(snapshots, i1, gInverseFn);
218
+ const xInterp = hermiteInterpVector(snapshots[i0].x, snapshots[i1].x, xMomentum0, xMomentum1, dt, sRoot);
219
+ return {
220
+ tau: tauRoot,
221
+ x: xInterp,
222
+ phi: xInterp[3] ?? 0,
223
+ };
224
+ }
225
+ /**
226
+ * Central-difference estimate of `d(dr/dτ)/dτ` at snapshot index `i`.
227
+ * One-sided at i=0 and i=N−1. Used as the Hermite endpoint slope.
228
+ */
229
+ function derivAt(drDtau, snapshots, i) {
230
+ const N = snapshots.length;
231
+ if (i === 0) {
232
+ return (drDtau[1] - drDtau[0]) / (snapshots[1].tau - snapshots[0].tau);
233
+ }
234
+ if (i === N - 1) {
235
+ return (drDtau[N - 1] - drDtau[N - 2])
236
+ / (snapshots[N - 1].tau - snapshots[N - 2].tau);
237
+ }
238
+ return (drDtau[i + 1] - drDtau[i - 1])
239
+ / (snapshots[i + 1].tau - snapshots[i - 1].tau);
240
+ }
241
+ /**
242
+ * 4-velocity `v^μ = g^{μν}(x_i) p_{i,ν}` at snapshot `i`. Used as the
243
+ * Hermite endpoint slope for the `x^μ` interpolation (since by definition
244
+ * `dx^μ/dτ = g^{μν} p_ν` along a geodesic).
245
+ */
246
+ function velocityAt(snapshots, i, gInverseFn) {
247
+ const x = snapshots[i].x;
248
+ const p = snapshots[i].p;
249
+ const gInv = gInverseFn(x);
250
+ const dim = x.length;
251
+ const v = new Array(dim);
252
+ for (let mu = 0; mu < dim; mu++) {
253
+ let acc = 0;
254
+ for (let nu = 0; nu < dim; nu++) {
255
+ acc += gInv[mu][nu] * p[nu];
256
+ }
257
+ v[mu] = acc;
258
+ }
259
+ return v;
260
+ }
261
+ //# sourceMappingURL=perihelion-finder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perihelion-finder.js","sourceRoot":"","sources":["../../src/numerical/perihelion-finder.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "universal-physics-tensor",
3
- "version": "0.4.6",
3
+ "version": "0.5.0",
4
4
  "description": "Computational framework for exploring unified physics through tensor formalism",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",