packages feed

egison-5.0.0: sample/math/geometry/riemann-curvature-tensor-of-S3.egi

declare symbol r, θ, φ, ψ: MathExpr

-- Parameters
def x : Vector MathExpr := [| θ, φ, ψ |]

def X : Vector MathExpr := [| r * cos θ
          , r * sin θ * cos φ
          , r * sin θ * sin φ * cos ψ
          , r * sin θ * sin φ * sin ψ
          |]

-- Local basis
def e_i_j : Matrix MathExpr := ∂/∂ X_j x~i

-- Metric tensors
--def g_i_j : Matrix MathExpr := generateTensor (\[x, y] -> V.* e_x_# e_y_#) [3, 3]
def g_i_j : Matrix MathExpr := generateTensor (\[a, b] -> V.* e_a e_b) [3, 3]
def g~i~j : Matrix MathExpr := M.inverse g_#_#

assertEqual "Metric tensor g_#_#"
  g_#_#
  [| [| r^2, 0, 0 |], [| 0, r^2 * (sin θ)^2, 0 |], [| 0, 0, r^2 * (sin θ)^2 * (sin φ)^2 |] |]_#_#

-- Christoffel symbols
def Γ_i_j_k : Tensor MathExpr := (1 / 2) * (∂/∂ g_i_k x~j + ∂/∂ g_i_j x~k - ∂/∂ g_j_k x~i)

def Γ~i_j_k : Tensor MathExpr := withSymbols [m]
  g~i~m . Γ_m_j_k

assertEqual "Christoffel symbols of the second kind Γ~1_#_#"
  Γ~1_#_#
  [| [| 0, 0, 0 |], [| 0, -1 * sin θ * cos θ, 0 |], [| 0, 0, -1 * sin θ * cos θ * (sin φ)^2 |] |]_#_#
assertEqual "Christoffel symbols of the second kind Γ~2_#_#"
  Γ~2_#_#
  [| [| 0, (cos θ) / (sin θ), 0 |], [| (cos θ) / (sin θ), 0, 0 |], [| 0, 0, -1 * sin φ * cos φ |] |]_#_#
assertEqual "Christoffel symbols of the second kind Γ~3_#_#"
  Γ~3_#_#
  [| [| 0, 0, (cos θ) / (sin θ) |], [| 0, 0, (cos φ) / (sin φ) |], [| (cos θ) / (sin θ), (cos φ) / (sin φ), 0 |] |]_#_#


-- Riemann curvature
def R~i_j_k_l : Tensor MathExpr := withSymbols [m]
  ∂/∂ Γ~i_j_l x~k - ∂/∂ Γ~i_j_k x~l + Γ~m_j_l . Γ~i_m_k - Γ~m_j_k . Γ~i_m_l

assertEqual "Riemann curvature R~#_#_1_1"
  R~#_#_1_1
  [| [| 0, 0, 0 |], [| 0, 0, 0 |], [| 0, 0, 0 |] |]~#_#
assertEqual "Riemann curvature R~#_#_1_2"
  R~#_#_1_2
  [| [| 0, (sin θ)^2, 0 |], [| -1, 0, 0 |], [| 0, 0, 0 |] |]~#_#
assertEqual "Riemann curvature R~#_#_1_3"
  R~#_#_1_3
  [| [| 0, 0, (sin θ)^2 * (sin φ)^2 |], [| 0, 0, 0 |], [| -1, 0, 0 |] |]~#_#
assertEqual "Riemann curvature R~#_#_2_1"
  R~#_#_2_1
  [| [| 0, -1 * (sin θ)^2, 0 |], [| 1, 0, 0 |], [| 0, 0, 0 |] |]~#_#
assertEqual "Riemann curvature R~#_#_2_2"
  R~#_#_2_2
  [| [| 0, 0, 0 |], [| 0, 0, 0 |], [| 0, 0, 0 |] |]~#_#
assertEqual "Riemann curvature R~#_#_2_3"
  R~#_#_2_3
  [| [| 0, 0, 0 |], [| 0, 0, (sin θ)^2 * (sin φ)^2 |], [| 0, -1 * (sin θ)^2, 0 |] |]~#_#
assertEqual "Riemann curvature R~#_#_3_1"
  R~#_#_3_1
  [| [| 0, 0, -1 * (sin θ)^2 * (sin φ)^2 |], [| 0, 0, 0 |], [| 1, 0, 0 |] |]~#_#
assertEqual "Riemann curvature R~#_#_3_2"
  R~#_#_3_2
  [| [| 0, 0, 0 |], [| 0, 0, -1 * (sin θ)^2 * (sin φ)^2 |], [| 0, (sin θ)^2, 0 |] |]~#_#
assertEqual "Riemann curvature R~#_#_3_3"
  R~#_#_3_3
  [| [| 0, 0, 0 |], [| 0, 0, 0 |], [| 0, 0, 0 |] |]~#_#

-- Ricci curvature
def Ric_i_j : Tensor MathExpr := withSymbols [m]
  sum (contract R~m_i_m_j)

assertEqual "Ricci curvature Ric_#_#"
  Ric_#_#
  [| [| 2, 0, 0 |], [| 0, 2 * (sin θ)^2, 0 |], [| 0, 0, 2 * (sin θ)^2 * (sin φ)^2 |] |]_#_#

-- Scalar curvature
def scalarCurvature : MathExpr := withSymbols [i, j]
  g~i~j . Ric_i_j

assertEqual "scalar curvature"
  scalarCurvature
  (6 / r^2)