In [1]:
# Always run this first
# NOTE: Do not define new basic variables in this notebook;
#       define them in Variables_Q.ipynb.  Use this notebook
#       to define new expressions built from those variables.

from __future__ import division # This needs to be here, even though it's in Variables_Q.ipynb
import sys
sys.path.insert(0, '..') # Look for modules in directory above this one
execfile('../Utilities/ExecNotebook.ipy')
try: execnotebook(VariablesNotebook)
except: execnotebook('Variables_Q.ipynb')

The following PNCollection objects will contain all the terms in the different parts of the flux.


In [2]:
Flux_NoSpin = PNCollection()
Flux_Spin = PNCollection()
Flux_NSTides = PNCollection()

Individual flux terms

In this notebook, every term will be multiplied by the following coefficient.


In [3]:
Flux_NoSpin.AddDerivedVariable('Fcal_coeff', frac(32,5)*nu**2*v**10)

Note that fractions need to be entered as, e.g., frac(32,5) so that they are not converted to finite-precision decimals.

The nonspinning flux terms are complete to 3.5pN order. These terms are given by Eq. (231) of Blanchet (2006).

The higher-order terms are only known in the EMRI limit. These terms are given in Appendix A of Fujita (2012). He computed them up to 22pN. That seems like overkill, so we'll just go up to 6pN.


In [4]:
Flux_NoSpin.AddDerivedConstant('Fcal_0', 1)
# Fcal_1 is 0
Flux_NoSpin.AddDerivedConstant('Fcal_2', -frac(1247,336) - frac(35,12)*nu)
Flux_NoSpin.AddDerivedConstant('Fcal_3', 4*pi)
Flux_NoSpin.AddDerivedConstant('Fcal_4', -frac(44711,9072) + frac(9271,504)*nu + frac(65,18)*nu**2)
Flux_NoSpin.AddDerivedConstant('Fcal_5', (-frac(8191,672) - frac(583,24)*nu)*pi)
Flux_NoSpin.AddDerivedConstant('Fcal_6',
    frac(6643739519,69854400) + frac(16,3)*pi**2 - EulerGamma*frac(1712,105) - frac(1712,105)*ln(4)
    + (-frac(134543,7776) + frac(41,48)*pi**2)*nu - frac(94403,3024)*nu**2 - frac(775,324)*nu**3)
Flux_NoSpin.AddDerivedConstant('Fcal_lnv_6', - frac(1712,105))
Flux_NoSpin.AddDerivedConstant('Fcal_7', (-frac(16285,504) + frac(214745,1728)*nu + frac(193385,3024)*nu**2)*pi)

# The following are only partially known
Flux_NoSpin.AddDerivedConstant('Fcal_8',
    - 1369*pi**2/126 - frac(323105549467,3178375200) - 47385*log(3)/1568 + 232597*EulerGamma/4410 + 39931*log(2)/294)
Flux_NoSpin.AddDerivedConstant('Fcal_lnv_8', frac(232597,4410))
Flux_NoSpin.AddDerivedConstant('Fcal_9',
    - 13696*pi*log(2)/105 - 6848*EulerGamma*pi/105 + 265978667519*pi/745113600)
Flux_NoSpin.AddDerivedConstant('Fcal_lnv_9', -6848*pi/105)
Flux_NoSpin.AddDerivedConstant('Fcal_10',
    - frac(2500861660823683,2831932303200) - 424223*pi**2/6804 - 83217611*log(2)/1122660
    + 916628467*EulerGamma/7858620 + 47385*log(3)/196)
Flux_NoSpin.AddDerivedConstant('Fcal_lnv_10', frac(916628467,7858620))
Flux_NoSpin.AddDerivedConstant('Fcal_11',
    - 142155*pi*log(3)/784 + 8399309750401*pi/101708006400 + 177293*EulerGamma*pi/1176 + 8521283*pi*log(2)/17640)
Flux_NoSpin.AddDerivedConstant('Fcal_lnv_11', 177293*pi/1176)
Flux_NoSpin.AddDerivedConstant('Fcal_12',
    - 271272899815409*log(2)/157329572400
    - 54784*pi**2*log(2)/315 - 246137536815857*EulerGamma/157329572400 - 437114506833*log(3)/789268480 - 256*pi**4/45
    - 27392*EulerGamma*pi**2/315 - 27392*zeta(3)/105 - 37744140625*log(5)/260941824 + 1465472*EulerGamma**2/11025
    + 5861888*EulerGamma*log(2)/11025 + 5861888*log(2)**2/11025 + frac(2067586193789233570693,602387400044430000)
    + 3803225263*pi**2/10478160)
Flux_NoSpin.AddDerivedConstant('Fcal_lnv_12',
    - frac(246137536815857,157329572400) - 27392*pi**2/315
    + 2930944*EulerGamma/11025 + 5861888*log(2)/11025)
