[Yt-svn] commit/yt: samskillman: Adding ability to start the kd-tree from the highest level of grids

Bitbucket commits-noreply at bitbucket.org
Wed Aug 31 18:27:00 PDT 2011


1 new changeset in yt:

http://bitbucket.org/yt_analysis/yt/changeset/f6ca7f967d8f/
changeset:   f6ca7f967d8f
branch:      yt
user:        samskillman
date:        2011-09-01 03:26:35
summary:     Adding ability to start the kd-tree from the highest level of grids
that still encompasses the requested region.  Also added a fix when
running in parallel and not having enough kd-tree nodes during image
composition.  Should now have much improved kd-tree build performance
for highly nested simulations when zoomed in.
affected #:  1 file (1.1 KB)

--- a/yt/utilities/amr_kdtree/amr_kdtree.py	Sun Aug 28 17:41:36 2011 -0600
+++ b/yt/utilities/amr_kdtree/amr_kdtree.py	Wed Aug 31 19:26:35 2011 -0600
@@ -290,15 +290,38 @@
             self.domain_left_edge = pf.domain_left_edge
         else:
             self.domain_left_edge = na.array(le)
+
         if re is None:
             self.domain_right_edge = pf.domain_right_edge
         else:
             self.domain_right_edge = na.array(re)
 
-        root_grids = pf.hierarchy.get_levels().next()
+        self.domain_left_edge = na.clip(self.domain_left_edge,pf.domain_left_edge, pf.domain_right_edge)
+        self.domain_right_edge = na.clip(self.domain_right_edge,pf.domain_left_edge, pf.domain_right_edge)
+
+        levels = pf.hierarchy.get_levels()
+        root_grids = levels.next()
+        covering_grids = root_grids
+        vol_needed = na.prod(self.domain_right_edge-self.domain_left_edge)
+
+        for i in range(self.pf.hierarchy.max_level):
+            print 'Examining Level %i' % i
+            root_l_data = na.clip(na.array([grid.LeftEdge for grid in root_grids]),self.domain_left_edge, self.domain_right_edge)
+            root_r_data = na.clip(na.array([grid.RightEdge for grid in root_grids]),self.domain_left_edge, self.domain_right_edge)
+            
+            vol = na.prod(root_r_data-root_l_data,axis=1).sum()
+            print vol, vol_needed
+            if vol >= vol_needed:
+                covering_grids = root_grids
+                root_grids = levels.next()
+            else:
+                break
+            
+        root_grids = covering_grids
+        
         rgdds = root_grids[0].dds
-        self.domain_left_edge = (self.domain_left_edge/rgdds).astype('int64')*rgdds
-        self.domain_right_edge = ((self.domain_right_edge/rgdds).astype('int64')+1)*rgdds
+        self.domain_left_edge = ((self.domain_left_edge)/rgdds).astype('int64')*rgdds
+        self.domain_right_edge = (((self.domain_right_edge)/rgdds).astype('int64')+1)*rgdds
 
         self.domain_left_edge = na.clip(self.domain_left_edge,pf.domain_left_edge, pf.domain_right_edge)
         self.domain_right_edge = na.clip(self.domain_right_edge,pf.domain_left_edge, pf.domain_right_edge)
@@ -1004,15 +1027,17 @@
         my_node.owner = 0
         path = na.binary_repr(anprocs+my_rank)
         for i in range(rounds):
-            my_node.left_child.owner = my_node.owner
-            my_node.right_child.owner = my_node.owner + 2**(rounds-(i+1))
-            if path[i+1] is '0': 
-                my_node = my_node.left_child
-                my_node_id = my_node.id
-            else:
-                my_node = my_node.right_child
-                my_node_id = my_node.id
-            
+            try:
+                my_node.left_child.owner = my_node.owner
+                my_node.right_child.owner = my_node.owner + 2**(rounds-(i+1))
+                if path[i+1] is '0': 
+                    my_node = my_node.left_child
+                    my_node_id = my_node.id
+                else:
+                    my_node = my_node.right_child
+                    my_node_id = my_node.id
+            except:
+                rounds = i-1
         for thisround in range(rounds,0,-1):
             print my_rank, 'my node', my_node_id
             parent = my_node.parent

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