Analytic check

import jax
jax.config.update("jax_enable_x64", True)

import sympy as sp
import numpy as np
import scipy.special as sc
import matplotlib.pyplot as plt

import aurel
#from aurel.solutions import Collins_Stewart as sol
#from aurel.solutions import Conformally_flat as sol
from aurel.solutions import Harvey_Tsoubelis as sol
#from aurel.solutions import Non_diagonal as sol
#from aurel.solutions import Rosquist_Jantzen as sol
#from aurel.solutions import Schwarzschild as sol #too long for analytics
#from aurel.solutions import Szekeres as sol #too long for analytics
#Analytical setup
t, x, y, z = sp.symbols('t x y z')

# Spacetime
g = sol.gdown4(t, x, y, z, analytical=True)
an4 = aurel.AurelCoreAnalytic([t, x, y, z], g)

# Space
gamma = sol.gammadown3(t, x, y, z, analytical=True)
an3 = aurel.AurelCoreAnalytic([x, y, z], gamma)
# Numerical setup

L = 20
N = 64
grid = {
    'Nx': N,  # Number of data points per side
    'Ny': N,
    'Nz': N,
    'xmin': - L / 2 + 0.01,  # Minimum x coordinate
    'ymin': - L / 2 + 0.01,  # Minimum y coordinate
    'zmin': - L / 2 + 0.01,  # Minimum z coordinate
    'dx': L / N,  # Elementary grid size
    'dy': L / N,
    'dz': L / N,
}
fd = aurel.FiniteDifference(grid, boundary='other', fd_order=8)
rel = aurel.AurelCore(fd) # Need to pass Lambda=sol.Lambda if != 0.0

nt = 1
nx, ny, nz = fd.cartesian_coords

rel.data = sol.data(nt, nx, ny, nz)
rel.freeze_data()
8th order finite difference schemes are defined

Cosmological constant set to AurelCore.Lambda = 0.00e+00
err_max = 1e-4

custom_funcs = {
    "hyper": lambda a, b, z: sc.hyp2f1(a[0], a[1], b[0], z),
    "exp_polar": np.exp}
def compare_values(theory, numerical):
    f_num = sp.lambdify((t, x, y, z), theory, modules=[custom_funcs, "numpy"])
    s1 = np.real(f_num(nt, fd.cutoffmask(nx), fd.cutoffmask(ny), fd.cutoffmask(nz)))
    s2 = fd.cutoffmask(numerical)
    if theory != 0:
        rel_err = np.abs(aurel.maths.safe_division(s2 - s1, s1))
        error = np.max(np.ma.masked_invalid(rel_err))
    else:
        error = np.max(np.abs(s2))
    return error

def checks(var, theory, numerical):
    error = compare_values(theory, numerical)
    if error > err_max:
        print(var, 
              f", max(abs(num_val)) = ", np.max(abs(fd.cutoffmask(numerical))), 
              ", relative error =", error)

def check1d(dim, var, theory, numerical):
    for i in range(dim):
        checks(var+f"{i}", theory[i], numerical[i])

def check2d(dim, var, theory, numerical):
    for i in range(dim):
        for j in range(dim):
            checks(var+f"{i}{j}", theory[i, j], numerical[i, j])

def check3d(dim, var, theory, numerical):
    for i in range(dim):
        for j in range(dim):
            for k in range(dim):
                checks(var+f"{i}{j}{k}", theory[i, j, k], numerical[i, j, k])
def check4d(dim, var, theory, numerical):
    for i in range(dim):
        for j in range(dim):
            for k in range(dim):
                for l in range(dim):
                    checks(var+f"{i}{j}{k}{l}", theory[i, j, k, l], numerical[i, j, k, l])

