Source code for yt.fields.tensor_fields
from functools import partial
# This is the metric for Minkowski spacetime in SR
[docs]
def metric(mu: int, nu: int):
# This assumes the -+++ signature
if (mu, nu) == (0, 0):
return -1
elif mu == nu:
return 1
else:
return 0
[docs]
def setup_stress_energy_ideal(registry, ftype="gas"):
ax = ("t",) + registry.ds.coordinates.axis_order
pc = registry.ds.units.physical_constants
inv_c2 = 1.0 / (pc.clight * pc.clight)
def _T(field, data, mu: int, nu: int):
Umu = data[ftype, f"four_velocity_{ax[mu]}"]
Unu = data[ftype, f"four_velocity_{ax[nu]}"]
p = data[ftype, "pressure"]
e = data[ftype, "thermal_energy_density"]
rho = data[ftype, "density"]
return (rho + (e + p) * inv_c2) * Umu * Unu + metric(mu, nu) * p
for mu in range(5):
for nu in range(5):
registry.add_field(
(ftype, f"T{mu}{nu}"),
sampling_type="local",
function=partial(_T, mu=mu, nu=nu),
units=registry.ds.unit_system["pressure"],
)