This SageMath notebook is relative to the article Holographic drag force in 5d Kerr-AdS black hole by Irina Ya. Aref'eva, Anastasia A. Golubtsova and Eric Gourgoulhon, arXiv:2004.12984.
The involved differential geometry computations are based on tools developed through the SageManifolds project.
NB: a version of SageMath at least equal to 8.2 is required to run this notebook:
version()
First we set up the notebook to display mathematical objects using LaTeX rendering:
%display latex
Since some computations are quite long, we ask for running them in parallel on 8 cores:
Parallelism().set(nproc=1) # only nproc=1 works on CoCalc
We declare the Kerr-AdS spacetime as a 5-dimensional Lorentzian manifold:
M = Manifold(5, 'M', r'\mathcal{M}', structure='Lorentzian', metric_name='G') print(M)
Let us define Boyer-Lindquist-type coordinates (rational polynomial version) on M, via the method chart()
, the argument of which is a string expressing the coordinates names, their ranges (the default is (−∞,+∞)) and their LaTeX symbols:
BL.<t,r,mu,ph,ps> = M.chart(r't r:(0,+oo) mu:(0,1):\mu ph:(0,2*pi):\phi ps:(0,2*pi):\psi') BL
The coordinate μ is related to the standard Boyer-Lindquist coordinate θ by μ=cosθ
The coordinate ranges are
BL.coord_range()
Note that contrary to the 4-dimensional case, the range of μ is (0,1) only (cf. Sec. 1.2 of R.C. Myers, arXiv:1111.1903 or Sec. 2 of G.W. Gibbons, H. Lüb, Don N. Page, C.N. Pope, J. Geom. Phys. 53, 49 (2005)). In other words, the range of θ is (0,2π) only.
The 4 parameters m, a, b and ℓ of the Kerr-AdS spacetime are declared as symbolic variables, a and b being the two angular momentum parameters and ℓ being related to the cosmological constant by Λ=−6ℓ2:
var('m a b', domain='real')
var('l', domain='real', latex_name=r'\ell')
# Particular cases # m = 0 # a = 0 # b = 0 b = a
Some auxiliary functions:
keep_Delta = False # change to False to provide explicit expression for Delta_r, Xi_a, etc...
sig = (1 + r^2*l^2)/r^2 costh2 = mu^2 sinth2 = 1 - mu^2 rho2 = r^2 + a^2*mu^2 + b^2*sinth2 if keep_Delta: Delta_r = var('Delta_r', latex_name=r'\Delta_r', domain='real') Delta_th = var('Delta_th', latex_name=r'\Delta_\theta', domain='real') if a == b: Xi_a = var('Xi', latex_name=r'\Xi', domain='real') Xi_b = Xi_a else: Xi_a = var('Xi_a', latex_name=r'\Xi_a', domain='real') Xi_b = var('Xi_b', latex_name=r'\Xi_b', domain='real') #Delta_th = 1 - a^2*l^2*mu^2 - b^2*l^2*sinth2 Xi_a = 1 - a^2*l^2 Xi_b = 1 - b^2*l^2 else: Delta_r = (r^2+a^2)*(r^2+b^2)*sig - 2*m Delta_th = 1 - a^2*l^2*mu^2 - b^2*l^2*sinth2 Xi_a = 1 - a^2*l^2 Xi_b = 1 - b^2*l^2
The metric is set by its components in the coordinate frame associated with the Boyer-Lindquist-type coordinates, which is the current manifold's default frame. These components can be deduced from Eq. (5.22) of the article S.W. Hawking, C.J. Hunter & M.M. Taylor-Robinson, Phys. Rev. D 59, 064005 (1999) (the check of agreement with this equation is performed below):
G = M.metric() tmp = 1/rho2*( -Delta_r + Delta_th*(a^2*sinth2 + b^2*mu^2) + a^2*b^2*sig ) G[0,0] = tmp.simplify_full() tmp = a*sinth2/(rho2*Xi_a)*( Delta_r - (r^2+a^2)*(Delta_th + b^2*sig) ) G[0,3] = tmp.simplify_full() tmp = b*mu^2/(rho2*Xi_b)*( Delta_r - (r^2+b^2)*(Delta_th + a^2*sig) ) G[0,4] = tmp.simplify_full() G[1,1] = (rho2/Delta_r).simplify_full() G[2,2] = (rho2/Delta_th/(1-mu^2)).simplify_full() tmp = sinth2/(rho2*Xi_a^2)*( - Delta_r*a^2*sinth2 + (r^2+a^2)^2*(Delta_th + sig*b^2*sinth2) ) G[3,3] = tmp.simplify_full() tmp = a*b*sinth2*mu^2/(rho2*Xi_a*Xi_b)*( - Delta_r + sig*(r^2+a^2)*(r^2+b^2) ) G[3,4] = tmp.simplify_full() tmp = mu^2/(rho2*Xi_b^2)*( - Delta_r*b^2*mu^2 + (r^2+b^2)^2*(Delta_th + sig*a^2*mu^2) ) G[4,4] = tmp.simplify_full() G.display()
G.display_comp(only_nonredundant=True)
We need the 1-forms dt, dr, dμ, dϕ and dψ:
dt, dr, dmu, dph, dps = (BL.coframe()[i] for i in M.irange()) dt, dr, dmu, dph, dps
print(dt)
In agreement with μ=cosθ, we introduce the 1-form dθ=−dμ/sinθ, with sinθ=1−μ2 since θ∈(0,2π):
dth = - 1/sqrt(1 - mu^2)*dmu
s1 = dt - a*sinth2/Xi_a*dph - b*costh2/Xi_b*dps s1.display()
s2 = a*dt - (r^2 + a^2)/Xi_a*dph s2.display()
s3 = b*dt - (r^2 + b^2)/Xi_b*dps s3.display()
s4 = a*b*dt - b*(r^2 + a^2)*sinth2/Xi_a * dph - a*(r^2 + b^2)*costh2/Xi_b * dps s4.display()
G0 = - Delta_r/rho2 * s1*s1 + Delta_th*sinth2/rho2 * s2*s2 + Delta_th*costh2/rho2 * s3*s3 \ + rho2/Delta_r * dr*dr + rho2/Delta_th * dth*dth + sig/rho2 * s4*s4 G0.display_comp(only_nonredundant=True)
G0 == G
The Ricci tensor of g is
if not keep_Delta: # Ric = G.ricci() # print(Ric) pass
if not keep_Delta: # show(Ric.display_comp(only_nonredundant=True)) pass
Let us check that g is a solution of the vacuum Einstein equation with the cosmological constant Λ=−6ℓ2:
Lambda = -6*l^2 if not keep_Delta: # print(Ric == 2/3*Lambda*G) pass
One must have a=b and keep_Delta == False
for the test to pass:
if a == b and not keep_Delta: G1 = - (1 + rho2*l^2 - 2*m/rho2) * dt*dt + rho2/Delta_r * dr*dr \ + rho2/Delta_th * dth*dth \ + sinth2/Xi_a^2*(rho2*Xi_a + 2*a^2*m/rho2*sinth2) * dph * dph \ + costh2/Xi_a^2*(rho2*Xi_a + 2*a^2*m/rho2*costh2) * dps * dps \ + a*sinth2/Xi_a*(rho2*l^2 - 2*m/rho2) * (dt*dph + dph*dt) \ + a*costh2/Xi_a*(rho2*l^2 - 2*m/rho2) * (dt*dps + dps*dt) \ + 2*m*a^2*sinth2*costh2/Xi_a^2/rho2 * (dph*dps + dps*dph) print(G1 == G)
The string worldsheet as a 2-dimensional Lorentzian manifold:
W = Manifold(2, 'W', structure='Lorentzian') print(W)
Let us assume that the string worldsheet is parametrized by (t,r):
XW.<t,r> = W.chart(r't r:(0,+oo)') XW
The string embedding in Kerr-AdS spacetime, as an expansion about a straight string solution in AdS (Eq. (4.6)-(4.8) of the paper):
Mu0 = var('Mu0', latex_name=r'\mu_0', domain='real') Phi0 = var('Phi0', latex_name=r'\Phi_0', domain='real') Psi0 = var('Psi0', latex_name=r'\Psi_0', domain='real') beta1 = var('beta1', latex_name=r'\beta_1', domain='real') beta2 = var('beta2', latex_name=r'\beta_2', domain='real') cosTh0 = Mu0 sinTh0 = sqrt(1 - Mu0^2) mu_s = Mu0 + a^2*function('mu_1')(r) ph_s = Phi0 + beta1*a*l^2*t + beta1*a*function('phi_1')(r) ps_s = Psi0 + beta2*a*l^2*t + beta2*a*function('psi_1')(r) F = W.diff_map(M, {(XW, BL): [t, r, mu_s, ph_s, ps_s]}, name='F') F.display()
F.jacobian_matrix()
The string worldsheet metric is the metric g induced by the spacetime metric G, i.e. the pullback of G by the embedding F:
g = W.metric() g.set(F.pullback(G))
# g[0,0].expr().factor()
detg = g.determinant().expr()
Expanding at second order in a:
detg_a2 = detg.series(a, 3).truncate().simplify_full() detg_a2
The Nambu-Goto Lagrangian at second order in a:
L_a2 = (sqrt(-detg_a2)).series(a, 3).truncate().simplify_full() L_a2
L_a2.numerator()
L_a2.denominator()
def euler_lagrange(lagr, qs, var): r""" Derive the Euler-Lagrange equations from a given Lagrangian. INPUT: - ``lagr`` -- symbolic expression representing the Lagrangian density - ``qs`` -- either a single symbolic function or a list/tuple of symbolic functions, representing the `q`'s; these functions must appear in ``lagr`` up to at most their first derivatives - ``var`` -- either a single variable, typically `t` (1-dimensional problem) or a list/tuple of symbolic variables OUTPUT: - list of Euler-Lagrange equations; if only one function is involved, the single Euler-Lagrannge equation is returned instead. """ if not isinstance(qs, (list, tuple)): qs = [qs] if not isinstance(var, (list, tuple)): var = [var] n = len(qs) d = len(var) qv = [SR.var('qxxxx{}'.format(q)) for q in qs] dqv = [[SR.var('qxxxx{}_{}'.format(q, v)) for v in var] for q in qs] subs = {qs[i](*var): qv[i] for i in range(n)} subs_inv = {qv[i]: qs[i](*var) for i in range(n)} for i in range(n): subs.update({diff(qs[i](*var), var[j]): dqv[i][j] for j in range(d)}) subs_inv.update({dqv[i][j]: diff(qs[i](*var), var[j]) for j in range(d)}) lg = lagr.substitute(subs) eqs = [] for i in range(n): dLdq = diff(lg, qv[i]).simplify_full() dLdq = dLdq.substitute(subs_inv) ddL = 0 for j in range(d): h = diff(lg, dqv[i][j]).simplify_full() h = h.substitute(subs_inv) ddL += diff(h, var[j]) eqs.append((dLdq - ddL).simplify_full() == 0) if n == 1: return eqs[0] return eqs
We compute the Euler-Lagrange equations at order a2 for ϕ1 and ψ1:
eqs = euler_lagrange(L_a2, [phi_1, psi_1], r) eqs