The Raychaudhuri equation

Author: Leo Stein
Date: Sept. 2011
This notebook follows section 9.2 of Wald.

0. Package, options, and overloading IndexSolve

Needs["xAct`xTensor`"];

$PrePrint=ScreenDollarIndices;

SetOptions[ContractMetric,AllowUpperDerivatives->True];

SetOptions[MakeRule,MetricOn->All,ContractMetrics->True];

This is a modified version of IndexSolve to allow for contracted indices; it does not work in general, but it works below.

Unprotect[IndexSolve];
IndexSolve[lhs_==rhs_,object_,options___]:=Module[{seq=Simplification[Expand[lhs-rhs]],frees,inds,dummies,shadow,shadrule,(*syms,*)scalar,righths,verb=Verbose/.CheckOptions[options]/.Options[MakeRule]},frees=FindFreeIndices[Evaluate[seq]];
inds=FindFreeIndices[object];
dummies=FindDummyIndices[object];
If[verb,Print["frees: ",frees,", inds: ",inds,", dummies: ",dummies]];
If[Sort@frees=!=Sort@inds,Throw[Message[IndexSolve::free,inds]]];
(*Need to do something with symmetries here!*)DefTensor[shadow@@frees,ManifoldsOf[object](*,syms*)];(*I am only dealing with Tensors here. This is wrong.*)shadrule=MakeRule[{Evaluate@object,Evaluate[shadow@@frees]},MetricOn->All,PatternIndices->All];(*this should only match those cases with the same free indices as specified in object*)If[verb,Print["shadow: ",shadow@@frees,", shadrule: ",shadrule]];
scalar=ToCanonical@Scalar@Coefficient[Simplification[seq/.shadrule],shadow@@frees];
If[verb,Print["scalar: ",scalar]];
If[!ScalarQ[scalar],Throw[Message[IndexSolve::error,""]]];
righths=Simplification[NoScalar[seq-scalar object]];
If[verb,Print["righths: ",righths]];
Undef[shadow];(*would prefer if DefTensor and Undef were quiet... don't know how to do that*)MakeRule[{Evaluate@object,Evaluate[-righths/scalar]},PatternIndices->All,options]//Flatten];
Protect[IndexSolve];

1. Manifold and metric

DefConstantSymbol[dim];

DefManifold[M,dim,IndexRange[a,q]];

DefMetric[-1,met[-a,-b],CD,PrintAs->"g",WeightedWithBasis->AIndex];

2. The unit timelike geodesic congruence

DefTensor[ξ[a],M];

AutomaticRules[ξ,MakeRule[{ξ[a]ξ[-a],-1},MetricOn->All]];
AutomaticRules[ξ,MakeRule[{ξ[a]ξ[b]met[-a,-b],-1},MetricOn->All]];

ξ is not just any timelike unit normal -- it is parallel transported along itself.

ξGeodesicRule=MakeRule[{ξ[c]CD[-c]@ξ[a],0}];

The above property can be used to convert a double derivative of ξ into the product of two first derivatives of ξ.
The following is an identity:

DDξEq=(CD[-b][ξ[c]CD[-c]@ξ[-a]]==CD[-b][ξ[c]CD[-c]@ξ[-a]/.ξGeodesicRule])

DDξEq2=DDξEq//SortCovDs//Expand

DDξRule1=IndexSolve[DDξEq,ξ[c]CD[-b]@CD[-c]@ξ[-a]];
DDξRule2=IndexSolve[DDξEq2,ξ[c]CD[-c]@CD[-b]@ξ[-a]];
DDξRule=Join[DDξRule1,DDξRule2];

3. Hypersurface decomposition

$ExtrinsicKSign=-1;
$AccelerationSign=-1;

DefMetric[1,meth[-a,-b],cd,SymbolOfCovD->{"|","D"},InducedFrom->{met,ξ},PrintAs->"h"];

4. Quantities in the Raychaudhuri equation

This follows the conventions of Wald, sec. 9.2.

This is the gradient of ξ. Orthogonal to ξ itself (Eq. 9.2.2)

DefTensor[B[-a,-b],M,OrthogonalTo->{ξ[a],ξ[b]},ProjectedWith->{meth[a,-c],meth[b,-c]}];

How to go between B and the explicit gradient of ξ (Eq. 9.2.1)

BToGradξRule=MakeRule[{B[-a,-b],CD[-b]@ξ[-a]}];
GradξToBRule=MakeRule[{CD[-b]@ξ[-a],B[-a,-b]}];

This is the "expansion" scalar

DefTensor[θ[],M];

How to write it in terms of B (Eq. 9.2.6)

ExpandθRule=MakeRule[{θ[],B[a,b]meth[-a,-b]}];

This is the symmetric shear tensor

DefTensor[σ[-a,-b],M,Symmetric[{-a,-b}],OrthogonalTo->{ξ[a]},ProjectedWith->{meth[a,-c]}];

σ is tracefree under contraction with h.

AutomaticRules[σ,MakeRule[{σ[a,-a],0}]];

This is how to write it in terms of B (Eq. 9.2.7)

ExpandσRule=MakeRule[{σ[-a,-b],
Symmetrize[B[-a,-b],{-a,-b}]-(1/(dim-1))θ[] meth[-a,-b]//Evaluate}];

This is the antisymmetric twist tensor.

DefTensor[ω[-a,-b],M,Antisymmetric[{-a,-b}],OrthogonalTo->{ξ[a]},ProjectedWith->{meth[a,-c]}];

How to write it in terms of B (Eq. 9.2.8)

ExpandωRule=MakeRule[{ω[-a,-b],
Antisymmetrize[B[-a,-b],{-a,-b}]//Evaluate}];

The three preceding rules in one

ExpandOpticalTensorsRule=FoldedRule[ExpandωRule,ExpandσRule,ExpandθRule];

This is the opposite of the previous rule -- how to decompose B into the trace, symmetric tracefree, and antisymmetric parts.

BDecompositionRule=MakeRule[{B[-a,-b],
(1/(dim-1))θ[]meth[-a,-b]+σ[-a,-b]+ω[-a,-b]}];

They are really inverses of each other:

B[-a,-b]/.BDecompositionRule/.ExpandOpticalTensorsRule

{θ[],σ[-a,-b],ω[-a,-b]}/.ExpandOpticalTensorsRule/.BDecompositionRule//ToCanonical

5. The Raychaudhuri equation

This is Wald's Eq. 9.2.10, the left hand side

Eq10LHS=ξ[c]CD[-c]@B[-a,-b]

The right hand side comes from writing B explicitly as the gradient of ξ, commuting derivatives, then using the geodesic property of ξ (see sec. 2 above) to rewrite the double derivative of ξ as the product of two first derivatives, and finally rewriting those as B.

Eq10RHS=(CommuteCovDs[Eq10LHS/.BToGradξRule,CD,{-b,-c}]//Expand)/.DDξRule/.GradξToBRule

Eq10=(Eq10LHS==Eq10RHS)

To go to Eq. 9.2.11, the trace of Eq. 9.2.10 is taken, first on the LHS and then on the RHS.

Cast B in terms of its trace, STF, and antisymmetric parts.

RaychaudhuriEq=((# met[a,b]//ContractMetric)/.BDecompositionRule//ToCanonical//ReplaceDummies)&/@Eq10

This is "the" Raychaudhuri equation (in 3+1 dimensions):

RaychaudhuriEq4=RaychaudhuriEq/.dim->4

The antisymmetric equation is simple to construct. This is Eq. 9.2.14

Eq14=(Antisymmetrize[#,{-a,-b}]/.BDecompositionRule//ToCanonical)&/@Eq10

Equation 9.2.12 can also be derived with some more effort, using STFPart, RiemannToWeyl, and by defining an auxilliary field (OverTilde[R]).