To do:

  • Generate and output sympy code
  • Generate and output C++ code
  • Loop over components

Note: At the moment, this notebook computes radiated spherical harmonic modes from source multipole tensors. It is designed only for the relatively low-order requirements of the spin parts of the waveform. Thus, it generally ignores terms like $\hat{n} \cdot \vec{v}$. (That is, the velocity is assumed to be orthogonal to the separation between the black holes.) Also, it ignores the intermediate multipoles needed to translate between source and radiated multipoles; they enter at somewhat higher order than we need.

It would be easy enough to modify this notebook to account for the unaccounted-for terms, but this has not been done yet.

We have a couple formulas at lowest order that can guide us in our choice of terms to keep:

$dv/dt = -\mathcal{L}/(dE/dv) \approx -(2v^{10}/5)/(-v/8) = v^9/20$

$d^2v/dt^2 = 9v^8/20\, dv/dt = 9 v^{17}/400$

\begin{align*} \hat{n} \cdot \vec{v} &\approx v\, \frac{dr}{dt} \\ &= v\, \frac{d(1/v^2)}{dt} \\ &= -\frac{2}{v^2}\, \frac{dv}{dt} \\ &= -\frac{v^7}{10} \end{align*}

Clearing the cache is not strictly necessary, but I have found the cache can sometimes cause trouble.

from sympy.core.cache import clear_cache clear_cache()

In [2]:
from __future__ import division, print_function
import sympy
from sympy import *
from sympy.printing import ccode
from sympy import Rational as frac
import re
import simpletensors
from simpletensors import Vector, xHat, yHat, zHat
from simpletensors import TensorProduct, SymmetricTensorProduct, Tensor, ReduceExpr
import sphericalharmonictensors
init_printing()


var('mu,ell,A,B,C,epsilon')
var('jk,jkl,jklm,jklmn,jklmno,jklmnop,jklmnopq') # Index sets Blanchet uses
var('i,j,k,l,m,n,o') # Indices Bohé et al. use
#var('Subscript', cls=Function); # Mathematica will return this, so let's just pretend it exists
var('vartheta, varphi')
var('nu, m, delta, c, t, v0')

# These are related scalar functions of time
var('v, gamma, r', cls=Function)
v = v(t)
x = v**2
Omega = v**3
# gamma = v**2*(1 + (1-nu/3)*v**2 + (1-65*nu/12)*v**4) # APPROXIMATELY!!!  Change this later
#r = 1/gamma
gamma = gamma(t)
r = r(t)
#r = 1/v**2 # APPROXIMATELY!!!  Just for testing.  Change this later

# These get redefined momentarily, but have to exist first
var('nHat, lambdaHat, ellHat', cls=Function)
# And now we define them as vector functions of time
nHat = Vector('nHat', r'\hat{n}', [cos(Omega*t),sin(Omega*t),0,])(t)
lambdaHat = Vector('lambdaHat', r'\hat{\lambda}', [-sin(Omega*t),cos(Omega*t),0,])(t)
ellHat = Vector('ellHat', r'\hat{\ell}', [0,0,1,])(t)

# # These are the spin functions -- first, the individual components as regular sympy.Function objects; then the vectors themselves
# var('S_n, S_lambda, S_ell', cls=Function)
# var('Sigma_n, Sigma_lambda, Sigma_ell', cls=Function)
# SigmaVec = Vector('SigmaVec', r'\vec{\Sigma}', [Sigma_n(t), Sigma_lambda(t), Sigma_ell(t)])(t)
# SVec = Vector('S', r'\vec{S}', [S_n(t), S_lambda(t), S_ell(t)])(t)

# These are the spin vector functions, treated as constant at this order
# (note that this is w.r.t. the x,y,z basis, rather than n,lambda,ell)
var('S_n, S_lambda, S_ell')
var('Sigma_n, Sigma_lambda, Sigma_ell')
SVec = Vector('S', r'\vec{S}', [S_n, S_lambda, S_ell])(t)
SigmaVec = Vector('SigmaVec', r'\vec{\Sigma}', [Sigma_n, Sigma_lambda, Sigma_ell])(t)

# These are some cross products that appear in the spin terms, assuming $\vec{v} = v\hat{\lambda}$
SVectimeslambdaHat = Vector('SVectimeslambdaHat', r'\vec{S} \times \hat{\lambda}',
                            [-S_ell*cos(Omega*t), -S_ell*sin(Omega*t), S_lambda*sin(Omega*t) + S_n*cos(Omega*t)])(t)
