Feat: Add analytic moving Alcubierre spacetime backend
Add a third analytic spacetime provider for the moving Alcubierre warp bubble, x_s(t) = v_s*t with x_s(0) = 0. The lab slices stay flat, so alpha = 1, gamma_ij = delta_ij, beta^x = -v_s f(r_s), and K_ij follows from the flat spatial metric; the time dependence enters through the moving shape argument. The exotic matter is treated as transparent, so there is no capture: rays are only ACTIVE or ESCAPED, with a bubble- centered escape radius R + 20/sigma. Expose --alcubierre-vs, --alcubierre-radius, and --alcubierre-sigma (|v_s| < 1). Scale the per-ray step budget with the escape radius and 1/(1-|v_s|) so near-luminal grazing rays still escape, and reject parameter combinations whose worst-case budget exceeds the cap. Use a cancellation-free shape formula for small sigma*R and reject derived escape radii that overflow. The regression test covers metric reconstruction, d_beta/K finite differences, the translation isometry, small-sigma stability, the flat limit, reflection symmetry, step convergence, and a near-luminal slow ray. build.md, usage.md, and README.md document the backend.
This commit is contained in:
1 parent
4e34780fa9
commit
3cbf5ba386
8 files changed
+688
-16
No files matched your search
@@ -92,6 +92,59 @@ The last example points outward from a camera moving inward inside the horizon.
|
||||
It needs no CSV trajectory or movie wrapper. These small images are camera
|
||||
checks; increase resolution and refinement for production renders.
|
||||
|
||||
## Alcubierre warp-bubble spacetime
|
||||
|
||||
`alcubierre_sky` renders the moving Alcubierre line element
|
||||
|
||||
$$ds^2 = -dt^2 + \left[dx - v_s f(r_s)\,dt\right]^2 + dy^2 + dz^2,$$
|
||||
|
||||
with the bubble center following the constant-velocity worldline
|
||||
`x_s(t) = v_s t` (a lab/non-comoving slicing fixed by `x_s(0) = 0`) and
|
||||
|
||||
$$f(r) = \frac{\tanh(\sigma(r+R)) - \tanh(\sigma(r-R))}{2\tanh(\sigma R)},\qquad
|
||||
r_s = \sqrt{(x-x_s)^2 + y^2 + z^2}.$$
|
||||
|
||||
The bubble therefore propagates through the coordinates, and the metric is
|
||||
time-dependent: the renderer evaluates `f(r_s)` and its spatial derivatives at
|
||||
each coordinate time, while the extrinsic curvature supplies the required
|
||||
`d_t gamma` information to the 3+1 null-ray equations. The exotic matter that
|
||||
would source the bubble is treated as optically transparent, so there is
|
||||
**no capture**: rays are only active or escaped. This is why the backend
|
||||
requires a sub-luminal `|v_s| < 1`; at or above `1` the metric develops an
|
||||
ergoregion/event horizon and static observers cease to exist, which is outside
|
||||
the current no-capture scope.
|
||||
|
||||
| Option | Meaning / default |
|
||||
| --- | --- |
|
||||
| `--alcubierre-vs V` | Constant shift parameter, `|V| < 1` (default 0.5) |
|
||||
| `--alcubierre-radius R` | Bubble radius `R > 0` (default 5) |
|
||||
| `--alcubierre-sigma S` | Wall sharpness `S > 0` (default 1) |
|
||||
|
||||
`f` decays to zero past `r_s = R` over a transition width `~1/sigma`, so the
|
||||
finite escape sphere is bubble-centered with radius `R + 20/sigma` and needs no
|
||||
CLI option; it follows the moving bubble, so rays terminate only once the local
|
||||
metric is flat to below double precision. The single-frame camera default is
|
||||
`(0,0,15)` at `t = 0`, when the bubble is still at the origin; it must lie
|
||||
inside the escape sphere, or the observer build fails with an explicit error.
|
||||
The per-ray step budget scales with the escape radius and `1/(1-|v_s|)`, so
|
||||
near-luminal `v_s` still lets grazing rays escape; combinations whose
|
||||
worst-case budget would exceed the internal cap are rejected at startup.
|
||||
|
||||
Lensing and frequency shifts come from the bubble wall. The configuration is
|
||||
invariant under the isometry `(t, x) -> (t + T, x + v_s T)`, so observers
|
||||
related by it see identical escaping directions and frequency ratios. For
|
||||
example:
|
||||
|
||||
```sh
|
||||
make -j PSF_BACKEND=cpu SPACETIME=alcubierre backend
|
||||
./build/Release/alcubierre_sky --catalog assets/sky_grid_5deg.csv \
|
||||
--observer-radius 15 --look-ra-deg 90 --look-dec-deg -90 \
|
||||
--alcubierre-vs 0.5 --alcubierre-radius 5 --alcubierre-sigma 1 \
|
||||
--width 640 --height 360 --fov-deg 60 --exposure 1 \
|
||||
--coarse-cell-pixels 16 --refine-max-level 2 --psf-direct \
|
||||
--output output/imgs/alcubierre_wall.png
|
||||
```
|
||||
|
||||
## Movie image sequences
|
||||
|
||||
Movie mode reads an observer-track CSV containing coordinate time, proper
|
||||
|
||||
Reference in new issue
Block a user