# 3+1 Simon-Mars tensor in Kerr spacetime¶

This worksheet demonstrates a few capabilities of SageManifolds (version 1.2, as included in SageMath 8.2) 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 8.2 is required to run this worksheet:

In [1]:
version()

Out[1]:
'SageMath version 8.2, Release Date: 2018-05-05'

First we set up the notebook to display mathematical objects using LaTeX rendering:

In [2]:
%display latex


Since some computations are quite long, we ask for running them in parallel on 8 cores:

In [3]:
Parallelism().set(nproc=8)


## Spacelike hypersurface¶

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 Riemannian manifold:

In [4]:
Sig = Manifold(3, 'Sigma', latex_name=r'\Sigma',
structure='Riemannian', metric_name='gam',
metric_latex_name=r'\gamma', start_index=1)


On $\Sigma$, we consider the "rational-polynomial" coordinates $(r,y,\phi)$ inheritated from the standard Boyer-Lindquist coordinates $(t,r,\theta,\phi)$ of Kerr spacetime, via $y=\cos\theta$:

In [5]:
X.<r,y,ph> = Sig.chart(r'r:(1,+oo) y:(-1,1) ph:(0,2*pi):\phi')
print(X) ; X

Chart (Sigma, (r, y, ph))

Out[5]:

The two Kerr parameters:

In [6]:
var('m, a', domain='real')
assume(m > 0)
assume(a > 0)
assume(a^2-2*m*r+r^2 > 0)  # region where Sigma is spacelike


### Riemannian metric on $\Sigma$

The variables introduced so far satisfy the following assumptions:

Without any loss of generality (for $m\not =0$), we may set $m=1$:

In [7]:
#m=1
#assume(a<1)

In [8]:
#a=1 # extreme Kerr


The variables introduced so far obey the following assumptions:

In [9]:
assumptions()

Out[9]:

Some shortcut notations:

In [10]:
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$:

In [11]:
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()

Out[11]:

A matrix view of the components w.r.t. coordinates $(r,y,\phi)$:

In [12]:
gam[:]

Out[12]:

### Lapse function and shift vector

In [13]:
N = Sig.scalar_field(sqrt(Del / BB2), name='N')
print(N)
N.display()

Scalar field N on the 3-dimensional Riemannian manifold Sigma

Out[13]:
In [14]:
b = Sig.vector_field('beta', latex_name=r'\beta')
b[3] = -2*m*r*a/AA2
# unset components are zero
b.display()

Out[14]:

### Extrinsic curvature of $\Sigma$

We use the formula $$K_{ij} = \frac{1}{2N} \mathcal{L}_{\beta} \gamma_{ij}$$ which is valid for any stationary spacetime:

In [15]:
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 Riemannian manifold Sigma

Out[15]:

Check (comparison with known formulas):

In [16]:
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

Out[16]:
In [17]:
K[1,3] - Krp

Out[17]:
In [18]:
Kyp = 2*m*r*a^3*(1-y^2)*y*sqrt(Del)/rho2^2/sqrt(BB2)
Kyp

Out[18]:
In [19]:
K[2,3] - Kyp

Out[19]:

For now on, we use the expressions Krp and Kyp above for $K_{r\phi}$ and $K_{ry}$, respectively:

In [20]:
K1 = Sig.sym_bilin_form_field('K')
K1[1,3] = Krp
K1[2,3] = Kyp
K = K1
K.display()

Out[20]:

The type-(1,1) tensor $K^\sharp$ of components $K^i_{\ \, j} = \gamma^{ik} K_{kj}$:

In [21]:
Ku = K.up(gam, 0)
print(Ku) ; Ku.display()

Tensor field of type (1,1) on the 3-dimensional Riemannian manifold Sigma

Out[21]:

We may check that the hypersurface $\Sigma$ is maximal, i.e. that $K^k_{\ \, k} = 0$:

In [22]:
trK = Ku.trace()
print(trK)

Scalar field zero on the 3-dimensional Riemannian manifold Sigma


### Connection and curvature

Let us call $D$ the Levi-Civita connection associated with $\gamma$:

In [23]:
D = gam.connection(name='D')
print(D) ; D

Levi-Civita connection D associated with the Riemannian metric gam on the 3-dimensional Riemannian manifold Sigma

Out[23]:

The Ricci tensor associated with $\gamma$:

In [24]:
Ric = gam.ricci()
print(Ric) ; Ric

Field of symmetric bilinear forms Ric(gam) on the 3-dimensional Riemannian manifold Sigma

Out[24]:
In [25]:
Ric[1,1]

