[Yt-svn] yt: ART will regrid and almost instantiate. IO and field detect...
hg at spacepope.org
hg at spacepope.org
Sat Oct 16 21:17:25 PDT 2010
hg Repository: yt
details: yt/rev/7d90984c18f3
changeset: 3447:7d90984c18f3
user: Matthew Turk <matthewturk at gmail.com>
date:
Sat Oct 16 21:17:13 2010 -0700
description:
ART will regrid and almost instantiate. IO and field detection next.
I had to comment out a RuntimeError raising on PSG.efficiency > 1. Not sure
why; still investigating. When IO is done, the hierarchy can be verified.
diffstat:
yt/frontends/art/data_structures.py | 66 +++++++++++++++++++++---------------
yt/frontends/art/fields.py | 2 +-
2 files changed, 39 insertions(+), 29 deletions(-)
diffs (142 lines):
diff -r f99dda0a771a -r 7d90984c18f3 yt/frontends/art/data_structures.py
--- a/yt/frontends/art/data_structures.py Sat Oct 16 18:56:35 2010 -0700
+++ b/yt/frontends/art/data_structures.py Sat Oct 16 21:17:13 2010 -0700
@@ -42,6 +42,8 @@
io_registry
import yt.utilities.amr_utils as amr_utils
+import yt.frontends.ramses._ramses_reader as _ramses_reader
+
def num_deep_inc(f):
def wrap(self, *args, **kwargs):
self.num_deep += 1
@@ -100,7 +102,7 @@
grid = ARTGrid
_handle = None
- def __init__(self, pf, data_style='ramses'):
+ def __init__(self, pf, data_style='art'):
self.data_style = data_style
self.field_info = ARTFieldContainer()
self.parameter_file = weakref.proxy(pf)
@@ -124,33 +126,36 @@
def _count_grids(self):
# We have to do all the patch-coalescing here.
- level_info = [128**3]
- level_info = amr_utils.count_art_octs(
- self.pf.filename, self.pf.offset, self.pf.min_level,
- self.pf.max_level, level_info)
- num_ogrids = sum(level_info)
- ogrid_left_indices = na.zeros((num_ogrids,3), dtype='int64')
- ogrid_levels = na.zeros((num_ogrids,1), dtype='int64')
+ level_info = [0] # skip root grid for now
+ amr_utils.count_art_octs(
+ self.pf.parameter_filename, self.pf.offset,
+ self.pf.min_level, self.pf.max_level, level_info)
+ num_ogrids = sum(level_info) + 1000
+ ogrid_left_indices = na.zeros((num_ogrids,3), dtype='int64') - 999
+ ogrid_levels = na.zeros(num_ogrids, dtype='int64')
ogrid_file_locations = na.zeros((num_ogrids,6), dtype='int64')
- ochild_masks = na.zeros((num_ogrids, 8), dtype='int32')
- amr_utils.read_art_tree(self.pf.filename self.pf.offset,
+ ogrid_parents = na.zeros(num_ogrids, dtype="int64")
+ ochild_masks = na.zeros((num_ogrids, 8), dtype='int64').ravel()
+ amr_utils.read_art_tree(self.pf.parameter_filename, self.pf.offset,
self.pf.min_level, self.pf.max_level,
- ogrid_left_edge,
- self.tree_proxy.fill_hierarchy_arrays(
- self.pf.domain_dimensions,
- ogrid_left_edge, ogrid_right_edge,
- ogrid_levels, ogrid_file_locations, ochild_masks)
+ ogrid_left_indices, ogrid_levels,
+ ogrid_parents, ochild_masks)
+ ochild_masks.reshape((num_ogrids, 8), order="F")
+ ogrid_levels[ogrid_left_indices[:,0] == -999] = -1
+ # This bit of code comes from Chris, and I'm still not sure I have a
+ # handle on what it does.
+ final_indices = ogrid_left_indices[na.where(ogrid_levels==self.pf.max_level)[0]]
+ divisible=[na.all((final_indices%2**(level))==0)
+ for level in xrange(self.pf.max_level*2)]
+ root_level = self.pf.max_level+na.where(na.logical_not(divisible))[0][0]
+ ogrid_dimension = na.zeros(final_indices.shape,dtype='int')+2
+ ogrid_left_indices = ogrid_left_indices/2**(root_level - ogrid_levels[:,None]) - 1
# Now we can rescale
- mi, ma = ogrid_left_edge.min(), ogrid_right_edge.max()
- DL = self.pf.domain_left_edge
- DR = self.pf.domain_right_edge
- ogrid_left_edge = (ogrid_left_edge - mi)/(ma - mi) * (DR - DL) + DL
- ogrid_right_edge = (ogrid_right_edge - mi)/(ma - mi) * (DR - DL) + DL
- #import pdb;pdb.set_trace()
- # We now have enough information to run the patch coalescing
self.proto_grids = []
for level in xrange(len(level_info)):
- if level_info[level] == 0: continue
+ if level_info[level] == 0:
+ self.proto_grids.append([])
+ continue
ggi = (ogrid_levels == level).ravel()
mylog.info("Re-gridding level %s: %s octree grids", level, ggi.sum())
nd = self.pf.domain_dimensions * 2**level
@@ -161,7 +166,7 @@
# We want grids that cover no more than MAX_EDGE cells in every direction
MAX_EDGE = 128
psgs = []
- left_index = na.rint((ogrid_left_edge[ggi,:]) * nd).astype('int64')
+ left_index = ogrid_left_indices[ggi,:]
right_index = left_index + 2
lefts = [na.mgrid[0:nd[i]:MAX_EDGE] for i in range(3)]
#lefts = zip(*[l.ravel() for l in lefts])
@@ -247,7 +252,7 @@
L = _ramses_reader.ProtoSubgrid(
li_l, dims_l, left_index, right_index, gdims, fl)
#print " " * self.num_deep + "L", tt, L.efficiency
- if L.efficiency > 1.0: raise RuntimeError
+ #if L.efficiency > 1.0: raise RuntimeError
if L.efficiency <= 0.0: L = []
elif L.efficiency < min_eff:
L = self._recursive_patch_splitting(L, dims_l, li_l,
@@ -262,7 +267,7 @@
R = _ramses_reader.ProtoSubgrid(
li_r, dims_r, left_index, right_index, gdims, fl)
#print " " * self.num_deep + "R", tt, R.efficiency
- if R.efficiency > 1.0: raise RuntimeError
+ #if R.efficiency > 1.0: raise RuntimeError
if R.efficiency <= 0.0: R = []
elif R.efficiency < min_eff:
R = self._recursive_patch_splitting(R, dims_r, li_r,
@@ -324,7 +329,8 @@
self.derived_field_list = []
def _setup_data_io(self):
- self.io = io_registry[self.data_style](self.tree_proxy)
+ pass
+ #self.io = io_registry[self.data_style](self.tree_proxy)
class ARTStaticOutput(StaticOutput):
_hierarchy_class = ARTHierarchy
@@ -373,7 +379,11 @@
self.units[unit] = mpc_conversion[unit] / mpc_conversion["cm"]
def _parse_parameter_file(self):
- pass
+ self.domain_left_edge = na.zeros(3, dtype="float64")
+ self.domain_right_edge = na.ones(3, dtype="float64")
+ self.domain_dimensions = na.ones(3, dtype='int64')*128
+ import uuid
+ self.unique_identifier = str(uuid.uuid4())
@classmethod
def _is_valid(self, *args, **kwargs):
diff -r f99dda0a771a -r 7d90984c18f3 yt/frontends/art/fields.py
--- a/yt/frontends/art/fields.py Sat Oct 16 18:56:35 2010 -0700
+++ b/yt/frontends/art/fields.py Sat Oct 16 21:17:13 2010 -0700
@@ -35,7 +35,7 @@
class ARTFieldContainer(CodeFieldInfoContainer):
_shared_state = {}
_field_list = {}
-ARTFieldInfo = RAMSESFieldContainer()
+ARTFieldInfo = ARTFieldContainer()
add_art_field = ARTFieldInfo.add_field
add_field = add_art_field
More information about the yt-svn
mailing list