[Yt-svn] yt: Some fixes for multi-domain support, which is not yet working
hg at spacepope.org
hg at spacepope.org
Tue Aug 10 21:18:01 PDT 2010
hg Repository: yt
details: yt/rev/64ee81fb9b62
changeset: 1943:64ee81fb9b62
user: Matthew Turk <matthewturk at gmail.com>
date:
Tue Aug 10 21:17:57 2010 -0700
description:
Some fixes for multi-domain support, which is not yet working
diffstat:
yt/lagos/HierarchyType.py | 9 +++++++--
yt/lagos/OutputTypes.py | 2 +-
yt/ramses_reader.pyx | 15 +++++++++++++--
3 files changed, 21 insertions(+), 5 deletions(-)
diffs (104 lines):
diff -r 9278bfc82987 -r 64ee81fb9b62 yt/lagos/HierarchyType.py
--- a/yt/lagos/HierarchyType.py Tue Aug 10 16:10:11 2010 -0700
+++ b/yt/lagos/HierarchyType.py Tue Aug 10 21:17:57 2010 -0700
@@ -1662,20 +1662,24 @@
ogrid_file_locations = na.zeros((num_ogrids,6), dtype='int64')
ochild_masks = na.zeros((num_ogrids, 8), dtype='int32')
self.tree_proxy.fill_hierarchy_arrays(
+ self.pf["TopGridDimensions"],
ogrid_left_edge, ogrid_right_edge,
ogrid_levels, ogrid_file_locations, ochild_masks)
+ 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
ggi = (ogrid_levels == level).ravel()
- left_index = na.rint((ogrid_left_edge[ggi,:]) * (2.0**(level+1))).astype('int64')
+ mylog.info("Re-gridding level %s: %s octree grids", level, ggi.sum())
+ nd = self.pf["TopGridDimensions"] * 2**level
+ left_index = na.rint((ogrid_left_edge[ggi,:]) * nd).astype('int64')
right_index = left_index + 2
dims = na.ones((ggi.sum(), 3), dtype='int64') * 2
fl = ogrid_file_locations[ggi,:]
# Now our initial protosubgrid
initial_left = na.zeros(3, dtype='int64')
- idims = na.ones(3, dtype='int64') * (2**(level+1))
+ idims = na.ones(3, dtype='int64') * nd
#if level == 6: raise RuntimeError
psg = ramses_reader.ProtoSubgrid(initial_left, idims,
left_index, right_index, dims, fl)
@@ -1683,6 +1687,7 @@
psg, idims, initial_left,
left_index, right_index, dims, fl))
sums = na.zeros(3, dtype='int64')
+ mylog.info("Final grid count: %s", len(self.proto_grids[level]))
if len(self.proto_grids[level]) == 1: continue
for g in self.proto_grids[level]:
sums += [s.sum() for s in g.sigs]
diff -r 9278bfc82987 -r 64ee81fb9b62 yt/lagos/OutputTypes.py
--- a/yt/lagos/OutputTypes.py Tue Aug 10 16:10:11 2010 -0700
+++ b/yt/lagos/OutputTypes.py Tue Aug 10 21:17:57 2010 -0700
@@ -978,7 +978,7 @@
self.parameters["DomainRightEdge"] = na.ones(3, dtype='float64') \
* rheader['boxlen']
self.parameters["DomainLeftEdge"] = na.zeros(3, dtype='float64')
- self.parameters["TopGridDimensions"] = na.zeros(3, dtype='int64') + 2
+ self.parameters["TopGridDimensions"] = rheader["nx"]
@classmethod
def _is_valid(self, *args, **kwargs):
diff -r 9278bfc82987 -r 64ee81fb9b62 yt/ramses_reader.pyx
--- a/yt/ramses_reader.pyx Tue Aug 10 16:10:11 2010 -0700
+++ b/yt/ramses_reader.pyx Tue Aug 10 21:17:57 2010 -0700
@@ -403,12 +403,12 @@
local_hydro_data = new RAMSES_hydro_data(deref(local_tree))
self.hydro_datas[idomain - 1] = <RAMSES_hydro_data **>\
malloc(sizeof(RAMSES_hydro_data*) * local_hydro_data.m_nvars)
- del local_hydro_data
for ii in range(local_hydro_data.m_nvars):
self.hydro_datas[idomain - 1][ii] = \
new RAMSES_hydro_data(deref(local_tree))
self.trees[idomain - 1] = local_tree
# We do not delete anything
+ if idomain < self.rsnap.m_header.ncpu: del local_hydro_data
# Only once, we read all the field names
self.nfields = local_hydro_data.m_nvars
cdef string *field_name
@@ -422,6 +422,7 @@
self.field_ind[self.field_names[-1]] = ifield
self.loaded[ifield] = 0
# This all needs to be cleaned up in the deallocator
+ del local_hydro_data
def __dealloc__(self):
cdef int idomain, ifield
@@ -504,9 +505,18 @@
header_info["unit_l"] = self.rsnap.m_header.unit_l
header_info["unit_d"] = self.rsnap.m_header.unit_d
header_info["unit_t"] = self.rsnap.m_header.unit_t
+
+ # Now we grab some from the trees
+ cdef np.ndarray[np.int32_t, ndim=1] top_grid_dims = np.zeros(3, "int32")
+ cdef int i
+ for i in range(3):
+ top_grid_dims[i] = self.trees[0].m_header.nx[i]
+ header_info["nx"] = top_grid_dims
+
return header_info
def fill_hierarchy_arrays(self,
+ np.ndarray[np.int32_t, ndim=1] top_grid_dims,
np.ndarray[np.float64_t, ndim=2] left_edges,
np.ndarray[np.float64_t, ndim=2] right_edges,
np.ndarray[np.int32_t, ndim=2] grid_levels,
@@ -540,7 +550,8 @@
for ilevel in range(local_tree.m_maxlevel + 1):
# this gets overwritten for every domain, which is okay
level_cell_counts[ilevel] = grid_ind
- grid_half_width = self.rsnap.m_header.boxlen / (2**(ilevel + 1))
+ grid_half_width = self.rsnap.m_header.boxlen / \
+ (2**(ilevel) * top_grid_dims[0])
grid_it = local_tree.begin(ilevel)
grid_end = local_tree.end(ilevel)
while grid_it != grid_end:
More information about the yt-svn
mailing list