[yt-svn] commit/yt: 2 new changesets

Bitbucket commits-noreply at bitbucket.org
Fri Mar 16 06:10:03 PDT 2012


2 new commits in yt:


https://bitbucket.org/yt_analysis/yt/changeset/c0638b392710/
changeset:   c0638b392710
branch:      yt
user:        MatthewTurk
date:        2012-03-01 18:04:43
summary:     Adding tolerance for edges in isocontour extraction.  Adding style keyword to
projections to do maximum intensity projections.
affected #:  4 files

diff -r 3cd9550438843786e965a2d7dcc6747b42b5021b -r c0638b392710a5ed0163f2d3f5bf9e92a6ea5110 yt/data_objects/data_containers.py
--- a/yt/data_objects/data_containers.py
+++ b/yt/data_objects/data_containers.py
@@ -1564,7 +1564,8 @@
     def __init__(self, axis, field, weight_field = None,
                  max_level = None, center = None, pf = None,
                  source=None, node_name = None, field_cuts = None,
-                 preload_style='level', serialize=True,**kwargs):
+                 preload_style='level', serialize=True,
+                 style = "integrate", **kwargs):
         """
         This is a data object corresponding to a line integral through the
         simulation domain.
@@ -1628,6 +1629,13 @@
         >>> print qproj["Density"]
         """
         AMR2DData.__init__(self, axis, field, pf, node_name = None, **kwargs)
+        self.proj_style = style
+        if style == "mip":
+            self.func = na.max
+        elif style == "integrate":
+            self.func = na.sum # for the future
+        else:
+            raise NotImplementedError(style)
         self.weight_field = weight_field
         self._field_cuts = field_cuts
         self.serialize = serialize
@@ -1635,7 +1643,6 @@
         if center is not None: self.set_field_parameter('center',center)
         self._node_name = node_name
         self._initialize_source(source)
-        self.func = na.sum # for the future
         self._grids = self.source._grids
         if max_level == None:
             max_level = self.hierarchy.max_level
@@ -1678,7 +1685,8 @@
     def _get_tree(self, nvals):
         xd = self.pf.domain_dimensions[x_dict[self.axis]]
         yd = self.pf.domain_dimensions[y_dict[self.axis]]
-        return QuadTree(na.array([xd,yd], dtype='int64'), nvals)
+        return QuadTree(na.array([xd,yd], dtype='int64'), nvals,
+                        style = self.proj_style)
 
     def _get_dls(self, grid, fields):
         # Place holder for a time when maybe we will not be doing just
@@ -1689,7 +1697,12 @@
             if field is None: continue
             dls.append(just_one(grid['d%s' % axis_names[self.axis]]))
             convs.append(self.pf.units[self.pf.field_info[field].projection_conversion])
-        return na.array(dls), na.array(convs)
+        dls = na.array(dls)
+        convs = na.array(convs)
+        if self.proj_style == "mip":
+            dls[:] = 1.0
+            convs[:] = 1.0
+        return dls, convs
 
     def get_data(self, fields = None):
         if fields is None: fields = ensure_list(self.fields)[:]
@@ -1723,7 +1736,13 @@
             mylog.debug("End of projecting level level %s, memory usage %0.3e", 
                         level, get_memory_usage()/1024.)
         # Note that this will briefly double RAM usage
-        tree = self.comm.merge_quadtree_buffers(tree)
+        if self.proj_style == "mip":
+            merge_style = -1
+        elif self.proj_style == "integrate":
+            merge_style = 1
+        else:
+            raise NotImplementedError
+        tree = self.comm.merge_quadtree_buffers(tree, merge_style=merge_style)
         coord_data, field_data, weight_data, dxs = [], [], [], []
         for level in range(0, self._max_level + 1):
             npos, nvals, nwvals = tree.get_all_from_level(level, False)
@@ -2613,7 +2632,7 @@
     def _extract_isocontours_from_grid(self, grid, field, value,
                                        sample_values = None):
         mask = self._get_cut_mask(grid) * grid.child_mask