SigmaVectimeslambdaHat = Vector('SigmaVectimeslambdaHat', r'\vec{\Sigma} \times \hat{\lambda}',
                                [-Sigma_ell*cos(Omega*t), -Sigma_ell*sin(Omega*t), Sigma_lambda*sin(Omega*t) + Sigma_n*cos(Omega*t)])(t)
nHattimesSVec = Vector('nHattimesSVec', r'\hat{n} \times \vec{S}',
                       [S_ell*sin(Omega*t), -S_ell*cos(Omega*t), S_lambda*cos(Omega*t) - S_n*sin(Omega*t)])(t)
nHattimesSigmaVec = Vector('nHattimesSigmaVec', r'\hat{n} \times \vec{\Sigma}',
                           [Sigma_ell*sin(Omega*t), -Sigma_ell*cos(Omega*t), Sigma_lambda*cos(Omega*t) - Sigma_n*sin(Omega*t)])(t)
nHattimeslambdaHat = ellHat
nHatdotSVecdotlambdaHat = -S_ell # Symbol(r'\left[ \hat{n} \cdot \left( \vec{S} \times \hat{\lambda} \right) \right]')
nHatdotSigmaVecdotlambdaHat = -Sigma_ell # Symbol(r'\left[ \hat{n} \cdot \left( \vec{\Sigma} \times \hat{\lambda} \right) \right]')

nHatdotv = diff(r,t,1) # Symbol(r'\hat{n} \cdot \hat{v}')

# These ignore the v^7 contribution from v along nHat
SVecdotv = v*(-S_n*sin(Omega*t)+S_lambda*cos(Omega*t)) # Symbol(r'\vec{S} \cdot \vec{v}')
SigmaVecdotv = v*(-Sigma_n*sin(Omega*t)+Sigma_lambda*cos(Omega*t)) # Symbol(r'\vec{\Sigma} \cdot \vec{v}')

nHatdotSVec = S_n*cos(Omega*t)+S_lambda*sin(Omega*t) # Symbol(r'\hat{n} \cdot \vec{S}')
nHatdotSigmaVec = Sigma_n*cos(Omega*t)+Sigma_lambda*sin(Omega*t) # Symbol(r'\hat{n} \cdot \vec{\Sigma}')

In [3]:
SimplifyVectorDerivatives = {diff(nHat,t):Omega*lambdaHat, diff(lambdaHat,t):-Omega*nHat}
DropvDerivatives = {diff(v,t,vDerivs)**vDerivPower:0
                    for vDerivs in range(1,3)
                    for vDerivPower in range(1,5)
                    if vDerivs+vDerivPower>=2} # dv/dt \approx v^9 / 20
DropvDerivatives.update({diff(gamma,t,gammaDerivs)**gammaDerivPower:0
                         for gammaDerivs in range(1,3)
                         for gammaDerivPower in range(1,5)
                         if gammaDerivs+gammaDerivPower>=2})
DropvDerivatives.update({diff(r,t,rDerivs)**rDerivPower:0
                         for rDerivs in range(1,3)
                         for rDerivPower in range(1,5)
                         if rDerivs+rDerivPower>=2})
DropvDerivatives.update({'nHatdotv':0}) # n dot v \approx - v^7 / 10
ApproxvDerivatives = {diff(v,t): v**9/20,
                      diff(gamma,t): v**10/10,
                      diff(r,t): -v**6/10,
                      }
SpinComponents = {'SVecdotv':v0*S_lambda, 'SigmaVecdotv':v0*Sigma_lambda,
                  'nHatdotSVec':S_n, 'nHatdotSigmaVec':Sigma_n, }
# powers.get(v,0) + 2*powers.get(x,0) + 3*powers.get(Omega,0) + 2*powers.get(gamma,0) - 2*powers.get(r,0)

In [4]:
def Subscript(vec, indices):
    #print("Subscript({0}, {1})".format(vec, indices))
    try:
        indices_str = indices.name
    except AttributeError:
        indices_str = indices
    #print("About to construct TensorProduct([{0},]*{1}, coefficient=1, symmetric=True)".format(vec, len(indices_str)))
    return TensorProduct([vec,]*len(indices_str), coefficient=1, symmetric=True)

In [5]:
Math={}
Sym={}
ns = locals()

