[yt-dev] Question about the tree structure in yt 2.x

Matthew Turk matthewturk at gmail.com
Sun Feb 23 03:57:48 PST 2014


Hi Hsi-Yu,

Sorry for the delay in replying.

On Friday, February 21, 2014, <hyschive at ntu.edu.tw> wrote:

> Dear all,
>
> I'm a new user of yt and is trying to use it for analyzing our octree AMR
> data, which is similar to FLASH. We are stilling testing yt version 2.x,
> and currently we are able to create a slice image together with the
> underlying AMR grid distribution WITHOUT providing any parent-children
> relation between each grid. However, after we further set up the
> parent-children relation, the plot (e.g., the SlicePlot command) failed
> with the following error messages:
>
> ===============Error Message=======================
> =========================
>
> ValueError                                Traceback (most recent call last)
>
> <ipython-input-3-e98bfe3813b1> in <module>()
>
> ----> 1 p=SlicePlot(pf,2,"Density",center=(0.501,0.501,0.501))
>
>
>
> /work1/ftd/yt-x86_64/src/yt-hg/yt/visualization/plot_window.pyc in
> __init__(self, pf, axis, fields, center, width, origin)
>
>     805         slc = pf.h.slice(axis, center[axis], fields=fields)
>
>     806         print slc,bounds,origin
>
> --> 807         PWViewerMPL.__init__(self, slc, bounds, origin=origin)
>
>     808
>
>     809 class ProjectionPlot(PWViewerMPL):
>
>
>
> /work1/ftd/yt-x86_64/src/yt-hg/yt/visualization/plot_window.pyc in
> __init__(self, *args, **kwargs)
>
>     446                 self._field_transform[field] = linear_transform
>
>     447
>
> --> 448         if setup: self._setup_plots()
>
>     449
>
>     450     @invalidate_plot
>
>
>
> /work1/ftd/yt-x86_64/src/yt-hg/yt/visualization/plot_window.pyc in
> _setup_plots(self)
>
>     617             print self.plots[f].image,self.plots[f].cax
>
>     618             self.plots[f].cb = self.plots[f].figure.colorbar(
>
> --> 619                 self.plots[f].image, cax = self.plots[f].cax)
>
>     620
>
>     621             if self.oblique == False:
>
>
>
> /work1/ftd/yt-x86_64/lib/python2.7/site-packages/matplotlib/figure.pyc in
> colorbar(self, mappable, cax, ax, **kw)
>
>    1194                 cax, kw = cbar.make_axes(ax, **kw)
>
>    1195         cax.hold(True)
>
> -> 1196         cb = cbar.Colorbar(cax, mappable, **kw)
>
>    1197
>
>    1198         def on_changed(m):
>
>
>
> /work1/ftd/yt-x86_64/lib/python2.7/site-packages/matplotlib/colorbar.pyc
> in __init__(self, ax, mappable, **kw)
>
>     741                 kw['alpha'] = mappable.get_alpha()
>
>     742
>
> --> 743             ColorbarBase.__init__(self, ax, **kw)
>
>     744
>
>     745
>
>
>
> /work1/ftd/yt-x86_64/lib/python2.7/site-packages/matplotlib/colorbar.pyc
> in __init__(self, ax, cmap, norm, alpha, values, boundaries, orientation,
> extend, spacing, ticks, format, drawedges, filled)
>
>     256         # The rest is in a method so we can recalculate when clim
> changes.
>
>     257         self.config_axis()
>
> --> 258         self.draw_all()
>
>     259
>
>    260     def _patch_ax(self):
>
>
>
> /work1/ftd/yt-x86_64/lib/python2.7/site-packages/matplotlib/colorbar.pyc
> in draw_all(self)
>
>     270         and do all the drawing.
>
>     271         '''
>
> --> 272         self._process_values()
>
>     273         self._find_range()
>
>     274         X, Y = self._mesh()
>
>
>
> /work1/ftd/yt-x86_64/lib/python2.7/site-packages/matplotlib/colorbar.pyc
> in _process_values(self, b)
>
>     568                 self.norm.vmin = 0
>
>     569                 self.norm.vmax = 1
>
> --> 570             b = self.norm.inverse(self._uniform_y(self.cmap.N+1))
>
>     571             if self.extend in ('both', 'min'):
>
>     572                 b[0] = b[0] - 1
>
>
>
> /work1/ftd/yt-x86_64/lib/python2.7/site-packages/matplotlib/colors.pyc in
> inverse(self, value)
>
>     946         if cbook.iterable(value):
>
>     947             val = ma.asarray(value)
>
> --> 948             return vmin * ma.power((vmax/vmin), val)
>
>     949         else:
>
>     950             return vmin * pow((vmax/vmin), value)
>
>
>
> /work1/ftd/yt-x86_64/lib/python2.7/site-packages/numpy/ma/core.pyc in
> __mul__(self, other)
>
>    3640     def __mul__(self, other):
>
>    3641         "Multiply other by self, and return a new masked array."
>
> -> 3642         return multiply(self, other)
>
>   3643     #
>
>    3644     def __rmul__(self, other):
>
>
>
> /work1/ftd/yt-x86_64/lib/python2.7/site-packages/numpy/ma/core.pyc in
> __call__(self, a, b, *args, **kwargs)
>
>     934         # Case 1. : scalar
>
>     935         if not result.ndim:
>
> --> 936             if m:
>
>     937                 return masked
>
>     938             return result
>
>
>
> ValueError: The truth value of an array with more than one element is
> ambiguous. Use a.any() or a.all()
>
> ==========End of Error Message=======================
> ===========================
>
>
> So, my questions are as follows.
> 1. What is the necessary information for constructing the tree structure
> in yt?Currently the SlicePlot command failed only after we set up the
> "Parent" and "Children" variables for each grid in the function
> "_populate_grid_objects".
>

Typically the information is necessary just to check the masking of grid
objects; Parent is considerably less important for this than Children.

There is a diagnostic that can be run to examine the volume:

vol = 0.0
dv = pf.domain_width.prod(dtype="float64")
for g in pf.h.grids:
    vol += g.dds.prod(dtype="float64") * g.child_mask.sum()
print np.abs(vol - dv)/dv

What it looks like is happening, based on the error message, is that
somehow the total values in a slice are being set to the same thing
everywhere.  This diagnostic -- which should produce a value of 0.0 --
should help track that down.


>
> 2. Does the SlicePlot command need to know the parent-children relation of
> each grid? If no, why it will fail after we set up the relation?
>

It only needs to know the children of a grid, so that it can mask out
overlapping regions.


>
> 3. Will yt automatically construct the "neighbor" information for nearby
> grids at the same AMR refinement level? If no, how does it handle the
> operations requiring spatial derivative (e.g., curl and divergence)?
>

It will do so, yup.


>
> Any suggestion will be welcome, and thanks for the help in advance :)
>

I suspect something might be going wrong with the way the children pointers
are set up.  Can you show how you're constructing them?  It's possible that
there is an off-by-one or something that is creeping in.

-Matt


>
> Sincerely,
> Hsi-Yu
>
>
>
>
>
> _______________________________________________
> yt-dev mailing list
> yt-dev at lists.spacepope.org
> http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.spacepope.org/pipermail/yt-dev-spacepope.org/attachments/20140223/4c0a966d/attachment.htm>


More information about the yt-dev mailing list