-        vals = grid.get_vertex_centered_data(field)
+        vals = grid.get_vertex_centered_data(field, no_ghost = False)
         if sample_values is not None:
             svals = grid.get_vertex_centered_data(sample_values)
         else:


diff -r 3cd9550438843786e965a2d7dcc6747b42b5021b -r c0638b392710a5ed0163f2d3f5bf9e92a6ea5110 yt/utilities/_amr_utils/FixedInterpolator.c
--- a/yt/utilities/_amr_utils/FixedInterpolator.c
+++ b/yt/utilities/_amr_utils/FixedInterpolator.c
@@ -96,6 +96,11 @@
          {0,0,1}, {1,0,1}, {1,1,1}, {0,1,1}};
 
     npy_float64 mu = ((isovalue - v1) / (v2 - v1));
+
+    if (fabs(1.0 - isovalue/v1) < 0.000001) mu = 0.0;
+    if (fabs(1.0 - isovalue/v2) < 0.000001) mu = 1.0;
+    if (fabs(v1/v2) < 0.000001) mu = 0.0;
+
     vl[0] = x; vl[1] = y; vl[2] = z;
     for (i=0;i<3;i++)
         vl[i] += dds[i] * cverts[vind1][i]


diff -r 3cd9550438843786e965a2d7dcc6747b42b5021b -r c0638b392710a5ed0163f2d3f5bf9e92a6ea5110 yt/utilities/_amr_utils/QuadTree.pyx
--- a/yt/utilities/_amr_utils/QuadTree.pyx
+++ b/yt/utilities/_amr_utils/QuadTree.pyx
@@ -43,6 +43,10 @@
     np.int64_t pos[2]
     QuadTreeNode *children[2][2]
 
+ctypedef void QTN_combine(QuadTreeNode *self,
+        np.float64_t *val, np.float64_t weight_val,
+        int nvals)
+
 cdef void QTN_add_value(QuadTreeNode *self,
         np.float64_t *val, np.float64_t weight_val,
         int nvals):
@@ -51,6 +55,14 @@
         self.val[i] += val[i]
     self.weight_val += weight_val
 
+cdef void QTN_max_value(QuadTreeNode *self,
+        np.float64_t *val, np.float64_t weight_val,
+        int nvals):
+    cdef int i
+    for i in range(nvals):
+        self.val[i] = fmax(val[i], self.val[i])
+    self.weight_val = 1.0
+
 cdef void QTN_refine(QuadTreeNode *self, int nvals):
     cdef int i, j, i1, j1
     cdef np.int64_t npos[2]
@@ -101,9 +113,16 @@
     cdef np.int64_t top_grid_dims[2]
     cdef int merged
     cdef int num_cells
+    cdef QTN_combine *combine
 
     def __cinit__(self, np.ndarray[np.int64_t, ndim=1] top_grid_dims,
-                  int nvals):
+                  int nvals, style = "integrate"):
+        if style == "integrate":
+            self.combine = QTN_add_value
+        elif style == "mip":
+            self.combine = QTN_max_value
+        else:
+            raise NotImplementedError
         self.merged = 1
         cdef int i, j
         cdef QuadTreeNode *node
@@ -190,8 +209,12 @@
     @cython.wraparound(False)
     def frombuffer(self, np.ndarray[np.int32_t, ndim=1] refined,
                          np.ndarray[np.float64_t, ndim=2] values,
-                         np.ndarray[np.float64_t, ndim=1] wval):
-        self.merged = 1 # Just on the safe side
+                         np.ndarray[np.float64_t, ndim=1] wval,
+                         style):
+        if style == "mip" or style == -1:
+            self.merged = -1
+        elif style == "integrate" or style == 1:
+            self.merged = 1
         cdef int curpos = 0
         cdef QuadTreeNode *root
         self.num_cells = wval.shape[0]