Out[25]:
In [26]:
Ric[1,2]

Out[26]:
In [27]:
Ric[1,3]

Out[27]:
In [28]:
Ric[2,2]

Out[28]:
In [29]:
Ric[2,3]

Out[29]:
In [30]:
Ric[3,3]

Out[30]:

The scalar curvature $R = \gamma^{ij} R_{ij}$:

In [31]:
R = gam.ricci_scalar(name='R')
print(R)
R.display()

Scalar field R on the 3-dimensional Riemannian manifold Sigma

Out[31]:

## Test: 3+1 Einstein equations

Let us check that the vacuum 3+1 Einstein equations are satisfied.

We start by the contraint equations:

### Hamiltonian constraint

Let us first evaluate the term $K_{ij} K^{ij}$:

In [32]:
Kuu = Ku.up(gam, 1)
trKK = K['_ij']*Kuu['^ij']
print(trKK) ; trKK.display()

Scalar field on the 3-dimensional Riemannian manifold Sigma

Out[32]:

The vacuum Hamiltonian constraint equation is $$R + K^2 -K_{ij} K^{ij} = 0$$

In [33]:
Ham = R + trK^2 - trKK
print(Ham) ; Ham.display()

Scalar field on the 3-dimensional Riemannian manifold Sigma

Out[33]:

### Momentum constraint

In vaccum, the momentum constraint is $$D_j K^j_{\ \, i} - D_i K = 0$$

In [34]:
mom = D(Ku).trace(0,2) - D(trK)
print(mom)
mom.display()

1-form on the 3-dimensional Riemannian manifold Sigma

Out[34]:

### Dynamical Einstein equations

Let us first evaluate the symmetric bilinear form $k_{ij} := K_{ik} K^k_{\ \, j}$:

In [35]:
KK = K['_ik']*Ku['^k_j']
print(KK)

Tensor field of type (0,2) on the 3-dimensional Riemannian manifold Sigma

In [36]:
KK1 = KK.symmetrize()
KK == KK1

Out[36]:
In [37]:
KK = KK1
print(KK)

Field of symmetric bilinear forms on the 3-dimensional Riemannian manifold Sigma

In [38]:
KK[1,1]

Out[38]:
In [39]:
KK[1,2]

Out[39]:
In [40]:
KK[1,3]

Out[40]:
In [41]:
KK[2,2]

Out[41]:
In [42]:
KK[2,3]

Out[42]:
In [43]:
KK[3,3]

Out[43]:

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$$

In [44]:
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 Riemannian manifold Sigma

Out[44]:

Hence, we have checked that all the vacuum 3+1 Einstein equations are fulfilled.

## Electric and magnetic parts of the Weyl tensor

The electric part is the bilinear form $E$ given by $$E_{ij} = R_{ij} + K K_{ij} - K_{ik} K^k_{\ \, j}$$

In [45]:
E = Ric + trK*K - KK
print(E)

Field of symmetric bilinear forms on the 3-dimensional Riemannian manifold Sigma

In [46]:
E[1,1]

Out[46]:
In [47]:
E[1,1].factor()

Out[47]:
In [48]:
E[1,2]

Out[48]:
In [49]:
E[1,2].factor()

Out[49]:
In [50]:
E[1,3]

Out[50]:
In [51]:
E[2,2]

Out[51]:
In [52]:
E[2,2].factor()

Out[52]:
In [53]:
E[2,3]

Out[53]:
In [54]:
E[3,3]

Out[54]:
In [55]:
E[3,3].factor()

Out[55]:

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):

In [56]:
eps = gam.volume_form()
print(eps) ; eps.display()

3-form eps_gam on the 3-dimensional Riemannian manifold Sigma

Out[56]:
In [57]:
epsu = gam.volume_form(1)
print(epsu) ; epsu.display()

Tensor field of type (1,2) on the 3-dimensional Riemannian manifold Sigma

Out[57]:
In [58]:
DKu = D(Ku)
B = epsu['^k_li']*DKu['^l_jk']
print(B)

Tensor field of type (0,2) on the 3-dimensional Riemannian manifold Sigma


Let us check that $B$ is symmetric:

In [59]:
B1 = B.symmetrize()
B == B1

Out[59]:

Accordingly, we set

In [60]:
B = B1
B.set_name('B')
print(B)

Field of symmetric bilinear forms B on the 3-dimensional Riemannian manifold Sigma

In [61]:
B[1,1]

Out[61]:
In [62]:
B[1,1].factor()

Out[62]:
In [63]:
B[1,2]

Out[63]:
In [64]:
B[1,2].factor()

Out[64]:
In [65]:
B[1,3]

Out[65]:
In [66]:
B[2,2]

Out[66]:
In [67]:
B[2,2].factor()

Out[67]:
In [68]:
B[2,3]

Out[68]:
In [69]:
B[3,3]

Out[69]:
In [70]:
B[3,3].factor()

Out[70]:

## 3+1 decomposition of the Simon-Mars tensor

We follow the computation presented in arXiv:1412.6542. We start by the tensor $E^\sharp$ of components $E^i_ {\ \, j}$:

In [71]:
Eu = E.up(gam, 0)
print(Eu)

Tensor field of type (1,1) on the 3-dimensional Riemannian manifold Sigma


Tensor $B^\sharp$ of components $B^i_{\ \, j}$:

In [72]:
Bu = B.up(gam, 0)
print(Bu)

Tensor field of type (1,1) on the 3-dimensional Riemannian manifold Sigma


1-form $\beta^\flat$ of components $\beta_i$ and its exterior derivative:

In [73]:
bd = b.down(gam)
xdb = bd.exterior_derivative()
print(xdb) ; xdb.display()

2-form on the 3-dimensional Riemannian manifold Sigma

Out[73]:

Scalar square of shift $\beta_i \beta^i$:

In [74]:
b2 = bd(b)
print(b2) ; b2.display()

Scalar field on the 3-dimensional Riemannian manifold Sigma

Out[74]:

Scalar $Y = E(\beta,\beta) = E_{ij} \beta^i \beta^j$:

In [75]:
Ebb = E(b,b)
Y = Ebb
print(Y) ; Y.display()

Scalar field on the 3-dimensional Riemannian manifold Sigma

Out[75]:
In [76]:
Ebb.coord_function().factor()

Out[76]:
In [77]:
Ebb.display()

Out[77]:

Scalar $\bar Y = B(\beta,\beta) = B_{ij}\beta^i \beta^j$:

In [78]:
Bbb = B(b,b)
Y_bar = Bbb
print(Y_bar) ; Y_bar.display()

Scalar field B(beta,beta) on the 3-dimensional Riemannian manifold Sigma

Out[78]:
In [79]:
Bbb.coord_function().factor()

Out[79]:

1-form of components $Eb_i = E_{ij} \beta^j$:

In [80]:
Eb = E.contract(b)
print(Eb) ; Eb.display()

1-form on the 3-dimensional Riemannian manifold Sigma

Out[80]:

Vector field of components $Eub^i = E^i_{\ \, j} \beta^j$:

In [81]:
Eub = Eu.contract(b)
print(Eub) ; Eub.display()

Vector field on the 3-dimensional Riemannian manifold Sigma

Out[81]:

1-form of components $Bb_i = B_{ij} \beta^j$:

In [82]:
Bb = B.contract(b)
print(Bb) ; Bb.display()

1-form on the 3-dimensional Riemannian manifold Sigma

Out[82]:

Vector field of components $Bub^i = B^i_{\ \, j} \beta^j$:

In [83]:
Bub = Bu.contract(b)
print(Bub) ; Bub.display()

Vector field on the 3-dimensional Riemannian manifold Sigma

Out[83]:

Vector field of components $Kub^i = K^i_{\ \, j} \beta^j$:

In [84]:
Kub = Ku.contract(b)
print(Kub) ; Kub.display()

Vector field on the 3-dimensional Riemannian manifold Sigma

Out[84]:
In [85]:
T = 2*b(N) - 2*K(b,b)
print(T) ; T.display()

Scalar field on the 3-dimensional Riemannian manifold Sigma

Out[85]:
In [86]:
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 Riemannian manifold Sigma

Out[86]:
In [87]:
epsb = eps.contract(b)
print(epsb)
epsb.display()

2-form on the 3-dimensional Riemannian manifold Sigma

Out[87]:
In [88]:
epsB = eps['_ijl']*Bu['^l_k']
print(epsB)

Tensor field of type (0,3) on the 3-dimensional Riemannian manifold Sigma

In [89]:
epsB.symmetries()

no symmetry; antisymmetry: (0, 1)

In [90]:
epsB[1,2,3]

Out[90]:
In [91]:
Z = 2*N*( D(N)  -K.contract(b)) + b.contract(xdb)
print(Z) ; Z.display()

1-form on the 3-dimensional Riemannian manifold Sigma

Out[91]:
In [92]:
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 Riemannian manifold Sigma

Out[92]:
In [93]:
# 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

Out[93]:
In [94]:
W = N*Eb + epsb.contract(Bub)
print(W) ; W.display()

1-form on the 3-dimensional Riemannian manifold Sigma

Out[94]:
In [95]:
W_bar = N*Bb - epsb.contract(Eub)
print(W_bar) ; W_bar.display()

1-form on the 3-dimensional Riemannian manifold Sigma

Out[95]:
In [96]:
W[3].factor()

Out[96]:
In [97]:
W_bar[3].factor()

Out[97]:
In [98]:
M = - 4*Eb(Kub - DNu) - 2*(epsB['_ij.']*Dbu['^ji'])(b)
print(M) ; M.display()

Scalar field on the 3-dimensional Riemannian manifold Sigma

Out[98]:
In [99]:
M_bar = 2*(eps.contract(Eub))['_ij']*Dbu['^ji'] - 4*Bb(Kub - DNu)
print(M_bar) ; M_bar.display()

Scalar field on the 3-dimensional Riemannian manifold Sigma

Out[99]:
In [100]:
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 Riemannian manifold Sigma

In [101]:
L[1]

Out[101]:
In [102]:
L[1].factor()

Out[102]:
In [103]:
L[2]

Out[103]:
In [104]:
L[2].factor()

Out[104]:
In [105]:
L[3]

Out[105]:
In [106]:
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 Riemannian manifold Sigma

In [107]:
V[1,1]

Out[107]:
In [108]:
V[1,1].factor()

Out[108]:
In [109]:
V[1,2]

Out[109]:
In [110]:
V[1,2].factor()

Out[110]:
In [111]:
V[1,3]

Out[111]:
In [112]:
V[2,2]

Out[112]:
In [113]:
V[2,2].factor()

Out[113]:
In [114]:
V[2,3]

Out[114]:
In [115]:
V[3,3]

Out[115]:
In [116]:
V[3,3].factor()

Out[116]:
In [117]:
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 Riemannian manifold Sigma

In [118]:
V_bar[1,1]

Out[118]:
In [119]:
V_bar[1,1].factor()

Out[119]:
In [120]:
V_bar[1,2]

Out[120]:
In [121]:
V_bar[1,2].factor()

Out[121]:
In [122]:
V_bar[1,3]

Out[122]:
In [123]:
V_bar[2,2]

Out[123]:
In [124]:
V_bar[2,2].factor()

Out[124]:
In [125]:
V_bar[2,3]

Out[125]:
In [126]:
V_bar[3,3]

Out[126]:
In [127]:
V_bar[3,3].factor()

Out[127]:
In [128]:
G = (N^2 - b2)*gam + bd*bd
print(G)

Field of symmetric bilinear forms on the 3-dimensional Riemannian manifold Sigma

In [129]:
G.display()

Out[129]:

### 3+1 decomposition of the real part of the Simon-Mars tensor

We follow Eqs. (77)-(80) of arXiv:1412.6542:

In [130]:
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 Riemannian manifold Sigma

In [131]:
S1.display()

Out[131]:
In [132]:
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 Riemannian manifold Sigma

In [133]:
S2.display()

Out[133]:
In [134]:
S3 = (4*(W*Z - W_bar*Z_bar) + N*bd*L).antisymmetrize()
print(S3)

2-form on the 3-dimensional Riemannian manifold Sigma

In [135]:
S3.display()

Out[135]:
In [136]:
S2[3,1] == -2*S3[3,1]

Out[136]:
In [137]:
S2[3,2] == -2*S3[3,2]

Out[137]:
In [138]:
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 Riemannian manifold Sigma

In [139]:
S4.display()

Out[139]:

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.

### 3+1 decomposition of the imaginary part of the Simon-Mars tensor

We follow Eqs. (82)-(85) of arXiv:1412.6542.

In [140]:
epsE = eps['_ijl']*Eu['^l_k']
print(epsE)

Tensor field of type (0,3) on the 3-dimensional Riemannian manifold Sigma

In [141]:
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 Riemannian manifold Sigma

In [142]:
L_bar.display()

Out[142]:
In [143]:
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 Riemannian manifold Sigma

In [144]:
S1_bar.display()

Out[144]:
In [145]:
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 Riemannian manifold Sigma

In [146]:
S2_bar.display()

Out[146]:
In [147]:
S3_bar = (4*(W*Z_bar + W_bar*Z) + N*bd*L_bar).antisymmetrize()
print(S3_bar)

2-form on the 3-dimensional Riemannian manifold Sigma

In [148]:
S3_bar.display()

Out[148]:
In [149]:
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 Riemannian manifold Sigma

In [150]:
S4_bar.display()

Out[150]:

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.