[Yt-dev] Ramses cell counting and hierarchy

Matthew Turk matthewturk at gmail.com
Tue Jun 7 12:52:57 PDT 2011


Hi Oliver and others,

I've spent a bit of time working on the Ramses reader.  In the test
cases I have, it's now going ~2.6x faster than it was this morning.
But it still takes a long time.  Right now the top routines are, all
in the ramses frontend directory:

_count_grids
recursive_patch_splitting
fill_hierarchy_arrays
count_zones

The last one, I had some questions about.  It counts up the number of
unique zones on each level, which is actually seeming to take a lot
longer than I think it ought need to.

I do this by iterating over all the RAMSES_tree objects, then over
each level in the tree, then over each cell and incrementing a counter
if cell.get_domain() == idomain.  The code looks something like this,
but keep in mind this is Cython:


       cdef np.ndarray[np.int64_t, ndim=1] cell_count
       cell_count = np.zeros(self.rsnap.m_header.levelmax + 1,
'int64')
       cdef int local_count = 0
       for idomain in range(1, self.rsnap.m_header.ncpu + 1):
           local_tree = new RAMSES_tree(deref(self.rsnap), idomain,
                                        self.rsnap.m_header.levelmax,
0)
           local_tree.read()
           for ilevel in range(local_tree.m_maxlevel + 1):
               local_count = 0
               local_level = &local_tree.m_AMR_levels[ilevel]
               grid_it = local_tree.begin(ilevel)
               grid_end = local_tree.end(ilevel)
               while grid_it != grid_end:
                   local_count += (grid_it.get_domain() == idomain)
                   grid_it.next()
               cell_count[ilevel] += local_count
           del local_tree

Ultimately, this takes up a LOT of time.  I was wondering if there was
a simpler way of figuring out, simply, how many cells are local to a
given domain and a given level.  All I need back is an array that
includes the *total* unique cells on every level, summed across
domains.

Any ideas?  (Also, I've gotten a 2.6 speedup; hoping for more later
today.  Then after the regridding is fast, I will attack IO.)

Thanks,

Matt



More information about the yt-dev mailing list