def plot_them(analytical, numerical, cutoff=True):
    f_num = sp.lambdify((t, x, y, z), analytical, modules=[custom_funcs, "numpy"])
    A = np.real(f_num(nt, nx, ny, nz))
    if isinstance(A, int) or isinstance(A, float):
        A = np.full_like(numerical, A)

    rel_error = np.abs(aurel.maths.safe_division(numerical - A, A))
    ix, iy, iz = np.where(rel_error == np.max(rel_error))
    if len(ix) > 1:
        ix = ix[0]
        iy = iy[0]
        iz = iz[0]
    print("max {:.2e} error at".format(np.max(rel_error)), ix, iy, iz)
    if iy < 2*fd.mask_len or iz < 2*fd.mask_len:
        cutoff = False
        print('Max relative difference in boundary region')

    if cutoff:
        xv = fd.cutoffmask(fd.xarray)
        nv = fd.cutoffmask(numerical[:,iy,iz])
        av = fd.cutoffmask(A[:,iy,iz])
        rv = fd.cutoffmask(rel_error[:,iy,iz])
    else:
        xv = fd.xarray
        nv = numerical[:,iy,iz]
        av = A[:,iy,iz]
        rv = rel_error[:,iy,iz]

    plt.figure()
    plt.subplot(211)
    plt.plot(xv, nv, 
             label="numerical")
    plt.plot(xv, av, 
             linestyle='--',
             label="analytical")
    plt.grid()
    plt.legend()
    plt.subplot(212)
    plt.semilogy(xv, rv)
    plt.grid()
    plt.ylabel("relative difference")
    plt.xlabel("x")
    plt.subplots_adjust(hspace=0.0)

Check Christoffel symbols

3D

check2d(3, "gamma^", an3["gup"], rel["gammaup3"])

check3d(3, "Γudd", an3["Gamma_udd"], rel["s_Gamma_udd3"])
Calculated analytic gup: Metric tensor in the up index form

Calculated gammaup3: $\gamma^{ij}$ Spatial metric with spatial indices up
Calculated analytic Gamma_udd: Christoffel symbols in the up-down-down index form

Calculated s_Gamma_udd3: ${}^{(3)}{\Gamma^{k}}_{ij}$ Christoffel symbols of spatial metric with mixed spatial indices
Γudd022 , max(abs(num_val)) =  208116.36229624215 , relative error = 0.0016382525191416827
Γudd202 , max(abs(num_val)) =  4.723738844061859 , relative error = 0.0001341854370830323
Γudd220 , max(abs(num_val)) =  4.723738844061859 , relative error = 0.0001341854370830323

4D

check2d(4, "g^", an4["gup"], rel["gup4"])
check3d(4, "Γudd", an4["Gamma_udd"], rel["st_Gamma_udd4"])
Calculated analytic gup: Metric tensor in the up index form

Calculated alpha: $\alpha$ Lapse. I assume $\alpha=1$, if not then please define AurelCore.data['alpha'] = ... 
Calculated betax: $\beta^{x}$ x component of the shift vector with indices up. I assume $\beta^{x}=0$, if not then please define AurelCore.data['betax'] = ... 
Calculated betay: $\beta^{y}$ y component of the shift vector with indices up. I assume $\beta^{y}=0$, if not then please define AurelCore.data['betay'] = ... 
Calculated betaz: $\beta^{z}$ z component of the shift vector with indices up. I assume $\beta^{z}=0$, if not then please define AurelCore.data['betaz'] = ... 
Calculated betaup3: $\beta^{i}$ Shift vector with spatial indices up
Calculated betadown3: $\beta_{i}$ Shift vector with spatial indices down
Calculated gdown4: $g_{\mu\nu}$ Spacetime metric with spacetime indices down
Calculated gup4: $g^{\mu\nu}$ Spacetime metric with spacetime indices up
Calculated analytic Gamma_udd: Christoffel symbols in the up-down-down index form

Calculated dtalpha: $\partial_t \alpha$ Coordinate time derivative of the lapse. I assume $\partial_t \alpha=0$, if not then please define AurelCore.data['dtalpha'] = ... 
Calculated dtbetax: $\partial_t\beta^{x}$ Coordinate time derivative of the x component of the shift vector with indices up. I assume $\partial_t\beta^{x}=0$, if not then please define AurelCore.data['dtbetax'] = ... 
Calculated dtbetay: $\partial_t\beta^{y}$ Coordinate time derivative of the y component of the shift vector with indices up. I assume $\partial_t\beta^{y}=0$, if not then please define AurelCore.data['dtbetay'] = ... 
Calculated dtbetaz: $\partial_t\beta^{z}$ Coordinate time derivative of the z component of the shift vector with indices up. I assume $\partial_t\beta^{z}=0$, if not then please define AurelCore.data['dtbetaz'] = ... 
Calculated dtbetaup3: $\partial_t\beta^{i}$ Coordinate time derivative of the shift vector with spatial indices up
Calculated st_Gamma_udd4: ${}^{(4)}{\Gamma^{\alpha}}_{\mu\nu}$ Christoffel symbols of spacetime metric with mixed spacetime indices
Γudd133 , max(abs(num_val)) =  208116.36229624215 , relative error = 0.0016382525191416827
Γudd313 , max(abs(num_val)) =  4.723738844061859 , relative error = 0.0001341854370830323
Γudd331 , max(abs(num_val)) =  4.723738844061859 , relative error = 0.0001341854370830323

