Notebook Status: Validated
Validation Notes: This module has been validated against the LALSuite SEOBNRv4P code that was reviewed and approved for LIGO parameter estimation by the LIGO Scientific Collaboration. That is, the value Hreal output from this notebook agrees to roundoff error with the value of Hreal computed by the LALSuite function XLALSimIMRSpinPrecEOBHamiltonian().
Consider two black holes with masses m1, m2 and spins S1, S2 in a binary system. The spinning effective one-body ("SEOB") Hamiltonian Hreal (defined in this cell) describes the dynamics of this system; we will define Hreal as in Barausse and Buonanno (2010) Section VE. There, Hreal is canonically transformed and mapped to an effective Hamiltonian Heff (defined in this cell) describing the motion of a test particle of mass μ (defined in this cell) and spin S∗ (defined in this cell) moving in a defomred Kerr background. Here we seek to break up Hreal and document the terms in such a way that the resulting Python code can be used to numerically evaluate Hreal.
We write Hreal in terms of Cartesian quasi-isotropic coordinates x, y, and z (see Barausse and Buonanno (2010) Section III). The spatial coordinates r, θ, and ϕ referenced throughout are Boyer-Lindquist coordinates (see Barausse and Buonanno (2010) Section IV).
Please note that throughout this notebook we adpot the following conventions:
Running this notebook to completion will generate a file called v4P_Hreal_on_bottom.py. This file contains the Python function v4P_compute_Hreal(), which takes as input m1, m2 (each in solar masses), the value of the Euler-Mascheroni constant, a tortoise coordinate, and values for all twelve dynamic variables (3 components of the separation vector, three components of the momentum vector, and three spin components of each compact object). Note that the spin components should be dimensionless.
Throughout this module, we will refer to
This notebook is organized as follows:
import cmdline_helper as cmd # NRPy+: Multi-platform Python command-line interface
# Create C code output directory:
Ccodesdir = "SEOBNR"
# Then create an output directory in case it does not exist
cmd.mkdir(Ccodesdir)
The SEOB Hamiltonian Hreal is given by BB2010 Equation (5.69):
Hreal=M√1+2η(Heffμ−1).Here Heff (defined in this cell) is an effective Hamiltonian (see this cell) and M (defined in this cell), μ (defined in this cell), and η (defined in this cell) are constants determined by m1 and m2.
%%writefile $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Hreal = sp.sqrt(1 + 2*eta*(Heff - 1))
Overwriting SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
The effective Hamiltonian Heff is given by BB2010 Equation (5.70):
Heff=HS+βipi+α√μ2+γijpipj+Q4⏟HNS−μ2Mr3(δij−3ninj)S∗iS∗j⏟HD.Here HS (considered further in this cell) denotes leading order effects of spin-spin and spin-orbit coupling, HNS (considered further in this cell) is the Hamiltonian for a nonspinning test particle, and HD (considered further in this cell) describes quadrupole deformation of the coupling of the particle's spin with itself to leading order. T2014 adds to Heff a 3PN spin-spin term given by
dSSηr4(S21+S22)where dSS is an adjustable parameter determined by fitting to numerical relativity results. Equation (4.13) of BL2017 gives
dSS=528.511252χ3η2−41.000256χ3η+1161.780126χ2η3−326.324859χ2η2+37.196389χη+706.958312η3−36.027203η+6.068071.We take u≡1r (as described in this cell), and define η in this cell χ in this cell. Note that the coefficients for dSS have been rounded to coincide with the LALSuite implementation (see the file LALSimIMRSpinEOBHamiltonian.h).
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Heff = Hs + Hns - Hd + dSS*eta*u*u*u*u*(S1x*S1x + S1y*S1y + S1z*S1z + S2x*S2x + S2y*S2y + S2z*S2z)
dSS = 528.511*chi*chi*chi*eta*eta - 41.0003*chi*chi*chi*eta + 1161.78*chi*chi*eta*eta*eta - 326.325*chi*chi*eta*eta
+ 37.1964*chi*eta + 706.958*eta*eta*eta - 36.0272*eta + 6.06807
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Hs = Hso + Hss
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Hns = betapsum + alpha*sp.sqrt(Hnsradicand)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Hd = Hdcoeff*Hdsum
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Hso = HsoTerm1 + HsoTerm2coeff*HsoTerm2
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
Combining our notation HSO (defined in this cell) with BB2010 Equation (4.18), we have
HSO Term 1=e2ν−˜μ(e˜μ+ν−˜B)(ˆp⋅ξr)(S⋅ˆSKerr)˜B2√Qξ2.We will write
HSO Term 1=e2ν(e˜μeν−˜B)(ˆp⋅ξr)(S⋅ˆSKerr)e˜μ˜B2√Qξ2.We define e˜μ in this cell, eν in this cell, ˜B in this cell, ˆp⋅ξr in this cell, S⋅ˆSKerr in this cell, Q in this cell, and ξ2 in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
HsoTerm1 = exp2nu*(expmu*expnu - Btilde)*pdotxir*SdotSkerrhat/(expmu*Btilde*Btilde*sp.sqrt(Q)*xisq)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
Combining our notation HSO (defined in this cell) with BB2010 Equation (4.18), we have
HSO Term 2 coefficient=eν−2˜μ˜B2(√Q+1)√Qξ2which we write in the form
HSO Term 2 coefficient=eνe2˜μ˜B2(Q+√Q)ξ2.We define and consider eν in this cell, e˜μ in this cell, ˜B in this cell, Q in this cell, and ξ2 in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
HsoTerm2coeff = expnu/(exp2mu*Btilde*Btilde*(Q + sp.sqrt(Q))*xisq)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
Combining our notation HSO (defined in this cell) with BB2010 Equation (4.18), we have
HSO Term 2=(S⋅ξ)˜J[μr(ˆp⋅vr)(√Q+1)−μcosθ(ˆp⋅n)ξ2−√Q(νr(ˆp⋅vr)+(μcosθ−νcosθ)(ˆp⋅n)ξ2)]˜B2⏟HSO Term 2a +e˜μ+ν(ˆp⋅ξr)(2√Q+1)[˜Jνr(S⋅v)−νcosθ(S⋅n)ξ2]˜B⏟HSO Term 2b−˜J˜Bre˜μ+ν(ˆp⋅ξr)(√Q+1)(S⋅v)⏟HSO Term 2cWe compute HSO Term 2a in this cell, HSO Term 2b in this cell, and HSO Term 2c in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
HsoTerm2 = HsoTerm2a + HsoTerm2b - HsoTerm2c
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
We defined HS0 Term 2a in this cell as
HSO Term 2a=(S⋅ξ)˜J[μr(ˆp⋅vr)(√Q+1)−μcosθ(ˆp⋅n)ξ2−√Q(νr(ˆp⋅vr)+(μcosθ−νcosθ)(ˆp⋅n)ξ2)]˜B2.We define S⋅ξ in this cell, ˜J in this cell, μr in this cell, ˆp⋅vr in this cell, Q in this cell, μcosθ in this cell, ˆp⋅n in this cell, ξ2 in this cell, νr in this cell, νcosθ in this cell, and ˜B in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
HsoTerm2a = Sdotxi*Jtilde*(mur*pdotvr*(sp.sqrt(Q) + 1) - mucostheta*pdotn*xisq
- sp.sqrt(Q)*(nur*pdotvr + (mucostheta - nucostheta)*pdotn*xisq))*Btilde*Btilde
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
We defined HS0 Term 2b in this cell as
HSO Term 2b=e˜μ+ν(ˆp⋅ξr)(2√Q+1)[˜Jνr(S⋅v)−νcosθ(S⋅n)ξ2]˜B.We define e˜μ in this cell, eν in this cell, ˆp⋅ξr in this cell, Q in this cell, ˜J in this cell, νr in this cell, S⋅v in this cell, νcosθ in this cell, S⋅n in this cell, ξ2 in this cell, and ˜B in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
HsoTerm2b = expmu*expnu*pdotxir*(2*sp.sqrt(Q) + 1)*(Jtilde*nur*Sdotv - nucostheta*Sdotn*xisq)*Btilde
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
HsoTerm2c = Jtilde*Brtilde*expmu*expnu*pdotxir*(sp.sqrt(Q) + 1)*Sdotv
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
We will write BB2010 Equation (4.19) as
HSS=HSS Term 1+HSS Term 2 coefficient∗HSS Term 2+HSS Term 3 coefficient∗HSS Term 3.We define HSS Term 1 in this cell, HSS Term 2 coefficient in this cell, HSS Term 2 in this cell, HSS Term 3 coefficient in this cell, and HSS Term 3 in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Hss = HssTerm1 + HssTerm2coeff*HssTerm2 + HssTerm3coeff*HssTerm3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
HssTerm1 = omega*SdotSkerrhat
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
Combining BB2010 Equation (4.19) with ore definition of HSS Term 2 coefficient in this cell, we have
HSS Term 2 coefficient=e−3˜μ−ν˜Jωr2˜B(√Q+1)√Qξ2which we write as
HSS Term 2 coefficient=˜Jωr2e2˜μe˜μeν˜B(Q+√Q)ξ2.We define ˜J in this cell, ωr in this cell, e˜μ in this cell, eν in this cell, ˜B in this cell, Q in this cell, and ξ2 in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
HssTerm2coeff = Jtilde*omegar/(2*exp2mu*expmu*expnu*Btilde*(Q + sp.sqrt(Q))*xisq)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
Combining BB2010 Equation (4.19) with our definition of HSS Term 2 in this cell, we have
HSS Term 2=−e˜μ+ν(ˆp⋅vr)(ˆp⋅ξr)(S⋅ξ)˜B+e2(˜μ+ν)(ˆp⋅ξr)2(S⋅v)+e2˜μ(1+√Q)√Q(S⋅v)ξ2˜B2+˜J(ˆp⋅n)[(ˆp⋅vr)(S⋅n)−˜J(ˆp⋅n)(S⋅v)]ξ2˜B2which we write as
HSS Term 2=e˜μ(ˆp⋅ξr)[e˜μe2ν(ˆp⋅ξr)(S⋅v)−eν(ˆp⋅vr)(S⋅ξ)˜B] +ξ2˜B2{e2˜μ(√Q+Q)(S⋅v)+˜J(ˆp⋅n)[(ˆp⋅vr)(S⋅n)−˜J(ˆp⋅n)(S⋅v)]}We define e˜μ in this cell, ˆp⋅ξr in this cell, eν in this cell, S⋅v in this cell, ˆp⋅vr in this cell, S⋅ξ in this cell, ˜B in this cell, Q in this cell, ˜J in this cell, ˆp⋅n in this cell, S⋅n in this cell, and ξ2 in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
HssTerm2 = expmu*pdotxir*(expmu*exp2nu*pdotxir*Sdotv - expnu*pdotvr*Sdotxi*Btilde)
+ xisq*Btilde*Btilde*(exp2mu*(sp.sqrt(Q) + Q)*Sdotv
+ Jtilde*pdotn*(pdotvr*Sdotn - Jtilde*pdotn*Sdotv))
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
Combining BB2010 Equation (4.19) with our definition of HSS Term 3 coefficient in this cell, we have
HSS Term 3 coefficient=e−3˜μ−νωcosθ2˜B(√Q+1)√Qwhich we write as
HSS Term 3 coefficient=ωcosθ2e2˜μe˜μeν˜B(Q+√Q).We define ωcosθ in this cell, e˜μ in this cell, eν in this cell, and ˜B in this cell, Q in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
HssTerm3coeff = omegacostheta/(2*exp2mu*expmu*expnu*Btilde*(Q + sp.sqrt(Q)))
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
Combining BB2010 Equation (4.19) with our definition of HSS Term 3 in this cell, we have
HSS Term 3=−e2(˜μ+ν)(ˆp⋅ξr)2(S⋅n)+e˜μ+ν˜J(ˆp⋅n)(ˆp⋅ξr)(S⋅ξ)˜B +[(S⋅n)(ˆp⋅vr)2−˜J(ˆp⋅n)(S⋅v)(ˆp⋅vr)−e2˜μ(1+√Q)√Q(S⋅n)ξ2]˜B2which we write as
HSS Term 3=e˜μeν(ˆp⋅ξr)[˜J(ˆp⋅n)(S⋅ξ)˜B−e˜μeν(ˆp⋅ξr)(S⋅n)] +{(ˆp⋅vr)[(S⋅n)(ˆp⋅vr)−˜J(ˆp⋅n)(S⋅v)]−e2˜μ(√Q+Q)(S⋅n)ξ2}˜B2We define e˜μ in this cell, eν in this cell, ˆp⋅ξr in this cell, ˜J in this cell, ˆp⋅n in this cell, S⋅ξ in this cell, ˜B in this cell, S⋅n in this cell, ˆp⋅vr in this cell, S⋅v in this cell, Q in this cell, and ξ2 in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
HssTerm3 = expmu*expnu*pdotxir*(Jtilde*pdotn*Sdotxi*Btilde - expmu*expnu*pdotxir*Sdotn)
+ (pdotvr*(Sdotn*pdotvr - Jtilde*pdotn*Sdotv) - exp2mu*(sp.sqrt(Q) + Q)*Sdotn*xisq)*Btilde*Btilde
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
We defined the term βp sum in this cell as
βp sum=βipi.From BB2010 Equation (5.45), we have
βi=gtigtt,but from BB2010 Equations (5.36) we see that gtr=gtθ=0. Thus only βϕ is nonzero. Combining BB2010 Equations (5.45), (5.36e), and (5.36a), we find
βϕ=−˜ωfdΔtΣ−ΛtΔtΣ=˜ωfdΛtTherefore
βipi=˜ωfdΛtpϕ.We define ˜ωfd in this cell, Λt in this cell, and pϕ in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
betapsum = omegatilde*pphi/Lambdat
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
alpha = sp.sqrt(Deltat*Sigma/Lambdat)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Hnsradicand = 1 + gammappsum + Q4
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
From BB2010 Equation (5.46), we have
γij=gij−gtigtjgtt.Combining this result with BB2010 Equations 5.36, we have
γrθ=γrϕ=γθr=γθϕ=γϕr=γϕθ=0and
γrr=grr=ΔrΣγθθ=gθθ=1Σγϕϕ=ΣΛtsin2θ.Therefore
γijpipj=γrrprpr+γθθpθpθ+γϕϕpϕpϕ=ΔrΣp2r+1Σp2θ+ΣΛtsin2θp2ϕ.Converting Boyer-Lindquist coordinates to tortoise coordinates (the transformation for which is found in the Appendix of P2010), we have
pr=ˆp⋅npθ=ˆp⋅vrsinθpϕ=ˆp⋅ξr.Therefore
γijpipj=ΔrΣ(ˆp⋅n)2+Σ−1(ˆp⋅vrsinθ)2+ΣΛtsin2θ(ˆp⋅ξr)2.We define Δr in this cell, Σ in this cell, ˆp⋅n in this cell, ˆp⋅vr in this cell, sin2θ in this cell, Λt in this cell, and ˆp⋅ξr in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
gammappsum = Deltar/Sigma*pdotn*pdotn + 1/Sigma*pdotvr*pdotvr/sin2theta + Sigma/Lambdat/sin2theta*pdotxir*pdotxir
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
From T2012 Equation (15),
Q4∝p4r∗r2(r2+χ2Kerr)4.We denote pr∗ by prT. Converting from tortoise coordinates to physical coordinates(the transformation for which is found in the Appendix of P2010), we find
Q4=prT4r2z3where z3 is found in D2000 Equation (4.34):
z3=2(4−3ν)ν.In the notation of BB2010, ν=η (see discussion after T2012 Equation (2)). Thus
Q4=2prT4u2(4−3η)η.We define prT in this cell, u in this cell, and η in this cell below.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Q4 = 2*prT*prT*prT*prT*u*u*(4 - 3*eta)*eta
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Hdcoeff = sp.Rational(1,2)/(r*r*r)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Hdsum = HdsumTerm1 - HdsumTerm2
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
HdsumTerm1 = Sstar1*Sstar1 + Sstar2*Sstar2 + Sstar3*Sstar3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
HdsumTerm2 = 3*Sstardotn*Sstardotn
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Sdotxi = S1*xi1 + S2*xi2 + S3*xi3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Sdotv = S1*v1 + S2*v2 + S3*v3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Sdotn = S1*n1 + S2*n2 + S3*n3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
SdotSkerrhat = S1*Skerrhat1 + S2*Skerrhat2 + S3*Skerrhat3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Sstardotn = Sstar1*n1 + Sstar2*n2 + Sstar3*n3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
S1 = Sstar1
S2 = Sstar2
S3 = Sstar3
Sstar1 = sigmastar1 + Deltasigmastar1
Sstar2 = sigmastar2 + Deltasigmastar2
Sstar3 = sigmastar3 + Deltasigmastar3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Deltasigmastar1 = sigmastar1*sigmastarcoeff + sigma1*sigmacoeff
Deltasigmastar2 = sigmastar2*sigmastarcoeff + sigma2*sigmacoeff
Deltasigmastar3 = sigmastar3*sigmastarcoeff + sigma3*sigmacoeff
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
sigmastarcoeff = sigmastarcoeffTerm1 + sigmastarcoeffTerm2
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
We build this term from BB2011 Equation (51) with b0=0 (see discussion preceeding T2012 Equation (4)), where what is listed below is the coefficient on σ∗:
σ∗ coefficient Term 1=76ηMr+13η(Q−1)−52ηΔrΣ(n⋅ˆp)2=η12(14Mr+4(Q−1)−30ΔrΣ(n⋅ˆp)2)We group together and compute Q−1 in this cell and ΔrΣ(n⋅ˆp)2 in this cell; we define r in this cell, η in this cell, and M in this cell below.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
sigmastarcoeffTerm1 = eta/12*(14/r + 4*Qminus1 - 30*DrSipn2)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
We build this term from BB2011 Equation (52) with all bi=0, i∈{0,1,2,3} (see discussion preceeding T2012 Equation (4)), and just the coefficient on σ∗. In the LALSuite code this is the variable 'sMultiplier1':
σ∗ coefficient Term 2=136(353η−27η2)(Mr)2+53(3η2)Δ2rΣ2(n⋅ˆp)4 +172(−23η−3η2)(Q−1)2+136(−103η+60η2)Mr(Q−1) +112(16η−21η2)ΔrΣ(n⋅ˆp)2(Q−1)+112(47η−54η2)MrΔrΣ(n⋅ˆp)2=η72r2[(706−54η)M2+360ηr2Δ2rΣ2(n⋅ˆp)4+r2(−23−3η)(Q−1)2+(−206+120η)Mr(Q−1) +(96−126η)r2ΔrΣ(n⋅ˆp)2(Q−1)+(282−324η)MrΔrΣ(n⋅ˆp)2]=η72r2[706+r(−206M(Q−1)+282MΔrΣ(n⋅ˆp)2+r(Q−1)(96ΔrΣ(n⋅ˆp)2−23(Q−1))) +η(−54M2+r(120M(Q−1)−324MΔrΣ(n⋅ˆp)2 +r(360Δ2rΣ2(n⋅ˆp)4+(Q−1)(−126ΔrΣ(n⋅ˆp)2−3(Q−1)))))]We define r in this cell, η in this cell, and M in this cell; we group together and define Q−1 in this cell, and ΔrΣ(n⋅ˆp)2 in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
sigmastarcoeffTerm2 = eta/(72*r*r)*(706 + r*(-206*Qminus1 + 282*DrSipn2 + r*Qminus1*(96*DrSipn2 - 23*Qminus1))
+ eta*(-54 + r*(120*Qminus1 - 324*DrSipn2
+ r*(360*DrSipn2*DrSipn2 + Qminus1*(-126*DrSipn2 - 3*Qminus1)))))
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
sigmacoeff = sigmacoeffTerm1 + sigmacoeffTerm2 + sigmacoeffTerm3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
We build this term from BB2011 Equation (51) with a0=0 (see discussion preceeding T2012 Equation (4)), where what is listed below is the coefficient on σ:
σ coefficient Term 1=−23ηMr+14η(Q−1)−3ηΔrΣ(n⋅ˆp)2=η12(−8Mr+3(Q−1)−36ΔrΣ(n⋅ˆp)2⏟DrSipn2a⏟b)We define η in this cell, M in this cell, Q−1 in this cell, and ΔrΣ(n⋅ˆp)2 in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
sigmacoeffTerm1 = eta/12*(-8/r + 3*Qminus1 - 36*DrSipn2)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
We build this term from BB2011 Equation (52) with all ai=0, i∈{0,1,2,3} (see discussion preceeding T2012 Equation (4)), and just the coefficient on σ:
σ coefficient Term 2=19(−56η−21η2)(Mr)2+524(27η2)Δ2rΣ2(n⋅ˆp)4 +1144(−45η)(Q−1)2+136(−109η+51η2)Mr(Q−1) +124(6η−39η2)ΔrΣ(n⋅ˆp)2(Q−1)+124(−16η−147η2)MrΔrΣ(n⋅ˆp)2=η144r2[−896M2+r(−436M(Q−1)−96MΔrΣ(n⋅ˆp)2 +r(−45(Q−1)2+36(Q−1)ΔrΣ(n⋅ˆp)2))+η(−336M2+r(204M(Q−1)−882MΔrΣ(n⋅ˆp)2 +r(810Δ2rΣ2(n⋅ˆp)4−234(Q−1)ΔrΣ(n⋅ˆp)2)))]We define η in this cell, M in this cell, Q−1 in this cell, and ΔrΣ(n⋅ˆp)2 in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
sigmacoeffTerm2 = eta/(144*r*r)*(-896 + r*(-436*Qminus1 - 96*DrSipn2 + r*(-45*Qminus1*Qminus1
+ 36*Qminus1*DrSipn2)) + eta*(-336 + r*(204*Qminus1 - 882*DrSipn2
+ r*(810*DrSipn2*DrSipn2 - 234*Qminus1*DrSipn2))))
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
From Section II of T2014),
σ coefficient Term 3=ηdSOu3.where dSO is a fitting parameter. Equation (4.13) of BL2017 gives
dSO=147.481449χ3η2−568.651115χ3η+66.198703χ3−343.313058χ2η+2495.293427χη2−44.532373We define η in this cell, u in this cell, and χ in this cell. Note that the values have been rounded to agree with those in the LALSuite implementation (see the file LALSimIMRSpinEOBHamiltonian.h).
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
sigmacoeffTerm3 = eta*dSO*u*u*u
dSO = 147.481*chi*chi*chi*eta*eta - 568.651*chi*chi*chi*eta + 66.1987*chi*chi*chi - 343.313*chi*chi*eta
+ 2495.29*chi*eta*eta - 44.5324
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
omegar = (Lambdat*omegatildeprm - Lambdatprm*omegatilde)/(Lambdat*Lambdat)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
nur = r/Sigma + w2*(w2*Deltatprm - 4*r*Deltat)/(2*Lambdat*Deltat)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
mur = r/Sigma - 1/sp.sqrt(Deltar)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
omegacostheta = -2*a*a*costheta*Deltat*omegatilde/(Lambdat*Lambdat)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
nucostheta = a*a*w2*costheta*(w2 - Deltat)/(Lambdat*Sigma)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
mucostheta = a*a*costheta/Sigma
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
From the discussion after BB2010 Equations (5.47), we know that the prime notation indicates a derivative with respect to r. Using the definiton of Λt in this cell, we have
Λ′t=4(a2+r2)r−a2Δ′tsin2θ.We define a in this cell, r in this cell, Δu in this cell, and sin2θ in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Lambdatprm = 4*(a*a + r*r)*r - 2*a*a*Deltatprm*sin2theta
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
omegatildeprm = 2*a
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
omega = omegatilde/Lambdat
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
expnu = sp.sqrt(exp2nu)
exp2nu = Deltat*Sigma/Lambdat
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Btilde = sp.sqrt(Deltat)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Brtilde = (sp.sqrt(Deltar)*Deltatprm - 2*Deltat)/(2*sp.sqrt(Deltar*Deltat))
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
expmu = sp.sqrt(exp2mu)
exp2mu = Sigma
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Jtilde = sp.sqrt(Deltar)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
From BB2010 Equation (5.52),
Q=1+ΔrΣ(ˆp⋅n)2⏟DrSipn2+ΣΛtsin2θ⏟Q coefficient 1(ˆp⋅ξr⏟pdotxir)2+1Σsin2θ⏟Q coefficient 2(ˆp⋅vr⏟pdotvr)2;We group togther and compute ΔrΣ(ˆp⋅n)2 in this cell, ΣΛtsin2θ in this cell, ˆp⋅ξr in this cell, 1Σsin2θ in this cell, and ˆp⋅vr in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Qminus1 = Q - 1
Q = 1 + DrSipn2 + Qcoeff1*pdotxir*pdotxir + Qcoeff2*pdotvr*pdotvr
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
DrSipn2 = Deltar*pdotn*pdotn/Sigma
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Qcoeff1 = Sigma/(Lambdat*sin2theta)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Qcoeff2 = 1/(Sigma*sin2theta)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
pphi = pdotxir
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
pdotvr = (phat1*v1 + phat2*v2 + phat3*v3)*r
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
pdotn = phat1*n1 + phat2*n2 + phat3*n3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
pdotxir = (phat1*xi1 + phat2*xi2 + phat3*xi3)*r
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
From the discussion after BB2010 Equation (3.41), we have ˆp=p/m where m is the mass of a nonspinning test particle and p is conjugate momentum. Following Lines 319--321 of LALSimIMRSpinEOBHamiltonianPrec.c, we convert the Boyer-Lindquist momentum p to the tortoise momentum (see the appendix of P2010) via
ˆp=p+prT(1−1csi1)nWe define prT in this cell, csi1 in this cell, and n in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
phat1 = p1 + prT*(1 - 1/csi1)*n1
phat2 = p2 + prT*(1 - 1/csi1)*n2
phat3 = p3 + prT*(1 - 1/csi1)*n3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
prT = csi2*(p1*n1 + p2*n2 + p3*n3)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
csi2 = 1 + (sp.Rational(1,2) - sp.Rational(1,2)*sp.sign(sp.Rational(3,2) - tortoise))*(csi - 1)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
csi1 = 1 + (1 - sp.abs(1-tortoise))*(csi - 1)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
csi = sp.sqrt(Deltar*Deltat)/w2
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Lambdat = w2*w2 - a*a*Deltat*sin2theta
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Deltar = Deltat*Dinv
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Deltat = r*r*Deltau
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Deltatprm = 2*r*Deltau + r*r*Deltauprm
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
From BB2010 Equation (5.73), we have
Δu=ˉΔu[1+ηΔ0+ηlog(1+logarg)⏟Δu calibration term1⏟n]We compute ˉΔu in this cell and Δu calibration term and logarg in this cell. From the discussion after BB2010 Equation (5.47), we know that primes denote derivatives with respect to r. We have
Δu=ˉΔ′u(Δu calibration term)+ˉΔu(Δu calibration term)′%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Deltauprm = Deltaubarprm*Deltaucalib + Deltaubar*Deltaucalibprm
Deltau = Deltaubar*Deltaucalib
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
From BB2010 Equation (5.75), we have
ˉΔu=a2u2M2+1ηK−1(2u+1ηK−1).We define a in this cell, u in this cell, M in this cell, η in this cell, and K in this cell. From the discussion after BB2010 Equation (5.47), we know that primes denote derivatives with respect to r. We have
ˉΔ′u=−2a2u3M2−2u2ηK−1.%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Deltaubarprm = -2*a*a*u*u*u - 2*u*u/(etaKminus1)
Deltaubar = a*a*u*u + (2*u + 1/etaKminus1)/etaKminus1
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
From BB2010 Equation (5.73), we have
Δu calibration term=1+ηΔ0+ηlog(1+Δ1u+Δ2u2+Δ3u3+Δ4u4)=1+η[Δ0+log(1+Δ1u+Δ2u2+Δ3u3+Δ4u4)].In T2014 Equation (2) an additional term is and is defined in Equation (A2) of this paper. We then have
Δu calibration term=1+η[Δ0+log(1+Δ1u+Δ2u2+Δ3u3+Δ4u4+Δ5u5)].In the LALSuite code itself (see LALSimIMRSpinEOBHamiltonianPrec.c line 274 on Git commit a70b43d), there's one more term (Δ5ℓ), for which documentation is elusive. That bring us to
Δu calibration term=1+η[Δ0+log(1+Δ1u+Δ2u2+Δ3u3+Δ4u4+Δ5u5+Δ5ℓu5ln(u)⏟logarg)].Note our notation for logarg. We define u in this cell, η in this cell, and the calibration coefficients Δi, i∈{0,1,2,3,4}, in this cell.
From the discussion after BB2010 Equation (5.47), we know that primes denote derivatives with respect to r. We have (Δu calibration term)′=−ηu2(Δ1+2Δ2u+3Δ3u2+4Δ4u3+5Δ5u4+5Δ5ℓu4ln(u)+Δ5ℓu5u−1)1+logarg.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Deltaucalibprm = -eta*u*u*(Delta1 + u*(2*Delta2 + u*(3*Delta3
+ u*(4*Delta4 + u*(5*(Delta5 + Delta5l*sp.log(u)))))))/(1 + logarg)
Deltaucalib = 1 + eta*(Delta0 + sp.log(1 + logarg))
logarg = u*(Delta1 + u*(Delta2 + u*(Delta3 + u*(Delta4 + u*(Delta5 + Delta5l*sp.log(u))))))
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Delta5l = etaKminus1*etaKminus1*sp.Rational(64,5)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
We combine SH2016 Equation (A2c) with BL2017 Equation (2.3) (the last term in our expression) to find
Δ5=(ηK−1)2(−423760+1285γ+2275512π2−13a2{Δ31−3Δ1Δ2+3Δ3} −Δ51−5Δ31Δ2+5Δ1Δ22+5Δ21Δ3−5Δ2Δ3−5Δ1Δ45(ηK−1)2 +Δ41−4Δ21Δ2+2Δ22+4Δ1Δ3−4Δ42(ηK−1)+2565log(2)+{41π232−2216}η)Note that we have exlcuded the first term in the brackets in (A2c); this is the term Δ5ℓ which we defined in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Delta5 = etaKminus1*etaKminus1*(sp.Rational(-4237,60) + sp.Rational(128,5)*EMgamma
+ sp.Rational(2275,512)*sp.pi*sp.pi - sp.Rational(1,3)*a*a*(Delta1*Delta1*Delta1
- 3*Delta1*Delta2 + 3*Delta3) - (Delta1*Delta1*Delta1*Delta1*Delta1
- 5*Delta1*Delta1*Delta1*Delta2 + 5*Delta1*Delta2*Delta2 + 5*Delta1*Delta1*Delta3
- 5*Delta2*Delta3 - 5*Delta1*Delta4)/(5*etaKminus1*etaKminus1)
+ (Delta1*Delta1*Delta1*Delta1 - 4*Delta1*Delta1*Delta2 + 2*Delta2*Delta2
+ 4*Delta1*Delta3 - 4*Delta4)/(2*etaKminus1) + sp.Rational(256,5)*sp.log(2)
+ (sp.Rational(41,32)*sp.pi*sp.pi - sp.Rational(221,6))*eta)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
From BB2010 Equations (5.81), we have
Δ4=112{6a2M2(Δ21−2Δ2)(ηK−1)2+3Δ41−8(ηK−1)Δ31−12Δ2Δ21+12[2(ηK−1)Δ2+Δ3]Δ1 +12(943−4132π2)(ηK−1)2+6[Δ22−4Δ3(ηK−1)]}%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Delta4 = sp.Rational(1,12)*(6*a*a*(Delta1*Delta1 - 2*Delta2)*etaKminus1*etaKminus1 + 3*Delta1*Delta1*Delta1*Delta1
- 8*etaKminus1*Delta1*Delta1*Delta1 -12*Delta2*Delta1*Delta1 + 12*(2*etaKminus1*Delta2
+ Delta3)*Delta1 + 12*(sp.Rational(94,3)
- sp.Rational(41,32)*sp.pi*sp.pi)*etaKminus1*etaKminus1 + 6*(Delta2*Delta2
- 4*Delta3*etaKminus1))
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
From BB2010 Equations (5.80), we have
Δ3=13[−Δ31+3(ηK−1)Δ21+3Δ2Δ1−6(ηK−1)(−ηK+Δ2+1)−3a2M2(ηK−1)2Δ1]=−13Δ31+(ηK−1)Δ21+Δ2Δ1−2(ηK−1)(Δ2−(ηK−1))−a2M2(ηK−1)2Δ1%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Delta3 = -sp.Rational(1,3)*Delta1*Delta1*Delta1 + etaKminus1*Delta1*Delta1 + Delta2*Delta1
-2*etaKminus1*(Delta2 - etaKminus1) - a*a*etaKminus1*etaKminus1*Delta1
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
From BB2010 Equations (5.79, we have
Δ2=12Δ1(−4ηK+Δ1+4)−a2M2(ηK−1)2Δ0%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Delta2 = sp.Rational(1,2)*Delta1*(Delta1 - 4*etaKminus1) - a*a*etaKminus1*etaKminus1*Delta0
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
From BB2010 Equations (5.78), we have
Δ1=−2(ηK−1)(K+Δ0)%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Delta1 = -2*etaKminus1*(K + Delta0)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Delta0 = K*(eta*K - 2)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
The calibration constant K is defined in BL2017 Section IV, Equations (4.8) and (4.12) (equations copied from BL2017 source code):
K|χ=0=267.788247ν3−126.686734ν2+10.257281ν+1.733598,K=−59.165806χ3ν3−0.426958χ3ν+1.436589χ3+31.17459χ2ν3+6.164663χ2ν2−1.380863χ2−27.520106χν3+17.373601χν2+2.268313χν−1.62045χ+K|χ=0Here K|χ=0 denotes the nonspining fits and ν=η (see discussion after BL2017 Equation (2.1)). Furthermore, most coefficients are rounded in the LALSuite code; below we round to match the values therein (see the file LALSimIMRSpinEOBHamiltonian.h). The term ηK−1 is sufficiently common that we also define it:
etaKminus1=ηK−1.We define η in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
etaKminus1 = eta*K - 1
K = - 59.1658*chi*chi*chi*eta*eta*eta - 0.426958*chi*chi*chi*eta + 1.43659*chi*chi*chi
+ 31.1746*chi*chi*eta*eta*eta + 6.16466*chi*chi*eta*eta - 1.38086*chi*chi - 27.5201*chi*eta*eta*eta
+ 17.3736*chi*eta*eta + 2.26831*chi*eta - 1.62045*chi + Kchi0
Kchi0 = 267.788*eta*eta*eta -126.687*eta*eta + 10.2573*eta + 1.7336
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
The augmented spin χ is defined in OB2020 Equation (3.7) (where it is denoted ˜χ; note that ν=η from the first paragraph of Section II):
χ=SKerr⋅ˆL1−2η+α(S⊥1+S⊥2)⋅SKerr|SKerr|(1−2η).From the discussion after this equation we take α=12. We define S⊥=S⊥1+S⊥2 in this cell, L in this cell, |SKerr| in this cell, and η in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
chi = (Skerr1*Lhat1 + Skerr2*Lhat2 + Skerr3*Lhat3)/(1 - 2*eta)
+ sp.Rational(1,2)*(Sperp1*Skerr1 + Sperp2*Skerr2 + Sperp3*Skerr3)/(Skerrmag*(1. - 2.*eta))
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
omegatilde = 2*a*r
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Dinv = 1 + sp.log(1 + 6*eta*u*u + 2*(26 - 3*eta)*eta*u*u*u)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Sigma = r*r + a*a*costheta*costheta
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
w2 = a*a + r*r
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
xisq = sin2theta
sin2theta = 1 - costheta*costheta
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
costheta = e31*n1 + e32*n2 + e33*n3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
v1 = n2*xi3 - n3*xi2
v2 = n3*xi1 - n1*xi3
v3 = n1*xi2 - n2*xi1
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
xi1 = e32*n3 - e33*n2
xi2 = e31*n3 + e33*n1
xi3 = e31*n2 - e32*n1
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
e31 = Skerrhat1
e32 = Skerrhat2
e33 = Skerrhat3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
n1 = x/r
n2 = y/r
n3 = z/r
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Sperp1 = S1perp1 + S2perp1
Sperp2 = S1perp2 + S2perp2
Sperp3 = S1perp3 + S2perp3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
From the discussion after OB2020 Equation (3.7), we find
S⊥1=S1−(S1⋅ˆL)ˆLS⊥2=S2−(S2⋅ˆL)ˆL%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
S2perp1 = S2x - S2dotLhat*Lhat1
S2perp2 = S2y - S2dotLhat*Lhat2
S2perp3 = S2z - S2dotLhat*Lhat3
S1perp1 = S1x - S1dotLhat*Lhat1
S1perp2 = S1y - S1dotLhat*Lhat2
S1perp3 = S1z - S1dotLhat*Lhat3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
For convenience, we here compute S1⋅ˆL and S2⋅ˆL. We define ˆL in this cell.
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
S1dotLhat = S1x*Lhat1 + S1y*Lhat2 + S1z*Lhat3
S2dotLhat = S2x*Lhat1 + S2y*Lhat2 + S2z*Lhat3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Lhat1 = L1/Lnorm
Lhat2 = L2/Lnorm
Lhat3 = L3/Lnorm
Lnorm = sp.sqrt(L1*L1 + L2*L2 + L3*L3)
L1 = y*p3 - z*p2
L2 = z*p1 - x*p3
L3 = x*p2 - y*p1
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
a = Skerrmag
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Skerrhat1 = Skerr1/Skerrmag
Skerrhat2 = Skerr2/Skerrmag
Skerrhat3 = Skerr3/Skerrmag
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Skerrmag = sp.sqrt(Skerr1*Skerr1 + Skerr2*Skerr2 + Skerr3*Skerr3)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
Skerr1 = sigma1
Skerr2 = sigma2
Skerr3 = sigma3
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
sigma1 = S1x + S2x
sigma2 = S1y + S2y
sigma3 = S1z + S2z
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
sigmastar1 = m2/m1*S1x + m1/m2*S2x
sigmastar2 = m2/m1*S1y + m1/m2*S2y
sigmastar3 = m2/m1*S1z + m1/m2*S2z
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
u = 1/r
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
r = sp.sqrt(x*x + y*y + z*z)
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
eta = mu/M
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
mu = m1*m2/M
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
%%writefile -a $Ccodesdir/v4P_Hamiltonian-Hreal_on_top.txt
M = m1 + m2
Appending to SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt
The following code cell reverses the order of the expressions output to SEOBNR/Hamiltonian_on_top.txt and creates a Python function to validate the value of Hreal against the SEOBNRv3 Hamiltonian value computed in LALSuite git commit bba40f21e9 for command-line input parameters
-M 23 -m 10 -f 20 -X 0.01 -Y 0.02 -Z -0.03 -x 0.04 -y -0.05 -z 0.06.
import numpy as np
import difflib, sys, os
# The subterms in the Hamiltonian expression are sometimes written on more than
# one line for readability in this Jupyter notebook. We first create a file of
# one-line expressions, Hamiltonian-Hreal_one_line_expressions.txt.
with open(os.path.join(Ccodesdir,"v4P_Hamiltonian-Hreal_one_line_expressions.txt"), "w") as output:
count = 0
# Read output of this notebook
for line in list(open("SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt")):
# Read the first line
if count == 0:
prevline=line
#Check if prevline is a complete expression
elif "=" in prevline and "=" in line:
output.write("%s\n" % prevline.strip('\n'))
prevline=line
# Check if line needs to be adjoined to prevline
elif "=" in prevline and not "=" in line:
prevline = prevline.strip('\n')
prevline = (prevline+line).replace(" ","")
# Be sure to print the last line.
if count == len(list(open("SEOBNR/v4P_Hamiltonian-Hreal_on_top.txt")))-1:
if not "=" in line:
print("ERROR. Algorithm not robust if there is no equals sign on the final line. Sorry.")
sys.exit(1)
else:
output.write("%s" % line)
count = count + 1
# Now reverse the expressions and write them in a function
# This formulation is used to check that we get a reasonable H_real value
with open(os.path.join(Ccodesdir,"v4P_Hreal_on_bottom.py"), "w") as output:
output.write("import numpy as np\ndef compute_v4P_Hreal(m1=23., m2=10., EMgamma=0.577215664901532860606512090082402431, tortoise=1, x=2.1242072413581923e+01, y=0., z=0., p1=0., p2=2.1696072000958128e-01, p3=1.0000000000000000e-03, S1x=4.8576675849403119e-03, S1y=9.7153351698806237e-03, S1z=-1.4573002754820936e-02, S2x=3.6730945821854912e-03, S2y=-4.5913682277318639e-03, S2z=5.5096418732782371e-03):\n")
for line in reversed(list(open("SEOBNR/v4P_Hamiltonian-Hreal_one_line_expressions.txt"))):
output.write(" %s\n" % line.rstrip().replace("sp.sqrt", "np.sqrt").replace("sp.Rational",
"np.divide").replace("sp.abs", "np.abs").replace("sp.log",
"np.log").replace("sp.sign", "np.sign").replace("sp.pi",
"np.pi"))
output.write(" return Hreal")
# Now reverse the expressions in a standalone text file
# This formulation is used as a harsher validation check that all expressions agree with a trusted list
with open(os.path.join(Ccodesdir,"v4P_Hamiltonian_expressions.txt-VALIDATION"), "w") as output:
for line in reversed(list(open("SEOBNR/v4P_Hamiltonian-Hreal_one_line_expressions.txt"))):
output.write("%s\n" % line.rstrip().replace("sp.sqrt", "np.sqrt").replace("sp.Rational",
"np.divide").replace("sp.abs", "np.abs").replace("sp.log",
"np.log").replace("sp.sign", "np.sign").replace("sp.pi",
"np.pi"))
print("Printing difference between notebook output and a trusted list of expressions...")
# Open the files to compare
file = "v4P_Hamiltonian_expressions.txt"
outfile = "v4P_Hamiltonian_expressions.txt-VALIDATION"
print("Checking file " + outfile)
with open(os.path.join(Ccodesdir,file), "r") as file1, open(os.path.join(Ccodesdir,outfile), "r") as file2:
# Read the lines of each file
file1_lines=[]
file2_lines=[]
for line in file1.readlines():
file1_lines.append(line.replace(" ", ""))
for line in file2.readlines():
file2_lines.append(line.replace(" ", ""))
num_diffs = 0
for line in difflib.unified_diff(file1_lines, file2_lines, fromfile=os.path.join(Ccodesdir,file), tofile=os.path.join(Ccodesdir,outfile)):
sys.stdout.writelines(line)
num_diffs = num_diffs + 1
if num_diffs == 0:
print("No difference. TEST PASSED!")
else:
print("ERROR: Disagreement found with the trusted file. See differences above.")
sys.exit(1)
# Import the new Hamiltonian function and the trusted Hamiltonian function
import SEOBNR.SEOBNR_v4P_Hamiltonian as Hreal_trusted
import SEOBNR.v4P_Hreal_on_bottom as Hreal_new
# Compute the trusted and new Hamiltonian values; compare; exit if they disagree!
Hreal = Hreal_trusted.compute_v4P_Hreal()
Hreal_temp = Hreal_new.compute_v4P_Hreal()
if(np.abs(Hreal-Hreal_temp)>1e-14):
print("ERROR. You have broken the Hamiltonian computation!")
print("Hreal_trusted was ",Hreal)
print("...and Hreal is now ", Hreal_temp)
sys.exit(1)
Printing difference between notebook output and a trusted list of expressions... Checking file v4P_Hamiltonian_expressions.txt-VALIDATION No difference. TEST PASSED!
The following code cell converts this Jupyter notebook into a proper, clickable LATEX-formatted PDF file. After the cell is successfully run, the generated PDF may be found in the root NRPy+ tutorial directory, with filename Tutorial-SEOBNR_Documentation.pdf (Note that clicking on this link may not work; you may need to open the PDF file through another means.)
import cmdline_helper as cmd # NRPy+: Multi-platform Python command-line interface
cmd.output_Jupyter_notebook_to_LaTeXed_PDF("Tutorial-SEOBNR_Documentation")
[NbConvertApp] WARNING | pattern 'Tutorial-SEOBNR_Documentation.ipynb' matched no files Created Tutorial-SEOBNR_Documentation.tex, and compiled LaTeX file to PDF file Tutorial-SEOBNR_Documentation.pdf