@@ -241,7 +264,7 @@
             i = (pos[0] >= fac*(2*node.pos[0]+1))
             j = (pos[1] >= fac*(2*node.pos[1]+1))
             node = node.children[i][j]
-        QTN_add_value(node, val, weight_val, self.nvals)
+        self.combine(node, val, weight_val, self.nvals)
             
     @cython.cdivision(True)
     cdef QuadTreeNode *find_on_root_level(self, np.int64_t pos[2], int level):
@@ -335,12 +358,17 @@
                               np.float64_t *vtoadd,
                               np.float64_t wtoadd,
                               int cur_level):
-        cdef int i, j
+        cdef int i, j, n
         if cur_level == level:
             if node.children[0][0] != NULL: return 0
-            for i in range(self.nvals):
-                vdata[self.nvals * curpos + i] = node.val[i] + vtoadd[i]
-            wdata[curpos] = node.weight_val + wtoadd
+            if self.merged == -1:
+                for i in range(self.nvals):
+                    vdata[self.nvals * curpos + i] = fmax(node.val[i], vtoadd[i])
+                wdata[curpos] = 1.0
+            else:
+                for i in range(self.nvals):
+                    vdata[self.nvals * curpos + i] = node.val[i] + vtoadd[i]
+                wdata[curpos] = node.weight_val + wtoadd
             pdata[curpos * 2] = node.pos[0]
             pdata[curpos * 2 + 1] = node.pos[1]
             return 1
@@ -350,8 +378,14 @@
             for i in range(self.nvals):
                 vtoadd[i] += node.val[i]
             wtoadd += node.weight_val
+        elif self.merged == -1:
+            for i in range(self.nvals):
+                vtoadd[i] = node.val[i]
         for i in range(2):
             for j in range(2):
+                if self.merged == -1:
+                    for n in range(self.nvals):
+                        vtoadd[n] = node.val[n]
                 added += self.fill_from_level(node.children[i][j],
                         level, curpos + added, pdata, vdata, wdata,
                         vtoadd, wtoadd, cur_level + 1)
@@ -369,7 +403,8 @@
             free(self.root_nodes[i])
         free(self.root_nodes)
 
-cdef void QTN_merge_nodes(QuadTreeNode *n1, QuadTreeNode *n2, int nvals):
+cdef void QTN_merge_nodes(QuadTreeNode *n1, QuadTreeNode *n2, int nvals,
+                          QTN_combine *func):
     # We have four choices when merging nodes.
     # 1. If both nodes have no refinement, then we add values of n2 to n1.
     # 2. If both have refinement, we call QTN_merge_nodes on all four children.
@@ -378,13 +413,13 @@
     # 4. If n1 has refinement and n2 does not, we add the value of n2 to n1.
     cdef int i, j
 
-    QTN_add_value(n1, n2.val, n2.weight_val, nvals)
+    func(n1, n2.val, n2.weight_val, nvals)
     if n1.children[0][0] == n2.children[0][0] == NULL:
         pass
     elif n1.children[0][0] != NULL and n2.children[0][0] != NULL:
         for i in range(2):
             for j in range(2):
-                QTN_merge_nodes(n1.children[i][j], n2.children[i][j], nvals)
+                QTN_merge_nodes(n1.children[i][j], n2.children[i][j], nvals, func)
     elif n1.children[0][0] == NULL and n2.children[0][0] != NULL:
         for i in range(2):
             for j in range(2):
@@ -395,14 +430,24 @@
     else:
         raise RuntimeError
 
-def merge_quadtrees(QuadTree qt1, QuadTree qt2):
+def merge_quadtrees(QuadTree qt1, QuadTree qt2, style = 1):
     cdef int i, j
     qt1.num_cells = 0