Check Riemann and Ricci

3D

# Compute 3-Riemann tensor: R^i_{jkl}
check4d(3, "Ruddd", an3["Riemann_uddd"], rel["s_Riemann_uddd3"])
0 1 0 1,  0 1 0 2,  0 1 1 2,  0 2 0 1,  0 2 0 2,  0 2 1 2,  1 0 0 1,  1 0 0 2,  1 0 1 2,  1 2 0 1,  1 2 0 2,  1 2 1 2,  2 0 0 1,  2 0 0 2,  2 0 1 2,  2 1 0 1,  2 1 0 2,  2 1 1 2,  
Calculated analytic Riemann_uddd: Riemann curvature tensor in the up-down-down-down index form

Calculated s_Riemann_uddd3: ${}^{(3)}{R^{i}}_{jkl}$ Riemann tensor of spatial metric with mixed spatial indices
Ruddd0101 , max(abs(num_val)) =  0.016679485081112944 , relative error = 0.016679485081112944
Ruddd0102 , max(abs(num_val)) =  2331.4100690063497 , relative error = 0.0001242683747693139
Ruddd0110 , max(abs(num_val)) =  0.016679485081303968 , relative error = 0.016679485081303968
Ruddd0120 , max(abs(num_val)) =  2331.4100690063483 , relative error = 0.000124268374769899
Ruddd0201 , max(abs(num_val)) =  2331.4100690064515 , relative error = 0.00012426837472562759
Ruddd0202 , max(abs(num_val)) =  44052.60137026294 , relative error = 0.00014654071619464928
Ruddd0210 , max(abs(num_val)) =  2331.41006900645 , relative error = 0.00012426837472621268
Ruddd0220 , max(abs(num_val)) =  44052.601370262935 , relative error = 0.00014654071619464928
Ruddd1001 , max(abs(num_val)) =  4.372981885582807 , relative error = 0.0006823536802762492
Ruddd1010 , max(abs(num_val)) =  4.372981885582807 , relative error = 0.0006823536802762492
Ruddd1112 , max(abs(num_val)) =  0.08309351022762712 , relative error = 0.08309351022762712
Ruddd1121 , max(abs(num_val)) =  0.08309351022762712 , relative error = 0.08309351022762712
Ruddd1212 , max(abs(num_val)) =  0.7117688893340528 , relative error = 0.7117688893340528
Ruddd1221 , max(abs(num_val)) =  0.7117688893340528 , relative error = 0.7117688893340528
Ruddd2001 , max(abs(num_val)) =  0.5003281227507504 , relative error = 0.0006562455015008961
Ruddd2010 , max(abs(num_val)) =  0.5003281227507504 , relative error = 0.0006562455015008961
Ruddd2112 , max(abs(num_val)) =  0.00983646171152941 , relative error = 0.00983646171152941
Ruddd2121 , max(abs(num_val)) =  0.00983646171152941 , relative error = 0.00983646171152941
Ruddd2212 , max(abs(num_val)) =  0.08309351032949053 , relative error = 0.08309351032949053
Ruddd2221 , max(abs(num_val)) =  0.08309351032949053 , relative error = 0.08309351032949053
# Lower the first index: R_{lijk} = γ_{lm} R^m_{ijk}
check4d(3, "R_", an3["Riemann_down"], rel["s_Riemann_down3"])
0 1 0 1,  0 1 0 2,  0 1 1 2,  0 2 0 2,  0 2 1 2,  1 2 1 2,  
Calculated analytic Riemann_down: Riemann curvature tensor in the down index form

