81 lines
2.5 KiB
Python
81 lines
2.5 KiB
Python
# coding: utf-8
|
|
|
|
import numpy as np
|
|
import h5py
|
|
from astropy import units as u
|
|
|
|
|
|
def load_fields_arepo(path):
|
|
"""
|
|
Parameters
|
|
----------
|
|
path : _type_
|
|
_description_
|
|
output : _type_
|
|
_description_
|
|
|
|
Returns
|
|
-------
|
|
dict
|
|
A dataset of cells in the following format:
|
|
gas:
|
|
position (Ngas, 3) [kpc], centered
|
|
volume (Ngas) [pc^3]
|
|
velocity (Ngas, 3) [km/s]
|
|
mass (Ngas) [Msun]
|
|
stars:
|
|
position (Nstar, 3) [kpc], centered
|
|
velocity (Nstar, 3) [km/s]
|
|
mass (Nstar) [Msun]
|
|
birth_time (Nstar) [Myr]
|
|
dm:
|
|
position (Ngas, 3) [kpc], centered
|
|
velocity (Ngas, 3) [km/s]
|
|
mass (Ngas) [Msun]
|
|
maps:
|
|
extent (xmin, xmax, ymin, ymax) Coordinates of the edges of the map, centered
|
|
gas_coldens (Nx, Ny) [Msun/pc^2], map of column density
|
|
"""
|
|
|
|
snap = h5py.File(path)
|
|
info = snap["Header"].attrs
|
|
gas = snap["PartType0"]
|
|
stars = snap["PartType4"]
|
|
time = info["Time"]
|
|
box_size = info["BoxSize"]
|
|
UnitLength_in_kpc = info["UnitLength_in_cm"] * u.cm.to(u.kpc)
|
|
UnitVelocity_in_km_per_s = info["UnitVelocity_in_cm_per_s"] * u.cm.to(u.km)
|
|
UnitTime_in_Myr = (
|
|
info["UnitLength_in_cm"] / info["UnitVelocity_in_cm_per_s"]
|
|
) * u.s.to(u.Myr)
|
|
UnitMass_in_Msun = info["UnitMass_in_g"] * u.g.to(u.Msun)
|
|
|
|
# Create dataset
|
|
data = {
|
|
"header": {"time": time * UnitTime_in_Myr,
|
|
"fluids": ["gas", "stars"],
|
|
"box_size": box_size * UnitLength_in_kpc },
|
|
"gas": {
|
|
"position": (
|
|
np.asarray(gas["CenterOfMass"]) - np.array([0.5, 0.5, 0.5]) * box_size
|
|
)
|
|
* UnitLength_in_kpc,
|
|
"volume": (np.asarray(gas["Masses"]) / np.asarray(gas["Density"]))
|
|
* UnitLength_in_kpc**3,
|
|
"velocity": np.asarray(gas["Velocities"]) * UnitVelocity_in_km_per_s,
|
|
"mass": np.asarray(gas["Masses"]) * UnitMass_in_Msun,
|
|
},
|
|
"stars": {
|
|
"position": (
|
|
np.asarray(stars["Coordinates"]) - np.array([0.5, 0.5, 0.5]) * box_size
|
|
)
|
|
* UnitLength_in_kpc,
|
|
"velocity": np.asarray(stars["Velocities"]) * UnitVelocity_in_km_per_s,
|
|
"mass": np.asarray(stars["Masses"]) * UnitMass_in_Msun,
|
|
"birth_time": np.asarray(stars["StellarFormationTime"]) * UnitTime_in_Myr,
|
|
},
|
|
}
|
|
snap.close()
|
|
return data
|
|
|