Visualización de Geodésicas usando EinsteinPy¶
$\hspace{1.5cm}$ $\hspace{2cm}$
$\hspace{2cm}$
1+1
2
Geodésicas en torno a un agujero negro de Schwarzschild¶
- Obs: desde la forma de la métrica de Schwarzschild se sabe que el movimiento está restringido a un plano, luego, se trabajará con gráficas en 2 dimensiones para este tipo de escenarios
Parámetros por defecto: Geodesic()¶
steps (int) – Number of integration steps Defaults to 50
delta (float) – Initial integration step-size Defaults to 0.5
rtol (float) – Relative Tolerance Defaults to 1e-2
atol (float) – Absolute Tolerance Defaults to 1e-2
order (int) – Integration Order Defaults to 2
omega (float) – Coupling between Hamiltonian Flows Smaller values imply smaller integration error, but too small values can make the equation of motion non-integrable. For non-capture trajectories, omega = 1.0 is recommended. For trajectories, that either lead to a capture or a grazing geodesic, a decreased value of 0.01 or less is recommended. Defaults to 1.0
These parameters are for controlling numerical integration when solving geodesic equations, typically in General Relativity simulations (e.g., with einsteinpy). They influence precision, stability, and performance of how the path of a particle or photon is computed through curved spacetime
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
from einsteinpy.geodesic import Timelike, Nulllike
#from einsteinpy.plotting.geodesic import StaticGeodesicPlotter
#from einsteinpy.symbolic import Schwarzschild
''' Functions [Move to a separate file] '''
# Definir función para graficar coordenadas
def plotgeod_q(q, leap, max_ind, name, save=False, mark=0):
# Definir coordenadas
t, x, y = q[0][:max_ind:leap], q[1][:max_ind:leap], q[2][:max_ind:leap]
plt.figure(figsize=(14,5))
plt.scatter(x, y, c=range(len(t)), cmap='coolwarm', s=6, alpha=.9)
plt.plot(0, 0, "ko", label="BH")
# Event horizon
rBH = 2.
xBH = np.linspace(-rBH,rBH,40)
yBH = np.sqrt(rBH**2-xBH**2)
plt.plot(xBH,yBH,'k--',xBH,-yBH, 'k--')
if mark:
plt.plot(x[-mark:], y[-mark:], 'k*', markersize=13)
plt.colorbar(label="~Time")
plt.xlabel("x", fontsize=12.5)
plt.ylabel("y", fontsize=12.5)
plt.title(name, fontsize=12.5)
plt.legend(fontsize=12.5)
if save:
plt.savefig(name+'.png', dpi=400)
plt.show()
# Plot momentum
def plotgeod_p(q, p, leap, max_ind, name, save=False, mark=0): # fix to have max_ind=-1 by default
# Definir coordenadas [esféricas]
t, E = q[0][:max_ind:leap], p[0][:max_ind:leap]
p_r, p_theta, p_phi = p[1][:max_ind:leap], p[2][:max_ind:leap], p[3][:max_ind:leap]
fig, axs = plt.subplots(figsize=(14,5),nrows=1, ncols=2)
fs=15
# Energy
axs[0].plot(t, E, label=f'E(0)={round(E[0],2)}')
axs[0].set_title('E(t)', fontsize=fs)
axs[0].set_xlabel('~Time')
axs[0].set_ylabel('Energy')
axs[0].legend(fontsize=fs, loc='upper left')
# 3-momentum:
axs[1].plot(t,p_r, label=fr'$P_r(0)=${round(p_r[0], 2)}')
axs[1].plot(t,p_theta, label=fr'$P_\theta(0)=${round(p_theta[0],2)}')
axs[1].plot(t,p_phi, label=fr'$P_\phi(0)=${round(p_phi[0],2)}')
axs[1].set_title('3-momentum', fontsize=fs)
axs[1].set_xlabel('~Time')
axs[1].set_ylabel('3-momentum')
axs[1].legend(fontsize=fs, loc='lower left')
if mark:
axs[0].plot(t[-mark:], E[-mark:], 'k*', markersize=13) #Not quite happy with this
if save:
plt.savefig(name+'.png', dpi=400)
plt.tight_layout()
plt.show()
### Plot n particles ###
# Same idea as plotgeod_q, but for more particles
# Note that the steps and delta ought to be the same for all particles
# Preferably, same parameters (atol, rtol, omega, order)
# Warning: for now it only supports up to 3 particles and a black hole Mass = 1
def plotgeod_q2(q_list, name, max_ind, a, leap=[1,1,1], save=False, ani=False, lims=[0]): #, mark=0):
# Definir coordenadas
t_list = [q_list[i][0][:max_ind[i]:leap[i]] for i in range(len(q_list))]
x_list = [q_list[i][1][:max_ind[i]:leap[i]] for i in range(len(q_list))]
y_list = [q_list[i][2][:max_ind[i]:leap[i]] for i in range(len(q_list))]
#cmap_list = ['coolwarm', 'viridis', 'jet']
color_list = ['red', 'green', 'blue']
marker_list = ['1', 'd', '^']
plt.figure(figsize=(14,5))
plt.plot(0, 0, "ko", label="BH") # point BH
for i in range(len(q_list)):
# Geodesics
plt.scatter(x_list[i], y_list[i], c=color_list[i], marker=marker_list[i],s=12, alpha=.7, label=f'Particle {1+i}')
#plt.colorbar(label=f"~Time | {i}") #too messy with 3 colorbars; for absorbed geodesics we can do withouth
# Event horizon [Update this to support ergosphere and other Kerr BH features]
## Schild BH (1 event horizon)
if name[0]=='S':
rS = 2.
xS = np.linspace(-rS,rS,40)
yS = np.sqrt(rS**2-xS**2)
plt.plot(xS,yS,'k--',xS,-yS, 'k--')
## Kerr BH (2 event horizons + 1 ergosphere) [Obs: not spherical (Euclidean sense), but S^2 topology]
elif name[0]=='K':
r_plus = 1 + np.sqrt(1-a**2)
r_minus= 1 - np.sqrt(1-a**2)
xK_p = np.linspace(-r_plus, r_plus, 30)
yK_p = np.sqrt(r_plus**2 - xK_p**2)
xK_m = np.linspace(-r_minus, r_minus, 30)
yK_m = np.sqrt(r_minus**2 - xK_m**2)
plt.plot(xK_p,yK_p,'k--', label='OH') # outer horizon
plt.plot(xK_p,-yK_p, 'k--')
plt.plot(xK_m,yK_m,'k--', alpha=.7, label='IH') # inner horizon
plt.plot(xK_m,-yK_m, 'k--', alpha=.7,)
print(r_plus, r_minus)
# ergosphere [at the Equator, equal to Schild radius; independent of a]
rERG = 2.
xERG = np.linspace(-rERG,rERG,30)
yERG = np.sqrt(rERG**2-xERG**2)
plt.plot(xERG,yERG,'g--', label='ERG') #ergosphere
plt.plot(xERG,-yERG, 'g--',)
#if mark:
# plt.plot(x[-mark:], y[-mark:], 'k*', markersize=13)
#plt.colorbar(label="~Time")
if lims[0]!=0:
plt.xlim(lims[0], lims[1])
plt.ylim(lims[2], lims[3])
plt.xlabel("x [GM/c^2]", fontsize=12.5)
plt.ylabel("y [GM/c^2]", fontsize=12.5)
plt.title(name, fontsize=12.5)
plt.legend(fontsize=12.5)
if save==True:
plt.savefig(name+'.png', dpi=400)
if ani==False:
plt.show()
# set plot theme
sns.set_theme(context='notebook', style='darkgrid', palette='colorblind')
Prototipo de simulación¶
- Definir condiciones iniciales y parámetros de Geodesic()
- Calcular geodésica (Timelike or Nulllike)
- Tomar nota de Warnings
- Obtener trayectoria: 4-posición y 4-momentum
- Graficar evolución temporal de la posición (plano ecuatorial)
- Investigar errores
- Graficar 4-momentum
- Concluciones
- Exportar resultados o volver a al paso 1.
Ecuación Geodésica
$$ \frac{d^2x^{\mu}}{d\lambda^2}+\Gamma_{\nu\sigma}^{\mu}\frac{dx^\nu}{d\lambda}\frac{dx^\sigma}{d\lambda}$$
Los pasos de la integración se realizan sobre el parámetro afín $\lambda$
La primera componente de la 4-posición $x^0(λ) = t(λ)$ es parte de la solución de esta ecuación. Luego, qué tan rápido cambia $t$ respecto a $\lambda$ dependerá del momentum inicial y la geometría del espacio en ese punto.
# Condiciones iniciales
position = [56., np.pi / 2, 0.] # r, theta, phi (x=56, y=z=0)
momentum = [0., 0., 3.83405] # momento inicial solo en phi
a = 0. # Spin = 0 for a Schwarzschild black hole
steps = 5500 # Number of steps to be taken by the solver
delta = 1 # default is set to 0.5
geod = Timelike( # m>0
metric="Schwarzschild",
metric_params=(a,),
position=position,
momentum=momentum,
steps=steps,
delta=delta,
suppress_warnings=True,
return_cartesian=True # Obs: Momenta are dimensionless quantities, and are returned in Spherical Polar Coordinates.
)
#print(geod)
# 4-posición y 4-momentum
q = geod.trajectory[1].T[:4] #[GM/c^2]
p = geod.trajectory[1].T[-4:]
q[1]
array([5.59998939e+01, 5.59993694e+01, 5.59985728e+01, ...,
2.14083123e+05, 1.94292710e+05, 1.85140955e+05], shape=(5500,))
q[2]
array([ 6.84651348e-02, 1.36929665e-01, 2.05393464e-01, ...,
-4.75899271e+04, -1.01777092e+05, -1.17696597e+05], shape=(5500,))
p[2]
array([2.87025740e-19, 5.74054660e-19, 8.61087728e-19, ...,
1.07740099e-15, 1.32112061e-15, 1.42160205e-15], shape=(5500,))
# Definir cuadriposición y cuadrimomentum
q = geod.trajectory[1].T[:4] # 4-position (cartesian) [Units of GM/c^2]
p = geod.trajectory[1].T[-4:] # 4 momentum (spherical) [dimensionless]
leap = 1
max_ind = 584
# name output
metric = 'Schild' # Kerr
kind = 'Timelike' # Nulllike
name = metric +'_'+ kind +'_'+ str(steps) +'_'+ str(delta) +'_'+ str(position) +'_'+ str(momentum)
plotgeod_q(q, leap, max_ind, name, save=False)
Hasta aquí todo parece correcto: el momento inicial de la partícula no es el suficiente para orbitar de manera estable al agujero negro y en poco tiempo terminará cayendo...
plotgeod_q(q, leap, max_ind=2000 ,name=name)
Algo falló, ahora acerquémonos...
plotgeod_q(q, leap, max_ind=589 ,name=name)
plotgeod_q(q, leap, max_ind=588 ,name=name, mark=3)
Obs: notar que la separación entre los puntos fue incrementando a medida que la partícula se acercaba al BH, esto sugiere que la simulación requería de un step más pequeño para que la simulación mantuviera la estabilidad
Veamos ahora el comportamiento del cuadrimomento
# How to get initial conditions
geod.position
geod.momentum
array([ 0. , 56. , 1.57079633, 0. ])
plotgeod_p(q, p, leap, max_ind=800, name=name)
plotgeod_p(q, p, leap, max_ind=588, name=name, mark=3)
# Usando una las funciones integradas en einsteinpy
from einsteinpy.plotting import GeodesicPlotter
gpl = GeodesicPlotter()
gpl.clear()
gpl.parametric_plot(geod, colors=("red", "green", "blue"))
gpl.show()
No la mejor opción en este caso...
Ajustar omega y delta¶
1st Try¶
Siguiendo las recomendaciones de la documentación, para trayectorias donde la partícula es absorbida,
es recomendable utilizar un valor de omega$\leq0.01$. Adicionalmente, se utiliza delta=0.5
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
from einsteinpy.geodesic import Timelike
from einsteinpy.plotting.geodesic import StaticGeodesicPlotter
from einsteinpy.symbolic import Schwarzschild
# Condiciones iniciales
position = [56., np.pi / 2, 0.] # r, theta, phi (x=56, y=z=0)
momentum = [0., 0., 3.83405] # momento inicial solo en phi
a = 0. # Spin = 0 for a Schwarzschild black hole
steps = 1200 # Number of steps to be taken by the solver
delta = 0.5
omega = 0.002
geod = Timelike( # m>0
metric="Schwarzschild",
metric_params=(a,),
position=position,
momentum=momentum,
steps=steps,
delta=delta,
omega=omega,
suppress_warnings=False, #True,
return_cartesian=True # Obs: Momenta are dimensionless quantities, and are returned in Spherical Polar Coordinates.
)
#print(geod)
geod.trajectory[1].T[0]-geod.trajectory[0] # Is this numeric error or time dilation...
array([ 5.10367056e-01, 2.07341326e-02, -4.68898751e-01, ...,
8.30438125e+08, 8.57063129e+08, 8.84541768e+08], shape=(1200,))
geod.trajectory[0] # = range(steps)
array([ 0, 1, 2, ..., 1197, 1198, 1199], shape=(1200,))
geod.trajectory[1].T[0] # Not even ordered?
array([5.10367056e-01, 1.02073413e+00, 1.53110125e+00, ...,
8.30439322e+08, 8.57064327e+08, 8.84542967e+08], shape=(1200,))
# Definir 4-posición y 4-momentum
q = geod.trajectory[1].T[:4] # 4-position (cartesian) [Units of GM/c^2]
p = geod.trajectory[1].T[-4:] # 4 momentum (spherical) [dimensionless]
leap = 1
max_ind = 1190
# name output
metric = 'Schild' # Kerr
kind = 'Timelike' # Nulllike
name = metric +'_'+ kind +'_'+ str(steps) +'_'+ str(delta) +'_'+ str(position) +'_'+ str(momentum)
plotgeod_q(q, leap, max_ind, name, save=False)
plotgeod_q(q, leap, max_ind=720, name=name)
Esta vez los errores numéricos comenzaron incluso antes de acercarse al agujero negro
plotgeod_q(q, leap, max_ind=735, name=name, mark=5)
plotgeod_p(q, p, leap, max_ind=1190, name=name)
Ahora nos acercámos a los puntos más cercanos al BH
plotgeod_p(q, p, leap, max_ind=735, name=name, mark=5)
Obs: Notar que los errores numéricos se intensificaron mucho antes del encuentro con el BH
2nd Try¶
- Probar con
omega=0.009 y reducimos adelta=0.2
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
from einsteinpy.geodesic import Timelike
#from einsteinpy.plotting.geodesic import StaticGeodesicPlotter
#from einsteinpy.symbolic import Schwarzschild
# Condiciones iniciales
position = [56., np.pi / 2, 0.] # r, theta, phi (x=56, y=z=0)
momentum = [0., 0., 3.83405] # momento inicial solo en phi
a = 0. # Spin = 0 for a Schwarzschild black hole
steps = 1200 # Number of steps to be taken by the solver
delta = 0.2
omega = 0.009
# Calcular geodésica
geod2 = Timelike( # m>0
metric="Schwarzschild",
metric_params=(a,),
position=position,
momentum=momentum,
steps=steps,
delta=delta,
omega=omega,
suppress_warnings=False, #True,
return_cartesian=True # Obs: Momenta are dimensionless quantities, and are returned in Spherical Polar Coordinates.
)
#print(geod)
# First warning
#Numerical error has exceeded specified tolerance at step = 655.
# Definir 4-posición y 4-momentum
q = geod2.trajectory[1].T[:4] # 4-position (cartesian) [Units of GM/c^2]
p = geod2.trajectory[1].T[-4:] # 4 momentum (spherical) [dimensionless]
leap = 1
max_ind = 1190
# name output
metric = 'Schild' # Kerr
kind = 'Timelike' # Nulllike
name = metric +'_'+ kind +'_'+ str(steps) +'_'+ str(delta) +'_'+ str(position) +'_'+ str(momentum)
plotgeod_q(q, leap, max_ind, name, save=False)
Now zoom in...
plotgeod_q(q, leap, max_ind=940, name=name, save=False)
Resultados similares a los obtenidos en la sección anterior, los errores comienzan a ser significativos mucho antes de acercarse al BH
plotgeod_p(q, p, leap, max_ind=700, name=name)
Al parecer las variaciones en el momento y en la energía no son significativas, pero se empieza a notar que el momento radial comienza a disminuir
plotgeod_p(q, p, leap, max_ind=1000, name=name)
3rd Try¶
- Aumentar el orden del RK (2 $\to$ 4) y utilizar
delta=1.0 yomega=1.0 (para resolver de buena forma la primera parte de la trayectoria)
# Condiciones iniciales
position = [56., np.pi / 2, 0.] # r, theta, phi (x=56, y=z=0)
momentum = [0., 0., 3.83405] # momento inicial solo en phi
a = 0. # Spin = 0 for a Schwarzschild black hole
steps = 1200 # Number of steps to be taken by the solver
delta = 1.0
omega = 1.0
order = 4
# Calcular geodésica
geod3 = Timelike( # m>0
metric="Schwarzschild",
metric_params=(a,),
position=position,
momentum=momentum,
steps=steps,
delta=delta,
omega=omega,
order=order,
suppress_warnings=False, #True,
return_cartesian=True # Obs: Momenta are dimensionless quantities, and are returned in Spherical Polar Coordinates.
)
# First warning
# Numerical error has exceeded specified tolerance at step = 582.
# Definir 4-posición y 4-momentum
q = geod3.trajectory[1].T[:4] # 4-position (cartesian) [Units of GM/c^2]
p = geod3.trajectory[1].T[-4:] # 4 momentum (spherical) [dimensionless]
leap = 1
max_ind = 1190
# name output
metric = 'Schild' # Kerr
kind = 'Timelike' # Nulllike
name = metric +'_'+ kind +'_'+ str(steps) +'_'+ str(delta) +'_'+ str(position) +'_'+ str(momentum)
# Plot q
plotgeod_q(q, leap, max_ind, name, save=False)
Similar al resultado obtenido en la primera sección. Now zoom in...
plotgeod_q(q, leap, max_ind=585, name=name, save=False) # Notar que los últimos 3 puntos ya sobrepasaron
# la tolerancia seteada
Esta vez sí se obtiene una simulación estable antes de llegar al BH
plotgeod_q(q, leap, max_ind=586, name=name, save=False, mark=2)
Naturalmente, luego de llegar al horizonte de eventos, la simulación carece de sentido
Clasificar geodésicas y aplicar early-stopping¶
- Timelike inner bound orbits (type IIa)
- Timelike outer bound orbits (type IIb)
- Timelike unbound absorbed orbits (type IIIa)
- Timelike unbound scattered orbits (type IIIb)
- Null bound orbits (type II)
- Null unbound obsorbed orbits
- Null unbound scattered orbits
- Para las orbitas absorbidas, es necesario aplicar un early-stopping justo antes de que la partícula entre al agujero negro
- En general, se necesita detener la simulación si se ha excedido la tolerancia fijada para el error
Null unbound Scatter orbits¶
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
from einsteinpy.geodesic import Timelike, Nulllike
1st Try¶
omega=delta=1 y RK2- Momento inicial positivo en $\phi$ y negativo en $r$
# Condiciones iniciales
position = [56., np.pi / 2, 0.] # r, theta, phi (x=56, y=z=0)
momentum = [-1., 0., 3.83405] # momento inicial solo en phi
a = 0. # Spin = 0 for a Schwarzschild black hole
steps = 1500 # Number of steps to be taken by the solver
delta = 1.
omega = 1.
order = 2
# Calcular geodésica
geod_n1 = Nulllike( # m=0
metric="Schwarzschild",
metric_params=(a,),
position=position,
momentum=momentum,
steps=steps,
delta=delta,
omega=omega,
order=order,
suppress_warnings=False, #True,
return_cartesian=True # Obs: Momenta are dimensionless quantities, and are returned in Spherical Polar Coordinates.
)
#print(geod)
# First warning
# Numerical error has exceeded specified tolerance a step = 58.
# Definir 4-posición y 4-momentum
q = geod_n1.trajectory[1].T[:4] # 4-position (cartesian) [Units of GM/c^2]
p = geod_n1.trajectory[1].T[-4:] # 4 momentum (spherical) [dimensionless]
leap = 1
max_ind = steps-10
# name output
metric = 'Schild' # or Kerr
kind = 'Nulllike' # or Timelike
name = metric +'_'+ kind +'_'+ str(steps) +'_'+ str(delta) +'_'+ str(position) +'_'+ str(momentum)
plotgeod_q(q, leap, max_ind, name, save=False)
plotgeod_q(q, leap, max_ind=61, name=name, save=False)
Se observa que los puntos están muy espaciados, lo cual sugiere que el integrador requiere de un delta más pequeño. Esto tiene sentido ya que esta partícula se está moviendo a la máxima velocidad permitida (i.e., c)
2nd Try¶
- Disminuir el delta para que la simulación gane estabilidad.
delta=.4 - Dado que la partícula pasa bastante cerca del BH, también se diminuye el omega.
omega=0.5 - Adicionalmente, se disminuye la magnitud del momento en $r$ (para evitar absorción) y se utiliza RK4.
# Condiciones iniciales
position = [56., np.pi / 2, 0.] # r, theta, phi (x=56, y=z=0)
momentum = [-.7, 0., 3.83405] # momento inicial solo en phi
a = 0. # Spin = 0 for a Schwarzschild black hole
steps = 1500 # Number of steps to be taken by the solver
delta = .4
omega = .5
order = 4
# Calcular geodésica
geod_n2 = Nulllike( # m=0
metric="Schwarzschild",
metric_params=(a,),
position=position,
momentum=momentum,
steps=steps,
delta=delta,
omega=omega,
order=order,
suppress_warnings=False, #True,
return_cartesian=True # Obs: Momenta are dimensionless quantities, and are returned in Spherical Polar Coordinates.
)
#print(geod)
# First warning
# Numerical error has exceeded specified tolerance a step = 91.
# Definir 4-posición y 4-momentum
q = geod_n2.trajectory[1].T[:4] # 4-position (cartesian) [Units of GM/c^2]
p = geod_n2.trajectory[1].T[-4:] # 4 momentum (spherical) [dimensionless]
leap = 1
max_ind = steps-10
# name output
metric = 'Schild' # or Kerr
kind = 'Nulllike' # or Timelike
name = metric +'_'+ kind +'_'+ str(steps) +'_'+ str(delta) +'_'+ str(position) +'_'+ str(momentum)
plotgeod_q(q, leap, max_ind, name, save=False)
Zoom in...
plotgeod_q(q, leap, max_ind=157, name=name, save=False)
plotgeod_p(q, p, leap, max_ind=1200, name=name)
Zoom in...
plotgeod_p(q, p, leap, max_ind=150, name=name, mark=3)
Desde el paso 140 aproximadamente, los errores tanto en la energía como en el momento en r, comienzan a ser significativos
En este caso, ya no corresponde a un defecto de las condiciones iniciales, pues se aprecia que la geodésica pasa lo suficientemente lejos del BH
3rd Try¶
omega=1.0 ;delta=.5 ; RK4- $P_r(0)=0.4$
# Condiciones iniciales
position = [56., np.pi / 2, 0.] # r, theta, phi (x=56, y=z=0)
momentum = [-.4, 0., 3.83405] # momento inicial solo en phi
a = 0. # Spin = 0 for a Schwarzschild black hole
steps = 800 # Number of steps to be taken by the solver
delta = .5
omega = 1.
order = 4
# Calcular geodésica
geod_n3 = Nulllike( # m=0
metric="Schwarzschild",
metric_params=(a,),
position=position,
momentum=momentum,
steps=steps,
delta=delta,
omega=omega,
order=order,
suppress_warnings=False, #True,
return_cartesian=True # Obs: Momenta are dimensionless quantities, and are returned in Spherical Polar Coordinates.
)
#print(geod)
# First warning
# No warnings!
# Definir 4-posición y 4-momentum
q = geod_n3.trajectory[1].T[:4] # 4-position (cartesian) [Units of GM/c^2]
p = geod_n3.trajectory[1].T[-4:] # 4 momentum (spherical) [dimensionless]
leap = 1
max_ind = steps-10
# name output
metric = 'Schild' # or Kerr
kind = 'Nulllike' # or Timelike
name = metric +'_'+ kind +'_'+ str(steps) +'_'+ str(delta) +'_'+ str(position) +'_'+ str(momentum)
plotgeod_q(q, leap, max_ind, name, save=False)
Relativity does work!
plotgeod_p(q, p, leap, max_ind=600, name=name)
p[1][-1] # P_r final
np.float64(0.39767470785280296)
Se observan pequeñas oscilaciones en la energía y además, luego de ser desviado, el momento $P_r$ del fotón cambió de signo.
Esto se espera, ya que el momento radial inicial comienza siendo negativo, llega al punto de retorno (en este caso al periapsis de su órbita) donde $P_r=0$ y luego escapa al infinito, donde $P_r>0$
#r = np.sqrt(q[1]**2+q[2]**2)
#plt.plot(q[0], r)
[<matplotlib.lines.Line2D at 0x7fa09b8cc050>]
4th Try¶
- Kerr BH (a=.85)
- position = [20., np.pi / 2, 0.]
- momentum = [-.7, 0., 3.]
# Condiciones iniciales
position = [20., np.pi / 2, 0.] # r, theta, phi (x=20, y=z=0)
momentum = [-.7, 0., 3.] # momento inicial solo en phi y r
metric='Kerr'
a = 0.85 # Spin = 0 for a Schwarzschild black hole
steps = 500 # Number of steps to be taken by the solver
delta = 0.2
omega = 0.01
order = 4
# Calcular geodésica
geod_K = Nulllike( # m=0
metric=metric,
metric_params=(a,),
position=position,
momentum=momentum,
steps=steps,
delta=delta,
omega=omega,
order=order,
suppress_warnings=False, #True,
return_cartesian=True # Obs: Momenta are dimensionless quantities, and are returned in Spherical Polar Coordinates.
)
#print(geod)
# First warning
# Numerical error has exceeded specified tolerance a step = 496. [just at the end]
# Definir 4-posición y 4-momentum
q = geod_K.trajectory[1].T[:4] # 4-position (cartesian) [Units of GM/c^2]
p = geod_K.trajectory[1].T[-4:] # 4 momentum (spherical) [dimensionless]
leap = 1
max_ind = steps-10
# name output
kind = 'Nulllike' # or Timelike
name = metric +'_'+ kind +'_'+ str(steps) +'_'+ str(delta) +'_'+ str(position) +'_'+ str(momentum)
plotgeod_q(q, leap, max_ind, name, save=False)
La gráfica parece bastante estable, lo cual se condice con los warnings que nos dió la simulación (solo 5 al final de la geodésica)
Notar que el punto retorno parece estar desplazado hacia la izquierda respecto a las simulaciones realizadas con agujeros negros estáticos, lo cual se conoce como frame draggin, un efecto relativista causado precisamente por la rotación de este agujero negro.
Para visualizar más en profundidad este fenómenos, podemos simular 2 fotones, uno cuya trayectoria siga la rotación del BH y otro que vaya en sentido contrario a esta
# 2 Photons: co-rotating and counter-rotating
# Ya tenemor el primer fotón en geod_K
# Condiciones iniciales
position = [20., np.pi / 2, 0.] # r, theta, phi (x=20, y=z=0)
momentum = [-.7, 0., -3.] # momento inicial hacia abajo izquierda
metric='Kerr'
a = 0.85 # Spin = 0 for a Schwarzschild black hole
steps = 500 # Number of steps to be taken by the solver
delta = 0.2
omega = 0.01
order = 4
# Calcular geodésica
geod_K2 = Nulllike( # m=0
metric=metric,
metric_params=(a,),
position=position,
momentum=momentum,
steps=steps,
delta=delta,
omega=omega,
order=order,
suppress_warnings=False, #True,
return_cartesian=True # Obs: Momenta are dimensionless quantities, and are returned in Spherical Polar Coordinates.
)
#print(geod)
# First warning
# Numerical error has exceeded specified tolerance a step = 152. (dang it!)
# Definir 4-posición y 4-momentum
q = geod_K2.trajectory[1].T[:4] # 4-position (cartesian) [Units of GM/c^2]
p = geod_K2.trajectory[1].T[-4:] # 4 momentum (spherical) [dimensionless]
leap = 1
max_ind = steps-10
# name output
kind = 'Nulllike' # or Timelike
name = metric +'_'+ kind +'_'+ str(steps) +'_'+ str(delta) +'_'+ str(position) +'_'+ str(momentum)
plotgeod_q(q, leap, max_ind, name, save=False)
plotgeod_q(q, leap, max_ind=151, name=name, save=False)
En este caso, debido a que el fotón viajaba en contra del sentido de rotación del BH, no pudo escapary terminó siendo capturado por el BH de Kerr
'Kerr_ 2_nulllike'[0]=='K'
True
## Plot both photons
plotgeod_q2(q_list=[geod_K.trajectory[1].T[:4], geod_K2.trajectory[1].T[:4]],
name='Kerr_ 2_nulllike_co_counter-rotating',
max_ind=[200, 151],
a=0.85,
leap=[1,1,1],
save=True)
1.526782687642637 0.473217312357363
Note: The ergosphere is the region where no observer can remain stationary, due to frame dragging
The ergosphere touches the outer horizon at the poles, but extends out to r=2 at the equator (just like Schild)
Also note that this is just a intuitive representation, these surfaces are not really spherical in the Euclidean sense.
3-test-particle simulations: Part I¶
- Calcular 2 geodésicas para el mismo atractor y las condiciones iniciales, pero variando
deltayomega,. - En este caso utilizamos un agujero negro de Kerr y geodésicas nulas (m=0)
# Condiciones iniciales
position = [20., np.pi / 2, 0.] # r, theta, phi (x=56, y=z=0)
momentum = [-1., 0., 2.7] # momento inicial en -r y phi
a = .8 # Spin = 0 for a Schwarzschild black hole
steps = [400, 500, 600] # Number of steps to be taken by the solver
delta = [1, .5, .2]
omega = [1., 0.1, 0.05]
order = [4, 4, 4]
# Calcular geodésicas
geod_list=[]
for i in range(3):
geod_A = Nulllike( # m=0
metric="Kerr",
metric_params=(a,),
position=position,
momentum=momentum,
steps=steps[i],
delta=delta[i],
omega=omega[i],
order=order[i],
suppress_warnings=False, #True,
return_cartesian=True # Obs: Momenta are dimensionless quantities, and are returned in Spherical Polar Coordinates.
)
geod_list.append(geod_A)
print(f"Sim {i} finished!")
# First warnings
# A: Numerical error has exceeded specified tolerance at step = 20.
# B: None
# C: None
Muchas de las simulaciones se caen rápidamente. Realizar las simulaciones de esta manera no es muy conveniente, ya que si se cae una las demás no pueden ejecutarse. Luego, se debe asegurar que la simulación es estable (dadas las condiciones iniciales y los parámetros de la simulación) y luego graficar las 3 juntas.
plotgeod_q2(q_list = [geod_list[i].trajectory[1].T[:4] for i in range(3)],
name='Kerr_3_photons_different_delta&omega',
max_ind=[23, 44, 116],
a=.8,
leap=[1,1,1],
save=False)
1.5999999999999999 0.40000000000000013
plotgeod_q2(q_list = [geod_list[i].trajectory[1].T[:4] for i in range(3)],
name='Kerr_3_photons_different_delta&omega',
max_ind=[23, 44, 117],
a=.8,
leap=[1,1,1],
save=False)
1.5999999999999999 0.40000000000000013
Notar que las geodésicas 2 y 3 no dieron wanrings, pero aún así tuvieron grandes problemas en las cercanías del agujero negro.
Se destaca que la partícula 3 pudo pasar de manera estable por la ergoesfera:
plotgeod_q(geod_list[-1].trajectory[1].T[:4], leap=1, max_ind=116, name='Kerr_Particle3_plotgeod_q', save=False)
plotgeod_q2(q_list = [geod_list[-1].trajectory[1].T[:4]],
name='Kerr_photon3_plotgeod_q2',
max_ind=[116],
a=.8,
leap=[1],
save=False)
1.5999999999999999 0.40000000000000013
Disminuir tolerancia: 1¶
## Caso 1: counter-rotating
# Condiciones iniciales
position = [20., np.pi / 2, 0.] # r, theta, phi (x=20, y=z=0)
momentum = [-.6, 0., -3.] # momento inicial hacia abajo izquierda
metric='Kerr'
a = 0.8 # Spin = 0 for a Schwarzschild black hole
steps = 500 # Number of steps to be taken by the solver
delta = 0.2
omega = 0.01
order = 4
atol = 1e-5
rtol = 1e-4
# Calcular geodésica
geod_B = Nulllike( # m=0
metric=metric,
metric_params=(a,),
position=position,
momentum=momentum,
steps=steps,
delta=delta,
omega=omega,
order=order,
atol=atol,
rtol=rtol,
suppress_warnings=False,
return_cartesian=True
)
# Utiliza fantasy por defecto al bajarle las tolerancias
/home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 183. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 184. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 185. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 186. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 187. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 188. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 189. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 190. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 191. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 192. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 193. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 194. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 195. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 196. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 197. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 198. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 199. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 200. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 201. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 202. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 203. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 204. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 205. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 206. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 207. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 208. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 209. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 210. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 211. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 212. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 213. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 214. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 215. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 216. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 217. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 218. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 219. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 220. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 221. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 222. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 223. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 224. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 225. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 226. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 227. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 228. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 229. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 230. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 231. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 232. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 233. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 234. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 235. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 236. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 237. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 238. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 239. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 240. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 241. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 242. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 243. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 244. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 245. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 246. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 247. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 248. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 249. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 250. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 251. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 252. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 253. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 254. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 255. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 256. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 257. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 258. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 259. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 260. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 261. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 262. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 263. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 264. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 265. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 266. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 267. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 268. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 269. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 270. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 271. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 272. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 273. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 274. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 275. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 276. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 277. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 278. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 279. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 280. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 281. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 282. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 283. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 284. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 285. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 286. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 287. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 288. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 289. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 290. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 291. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 292. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 293. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 294. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 295. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 296. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 297. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 298. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 299. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 300. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 301. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 302. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 303. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 304. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 305. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 306. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 307. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 308. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 309. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 310. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 311. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 312. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 313. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 314. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 315. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 316. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 317. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 318. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 319. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 320. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 321. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 322. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 323. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 324. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 325. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 326. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 327. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 328. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 329. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 330. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 331. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 332. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 333. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 334. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 335. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 336. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 337. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 338. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 339. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 340. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 341. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 342. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 343. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 344. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 345. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 346. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 347. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 348. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 349. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 350. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 351. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 352. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 353. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 354. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 355. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 356. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 357. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 358. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 359. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 360. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 361. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 362. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 363. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 364. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 365. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 366. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 367. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 368. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 369. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 370. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 371. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 372. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 373. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 374. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 375. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 376. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 377. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 378. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 379. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 380. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 381. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 382. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 383. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 384. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 385. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 386. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 387. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 388. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 389. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 390. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 391. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 392. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 393. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 394. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 395. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 396. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 397. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 398. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 399. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 400. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 401. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 402. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 403. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 404. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 405. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 406. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 407. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 408. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 409. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 410. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 411. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 412. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 413. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 414. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 415. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 416. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 417. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 418. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 419. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 420. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 421. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 422. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 423. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 424. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 425. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 426. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 427. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 428. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 429. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 430. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 431. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 432. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 433. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 434. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 435. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 436. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 437. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 438. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 439. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 440. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 441. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 442. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 443. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 444. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 445. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 446. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 447. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 448. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 449. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 450. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 451. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 452. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 453. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 454. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 455. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 456. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 457. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 458. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 459. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 460. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 461. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 462. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 463. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 464. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 465. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 466. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 467. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 468. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 469. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 470. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 471. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 472. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 473. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 474. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 475. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 476. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 477. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 478. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 479. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 480. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 481. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 482. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 483. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 484. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 485. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 486. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 487. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 488. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 489. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 490. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 491. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 492. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 493. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 494. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 495. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 496. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 497. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 498. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 499. warnings.warn( /home/jorge/miniconda3/envs/Einstein/lib/python3.13/site-packages/einsteinpy/integrators/fantasy.py:287: RuntimeWarning: Numerical error has exceeded specified tolerance at step = 500. warnings.warn(
plotgeod_q2([geod_B.trajectory[1].T[:4]],
name='Kerr_photon1_LowerRtol&Atol',
max_ind=[185],
a=.8,
leap=[1],
save=False)
1.5999999999999999 0.40000000000000013
## Caso 2: co-rotating
# Condiciones iniciales
position = [20., np.pi / 2, 0.] # r, theta, phi (x=20, y=z=0)
momentum = [-.6, 0., 3.] # momento inicial hacia arriba izquierda
metric='Kerr'
a = 0.8 # Spin = 0 for a Schwarzschild black hole
steps = 500 # Number of steps to be taken by the solver
delta = 0.08
omega = 0.01
order = 4
atol = 1e-6
rtol = 1e-5
# Calcular geodésica
geod_B = Nulllike( # m=0
metric=metric,
metric_params=(a,),
position=position,
momentum=momentum,
steps=steps,
delta=delta,
omega=omega,
order=order,
atol=atol,
rtol=rtol,
suppress_warnings=False,
return_cartesian=True
)
# No warnings!
plotgeod_q2([geod_B.trajectory[1].T[:4]],
name='Kerr_photon2_LowerRtol&Atol',
max_ind=[500],
a=.8,
leap=[1],
save=False)
1.5999999999999999 0.40000000000000013
Dado que disminuimos el delta, la simulación fue bastante estable y el integrador tuvo las condiciones necesarias para resolver de manera correcta la geodésica.
One last example...
# 3 posiciones iniciales bastante cercanas, mismo momento inicial
position = [[20., np.pi / 2, -.8*np.pi/4], [20., np.pi / 2, -1.2*np.pi/4], [20., np.pi / 2, -1.6*np.pi/4]]
momentum = [-.6, 0., 3.] # momento inicial hacia arriba izquierda
metric='Kerr'
a = 0.8 # Spin = 0 for a Schwarzschild black hole
steps = 650 # Number of steps to be taken by the solver
delta = 0.1
omega = 0.01
order = 4
atol = 1e-4
rtol = 1e-3
# 1st geodesic
geod_C1 = Nulllike( # m=0
metric=metric,
metric_params=(a,),
position=position[0],
momentum=momentum,
steps=steps,
delta=delta,
omega=omega,
order=order,
atol=atol,
rtol=rtol,
suppress_warnings=False,
return_cartesian=True
)
# No warnings | 2m 6.6s
# 2nd geodesic
geod_C2 = Nulllike( # m=0
metric=metric,
metric_params=(a,),
position=position[1],
momentum=momentum,
steps=steps,
delta=delta,
omega=omega,
order=order,
atol=atol,
rtol=rtol,
suppress_warnings=False,
return_cartesian=True
)
# 3rd geodesic
geod_C3 = Nulllike( # m=0
metric=metric,
metric_params=(a,),
position=position[2],
momentum=momentum,
steps=steps,
delta=delta,
omega=omega,
order=order,
atol=atol,
rtol=rtol,
suppress_warnings=False,
return_cartesian=True
)
plotgeod_q2(q_list=[geod_C1.trajectory[1].T[:4], geod_C2.trajectory[1].T[:4], geod_C3.trajectory[1].T[:4]],
name='Kerr_photon3_LowerRtol&Atol',
max_ind=[600, 600, 600],
a=.8,
leap=[1,1,1],
save=False)
1.5999999999999999 0.40000000000000013
def plotgeod_q2_ani(q_list, name, max_ind, a, leap=[1,1,1], save=False):
# Definir coordenadas
t_list = [q_list[i][0][:max_ind[i]:leap[i]] for i in range(len(q_list))]
x_list = [q_list[i][1][:max_ind[i]:leap[i]] for i in range(len(q_list))]
y_list = [q_list[i][2][:max_ind[i]:leap[i]] for i in range(len(q_list))]
#cmap_list = ['coolwarm', 'viridis', 'jet']
color_list = ['red', 'green', 'blue']
marker_list = ['1', 'd', '^']
#plt.figure(figsize=(14,5))
#plt.clf()
plt.plot(0, 0, "ko", label="BH") # point BH
for i in range(len(q_list)):
# Geodesics
plt.scatter(x_list[i], y_list[i], c=color_list[i], marker=marker_list[i],s=12, alpha=.7, label=f'Particle {1+i}')
#plt.colorbar(label=f"~Time | {i}") #too messy with 3 colorbars; for absorbed geodesics we can do withouth
# Event horizon [Update this to support ergosphere and other Kerr BH features]
## Schild BH (1 event horizon)
if name[0]=='S':
rS = 2.
xS = np.linspace(-rS,rS,40)
yS = np.sqrt(rS**2-xS**2)
plt.plot(xS,yS,'k--',xS,-yS, 'k--')
## Kerr BH (2 event horizons + 1 ergosphere) [Obs: not spherical (Euclidean sense), but S^2 topology]
elif name[0]=='K':
r_plus = 1 + np.sqrt(1-a**2)
r_minus= 1 - np.sqrt(1-a**2)
xK_p = np.linspace(-r_plus, r_plus, 30)
yK_p = np.sqrt(r_plus**2 - xK_p**2)
xK_m = np.linspace(-r_minus, r_minus, 30)
yK_m = np.sqrt(r_minus**2 - xK_m**2)
plt.plot(xK_p,yK_p,'k--', label='OH') # outer horizon
plt.plot(xK_p,-yK_p, 'k--')
plt.plot(xK_m,yK_m,'k--', alpha=.7, label='IH') # inner horizon
plt.plot(xK_m,-yK_m, 'k--', alpha=.7,)
#print(r_plus, r_minus)
# ergosphere [at the Equator, equal to Schild radius; independent of a]
rERG = 2.
xERG = np.linspace(-rERG,rERG,30)
yERG = np.sqrt(rERG**2-xERG**2)
plt.plot(xERG,yERG,'g--', label='ERG') #ergosphere
plt.plot(xERG,-yERG, 'g--',)
#if mark:
# plt.plot(x[-mark:], y[-mark:], 'k*', markersize=13)
#plt.colorbar(label="~Time")
plt.xlabel("x [GM/c^2]", fontsize=12.5)
plt.ylabel("y [GM/c^2]", fontsize=12.5)
plt.title(name, fontsize=12.5)
plt.legend(fontsize=12.5)
if save==True:
plt.savefig(name+'.png', dpi=400)
#%matplotlib notebook
ani.save("my_kerr_animation1.gif", fps=8, writer="pillow");
Animaciones...... ...
# Exportar imágenes [make gif somewhere else]
n=50
for i in range(1,n+1):
x = int(i/n * 640)
plotgeod_q2(q_list=[geod_C1.trajectory[1].T[:4], geod_C2.trajectory[1].T[:4], geod_C3.trajectory[1].T[:4]],
name=f'Kerr_3photons_ani_{i}',
max_ind=[x, x, x],
a=.8,
leap=[1,1,1],
save=True)
Disminuir tolerancia: 2¶
# 3 posiciones iniciales bastante cercanas, mismo momento inicial
position = [[20., np.pi / 2, -.8*np.pi/4], [28., np.pi / 2, -1.2*np.pi/4], [33., np.pi / 2, -1.6*np.pi/4]]
momentum = [[-.9, 0., 3.], [-.6, 0., 3.], [-.3, 0., 3.]] # momento inicial hacia arriba izquierda
metric='Kerr'
a = 0.8 # Spin = 0 for a Schwarzschild black hole
steps = 650 # Number of steps to be taken by the solver
delta = 0.1
omega = 0.01
order = 4
atol = 1e-4
rtol = 1e-3
# 1st geodesic
geod_C1 = Nulllike( # m=0
metric=metric,
metric_params=(a,),
position=position[0],
momentum=momentum[0],
steps=steps,
delta=delta,
omega=omega,
order=order,
atol=atol,
rtol=rtol,
suppress_warnings=False,
return_cartesian=True
)
# No warnings | 1m 54.9s
# 2nd geodesic
geod_C2 = Nulllike( # m=0
metric=metric,
metric_params=(a,),
position=position[1],
momentum=momentum[1],
steps=steps,
delta=delta,
omega=omega,
order=order,
atol=atol,
rtol=rtol,
suppress_warnings=False,
return_cartesian=True
)
# No Warnings | 1m 9.5s
# 3rd geodesic
geod_C3 = Nulllike( # m=0
metric=metric,
metric_params=(a,),
position=position[2],
momentum=momentum[2],
steps=steps,
delta=delta,
omega=omega,
order=order,
atol=atol,
rtol=rtol,
suppress_warnings=False,
return_cartesian=True
)
# No Warnings | 1m 54.8s
plotgeod_q2(q_list=[geod_C1.trajectory[1].T[:4], geod_C2.trajectory[1].T[:4], geod_C3.trajectory[1].T[:4]],
name='Kerr_photon3_LowerRtol&Atol_2nd',
max_ind=[648, 648, 648],
a=.8,
leap=[1,2,30],
save=True,
lims=[-15, 29, -16, 5])
1.5999999999999999 0.40000000000000013
geod_C1.trajectory[1].T[:4][0][-1] # ~tiempo final
np.float64(74.64622247950199)
geod_C2.trajectory[1].T[:4][0][-1]
np.float64(47.71590769222416)
geod_C3.trajectory[1].T[:4][0][-1]
np.float64(21.008649890179324)
Vemos que las partículas viajan durante intervalos de tiempo diferentes. Los parámetros steps y delta, no determinan la cantidad de tiempo que va a transcurrir, solamente fijan el valor máximo del parámetro afín y el espaciado sus valores.
Notar que dado que los momenta iniciales son diferentes, también lo serán las energías.
Even if the step size and number of steps are the same, geodesics advance through proper time (or an affine parameter) at different rates depending on their initial 4-velocity (or 4-momentum) and location in spacetime. That means coordinate time t evolves differently for each geodesic
# 3rd geodesic [more steps for the 3rd particle][optionally, we could use delta=1, since this photon is pretty far
# from the BH]
geod_C3 = Nulllike( # m=0
metric=metric,
metric_params=(a,),
position=position[2],
momentum=momentum[2],
steps=3*steps,
delta=delta,
omega=omega,
order=order,
atol=atol,
rtol=rtol,
suppress_warnings=False,
return_cartesian=True
)
geod_C3.trajectory[1].T[0][-1]
np.float64(180.06083193999572)
plotgeod_q2(q_list=[geod_C1.trajectory[1].T[:4], geod_C2.trajectory[1].T[:4], geod_C3.trajectory[1].T[:4]],
name='Kerr_photon3_LowerRtol&Atol_2nd',
max_ind=[648, 648, 1900],
a=.8,
leap=[1,2,30],
save=True,
lims=[-15, 29, -16, 5])
1.5999999999999999 0.40000000000000013