Source code for yt.frontends.arepo.io

import numpy as np

from yt.frontends.gadget.api import IOHandlerGadgetHDF5
from yt.utilities.on_demand_imports import _h5py as h5py


[docs] class IOHandlerArepoHDF5(IOHandlerGadgetHDF5): _dataset_type = "arepo_hdf5" def _generate_smoothing_length(self, index): # This is handled below in _get_smoothing_length return def _get_smoothing_length(self, data_file, position_dtype, position_shape): ptype = self.ds._sph_ptypes[0] ind = int(ptype[-1]) si, ei = data_file.start, data_file.end with h5py.File(data_file.filename, mode="r") as f: pcount = f["/Header"].attrs["NumPart_ThisFile"][ind].astype("int64") pcount = np.clip(pcount - si, 0, ei - si) # Arepo cells do not have "smoothing lengths" by definition, so # we compute one here by finding the radius of the sphere # corresponding to the volume of the Voroni cell and multiplying # by a user-configurable smoothing factor. hsml = f[ptype]["Masses"][si:ei, ...] / f[ptype]["Density"][si:ei, ...] hsml *= 3.0 / (4.0 * np.pi) hsml **= 1.0 / 3.0 hsml *= self.ds.smoothing_factor dt = hsml.dtype.newbyteorder("N") # Native if position_dtype is not None and dt < position_dtype: dt = position_dtype return hsml.astype(dt)