+    cdef QTN_combine *func
+    if style == 1:
+        qt1.merged = 1
+        func = QTN_add_value
+    elif style == -1:
+        qt1.merged = -1
+        func = QTN_max_value
+    else:
+        raise NotImplementedError
+    if qt1.merged != 0 or qt2.merged != 0:
+        assert(qt1.merged == qt2.merged)
     for i in range(qt1.top_grid_dims[0]):
         for j in range(qt1.top_grid_dims[1]):
             QTN_merge_nodes(qt1.root_nodes[i][j],
                             qt2.root_nodes[i][j],
-                            qt1.nvals)
+                            qt1.nvals, func)
             qt1.num_cells += qt1.count_total_cells(
                                 qt1.root_nodes[i][j])
-    qt1.merged = 1


diff -r 3cd9550438843786e965a2d7dcc6747b42b5021b -r c0638b392710a5ed0163f2d3f5bf9e92a6ea5110 yt/utilities/parallel_tools/parallel_analysis_interface.py
--- a/yt/utilities/parallel_tools/parallel_analysis_interface.py
+++ b/yt/utilities/parallel_tools/parallel_analysis_interface.py
@@ -640,7 +640,7 @@
         return buf
 
     @parallel_passthrough
-    def merge_quadtree_buffers(self, qt):
+    def merge_quadtree_buffers(self, qt, merge_style):
         # This is a modified version of pairwise reduction from Lisandro Dalcin,
         # in the reductions demo of mpi4py
         size = self.comm.size
@@ -665,8 +665,8 @@
                     #print "RECEIVING FROM %02i on %02i" % (target, rank)
                     buf = self.recv_quadtree(target, tgd, args)
                     qto = QuadTree(tgd, args[2])
-                    qto.frombuffer(*buf)
-                    merge_quadtrees(qt, qto)
+                    qto.frombuffer(buf[0], buf[1], buf[2], merge_style)
+                    merge_quadtrees(qt, qto, style = merge_style)
                     del qto
                     #self.send_quadtree(target, qt, tgd, args)
             mask <<= 1
@@ -685,7 +685,7 @@
         self.refined = buf[0]
         if rank != 0:
             qt = QuadTree(tgd, args[2])
-            qt.frombuffer(*buf)
+            qt.frombuffer(buf[0], buf[1], buf[2], merge_style)
         return qt
 
 



https://bitbucket.org/yt_analysis/yt/changeset/66e0717137ff/
changeset:   66e0717137ff
branch:      yt
user:        MatthewTurk
date:        2012-03-16 14:09:37
summary:     Merging in MIP functionality for QuadProj
affected #:  4 files

diff -r 4a02157e1862064a97ccbb5ac842af4886c90cc1 -r 66e0717137fffcfeadc270e332cb475068554306 yt/data_objects/data_containers.py
--- a/yt/data_objects/data_containers.py
+++ b/yt/data_objects/data_containers.py
@@ -1564,7 +1564,8 @@
     def __init__(self, axis, field, weight_field = None,
                  max_level = None, center = None, pf = None,
                  source=None, node_name = None, field_cuts = None,
-                 preload_style='level', serialize=True,**kwargs):
+                 preload_style='level', serialize=True,
+                 style = "integrate", **kwargs):
         """
         This is a data object corresponding to a line integral through the
         simulation domain.
@@ -1628,6 +1629,13 @@
         >>> print qproj["Density"]
         """
         AMR2DData.__init__(self, axis, field, pf, node_name = None, **kwargs)
+        self.proj_style = style
+        if style == "mip":
+            self.func = na.max
+        elif style == "integrate":
+            self.func = na.sum # for the future
+        else:
+            raise NotImplementedError(style)
         self.weight_field = weight_field
         self._field_cuts = field_cuts
         self.serialize = serialize
@@ -1635,7 +1643,6 @@
         if center is not None: self.set_field_parameter('center',center)
         self._node_name = node_name
         self._initialize_source(source)
-        self.func = na.sum # for the future
         self._grids = self.source._grids
         if max_level == None:
             max_level = self.hierarchy.max_level
