Tensor[CongruenceProperties] - calculate properties of a congruence of curves
Calling Sequences
CongruenceProperties(g, U)
CongruenceProperties(g, K, L)
CongruenceProperties(g, K)
CongruenceProperties(g, NT)
Parameters
g - a metric tensor
U - a unit vector
K,L - normalized null vectors, the vector K defines an affinely parameterized, geodesic null congruence.
NT - a list of 4 vectors, defining a null tetrad, the first vector in the tetrad defines the geodesic null congruence.
Description
Examples
The command CongruenceProperties returns a table of properties associated to a line congruence defined by a unit (time-like or space-like) vector field U or a null vector field K.
Let ϵ = gU, U = ±1, sethab = gab−ϵ UaUb . The following scalar and tensor fields are calculated by the first calling sequence.
- Acceleration: Aa= Ub∇b Ua .
- Expansion: Θ = ∇aUa .
- Rotation Tensor : ωab= 1/2 (∇b Ua −∇a Ub − ϵAaUb + ϵAbUa) .
- Shear Tensor: σab= 1/2 (∇b Ua +∇a Ub − ϵAaUb − ϵAbUa −1n−1 Θ hab) .
The left-hand side of the Raychaudhuri equation Ua∇aΘ + Rab UaUb− ωabωab + σabσab +N Θ2 = 0, valid when the congruence is geodesic (Aa=0), where Rab is the Ricci tensor and N = 1/n−1, is also calculated.
The first calling sequence returns a table with indices "Acceleration", "Expansion", "RotationTensor", "ShearTensor", "Raychaudhuri".
The remaining three calling sequences apply only to an affinely parameterized, geodesic null congruence , that is, Ka Ka =0 and Kb∇bKa = 0.
The second calling sequence requires gK, K=0=gL, L,gK, L = α,where α = ±1. Sethab = gab−α KaLb + Kb La and vab = hac hbd ∇c Kd. Define
- Expansion: Θ = ∇aKa .
- Rotation Tensor: ωab=12vab − vba.
- Rotation Scalar: ω = α2εabcd LaKb ∇c Kd .
- Complex expansion: ρ = − 12Θ+ I ω.
- Shear Tensor: σab=12vab + vba −1/n−2hab Θ.
The Raychaudhuri equation is as above but using these definitions of ω and σ and with N = 1/n−2.
The second calling sequence returns a table with 8 indices "Expansion", "RotationNormSquared" "ShearNormSquared", "RotationTensor", "RotationScalar", "ShearTensor" , "ComplexExpansion" and "Raychaudhuri".
The third calling sequence calculates: Expansion: Θ = ∇aKa; Rotation norm squared = ωab ωab ; and Shear norm squared = σabσab . The definitions are as in the second calling sequence but, as these scalars do not in fact depend upon the choice of L, only the vector K is needed as input. The third calling sequence returns a table with indices "Expansion", "RotationNormSquared", "ShearNormSquared" and "Raychaudhuri".
Finally, from the 4th calling sequence we set K = NT1, L =NT2, M = NT3 and M ‾ = NT4 and calculate, in addition to the 8 quantities calculated for the second calling sequence , σ = − MaMb ∇a Kb , referenced by the index sigma. In this case, the quantities ρ and σ are Newman-Penrose Spin Coefficients.
with⁡DifferentialGeometry:with⁡Tensor:
Example 1.
For our first example we use the standard metric on the sphere.
DGsetup⁡θ,φ,M
frame name: M
g ≔ evalDG⁡R2⁢dtheta &t dtheta+sin⁡θ2⁢dphi &t dphi
_DG⁡tensor,M,cov_bas,cov_bas,,1,1,R2,2,2,R2⁢sin⁡θ2,_DG⁡tensor,M,cov_bas,cov_bas,,1,1,R2,2,2,R2⁢sin⁡θ2
Define a unit vector field U.
U ≔ evalDG⁡1⁢D_phiR⁢sin⁡θ
_DG⁡vector,M,,2,1R⁢sin⁡θ,_DG⁡vector,M,,2,1R⁢sin⁡θ
We see that the congruence is geodesic on the equator ( θ = π/2) but is accelerating elsewhere. It is shearing, rotating and non-expanding.
CongruenceProperties⁡g,U
table( [( "Raychaudhuri" ) = `/`(1, `*`(`^`(R, 2))), ( "Acceleration" ) = _DG([["tensor", M, [["con_bas"], []]], [[[1], `+`(`-`(`/`(`*`(cos(theta)), `*`(`^`(R, 2), `*`(sin(theta))))))]]]), ( "ShearTensor" ) = _DG([["tensor", M, [["cov_bas", "cov_bas"], []]], [[[1, 1], 0]]]), ( "Expansion" ) = 0, ( "RotationTensor" ) = _DG([["tensor", M, [["cov_bas", "cov_bas"], []]], [[[1, 1], 0]]]) ] ),table( [( "Raychaudhuri" ) = `/`(1, `*`(`^`(R, 2))), ( "Acceleration" ) = _DG([["tensor", M, [["con_bas"], []]], [[[1], `+`(`-`(`/`(`*`(cos(theta)), `*`(`^`(R, 2), `*`(sin(theta))))))]]]), ( "ShearTensor" ) = _DG([["tensor", M, [["cov_bas", "cov_bas"], []]], [[[1, 1], 0]]]), ( "Expansion" ) = 0, ( "RotationTensor" ) = _DG([["tensor", M, [["cov_bas", "cov_bas"], []]], [[[1, 1], 0]]]) ] )
Example 2.
For the next example we consider a class of Robinson-Trautman metrics. These are of Petrov type II and admit a null congruence which is shear-free.
DGsetup⁡u,r,zeta,zetab,RT
frame name: RT
g ≔ evalDG⁡2⁢r2⁢P⁡zeta,zetab,u−2⁢dzeta &s dzetab−2⁢du &s dr−2⁢H⁡zeta,zetab,r,u⁢du &t du
_DG⁡tensor,RT,cov_bas,cov_bas,,1,1,−2⁢H⁡ζ,zetab,r,u,1,2,−1,2,1,−1,3,4,r2P⁡ζ,zetab,u2,4,3,r2P⁡ζ,zetab,u2,_DG⁡tensor,RT,cov_bas,cov_bas,,1,1,−2⁢H⁡ζ,zetab,r,u,1,2,−1,2,1,−1,3,4,r2P⁡ζ,zetab,u2,4,3,r2P⁡ζ,zetab,u2
Here is a null tetrad for this metric.
NT ≔ evalDG⁡D_r,D_u−H⁡zeta,zetab,r,u⁢D_r,P⁡zeta,zetab,u⁢D_zetar,P⁡zeta,zetab,u⁢D_zetabr
_DG⁡vector,RT,,2,1,_DG⁡vector,RT,,1,1,2,−H⁡ζ,zetab,r,u,_DG⁡vector,RT,,3,P⁡ζ,zetab,ur,_DG⁡vector,RT,,4,P⁡ζ,zetab,ur,_DG⁡vector,RT,,2,1,_DG⁡vector,RT,,1,1,2,−H⁡ζ,zetab,r,u,_DG⁡vector,RT,,3,P⁡ζ,zetab,ur,_DG⁡vector,RT,,4,P⁡ζ,zetab,ur
The null congruence is very simple:
U ≔ NT1
_DG⁡vector,RT,,2,1
First calling sequence:
CongruenceProperties⁡g,D_r
table( [( "ShearNormSquared" ) = 0, ( "RotationNormSquared" ) = 0, ( "Raychaudhuri" ) = 0, ( "Expansion" ) = `+`(`/`(`*`(2), `*`(r))) ] ),table( [( "ShearNormSquared" ) = 0, ( "RotationNormSquared" ) = 0, ( "Raychaudhuri" ) = 0, ( "Expansion" ) = `+`(`/`(`*`(2), `*`(r))) ] )
Third calling sequence:
CongruenceProperties⁡g,NT1,NT2
table( [( "ShearNormSquared" ) = 0, ( "RotationNormSquared" ) = 0, ( "Raychaudhuri" ) = 0, ( "RotationScalar" ) = 0, ( "ShearTensor" ) = _DG([["tensor", RT, [["cov_bas", "cov_bas"], []]], [[[1, 1], 0]]]), ( "Expansion" ) = `+`(`/`(`*`(2), `*`(r))), ( "RotationTensor" ) = _DG([["tensor", RT, [["cov_bas", "cov_bas"], []]], [[[1, 1], 0]]]) ] ),table( [( "ShearNormSquared" ) = 0, ( "RotationNormSquared" ) = 0, ( "Raychaudhuri" ) = 0, ( "RotationScalar" ) = 0, ( "ShearTensor" ) = _DG([["tensor", RT, [["cov_bas", "cov_bas"], []]], [[[1, 1], 0]]]), ( "Expansion" ) = `+`(`/`(`*`(2), `*`(r))), ( "RotationTensor" ) = _DG([["tensor", RT, [["cov_bas", "cov_bas"], []]], [[[1, 1], 0]]]) ] )
Fourth calling sequence
CongruenceProperties⁡g,NT
table( [( "ShearNormSquared" ) = 0, ( "RotationNormSquared" ) = 0, ( "sigma" ) = 0, ( "Raychaudhuri" ) = 0, ( "RotationScalar" ) = 0, ( "ShearTensor" ) = _DG([["tensor", RT, [["cov_bas", "cov_bas"], []]], [[[1, 1], 0]]]), ( "rho" ) = `+`(`-`(`/`(1, `*`(r)))), ( "Expansion" ) = `+`(`/`(`*`(2), `*`(r))), ( "RotationTensor" ) = _DG([["tensor", RT, [["cov_bas", "cov_bas"], []]], [[[1, 1], 0]]]) ] ),table( [( "ShearNormSquared" ) = 0, ( "RotationNormSquared" ) = 0, ( "sigma" ) = 0, ( "Raychaudhuri" ) = 0, ( "RotationScalar" ) = 0, ( "ShearTensor" ) = _DG([["tensor", RT, [["cov_bas", "cov_bas"], []]], [[[1, 1], 0]]]), ( "rho" ) = `+`(`-`(`/`(1, `*`(r)))), ( "Expansion" ) = `+`(`/`(`*`(2), `*`(r))), ( "RotationTensor" ) = _DG([["tensor", RT, [["cov_bas", "cov_bas"], []]], [[[1, 1], 0]]]) ] )
Example 3.
Here is an example of a Newman-Tamburino metric of Petrov type I and which admits a null geodesic congruence with non-vanishing shear.
DGsetup⁡u,r,x,y,M
g ≔ evalDG⁡r2⁢dx &t dx+x2⁢dy &t dy−2⁢r⁢du &s dxx−2⁢du &s dr+1⁢c+ln⁡r2⁢x4⁢du &t dux2
_DG⁡tensor,M,cov_bas,cov_bas,,1,1,c+ln⁡r2⁢x4x2,1,2,−1,1,3,−rx,2,1,−1,3,1,−rx,3,3,r2,4,4,x2,_DG⁡tensor,M,cov_bas,cov_bas,,1,1,c+ln⁡r2⁢x4x2,1,2,−1,1,3,−rx,2,1,−1,3,1,−rx,3,3,r2,4,4,x2
NT ≔ D_r,D_u+c+ln⁡r2⁢x4⁢D_r2⁢x2,−2⁢D_rx+2⁢D_x2⁢r+I⁢12⁢2⁢D_yx,−2⁢D_rx+2⁢D_x2⁢r−I⁢12⁢2⁢D_yx
_DG⁡vector,M,,2,1,_DG⁡vector,M,,1,1+12⁢c+ln⁡r2⁢x4⁢_DG⁡vector,M,,2,1x2,−2⁢_DG⁡vector,M,,2,1x+12⁢2⁢_DG⁡vector,M,,3,1r+12⁢I⁢2⁢_DG⁡vector,M,,4,1x,−2⁢_DG⁡vector,M,,2,1x+12⁢2⁢_DG⁡vector,M,,3,1r−12⁢I⁢2⁢_DG⁡vector,M,,4,1x,_DG⁡vector,M,,2,1,_DG⁡vector,M,,1,1+12⁢c+ln⁡r2⁢x4⁢_DG⁡vector,M,,2,1x2,−2⁢_DG⁡vector,M,,2,1x+12⁢2⁢_DG⁡vector,M,,3,1r+12⁢I⁢2⁢_DG⁡vector,M,,4,1x,−2⁢_DG⁡vector,M,,2,1x+12⁢2⁢_DG⁡vector,M,,3,1r−12⁢I⁢2⁢_DG⁡vector,M,,4,1x
Again we consider the first leg of this tetrad.
U ≔ D_r
_DG⁡vector,M,,2,1
table( [( "ShearNormSquared" ) = `+`(`/`(`*`(`/`(1, 2)), `*`(`^`(r, 2)))), ( "RotationNormSquared" ) = 0, ( "Raychaudhuri" ) = 0, ( "Expansion" ) = `/`(1, `*`(r)) ] ),table( [( "ShearNormSquared" ) = `+`(`/`(`*`(`/`(1, 2)), `*`(`^`(r, 2)))), ( "RotationNormSquared" ) = 0, ( "Raychaudhuri" ) = 0, ( "Expansion" ) = `/`(1, `*`(r)) ] )
table( [( "ShearNormSquared" ) = `+`(`/`(`*`(`/`(1, 2)), `*`(`^`(r, 2)))), ( "RotationNormSquared" ) = 0, ( "Raychaudhuri" ) = 0, ( "RotationScalar" ) = 0, ( "ShearTensor" ) = _DG([["tensor", M, [["cov_bas", "cov_bas"], []]], [[[3, 3], `+`(`*`(`/`(1, 2), `*`(r)))], [[4, 4], `+`(`-`(`/`(`*`(`/`(1, 2), `*`(`^`(x, 2))), `*`(r))))]]]), ( "Expansion" ) = `/`(1, `*`(r)), ( "RotationTensor" ) = _DG([["tensor", M, [["cov_bas", "cov_bas"], []]], [[[1, 1], 0]]]) ] ),table( [( "ShearNormSquared" ) = `+`(`/`(`*`(`/`(1, 2)), `*`(`^`(r, 2)))), ( "RotationNormSquared" ) = 0, ( "Raychaudhuri" ) = 0, ( "RotationScalar" ) = 0, ( "ShearTensor" ) = _DG([["tensor", M, [["cov_bas", "cov_bas"], []]], [[[3, 3], `+`(`*`(`/`(1, 2), `*`(r)))], [[4, 4], `+`(`-`(`/`(`*`(`/`(1, 2), `*`(`^`(x, 2))), `*`(r))))]]]), ( "Expansion" ) = `/`(1, `*`(r)), ( "RotationTensor" ) = _DG([["tensor", M, [["cov_bas", "cov_bas"], []]], [[[1, 1], 0]]]) ] )
Fourth calling sequence:
table( [( "ShearNormSquared" ) = `+`(`/`(`*`(`/`(1, 2)), `*`(`^`(r, 2)))), ( "RotationNormSquared" ) = 0, ( "sigma" ) = `+`(`-`(`/`(`*`(`/`(1, 2)), `*`(r)))), ( "Raychaudhuri" ) = 0, ( "RotationScalar" ) = 0, ( "ShearTensor" ) = _DG([["tensor", M, [["cov_bas", "cov_bas"], []]], [[[3, 3], `+`(`*`(`/`(1, 2), `*`(r)))], [[4, 4], `+`(`-`(`/`(`*`(`/`(1, 2), `*`(`^`(x, 2))), `*`(r))))]]]), ( "rho" ) = `+`(`-`(`/`(`*`(`/`(1, 2)), `*`(r)))), ( "Expansion" ) = `/`(1, `*`(r)), ( "RotationTensor" ) = _DG([["tensor", M, [["cov_bas", "cov_bas"], []]], [[[1, 1], 0]]]) ] ),table( [( "ShearNormSquared" ) = `+`(`/`(`*`(`/`(1, 2)), `*`(`^`(r, 2)))), ( "RotationNormSquared" ) = 0, ( "sigma" ) = `+`(`-`(`/`(`*`(`/`(1, 2)), `*`(r)))), ( "Raychaudhuri" ) = 0, ( "RotationScalar" ) = 0, ( "ShearTensor" ) = _DG([["tensor", M, [["cov_bas", "cov_bas"], []]], [[[3, 3], `+`(`*`(`/`(1, 2), `*`(r)))], [[4, 4], `+`(`-`(`/`(`*`(`/`(1, 2), `*`(`^`(x, 2))), `*`(r))))]]]), ( "rho" ) = `+`(`-`(`/`(`*`(`/`(1, 2)), `*`(r)))), ( "Expansion" ) = `/`(1, `*`(r)), ( "RotationTensor" ) = _DG([["tensor", M, [["cov_bas", "cov_bas"], []]], [[[1, 1], 0]]]) ] )
See Also
DifferentialGeometry
Tensor
AdaptedSpinorDyad
AdaptedNullTetrad
NPCurvatureScalars
NullVector
PetrovType
PrincipalNullDirections
Download Help Document
What kind of issue would you like to report? (Optional)