Lesson 10: Tensor Analysis - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim


DifferentialGeometry Lessons

 

Lesson 10: Tensor Analysis

 

 

Overview

Connections and Christoffel symbols, Torsion tensors

Covariant derivatives

Curvature tensors, Ricci tensor, Ricci scalar, Einstein tensor, Weyl tensor, Cotton tensor

Exercises

Overview

 

In this lesson, you will learn to do the following:

– 

Construct a connection and compute its torsion.

– 

Compute the Christoffel connection from a metric.

– 

Calculate the covariant derivative of a tensor.

– 

Calculate the Riemann curvature tensor of a connection.

– 

Calculate the Ricci tensor, the scalar curvature, the Einstein tensor.

– 

Calculate the Weyl tensor.

Connections and Christoffel symbols, Torsion tensors

 

To create an affine connection, first construct a tensor with the desired components and then use the Connection command.  The torsion of the connection is computed with the TorsionTensor command.

>

with(DifferentialGeometry): with(Tensor):

DGsetup([x, y], E2):

E2 > 

T := evalDG(y*dx &t D_y &t dy);

TydxD_ydy

(2.1)
E2 > 

C := Connection(T);

CydxD_ydy

(2.2)
E2 > 

S := TorsionTensor(C);

SydxD_ydy+ydyD_ydx

(2.3)

 

Remark 1.  Although the display for the tensor T and the connection C are the same, the internal representations are different.

E2 > 

Tools:-DGinfo(T, "ObjectType");

tensor

(2.4)
E2 > 

Tools:-DGinfo(C, "ObjectType");

connection

(2.5)

 

Remark 2.  We illustrate the fact that the rules for transforming and Lie differentiating the tensor T and the connection C are different.

E2 > 

X := evalDG(x^3*D_x);

Xx3D_x

(2.6)

 

Here are the Lie derivatives of T and C.

E2 > 

LieDerivative(X, T);

3x2ydxD_ydy

(2.7)
E2 > 

LieDerivative(X, C);

6xdxD_xdx+3x2ydxD_ydy

(2.8)
E2 > 

Phi := Transformation(E2, E2, [x = 1/x, y = 1/y]);

Φx=1x,y=1y

(2.9)
E2 > 

InvPhi := InverseTransformation(Phi);

InvPhix=1x,y=1y

(2.10)

 

Here are the transformations of T and C.

E2 > 

PushPullTensor(Phi, InvPhi, T);

dxD_ydyyx2

(2.11)
E2 > 

PushPullTensor(Phi, InvPhi, C);

2dxD_xdxxdxD_ydyyx22dyD_ydyy

(2.12)

 

The command Christoffel is used to construct the Christoffel connection for a metric g.  With the optional argument "FirstKind", the Christoffel symbols of the first kind are computed.

E2 > 

g := evalDG((1/y^2)*(dx &t dy + dy &t dx));

gdxdyy2+dydxy2

(2.13)
E2 > 

Christoffel(g);

2dyD_ydyy

(2.14)
E2 > 

C2 := Christoffel(g, "FirstKind");

C22dydxdyy3

(2.15)
E2 > 

type(g1, DGmetric);

false

(2.16)

Covariant derivatives

 

Let T be a tensor of type (r, s) (r = number of contravariant (upper) indices = number of 1-form arguments, s = number of covariant (lower) indices = number of vector arguments).  The command DirectionalCovariantDerivative calculates the covariant derivative of T in the direction of a given vector field and with respect to a given connection -- a tensor of type (r, s) is returned.  The command CovariantDerivative returns the covariant derivative of T as an (r, s + 1) tensor.

E2 > 

with(DifferentialGeometry): with(Tensor):

E2 > 

DGsetup([x, y], E2):

 

Define a vector field X, a connection C, and tensors T1 and T2.

E2 > 

X := evalDG(a*D_x + b*D_y);

XaD_x+bD_y

(3.1)
E2 > 

C := Connection(alpha*dx &t D_y &t dy + beta*dy &t D_x &t dx);

CαdxD_ydy+βdyD_xdx

(3.2)
E2 > 

T1 := evalDG(dx &t D_x);

T1dxD_x

(3.3)
E2 > 

T2 := evalDG(f(x, y)*dy &t D_y);

T2fx,ydyD_y

(3.4)

 

Calculate the covariant derivative of T1.

E2 > 

dT1 := CovariantDerivative(T1, C);

dT1αdxD_ydyβdyD_xdx

(3.5)

 

Calculate the directional derivative of T1.

E2 > 

DirectionalCovariantDerivative(X, T1, C);

αbdxD_yβadyD_x

(3.6)

 

Show that the directional covariant derivative is the contraction of the vector field X with the covariant derivative dT1.

E2 > 

ContractIndices(X, dT1, [[1, 3]]);

αbdxD_yβadyD_x

(3.7)

 

Conversely, calculate the covariant derivative dT1 from the directional covariant derivatives of T1 in the coordinate directions.

E2 > 

evalDG((DirectionalCovariantDerivative(D_x, T1, C) &t dx) + (DirectionalCovariantDerivative(D_y, T1, C) &t dy));

αdxD_ydyβdyD_xdx

(3.8)

 

Calculate the covariant derivative of T2.

E2 > 

CovariantDerivative(T2, C);

αfx,ydxD_ydy+βfx,ydyD_xdx+xfx,ydyD_ydx+yfx,ydyD_ydy

(3.9)

 

Connections on vector bundles can also be defined.

E2 > 

DGsetup([x, y ,z], [u, v], E);

frame name: E

(3.10)
E > 

C1 := Connection(alpha*dv &t D_v &t dx + beta*du &t D_u &t dy);

C1βduD_udy+αdvD_vdx