In [6]:
def CollectivePower(expr):
    """Given some product, return 2 * total PN order
    
    This treats v as 1, x**2 as 2, r as -2, etc., not accounting
    for any contribution to PN order from spins
    """
    powers = expr.subs({v.subs(t,0):v,r.subs(t,0):r,}).as_powers_dict()
    return powers.get(v,0) + 2*powers.get(x,0) + 3*powers.get(Omega,0) + 2*powers.get(gamma,0) - 2*powers.get(r,0) \
        + 9*powers.get(diff(v,t,1), 0) + 17*powers.get(diff(v,t,2), 0) + 25*powers.get(diff(v,t,3), 0) \
        + 10*powers.get(diff(gamma,t,1), 0) + 18*powers.get(diff(gamma,t,2), 0) + 26*powers.get(diff(gamma,t,3), 0) \
        + 6*powers.get(diff(r,t,1), 0) + 14*powers.get(diff(r,t,2), 0) + 22*powers.get(diff(r,t,3), 0)

def DropHigherRelativePowers(expression, relative_order=3):
    try:
        expression = sympy.expand(expression)
        if(expression.func==sympy.Add):
            lowest_order = min( [ CollectivePower(arg) for arg in expression.args ] )
            expression = sum( [ arg for arg in expression.args if CollectivePower(arg)<=relative_order+lowest_order ] )
            try:
                return expression.simplify()
            except:
                if(expression==0.0) :
                    return sympy.sympify(0)
                return expression
        else:
            return expression
    except:
        return expression

def DropHigherAbsolutePowers(expression, absolute_order=3):
    try:
        expression = sympy.expand(expression)
        if(expression.func==sympy.Add):
            expression = sum( [ arg for arg in expression.args if CollectivePower(arg)<=absolute_order ] )
            try:
                return expression.simplify()
            except:
                if(expression==0.0) :
                    return sympy.sympify(0)
                return expression
        else:
            if(CollectivePower(expression)<=absolute_order) :
                return expression
            else:
                return sympy.sympify(0)
    except:
        return expression

def DropHigherAbsolutePowersOfTensorProduct(tp, absolute_order=3):
    return simpletensors.TensorProduct([c for c in tp],
                                       coefficient=DropHigherAbsolutePowers(tp.coefficient, absolute_order), symmetric=tp.symmetric)

def DropHigherRelativePowersOfTensorProduct(tp, relative_order=3):
    return simpletensors.TensorProduct([c for c in tp],
                                       coefficient=DropHigherRelativePowers(tp.coefficient, relative_order), symmetric=tp.symmetric)

def DropHigherAbsolutePowersOfTensor(t, absolute_order=3):
    return sum( [DropHigherAbsolutePowersOfTensorProduct(tp, absolute_order) for tp in t ] )

def DropHigherRelativePowersOfTensor(t, relative_order=3):
    lowest_order = sys.maxint
    for term in t:
        expression = sympy.expand(term.coefficient)
        try:
            if(expression.func==sympy.Add):
                for arg in expression.args:
                    lowest_order = min(lowest_order, CollectivePower(arg))
            else:
                lowest_order = min(lowest_order, CollectivePower(expression))
        except:
            pass
    return sum( [DropHigherAbsolutePowersOfTensorProduct(tp, relative_order+lowest_order) for tp in t ] )

In [7]:
%%time

MathKernel='/Applications/Local/Mathematica.app/Contents/MacOS/MathKernel'

# This little `math` script does the conversion we need.
# It has to output to a temporary file because I know of no
# better way to get the correct format out of Mathematica.
# This whole thing
MathCommand = r"""
    \[Nu] = nu;
    \[Mu] = mu;
    \[CapitalDelta] = delta;
    \[Delta] = delta;
    \[Lambda] = lambda;
    \[CapitalSigma] = Sigma;
    \[Gamma] = gamma;
    \[Epsilon] = epsilon;
    \[Gamma]\[Nu] = gamma*nu;
    \[ScriptL] = ell;
    (*Print[InputForm[ToExpression["{0}", TeXForm]]];*)
    ToExpression["{0}", TeXForm] >> /tmp/Math.cpp;
    Exit[];
"""

# # I believe all the results from this group:
# SrcDir = "source/BlanchetLivRev/"
# MultipoleNames = ["I_ij", "I_ij_A", "I_ij_B", "I_ij_C", "J_ij", "I_ijk", "J_ijk", "I_ijkl", "J_ijkl"]

# # I believe all the results from this group:
# SrcDir = "source/BoheEtAl/eqs/"
# MultipoleNames = ["JijCMS", "IijklCMS", "JijklCMS","JijkCMS",]

# # I mostly believe the results from this group, but
# # I don't have the patience to check them all:
# SrcDir = "source/BoheEtAl/eqs/"
# MultipoleNames = ["IijCMS", "IijkCMS", "JijklCMS",]