@@ -1678,7 +1685,8 @@
     def _get_tree(self, nvals):
         xd = self.pf.domain_dimensions[x_dict[self.axis]]
         yd = self.pf.domain_dimensions[y_dict[self.axis]]
-        return QuadTree(na.array([xd,yd], dtype='int64'), nvals)
+        return QuadTree(na.array([xd,yd], dtype='int64'), nvals,
+                        style = self.proj_style)
 
     def _get_dls(self, grid, fields):
         # Place holder for a time when maybe we will not be doing just
@@ -1689,7 +1697,12 @@
             if field is None: continue
             dls.append(just_one(grid['d%s' % axis_names[self.axis]]))
             convs.append(self.pf.units[self.pf.field_info[field].projection_conversion])
-        return na.array(dls), na.array(convs)
+        dls = na.array(dls)
+        convs = na.array(convs)
+        if self.proj_style == "mip":
+            dls[:] = 1.0
+            convs[:] = 1.0
+        return dls, convs
 
     def get_data(self, fields = None):
         if fields is None: fields = ensure_list(self.fields)[:]
@@ -1723,7 +1736,13 @@
             mylog.debug("End of projecting level level %s, memory usage %0.3e", 
                         level, get_memory_usage()/1024.)
         # Note that this will briefly double RAM usage
-        tree = self.comm.merge_quadtree_buffers(tree)
+        if self.proj_style == "mip":
+            merge_style = -1
+        elif self.proj_style == "integrate":
+            merge_style = 1
+        else:
+            raise NotImplementedError
+        tree = self.comm.merge_quadtree_buffers(tree, merge_style=merge_style)
         coord_data, field_data, weight_data, dxs = [], [], [], []
         for level in range(0, self._max_level + 1):
             npos, nvals, nwvals = tree.get_all_from_level(level, False)
@@ -2613,7 +2632,7 @@
     def _extract_isocontours_from_grid(self, grid, field, value,
                                        sample_values = None):
         mask = self._get_cut_mask(grid) * grid.child_mask
-        vals = grid.get_vertex_centered_data(field)
+        vals = grid.get_vertex_centered_data(field, no_ghost = False)
         if sample_values is not None:
             svals = grid.get_vertex_centered_data(sample_values)
         else:


diff -r 4a02157e1862064a97ccbb5ac842af4886c90cc1 -r 66e0717137fffcfeadc270e332cb475068554306 yt/utilities/_amr_utils/FixedInterpolator.c
--- a/yt/utilities/_amr_utils/FixedInterpolator.c
+++ b/yt/utilities/_amr_utils/FixedInterpolator.c
@@ -96,6 +96,11 @@
          {0,0,1}, {1,0,1}, {1,1,1}, {0,1,1}};
 
     npy_float64 mu = ((isovalue - v1) / (v2 - v1));
+
+    if (fabs(1.0 - isovalue/v1) < 0.000001) mu = 0.0;
+    if (fabs(1.0 - isovalue/v2) < 0.000001) mu = 1.0;
+    if (fabs(v1/v2) < 0.000001) mu = 0.0;
+
     vl[0] = x; vl[1] = y; vl[2] = z;
     for (i=0;i<3;i++)
         vl[i] += dds[i] * cverts[vind1][i]


diff -r 4a02157e1862064a97ccbb5ac842af4886c90cc1 -r 66e0717137fffcfeadc270e332cb475068554306 yt/utilities/_amr_utils/QuadTree.pyx
--- a/yt/utilities/_amr_utils/QuadTree.pyx
+++ b/yt/utilities/_amr_utils/QuadTree.pyx
@@ -43,6 +43,10 @@
     np.int64_t pos[2]
     QuadTreeNode *children[2][2]
 
+ctypedef void QTN_combine(QuadTreeNode *self,
+        np.float64_t *val, np.float64_t weight_val,
+        int nvals)
+
 cdef void QTN_add_value(QuadTreeNode *self,
         np.float64_t *val, np.float64_t weight_val,
         int nvals):
