Showing posts with label xAct. Show all posts
Showing posts with label xAct. Show all posts

Tuesday, July 15, 2014

Lecture notes on Mathematica

Last week Filippo Guarneri and I gave a daylong lecture series on the venerable topic of Mathematica. We covered topics ranging from basic evaluation and programming techniques to tensor calculus. Needless to say, we've written up a nice set of lectures notes for those of you who weren't there. Feel free to have a look!

Thursday, May 30, 2013

xTras v1.1.3

I've just posted a new version of my Mathematica package xTras. It fixes a couple of bugs and introduces some new functions. One of these functions is MakeTraceless, which takes any tensorial expression and returns its traceless version. For example:
  In:   MakeTraceless[RiemannCD[-a,-b,-c,-d]]
Out:   \( R_{abcd} + \frac{2 R \underset{1234}{Sym}(g_{ac} g_{bd})}{2 -3 d + d^2} + - \frac{4 \underset{1234}{Sym}(g_{bd} R_{ac})}{-2 + d} \)
The output uses the implicit symmetrizations of the SymManipulator package. But we can also symmetrize explicitly by expanding the symmetries:
  In:   ToCanonical@ExpandSym@MakeTraceless[RiemannCD[-a, -b, -c, -d]]
Out:   \(- \frac{g_{bd} R_{ac}}{-2 + d} + \frac{g_{bc} R_{ad}}{-2 + d} + \frac{g_{ad} R_{bc}}{-2 + d}  - \frac{g_{ac} R_{bd}}{-2 + d}  - \frac{g_{ad} g_{bc} R}{2  -3 d + d^2} + \frac{g_{ac} g_{bd} R}{2  -3 d + d^2} + R_{abcd} \)
Of course, this is just the Weyl tensor in d dimensions:
  In:   Simplification@ RiemannToWeyl@ExpandSym@MakeTraceless[RiemannCD[-a, -b, -c, -d]]