SrcDir = "source/BoheEtAl/eqs/"
MultipoleNames = ["IijklCMS", "JijklCMS","IijkCMS", "JijkCMS", "IijCMS", "JijCMS",]

multiplication = r'\,'

def TensorCreator(coefficient, vector):
    "Used in the regex wars (below)"
    def func(match):
        indices = list(match.group(1))
        if not coefficient:
            return vector + '_{%s}'%match.group(1)
        return vector + '_{%s}'%match.group(1) + multiplication + coefficient + '^{%s}'%len(indices)
    return func

prereplacements = [
    [r'\\\\',r''], # Line breask are meaningless
    [r'&',r''], # Alignments are meaningless
    [r'\\nonumber',r''], # I wasn't gonna anyway
    [r'~',r''], # Explicit spacing is useless
    [r'\\q*uad',r''], # Explicit spacing is useless
    [r'.*?= *',r''],
    [r' *\+ *\\mathcal{O}.*',r''],
    [r'\(n,\\*(Sigma|S) *,v\)',
     r'v\,\mathrm{ndot\1dotlambdaHat}'], # Catch Bohé et al.'s use of (n,S,v), (n,Sigma,v), for the triple product
    [r'\(\\*(n|v|S|Sigma) *\\*(n|v|S|Sigma) *\)',
     r'\mathrm{\1dot\2}'], # Catch Bohé et al.'s use of (nv), etc., for the dot product
    #[r'\\,', multiplication], # This gets us a good chunk of the way, if we're lucky
    [r'(\\langle|\\rangle|<|>)',r''], # The YlmTensors are already STF
    [r'\\epsilon_\{ab *i\}(.*?)(\{*.\}*)(_.*?)a(.*?)(\{*.\}*)(_.*?)b',
     r'r\,v\,\ell_i\, \1\2\3 \4\5\6 '], # Do the cross product
    [r'\{*x\}*_(\{\}| )', ''], # Remove stubs left from above
    [r'\{*v\}*_(\{\}| )', ''], # Remove stubs left from above
    [r'\\left(\(|\[|\\{)',r'('],
    [r'\\right(\)|\]|\\})',r')'],
    [r'\\(B|b)ig+(\(|\[|\\{)',r'('],
    [r'\\(B|b)ig+(\)|\]|\\})',r')'],
    [r'\\left\.',r''], # Do this BEFORE replacing \left
    [r'\\right\.',r''], # Do this BEFORE replacing \right
    [r'\\left',r''],
    [r'\\right',r''],
    [r'\(\\mathbf{\\*(.*?)}\\times\\mathbf{\\*(.*?)}\)',
     r'\mathrm{\1times\2}'],
    [r'\^\{([ijkl])\}',r'_{\1}'],
    [r'n_{ *(.*?) *}',TensorCreator('', 'n')],
    [r'x_{ *(.*?) *}',TensorCreator('r', 'n')],
    [r'\{x\}_{ *(.*?) *}',TensorCreator('r', 'n')],
    [r'v_{ *(.*?) *}',TensorCreator('v', r'\lambda')],
    [r'\{v\}_{ *(.*?) *}',TensorCreator('v', r'\lambda')],
    [r'  *',r' '], # Tighten up spacing
    [r'\(',r'\,('], # Doesn't hurt to assume multiplication
    [r'([^\\]),',r'\1'], # Remove comma at the end of an equation
    [r'([^\\])\.',r'\1'], # Remove period at the end of an equation
    [r'\\ln *\\*,*',r'\log'],
    ['\\\\',r'\\\\'], # Escape backslashes for Mathematica
    [r"'",r"Prm"],
    #[r"'",r"'\''"], # Pull the ugly command-line single-quote hack AFTER escaping backslashes
]

postreplacements = [
    [r'\^',r'**'],
    [r'lambda(?!Hat)',r'lambdaHat'],
    [r'\[',r'('],
    [r'\]',r')'],
    [r'Sigma',r'SigmaVec'],
    [r'S(?!igma|ubscript)',r'SVec'],
    [r'n(?!u)',r'nHat'],
    [r'ell',r'ellHat'],
    [r'Subscript\(((SigmaVec|SVec|nHat)times)v', r'v*Subscript(\1lambdaHat'],
    #[r'Subscript',r'TensorProductCreator'],
]

for MultipoleName in MultipoleNames:
    print("\n"+MultipoleName)
    with open(SrcDir+MultipoleName+".tex", "r") as myfile:
        data=myfile.read().replace('\n', ' ')
    #print("Raw content of {0}:\n".format(MultipoleName)); print(data)
    for replacement in prereplacements:
        data = re.sub(replacement[0], replacement[1], data)
    #print("\nbecomes\n"); print("""'{0}'""".format(data))
    #! echo '{MathCommand.format(data)}'
    #continue # Skip Mathematica stuff for now
    ! {MathKernel} -run '{MathCommand.format(data)}' >& /dev/null
    MathTmp = !cat /tmp/Math.cpp
    Math[MultipoleName] = ''.join(MathTmp)
    for replacement in postreplacements:
        Math[MultipoleName] = re.sub(replacement[0], replacement[1], Math[MultipoleName])
    #print("\nbecomes\n"); print(Math[MultipoleName]); print("\nbecomes\n")
    Sym[MultipoleName] = sympify(Math[MultipoleName], ns)
    #display(Sym[MultipoleName])
    with open('results/raw/'+MultipoleName+'.tex', 'w') as the_file:
        the_file.write(latex(Sym[MultipoleName]))
    #print("  reduces to")
    Sym[MultipoleName] = ReduceExpr(Sym[MultipoleName]).compress()
    #display(Sym[MultipoleName])
    with open('results/'+MultipoleName+'.tex', 'w') as the_file:
        the_file.write(latex(Sym[MultipoleName]))
    with open('results/'+MultipoleName+'.py', 'w') as the_file:
       the_file.write(repr(Sym[MultipoleName]))
    #print("\n\n")


IijklCMS

JijklCMS

IijkCMS

JijkCMS

IijCMS

JijCMS
CPU times: user 7min 15s, sys: 3.02 s, total: 7min 18s
Wall time: 8min 36s

In [8]:
%%time
AsymmetricModeTerms = {}
for I_L,J_L in [["IijklCMS", "JijklCMS"], ["IijkCMS", "JijkCMS"], ["IijCMS", "JijCMS"]]:
    U_L,V_L = [Sym[I_L],Sym[J_L]]
    ell = U_L.rank
    print('ell={0}'.format(ell)); sys.stdout.flush()
    AsymmetricModeTerms[ell] = {}
    for m in range(0,ell+1):
        print('(ell,m)=({0},{1})'.format(ell,m)); sys.stdout.flush()
        if((ell+m)%2==0) :
            tmp = sympy.simplify(sympy.I*sphericalharmonictensors.Vlm(V_L, m)/sympy.sqrt(2))
        else :
            tmp = sympy.simplify(-sphericalharmonictensors.Ulm(U_L, m)/sympy.sqrt(2))
        for i_order in range(ell):
            tmp = diff(tmp, t)
            tmp = tmp.xreplace(SimplifyVectorDerivatives).subs(dict(DropvDerivatives.items()+ApproxvDerivatives.items())).subs(SpinComponents)
            tmp = DropHigherRelativePowers(tmp, 3)
        AsymmetricModeTerms[ell][m] = sympy.simplify(sympy.simplify(tmp).doit().subs(t,0))
        display(AsymmetricModeTerms[ell][m])
        with open('results/hAsymmetric_{0}_{1}.tex'.format(ell,m), 'w') as the_file:
            the_file.write(latex(AsymmetricModeTerms[ell][m]))
        with open('results/hAsymmetric_{0}_{1}.py'.format(ell,m), 'w') as the_file:
            the_file.write(repr(AsymmetricModeTerms[ell][m]))
        with open('results/hAsymmetric_{0}_{1}.c'.format(ell,m), 'w') as the_file:
            the_file.write(ccode(N(AsymmetricModeTerms[ell][m])))


