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)
One must have b=0 and keep_Delta == False
for the test to pass:
if b == 0 and not keep_Delta: s1 = dt - a*sinth2/Xi_a*dph s2 = a*dt - (r^2 + a^2)/Xi_a*dph G2 = - Delta_r/rho2* s1*s1 + rho2/Delta_r * dr*dr + rho2/Delta_th * dth*dth \ + Delta_th*sinth2/rho2* s2*s2 + r^2*costh2 * dps*dps print(G2 == 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:
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]
# g[0,0].expr().factor()
Reduced form of gtr:
if b == 0 and not keep_Delta: gtr = a^2*sinth2/(rho2*Xi_a^2)*(beta1*Xi_a*(Delta_r - Delta_th*(r^2 + a^2)) \ + beta1^2*l^2*(Delta_th*(r^2 + a^2)^2 - a^2*Delta_r*sinth2)) \ * diff(phi_1(r), r) \ + a^2*l^2*beta2^2*r^2*costh2 * diff(psi_1(r), r) gtr = gtr.subs({mu: mu_s, ph: ph_s, ps: ps_s}) print(g[0,1] == gtr)
Reduced form of gtt:
if b == 0 and not keep_Delta: gtt = (a^2*Delta_th*sinth2 - Delta_r)/rho2 \ + (2*beta1*a^2*l^2*sinth2*(Delta_r - Delta_th*(r^2 + a^2)))/(rho2*Xi_a) \ + beta1^2*a^2*l^4*sinth2/(rho2*Xi_a^2)*(Delta_th*(r^2 + a^2)^2 - a^2*Delta_r*sinth2) \ + beta2^2*a^2*l^4*r^2*costh2 gtt = gtt.subs({mu: mu_s, ph: ph_s, ps: ps_s}) print(g[0,0] == gtt)
Reduced form of grr:
if b == 0 and not keep_Delta: grr = rho2/Delta_r + a^2*beta1^2*sinth2/(Xi_a^2*rho2)*(Delta_th*(r^2 + a^2)^2 - Delta_r*a^2*sinth2)*diff(phi_1(r), r)^2 \ + a^4*rho2/Delta_th/sinth2*diff(mu_1(r), r)^2 \ + beta2^2*a^2*r^2*costh2*diff(psi_1(r), r)^2 grr = grr.subs({mu: mu_s, ph: ph_s, ps: ps_s}) print(g[1,1] == grr)
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()