Flux_NoSpin.AddDerivedConstant('Fcal_lnv2_12', frac(1465472,11025))

The spin-squared terms (by which I mean both spin-spin and spin-orbit squared terms) in the flux are known only at 2pN order (from Kidder (1995) and Will and Wiseman (1996)). They are most conveniently given in Eq. (C10) of Arun et al.


In [5]:
Flux_Spin.AddDerivedVariable('Fcal_SQ_4', horner( (
    (frac(287,96) + nu/24)*(chi_s_ell)**2 - (frac(89,96) + frac(7,24)*nu)*(chi1chi1+2*chi1chi2+chi2chi2)/4
    + (frac(287,96) - 12*nu)*(chi_a_ell)**2 + (-frac(89,96) + 4*nu)*(chi1chi1-2*chi1chi2+chi2chi2)/4
    + frac(287,48)*delta*chi_s_ell*chi_a_ell
    - frac(89,48)*delta*(chi1chi1-chi2chi2)/4) .expand().simplify()))

The spin-orbit terms in the flux are now known to 4.0pN. These terms come from Eq. (4.9) of Marsat et al. (2013):


In [6]:
Flux_Spin.AddDerivedVariable('Fcal_SO_3', (-4*S_ell - frac(5,4)*delta*Sigma_ell)/M**2)
# Fcal_SO_4 is 0
Flux_Spin.AddDerivedVariable('Fcal_SO_5',
    ((-frac(9,2)+frac(272,9)*nu)*S_ell + (-frac(13,16)+frac(43,4)*nu)*delta*Sigma_ell)/M**2)
Flux_Spin.AddDerivedVariable('Fcal_SO_6', ((-16*pi)*S_ell + (-frac(31,6)*pi)*delta*Sigma_ell)/M**2)
Flux_Spin.AddDerivedVariable('Fcal_SO_7', ((frac(476645,6804)+frac(6172,189)*nu-frac(2810,27)*nu**2)*S_ell
    + (frac(9535,336)+frac(1849,126)*nu-frac(1501,36)*nu**2)*delta*Sigma_ell)/M**2)
Flux_Spin.AddDerivedVariable('Fcal_SO_8', ((-frac(3485,96)+frac(13879,72)*nu)*pi*S_ell
    + (-frac(7163,672)+frac(130583,2016)*nu)*pi*delta*Sigma_ell)/M**2)

The tidal-coupling terms come in to the energy at relative 5pN order, and are known partially at 6pN order.

These terms come from Eq. (3.6) of Vines et al. (2011). Note their unusual convention for mass ratios, where $\chi_1 = m_1/m$ in their notation; in particular, $\chi$ is not a spin parameter. Also note that $\hat{\lambda} = \lambda_2 v^{10}/(m_1+m_2)^5$, and we need to add the coupling terms again with $1 \leftrightarrow 2$. Finally, note the normalization difference, where a different overall factor is used, leading to a sign difference.


In [7]:
Flux_NSTides.AddDerivedConstant('Fcal_NSTides_10', ((12-18*M/M2)*lambda2 + (12-18*M/M1)*lambda1)/M**5)
# Fcal_NSTides_11 is 0
Flux_NSTides.AddDerivedConstant('Fcal_NSTides_12',
    ((704+1803*M2/M-4501*(M2/M)**2+2170*(M2/M)**3)*lambda2/(28*M2/M)
     + (704+1803*M1/M-4501*(M1/M)**2+2170*(M1/M)**3)*lambda1/(28*M1/M))/M**5)

Collected flux terms


In [8]:
def FluxExpression(FluxTerms=[Flux_NoSpin, Flux_Spin], PNOrder=frac(7,2)):
    # We have to play some tricks with the log terms so that `horner` works
    def logterm(key,val):
        if 'lnv2' in val:
            return logv**2
        if 'lnv' in val:
            return logv
        else:
            return 1
    return Fcal_coeff*horner(sum([key*(v**n)*logterm(key,val)
                                  for Terms in FluxTerms
                                  for n in range(2*PNOrder+1)
                                  for key,val in Terms.items()
                                  if val.endswith('_{0}'.format(n))])).subs(logv, ln(v))

In [9]:
# display(FluxExpression())


$$Fcal_{coeff} \left(Fcal_{0} + v^{2} \left(Fcal_{2} + v \left(Fcal_{3} + Fcal_{SO 3} + v \left(Fcal_{4} + Fcal_{SQ 4} + v \left(Fcal_{5} + Fcal_{SO 5} + v \left(Fcal_{6} + Fcal_{SO 6} + Fcal_{lnv 6} \log{\left (v \right )} + v \left(Fcal_{7} + Fcal_{SO 7}\right)\right)\right)\right)\right)\right)\right)$$