3. Perturbations of curvature tensors

In this section we show how ExpandPerturbation acts on the most important geometric tensors of a Riemannian manifold, at any perturbative order. We shall compare its direct action at a particular order with a recursive computation of that order from lower orders. This is both a consistency check and an example of the efficiency of the direct action.

3.1. Perturbations of the inverse metric

Let us start comparing the seventh-order recursive and direct perturbations of the inverse of our metric tensor field.

Recursively :

In[61]:=

Perturbation[g[a, b]]//ExpandPerturbation

Out[61]=

-h_   ^(1ab)

In[62]:=

%//Perturbation//ExpandPerturbation

Out[62]=

In[63]:=

%//Perturbation//ExpandPerturbation//org

Out[63]=

In[64]:=

%//Perturbation//ExpandPerturbation//org

0.204013 Second

Out[64]=

In[65]:=

%//Perturbation//ExpandPerturbation//org

0.488031 Second

Out[65]=

In[66]:=

%//Perturbation//ExpandPerturbation//org

1.28408 Second

Out[66]=

In[67]:=

%//Perturbation//ExpandPerturbation//org

4.05625 Second

Out[67]=

Applying ExpandPerturbation directly,

In[68]:=

Perturbation[g[a, b], 7]//ExpandPerturbation

Out[68]=

Comparison and check:

In[69]:=

% - %%//ToCanonical

1.5481 Second

Out[69]=

0

Another interesting check is proving that the perturbed inverse of the metric is in fact the inverse of the perturbed metric up to the correct order. For that we will use another xPert` command named Perturbed that expands an expression into a power series up to the order provided.

The power series of the perturbed metric up to fifth order (note that we do not use the Series construct of Mathematica)

In[70]:=

Perturbed[g[-a, -b], 5]

Out[70]=

The corresponding expansion for its inverse

In[71]:=

Perturbed[g[b, c], 5]//ExpandPerturbation

Out[71]=

And the check

In[72]:=

% %%//org

2.33215 Second

Out[72]=

3.2. Perturbations of the determinant of the metric and the antisymmetric tensor

Now we compute the perturbations of the determinant of the metric up to sixth order. Two comments are in order:
First, note that the result is always proportional to the determinant itself times a combination of contracted metric perturbations. This proportionality scalar depends on the dimension we are considering. In fact, for a given dimension N, there cannot be products of more than N metric perturbations (recall that N=4 in our examples). Timings are highly dependent on the dimensions because the internal algorithms use determinants of NxN matrices.
Second, the concept of determinant is basis-dependent (actually a density) and hence can only be treated properly using xCoba`, the xAct` package for component computations in a given basis. xTensor` implements a fake basis called AIndex, which we will assume throughout this subsection.

Low order perturbations of the determinant:

In[73]:=

Perturbation[Detg[]]//ExpandPerturbation//Simplification

0.180011 Second

Out[73]=

Overscript[g, Overscript[~, ~]] _^ h_ (  a)^(1a )

In[74]:=

Perturbation[Detg[], 2]//ExpandPerturbation//Simplification

0.408026 Second

Out[74]=

Overscript[g, Overscript[~, ~]] _^ (-h_ ( ab)^1   h_   ^(1ab) + h_ (  a)^(1a ) h_ (  b)^(1b ) + h_ (  a)^(2a ))

In[75]:=

Perturbation[Detg[], 3]//ExpandPerturbation//Simplification

0.904057 Second

Out[75]=

In[76]:=

Perturbation[Detg[], 4]//ExpandPerturbation//Simplification

1.95212 Second

Out[76]=

Now the perturbative order will exceed the dimension. Still we get just products of up to four metric perturbations. In other dimensions these formulas would be wrong:

In[77]:=

Perturbation[Detg[], 5]//ExpandPerturbation//Simplification

3.74823 Second

Out[77]=

In[78]:=

Perturbation[Detg[], 6]//ExpandPerturbation//Simplification

7.05644 Second

Out[78]=

Perturbations of the antisymmetric volume-form tensor are given in terms of the perturbations of the determinant of the metric and have a similar structure.

At first-order

In[79]:=

Perturbation[epsilong[-a, -b, -c, -d]]//ExpandPerturbation//Simplification

0.16801 Second

Out[79]=

1/2 εg_abcd^     h_ (  e)^(1e )