(3.11)

 

Define a tensor field T3 on the vector bundle E and take its covariant derivative.

E > 

T3 := evalDG(y*du &t D_v);

T3yduD_v

(3.12)
E > 

dT3 := CovariantDerivative(T3, C1);

dT3αyduD_vdx+βy+1duD_vdy

(3.13)

 

Define a mixed tensor T4 -- i.e. a tensor product of tensors on the vector bundle and tensors on the tangent bundle.  To covariantly differentiateT4, a connection C2 on the tangent bundle is also required.

E > 

T4 := evalDG(x*dx &t D_v);

T4xdxD_v

(3.14)
E > 

C2 := Connection(gamma*dx &t D_x &t dx);

C2γdxD_xdx

(3.15)
E > 

dT4 := CovariantDerivative(T4, C1, C2);

dT4αxγx+1dxD_vdx

(3.16)

 

The order in which the connections are specified does not matter.

E > 

CovariantDerivative(T4, C2, C1);

αxγx+1dxD_vdx

(3.17)

Curvature tensors, Ricci tensor, Ricci scalar, Einstein tensor, Weyl tensor, Cotton tensor

 

These tensors are readily computed using the CurvatureTensor, RicciTensor, RicciScalar, EinsteinTensor, WeylTensor and CottonTensor commands.  The CurvatureTensor command accepts either an arbitrary affine connection (connection on the tangent bundle),  a connection on a vector bundle or a metric.  The RicciTensor command computes the Ricci tensor for an arbitrary affine connection.  The RicciScalar, EinsteinTensor, WeylTensor, and Cotton tensor commands may only be computed for metric connections.

E > 

with(DifferentialGeometry): with(Tensor):

 

Example 1.

DGsetup([x, y, z], M):

 

Define a metric g.

M > 

g := (1/(k^2 + x^2 + y^2 + z^2)^2) &mult evalDG((dx &t dx + dy &t dy + dz &t dz ));

gdxdxk2+x2+y2+z22+dydyk2+x2+y2+z22+dzdzk2+x2+y2+z22

(4.1)

 

Calculate the Christoffel connection of g.

M > 

C := Christoffel(g);

C2xdxD_xdxk2+x2+y2+z22ydxD_xdyk2+x2+y2+z22zdxD_xdzk2+x2+y2+z2+2ydxD_ydxk2+x2+y2+z22xdxD_ydyk2+x2+y2+z2+2zdxD_zdxk2+x2+y2+z22xdxD_zdzk2+x2+y2+z22ydyD_xdxk2+x2+y2+z2+2xdyD_xdyk2+x2+y2+z22xdyD_ydxk2+x2+y2+z22ydyD_ydyk2+x2+y2+z22zdyD_ydzk2+x2+y2+z2+2zdyD_zdyk2+x2+y2+z22ydyD_zdzk2+x2+y2+z22zdzD_xdxk2+x2+y2+z2+2xdzD_xdzk2+x2+y2+z22zdzD_ydyk2+x2+y2+z2+2ydzD_ydzk2+x2+y2+z22xdzD_zdxk2+x2+y2+z22ydzD_zdyk2+x2+y2+z22zdzD_zdzk2+x2+y2+z2

(4.2)

 

Calculate the curvature tensor for the metric g from its Christoffel symbol C.

M > 

R := CurvatureTensor(C);

R4k2D_xdydxdyk2+x2+y2+z224k2D_xdydydxk2+x2+y2+z22+4k2D_xdzdxdzk2+x2+y2+z224k2D_xdzdzdxk2+x2+y2+z224k2D_ydxdxdyk2+x2+y2+z22+4k2D_ydxdydxk2+x2+y2+z22+4k2D_ydzdydzk2+x2+y2+z224k2D_ydzdzdyk2+x2+y2+z224k2D_zdxdxdzk2+x2+y2+z22+4k2D_zdxdzdxk2+x2+y2+z224k2D_zdydydzk2+x2+y2+z22+4k2D_zdydzdyk2+x2+y2+z22

(4.3)

 

Calculate the Ricci tensor from the curvature tensor.

M > 

RicciTensor(R);

8k2dxdxk2+x2+y2+z22+8k2dydyk2+x2+y2+z22+8k2dzdzk2+x2+y2+z22

(4.4)

 

Calculate the Ricci scalar from the metric and its curvature tensor.

M > 

RicciScalar(g, R);

24k2

(4.5)

 

Calculate the Einstein tensor from the metric and its curvature tensor.

M > 

EinsteinTensor(g, R);

4k2k2+x2+y2+z22D_xD_x4k2k2+x2+y2+z22D_yD_y4k2k2+x2+y2+z22D_zD_z

(4.6)

 

Calculate the Cotton tensor from the metric, its Christoffel connection and its curvature.  The Cotton tensor vanishes because the metric is conformally flat.

M > 

CottonTensor(g, C, R);

0D_xD_x

(4.7)

 

Example 2.

For a general affine connection, we can still compute the curvature and Ricci tensors.  Note that the Ricci tensor is no longer symmetric.

M > 

C := Connection(z^2*dz &t D_y &t dx - x^2*dy &t D_x &t dz);

Cx2dyD_xdz+z2dzD_ydx

(4.8)
M > 

R := CurvatureTensor(C);

R2xD_xdydxdz+2xD_xdydzdx+x2z2D_xdzdxdzx2z2D_xdzdzdx2zD_ydzdxdz+2zD_ydzdzdx

(4.9)
M > 

RicciTensor(R);

2xdydz+x2z2dzdz

(4.10)

 

Example 3.

The CurvatureTensor command also computes the curvature tensor of a connection on a vector bundle.

M > 

DGsetup([x, y, z], [u, v], E);

frame name: E

