Skip to content

Commit

Permalink
Modify Ricci Tensor from christoffel method and add from riemann. Fix…
Browse files Browse the repository at this point in the history
… indentation
  • Loading branch information
OVSofia committed Jun 26, 2019
1 parent 0070203 commit cc66839
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 53 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Expand Up @@ -30,7 +30,7 @@ docs/_build
# Pycharm editor project files
.idea


# for virtual environment
venv/

# Floobits project files
Expand Down
39 changes: 25 additions & 14 deletions src/einsteinpy/symbolic/ricci.py
@@ -1,8 +1,8 @@
import numpy as np
import sympy

from .tensor import Tensor
from .metric import MetricTensor
from .tensor import Tensor


class RicciTensor(Tensor):
Expand Down Expand Up @@ -43,25 +43,23 @@ def from_christoffels(cls, chris):
Parameters
----------
chris : ~einsteinpy.symbolic.ricci.RicciTensor
chris : ~einsteinpy.symbolic.christoffel.ChristoffelSymbols
Christoffel Symbols from which Ricci Tensor to be calculated
"""
arr, syms = chris.tensor(), chris.symbols()
dims = len(syms)
ricci_list = (np.zeros(shape=(dims, dims, dims, dims), dtype=int)).tolist()
for i in range(dims ** 4):
# t,s,r,n each goes from 0 to (dims-1)
# hack for codeclimate. Could be done with 4 nested for loops
n = i % dims
ricci_list = (np.zeros(shape=(dims, dims), dtype=int)).tolist()
for i in range(dims ** 2):
# r,t each goes from 0 to (dims-1)
# hack for codeclimate. Could be done with 2 nested for loops
r = (int(i / dims)) % (dims)
s = (int(i / (dims ** 2))) % (dims)
t = n
t = (int(i / (dims ** 1))) % (dims)

temp = sympy.diff(arr[t, s, n], syms[r]) - sympy.diff(arr[t, r, n], syms[s])
temp = sympy.diff(arr[t], syms[r])
for p in range(dims):
temp += arr[p, s, n] * arr[t, p, r] - arr[p, r, n] * arr[t, p, s]
ricci_list[t][s][r][n] = sympy.simplify(temp)
temp += arr[p, r, p, t]
ricci_list[t][r] = sympy.simplify(temp)
return cls(ricci_list, syms)

@classmethod
Expand All @@ -71,13 +69,26 @@ def from_metric(cls, metric):
Parameters
----------
metric : ~einsteinpy.symbolic.ricci.RicciTensor
Ricci Tensor
metric : ~~einsteinpy.symbolic.metric.MetricTensor
Metric Tensor
"""
rc = RicciTensor.from_metric(metric)
return cls.from_christoffels(rc)

@classmethod
def from_riemann(cls, riemann):
"""
Get Ricci Tensor calculated from a Metric Tensor
Parameters
----------
metric : ~~einsteinpy.symbolic.metric.MetricTensor
Metric Tensor
"""
return cls(sympy.tensorcontraction(riemann.tensor(), (0, 2)), riemann.syms)

def symbols(self):
"""
Returns the symbols used for defining the time & spacial axis
Expand Down
2 changes: 1 addition & 1 deletion src/einsteinpy/symbolic/tensor.py
@@ -1,6 +1,7 @@
import numpy as np
import sympy


class Tensor:
"""
Base Class
Expand All @@ -12,7 +13,6 @@ def __getitem__(self, index):
def __setitem__(self, index, value):
self.arr[index] = value


def __init__(self, arr):
"""
Constructor and Initializer
Expand Down
58 changes: 23 additions & 35 deletions src/einsteinpy/symbolic/vaccum_metrics.py
Expand Up @@ -3,21 +3,18 @@
from .metric import MetricTensor


def SchwarzschildMetric(symbolstr="t r theta phi" ):
def SchwarzschildMetric(symbolstr="t r theta phi"):
"""
Returns Metric Tensor of symbols of Schwarzschild Metric.
Parameters
----------
symbolstr : string
Returns Metric Tensor of symbols of Schwarzschild Metric.
Parameters
----------
symbolstr : string
symbols to be used to define schwarzschild space, defaults to 't r theta phi'
Returns
-------
Metric Tensor
"""
Returns
-------
~einsteinpy.symbolic.metric.MetricTensor
Metric Tensor for Schwarzschild space-time
"""
list2d = [[0 for i in range(4)] for i in range(4)]
syms = sympy.symbols(symbolstr)
c, a = sympy.symbols("c a")
Expand All @@ -31,18 +28,16 @@ def SchwarzschildMetric(symbolstr="t r theta phi" ):

def KerrMetric(symbolstr="t r theta phi"):
"""
Returns Metric Tensor of symbols of Kerr metric(BL coordinates) in Plank units : G=1, c=1.
Parameters
----------
symbolstr : string
symbols to be used to define kerr space in BL coordinates, defaults to 't r theta phi'
Returns
-------
Metric Tensor
"""
Returns Metric Tensor of symbols of Kerr metric(BL coordinates) in Plank units : G=1, c=1.
Parameters
----------
symbolstr : string
symbols to be used to define kerr space in BL coordinates, defaults to 't r theta phi'
Returns
-------
~einsteinpy.symbolic.metric.MetricTensor
Metric Tensor for Kerr space-time
"""
list2d = [[0 for i in range(4)] for i in range(4)]
syms = sympy.symbols(symbolstr)
a, R = sympy.symbols("a R")
Expand All @@ -52,16 +47,9 @@ def KerrMetric(symbolstr="t r theta phi"):
list2d[1][1] = sigma / A
list2d[2][2] = sigma
list2d[3][3] = (
(sympy.sin(syms[2]) ** 2)
* (
(a ** 2 + syms[1] ** 2) ** 2
- (a ** 2) * (A * (sympy.sin(syms[2]) ** 2))
)
) / sigma
(sympy.sin(syms[2]) ** 2)
* ((a ** 2 + syms[1] ** 2) ** 2 - (a ** 2) * (A * (sympy.sin(syms[2]) ** 2)))
) / sigma
list2d[3][0] = -1 * (R * a * (syms[1])) * (sympy.sin(syms[2]) ** 2) / sigma
list2d[0][3] = list2d[3][0]
return MetricTensor(list2d, syms)




3 changes: 1 addition & 2 deletions src/einsteinpy/tests/test_symbolic/test_vaccum_metrics.py
@@ -1,7 +1,7 @@
import numpy as np
import sympy

from einsteinpy.symbolic import vaccum_metrics, MetricTensor
from einsteinpy.symbolic import MetricTensor, vaccum_metrics


def schwarzschild_metric():
Expand All @@ -16,4 +16,3 @@ def kerr_metric():
syms = sympy.symbols(symbolstr)
sch = vaccum_metrics.KerrMetric(syms)
return sch

0 comments on commit cc66839

Please sign in to comment.