#!/usr/bin/env python # coding: utf-8 # # 5-dimensional Lifshitz spacetimes # This worksheet illustrates some features of [SageManifolds](http://sagemanifolds.obspm.fr) (v0.8) on computations regarding Lifshitz spacetimes. # # It is based on the following articles: # - I. Ya. Aref'eva & A. A. Golubtsova, # [JHEP 2015(04), 011 (2015)](http://link.springer.com/article/10.1007/JHEP04%282015%29011) # - I. Ya. Aref'eva, A. A. Golubtsova & E. Gourgoulhon, in preparation # First we set up the notebook to display mathematical objects using LaTeX formatting: # In[1]: get_ipython().run_line_magic('display', 'latex') # ## Spacetime and metric tensor # # Let us declare the spacetime $M$ as a 5-dimensional manifold: # In[2]: M = Manifold(5, 'M') print M # We introduce a first coordinate system on $M$: # In[3]: X0. = M.chart('t x y1:y_1 y2:y_2 R:(0,+oo)') X0 # Let us consider the following Lifshitz-symmetric metric, parametrized by some real number $\nu$: # In[4]: g = M.lorentz_metric('g') var('nu', latex_name=r'\nu', domain='real') g[0,0] = -R^(2*nu) g[1,1] = R^(2*nu) g[2,2] = R^2 g[3,3] = R^2 g[4,4] = 1/R^2 g.display() # A matrix view of the metric components: # In[5]: g[:] # This metric is invariant under the *Lifshitz scaling* # $$ (t,x,y_1,y_2,R) \longmapsto \left(\lambda^\nu t, \lambda^\nu x, \lambda y_1, \lambda y_2, \frac{R}{\lambda} \right)$$ # - If $\nu=1$ the scaling is isotropic and we recognize the metric # of $\mathrm{AdS}_5$ in Poincaré coordinates # - If $\nu\not=1$, the scaling is anisotropic # Let us introduce a second coordinate system on $M$: # In[6]: X. = M.chart('t x y1:y_1 y2:y_2 r:(0,+oo)') X # and relate it to the previous one by the transformation $r=\ln R$: # In[7]: X0_to_X = X0.transition_map(X, [t, x, y1, y2, ln(R)]) X0_to_X.display() # The inverse coordinate transition is computed by means of the method `inverse()`: # In[8]: X_to_X0 = X0_to_X.inverse() X_to_X0.display() # At this stage, the manifold's atlas defined by the user is # In[9]: M.atlas() # and the list of defined vector frames defined is # In[10]: M.frames() # The expression of the metric in terms of the new coordinates is # In[11]: g.display(X.frame(), X) # or, in matrix view: # In[12]: g[X.frame(),:,X] # To access to a particular component, we have to specify (i) the frame w.r.t. which it is defined and (ii) the coordinates in which the component is expressed: # In[13]: g[X.frame(),0,0,X] # In[14]: g[X.frame(),0,0] # the default chart is used # From now on, let us consider the coordinates $X = (t,x,y_1,y_2,r)$ as the default ones on the manifold $M$: # In[15]: M.set_default_chart(X) M.set_default_frame(X.frame()) # Then # In[16]: g.display() # In[17]: g[:] # In[18]: g[0,0] # In[19]: g.display_comp() # ## Curvature # # The Riemann tensor is # In[20]: Riem = g.riemann() print Riem # In[21]: Riem.display_comp(only_nonredundant=True) # The Ricci tensor: # In[22]: Ric = g.ricci() print Ric # In[23]: Ric.display() # In[24]: Ric.display_comp() # The Ricci scalar: # In[25]: Rscal = g.ricci_scalar() print Rscal # In[26]: Rscal.display() # We note that the Ricci scalar is constant. # ## Source model # 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) + \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)}$$ # ## The dilaton scalar field # # We consider the following ansatz for the dilaton scalar field $\phi$: # $$ \phi = \frac{1}{\lambda} \left( 4 r + \ln\mu \right),$$ # where $\lambda$ and $\mu$ are two constants. # In[27]: var('mu', latex_name=r'\mu') var('lamb', latex_name=r'\lambda') 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 # In[28]: dphi = phi.differential() print dphi # In[29]: dphi.display() # In[30]: dphi[:] # all the components in the default frame # ## The 2-form field # # 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$: # In[31]: X.coframe() # In[32]: dy1 = X.coframe()[2] dy2 = X.coframe()[3] print dy1 print dy2 dy1, dy2 # We can then form $F$ according to the above ansatz: # In[33]: var('q') F = q/2 * dy1.wedge(dy2) F.set_name('F') print F F.display() # By construction, the 2-form $F$ is closed (since $q$ is constant): # In[34]: print xder(F) # In[35]: xder(F).display() # Let us evaluate the square $F_{mn} F^{mn}$ of $F$: # In[36]: Fu = F.up(g) print Fu Fu.display() # In[37]: F2 = F['_{mn}']*Fu['^{mn}'] # using LaTeX notations to denote contraction print F2 F2.display() # We shall also need the tensor $\mathcal{F}_{mn} = F_{mp} F_n^{\ \, p}$: # In[38]: FF = F['_mp'] * F.up(g,1)['^p_n'] print FF FF.display() # The tensor field $\mathcal{F}$ is symmetric: # In[39]: FF == FF.symmetrize() # Therefore, from now on, we set # In[40]: FF = FF.symmetrize() # ## Field equations # # ### Einstein equation # # Let us first introduce the cosmological constant: # In[41]: var('Lamb', latex_name=r'\Lambda') # From the action (1), the field equation for the metric $g$ is # $$ # R_{mn} + \frac{\Lambda}{3} \, 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 # In[42]: EE = Ric + 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 # In[43]: EE.display_comp(only_nonredundant=True) # We note that `EE==0` leads to only 3 independent equations: # In[44]: eq1 = (EE[0,0]/exp(2*nu*r)).expr() eq1 # In[45]: eq2 = (EE[2,2]/exp(2*r)).expr() eq2 # In[46]: eq3 = EE[4,4].expr().expand() eq3 # ### Dilaton field equation # # First we evaluate $\nabla_m \nabla^m \phi$: # In[47]: nab = g.connection() print nab nab # In[48]: box_phi = nab(nab(phi).up(g)).trace() print box_phi box_phi.display() # 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 # In[49]: DE = box_phi - lamb/4*exp(lamb*phi) * F2 print DE # In[50]: DE.display() # Hence the dilaton field equation provides a fourth equation: # In[51]: eq4 = DE.expr().expand() eq4 # ### Maxwell equation # # From the action (1), the field equation for $F$ is # $$ \nabla_m \left( e^{\lambda\phi} F^{mn} \right)= 0 $$ # We write it as # # ME == 0 # # with `ME` defined by # In[52]: ME = nab(exp(lamb*phi)*Fu).trace(0,2) print ME ME.display() # We get identically zero; indeed the tensor $\nabla_p (e^{\lambda\phi} F^{mn})$ has a vanishing trace, as we can check: # In[53]: nab(exp(lamb*phi)*Fu).display() # ### Summary # # We have 4 equations involving the constants $\lambda$, $\mu$, $\nu$, $q$ and $\Lambda$: # In[54]: eq1 == 0 # In[55]: eq2 == 0 # In[56]: eq3 == 0 # In[57]: eq4 == 0 # ## Solution for $\nu=1$ ($\mathrm{AdS}_5$) # In[58]: eqs = [eq1, eq2, eq3, eq4] neqs = [eq.subs(nu=1) for eq in eqs] # In[59]: [eq == 0 for eq in neqs] # In[60]: solve([eq == 0 for eq in neqs], lamb, mu, Lamb, q) # Hence there is no solution for $\mathrm{AdS}_5$ with the above ansatz. # ## Solution for $\nu = 2$ # In[61]: neqs = [eq.subs(nu=2) for eq in eqs] [eq == 0 for eq in neqs] # In[62]: solve([eq == 0 for eq in neqs], lamb, mu, Lamb, q) # Hence there are two families of solutions, each famility being parametrized by e.g. $q$. # ## Solution for $\nu = 4$ # In[63]: neqs = [eq.subs(nu=4) for eq in eqs] [eq == 0 for eq in neqs] # In[64]: solve([eq == 0 for eq in neqs], lamb, mu, Lamb, q) # Hence there are two families of solutions, each family being parametrized by e.g. $q$. # In[ ]: