[yt-svn] commit/yt-3.0: MatthewTurk: Adding particle field offset reading and particle header reading to RAMSES
Bitbucket
commits-noreply at bitbucket.org
Tue Aug 14 08:11:49 PDT 2012
1 new commit in yt-3.0:
https://bitbucket.org/yt_analysis/yt-3.0/changeset/e0b36f6a8da2/
changeset: e0b36f6a8da2
branch: yt-3.0
user: MatthewTurk
date: 2012-08-14 17:11:35
summary: Adding particle field offset reading and particle header reading to RAMSES
affected #: 2 files
diff -r 57bed7b59fbadc6ec102fbd5a9ff4bb86268bb1e -r e0b36f6a8da207a2c179fa541a9193ec0cba5649 yt/frontends/ramses/data_structures.py
--- a/yt/frontends/ramses/data_structures.py
+++ b/yt/frontends/ramses/data_structures.py
@@ -68,6 +68,7 @@
for t in ['grav', 'hydro', 'part', 'amr']:
setattr(self, "%s_fn" % t, basename % t)
self._read_amr_header()
+ self._read_particle_header()
_hydro_offset = None
_level_count = None
@@ -106,6 +107,41 @@
self._level_count = level_count
return self._hydro_offset
+ def _read_particle_header(self):
+ f = open(self.part_fn, "rb")
+ hvals = {}
+ attrs = ( ('ncpu', 1, 'I'),
+ ('ndim', 1, 'I'),
+ ('npart', 1, 'I') )
+ hvals.update(fpu.read_attrs(f, attrs))
+ fpu.read_vector(f, 'I')
+
+ attrs = ( ('nstar_tot', 1, 'I'),
+ ('mstar_tot', 1, 'd'),
+ ('mstar_lost', 1, 'd'),
+ ('nsink', 1, 'I') )
+ hvals.update(fpu.read_attrs(f, attrs))
+ self.particle_header = hvals
+ self.local_particle_count = hvals['npart']
+ particle_fields = [
+ ("particle_position_x", "d"),
+ ("particle_position_y", "d"),
+ ("particle_position_z", "d"),
+ ("particle_velocity_x", "d"),
+ ("particle_velocity_y", "d"),
+ ("particle_velocity_z", "d"),
+ ("particle_mass", "d"),
+ ("particle_identifier", "I"),
+ ("particle_refinement_level", "I")]
+ if hvals["nstar_tot"] > 0:
+ particle_fields += [("particle_age", "d"),
+ ("particle_metallicity", "d")]
+ field_offsets = {particle_fields[0][0]: f.tell()}
+ for field, vtype in particle_fields[1:]:
+ fpu.skip(f, 1)
+ field_offsets[field] = f.tell()
+ self.particle_field_offsets = field_offsets
+
def _read_amr_header(self):
hvals = {}
f = open(self.amr_fn, "rb")
@@ -241,7 +277,7 @@
# Here we get a copy of the file, which we skip through and read the
# bits we want.
oct_handler = self.oct_handler
- all_fields = self.domain.pf.h.field_list
+ all_fields = self.domain.pf.h.fluid_field_list
fields = [f for ft, f in fields]
tr = {}
filled = pos = level_offset = 0
@@ -307,26 +343,12 @@
def _detect_fields(self):
# TODO: Add additional fields
- self.field_list = ( "Density", "x-velocity", "y-velocity",
+ self.fluid_field_list = ( "Density", "x-velocity", "y-velocity",
"z-velocity", "Pressure", "Metallicity" )
+ self.particle_field_list = tuple(
+ self.domains[0].particle_field_offsets.keys())
+ self.field_list = self.fluid_field_list + self.particle_field_list
- def _setup_field_list(self):
- if self.parameter_file.use_particles:
- # We know which particle fields will exist -- pending further
- # changes in the future.
- for field in art_particle_field_names:
- def external_wrapper(f):
- def _convert_function(data):
- return data.convert(f)
- return _convert_function
- cf = external_wrapper(field)
- # Note that we call add_field on the field_info directly. This
- # will allow the same field detection mechanism to work for 1D,
- # 2D and 3D fields.
- self.pf.field_info.add_field(field, NullFunc,
- convert_function=cf,
- take_log=False, particle_type=True)
-
def _setup_classes(self):
dd = self._get_data_reader_dict()
super(RAMSESGeometryHandler, self)._setup_classes(dd)
diff -r 57bed7b59fbadc6ec102fbd5a9ff4bb86268bb1e -r e0b36f6a8da207a2c179fa541a9193ec0cba5649 yt/frontends/ramses/fields.py
--- a/yt/frontends/ramses/fields.py
+++ b/yt/frontends/ramses/fields.py
@@ -25,6 +25,8 @@
from yt.data_objects.field_info_container import \
FieldInfoContainer, \
+ NullFunc, \
+ TranslationFunc, \
FieldInfo, \
ValidateParameter, \
ValidateDataField, \
@@ -68,3 +70,21 @@
f._convert_function = _convertVelocity
f.take_log = False
+known_ramses_particle_fields = [
+ "particle_position_x",
+ "particle_position_y",
+ "particle_position_z",
+ "particle_velocity_x",
+ "particle_velocity_y",
+ "particle_velocity_z",
+ "particle_mass",
+ "particle_identifier",
+ "particle_refinement_level",
+]
+
+for f in known_ramses_particle_fields:
+ if f not in RAMSESFieldInfo:
+ add_field(f, function=NullFunc, take_log=True,
+ validators = [ValidateDataField(f)],
+ particle_type = True)
+
Repository URL: https://bitbucket.org/yt_analysis/yt-3.0/
--
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