(4.11)
E > 

C := Connection(z^2*du &t D_v &t dx);

Cz2duD_vdx

(4.12)
E > 

CurvatureTensor(C);

2zD_vdudxdz+2zD_vdudzdx

(4.13)

Exercises

Exercise 1

 

Let g be a metric.  Then the Laplacian of a function f with respect to the metric g is defined as the trace of the second covariant derivative of f (that is, the contraction of the second covariant derivative with the inverse of the metric).  Use this definition to calculate the Laplacian of a function in spherical coordinates.

Hint: Use the PushPullTensor command to transform the standard metric on Euclidean space to spherical coordinates.

 

E > 

with(DifferentialGeometry): with(Tensor):

 

Solution

 

Define Cartesian and spherical coordinate systems.

E > 

DGsetup([x, y, z], Euc):

Euc > 

DGsetup([rho, theta, phi], Sph):

 

Define the Euclidean metric on Euc and use the PushPullTensor command to  rewrite this metric in spherical coordinates.

Sph > 

gEuc := evalDG(dx &t dx + dy &t dy + dz &t dz);

gEucdxdx+dydy+dzdz

(5.1.1.1)
Euc > 

T := Transformation(Sph, Euc, [x = rho*cos(theta)*sin(phi), y = rho*sin(theta)*sin(phi), z = rho*cos(phi)]);

Tx=ρcosθsinφ,y=ρsinθsinφ,z=ρcosφ

(5.1.1.2)
Sph > 

gSph := Pullback(T, gEuc);

gSphdrhodrho+ρ2sinφ2dthetadtheta+ρ2dphidphi

(5.1.1.3)

 

Calculate the inverse of the metric gSph.

Sph > 

h := InverseMetric(gSph);

hD_rhoD_rho+D_thetaD_thetaρ2sinφ2+D_phiD_phiρ2

(5.1.1.4)

 

Calculate the Christoffel connection for the metric gSph.

Sph > 

C := Christoffel(gSph);

CdrhoD_thetadthetaρ+drhoD_phidphiρρsinφ2dthetaD_rhodtheta+dthetaD_thetadrhoρ+cosφdthetaD_thetadphisinφsinφcosφdthetaD_phidthetaρdphiD_rhodphi+cosφdphiD_thetadthetasinφ+dphiD_phidrhoρ

(5.1.1.5)

 

Calculate the covariant derivative of the function f.

Sph > 

PDEtools:-declare(f(rho, theta, phi));

fρ,θ,φwill now be displayed asf

(5.1.1.6)
Sph > 

df := CovariantDerivative(f(rho, theta, phi), C);

dffρdrho+fθdtheta+fφdphi

(5.1.1.7)

 

Calculate the 2nd covariant derivative of the function f.

Sph > 

d2f := CovariantDerivative(df, C);

d2ffρ,ρdrhodrho+fθ+fρ,θρdrhodthetaρfφfφ,ρρdrhodphiρ+fθ+fρ,θρdthetadrhoρ+sinφcosφfφ+ρfρρfρcosφ2+fθ,θdthetadtheta+cosφfθ+fφ,θsinφdthetadphisinφfφfφ,ρρdphidrhoρ+cosφfθ+fφ,θsinφdphidthetasinφ+ρfρ+fφ,φdphidphi

(5.1.1.8)

 

Calculate the Laplacian of f.

Sph > 

Lap := ContractIndices(h, d2f, [[1, 1], [2, 2]]);

Lap2ρfρ+2ρfρcosφ2fφ,φ+fφ,φcosφ2sinφcosφfφfθ,θfρ,ρρ2+fρ,ρρ2cosφ2ρ2sinφ2

(5.1.1.9)
Sph > 

simplify(Lap, [cos(phi)^2 = 1 - sin(phi)^2]);

fθ,θ+2ρfρ+fφ,φ+fρ,ρρ2sinφ2+sinφcosφfφρ2sinφ2

(5.1.1.10)

Exercise 2

 

An affine connection nabla on a manifold M is abstractly defined as a mapping (X,Y) -> nabla_X(Y) -- the directional covariant derivative of a vector field Y in the direction of the vector field X.  In terms of this definition, the curvature tensor R is defined by

R(X, Y)(Z) = nabla_X(nabla_Y(Z)) - nabla_Y(nabla_X(Z)) - nabla_[X, Y](Z).

Here X, Y and Z are vector fields on M and R(X, Y)(Z)  denotes the contraction of R against the vector fields X, Y, Z  over the 3rd ,4th and 1st indices respectively. Also, [X, Y] is the Lie bracket of X and Y.

 

Write a program CheckCurvatureDefinition whose arguments are a connection, its curvature and 3 vector fields and which checks the validity of this definition.  Test your program on the following example.

 

Sph > 

with(DifferentialGeometry): with(Tensor):

Sph > 

DGsetup([x, y, z], M):

M > 

C := Connection(x^2*dx &t D_y &t dz - y*z*dz &t D_z &t dy);

Cx2dxD_ydzyzdzD_zdy

(5.2.1)
M > 

X1, Y1, Z1 := evalDG(x*D_y - y^2*D_z), evalDG(z^2*D_x + x*y*D_y), evalDG(y*z*D_x + z^2*D_z);

X1,Y1,Z1xD_yy2D_z,z2D_x+xyD_y,yzD_x+z2D_z

(5.2.2)

 

Solution

 

M > 

CheckCurvatureDefinition := proc(C, R, X, Y, Z)

M > 

local LHS, RHS1, RHS2, RHS3, W, Ans;

M > 

LHS := ContractIndices(Z &tensor X &tensor Y, R, [[1, 2], [2, 3], [3, 4]]);

M > 

