1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use crate::orbit::F;
#[must_use]
pub fn phi(r: F, z: F, m: F, a: F) -> F {
let dist = (r.powi(2) + z.powi(2)).sqrt();
-m / dist * F::ln(1.0 + dist / a)
}
#[must_use]
pub fn phi_dr(r: F, z: F, m: F, a: F) -> F {
let sq_sum = r.powi(2) + z.powi(2);
let k_1 = sq_sum.sqrt() / a + 1.0;
m * r * F::ln(k_1) / sq_sum.powf(1.5) - m * r / a / sq_sum / k_1
}
#[must_use]
pub fn phi_dz(r: F, z: F, m: F, a: F) -> F {
let sq_sum = r.powi(2) + z.powi(2);
let k_1 = sq_sum.sqrt() / a + 1.0;
m * z * F::ln(k_1) / sq_sum.powf(1.5) - m * z / a / sq_sum / k_1
}