ell=4
(ell,m)=(4,0)
$$\frac{\sqrt{10} i \sqrt{\pi} \nu}{105 c} \left(S_{n} \delta - 3 \Sigma_{n} \nu + \Sigma_{n}\right) r^{3}{\left (0 \right )} v^{12}{\left (0 \right )}$$
(ell,m)=(4,1)
$$- \frac{4 \sqrt{2} \sqrt{\pi} \nu}{105 c^{3}} \left(18 i S_{\lambda} \nu - 6 i S_{\lambda} + 18 S_{n} \nu - 6 S_{n} + 17 i \Sigma_{\lambda} \delta \nu - 6 i \Sigma_{\lambda} \delta + 17 \Sigma_{n} \delta \nu - 6 \Sigma_{n} \delta\right) r^{3}{\left (0 \right )} v^{13}{\left (0 \right )}$$
(ell,m)=(4,2)
$$\frac{\sqrt{\pi} \nu}{21 c} \left(13 S_{\lambda} \delta - 14 i S_{n} \delta - 39 \Sigma_{\lambda} \nu + 13 \Sigma_{\lambda} + 42 i \Sigma_{n} \nu - 14 i \Sigma_{n}\right) r^{3}{\left (0 \right )} v^{12}{\left (0 \right )}$$
(ell,m)=(4,3)
$$\frac{4 \sqrt{14} \sqrt{\pi} \nu}{315 c^{3}} \left(54 i S_{\lambda} \nu - 18 i S_{\lambda} + 138 S_{n} \nu - 46 S_{n} + 111 i \Sigma_{\lambda} \delta \nu - 18 i \Sigma_{\lambda} \delta + 177 \Sigma_{n} \delta \nu - 46 \Sigma_{n} \delta\right) r^{3}{\left (0 \right )} v^{13}{\left (0 \right )}$$
(ell,m)=(4,4)
$$\frac{9 \sqrt{7} \sqrt{\pi} \nu}{7 c} \left(S_{\lambda} \delta + i S_{n} \delta - 3 \Sigma_{\lambda} \nu + \Sigma_{\lambda} - 3 i \Sigma_{n} \nu + i \Sigma_{n}\right) r^{3}{\left (0 \right )} v^{12}{\left (0 \right )}$$
ell=3
(ell,m)=(3,0)
$$- \frac{\sqrt{210} \sqrt{\pi} \nu}{1890 c^{5}} \left(101 Gm S_{\lambda} \delta \nu + 41 Gm S_{\lambda} \delta - 479 Gm \Sigma_{\lambda} \nu^{2} + 20 Gm \Sigma_{\lambda} \nu + 29 Gm \Sigma_{\lambda} - 147 S_{\lambda} \delta \nu r{\left (0 \right )} v^{2}{\left (0 \right )} + 33 S_{\lambda} \delta r{\left (0 \right )} v^{2}{\left (0 \right )} + 687 \Sigma_{\lambda} \nu^{2} r{\left (0 \right )} v^{2}{\left (0 \right )} - 306 \Sigma_{\lambda} \nu r{\left (0 \right )} v^{2}{\left (0 \right )} + 33 \Sigma_{\lambda} r{\left (0 \right )} v^{2}{\left (0 \right )} + 18 c^{2} \left(3 S_{\lambda} \delta - 11 \Sigma_{\lambda} \nu + 3 \Sigma_{\lambda}\right) r{\left (0 \right )}\right) r{\left (0 \right )} v^{10}{\left (0 \right )}$$
(ell,m)=(3,1)
$$- \frac{2 \sqrt{70} \sqrt{\pi} \nu}{315 c^{3}} \left(12 i Gm S_{\lambda} \nu + 4 i Gm S_{\lambda} + 12 Gm S_{n} \nu + 4 Gm S_{n} - 11 i Gm \Sigma_{\lambda} \delta \nu + 16 i Gm \Sigma_{\lambda} \delta - 11 Gm \Sigma_{n} \delta \nu + 16 Gm \Sigma_{n} \delta + 45 i S_{\lambda} \nu r{\left (0 \right )} v^{2}{\left (0 \right )} - 15 i S_{\lambda} r{\left (0 \right )} v^{2}{\left (0 \right )} + 45 S_{n} \nu r{\left (0 \right )} v^{2}{\left (0 \right )} - 15 S_{n} r{\left (0 \right )} v^{2}{\left (0 \right )} + 75 i \Sigma_{\lambda} \delta \nu r{\left (0 \right )} v^{2}{\left (0 \right )} - 15 i \Sigma_{\lambda} \delta r{\left (0 \right )} v^{2}{\left (0 \right )} + 75 \Sigma_{n} \delta \nu r{\left (0 \right )} v^{2}{\left (0 \right )} - 15 \Sigma_{n} \delta r{\left (0 \right )} v^{2}{\left (0 \right )} - 12 c^{2} \left(i S_{\lambda} + S_{n} + i \Sigma_{\lambda} \delta + \Sigma_{n} \delta\right) r{\left (0 \right )}\right) r{\left (0 \right )} v^{9}{\left (0 \right )}$$
(ell,m)=(3,2)
$$- \frac{\sqrt{7} \sqrt{\pi} \nu}{1890 c^{5}} \left(631 Gm S_{\lambda} \delta \nu + 4867 Gm S_{\lambda} \delta + 388 i Gm S_{n} \delta \nu - 4124 i Gm S_{n} \delta + 15035 Gm \Sigma_{\lambda} \nu^{2} - 6620 Gm \Sigma_{\lambda} \nu + 607 Gm \Sigma_{\lambda} - 18580 i Gm \Sigma_{n} \nu^{2} + 6340 i Gm \Sigma_{n} \nu - 284 i Gm \Sigma_{n} - 990 S_{\lambda} c^{2} \delta r{\left (0 \right )} + 3255 S_{\lambda} \delta \nu r{\left (0 \right )} v^{2}{\left (0 \right )} - 885 S_{\lambda} \delta r{\left (0 \right )} v^{2}{\left (0 \right )} + 1440 i S_{n} c^{2} \delta r{\left (0 \right )} - 4116 i S_{n} \delta \nu r{\left (0 \right )} v^{2}{\left (0 \right )} + 978 i S_{n} \delta r{\left (0 \right )} v^{2}{\left (0 \right )} + 5310 \Sigma_{\lambda} c^{2} \nu r{\left (0 \right )} - 990 \Sigma_{\lambda} c^{2} r{\left (0 \right )} - 18555 \Sigma_{\lambda} \nu^{2} r{\left (0 \right )} v^{2}{\left (0 \right )} + 8250 \Sigma_{\lambda} \nu r{\left (0 \right )} v^{2}{\left (0 \right )} - 885 \Sigma_{\lambda} r{\left (0 \right )} v^{2}{\left (0 \right )} - 6840 i \Sigma_{n} c^{2} \nu r{\left (0 \right )} + 1440 i \Sigma_{n} c^{2} r{\left (0 \right )} + 22350 i \Sigma_{n} \nu^{2} r{\left (0 \right )} v^{2}{\left (0 \right )} - 9570 i \Sigma_{n} \nu r{\left (0 \right )} v^{2}{\left (0 \right )} + 978 i \Sigma_{n} r{\left (0 \right )} v^{2}{\left (0 \right )}\right) r{\left (0 \right )} v^{10}{\left (0 \right )}$$
(ell,m)=(3,3)
$$\frac{2 \sqrt{42} \sqrt{\pi} \nu}{189 c^{3}} \left(444 i Gm S_{\lambda} \nu - 172 i Gm S_{\lambda} + 324 Gm S_{n} \nu - 84 Gm S_{n} + 143 i Gm \Sigma_{\lambda} \delta \nu - 88 i Gm \Sigma_{\lambda} \delta + 33 Gm \Sigma_{n} \delta \nu + 24 Gm \Sigma_{n} \delta + 99 i S_{\lambda} \nu r{\left (0 \right )} v^{2}{\left (0 \right )} - 33 i S_{\lambda} r{\left (0 \right )} v^{2}{\left (0 \right )} + 45 S_{n} \nu r{\left (0 \right )} v^{2}{\left (0 \right )} - 15 S_{n} r{\left (0 \right )} v^{2}{\left (0 \right )} + 93 i \Sigma_{\lambda} \delta \nu r{\left (0 \right )} v^{2}{\left (0 \right )} - 33 i \Sigma_{\lambda} \delta r{\left (0 \right )} v^{2}{\left (0 \right )} + 147 \Sigma_{n} \delta \nu r{\left (0 \right )} v^{2}{\left (0 \right )} - 15 \Sigma_{n} \delta r{\left (0 \right )} v^{2}{\left (0 \right )} + 36 c^{2} \left(i S_{\lambda} - S_{n} + i \Sigma_{\lambda} \delta - \Sigma_{n} \delta\right) r{\left (0 \right )}\right) r{\left (0 \right )} v^{9}{\left (0 \right )}$$
ell=2
(ell,m)=(2,0)
$$\frac{2 \sqrt{30} i \nu}{105 c^{3}} \sqrt{\pi} \left(6 Gm S_{n} \delta + 3 Gm \Sigma_{n} \nu - 15 Gm \Sigma_{n} + 10 S_{n} \delta r{\left (0 \right )} v^{2}{\left (0 \right )} + 14 \Sigma_{n} c^{2} r{\left (0 \right )} - 79 \Sigma_{n} \nu r{\left (0 \right )} v^{2}{\left (0 \right )} + 17 \Sigma_{n} r{\left (0 \right )} v^{2}{\left (0 \right )}\right) v^{6}{\left (0 \right )}$$
(ell,m)=(2,1)
$$- \frac{4 \sqrt{5} \sqrt{\pi} \nu}{105 c^{5}} \left(15 i Gm S_{\lambda} \nu + 79 i Gm S_{\lambda} + 15 Gm S_{n} \nu + 79 Gm S_{n} - 50 i Gm \Sigma_{\lambda} \delta \nu + 7 i Gm \Sigma_{\lambda} \delta - 50 Gm \Sigma_{n} \delta \nu + 7 Gm \Sigma_{n} \delta + 66 i S_{\lambda} \nu r{\left (0 \right )} v^{2}{\left (0 \right )} - 22 i S_{\lambda} r{\left (0 \right )} v^{2}{\left (0 \right )} + 66 S_{n} \nu r{\left (0 \right )} v^{2}{\left (0 \right )} - 22 S_{n} r{\left (0 \right )} v^{2}{\left (0 \right )} + 80 i \Sigma_{\lambda} \delta \nu r{\left (0 \right )} v^{2}{\left (0 \right )} - 22 i \Sigma_{\lambda} \delta r{\left (0 \right )} v^{2}{\left (0 \right )} + 80 \Sigma_{n} \delta \nu r{\left (0 \right )} v^{2}{\left (0 \right )} - 22 \Sigma_{n} \delta r{\left (0 \right )} v^{2}{\left (0 \right )} - 28 c^{2} \left(i S_{\lambda} + S_{n} + i \Sigma_{\lambda} \delta + \Sigma_{n} \delta\right) r{\left (0 \right )}\right) v^{7}{\left (0 \right )}$$
(ell,m)=(2,2)
$$- \frac{2 \sqrt{5} \sqrt{\pi} \nu}{105 c^{3}} \left(- 272 Gm S_{\lambda} \delta + 250 i Gm S_{n} \delta + 319 Gm \Sigma_{\lambda} \nu - 125 Gm \Sigma_{\lambda} - 239 i Gm \Sigma_{n} \nu + 19 i Gm \Sigma_{n} - 69 S_{\lambda} \delta r{\left (0 \right )} v^{2}{\left (0 \right )} + 30 i S_{n} \delta r{\left (0 \right )} v^{2}{\left (0 \right )} + 42 \Sigma_{\lambda} c^{2} r{\left (0 \right )} + 256 \Sigma_{\lambda} \nu r{\left (0 \right )} v^{2}{\left (0 \right )} - 48 \Sigma_{\lambda} r{\left (0 \right )} v^{2}{\left (0 \right )} + 42 i \Sigma_{n} c^{2} r{\left (0 \right )} - 293 i \Sigma_{n} \nu r{\left (0 \right )} v^{2}{\left (0 \right )} + 51 i \Sigma_{n} r{\left (0 \right )} v^{2}{\left (0 \right )}\right) v^{6}{\left (0 \right )}$$
CPU times: user 1h 12min 20s, sys: 36.5 s, total: 1h 12min 56s
Wall time: 1h 43min 8s