RHS1 := DirectionalCovariantDerivative(X, DirectionalCovariantDerivative(Y, Z, C), C);

M > 

RHS2 := DirectionalCovariantDerivative(Y, DirectionalCovariantDerivative(X, Z, C), C);

M > 

W := LieBracket(X, Y);

M > 

RHS3 := DirectionalCovariantDerivative(W, Z, C);

M > 

Ans := evalDG(LHS - (RHS1 - RHS2 - RHS3));

M > 

simplify(Ans):

M > 

end:

M > 

R := CurvatureTensor(C);

R2xD_ydxdxdz2xD_ydxdzdx+yD_zdzdydzyD_zdzdzdy

(5.2.1.1)
M > 

CheckCurvatureDefinition(C, R, X1, Y1, Z1);

0D_x

(5.2.1.2)

Exercise 3

 

Check that the curvature tensor (as a rank 4 covariant tensor) for the metric g satisfies the following identities:

[i]  skew-symmetric in the indices 1, 2.

[ii]  skew-symmetric in the indices 3, 4.

[iii]  cyclic permutation of the indices 2, 3, 4 vanishes.

[iv]  symmetric under interchange of the indices 1 <--> 3 and 2 <--> 4.

[v]  cyclic permutation of the indices 3, 4, 5 of the covariant derivative of R vanishes.

 

M > 

with(DifferentialGeometry): with(Tensor):

M > 

DGsetup([x, y, z, w], M):

M > 

g := evalDG(exp(z)*dx &t dx + exp(x)*dy &t dy + exp(w)*dz &t dz + dw &t dw);

g&ExponentialE;zdxdx&plus;&ExponentialE;xdydy&plus;&ExponentialE;wdzdz&plus;dwdw

(5.3.1)

 

Solution

 

M > 

C := Christoffel(g);

CdxD_xdz2&plus;dxD_ydy212&ExponentialE;w&plus;zdxD_zdx12&ExponentialE;z&plus;xdyD_xdy&plus;dyD_ydx2&plus;dzD_xdx2&plus;dzD_zdw212&ExponentialE;wdzD_wdz&plus;dwD_zdz2

(5.3.1.1)
M > 

R0 := CurvatureTensor(C);

R0D_xdzdwdx4&plus;D_ydxdydz4&plus;D_ydxdxdy414&ExponentialE;zD_wdxdxdz&plus;14&ExponentialE;zD_wdxdzdx&plus;D_ydzdydx4D_zdwdzdw4D_xdwdzdx4&plus;D_xdwdxdz4D_ydxdzdy4D_xdzdxdz414&ExponentialE;w&plus;xD_zdydydxD_ydzdxdy4&plus;D_xdzdxdw4D_ydxdydx4&plus;D_zdwdwdz4&plus;D_xdzdzdx4&plus;14&ExponentialE;wD_wdzdzdw&plus;14&ExponentialE;z&plus;xD_xdydydx14&ExponentialE;z&plus;xD_xdydydz14&ExponentialE;z&plus;xD_xdydxdy14&ExponentialE;wD_wdzdwdz&plus;14&ExponentialE;w&plus;zD_zdxdwdx&plus;14&ExponentialE;w&plus;xD_zdydxdy14&ExponentialE;w&plus;zD_zdxdxdw14&ExponentialE;w&plus;zD_zdxdzdx&plus;14&ExponentialE;z&plus;xD_xdydzdy&plus;14&ExponentialE;w&plus;zD_zdxdxdz

(5.3.1.2)
M > 

R := RaiseLowerIndices(g, R0, [1]);

R14&ExponentialE;xdxdydxdy&plus;14&ExponentialE;xdxdydydx14&ExponentialE;xdzdydydx14&ExponentialE;wdzdwdzdw&plus;14&ExponentialE;wdzdwdwdz14&ExponentialE;zdwdxdxdz&plus;14&ExponentialE;zdwdxdzdx&plus;14&ExponentialE;wdwdzdzdw14&ExponentialE;wdwdzdwdz14&ExponentialE;zdzdxdzdx&plus;14&ExponentialE;zdzdxdwdx&plus;14&ExponentialE;xdzdydxdy&plus;14&ExponentialE;xdydzdydx&plus;14&ExponentialE;zdzdxdxdz14&ExponentialE;zdzdxdxdw&plus;14&ExponentialE;zdxdzdxdw&plus;14&ExponentialE;zdxdzdzdx14&ExponentialE;zdxdzdwdx&plus;14&ExponentialE;zdxdwdxdz14&ExponentialE;zdxdwdzdx&plus;14&ExponentialE;xdydxdxdy14&ExponentialE;xdydxdydx&plus;14&ExponentialE;xdydxdydz14&ExponentialE;xdydxdzdy14&ExponentialE;xdydzdxdy14&ExponentialE;xdxdydydz&plus;14&ExponentialE;xdxdydzdy14&ExponentialE;zdxdzdxdz

(5.3.1.3)

 

Part [i]

M > 

SymmetrizeIndices(R, [1, 2], "Symmetric");

0dxdxdxdx

(5.3.1.4)

 

Part [ii]

M > 

SymmetrizeIndices(R, [3, 4], "Symmetric");

0dxdxdxdx

(5.3.1.5)

 

Part [iii]

M > 

SymmetrizeIndices(R, [2, 3, 4], "SkewSymmetric");

0dxdxdxdx

(5.3.1.6)

 

Part [iv]

M > 

R &minus RearrangeIndices(R, [[1, 3], [2, 4]]);

0dxdxdxdx

(5.3.1.7)

 

Part [v]

M > 

R1 := CovariantDerivative(R, C):

M > 

SymmetrizeIndices(R1, [3, 4, 5], "SkewSymmetric");

0dxdxdxdxdx

