[Yt-dev] AMR3D

Britton Smith brittonsmith at gmail.com
Thu May 5 07:50:33 PDT 2011


Hi Geoffrey,

I think from your email you are confused with how _get_cut_mask works.  If
you look at the _get_cut_mask in AMRSphereBase, the key is this line:

cm = ( (grid["RadiusCode"]<=self.radius) & grid.child_mask )

This is where the cells in the grid are evaluated to be part of the sphere
or not.  If you look at the definition of the field RadiusCode, it is just
the distance in code units of a cell from a center provided by the line:
center = data.get_field_parameter("center")
The first part of the line in _get_cut_mask:
grid["RadiusCode"]<=self.radius
 is using numpy functionality to create a boolean array that is the shape of
the grid with Trues for cells inside the sphere and Falses for cells
outside.

The second half of that:
grid.child_mask
is making sure that we only count cells in the child mask, meaning we don't
want cells that are covered by higher resolution grids.

Because the grid data is stored as numpy arrays, all the cells can be
evaluated at once instead of having to loop over them.  For example, try
this:

import numpy as na
my_array = na.arange(10)
mask1 = my_array < 8
mask2 = my_array >=2
print mask1 & mask2
print my_array[mask1 & mask2]

I hope this helps.

Britton

On Thu, May 5, 2011 at 5:31 AM, <gso at physics.ucsd.edu> wrote:

> Hi all,
> I've been trying to develop an ellipsoid container for YT to wrap around
> the particles from the halo profiler as an object.  I think I am stuck
> because I don't quite understand parts of the code.
>
> I'll try walk through sections of AMRSphereBase describing my
> understanding of the code.  I have the corresponding portion for the
> ellipsoid I wrote up at this URL to compare with the sphere:
> http://paste.enzotools.org/show/1611/
>
> So please correct my misunderstanding of each section
>
> in _get_list_of_grids(self, field = None):
> -This section is trying to get a list of root grid tiles that may have
> data within the sphere.
> - It determines the grids with find_sphere_grids().
> - It changes them to a list.
> - It sorts them by level then x y z.
> - It returns the list as an array.
>
> in _is_fully_enclosed(self, grid):
> -This section is to see if the grids have all corners inside the sphere.
> - It finds the absolute displacement of each component of the corner from
> center.
> - It finds the shortest path considering periodic BC.
> - It finds the distance in 3D of the corner from the center of sphere.
> - It returns true if all corners are within sphere, false if not.
>
> in _get_cut_mask(self, grid, field=None):
> I have a conceptual question here, what does cut mask mean? My impression
> from the code is that if the cell is part of the object it becomes part of
> the cut mask(cm=cutmask)?
> -This section is the place that determines if each individual cells within
> the possible grids is inside the sphere.  (I have a feeling I'm completely
> wrong on this point)
> - It returns True if the grid is fully enclosed, skip checking for child
> mask.
> - It check if grid is not the same type as FakeGridForParticles,
> GridChildMaskWrapper (which means it hasn't been cached yet) and if grid
> is already part of the cut mask, if so return the cut mask as is.
> - Check which of the cells in grids are part of the sphere as well as
> child mask and assign it to cut mask
> - Last, after cut mask is calculated, it check if it hasn't been cached
> yet, if not, cache it to self._cut_mask[grid.id]
> - Returns the cut mask
>
> To emulate what's done by calling "RadiusCode", at first I thought of
> trying to define another derived quantity call it "EllipseIn" and
> calculate the eqn of the ellipsoid (<1 in, >1 out) at another place, but
> in the end I thought I might as well just do the calculation on the spot.
> Unfortunately, I ran into some trouble with the dimension of the x,y,z.
>
> I am still kind of fuzzy on how _get_cut_mask iterates through the cells
> in the grid and flag them as part of the object.  It seem
> self._cut_mask=cm where cm are just a bunch of True and False won't give
> information on which cell is being considered.  That's why I was concerned
> that maybe this isn't the place sphere check for cells either.
>
> Any expert help on AMR3D is greatly appreciated.
>
> From
> G.S.
>
>
> _______________________________________________
> 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/20110505/b1e838d3/attachment.html>


More information about the yt-dev mailing list