Calculated s_Riemann_down3: ${}^{(3)}R_{ijkl}$ Riemann tensor of spatial metric with all spatial indices down
R_0101 , max(abs(num_val)) =  0.016679485081112944 , relative error = 0.016679485081112944
R_0102 , max(abs(num_val)) =  2331.4100690063497 , relative error = 0.0001242683747693139
R_0110 , max(abs(num_val)) =  0.016679485081303968 , relative error = 0.016679485081303968
R_0120 , max(abs(num_val)) =  2331.4100690063483 , relative error = 0.000124268374769899
R_0201 , max(abs(num_val)) =  2331.4100690064515 , relative error = 0.00012426837472562759
R_0202 , max(abs(num_val)) =  44052.60137026294 , relative error = 0.00014654071619464928
R_0210 , max(abs(num_val)) =  2331.41006900645 , relative error = 0.00012426837472621268
R_0220 , max(abs(num_val)) =  44052.601370262935 , relative error = 0.00014654071619464928
R_1001 , max(abs(num_val)) =  0.01412428077706889 , relative error = 0.01412428077706889
R_1002 , max(abs(num_val)) =  2331.913775963813 , relative error = 0.00016553528610018482
R_1010 , max(abs(num_val)) =  0.01412428077488208 , relative error = 0.01412428077488208
R_1020 , max(abs(num_val)) =  2331.913775963813 , relative error = 0.00016553528610103156
R_1212 , max(abs(num_val)) =  45.87134798262318 , relative error = 45.87134798262318
R_1221 , max(abs(num_val)) =  45.87134798262318 , relative error = 45.87134798262318
R_2001 , max(abs(num_val)) =  2331.68195273488 , relative error = 0.0013380956155417867
R_2010 , max(abs(num_val)) =  2331.681952734861 , relative error = 0.0013380956155319642
R_2112 , max(abs(num_val)) =  45.87135528560006 , relative error = 45.87135528560006
R_2121 , max(abs(num_val)) =  45.87135528560006 , relative error = 45.87135528560006
check2d(3, "R_", an3["Ricci_down"], rel["s_Ricci_down3"])
Calculated analytic Ricci_down: Ricci curvature tensor in the down index form

Calculated s_Ricci_down3: ${}^{(3)}R_{ij}$ Ricci tensor of spatial metric with spatial indices down
R_00 , max(abs(num_val)) =  1.003148449103068 , relative error = 0.003148449103067996
R_11 , max(abs(num_val)) =  0.026515946792642336 , relative error = 0.026515946792642336
R_12 , max(abs(num_val)) =  2331.326975496122 , relative error = 0.00015990482733364868
R_21 , max(abs(num_val)) =  2331.326975496122 , relative error = 0.00015990482733364868
R_22 , max(abs(num_val)) =  44051.88960137361 , relative error = 0.00020066236838926717
checks("R", an3["RicciS"], rel["s_RicciS"])
Calculated analytic RicciS: Ricci scalar

Calculated s_RicciS: ${}^{(3)}R$ Ricci scalar of spatial metric
CLEAN-UP: Cleaning up cache after 20 calculations...
CLEAN-UP: data size before cleanup: 710.00 MB
CLEAN-UP: Removing cached value for 'betadown3' used 12 calculations ago (size: 6.00 MB).
CLEAN-UP: Removing cached value for 'gdown4' used 11 calculations ago (size: 32.00 MB).
CLEAN-UP: Removing cached value for 'gup4' used 10 calculations ago (size: 32.00 MB).
CLEAN-UP: Removing cached value for 'st_Gamma_udd4' used 4 calculations ago (size: 128.00 MB).
CLEAN-UP: Removing cached value for 's_Riemann_uddd3' used 3 calculations ago (size: 162.00 MB).
CLEAN-UP: Removing cached value for 's_Riemann_down3' used 2 calculations ago (size: 162.00 MB).
CLEAN-UP: Removed 6 items
CLEAN-UP: data size after cleanup: 188.00 MB
R , max(abs(num_val)) =  2.0054514864455992 , relative error = 0.002725743222799615
plot_them(an3["RicciS"], rel["s_RicciS"])
max 1.18e-01 error at [0] [0] [0]
Max relative difference in boundary region
../_images/f42a1ab0264ac7235cc6028376190dae89a83f5b64e45419e52fb93b4ceb14e7.png