At third-order (note the head Scalar; see the documentation of xTensor` for a description)

In[80]:=

Perturbation[epsilong[-a, -b, -c, -d], 3]//ExpandPerturbation//Simplification

1.85212 Second

Out[80]=

Note that now there are five h factors multiplying due to the perturbation of Sqrt[Detg[]], and not only of Detg[]. The formula is still valid only in dimension 4 for the reasons above:

In[81]:=

Perturbation[epsilong[-a, -b, -c, -d], 5]//ExpandPerturbation//Simplification

20.3413 Second

Out[81]=

3.3. Perturbations of the Christoffel symbols

In order to obtain the perturbation of the Christoffel symbols, we can write them in terms of partial derivatives of the metric and then apply the ExpandPerturbation command that will only act on metrics and inverse metrics. It is faster to do it directly applying ExpandPerturbation, that will calculate the perturbation by making use of non-recursive formulas for the n-th order perturbation of the Christoffel symbols. We shall check and compare the relative efficiency of both methods.

First-order perturbation of the Christoffel in terms of the metric and its inverse

In[82]:=

Perturbation[ChristoffelCD[a, -b, -c]//ChristoffelToMetric]

Out[82]=

We will frequently convert partial derivatives into covariant derivatives to help canonicalizing:

In[83]:=

CovDToChristoffel[%//ExpandPerturbation, PD, CD]//org

Out[83]=

-h_ ( bc  )^(1   ; a)/2 + h_ (  c ; b)^(1a   )/2 + h_ (  b ; c)^(1a   )/2

Comparison with the direct action of ExpandPerturbation

In[84]:=

% - (Perturbation[ChristoffelCD[a, -b, -c]]//ExpandPerturbation)//Simplification

Out[84]=

0

We do the same for the second-order perturbation

In[85]:=

Perturbation[ChristoffelCD[a, -b, -c]//ChristoffelToMetric, 2]

Out[85]=

In[86]:=

CovDToChristoffel[%//ExpandPerturbation, PD, CD]//org

0.244015 Second

Out[86]=

In[87]:=

% - ExpandPerturbation[Perturbation[ChristoffelCD[a, -b, -c], 2]]//ToCanonical

Out[87]=

0

At third order

In[88]:=

Perturbation[ChristoffelCD[a, -b, -c]//ChristoffelToMetric, 3]

Out[88]=

In[89]:=

CovDToChristoffel[%//ExpandPerturbation, PD, CD]//org

0.516032 Second

Out[89]=

In[90]:=

% - ExpandPerturbation[Perturbation[ChristoffelCD[a, -b, -c], 3]]//ToCanonical

Out[90]=

0

And finally at four order

In[91]:=

Perturbation[ChristoffelCD[a, -b, -c]//ChristoffelToMetric, 4]

Out[91]=

In[92]:=

CovDToChristoffel[%//ExpandPerturbation, PD, CD]//org

1.18007 Second

Out[92]=

In[93]:=

% - ExpandPerturbation[Perturbation[ChristoffelCD[a, -b, -c], 4]]//ToCanonical

0.256015 Second

Out[93]=

0

Note that the first method is much slower: let us compute the seventh-order perturbations:

In[94]:=

tmp1 = CovDToChristoffel[Perturbation[ChristoffelCD[a, -b, -c]//ChristoffelToMetric, 7]//ExpandPerturbation, PD, CD]//org ;

14.2929 Second

In[95]:=

tmp2 = ExpandPerturbation[Perturbation[ChristoffelCD[a, -b, -c], 7]]//org ;

2.37615 Second

In[96]:=

tmp1 - tmp2//ToCanonical

0.996062 Second

Out[96]=

0

3.4. Perturbations of the Riemann tensor

As we have done for the Christoffel symbols, we can calculate the perturbations of Riemann in two ways. The first one will start from the expression of Riemann tensor in terms of the metric, its inverse and partial derivatives. The second will apply directly ExpandPerturbation.

At first order going through the metric

In[97]:=

Perturbation[RiemannCD[-a, -b, -c, d], 1]//RiemannToChristoffel//ChristoffelToMetric

Out[97]=

In[98]:=

ChangeCovD[%//ExpandPerturbation, PD, CD]//org

5.30433 Second

Out[98]=

Applying directly ExpandPerturbation

In[99]:=

Perturbation[RiemannCD[-a, -b, -c, d], 1]//ExpandPerturbation

Out[99]=

Comparison

In[100]:=

%% - %//ToCanonical

Out[100]=

0

That result is usually presented with only four covariant derivatives, but with 10 Riemann terms (which vanish in vacuum):

In[101]:=

%%//SortCovDs//ToCanonical

0.124008 Second

Out[101]=

At second order going through the metric

In[102]:=

Perturbation[RiemannCD[-a, -b, -c, d], 2]//RiemannToChristoffel//ChristoffelToMetric

Out[102]=

In[103]:=

ChangeCovD[%//ExpandPerturbation, PD, CD]//org

19.3452 Second

Out[103]=

Applying directly ExpandPerturbation

In[104]:=

Perturbation[RiemannCD[-a, -b, -c, d], 2]//ExpandPerturbation

Out[104]=

Comparison

In[105]:=

%% - %//ToCanonical

0.512031 Second

Out[105]=

0

There is a large difference between the timings of both methods.

Here we show that the recursive method takes more of less the same time to compute the third-order perturbation as the direct method takes for the seventh-order one:

In[106]:=

ChangeCovD[Perturbation[RiemannCD[-a, -b, -c, d], 3]//RiemannToChristoffel//ChristoffelToMetric//ExpandPerturbation, PD, CD]//org ;

57.2796 Second

In[107]:=

ExpandPerturbation[Perturbation[RiemannCD[-a, -b, -c, d], 7]]//org ;

58.1196 Second

3.5. Perturbations of the Ricci tensor

The Ricci tensor is a simple trace of the Riemann tensor and hence behaves very similarly.

First-order perturbation going through the metric

In[108]:=

ChangeCovD[Perturbation[RiemannCD[-a, -c, -b, c]//RiemannToChristoffel//ChristoffelToMetric], PD, CD]//ExpandPerturbation//org

5.69636 Second

Out[108]=

Applying directly ExpandPerturbation

In[109]:=

Perturbation[RicciCD[-a, -b]]//ExpandPerturbation//org

Out[109]=

Comparison

In[110]:=

%% - %//ToCanonical

Out[110]=

0

Second-order perturbation going through the metric

In[111]:=

ChangeCovD[Perturbation[RiemannCD[-a, -c, -b, c]//RiemannToChristoffel//ChristoffelToMetric, 2], PD, CD]//ExpandPerturbation//org

20.6453 Second

Out[111]=

Applying directly ExpandPerturbation

In[112]:=

Perturbation[RicciCD[-a, -b], 2]//ExpandPerturbation//org

0.240015 Second

Out[112]=

Comparison

In[113]:=

%% - %//ToCanonical

Out[113]=

0

Third-order perturbation going through the metric

In[114]:=

ChangeCovD[Perturbation[RiemannCD[-a, -c, -b, c]//RiemannToChristoffel//ChristoffelToMetric, 3], PD, CD]//ExpandPerturbation//org

64.388 Second

Out[114]=

Applying directly ExpandPerturbation

In[115]:=

Perturbation[RicciCD[-a, -b], 3]//ExpandPerturbation//org

0.876055 Second

Out[115]=

Comparison

In[116]:=

%% - %//ToCanonical

0.200013 Second

Out[116]=

0

Let us just compute the fourth-order perturbation making use only of the direct approach. Note that what really takes times is not to construct the perturbation itself but to simplify it.

In[117]:=

Perturbation[RicciCD[-a, -b], 4]//ExpandPerturbation ;

In[118]:=

%//org

3.1522 Second

Out[118]=

Some more examples:

In[119]:=

Perturbation[RicciCD[-a, -b], 8]//ExpandPerturbation ;

1.39609 Second

In[120]:=

Perturbation[RicciCD[-a, -b], 12]//ExpandPerturbation ;

38.4104 Second

3.6. Perturbations of the Ricci scalar

The Ricci scalar is computed from a double trace of the Riemann tensor.

In[121]:=

ricciscalar = g[a, b] RiemannCD[-a, -c, -b, c]//RiemannToChristoffel//ChristoffelToMetric//Simplification

0.624039 Second

Out[121]=

First-order perturbation from the metric

In[122]:=

ChangeCovD[Perturbation[ricciscalar]//ExpandPerturbation, PD, CD]//org

1.89212 Second

Out[122]=

Applying directly ExpandPerturbation

In[123]:=

Perturbation[RicciScalarCD[]]//ExpandPerturbation//org

Out[123]=

-h_   ^(1ab) R_ab^   + h_ (    ; a ; b)^(1ab    ) - h_ (  a   ; b)^(1a ; b  )

Comparison

In[124]:=

ChangeCovD[% - %%//RiemannToChristoffel, PD, CD]//Simplification

Out[124]=

0

Second-order perturbation from the metric

In[125]:=

ChangeCovD[Perturbation[ricciscalar, 2]//ExpandPerturbation, PD, CD]//org

7.17245 Second

Out[125]=

Applying directly ExpandPerturbation

In[126]:=

Perturbation[RicciScalarCD[], 2]//ExpandPerturbation//org

0.368023 Second

Out[126]=

Comparison

In[127]:=

ChangeCovD[% - %%//RiemannToChristoffel, PD, CD]//Simplification

0.208013 Second

Out[127]=

0

Third-order perturbation iteratively from metric perturbations

In[128]:=

ChangeCovD[Perturbation[ricciscalar, 3]//ExpandPerturbation, PD, CD]//org

27.6217 Second

Out[128]=

Applying directly ExpandPerturbation

In[129]:=

Perturbation[RicciScalarCD[], 3]//ExpandPerturbation//org

1.5401 Second

Out[129]=

Comparison

In[130]:=

ChangeCovD[%% - %//RiemannToChristoffel, PD, CD]//org

0.456029 Second

Out[130]=

3 h_   ^(1ab) h_ ( a )^(2 c) Γ_ ( cd ; b)^d     - 3 h_   ^(1ab) h_ ( a )^(2 c) Γ_ ( bd ; c)^d    

That expression is indeed only zero for a Levi-Civita connection. To show it we change back to partial derivatives and expand the Christoffels into derivatives of the metric:

In[131]:=

ChangeCovD[%, CD, PD]//ToCanonical

Out[131]=

3 h_   ^(1ab) h_ ( a )^(2 c) Γ_ ( cd, b)^d     - 3 h_   ^(1ab) h_ ( a )^(2 c) Γ_ ( bd, c)^d    

In[132]:=

%//ChristoffelToMetric//ToCanonical

0.228014 Second

Out[132]=

0

Fourth-order perturbation iteratively from metric perturbations

In[133]:=

ChangeCovD[Perturbation[ricciscalar, 4]//ExpandPerturbation, PD, CD]//org ;

83.7492 Second

Applying directly ExpandPerturbation

In[134]:=

Perturbation[RicciScalarCD[], 4]//ExpandPerturbation//org ;

5.08832 Second

Comparison

In[135]:=

ChangeCovD[%% - %//ToCanonical//RiemannToChristoffel, PD, CD]//Simplification

1.38009 Second

Out[135]=

Again, this is zero for a Levi-Civita connection (we do not use the metric in the index-canonicalization process to avoid problems with the partial derivatives):

In[136]:=

Simplification[ChangeCovD[%, CD, PD], UseMetricOnVBundle→None]

0.108007 Second

Out[136]=

In[137]:=

Simplification[%//ChristoffelToMetric, UseMetricOnVBundle→None]

0.440028 Second

Out[137]=

0

3.7. Perturbations of the Einstein tensor

To help in the recursive computation, we define the Einstein tensor in terms of the Christoffels instead of the metric.

In[138]:=

einstein = EinsteinCD[-a, -b]//EinsteinToRicci//RiemannToChristoffel//Simplify

Out[138]=

The first-order perturbation from the Christoffel perturbations:

In[139]:=

Perturbation[einstein]//ExpandPerturbation

Out[139]=

Appliying directly ExpandPerturbation

In[140]:=

Perturbation[EinsteinCD[-a, -b]]//ExpandPerturbation

Out[140]=

Comparison

In[141]:=

ChangeCovD[%% - %//RiemannToChristoffel, PD, CD]//ToCanonical

0.580037 Second

Out[141]=

0

The second-order perturbation from Christoffel perturbations:

In[142]:=

Perturbation[einstein, 2]//ExpandPerturbation

Out[142]=

Applying directly ExpandPerturbation

In[143]:=

Perturbation[EinsteinCD[-a, -b], 2]//ExpandPerturbation

Out[143]=

Comparison

In[144]:=

ChangeCovD[%% - %//RiemannToChristoffel, PD, CD]//ToCanonical

3.45622 Second

Out[144]=

0

Note that ExpandPerturbation is really fast. The seventh-order perturbation of the Einstein tensor is computed in just a few seconds.

In[145]:=

Perturbation[EinsteinCD[-a, -b], 7]//ExpandPerturbation ;

2.08413 Second

3.8. Perturbations of the Weyl tensor

The Weyl tensor is given here in terms of Riemann, Ricci and the Ricci scalar. Giving it in terms of the metric would be too slow.

Weyl in terms of Riemann:

In[146]:=

WeylCD[-a, -b, -c, -d]//WeylToRiemann

Out[146]=

In[147]:=

Perturbation[%]//ExpandPerturbation

Out[147]=

The first-order perturbation applying directly ExpandPerturbation is also internally computed along the same lines:

In[148]:=

Perturbation[WeylCD[-a, -b, -c, -d], 1]//ExpandPerturbation

Out[148]=

Comparison:

In[149]:=

% - %%//ToCanonical

0.184012 Second

Out[149]=

0


Created by Mathematica  (July 1, 2008) Valid XHTML 1.1!