Source code for athenakit.physics.metric

import numpy as np
try:
    import cupy as xp
    xp.array(0)
except:
    import numpy as xp

[docs] def kerr_schild_radius(x,y,z,a): rad = (x**2+y**2+z**2)**0.5 r = ((rad**2-a**2+((rad**2-a**2)**2+4.0*a**2*z**2)**0.5)/2.0)**0.5 return r
[docs] def kerr_schild_metric_and_inverse(x,y,z,a): x = xp.asarray(x) y = xp.asarray(y) z = xp.asarray(z) rad = (x**2+y**2+z**2)**0.5 # Kerr-Schild radius r = ((rad**2-a**2+((rad**2-a**2)**2+4.0*a**2*z**2)**0.5)/2.0)**0.5 # Set covariant components # null vector l l_lower = xp.zeros((4,)+x.shape) l_lower[0] = xp.ones(x.shape) l_lower[1] = (r*x + (a)*y)/( (r)**2 + (a)**2 ) l_lower[2] = (r*y - (a)*x)/( (r)**2 + (a)**2 ) l_lower[3] = z/r # g_nm = f*l_n*l_m + eta_nm, where eta_nm is Minkowski metric f = 2.0 * (r)**2*r / (((r)**2)**2 + (a)**2*(z)**2) glower = xp.zeros((4,4)+x.shape) glower[0][0] = f * l_lower[0]*l_lower[0] - 1.0 glower[0][1] = f * l_lower[0]*l_lower[1] glower[0][2] = f * l_lower[0]*l_lower[2] glower[0][3] = f * l_lower[0]*l_lower[3] glower[1][0] = glower[0][1] glower[1][1] = f * l_lower[1]*l_lower[1] + 1.0 glower[1][2] = f * l_lower[1]*l_lower[2] glower[1][3] = f * l_lower[1]*l_lower[3] glower[2][0] = glower[0][2] glower[2][1] = glower[1][2] glower[2][2] = f * l_lower[2]*l_lower[2] + 1.0 glower[2][3] = f * l_lower[2]*l_lower[3] glower[3][0] = glower[0][3] glower[3][1] = glower[1][3] glower[3][2] = glower[2][3] glower[3][3] = f * l_lower[3]*l_lower[3] + 1.0 # Set contravariant components # null vector l l_upper = xp.zeros((4,)+x.shape) l_upper[0] = -1.0 l_upper[1] = l_lower[1] l_upper[2] = l_lower[2] l_upper[3] = l_lower[3] # g^nm = -f*l^n*l^m + eta^nm, where eta^nm is Minkowski metric gupper = xp.zeros((4,4)+x.shape) gupper[0][0] = -f * l_upper[0]*l_upper[0] - 1.0 gupper[0][1] = -f * l_upper[0]*l_upper[1] gupper[0][2] = -f * l_upper[0]*l_upper[2] gupper[0][3] = -f * l_upper[0]*l_upper[3] gupper[1][0] = gupper[0][1] gupper[1][1] = -f * l_upper[1]*l_upper[1] + 1.0 gupper[1][2] = -f * l_upper[1]*l_upper[2] gupper[1][3] = -f * l_upper[1]*l_upper[3] gupper[2][0] = gupper[0][2] gupper[2][1] = gupper[1][2] gupper[2][2] = -f * l_upper[2]*l_upper[2] + 1.0 gupper[2][3] = -f * l_upper[2]*l_upper[3] gupper[3][0] = gupper[0][3] gupper[3][1] = gupper[1][3] gupper[3][2] = gupper[2][3] gupper[3][3] = -f * l_upper[3]*l_upper[3] + 1.0 return glower, gupper