Skip to content

Commit 65ea710

Browse files
authored
Update KerrGeoOrbit.jl
1 parent d66f4a6 commit 65ea710

File tree

1 file changed

+37
-9
lines changed

1 file changed

+37
-9
lines changed

src/KerrGeoOrbit.jl

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ function kerr_geo_orbit_generic(a::Real, p::Real, e::Real, x::Real; initPhases =
120120
# Radial and polar Jacobi amplitudes
121121
ψr(qr) = Elliptic.Jacobi.am(Elliptic.K(kr)/π * qr, kr)
122122
ψθ(qθ) = Elliptic.Jacobi.am(Elliptic.K(kθ)*2/π*(qθ+π/2), kθ)
123+
dψr(qr) = Elliptic.Jacobi.dn(Elliptic.K(kr)/π * qr, kr) * Elliptic.K(kr) / π
124+
dψθ(qθ) = 2 * Elliptic.Jacobi.dn(Elliptic.K(kθ)*2/π*(qθ+π/2), kθ) * Elliptic.K(kθ) / π
123125

124126
# t and phi increments due to radial motion
125127

@@ -157,7 +159,7 @@ function kerr_geo_orbit_generic(a::Real, p::Real, e::Real, x::Real; initPhases =
157159
return complete*2*((qθ+π/2)/π) - incomplete
158160
end
159161

160-
function tr(qr)
162+
function Δtr(qr)
161163
prefac = - En / sqrt((1 - En^2) * (r1 - r3) * (r2 - r4))
162164
term1 = 4 * (r2 - r3) * elliptic_pi_r(hr, kr, qr)
163165
term2 = - 4 * (r2 - r3) / (rp - rm) * ((-1 / ((-rm + r2) * (-rm + r3))) * (-2*a^2 + rm*(4 - (a*Lz)/En)) *
@@ -168,16 +170,41 @@ function kerr_geo_orbit_generic(a::Real, p::Real, e::Real, x::Real; initPhases =
168170
return prefac * (term1 + term2 + term3 + term4)
169171
end
170172

171-
function ϕr(qr)
173+
function Δϕr(qr)
172174
prefac = 2 * a * En / ((-rm + rp) * sqrt((1 - En^2) * (r1 - r3) * (r2 - r4)))
173175
term_rm = (-1 / ((-rm + r2) * (-rm + r3))) * (2*rm - (a*Lz)/En) * (r2 - r3) * elliptic_pi_r(hm, kr, qr)
174176
term_rp = (1 / ((-rp + r2) * (-rp + r3))) * (2*rp - (a*Lz)/En) * (r2 - r3) * elliptic_pi_r(hp, kr, qr)
175177
return prefac * (term_rm + term_rp)
176178
end
177179

178180
# t and phi increments due to polar motion
179-
tθ(qθ) = En*zp/(1-En^2) * (Elliptic.E(kθ)*2*((qθ+π/2)/π) - Elliptic.E(ψθ(qθ), kθ))
180-
ϕθ(qθ) = -Lz/zp * elliptic_pi_θ(zm^2, kθ, qθ)
181+
Δtθ(qθ) = En*zp/(1-En^2) * (Elliptic.E(kθ)*2*((qθ+π/2)/π) - Elliptic.E(ψθ(qθ), kθ))
182+
Δϕθ(qθ) = -Lz/zp * elliptic_pi_θ(zm^2, kθ, qθ)
183+
184+
function dtr(qr)
185+
ellip_diff_pi_r(h, k, q) = Elliptic.Pi(h, π/2, k)/π - dψr(q)/((1 - h * sin(ψr(q))^2) * sqrt(1 - k * sin(ψr(q))^2))
186+
return begin
187+
-((En * (4 * (r2 - r3) * ellip_diff_pi_r(hr, kr, qr) + (r2 - r3) * (r1 + r2 + r3 + r4) * ellip_diff_pi_r(hr, kr, qr) +
188+
(r1 - r3) * (r2 - r4) * (Elliptic.E(kr)/π - (hr * kr * cos(ψr(qr))^2 * sin(ψr(qr))^2 * dψr(qr))/((1 - hr * sin(ψr(qr))^2) * sqrt(1 - kr * sin(ψr(qr))^2)) -
189+
sqrt(1 - kr * sin(ψr(qr))^2) * dψr(qr) + (2 * hr^2 * cos(ψr(qr))^2 * sin(ψr(qr))^2 * sqrt(1 - kr * sin(ψr(qr))^2) * dψr(qr))/(1 - hr * sin(ψr(qr))^2)^2 +
190+
(hr * cos(ψr(qr))^2 * sqrt(1 - kr * sin(ψr(qr))^2) * dψr(qr))/(1 - hr * sin(ψr(qr))^2) -
191+
(hr * sin(ψr(qr))^2 * sqrt(1 - kr * sin(ψr(qr))^2) * dψr(qr))/(1 - hr * sin(ψr(qr))^2)) -
192+
(1/(-rm + rp)) * 4 * (r2 - r3) * (-(((-2*a^2 + (4 - (a*Lz)/En) * rm) * ellip_diff_pi_r(hm, kr, qr))/((r2 - rm) * (r3 - rm))) +
193+
((-2 * a^2 + (4 - (a*Lz)/En) * rp) * ellip_diff_pi_r(hp, kr, qr)/((r2 - rp) * (r3 - rp)))))) /
194+
sqrt((1 - En^2) * (r1 - r3) * (r2 - r4)))
195+
end
196+
end
197+
198+
function dϕr(qr)
199+
return begin
200+
(2 * a * En * (r2 - r3) * (- (((-a*Lz/En+2*rm) * (Elliptic.Pi(hm, π/2, kr)/π + dψr(qr)/((-1 + hm*sin(ψr(qr))^2)
201+
* sqrt(1 - kr*sin(ψr(qr))^2)))) / ((r2 - rm) * (r3 - rm))) + ((-a*Lz/En + 2*rp) * (Elliptic.Pi(hp, π/2, kr)/π
202+
+ dψr(qr)/((-1 + hp*sin(ψr(qr))^2) * sqrt(1 - kr*sin(ψr(qr))^2)))) / ((r2 - rp) * (r3 - rp)))) / ( sqrt( -((-1 + En^2) * (r1 - r3) * (r2 - r4)) ) * (-rm + rp))
203+
end
204+
end
205+
206+
dtθ(qθ) = (En * zp * (-2 * Elliptic.E(kθ) + π * sqrt(1 -* sin(ψθ(qθ))^2) * dψθ(qθ))) / ((-1 + En^2) * π)
207+
dϕθ(qθ) = (-(2 * Lz * Elliptic.Pi(zm^2, π/2, kθ) / π) + (Lz * dψθ(qθ)) / (sqrt(1 -* sin(ψθ(qθ))^2) * (1 - zm^2 * sin(ψθ(qθ))^2))) / zp
181208

182209
qt0, qr0, qθ0, qϕ0 = initPhases
183210

@@ -206,7 +233,8 @@ function kerr_geo_orbit_generic(a::Real, p::Real, e::Real, x::Real; initPhases =
206233
"AzimuthalFrequency" => ϒϕ,
207234
"Frequencies" => Dict("ϒt" => ϒt, "ϒr" => ϒr, "ϒθ" => ϒθ, "ϒϕ" => ϒϕ),
208235
"Trajectory" => [t,r,θ,ϕ],
209-
"CrossFunction" => [tr, tθ, ϕr, ϕθ],
236+
"CrossFunction" => [Δtr, Δtθ, Δϕr, Δϕθ],
237+
"DerivativesCrossFunction" => [dtr, dtθ, dϕr, dϕθ],
210238
"FourVelocity" => velocity,
211239
"Type" => type,
212240
"InitialPhases" => initPhases
@@ -298,7 +326,7 @@ function kerr_geo_orbit_scatter(a::Real, p::Real, e::Real, x::Real; initPhases =
298326
return complete*2*((qθ+π/2)/π) - incomplete
299327
end
300328

301-
function tr(qr)
329+
function Δtr(qr)
302330
prefac = - En / sqrt((1 - En^2) * (r1 - r3) * (r2 - r4))
303331
term1 = 4 * (r2 - r3) * elliptic_pi_r(hr, kr, qr)
304332
term2 = - 4 * (r2 - r3) / (rp - rm) * ((-1 / ((-rm + r2) * (-rm + r3))) * (-2*a^2 + rm*(4 - (a*Lz)/En)) *
@@ -309,16 +337,16 @@ function kerr_geo_orbit_scatter(a::Real, p::Real, e::Real, x::Real; initPhases =
309337
return prefac * (term1 + term2 + term3 + term4)
310338
end
311339

312-
function ϕr(qr)
340+
function Δϕr(qr)
313341
prefac = 2 * a * En / ((-rm + rp) * sqrt((1 - En^2) * (r1 - r3) * (r2 - r4)))
314342
term_rm = (-1 / ((-rm + r2) * (-rm + r3))) * (2*rm - (a*Lz)/En) * (r2 - r3) * elliptic_pi_r(hm, kr, qr)
315343
term_rp = (1 / ((-rp + r2) * (-rp + r3))) * (2*rp - (a*Lz)/En) * (r2 - r3) * elliptic_pi_r(hp, kr, qr)
316344
return prefac * (term_rm + term_rp)
317345
end
318346

319347
# t and phi increments due to polar motion
320-
(qθ) = En*zp/(1-En^2) * (Elliptic.E(kθ)*2*((qθ+π/2)/π) - Elliptic.E(ψθ(qθ), kθ))
321-
ϕθ(qθ) = -Lz/zp * elliptic_pi_θ(zm^2, kθ, qθ)
348+
Δtθ(qθ) = En*zp/(1-En^2) * (Elliptic.E(kθ)*2*((qθ+π/2)/π) - Elliptic.E(ψθ(qθ), kθ))
349+
Δϕθ(qθ) = -Lz/zp * elliptic_pi_θ(zm^2, kθ, qθ)
322350

323351
qrS = π * InverseJacobiSN(sqrt((r3 - r1)/(r2 - r1)), kr) / Elliptic.K(kr)
324352
λS = qrS / ϒr

0 commit comments

Comments
 (0)