[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