This worksheet demonstrates a few capabilities of SageManifolds (version 1.0, as included in SageMath 7.5) in computations regarding 3+1 slicing of Kerr spacetime. In particular, it implements the computation of the 3+1 decomposition of the Simon-Mars tensor as given in the article arXiv:1412.6542.
Click here to download the worksheet file (ipynb format). To run it, you must start SageMath with the Jupyter notebook, via the command sage -n jupyter
NB: a version of SageMath at least equal to 7.5 is required to run this worksheet:
version()
'SageMath version 7.5.1, Release Date: 2017-01-15'
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=8)
We consider some hypersurface $\Sigma$ of a spacelike foliation $(\Sigma_t)_{t\in\mathbb{R}}$ of Kerr spacetime; we declare $\Sigma_t$ as a 3-dimensional manifold:
Sig = Manifold(3, 'Sigma', r'\Sigma', start_index=1)
The two Kerr parameters:
var('m, a')
assume(m>0)
assume(a>0)
The variables introduced so far satisfy the following assumptions:
Without any loss of generality (for $m\not =0$), we may set $m=1$:
m=1
assume(a<1)
#a=1 # extreme Kerr
On the hypersurface $\Sigma$, we are using coordinates $(r,y,\phi)$ that are related to the standard Boyer-Lindquist coordinates $(r,\theta,\phi)$ by $y=\cos\theta$:
X.<r,y,ph> = Sig.chart(r'r:(1+sqrt(1-a^2),+oo) y:(-1,1) ph:(0,2*pi):\phi')
print(X) ; X
Chart (Sigma, (r, y, ph))
The variables introduced so far obey the following assumptions:
assumptions()
Some shortcut notations:
rho2 = r^2 + a^2*y^2
Del = r^2 -2*m*r + a^2
AA2 = rho2*(r^2 + a^2) + 2*a^2*m*r*(1-y^2)
BB2 = r^2 + a^2 + 2*a^2*m*r*(1-y^2)/rho2
The metric $h$ induced by the spacetime metric $g$ on $\Sigma$:
gam = Sig.riemannian_metric('gam', latex_name=r'\gamma')
gam[1,1] = rho2/Del
gam[2,2] = rho2/(1-y^2)
gam[3,3] = BB2*(1-y^2)
gam.display()
A matrix view of the components w.r.t. coordinates $(r,y,\phi)$:
gam[:]
N = Sig.scalar_field(sqrt(Del / BB2), name='N')
print(N)
N.display()
Scalar field N on the 3-dimensional differentiable manifold Sigma
b = Sig.vector_field('beta', latex_name=r'\beta')
b[3] = -2*m*r*a/AA2
# unset components are zero
b.display()
We use the formula $$ K_{ij} = \frac{1}{2N} \mathcal{L}_{\beta} \gamma_{ij}$$ which is valid for any stationary spacetime:
K = gam.lie_der(b) / (2*N)
K.set_name('K')
print(K) ; K.display()
Field of symmetric bilinear forms K on the 3-dimensional differentiable manifold Sigma
Check (comparison with known formulas):
Krp = a*m*(1-y^2)*(3*r^4+a^2*r^2+a^2*(r^2-a^2)*y^2) / rho2^2/sqrt(Del*BB2)
Krp
K[1,3] - Krp
Kyp = 2*m*r*a^3*(1-y^2)*y*sqrt(Del)/rho2^2/sqrt(BB2)
Kyp
K[2,3] - Kyp
For now on, we use the expressions Krp and Kyp above for $K_{r\phi}$ and $K_{ry}$, respectively:
K1 = Sig.sym_bilin_form_field('K')
K1[1,3] = Krp
K1[2,3] = Kyp
K = K1
K.display()
The type-(1,1) tensor $K^\sharp$ of components $K^i_{\ \, j} = \gamma^{ik} K_{kj}$:
Ku = K.up(gam, 0)
print(Ku) ; Ku.display()
Tensor field of type (1,1) on the 3-dimensional differentiable manifold Sigma
We may check that the hypersurface $\Sigma$ is maximal, i.e. that $K^k_{\ \, k} = 0$:
trK = Ku.trace()
print(trK)
Scalar field zero on the 3-dimensional differentiable manifold Sigma
Let us call $D$ the Levi-Civita connection associated with $\gamma$:
D = gam.connection(name='D')
print(D) ; D
Levi-Civita connection D associated with the Riemannian metric gam on the 3-dimensional differentiable manifold Sigma
The Ricci tensor associated with $\gamma$:
Ric = gam.ricci()
print(Ric) ; Ric
Field of symmetric bilinear forms Ric(gam) on the 3-dimensional differentiable manifold Sigma
Ric[1,1]
Ric[1,2]
Ric[1,3]
Ric[2,2]
Ric[2,3]
Ric[3,3]
The scalar curvature $R = \gamma^{ij} R_{ij}$:
R = gam.ricci_scalar(name='R')
print(R)
R.display()
Scalar field R on the 3-dimensional differentiable manifold Sigma
Let us check that the vacuum 3+1 Einstein equations are satisfied.
We start by the contraint equations:
Let us first evaluate the term $K_{ij} K^{ij}$:
Kuu = Ku.up(gam, 1)
trKK = K['_ij']*Kuu['^ij']
print(trKK) ; trKK.display()
Scalar field on the 3-dimensional differentiable manifold Sigma
The vacuum Hamiltonian constraint equation is $$R + K^2 -K_{ij} K^{ij} = 0 $$
Ham = R + trK^2 - trKK
print(Ham) ; Ham.display()
Scalar field zero on the 3-dimensional differentiable manifold Sigma
In vaccum, the momentum constraint is $$ D_j K^j_{\ \, i} - D_i K = 0 $$
mom = D(Ku).trace(0,2) - D(trK)
print(mom)
mom.display()
1-form on the 3-dimensional differentiable manifold Sigma
Let us first evaluate the symmetric bilinear form $k_{ij} := K_{ik} K^k_{\ \, j}$:
KK = K['_ik']*Ku['^k_j']
print(KK)
Tensor field of type (0,2) on the 3-dimensional differentiable manifold Sigma
KK1 = KK.symmetrize()
KK == KK1
KK = KK1
print(KK)
Field of symmetric bilinear forms on the 3-dimensional differentiable manifold Sigma
KK[1,1]
KK[1,2]
KK[1,3]
KK[2,2]
KK[2,3]
KK[3,3]
In vacuum and for stationary spacetimes, the dynamical Einstein equations are $$ \mathcal{L}_\beta K_{ij} - D_i D_j N + N \left( R_{ij} + K K_{ij} - 2 K_{ik} K^k_{\ \, j}\right) = 0 $$
dyn = K.lie_der(b) - D(D(N)) + N*( Ric + trK*K - 2*KK )
print(dyn)
dyn.display()
Tensor field of type (0,2) on the 3-dimensional differentiable manifold Sigma
Hence, we have checked that all the vacuum 3+1 Einstein equations are fulfilled.
The electric part is the bilinear form $E$ given by $$E_{ij} = R_{ij} + K K_{ij} - K_{ik} K^k_{\ \, j} $$
E = Ric + trK*K - KK
print(E)
Field of symmetric bilinear forms on the 3-dimensional differentiable manifold Sigma
E[1,1]
E[1,1].factor()
E[1,2]
E[1,2].factor()
E[1,3]
E[2,2]
E[2,2].factor()
E[2,3]
E[3,3]
E[3,3].factor()
The magnetic part is the bilinear form $B$ defined by $$ B_{ij} = \epsilon^k_{\ \, l i} D_k K^l_{\ \, j}, $$
where $\epsilon^k_{\ \, l i}$ are the components of the type-(1,2) tensor $\epsilon^\sharp$, related to the Levi-Civita alternating tensor $\epsilon$ associated with $\gamma$ by $\epsilon^k_{\ \, l i} = \gamma^{km} \epsilon_{m l i}$. In SageManifolds, $\epsilon$ is obtained by the command volume_form() and $\epsilon^\sharp$ by the command volume_form(1) (1 = 1 index raised):
eps = gam.volume_form()
print(eps) ; eps.display()
3-form eps_gam on the 3-dimensional differentiable manifold Sigma
epsu = gam.volume_form(1)
print(epsu) ; epsu.display()
Tensor field of type (1,2) on the 3-dimensional differentiable manifold Sigma
DKu = D(Ku)
B = epsu['^k_li']*DKu['^l_jk']
print(B)
Tensor field of type (0,2) on the 3-dimensional differentiable manifold Sigma
Let us check that $B$ is symmetric:
B1 = B.symmetrize()
B == B1
Accordingly, we set
B = B1
B.set_name('B')
print(B)
Field of symmetric bilinear forms B on the 3-dimensional differentiable manifold Sigma
B[1,1]
B[1,1].factor()
B[1,2]
B[1,2].factor()
B[1,3]
B[2,2]
B[2,2].factor()
B[2,3]
B[3,3]
B[3,3].factor()
We follow the computation presented in arXiv:1412.6542. We start by the tensor $E^\sharp$ of components $E^i_ {\ \, j}$:
Eu = E.up(gam, 0)
print(Eu)
Tensor field of type (1,1) on the 3-dimensional differentiable manifold Sigma
Tensor $B^\sharp$ of components $B^i_{\ \, j}$:
Bu = B.up(gam, 0)
print(Bu)
Tensor field of type (1,1) on the 3-dimensional differentiable manifold Sigma
1-form $\beta^\flat$ of components $\beta_i$ and its exterior derivative:
bd = b.down(gam)
xdb = bd.exterior_derivative()
print(xdb) ; xdb.display()
2-form on the 3-dimensional differentiable manifold Sigma
Scalar square of shift $\beta_i \beta^i$:
b2 = bd(b)
print(b2) ; b2.display()
Scalar field on the 3-dimensional differentiable manifold Sigma
Scalar $Y = E(\beta,\beta) = E_{ij} \beta^i \beta^j$:
Ebb = E(b,b)
Y = Ebb
print(Y) ; Y.display()
Scalar field on the 3-dimensional differentiable manifold Sigma
Ebb.coord_function().factor()
Ebb.display()
Scalar $\bar Y = B(\beta,\beta) = B_{ij}\beta^i \beta^j$:
Bbb = B(b,b)
Y_bar = Bbb
print(Y_bar) ; Y_bar.display()
Scalar field B(beta,beta) on the 3-dimensional differentiable manifold Sigma
Bbb.coord_function().factor()
1-form of components $Eb_i = E_{ij} \beta^j$:
Eb = E.contract(b)
print(Eb) ; Eb.display()
1-form on the 3-dimensional differentiable manifold Sigma
Vector field of components $Eub^i = E^i_{\ \, j} \beta^j$:
Eub = Eu.contract(b)
print(Eub) ; Eub.display()
Vector field on the 3-dimensional differentiable manifold Sigma
1-form of components $Bb_i = B_{ij} \beta^j$:
Bb = B.contract(b)
print(Bb) ; Bb.display()
1-form on the 3-dimensional differentiable manifold Sigma
Vector field of components $Bub^i = B^i_{\ \, j} \beta^j$:
Bub = Bu.contract(b)
print(Bub) ; Bub.display()
Vector field on the 3-dimensional differentiable manifold Sigma
Vector field of components $Kub^i = K^i_{\ \, j} \beta^j$:
Kub = Ku.contract(b)
print(Kub) ; Kub.display()
Vector field on the 3-dimensional differentiable manifold Sigma
T = 2*b(N) - 2*K(b,b)
print(T) ; T.display()
Scalar field zero on the 3-dimensional differentiable manifold Sigma
Db = D(b) # Db^i_j = D_j b^i
Dbu = Db.up(gam, 1) # Dbu^{ij} = D^j b^i
bDb = b*Dbu # bDb^{ijk} = b^i D^k b^j
T_bar = eps['_ijk']*bDb['^ikj']
print(T_bar) ; T_bar.display()
Scalar field zero on the 3-dimensional differentiable manifold Sigma
epsb = eps.contract(b)
print(epsb)
epsb.display()
2-form on the 3-dimensional differentiable manifold Sigma
epsB = eps['_ijl']*Bu['^l_k']
print(epsB)
Tensor field of type (0,3) on the 3-dimensional differentiable manifold Sigma
epsB.symmetries()
no symmetry; antisymmetry: (0, 1)
epsB[1,2,3]
Z = 2*N*( D(N) -K.contract(b)) + b.contract(xdb)
print(Z) ; Z.display()
1-form on the 3-dimensional differentiable manifold Sigma
DNu = D(N).up(gam)
A = 2*(DNu - Ku.contract(b))*b + N*Dbu
Z_bar = eps['_ijk']*A['^kj']
print(Z_bar) ; Z_bar.display()
1-form on the 3-dimensional differentiable manifold Sigma
# Test:
Dbdu = D(bd).up(gam,1).up(gam,1) # (Db)^{ij} = D^i b^j
A = 2*b*(DNu - Ku.contract(b)) + N*Dbdu
Z_bar0 = eps['_ijk']*A['^jk'] # NB: '^jk' and not 'kj'
Z_bar0 == Z_bar
W = N*Eb + epsb.contract(Bub)
print(W) ; W.display()
1-form on the 3-dimensional differentiable manifold Sigma
W_bar = N*Bb - epsb.contract(Eub)
print(W_bar) ; W_bar.display()
1-form on the 3-dimensional differentiable manifold Sigma
W[3].factor()
W_bar[3].factor()
M = - 4*Eb(Kub - DNu) - 2*(epsB['_ij.']*Dbu['^ji'])(b)
print(M) ; M.display()
Scalar field zero on the 3-dimensional differentiable manifold Sigma
M_bar = 2*(eps.contract(Eub))['_ij']*Dbu['^ji'] - 4*Bb(Kub - DNu)
print(M_bar) ; M_bar.display()
Scalar field zero on the 3-dimensional differentiable manifold Sigma
A = epsB['_ilk']*b['^l'] + epsB['_ikl']*b['^l'] \
+ Bu['^m_i']*epsb['_mk'] - 2*N*E
xdbE = xdb['_kl']*Eu['^k_i']
L = 2*N*epsB['_kli']*Dbu['^kl'] + 2*xdb['_ij']*Eub['^j'] \
+ 2*xdbE['_li']*b['^l'] + 2*A['_ik']*(Kub - DNu)['^k']
print(L)
1-form on the 3-dimensional differentiable manifold Sigma
L[1]
L[1].factor()
L[2]
L[2].factor()
L[3]
N2pbb = N^2 + b2
V = N2pbb*E - 2*(b.contract(E)*bd).symmetrize() + Ebb*gam \
+ 2*N*(b.contract(epsB).symmetrize())
print(V)
Field of symmetric bilinear forms on the 3-dimensional differentiable manifold Sigma
V[1,1]
V[1,1].factor()
V[1,2]
V[1,2].factor()
V[1,3]
V[2,2]
V[2,2].factor()
V[2,3]
V[3,3]
V[3,3].factor()
beps = b.contract(eps)
V_bar = N2pbb*B - 2*(b.contract(B)*bd).symmetrize() + Bbb*gam \
- 2*N*(beps['_il']*Eu['^l_j']).symmetrize()
print(V_bar)
Field of symmetric bilinear forms on the 3-dimensional differentiable manifold Sigma
V_bar[1,1]
V_bar[1,1].factor()
V_bar[1,2]
V_bar[1,2].factor()
V_bar[1,3]
V_bar[2,2]
V_bar[2,2].factor()
V_bar[2,3]
V_bar[3,3]
V_bar[3,3].factor()
G = (N^2 - b2)*gam + bd*bd
print(G)
Field of symmetric bilinear forms on the 3-dimensional differentiable manifold Sigma
G.display()
We follow Eqs. (77)-(80) of arXiv:1412.6542:
S1 = (4*(V*Z - V_bar*Z_bar) + G*L).antisymmetrize(1,2)
print(S1)
Tensor field of type (0,3) on the 3-dimensional differentiable manifold Sigma
S1.display()
S2 = 4*(T*V - T_bar*V_bar - W*Z + W_bar*Z_bar) + M*G \
- N*bd*L
print(S2)
Tensor field of type (0,2) on the 3-dimensional differentiable manifold Sigma
S2.display()
S3 = (4*(W*Z - W_bar*Z_bar) + N*bd*L).antisymmetrize()
print(S3)
2-form on the 3-dimensional differentiable manifold Sigma
S3.display()
S2[3,1] == -2*S3[3,1]
S2[3,2] == -2*S3[3,2]
S4 = 4*(T*W - T_bar*W_bar) -4*(Y*Z - Y_bar*Z_bar) + N*M*bd \
- b2*L
print(S4)
1-form on the 3-dimensional differentiable manifold Sigma
S4.display()
Hence all the tensors $S^1$, $S^2$, $S^3$ and $S^4$ involved in the 3+1 decomposition of the real part of the Simon-Mars are zero, as they should since the Simon-Mars tensor vanishes identically for the Kerr spacetime.
We follow Eqs. (82)-(85) of arXiv:1412.6542.
epsE = eps['_ijl']*Eu['^l_k']
print(epsE)
Tensor field of type (0,3) on the 3-dimensional differentiable manifold Sigma
A = - epsE['_ilk']*b['^l'] - epsE['_ikl']*b['^l'] \
- Eu['^m_i']*epsb['_mk'] - 2*N*B
xdbB = xdb['_kl']*Bu['^k_i']
L_bar = - 2*N*epsE['_kli']*Dbu['^kl'] \
+ 2*xdb['_ij']*Bub['^j'] + 2*xdbB['_li']*b['^l'] \
+ 2*A['_ik']*(Kub - DNu)['^k']
print(L_bar)
1-form on the 3-dimensional differentiable manifold Sigma
L_bar.display()
S1_bar = (4*(V*Z_bar + V_bar*Z) + G*L_bar).antisymmetrize(1,2)
print(S1_bar)
Tensor field of type (0,3) on the 3-dimensional differentiable manifold Sigma
S1_bar.display()
S2_bar = 4*(T_bar*V + T*V_bar) - 4*(W*Z_bar + W_bar*Z) \
+ M_bar*G - N*bd*L_bar
print(S2_bar)
Tensor field of type (0,2) on the 3-dimensional differentiable manifold Sigma
S2_bar.display()
S3_bar = (4*(W*Z_bar + W_bar*Z) + N*bd*L_bar).antisymmetrize()
print(S3_bar)
2-form on the 3-dimensional differentiable manifold Sigma
S3_bar.display()
S4_bar = 4*(T_bar*W + T*W_bar - Y*Z_bar - Y_bar*Z) \
+ M_bar*N*bd - b2*L_bar
print(S4_bar)
1-form on the 3-dimensional differentiable manifold Sigma
S4_bar.display()
Hence all the tensors ${\bar S}^1$, ${\bar S}^2$, ${\bar S}^3$ and ${\bar S}^4$ involved in the 3+1 decomposition of the imaginary part of the Simon-Mars are zero, as they should since the Simon-Mars tensor vanishes identically for the Kerr spacetime.