(5.3.1.8)

Exercise 4

 

The covariant divergence of the Einstein tensor is identically zero.  Check this identity for the metric in Exercise 3.

 

M > 

with(DifferentialGeometry): with(Tensor):

M > 

DGsetup([x, y, z, w], M):

M > 

g := evalDG(exp(z)*dx &t dx + exp(x)*dy &t dy + exp(w)*dz &t dz + dw &t dw);

g&ExponentialE;zdxdx&plus;&ExponentialE;xdydy&plus;&ExponentialE;wdzdz&plus;dwdw

(5.4.1)

 

Solution

 

Calculate the Christoffel connection.

M > 

C := Christoffel(g):

 

Calculate the curvature tensor.

M > 

R0 := CurvatureTensor(C):

 

Calculate the Einstein tensor.

M > 

E := EinsteinTensor(g, R0);

E14&ExponentialE;zD_xD_x&plus;14&ExponentialE;zwD_xD_z&plus;14&ExponentialE;x&plus;14&ExponentialE;xwD_yD_y&plus;14&ExponentialE;zwD_zD_x&plus;14&ExponentialE;zwD_zD_z&plus;14&ExponentialE;wD_zD_w&plus;14&ExponentialE;wD_wD_z&plus;14&ExponentialE;w&plus;14&ExponentialE;zD_wD_w

(5.4.1.1)

 

Calculate the covariant derivative of the Einstein tensor.

M > 

dE := CovariantDerivative(E, C);

dE14&ExponentialE;zwD_xD_xdx18&ExponentialE;zwD_xD_ydy&plus;18&ExponentialE;zw18&ExponentialE;wD_xD_zdx18&ExponentialE;zwD_xD_zdz18&ExponentialE;zwD_xD_zdw&plus;18&ExponentialE;wD_xD_wdx18&ExponentialE;zD_xD_wdz18&ExponentialE;zwD_yD_xdy14&ExponentialE;xwD_yD_ydw&plus;18&ExponentialE;zwD_yD_zdy&plus;18&ExponentialE;zw18&ExponentialE;wD_zD_xdx18&ExponentialE;zwD_zD_xdz18&ExponentialE;zwD_zD_xdw&plus;18&ExponentialE;zwD_zD_ydy14&ExponentialE;2wD_zD_zdx&plus;14&ExponentialE;w14&ExponentialE;zwD_zD_zdz&plus;18&ExponentialE;wD_zD_wdz18&ExponentialE;wD_zD_wdw&plus;18&ExponentialE;wD_wD_xdx18&ExponentialE;zD_wD_xdz&plus;18&ExponentialE;wD_wD_zdz18&ExponentialE;wD_wD_zdw&plus;1414&ExponentialE;zD_wD_wdz14&ExponentialE;wD_wD_wdw

(5.4.1.2)

 

Contract the 2nd and 3rd indices of dE.

M > 

ContractIndices(dE, [[2, 3]]);

0D_x

(5.4.1.3)

Exercise 5

 

For what values of a1, a2, a3, a4 does the metric g have vanishing Ricci tensor.  (See Stephani, Kramer et. al., page 197.)

 

M > 

with(DifferentialGeometry): with(Tensor):

M > 

DGsetup([x1, x2, x3, x4], M):

M > 

G := LinearAlgebra:-DiagonalMatrix([x4^(2*a1), x4^(2*a2), x4^(2*a3), x4^(2*a4)]);

M > 

g := convert(G, DGtensor, [["cov_bas", "cov_bas"], []]);

gx42a1dx1dx1&plus;x42a2dx2dx2&plus;x42a3dx3dx3&plus;x42a4dx4dx4

(5.5.1)

 

Solution

 

M > 

C := Christoffel(g);

Ca1dx1D_x1dx4x4x42a4&plus;2a11a1dx1D_x4dx1&plus;a2dx2D_x2dx4x4x42a4&plus;2a21a2dx2D_x4dx2&plus;a3dx3D_x3dx4x4x42a4&plus;2a31a3dx3D_x4dx3&plus;a1dx4D_x1dx1x4&plus;a2dx4D_x2dx2x4&plus;a3dx4D_x3dx3x4&plus;a4dx4D_x4dx4x4

(5.5.1.1)
M > 

R := CurvatureTensor(C);

Ra1x42a4&plus;2a22a2D_x1dx2dx1dx2&plus;a1x42a4&plus;2a22a2D_x1dx2dx2dx1a1x42a4&plus;2a32a3D_x1dx3dx1dx3&plus;a1x42a4&plus;2a32a3D_x1dx3dx3dx1a1a4&plus;a11D_x1dx4dx1dx4x42&plus;a1a4&plus;a11D_x1dx4dx4dx1x42&plus;a2x42a4&plus;2a12a1D_x2dx1dx1dx2a2x42a4&plus;2a12a1D_x2dx1dx2dx1a2x42a4&plus;2a32a3D_x2dx3dx2dx3&plus;a2x42a4&plus;2a32a3D_x2dx3dx3dx2a2a4&plus;a21D_x2dx4dx2dx4x42&plus;a2a4&plus;a21D_x2dx4dx4dx2x42&plus;a3x42a4&plus;2a12a1D_x3dx1dx1dx3a3x42a4&plus;2a12a1D_x3dx1dx3dx1&plus;a3x42a4&plus;2a22a2D_x3dx2dx2dx3a3x42a4&plus;2a22a2D_x3dx2dx3dx2a3a4&plus;a31D_x3dx4dx3dx4x42&plus;a3a4&plus;a31D_x3dx4dx4dx3x42&plus;x42a4&plus;2a12a1a4&plus;a11D_x4dx1dx1dx4x42a4&plus;2a12a1a4&plus;a11D_x4dx1dx4dx1&plus;x42a4&plus;2a22a2a4&plus;a21D_x4dx2dx2dx4x42a4&plus;2a22a2a4&plus;a21D_x4dx2dx4dx2&plus;x42a4&plus;2a32a3a4&plus;a31D_x4dx3dx3dx4x42a4&plus;2a32a3a4&plus;a31D_x4dx3dx4dx3

