{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "

Christoffel Symbols, Riemann Tensor, Ricci Tensor

\n", "

\n", " The Christoffel symbols are found analytically using sympy for Schwarzchild metric \n", " \n", "$$\n", "g_{\\mu\\nu} = \n", "\\begin{pmatrix}\n", "-(1-r_g/r) & 0 &0 &0 \\\\\n", "\t0& (1-r_g/r)^{-1}& 0& 0 \\\\\n", "\t0 & 0 & r^2 & 0\\\\\n", "\t0 & 0& 0 & r^2 \\sin^2 \\theta\\\\\n", "\\end{pmatrix}, \\quad \n", "\\Gamma_{\\beta\\gamma}^\\alpha = \\frac{1}{2}g^{\\alpha\\lambda}\\Bigl ( g_{\\lambda \\beta \n", ",\\gamma}+ g_{\\lambda \\gamma,\\beta} - g_{\\beta\\gamma,\\lambda}\\Bigr ).\n", "$$\n", "\n", "The Christoffel symbols are used to calculate Riemann tensor:\n", "$$\n", "R_{\\mu\\nu\\sigma}^\\alpha = \\partial_\\sigma \\Gamma_{\\mu\\nu}^\\alpha -\\partial_\\nu \\Gamma_{\\mu\\sigma}^\\alpha +\\Gamma_{\\sigma\\gamma}^\\alpha \\Gamma_{\\mu\\nu}^\\gamma -\\Gamma_{\\nu\\gamma}^\\alpha \\Gamma_{\\mu\\sigma}^\\gamma ,\n", "$$\n", " and the Ricci curvature tensor and scalar:\n", "$$\n", "R_{\\lambda\\mu} = R_{\\lambda\\alpha \\gamma}^\\alpha, \\quad \n", "R = R_\\lambda ^\\lambda = g^{\\lambda \\gamma} R_{\\lambda\\gamma}.\n", "$$ " ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "contravariant\n", "Ri[ 0 ][ 1 ][ 0 ][ 1 ]= 1.0*rg/(r**2*(r - rg))\n", "Ri[ 0 ][ 1 ][ 1 ][ 0 ]= -1.0*rg/(r**2*(r - rg))\n", "Ri[ 0 ][ 2 ][ 0 ][ 2 ]= -0.5*rg/r\n", "Ri[ 0 ][ 2 ][ 2 ][ 0 ]= 0.5*rg/r\n", "Ri[ 0 ][ 3 ][ 0 ][ 3 ]= -0.5*rg*sin(th)**2/r\n", "Ri[ 0 ][ 3 ][ 3 ][ 0 ]= 0.5*rg*sin(th)**2/r\n", "Ri[ 1 ][ 0 ][ 0 ][ 1 ]= 1.0*rg*(r - rg)/r**4\n", "Ri[ 1 ][ 0 ][ 1 ][ 0 ]= 1.0*rg*(-r + rg)/r**4\n", "Ri[ 1 ][ 2 ][ 1 ][ 2 ]= -0.5*rg/r\n", "Ri[ 1 ][ 2 ][ 2 ][ 1 ]= 0.5*rg/r\n", "Ri[ 1 ][ 3 ][ 1 ][ 3 ]= -0.5*rg*sin(th)**2/r\n", "Ri[ 1 ][ 3 ][ 3 ][ 1 ]= 0.5*rg*sin(th)**2/r\n", "Ri[ 2 ][ 0 ][ 0 ][ 2 ]= -0.5*rg*(r - rg)/r**4\n", "Ri[ 2 ][ 0 ][ 2 ][ 0 ]= 0.5*rg*(r - rg)/r**4\n", "Ri[ 2 ][ 1 ][ 1 ][ 2 ]= 0.5*rg/(r**2*(r - rg))\n", "Ri[ 2 ][ 1 ][ 2 ][ 1 ]= -0.5*rg/(r**2*(r - rg))\n", "Ri[ 2 ][ 3 ][ 2 ][ 3 ]= 1.0*rg*sin(th)**2/r\n", "Ri[ 2 ][ 3 ][ 3 ][ 2 ]= -1.0*rg*sin(th)**2/r\n", "Ri[ 3 ][ 0 ][ 0 ][ 3 ]= -0.5*rg*(r - rg)/r**4\n", "Ri[ 3 ][ 0 ][ 3 ][ 0 ]= 0.5*rg*(r - rg)/r**4\n", "Ri[ 3 ][ 1 ][ 1 ][ 3 ]= 0.5*rg/(r**2*(r - rg))\n", "Ri[ 3 ][ 1 ][ 3 ][ 1 ]= -0.5*rg/(r**2*(r - rg))\n", "Ri[ 3 ][ 2 ][ 2 ][ 3 ]= -1.0*rg/r\n", "Ri[ 3 ][ 2 ][ 3 ][ 2 ]= 1.0*rg/r\n", "\n", "\n", "Ricci Tensor\n", "\n", "RT[ 0 ][ 0 ]= 0\n", "RT[ 0 ][ 1 ]= 0\n", "RT[ 0 ][ 2 ]= 0\n", "RT[ 0 ][ 3 ]= 0\n", "RT[ 1 ][ 0 ]= 0\n", "RT[ 1 ][ 1 ]= 0\n", "RT[ 1 ][ 2 ]= 0\n", "RT[ 1 ][ 3 ]= 0\n", "RT[ 2 ][ 0 ]= 0\n", "RT[ 2 ][ 1 ]= 0\n", "RT[ 2 ][ 2 ]= 0\n", "RT[ 2 ][ 3 ]= 0\n", "RT[ 3 ][ 0 ]= 0\n", "RT[ 3 ][ 1 ]= 0\n", "RT[ 3 ][ 2 ]= 0\n", "RT[ 3 ][ 3 ]= 0\n", "0\n", "0\n", "0\n", "0\n", "RicciScalar 0\n" ] } ], "source": [ "\"\"\" From \"COMPUTATIONAL PHYSICS\" & \"COMPUTER PROBLEMS in PHYSICS\"\n", " by RH Landau, MJ Paez, and CC Bordeianu (deceased).\n", " Copyright R Landau, Oregon State Unv, MJ Paez, Univ Antioquia, \n", " C Bordeianu, Univ Bucharest, 2021. \n", " Please respect copyright & acknowledge our work.\"\"\"\n", "\n", "# ChristRicciRieman.ipynb: symbolic calc of all these tensors\n", "\n", "from sympy import * # symbolic python\n", "import numpy as np\n", "\n", "t,r,th, fi, rg = symbols('t r th fi rg') # for Schwarzchild metric\n", "print(\"contravariant\") # upper indices \n", "gT = Matrix([[1/(-1 + rg/r), 0, 0, 0], [0, 1 - rg/r, 0, 0], [0, 0, r**(-2), 0],\n", " [0, 0, 0, 1/(r**2*sin(th)**2)]])\n", "Ri = [[[[[]for n in range(4)] for a in range(4)] for b in range(4)] for c in range(4)]\n", "RT = [[[] for m in range(4)]for p in range(4)] # Ricci tensor\n", "\n", "# Christoffel symbols for upper index t, r,theta, and phi\n", "Cht = Matrix([[0, 0.5*rg/(r*(r - rg)), 0, 0], [0.5*rg/(r*(r - rg)), 0, 0, 0],\n", " [0, 0, 0, 0], [0, 0, 0, 0]])\n", "Chr = Matrix([[0.5*rg*(r - rg)/r**3, 0, 0, 0], [0, -0.5*rg/(r*(r - rg)), 0, 0],\n", " [0, 0, -1.0*r + 1.0*rg, 0], [0, 0, 0, (-1.0*r + rg)*sin(th)**2]])\n", "Chth = Matrix([[0, 0, 0, 0], [0, 0, 1.0/r, 0], [0, 1.0/r, 0, 0],\n", " [0, 0, 0, -0.5*sin(2*th)]])\n", "Chfi = Matrix([[0, 0, 0, 0], [0, 0, 0, 1.0/r], [0, 0, 0, 1.0/tan(th)],\n", " [0, 1.0/r, 1.0/tan(th), 0]])\n", "for alpha in range(0,4): # upper index in Christoffel \n", " if alpha == 0: Chalp = Cht\n", " elif alpha == 1: Chalp = Chr\n", " elif alpha == 2: Chalp = Chth\n", " else: Chalp = Chfi \n", " for be in range(0,4): # beta\n", " for mu in range(0,4): # index mu\n", " if mu == 0: der2 = t # derivative to be taken\n", " elif mu == 1: der2 = r\n", " elif mu == 2: der2 = th\n", " elif mu == 3: der2 = fi\n", " for nu in range(0,4): # nu index\n", " if nu == 0: der1 = t # other derivative to be taken\n", " elif nu == 1: der1 = r\n", " elif nu == 2: der1 = th\n", " elif nu == 3: der1 = fi\n", " a1 = diff(Chalp[be,nu],der2) \n", " a2 = diff(Chalp[be,mu],der1) # Christ symbol & derivative\n", " sump = 0 \n", " sumn = 0 \n", " for gam in [t,r,th,fi]:\n", " if gam == t:\n", " Chgam = Cht\n", " gama = 0\n", " elif gam == r:\n", " Chgam = Chr\n", " gama = 1\n", " elif gam == th:\n", " Chgam = Chth\n", " gama = 2\n", " elif gam == fi:\n", " Chgam = Chfi\n", " gama = 3\n", " sump = sump+Chalp[mu,gama]*Chgam[be,nu] \n", " sumn = sumn+Chalp[nu,gama]*Chgam[be,mu]\n", " R = simplify(a1-a2+sump-sumn) # Riemann tensor\n", " if R == 0: Ri[alpha][be][mu][nu] = 0\n", " else :\n", " Ri[alpha][be][mu][nu] = R\n", " print(\"Ri[\",alpha,\"][\",be,\"][\",mu,\"][\",nu,\"] = \", Ri[alpha][be][mu][nu])\n", "print(\"\\n\") \n", "print(\"Ricci Tensor\\n\") \n", "for ro in range(0,4): # whith Riemann tensr find Ricci tensor\n", " for de in range (0,4):\n", " sum = 0\n", " for alp in range (0,4): sum = sum+Ri[alp][ro][alp][de]\n", " RT[ro][de] = simplify(sum)\n", " print(\"RT[\",ro,\"][\",de,\"] = \",RT[ro][de]) # Ricci's tensor\n", "sumR = 0 # for Ricci Scalar\n", "for be in range(0,4):\n", " for nu in range(0,4): sumR = sumR+gT[be,nu]*RT[be][nu]\n", " print(sumR)\n", "RS = (sumR)\n", "print(\"RicciScalar\",RS) #Ricci Scalar R " ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" } }, "nbformat": 4, "nbformat_minor": 2 }