Christoffel Computation
David Hilditch & Anton Khirnov, Feb. 2023.

Define coordinates, metric and inverse metric

X={t,x,y,z};

g={{gtt[t,x,y,z],gtx[t,x,y,z],gty[t,x,y,z],gtz[t,x,y,z]},{gtx[t,x,y,z],gxx[t,x,y,z],gxy[t,x,y,z],gxz[t,x,y,z]},{gty[t,x,y,z],gxy[t,x,y,z],gyy[t,x,y,z],gyz[t,x,y,z]},{gtz[t,x,y,z],gxz[t,x,y,z],gyz[t,x,y,z],gzz[t,x,y,z]}};g//MatrixForm

ginv=g//Inverse//Simplify;

Compute Christoffels (ddd & udd)

Christoffelsddd=Table[1/2((∂_(X[[μ]]))g[[ν,δ]]+(∂_(X[[ν]]))g[[μ,δ]]-(∂_(X[[δ]]))g[[μ,ν]]),{δ,4},{μ,4},{ν,4}]//Simplify;

Christoffelsudd=Table[1/2Sum[ginv[[α,δ]]((∂_(X[[μ]]))g[[ν,δ]]+(∂_(X[[ν]]))g[[μ,δ]]-(∂_(X[[δ]]))g[[μ,ν]]),{δ,4}],{α,4},{μ,4},{ν,4}]//Simplify;

Rules for twist-free axisymmetry with reflection symmetry, on the symmetry axis and equatorial plane

KillMeOnAxisRules={gtx->Function[{t,x,y,z},0],gty->Function[{t,x,y,z},0],gxy->Function[{t,x,y,z},0],gyz->Function[{t,x,y,z},0],gxz->Function[{t,x,y,z},0]};

KillMeEquatorRules={gtz->Function[{t,x,y,z},0],gty->Function[{t,x,y,z},0],gxy->Function[{t,x,y,z},0],gyz->Function[{t,x,y,z},0],gxz[t,x,y,z]->0};

Examine metric on axis and in equator :

g/.KillMeEquatorRules//MatrixForm
g/.KillMeOnAxisRules//MatrixForm

Collect the relevant components on Axis:

{Christoffelsddd[[1,1,1]],Christoffelsddd[[4,1,1]],Christoffelsddd[[1,4,4]],Christoffelsddd[[4,4,4]],Christoffelsddd[[1,1,4]],Christoffelsddd[[4,1,4]]}/.KillMeOnAxisRules//Simplify;

Double check that we can get the udd part of the metric by multiplying with the inverse of just one block of the inverse:

g/.KillMeOnAxisRules

XAxi={t,z};

gOnAxisBlock={{gtt[t,x,y,z],gtz[t,x,y,z]},{gtz[t,x,y,z],gzz[t,x,y,z]}};gOnAxisBlock//MatrixForm

gOnAxisBlockinv=gOnAxisBlock//Inverse//Simplify;

ChristoffelsAxisBlockddd=Table[1/2((∂_(XAxi[[μ]]))gOnAxisBlock[[ν,δ]]+(∂_(XAxi[[ν]]))gOnAxisBlock[[μ,δ]]-(∂_(XAxi[[δ]]))gOnAxisBlock[[μ,ν]]),{δ,2},{μ,2},{ν,2}]//Simplify;

ChristoffelsAxisBlockudd=Table[Sum[gOnAxisBlockinv[[α,δ]]ChristoffelsAxisBlockddd[[δ,μ,ν]],{δ,2}],{α,2},{μ,2},{ν,2}];

{ChristoffelsAxisBlockudd[[1,1,1]]-Christoffelsudd[[1,1,1]],ChristoffelsAxisBlockudd[[1,1,2]]-Christoffelsudd[[1,1,4]],ChristoffelsAxisBlockudd[[1,2,2]]-Christoffelsudd[[1,4,4]],ChristoffelsAxisBlockudd[[2,1,1]]-Christoffelsudd[[4,1,1]],ChristoffelsAxisBlockudd[[2,1,2]]-Christoffelsudd[[4,1,4]],ChristoffelsAxisBlockudd[[2,2,2]]-Christoffelsudd[[4,4,4]]}/.KillMeOnAxisRules//Simplify

All is well!

Collect the relevant components at the equator:

{Christoffelsddd[[1,1,1]],Christoffelsddd[[2,1,1]],Christoffelsddd[[1,2,2]],Christoffelsddd[[2,2,2]],Christoffelsddd[[1,1,2]],Christoffelsddd[[2,1,2]]}/.KillMeEquatorRules//Simplify;

Double check that we can get the udd part of the metric by multiplying with the inverse of just one block of the inverse:

g/.KillMeEquatorRules

XEq={t,x};

gEquatorBlock={{gtt[t,x,y,z],gtx[t,x,y,z]},{gtx[t,x,y,z],gxx[t,x,y,z]}};gEquatorBlock//MatrixForm

gEquatorBlockinv=gEquatorBlock//Inverse//Simplify;

ChristoffelsEquatorBlockddd=Table[1/2((∂_(XEq[[μ]]))gEquatorBlock[[ν,δ]]+(∂_(XEq[[ν]]))gEquatorBlock[[μ,δ]]-(∂_(XEq[[δ]]))gEquatorBlock[[μ,ν]]),{δ,2},{μ,2},{ν,2}]//Simplify;

ChristoffelsEquatorBlockudd=Table[Sum[gEquatorBlockinv[[α,δ]]ChristoffelsEquatorBlockddd[[δ,μ,ν]],{δ,2}],{α,2},{μ,2},{ν,2}];

{ChristoffelsEquatorBlockudd[[1,1,1]]-Christoffelsudd[[1,1,1]],ChristoffelsEquatorBlockudd[[1,1,2]]-Christoffelsudd[[1,1,2]],
ChristoffelsEquatorBlockudd[[1,2,2]]-Christoffelsudd[[1,2,2]],
ChristoffelsEquatorBlockudd[[2,1,1]]-Christoffelsudd[[2,1,1]],
ChristoffelsEquatorBlockudd[[2,1,2]]-Christoffelsudd[[2,1,2]],
ChristoffelsEquatorBlockudd[[2,2,2]]-Christoffelsudd[[2,2,2]]}/.KillMeEquatorRules//Simplify

All is well!