4D

check4d(4, "Ruddd", an4["Riemann_uddd"], rel["st_Riemann_uddd4"])
0 1 0 1,  0 1 0 2,  0 1 0 3,  0 1 1 2,  0 1 1 3,  0 1 2 3,  0 2 0 1,  0 2 0 2,  0 2 0 3,  0 2 1 2,  0 2 1 3,  0 2 2 3,  0 3 0 1,  0 3 0 2,  0 3 0 3,  0 3 1 2,  0 3 1 3,  0 3 2 3,  1 0 0 1,  1 0 0 2,  1 0 0 3,  1 0 1 2,  1 0 1 3,  1 0 2 3,  1 2 0 1,  1 2 0 2,  1 2 0 3,  1 2 1 2,  1 2 1 3,  1 2 2 3,  1 3 0 1,  1 3 0 2,  1 3 0 3,  1 3 1 2,  1 3 1 3,  1 3 2 3,  2 0 0 1,  2 0 0 2,  2 0 0 3,  2 0 1 2,  2 0 1 3,  2 0 2 3,  2 1 0 1,  2 1 0 2,  2 1 0 3,  2 1 1 2,  2 1 1 3,  2 1 2 3,  2 3 0 1,  2 3 0 2,  2 3 0 3,  2 3 1 2,  2 3 1 3,  2 3 2 3,  3 0 0 1,  3 0 0 2,  3 0 0 3,  3 0 1 2,  3 0 1 3,  3 0 2 3,  3 1 0 1,  3 1 0 2,  3 1 0 3,  3 1 1 2,  3 1 1 3,  3 1 2 3,  3 2 0 1,  3 2 0 2,  3 2 0 3,  3 2 1 2,  3 2 1 3,  3 2 2 3,  
Calculated analytic Riemann_uddd: Riemann curvature tensor in the up-down-down-down index form

