feat(physics): Kerr equatorial orbital frequency Ω_φ (Bardeen 1972)
This commit is contained in:
parent
76be513bb5
commit
be4ff2cfcc
@ -79,6 +79,14 @@ pub fn kerr_horizon(chi: f32) -> f32 {
|
||||
m + (m * m - a * a).max(0.0).sqrt()
|
||||
}
|
||||
|
||||
/// Kerr 赤道 prograde 圆轨角速度 (Rs=1, M=0.5). Bardeen 1972 eqn 2.16.
|
||||
/// `Ω_φ = 1 / (r^1.5 + a)`, a = χM = 0.5χ. χ=0 退化为牛顿 1/r^1.5.
|
||||
pub fn kerr_orbital_frequency(r: f32, chi: f32) -> f32 {
|
||||
let m = 0.5;
|
||||
let a = chi * m;
|
||||
1.0 / (r.powf(1.5) + a)
|
||||
}
|
||||
|
||||
/// Kerr bending acceleration (CPU mirror of the shader `deriv` accel).
|
||||
/// `chi = a/M ∈ [0,1]`. At chi=0 this equals `bending_accel`.
|
||||
pub fn kerr_bending_accel(pos: Vec3, dir: Vec3, chi: f32) -> Vec3 {
|
||||
@ -279,4 +287,27 @@ mod tests {
|
||||
assert!(b > BCRIT);
|
||||
assert!(!is_captured(eye, dir, 2000, 0.1), "ray above bcrit should escape");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn orbital_frequency_reduces_to_newton_at_zero_spin() {
|
||||
// χ=0: Ω = 1/r^1.5 (牛顿开普勒, Rs=1)
|
||||
for r in [4.0_f32, 6.0, 10.0, 20.0] {
|
||||
let newton = 1.0 / r.powf(1.5);
|
||||
let kerr = kerr_orbital_frequency(r, 0.0);
|
||||
assert!(
|
||||
(kerr - newton).abs() < 1e-6,
|
||||
"χ=0 at r={}: expected {} (newton), got {}",
|
||||
r, newton, kerr
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn orbital_frequency_decreases_with_spin_at_fixed_r() {
|
||||
// prograde 轨道 (a>0): Ω_φ 随 χ 减小 (分母 r^1.5+a 增大)
|
||||
let r = 8.0;
|
||||
let omega_0 = kerr_orbital_frequency(r, 0.0);
|
||||
let omega_1 = kerr_orbital_frequency(r, 1.0);
|
||||
assert!(omega_1 < omega_0, "prograde Ω should decrease with spin");
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user