Out:  \(W_{abcd} \)
Another new function is ConstructDDIs, which construct dimensional dependent identities (DDIs). Say we have a two-dimensional manifold. We can then ask for a list of all DDIs which have one curvature tensor and two free indices:
  In:   ConstructDDIs[RiemannCD[a,b,c,d],IndexList[a,b]
Out:   \({R^{ab}  - \tfrac{1}{2} g^{ab} R} \)
It returns just one DDI, namely the vanishing of the Einstein tensor. This is well know fact, namely that gravity in two dimensions is purely topological, because the Einstein-Hilbert action is equal to the two-dimensional Euler density.

As always, you can grab the newest version of xTras from its www.xact.es/xtras, or have a look at the changelog for all the new features.

Sunday, December 23, 2012

xTras 1.0.6

Just in time for the holidays, a new version of xTras, my xAct Mathematica package, has hit the selves. Version 1.0.6 updates AllContractions, which should be much faster. You can now compute all possible contractions of your favorite tensors in a reasonable amount of time (provided there aren't too many indices to contract over), like so:
In:    AllContractions[ RiemannCD[a,b,c,d]RiemannCD[e,f,g,h] ];
Out: { \( R^2, R_{ab} R^{ab}, R_{abcd} R^{abcd}, R_{acbd} R^{abcd} \) }
The last two contractions are actually not independent, but are related to each other via the Bianchi identity. But that's a multi-term symmetry, and unfortunately AllContractions doesn't take those into account.

Other functions, such as TensorCollect and SolveConstants should also see some speed improvements. And besides the usual bugfixes there are nice new functions such as SolveTensors (which can solve a system of linear tensorial equations in terms of tensors) and IndexConfigurations. The latter gives all possible independent index configurations of an expression. For example:
In:    IndexConfigurations[ metric[a,b]metric[c,d] ];
Out: { \(g^{ab} g^{cd}, g^{ac} g^{bd}, g^{ad} g^{bc}\) }
Here's another example:
In:    IndexConfigurations[ RiemannCD[a,b,c,d] ];
Out: { \(R^{abcd}, R^{acbd}, R^{adbc} \) }
Note that the three different index configurations of the Riemann tensor are actually not independent due to the Bianchi identity. Like AllContractions, IndexConfigurations doesn't take these multi-term symmetries into account.

xTras 1.0.6 has some more improvements; check the Changelog for details. As usual, the new version can be downloaded from its www.xact.es/xtras.

Wednesday, November 7, 2012

xAct notebooks

I put some notebooks for xAct on my website, at http://www.aei.mpg.de/~nutma/. There's an introductory notebook, and two more advanced ones covering the Noether procedure for spin 2 and some calculations for spin 3. Go have a look!

Update (30-04-2016): the above links are dead, but the majority of material in the notebooks have made its way into the xTras documentation as tutorials. The online version can be found here.

Sunday, March 25, 2012

xTras for xAct

I'm a big fan of xAct, a tensor algebra package for Mathematica. While there are other tensor packages for Mathematica on the market, xAct is by far the best. It canonicalizes tensorial expressions blazingly fast, and its perturbation capabilities are state-of-the-art. If you've always wanted to do second-order perturbations of four-derivative curvature tensors but were afraid the actual calculation might take you some weeks, xAct is your man. It does it in a few seconds, and more importantly, doesn't mess up minus signs.

In fact, I like xAct so much, I wrote an additional package for. It's aptly called xTras, and its available over on www.xact.es/xtras. It brings some functionality that I found missing in xAct, like computing equations of motion for the metric, perturbations around AdS spaces, and Young projectors (yes, this also includes Bianchi identities).

I'll demonstrate some of the new functionality by computing the linearization of the Einstein tensor around AdS spaces. Here goes!
First, open up Mathematica, and enter the following line:
   In:    <<xAct`xTras`
This loads the xTras package (assuming you're managed to download and install it). Next we'll define a manifold and a metric:
   In:    DefConstantSymbol[dimension,PrintAs->"D"]
   In:    DefManifold[M,dimension,IndexRange[a,f]]
   In:    DefMetric[-1,g[-a,-b],CD]
We'll be doing stuff on AdS spaces, which has a constant curvature. Hence we need to define a constant symbol to indicate that curvature:
   In:    DefConstantSymbol[L]
Now we're ready to define the standard Lagrangian for gravity with a cosmological constant:
   In:    lagrangian = RicciScalarCD[] -(dimension-2)(dimension-1)L
We'd like to compute the equations of motion that follow from this Lagrangian. To do so, we first write the command
   In:    DefMetricVariation[g,h,eps]
This command makes it possible to do covariant metric variations. It also registers the command VarL, which varies Lagrangians:
   In:    eom = VarL[g[a,b]][lagrangian] //TensorCollect
Out:    \( \frac{1}{2} (2 - 3 D + D^2) L g_{ab} + R_{ab} - \frac{1}{2} g_{ab} R\)
The equations of motion should allow for AdS spaces. To check this, we first generate a list of replacement rules for curvature tensors of the covariant derivative CD on symmetric spaces:
   In:    AdSrules = SymmetricSpaceRules[CD,L]
 And indeed, the equations of motion are zero for this background:
   In:    eom /. AdSrules // ToCanonical
Out:    \( 0 \)
This means we can perturb around this solution. So without any further ado, here's the linear perturbation of the Einstein tensor:
   In:    ExpandBackground[eom, BackgroundSolution -> AdSrules] // TensorCollect
Out:    \( (l -  D l) h^{1}{}_{ab} + \frac{1}{2} (-1 + D) l g_{ab} h^{1c}{}_{c} - \frac{1}{2} \triangledown_{a}\triangledown_{b}h^{1c}{}_{c} + \frac{1}{2} \triangledown_{c}\triangledown_{a}h^{1}{}_{b}{}^{c} + \frac{1}{2} \triangledown_{c}\triangledown_{b}h^{1}{}_{a}{}^{c} \)
                                      \(- \frac{1}{2} \triangledown_{c}\triangledown^{c}h^{1}{}_{ab} - \frac{1}{2} g_{ab} \triangledown_{d}\triangledown_{c}h^{1cd} + \frac{1}{2} g_{ab} \triangledown_{d}\triangledown^{d}h^{1c}{}_{c} \)
 And that's it! Granted, we could also have done this by hand. But the power of xAct is that it can do much more complicated calculations without breaking a sweat. If we would like to know the second order pertubation of the Einstein tensor, we can simply replace the above input by ExpandBackground[eom,2,BackgroundSolution->AdSrules]. Pretty cool, right?