In [8]:
-272*S_lambda*delta + 250*i*S_n*delta + 319*Sigma_lambda*nu - 125*Sigma_lambda -239*i*Sigma_n*nu + 19*i*Sigma_n - 293*i*Sigma_n*nu

In [9]:
LeadingOrder22 = (2*nu*v.subs(t,0)**2)*sqrt(16*pi/5)
( DropHigherRelativePowers(AsymmetricModeTerms[2][2],0) ) / ( LeadingOrder22 )


Out[9]:
$$- \frac{v^{4}{\left (0 \right )}}{2 c} \left(\Sigma_{\lambda} + i \Sigma_{n}\right) r{\left (0 \right )}$$

In [10]:
LeadingOrder44 = (2*nu*v.subs(t,0)**2)*sqrt(16*pi/5)*v.subs(t,0)**2*8*sqrt(frac(5,7))*(-1 + 3*nu)/9
( DropHigherRelativePowers(AsymmetricModeTerms[4][4],0) ) / ( LeadingOrder44 )


Out[10]:
$$\frac{81 r^{3}{\left (0 \right )} v^{8}{\left (0 \right )}}{64 c \left(3 \nu - 1\right)} \left(S_{\lambda} \delta + i S_{n} \delta - 3 \Sigma_{\lambda} \nu + \Sigma_{\lambda} - 3 i \Sigma_{n} \nu + i \Sigma_{n}\right)$$
$$ -\frac{81}{32} \frac{v^2} {1-3\nu} \left[ (S_\lambda + i\, S_n)\delta + (1-3\nu)(\Sigma_\lambda + i\, \Sigma_n) \right] $$

In [10]:


In [10]: