[yt-svn] commit/yt: ngoldbaum: Merged in galtay/yt-bugfix1 (pull request #1211)
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Tue Sep 23 12:12:16 PDT 2014
1 new commit in yt:
https://bitbucket.org/yt_analysis/yt/commits/030d707551f6/
Changeset: 030d707551f6
Branch: yt
User: ngoldbaum
Date: 2014-09-23 19:12:06+00:00
Summary: Merged in galtay/yt-bugfix1 (pull request #1211)
update to Gadget/OWLS/Eagle frontends
Affected #: 2 files
diff -r 5ad64a6cc689da8686018c5d10d68a9ca67f10d2 -r 030d707551f658a9af158a949356aad11c3a8988 yt/frontends/sph/api.py
--- a/yt/frontends/sph/api.py
+++ b/yt/frontends/sph/api.py
@@ -19,7 +19,8 @@
GadgetDataset, \
GadgetHDF5Dataset, \
TipsyDataset,\
- EagleNetworkDataset
+ EagleNetworkDataset, \
+ EagleDataset
from .io import \
IOHandlerOWLS, \
diff -r 5ad64a6cc689da8686018c5d10d68a9ca67f10d2 -r 030d707551f658a9af158a949356aad11c3a8988 yt/frontends/sph/data_structures.py
--- a/yt/frontends/sph/data_structures.py
+++ b/yt/frontends/sph/data_structures.py
@@ -204,12 +204,17 @@
self.file_count = hvals["NumFiles"]
def _set_code_unit_attributes(self):
- # Set a sane default for cosmological simulations.
- if self._unit_base is None and self.cosmological_simulation == 1:
- mylog.info("Assuming length units are in Mpc/h (comoving)")
- self._unit_base = dict(length = (1.0, "Mpccm/h"))
- # The other same defaults we will use from the standard Gadget
- # defaults.
+ # If no units passed in by user, set a sane default (Gadget-2 users guide).
+ if self._unit_base is None:
+ if self.cosmological_simulation == 1:
+ mylog.info("Assuming length units are in kpc/h (comoving)")
+ self._unit_base = dict(length = (1.0, "kpccm/h"))
+ else:
+ mylog.info("Assuming length units are in kpc (physical)")
+ self._unit_base = dict(length = (1.0, "kpc"))
+
+ # If units passed in by user, decide what to do about
+ # co-moving and factors of h
unit_base = self._unit_base or {}
if "length" in unit_base:
length_unit = unit_base["length"]
@@ -232,6 +237,7 @@
velocity_unit = (1e5, "cm/s")
velocity_unit = _fix_unit_ordering(velocity_unit)
self.velocity_unit = self.quan(velocity_unit[0], velocity_unit[1])
+
# We set hubble_constant = 1.0 for non-cosmology, so this is safe.
# Default to 1e10 Msun/h if mass is not specified.
if "mass" in unit_base:
@@ -278,8 +284,61 @@
# Compat reasons.
hvals["NumFiles"] = hvals["NumFilesPerSnapshot"]
hvals["Massarr"] = hvals["MassTable"]
+ handle.close()
return hvals
+ def _get_uvals(self):
+ handle = h5py.File(self.parameter_filename, mode="r")
+ uvals = {}
+ uvals.update((str(k), v) for k, v in handle["/Units"].attrs.items())
+ handle.close()
+ return uvals
+
+
+
+ def _set_owls_eagle(self):
+
+ self.dimensionality = 3
+ self.refine_by = 2
+ self.parameters["HydroMethod"] = "sph"
+ self.unique_identifier = \
+ int(os.stat(self.parameter_filename)[stat.ST_CTIME])
+
+ self._unit_base = self._get_uvals()
+ self._unit_base['cmcm'] = 1.0 / self._unit_base["UnitLength_in_cm"]
+
+ self.current_redshift = self.parameters["Redshift"]
+ self.omega_lambda = self.parameters["OmegaLambda"]
+ self.omega_matter = self.parameters["Omega0"]
+ self.hubble_constant = self.parameters["HubbleParam"]
+
+ if self.domain_left_edge is None:
+ self.domain_left_edge = np.zeros(3, "float64")
+ self.domain_right_edge = np.ones(3, "float64") * self.parameters["BoxSize"]
+
+ nz = 1 << self.over_refine_factor
+ self.domain_dimensions = np.ones(3, "int32") * nz
+
+ self.cosmological_simulation = 1
+ self.periodicity = (True, True, True)
+
+ prefix = os.path.abspath(self.parameter_filename.split(".", 1)[0])
+ suffix = self.parameter_filename.rsplit(".", 1)[-1]
+ self.filename_template = "%s.%%(num)i.%s" % (prefix, suffix)
+ self.file_count = self.parameters["NumFilesPerSnapshot"]
+
+
+ def _set_owls_eagle_units(self):
+
+ # note the contents of the HDF5 Units group are in _unit_base
+ # note the velocity stored on disk is sqrt(a) dx/dt
+ self.length_unit = self.quan( self._unit_base["UnitLength_in_cm"], 'cmcm/h' )
+ self.mass_unit = self.quan( self._unit_base["UnitMass_in_g"], 'g/h' )
+ self.velocity_unit = self.quan( self._unit_base["UnitVelocity_in_cm_per_s"], 'cm/s' )
+ self.time_unit = self.quan( self._unit_base["UnitTime_in_s"], 's/h' )
+
+
+
@classmethod
def _is_valid(self, *args, **kwargs):
try:
@@ -299,67 +358,100 @@
_time_readin = "Time_GYR"
+ def _parse_parameter_file(self):
- def _parse_parameter_file(self):
- handle = h5py.File(self.parameter_filename, mode="r")
- hvals = {}
- hvals.update((str(k), v) for k, v in handle["/Header"].attrs.items())
- hvals["NumFiles"] = hvals["NumFilesPerSnapshot"]
- hvals["Massarr"] = hvals["MassTable"]
+ # read values from header
+ hvals = self._get_hvals()
+ self.parameters = hvals
- self.dimensionality = 3
- self.refine_by = 2
- self.parameters["HydroMethod"] = "sph"
- self.unique_identifier = \
- int(os.stat(self.parameter_filename)[stat.ST_CTIME])
+ # set features common to OWLS and Eagle
+ self._set_owls_eagle()
- # Set standard values
+ # Set time from value in header
self.current_time = hvals[self._time_readin] * \
sec_conversion["Gyr"] * yt.units.s
- if self.domain_left_edge is None:
- self.domain_left_edge = np.zeros(3, "float64")
- self.domain_right_edge = np.ones(3, "float64") * hvals["BoxSize"]
- nz = 1 << self.over_refine_factor
- self.domain_dimensions = np.ones(3, "int32") * nz
- self.cosmological_simulation = 1
- self.periodicity = (True, True, True)
- self.current_redshift = hvals["Redshift"]
- self.omega_lambda = hvals["OmegaLambda"]
- self.omega_matter = hvals["Omega0"]
- self.hubble_constant = hvals["HubbleParam"]
- self.parameters = hvals
- prefix = os.path.abspath(self.parameter_filename.split(".", 1)[0])
- suffix = self.parameter_filename.rsplit(".", 1)[-1]
- self.filename_template = "%s.%%(num)i.%s" % (prefix, suffix)
- self.file_count = hvals["NumFilesPerSnapshot"]
- # To avoid having to open files twice
- self._unit_base = {}
- self._unit_base.update(
- (str(k), v) for k, v in handle["/Units"].attrs.items())
- # Comoving cm is given in the Units
- self._unit_base['cmcm'] = 1.0 / self._unit_base["UnitLength_in_cm"]
+ def _set_code_unit_attributes(self):
+ self._set_owls_eagle_units()
- handle.close()
@classmethod
def _is_valid(self, *args, **kwargs):
+ need_groups = ['Constants', 'Header', 'Parameters', 'Units']
+ veto_groups = ['SUBFIND',
+ 'PartType0/ChemistryAbundances',
+ 'PartType0/ChemicalAbundances',
+ 'RuntimePars', 'HashTable']
+ valid = True
try:
fileh = h5py.File(args[0], mode='r')
- if "Constants" in fileh["/"].keys() and \
- "Header" in fileh["/"].keys() and \
- "SUBFIND" not in fileh["/"].keys() and not\
- ("ChemistryAbundances" in fileh["PartType0"].keys()
- or "ChemicalAbundances" in fileh["PartType0"].keys()):
- fileh.close()
- return True
+ for ng in need_groups:
+ if ng not in fileh["/"]:
+ valid = False
+ for vg in veto_groups:
+ if vg in fileh["/"]:
+ valid = False
fileh.close()
except:
+ valid = False
pass
- return False
+ return valid
-class EagleNetworkDataset(OWLSDataset):
+
+class EagleDataset(GadgetHDF5Dataset):
+ _particle_mass_name = "Mass"
+ _field_info_class = OWLSFieldInfo
+ _time_readin_ = 'Time'
+
+ def _parse_parameter_file(self):
+
+ # read values from header
+ hvals = self._get_hvals()
+ self.parameters = hvals
+
+ # set features common to OWLS and Eagle
+ self._set_owls_eagle()
+
+ # Set time from analytic solution for flat LCDM universe
+ a = hvals['ExpansionFactor']
+ H0 = hvals['H(z)'] / hvals['E(z)']
+ a_eq = ( self.omega_matter / self.omega_lambda )**(1./3)
+ t1 = 2.0 / ( 3.0 * np.sqrt( self.omega_lambda ) )
+ t2 = (a/a_eq)**(3./2)
+ t3 = np.sqrt( 1.0 + (a/a_eq)**3 )
+ t = t1 * np.log( t2 + t3 ) / H0
+ self.current_time = t * yt.units.s
+
+
+ def _set_code_unit_attributes(self):
+ self._set_owls_eagle_units()
+
+
+ @classmethod
+ def _is_valid(self, *args, **kwargs):
+ need_groups = ['Config', 'Constants', 'HashTable', 'Header',
+ 'Parameters', 'RuntimePars', 'Units']
+ veto_groups = ['SUBFIND',
+ 'PartType0/ChemistryAbundances',
+ 'PartType0/ChemicalAbundances']
+ valid = True
+ try:
+ fileh = h5py.File(args[0], mode='r')
+ for ng in need_groups:
+ if ng not in fileh["/"]:
+ valid = False
+ for vg in veto_groups:
+ if vg in fileh["/"]:
+ valid = False
+ fileh.close()
+ except:
+ valid = False
+ pass
+ return valid
+
+
+class EagleNetworkDataset(EagleDataset):
_particle_mass_name = "Mass"
_field_info_class = EagleNetworkFieldInfo
_time_readin = 'Time'
Repository URL: https://bitbucket.org/yt_analysis/yt/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
More information about the yt-svn
mailing list