(5.5.1.2)
M > 

Ric := RicciTensor(R);

Ricx42a4&plus;2a12a1a4&plus;a11&plus;a3&plus;a2dx1dx1x42a4&plus;2a22a2a4&plus;a11&plus;a3&plus;a2dx2dx2x42a4&plus;2a32a3a4&plus;a11&plus;a3&plus;a2dx3dx3a3a4&plus;a32a3a2a4&plus;a22a2a1a4&plus;a12a1dx4dx4x42

(5.5.1.3)
M > 

Constraints := [a1 + a2 + a3 = a4 + 1, a1^2 + a2^2 + a3^2 = (a4 + 1)^2];

Constraintsa1&plus;a2&plus;a3&equals;a4&plus;1&comma;a12&plus;a22&plus;a32&equals;a4&plus;12

(5.5.1.4)
M > 

Tools:-DGmap(1, simplify, Ric, Constraints);

0dx1dx1

(5.5.1.5)

Exercise 6

 

A vector field is parallel with respect to a connection C if  and only if covariant derivative vanishes. The integrability conditions  which insure the existence of a basis of parallel vector fields is given by the vanishing of the curvature tensor.

 

[i]  Check that the curvature tensor of the symmetric connection C vanishes.

[ii]  Then use the Maple pdsolve command to find a set of 3 vector fields X1, X2, X3 which are parallel with respect to C and satisfy X1(p) = D_x, X2(p) = D_y, and X3(p) = D_z, where p = [1, 1, 1].

 

M > 

with(DifferentialGeometry): with(Tensor):

E3 > 

DGsetup([x, y, z], E3):

E3 > 

C := Connection((1/y)*dx &t D_x &t dy - (1/z)*dx &t D_x &t dz + (1/y)*dy &t D_x &t dx - (1/z)*dy &t D_y &t dz - (1/z)*dz &t D_x &t dx - (1/z)*dz &t D_y &t dy - (2/z)*dz &t D_z &t dz);

CdxD_xdyydxD_xdzz&plus;dyD_xdxydyD_ydzzdzD_xdxzdzD_ydyz2dzD_zdzz

(5.6.1)

 

Solution

 

Part [i]

E3 > 

CurvatureTensor(C);

0D_xdxdxdx

(5.6.1.1)

 

Part [ii]

First create a vector field on E3 with arbitrary coefficients.

E3 > 

PDEtools:-declare([a, b, c](x, y, z), quiet);

E3 > 

U0 := evalDG(a(x, y, z)*D_x + b(x, y, z)*D_y + c(x, y, z)*D_z);

U0aD_x&plus;bD_y&plus;cD_z

(5.6.1.2)

 

Calculate the covariant derivative of the vector field U0 with respect to the connection C.

E3 > 

V := CovariantDerivative(U0, C);

Vcy&plus;zb&plus;zaxyD_xdxyz&plus;a&plus;ayyD_xdyyaazzD_xdzz&plus;bxD_ydx&plus;c&plus;byzD_ydyzbbzzD_ydzz&plus;cxD_zdx&plus;cyD_zdy2cczzD_zdzz

(5.6.1.3)

 

Solve the partial differential equations obtained by setting the coefficients of the covariant derivatives to 0.

E3 > 

Eq := Tools:-DGinfo(V, "CoefficientSet");

Eqbx&comma;cx&comma;cy&comma;a&plus;ayyy&comma;c&plus;byzz&comma;cy&plus;zb&plus;zaxyyz&comma;aazzz&comma;bbzzz&comma;2cczzz

(5.6.1.4)
E3 > 

soln := pdsolve(Eq);

solna&equals;_C2x&plus;_C3zy&comma;b&equals;z_C1y_C2&comma;c&equals;_C1z2

(5.6.1.5)

 

Back substitute the solution to the equations Eq into the vector field U0.

E3 > 

U1 := eval(U0, soln);

U1_C2x&plus;_C3zD_xy&plus;z_C1y_C2D_y&plus;_C1z2D_z

(5.6.1.6)
E3 > 

U2 := eval(U1, [x = 1, y = 1, z = 1]);

U2_C2&plus;_C3D_x&plus;_C1_C2D_y&plus;_C1D_z

(5.6.1.7)

 

Determine the values for _C1, _C2, _C3 to match the initial values specified in the problem.

E3 > 

X := Tools:-DGsimplify(eval(U1, {_C1 = 0, _C2 = 0, _C3 = 1}));

XzD_xy

(5.6.1.8)
E3 > 

Y := Tools:-DGsimplify(eval(U1, {_C1 = 0, _C2 = -1, _C3 = 1}));

Yx1zD_xy&plus;zD_y

(5.6.1.9)
E3 > 

Z := Tools:-DGsimplify(eval(U1, {_C1 = 1, _C2 = 1, _C3 = -1}));

Zx1zD_xy&plus;zy1D_y&plus;z2D_z

(5.6.1.10)

 

Remark. The Lie brackets of X, Y, and Z all vanish.

E3 > 

LieBracket(X, Y), LieBracket(X, Z), LieBracket(Y, Z);

0D_x&comma;0D_x&comma;0D_x

(5.6.1.11)

Exercise 7

 

The following exercise appears in Lovelock and Rund, page 178, and also Spivak, page 320.

 

Let A be a symmetric rank 2 covariant tensor on R^n.  Let nabla denote covariant differentiation with respect to the zero connection on R^n and consider the system of  PDEs

A = SymmetrizeIndices(nabla(U), [1, 2], symmetric)  (*)

The integrability conditions for the equations (*) are

SymmetrizeIndices(nabla(nabla(A), [[1, 3], [2, 4]], skewsymmetric) = 0  (**)

 

[i]  Write a program which checks these integrability conditions.

[ii]  Integrate the equations (*) by using two applications of the homotopy operator for the exterior derivative operator.

 

Use the following tensors to check your programs.

 

E3 > 

with(DifferentialGeometry): with(Tensor):

E3 > 

DGsetup([x, y, z], M3):

M3 > 

DGsetup([x, y, z, w], M4):

M4 > 

ChangeFrame(M3):

M3 > 

A1 := evalDG((y + z)*dx &t dz + x*dy &t dz + (y + z)*dz &t dx + x*dz &t dy);

A1y&plus;zdxdz&plus;xdydz&plus;y&plus;zdzdx&plus;xdzdy

(5.7.1)
M3 > 

A2 := evalDG(-2/(x^2 + y^2 + z^2)^2*x*dx &t dx - 1/(x^2 + y^2 + z^2)^2*y*dx &t dy - 1/(x^2 + y^2 + z^2)^2*z*dx &t dz - 1/(x^2 + y^2 + z^2)^2*y*dy &t dx - 1/(x^2 + y^2 + z^2)^2*z*dz &t dx);

A22xdxdxx2&plus;y2&plus;z22ydxdyx2&plus;y2&plus;z22zdxdzx2&plus;y2&plus;z22ydydxx2&plus;y2&plus;z22zdzdxx2&plus;y2&plus;z22

(5.7.2)
M3 > 

ChangeFrame(M4):

M4 > 

A3 := evalDG(1/2*cos(x)*sin(y)*sin(z)*dx &t dw + 1/2*sin(x)*cos(y)*sin(z)*dy &t dw + 1/2*sin(x)*sin(y)*cos(z)*dz &t dw + 1/2*cos(x)*sin(y)*sin(z)*dw &t dx + 1/2*sin(x)*cos(y)*sin(z)*dw &t dy + 1/2*sin(x)*sin(y)*cos(z)*dw &t dz);

A312cosxsinysinzdxdw&plus;12sinxcosysinzdydw&plus;12sinxsinycoszdzdw&plus;12cosxsinysinzdwdx&plus;12sinxcosysinzdwdy&plus;12sinxsinycoszdwdz

(5.7.3)

 

Hint: Here is a program which computes the right-hand side of (*).

M4 > 

Delta:= (U,C) -> SymmetrizeIndices(CovariantDerivative(U, C), [1, 2], "Symmetric"):

 

Solution

 

M3 > 

CheckIntegrability := proc(A, C)

M3 > 

local T;

M3 > 

T := CovariantDerivative(CovariantDerivative(A, C), C):

M3 > 

SymmetrizeIndices(SymmetrizeIndices(T, [1, 3], "SkewSymmetric"), [2, 4], "SkewSymmetric");

M4 > 

end:

M4 > 

 

M3 > 

Solve := proc(A, C)

M3 > 

local Fr, n, B, Omega, T, i, j, alpha, beta, omega, theta, S, U;

M3 > 

Fr := Tools:-DGinfo(A, "ObjectFrame");

M3 > 

n := Tools:-DGinfo(Fr, "FrameBaseDimension");

M3 > 

B := Tools:-DGinfo(Fr, "FrameBaseVectors");

M3 > 

Omega := Tools:-DGinfo(Fr, "FrameBaseForms");

M3 > 

T := CovariantDerivative(A, C);

M3 > 

omega := Tools:-DGzero("form", 2);

M3 > 

for i to n do for j to n do

M3 > 

alpha := ContractIndices(B[i] &tensor B[j], T, [[1, 2], [2, 3]]) &minus ContractIndices(B[j] &tensor B[i], T, [[1, 2], [2, 3]]);

M3 > 

beta := convert(alpha, DGform);

M3 > 

theta := DeRhamHomotopy(beta, args[3 .. -1]);

M3 > 

omega := omega &plus (theta &mult (Omega[i] &wedge Omega[j]));

M3 > 

od;

M3 > 

od;

M3 > 

S := A &plus ((1/2) &mult (convert(omega, DGtensor)));

M3 > 

U := Tools:-DGzero("form", 1);

M3 > 

for i to n do

M3 > 

alpha := ContractIndices(convert(B[i], DGtensor), S, [[1, 1]]);

M3 > 

beta := convert(alpha, DGform);

M3 > 

theta := DeRhamHomotopy(beta, args[3 .. -1]);

M3 > 

U := U &plus (theta &mult (Omega[i]));

M3 > 

od:

M3 > 

convert(U, DGtensor):

M4 > 

end:

 

Part [i]

M4 > 

ChangeFrame(M3):

M3 > 

C := Connection(0 &mult dx &t D_x &t dx);

C0dxD_xdx

(5.7.1.1)
M3 > 

CheckIntegrability(A1, C);

0dxdxdxdx

(5.7.1.2)
M3 > 

U1 := Solve(A1, C);

U1z2dx&plus;2xydz

(5.7.1.3)
M3 > 

A1 &minus Delta(U1, C);

0dxdx

(5.7.1.4)

 

Part [ii]

M3 > 

CheckIntegrability(A2, C);

0dxdxdxdx

(5.7.1.5)
M3 > 

U2 := Solve(A2, C, integrationlimits = [infinity, 1]);

U2dxx2&plus;y2&plus;z2

(5.7.1.6)
M3 > 

A2 &minus Delta(U2, C);

0dxdx

(5.7.1.7)

 

Part [iii]

M3 > 

ChangeFrame(M4):

M4 > 

C := Connection(0 &mult dx &t D_x &t dx);

C0dxD_xdx

(5.7.1.8)
M4 > 

U3 := Solve(A3, C);

U314sinz&plus;x&plus;y&plus;14sinz&plus;xy14sinz&plus;xy14sinz&plus;x&plus;ydw

(5.7.1.9)
M4 > 

U3 := map(expand, U3);

U3sinxsinysinzdw

(5.7.1.10)
M4 > 

A3 &minus Delta(U3, C);

0dxdx

(5.7.1.11)

Exercise 8

 

Use the Maple pdsolve command to determine which of the following connections C1, C2, C3 are the Christoffel symbols of a metric.

 

M4 > 

with(DifferentialGeometry): with(Tensor):

M4 > 

DGsetup([x, y], E2);

frame name: E2

(5.8.1)
E2 > 

C1 := Connection(x*dx &t D_y &t dx);

C1xdxD_ydx

(5.8.2)
E2 > 

C2 := Connection(y^2*dx &t D_y &t dx);

C2y2dxD_ydx

(5.8.3)
E2 > 

DGsetup([x, y, z], E3);

frame name: E3

(5.8.4)
E3 > 

C3 := Connection((-1/x)*dx &t D_x &t dx - (1/2/x)*dx &t D_y &t dy - (1/2/z)*dy &t D_x &t dy - (1/2/x)*dy &t D_y &t dx - (1/2/z)*dy &t D_y &t dz - (1/2/x)*dy &t D_z &t dy - (1/2/z)*dz &t D_y &t dy - (1/z)*dz &t D_z &t dz);

C3dxD_xdxxdxD_ydy2xdyD_xdy2zdyD_ydx2xdyD_ydz2zdyD_zdy2xdzD_ydy2zdzD_zdzz

(5.8.5)

 

Solution

 

E3 > 

PDEtools:-declare([a, b, c](x, y), quiet);

E3 > 

ChangeFrame(E2):

E2 > 

g := evalDG(a(x, y)*dx &t dx + 2*b(x, y)*dx &s dy + c(x, y)*dy &t dy);

gadxdx&plus;2bdxdy&plus;2bdydx&plus;cdydy

(5.8.1.1)

 

Part 1.

E2 > 

k1 := CovariantDerivative(g, C1);

k14xb&plus;axdxdxdx&plus;aydxdxdy&plus;xc&plus;2bxdxdydx&plus;2bydxdydy&plus;xc&plus;2bxdydxdx&plus;2bydydxdy&plus;cxdydydx&plus;cydydydy

(5.8.1.2)
E2 > 

Eq1 := Tools:-DGinfo(k1, "CoefficientSet");

Eq1ay&comma;cx&comma;cy&comma;2by&comma;4xb&plus;ax&comma;xc&plus;2bx

(5.8.1.3)
E2 > 

soln1 := pdsolve(Eq1);

soln1a&equals;_C1x44&plus;_C2x22&plus;_C3&comma;b&equals;x2_C14&plus;_C24&comma;c&equals;_C1

(5.8.1.4)
E2 > 

g1 := eval(g, soln1);

g1_C1x44&plus;_C2x22&plus;_C3dxdx&plus;x2_C12&plus;_C22dxdy&plus;x2_C12&plus;_C22dydx&plus;_C1dydy

(5.8.1.5)
E2 > 

Christoffel(g1);

xdxD_ydx

(5.8.1.6)

 

Part 2.

E2 > 

k2 := CovariantDerivative(g, C2);

k24y2b&plus;axdxdxdx&plus;aydxdxdy&plus;y2c&plus;2bxdxdydx&plus;2bydxdydy&plus;y2c&plus;2bxdydxdx&plus;2bydydxdy&plus;cxdydydx&plus;cydydydy

(5.8.1.7)
E2 > 

Eq2 := Tools:-DGinfo(k2, "CoefficientSet");

Eq2ay&comma;cx&comma;cy&comma;2by&comma;4y2b&plus;ax&comma;y2c&plus;2bx

(5.8.1.8)
E2 > 

soln2 := pdsolve(Eq2);

soln2a&equals;_C1&comma;b&equals;0&comma;c&equals;0

(5.8.1.9)
E2 > 

Tools:-DGsimplify(eval(g, soln2));

_C1dxdx

(5.8.1.10)

The metric is degenerate so that C2 is not a metric connection.

 

Part 3.

E2 > 

vars := [seq(a||i, i = 1 .. 6)](x, y, z):

E2 > 

PDEtools:-declare(vars, quiet);

E2 > 

ChangeFrame(E3):

E3 > 

S := GenerateSymmetricTensors([dx, dy, dz], 2);

Sdxdx&comma;dxdy2&plus;dydx2&comma;dxdz2&plus;dzdx2&comma;dydy&comma;dydz2&plus;dzdy2&comma;dzdz

(5.8.1.11)
E3 > 

g := DGzip(vars, S, "plus");

ga1dxdx&plus;a2dxdy2&plus;a3dxdz2&plus;a2dydx2&plus;a4dydy&plus;a5dydz2&plus;a3dzdx2&plus;a5dzdy2&plus;a6dzdz

(5.8.1.12)
E3 > 

k3 := CovariantDerivative(g, C3);

k312a5&plus;2a6yzdzdzdyz&plus;a4&plus;a4xxdydydxx&plus;142a6z&plus;2xa4&plus;xa3&plus;2xa5yzdydzdyxz&plus;2a6&plus;a6zzdzdzdzz&plus;143a5&plus;2a5zzdydzdzz&plus;14a2x&plus;za5&plus;2za3y