@@ -51,6 +55,14 @@
         self.val[i] += val[i]
     self.weight_val += weight_val
 
+cdef void QTN_max_value(QuadTreeNode *self,
+        np.float64_t *val, np.float64_t weight_val,
+        int nvals):
+    cdef int i
+    for i in range(nvals):
+        self.val[i] = fmax(val[i], self.val[i])
+    self.weight_val = 1.0
+
 cdef void QTN_refine(QuadTreeNode *self, int nvals):
     cdef int i, j, i1, j1
     cdef np.int64_t npos[2]
@@ -101,9 +113,16 @@
     cdef np.int64_t top_grid_dims[2]
     cdef int merged
     cdef int num_cells
+    cdef QTN_combine *combine
 
     def __cinit__(self, np.ndarray[np.int64_t, ndim=1] top_grid_dims,
-                  int nvals):
+                  int nvals, style = "integrate"):
+        if style == "integrate":
+            self.combine = QTN_add_value
+        elif style == "mip":
+            self.combine = QTN_max_value
+        else:
+            raise NotImplementedError
         self.merged = 1
         cdef int i, j
         cdef QuadTreeNode *node
@@ -190,8 +209,12 @@
     @cython.wraparound(False)
     def frombuffer(self, np.ndarray[np.int32_t, ndim=1] refined,
                          np.ndarray[np.float64_t, ndim=2] values,
-                         np.ndarray[np.float64_t, ndim=1] wval):
-        self.merged = 1 # Just on the safe side
+                         np.ndarray[np.float64_t, ndim=1] wval,
+                         style):
+        if style == "mip" or style == -1:
+            self.merged = -1
+        elif style == "integrate" or style == 1:
+            self.merged = 1
         cdef int curpos = 0
         cdef QuadTreeNode *root
         self.num_cells = wval.shape[0]
@@ -241,7 +264,7 @@
             i = (pos[0] >= fac*(2*node.pos[0]+1))
             j = (pos[1] >= fac*(2*node.pos[1]+1))
             node = node.children[i][j]
-        QTN_add_value(node, val, weight_val, self.nvals)
+        self.combine(node, val, weight_val, self.nvals)
             
     @cython.cdivision(True)
     cdef QuadTreeNode *find_on_root_level(self, np.int64_t pos[2], int level):
@@ -335,12 +358,17 @@
                               np.float64_t *vtoadd,
                               np.float64_t wtoadd,
                               int cur_level):
-        cdef int i, j
+        cdef int i, j, n
         if cur_level == level:
             if node.children[0][0] != NULL: return 0
-            for i in range(self.nvals):
-                vdata[self.nvals * curpos + i] = node.val[i] + vtoadd[i]
-            wdata[curpos] = node.weight_val + wtoadd
+            if self.merged == -1:
+                for i in range(self.nvals):
+                    vdata[self.nvals * curpos + i] = fmax(node.val[i], vtoadd[i])
+                wdata[curpos] = 1.0
+            else:
+                for i in range(self.nvals):
+                    vdata[self.nvals * curpos + i] = node.val[i] + vtoadd[i]
+                wdata[curpos] = node.weight_val + wtoadd
             pdata[curpos * 2] = node.pos[0]
             pdata[curpos * 2 + 1] = node.pos[1]
             return 1
@@ -350,8 +378,14 @@
             for i in range(self.nvals):
                 vtoadd[i] += node.val[i]
             wtoadd += node.weight_val
+        elif self.merged == -1:
+            for i in range(self.nvals):
+                vtoadd[i] = node.val[i]
         for i in range(2):
             for j in range(2):
+                if self.merged == -1:
+                    for n in range(self.nvals):
+                        vtoadd[n] = node.val[n]
                 added += self.fill_from_level(node.children[i][j],
                         level, curpos + added, pdata, vdata, wdata,
                         vtoadd, wtoadd, cur_level + 1)
@@ -369,7 +403,8 @@
             free(self.root_nodes[i])
         free(self.root_nodes)
 