Calculated s_Riemann_uddd3: ${}^{(3)}{R^{i}}_{jkl}$ Riemann tensor of spatial metric with mixed spatial indices
Calculated s_Riemann_down3: ${}^{(3)}R_{ijkl}$ Riemann tensor of spatial metric with all spatial indices down
Calculated betadown3: $\beta_{i}$ Shift vector with spatial indices down
Calculated gdown4: $g_{\mu\nu}$ Spacetime metric with spacetime indices down
Calculated gup4: $g^{\mu\nu}$ Spacetime metric with spacetime indices up
Calculated st_Ricci_down3: ${}^{(4)}R_{ij}$ Ricci tensor of spacetime metric with spatial indices down
Calculated Ktrace: $K = \gamma^{ij}K_{ij}$ Trace of extrinsic curvature
Calculated st_Riemann_down4: ${}^{(4)}R_{\alpha\beta\mu\nu}$ Riemann tensor of spacetime metric with spacetime indices down
Calculated st_Riemann_uddd4: ${}^{(4)}{R^{\alpha}}_{\beta\mu\nu}$ Riemann tensor of spacetime metric with mixed spacetime indices
Ruddd0101 , max(abs(num_val)) =  0.0031484491030582262 , relative error = 0.0031484491030582262
Ruddd0110 , max(abs(num_val)) =  0.0031484491030582262 , relative error = 0.0031484491030582262
Ruddd0123 , max(abs(num_val)) =  0.01262044790564687 , relative error = 0.01262044790564687
Ruddd0132 , max(abs(num_val)) =  0.01262044790564687 , relative error = 0.01262044790564687
Ruddd0203 , max(abs(num_val)) =  19697.40712642635 , relative error = 0.0003891806778538999
Ruddd0230 , max(abs(num_val)) =  19697.40712642635 , relative error = 0.0003891806778538999
Ruddd0302 , max(abs(num_val)) =  19697.40712642635 , relative error = 0.0003891806778538999
Ruddd0303 , max(abs(num_val)) =  164064.5758265376 , relative error = 0.00020820998017207775
Ruddd0312 , max(abs(num_val)) =  19697.00558478495 , relative error = 0.000601699148547393
Ruddd0313 , max(abs(num_val)) =  164058.73499428353 , relative error = 0.0001017379136592247
Ruddd0320 , max(abs(num_val)) =  19697.40712642635 , relative error = 0.0003891806778538999
Ruddd0321 , max(abs(num_val)) =  19697.00558478495 , relative error = 0.000601699148547393
Ruddd0330 , max(abs(num_val)) =  164064.5758265376 , relative error = 0.00020820998017207775
Ruddd0331 , max(abs(num_val)) =  164058.73499428353 , relative error = 0.0001017379136592247
Ruddd1001 , max(abs(num_val)) =  0.0031484491030582262 , relative error = 0.0031484491030582262
Ruddd1010 , max(abs(num_val)) =  0.0031484491030582262 , relative error = 0.0031484491030582262
Ruddd1023 , max(abs(num_val)) =  0.01262044790564687 , relative error = 0.01262044790564687
Ruddd1032 , max(abs(num_val)) =  0.01262044790564687 , relative error = 0.01262044790564687
Ruddd1203 , max(abs(num_val)) =  19697.00558478495 , relative error = 0.000601699148547393
Ruddd1213 , max(abs(num_val)) =  19697.32403291621 , relative error = 0.00039339925765970705
Ruddd1230 , max(abs(num_val)) =  19697.00558478495 , relative error = 0.000601699148547393
Ruddd1231 , max(abs(num_val)) =  19697.32403291621 , relative error = 0.0003933992576816906
Ruddd1303 , max(abs(num_val)) =  164058.73499428353 , relative error = 0.0001017379136592247
Ruddd1312 , max(abs(num_val)) =  19697.32403291611 , relative error = 0.00039339925763772355
Ruddd1313 , max(abs(num_val)) =  164063.8640576504 , relative error = 0.00015205262380855634
Ruddd1321 , max(abs(num_val)) =  19697.32403291611 , relative error = 0.00039339925765970705
Ruddd1330 , max(abs(num_val)) =  164058.73499428353 , relative error = 0.0001017379136592247
Ruddd1331 , max(abs(num_val)) =  164063.8640576504 , relative error = 0.00015205262380855634
Ruddd2002 , max(abs(num_val)) =  0.5003766011970541 , relative error = 0.004461712594083345
Ruddd2003 , max(abs(num_val)) =  8.740676153529426 , relative error = 0.0005113896423065301
Ruddd2020 , max(abs(num_val)) =  0.5003766011970541 , relative error = 0.004461712594083345
Ruddd2030 , max(abs(num_val)) =  8.740676153529426 , relative error = 0.0005113896423065301
Ruddd2103 , max(abs(num_val)) =  8.73999212532988 , relative error = 0.0002991099226462979
Ruddd2112 , max(abs(num_val)) =  0.5008153624203805 , relative error = 0.005963771165482301
Ruddd2113 , max(abs(num_val)) =  8.741538532811123 , relative error = 0.0004457114229562048
Ruddd2121 , max(abs(num_val)) =  0.5008153624203763 , relative error = 0.005963771165482301
Ruddd2130 , max(abs(num_val)) =  8.73999212532988 , relative error = 0.0002991099226462979
Ruddd2131 , max(abs(num_val)) =  8.741538532810669 , relative error = 0.0004457114229562048
Ruddd2223 , max(abs(num_val)) =  0.08309351007491746 , relative error = 0.08309351007491746
Ruddd2232 , max(abs(num_val)) =  0.08309351007491746 , relative error = 0.08309351007491746
Ruddd2301 , max(abs(num_val)) =  0.00020943222492908245 , relative error = 0.00020943222492908245
Ruddd2310 , max(abs(num_val)) =  0.00020943222492908245 , relative error = 0.00020943222492908245
Ruddd2323 , max(abs(num_val)) =  0.7117688877163798 , relative error = 0.7117688877163798
Ruddd2332 , max(abs(num_val)) =  0.7117688877163798 , relative error = 0.7117688877163798
Ruddd3002 , max(abs(num_val)) =  0.0002525336748191673 , relative error = 0.0002525336748191673
Ruddd3003 , max(abs(num_val)) =  0.5002037766096384 , relative error = 0.001041708533186636
Ruddd3020 , max(abs(num_val)) =  0.0002525336748191673 , relative error = 0.0002525336748191673
Ruddd3030 , max(abs(num_val)) =  0.5002037766096384 , relative error = 0.001041708533186636
Ruddd3112 , max(abs(num_val)) =  0.0003281227507435711 , relative error = 0.0003281227507435711
Ruddd3113 , max(abs(num_val)) =  0.5001665635203726 , relative error = 0.0008805607837963914
Ruddd3121 , max(abs(num_val)) =  0.0003281227507435711 , relative error = 0.0003281227507435711
Ruddd3131 , max(abs(num_val)) =  0.5001665635203228 , relative error = 0.0008805607837963914
Ruddd3223 , max(abs(num_val)) =  0.00983646169337686 , relative error = 0.00983646169337686
Ruddd3232 , max(abs(num_val)) =  0.00983646169337686 , relative error = 0.00983646169337686
Ruddd3323 , max(abs(num_val)) =  0.08309351014149692 , relative error = 0.08309351014149692
Ruddd3332 , max(abs(num_val)) =  0.08309351014149692 , relative error = 0.08309351014149692
check4d(4, "R_", an4["Riemann_down"], rel["st_Riemann_down4"])
0 1 0 1,  0 1 0 2,  0 1 0 3,  0 1 1 2,  0 1 1 3,  0 1 2 3,  0 2 0 2,  0 2 0 3,  0 2 1 2,  0 2 1 3,  0 2 2 3,  0 3 0 3,  0 3 1 2,  0 3 1 3,  0 3 2 3,  1 2 1 2,  1 2 1 3,  1 2 2 3,  1 3 1 3,  1 3 2 3,  2 3 2 3,  
Calculated analytic Riemann_down: Riemann curvature tensor in the down index form
R_0101 , max(abs(num_val)) =  0.0031484491030582262 , relative error = 0.0031484491030582262
R_0110 , max(abs(num_val)) =  0.0031484491030582262 , relative error = 0.0031484491030582262
R_0123 , max(abs(num_val)) =  0.01262044790564687 , relative error = 0.01262044790564687
R_0132 , max(abs(num_val)) =  0.01262044790564687 , relative error = 0.01262044790564687
R_0203 , max(abs(num_val)) =  19697.40712642635 , relative error = 0.0003891806778538999
R_0230 , max(abs(num_val)) =  19697.40712642635 , relative error = 0.0003891806778538999
R_0302 , max(abs(num_val)) =  19697.40712642635 , relative error = 0.0003891806778538999
R_0303 , max(abs(num_val)) =  164064.5758265376 , relative error = 0.00020820998017207775
R_0312 , max(abs(num_val)) =  19697.00558478495 , relative error = 0.000601699148547393
R_0313 , max(abs(num_val)) =  164058.73499428353 , relative error = 0.0001017379136592247
R_0320 , max(abs(num_val)) =  19697.40712642635 , relative error = 0.0003891806778538999
R_0321 , max(abs(num_val)) =  19697.00558478495 , relative error = 0.000601699148547393
R_0330 , max(abs(num_val)) =  164064.5758265376 , relative error = 0.00020820998017207775
R_0331 , max(abs(num_val)) =  164058.73499428353 , relative error = 0.0001017379136592247
R_1001 , max(abs(num_val)) =  0.0031484491030582262 , relative error = 0.0031484491030582262
R_1010 , max(abs(num_val)) =  0.0031484491030582262 , relative error = 0.0031484491030582262
R_1023 , max(abs(num_val)) =  0.01262044790564687 , relative error = 0.01262044790564687
R_1032 , max(abs(num_val)) =  0.01262044790564687 , relative error = 0.01262044790564687
R_1203 , max(abs(num_val)) =  19697.00558478495 , relative error = 0.000601699148547393
R_1213 , max(abs(num_val)) =  19697.32403291621 , relative error = 0.00039339925765970705
R_1230 , max(abs(num_val)) =  19697.00558478495 , relative error = 0.000601699148547393
R_1231 , max(abs(num_val)) =  19697.32403291621 , relative error = 0.0003933992576816906
R_1303 , max(abs(num_val)) =  164058.73499428353 , relative error = 0.0001017379136592247
R_1312 , max(abs(num_val)) =  19697.32403291611 , relative error = 0.00039339925763772355
R_1313 , max(abs(num_val)) =  164063.8640576504 , relative error = 0.00015205262380855634
R_1321 , max(abs(num_val)) =  19697.32403291611 , relative error = 0.00039339925765970705
R_1330 , max(abs(num_val)) =  164058.73499428353 , relative error = 0.0001017379136592247
R_1331 , max(abs(num_val)) =  164063.8640576504 , relative error = 0.00015205262380855634
R_2003 , max(abs(num_val)) =  19697.40712642635 , relative error = 0.0003891806778538999
R_2030 , max(abs(num_val)) =  19697.40712642635 , relative error = 0.0003891806778538999
R_2103 , max(abs(num_val)) =  19697.00558478495 , relative error = 0.000601699148547393
R_2112 , max(abs(num_val)) =  2331.6857012733462 , relative error = 0.0002281854824960171
R_2113 , max(abs(num_val)) =  19696.820325958746 , relative error = 0.00039205847954967344
R_2121 , max(abs(num_val)) =  2331.6857012733462 , relative error = 0.0002281854824960171
R_2130 , max(abs(num_val)) =  19697.00558478495 , relative error = 0.000601699148547393
R_2131 , max(abs(num_val)) =  19696.820325958746 , relative error = 0.00039205847954967344
R_2301 , max(abs(num_val)) =  0.01262044790564687 , relative error = 0.01262044790564687
R_2310 , max(abs(num_val)) =  0.01262044790564687 , relative error = 0.01262044790564687
R_2323 , max(abs(num_val)) =  45.87134784460068 , relative error = 45.87134784460068
R_2332 , max(abs(num_val)) =  45.87134784460068 , relative error = 45.87134784460068
R_3002 , max(abs(num_val)) =  19697.40712642635 , relative error = 0.0003891806778538999
R_3003 , max(abs(num_val)) =  164064.5758265376 , relative error = 0.00020820998017207775
R_3012 , max(abs(num_val)) =  19697.00558478495 , relative error = 0.000601699148547393
R_3013 , max(abs(num_val)) =  164058.73499428353 , relative error = 0.0001017379136592247
R_3020 , max(abs(num_val)) =  19697.40712642635 , relative error = 0.0003891806778538999
R_3021 , max(abs(num_val)) =  19697.00558478495 , relative error = 0.000601699148547393
R_3030 , max(abs(num_val)) =  164064.5758265376 , relative error = 0.00020820998017207775
R_3031 , max(abs(num_val)) =  164058.73499428353 , relative error = 0.0001017379136592247
R_3103 , max(abs(num_val)) =  164058.73499428353 , relative error = 0.0001017379136592247
R_3112 , max(abs(num_val)) =  19697.0521491877 , relative error = 0.0006904520382722087
R_3113 , max(abs(num_val)) =  164059.24308140838 , relative error = 0.0001625071400577208
R_3121 , max(abs(num_val)) =  19697.0521491877 , relative error = 0.0006904520382722087
R_3130 , max(abs(num_val)) =  164058.73499428353 , relative error = 0.0001017379136592247
R_3131 , max(abs(num_val)) =  164059.24308140838 , relative error = 0.0001625071400577208
R_3201 , max(abs(num_val)) =  0.01262044790564687 , relative error = 0.01262044790564687
R_3210 , max(abs(num_val)) =  0.01262044790564687 , relative error = 0.01262044790564687
R_3223 , max(abs(num_val)) =  45.871355175971985 , relative error = 45.871355175971985
R_3232 , max(abs(num_val)) =  45.871355175971985 , relative error = 45.871355175971985
plot_them(an4["Riemann_down"][2,1,2,1], rel["st_Riemann_down4"][2,1,2,1])
max 1.04e-02 error at 0 1 0
Max relative difference in boundary region
../_images/4afad4f09ab8f8e909864088107c3250862a85c7f071a24de629512be3124c00.png
check2d(4, "R_", an4["Ricci_down"], rel["st_Ricci_down4"])
Calculated analytic Ricci_down: Ricci curvature tensor in the down index form

Calculated Ttrace: $T$ Trace of the energy-stress tensor
Calculated st_Ricci_down4: ${}^{(4)}R_{\alpha\beta}$ Ricci tensor of spacetime metric with spacetime indices down
checks("R", an4["RicciS"], rel["st_RicciS"])
Calculated analytic RicciS: Ricci scalar

Calculated st_RicciS: ${}^{(4)}R$ Ricci scalar of spacetime metric