This SageMath notebook implements some computations of the article
These computations are making use of differential geometry tools developed through the SageManifolds project.
NB: a version of SageMath at least equal to 8.2 is required to run this notebook:
version()
'SageMath version 9.0.beta6, Release Date: 2019-11-18'
First we set up the notebook to display mathematical objects using LaTeX formatting:
%display latex
Let us declare the spacetime $M$ as a 5-dimensional manifold:
M = Manifold(5, 'M', structure='Lorentzian')
print(M)
5-dimensional Lorentzian manifold M
We introduce a first coordinate system on $M$:
X.<t,x,y1,y2,r> = M.chart('t x y1:y_1 y2:y_2 r')
X
g = M.metric()
ff = function('f')(r)
var('nu', latex_name=r'\nu', domain='real')
g[0,0] = -ff*exp(2*nu*r)
g[1,1] = exp(2*nu*r)
g[2,2] = exp(2*r)
g[3,3] = exp(2*r)
g[4,4] = 1/ff
g.display()
A matrix view of the metric components:
g[:]
A view component by component (by default, only the nonzero ones are displayed):
g.display_comp()
Access to a particular component:
g[0,0]
If $f(r)=1$, this metric is invariant under the Lifshitz scaling $$ (t,x,y_1,y_2,e^r) \longmapsto \left(\lambda^\nu t, \lambda^\nu x, \lambda y_1, \lambda y_2, \frac{e^r}{\lambda} \right)$$
The Riemann tensor is
Riem = g.riemann()
print(Riem)
Tensor field Riem(g) of type (1,3) on the 5-dimensional Lorentzian manifold M
Riem.display_comp(only_nonredundant=True)
The Ricci tensor:
Ric = g.ricci()
print(Ric)
Field of symmetric bilinear forms Ric(g) on the 5-dimensional Lorentzian manifold M
Ric.display()
Ric.display_comp()
The Ricci scalar:
Rscal = g.ricci_scalar()
print(Rscal)
Scalar field r(g) on the 5-dimensional Lorentzian manifold M
Rscal.display()
Let us consider a model based on the following action, involving a dilaton scalar field $\phi$ and a Maxwell 2-form $F$:
$$ S = \int \left( R(g) - 2 \Lambda - \frac{1}{2} \nabla_m \phi \nabla^m \phi - \frac{1}{4} e^{\lambda\phi} F_{mn} F^{mn} \right) \sqrt{-g} \, \mathrm{d}^5 x \qquad\qquad \mbox{(1)}$$where $R(g)$ is the Ricci scalar of metric $g$, $\Lambda$ is the cosmological constant and $\lambda$ is the dilatonic coupling constant.
We consider the following ansatz for the dilaton scalar field $\phi$: $$ \phi = \frac{1}{\lambda} \left( 4 r + \ln\mu \right),$$ where $\mu$ is a constant.
var('mu', latex_name=r'\mu', domain='real')
var('lamb', latex_name=r'\lambda', domain='real')
phi = M.scalar_field({X: (4*r + ln(mu))/lamb},
name='phi', latex_name=r'\phi')
phi.display()
The 1-form $\mathrm{d}\phi$ is
dphi = phi.differential()
print(dphi)
1-form dphi on the 5-dimensional Lorentzian manifold M
dphi.display()
dphi[:] # all the components in the default frame
We consider the following ansatz for $F$: $$ F = \frac{1}{2} q \, \mathrm{d}y_1\wedge \mathrm{d}y_2, $$ where $q$ is a constant.
Let us first get the 1-forms $\mathrm{d}y_1$ and $\mathrm{d}y_2$:
X.coframe()
dy1 = X.coframe()[2]
dy2 = X.coframe()[3]
print(dy1)
print(dy2)
dy1, dy2
1-form dy1 on the 5-dimensional Lorentzian manifold M 1-form dy2 on the 5-dimensional Lorentzian manifold M
Then we can form $F$ according to the above ansatz:
var('q', domain='real')
F = q/2 * dy1.wedge(dy2)
F.set_name('F')
print(F)
F.display()
2-form F on the 5-dimensional Lorentzian manifold M
By construction, the 2-form $F$ is closed (since $q$ is constant):
print(F.exterior_derivative())
3-form dF on the 5-dimensional Lorentzian manifold M
F.exterior_derivative().display()
Let us evaluate the square $F_{mn} F^{mn}$ of $F$:
Fu = F.up(g)
print(Fu)
Fu.display()
Tensor field of type (2,0) on the 5-dimensional Lorentzian manifold M
F2 = F['_{mn}']*Fu['^{mn}'] # using LaTeX notations to denote contraction
print(F2)
F2.display()
Scalar field on the 5-dimensional Lorentzian manifold M
We shall also need the tensor $\mathcal{F}_{mn} := F_{mp} F_n^{\ \, p}$:
FF = F['_mp'] * F.up(g,1)['^p_n']
print(FF)
FF.display()
Tensor field of type (0,2) on the 5-dimensional Lorentzian manifold M
The tensor field $\mathcal{F}$ is symmetric:
FF == FF.symmetrize()
Therefore, from now on, we set
FF = FF.symmetrize()
Let us first introduce the cosmological constant:
var('Lamb', latex_name=r'\Lambda', domain='real')
From the action (1), the field equation for the metric $g$ is $$ R_{mn} - \frac{2}{3}\Lambda \, g - \frac{1}{2}\partial_m\phi \partial_n\phi -\frac{1}{2} e^{\lambda\phi} F_{mp} F^{\ \, p}_n + \frac{1}{12} e^{\lambda\phi} F_{rs} F^{rs} \, g_{mn} = 0 $$ We write it as
EE == 0
with EE
defined by
EE = Ric - 2*Lamb/3*g - 1/2* (dphi*dphi) - 1/2*exp(lamb*phi)*FF \
+ 1/12*exp(lamb*phi)*F2*g
EE.set_name('E')
print(EE)
Field of symmetric bilinear forms E on the 5-dimensional Lorentzian manifold M
EE.display_comp(only_nonredundant=True)
We note that EE==0
leads to only 4 independent equations because
EE[2,2] == EE[3,3]
The 4 independent equations are chosen to be
eq0 = EE[0,0]/exp(2*nu*r)
eq0
eq1 = EE[1,1]/exp(2*nu*r)
eq1
eq2 = EE[2,2]/exp(2*r)
eq2
eq3 = EE[4,4]*lamb^2*f(r)
eq3
First we evaluate $\nabla_m \nabla^m \phi$:
box_phi = phi.dalembertian()
print(box_phi)
box_phi.display()
Scalar field Box(phi) on the 5-dimensional Lorentzian manifold M
From the action (1), the field equation for $\phi$ is $$ \nabla_m \nabla^m \phi = \frac{\lambda}{4} e^{\lambda\phi} F_{mn} F^{mn}$$ We write it as
DE == 0
with DE
defined by
DE = box_phi - lamb/4*exp(lamb*phi) * F2
print(DE)
Scalar field on the 5-dimensional Lorentzian manifold M
DE.display()
Hence the dilaton field equation provides a fith equation:
eq4 = DE.coord_function()*lamb
eq4
From the action (1), the field equation for $F$ is $$ \nabla_m \left( e^{\lambda\phi} F^{mn} \right)= 0 $$ To form it, we need the Levi-Civita connection $\nabla$ associated to $g$:
nabla = g.connection()
print(nabla)
nabla
Levi-Civita connection nabla_g associated with the Lorentzian metric g on the 5-dimensional Lorentzian manifold M
We write then the field equation for $F$ as
ME == 0
with ME
defined by
ME = nabla(exp(lamb*phi)*Fu).trace(0,2)
print(ME)
ME.display()
Vector field on the 5-dimensional Lorentzian manifold M
We get identically zero.
The Einstein equation + the dilaton field equation yields a system of 5 equations (eq0, eq1, eq2, eq3, eq4).
Let us show that a solution is obtained for $\nu=2$ and $\nu=4$ with the following specific form of the blackening function:
$$ f(r) = 1 - m e^{-(2\nu +2)r}, $$where $m$ is a constant.
To this aim, we declare
var('m', domain='real')
fm(r) = 1 - m*exp(-(2*nu+2)*r)
fm
and substitute this function for $f(r)$ in all the equations:
eq0m = eq0.expr().substitute_function(f, fm).simplify_full()
eq0m
eq0m = (eq0m * exp(2*nu*r+2*r)).simplify_full()
eq0m
eq1m = eq1.expr().substitute_function(f, fm).simplify_full()
eq1m
eq2m = eq2.expr().substitute_function(f, fm).simplify_full()
eq2m
eq3m = eq3.expr().substitute_function(f, fm).simplify_full()
eq3m
eq3m = (eq3m * exp(2*nu*r+2*r)).simplify_full()
eq3m
eq4m = eq4.expr().substitute_function(f, fm).simplify_full()
eq4m
eqs = [eq0m, eq1m, eq2m, eq3m, eq4m]
neqs = [eq.subs(nu=2).simplify_full() for eq in eqs]
[eq == 0 for eq in neqs]
solve([eq == 0 for eq in neqs], lamb, mu, Lamb)
Hence there are two families of solutions, each family being parametrized by e.g. $(q, m)$.
neqs = [eq.subs(nu=4).simplify_full() for eq in eqs]
[eq == 0 for eq in neqs]
solve([eq == 0 for eq in neqs], lamb, mu, Lamb)
Again we get two families of solutions, each of them being parametrized by $(q, m)$.