-cdef void QTN_merge_nodes(QuadTreeNode *n1, QuadTreeNode *n2, int nvals):
+cdef void QTN_merge_nodes(QuadTreeNode *n1, QuadTreeNode *n2, int nvals,
+                          QTN_combine *func):
     # We have four choices when merging nodes.
     # 1. If both nodes have no refinement, then we add values of n2 to n1.
     # 2. If both have refinement, we call QTN_merge_nodes on all four children.
@@ -378,13 +413,13 @@
     # 4. If n1 has refinement and n2 does not, we add the value of n2 to n1.
     cdef int i, j
 
-    QTN_add_value(n1, n2.val, n2.weight_val, nvals)
+    func(n1, n2.val, n2.weight_val, nvals)
     if n1.children[0][0] == n2.children[0][0] == NULL:
         pass
     elif n1.children[0][0] != NULL and n2.children[0][0] != NULL:
         for i in range(2):
             for j in range(2):
-                QTN_merge_nodes(n1.children[i][j], n2.children[i][j], nvals)
+                QTN_merge_nodes(n1.children[i][j], n2.children[i][j], nvals, func)
     elif n1.children[0][0] == NULL and n2.children[0][0] != NULL:
         for i in range(2):
             for j in range(2):
@@ -395,14 +430,24 @@
     else:
         raise RuntimeError
 
-def merge_quadtrees(QuadTree qt1, QuadTree qt2):
+def merge_quadtrees(QuadTree qt1, QuadTree qt2, style = 1):
     cdef int i, j
     qt1.num_cells = 0
+    cdef QTN_combine *func
+    if style == 1:
+        qt1.merged = 1
+        func = QTN_add_value
+    elif style == -1:
+        qt1.merged = -1
+        func = QTN_max_value
+    else:
+        raise NotImplementedError
+    if qt1.merged != 0 or qt2.merged != 0:
+        assert(qt1.merged == qt2.merged)
     for i in range(qt1.top_grid_dims[0]):
         for j in range(qt1.top_grid_dims[1]):
             QTN_merge_nodes(qt1.root_nodes[i][j],
                             qt2.root_nodes[i][j],
-                            qt1.nvals)
+                            qt1.nvals, func)
             qt1.num_cells += qt1.count_total_cells(
                                 qt1.root_nodes[i][j])
-    qt1.merged = 1


diff -r 4a02157e1862064a97ccbb5ac842af4886c90cc1 -r 66e0717137fffcfeadc270e332cb475068554306 yt/utilities/parallel_tools/parallel_analysis_interface.py
--- a/yt/utilities/parallel_tools/parallel_analysis_interface.py
+++ b/yt/utilities/parallel_tools/parallel_analysis_interface.py
@@ -643,7 +643,7 @@
         return buf
 
     @parallel_passthrough
-    def merge_quadtree_buffers(self, qt):
+    def merge_quadtree_buffers(self, qt, merge_style):
         # This is a modified version of pairwise reduction from Lisandro Dalcin,
         # in the reductions demo of mpi4py
         size = self.comm.size
@@ -668,8 +668,8 @@
                     #print "RECEIVING FROM %02i on %02i" % (target, rank)
                     buf = self.recv_quadtree(target, tgd, args)
                     qto = QuadTree(tgd, args[2])
-                    qto.frombuffer(*buf)
-                    merge_quadtrees(qt, qto)
+                    qto.frombuffer(buf[0], buf[1], buf[2], merge_style)
+                    merge_quadtrees(qt, qto, style = merge_style)
                     del qto
                     #self.send_quadtree(target, qt, tgd, args)
             mask <<= 1
@@ -688,7 +688,7 @@
         self.refined = buf[0]
         if rank != 0:
             qt = QuadTree(tgd, args[2])
-            qt.frombuffer(*buf)
+            qt.frombuffer(buf[0], buf[1], buf[2], merge_style)
         return qt

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