[Yt-dev] AMR3D

Matthew Turk matthewturk at gmail.com
Thu May 5 07:54:45 PDT 2011


Hi Geoffrey,

Thanks for the writeup.  An ellipsoidal region would be very useful.

On Thu, May 5, 2011 at 2: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.

>From reading your email and the code, I'm not really sure that this is
true.  ;-)  You seem to get most/all of it.

As a quick sidenote, when writing stuff like this, it's often helpful
to use pdb or IPython to drop yourself into the code to inspect it.
You can use either:

import pdb;pdb.set_trace()

or

insert_ipython() # a yt-specific command

to get more detailed looks at 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.

Nope, ALL grid tiles.

> - It determines the grids with find_sphere_grids().

Yup.

> - It changes them to a list.

Yes, but I can't remember why.

> - It sorts them by level then x y z.
> - It returns the list as an array.

Yes, this sounds right.  Sorting by level is not strictly necessary.

>
> 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.

Yes.

>
> 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

Sounds about right; Britton's email (which just showed up, but I'm
already mostly through mine! :) has more info about this.

>
> 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 think you made the right decision with this.  RadiusCode was a
convenience issue.  One could work with EllipsoidA, EllipsoidB,
EllipsoidC, but I don't think it's necessary.  (On that note, I would
suggest you manually ensure that A,B,C are in decreasing order of
value, to ensure your axes are correctly ordered.

>
> 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.

The actual *usage* of the cut masks is elsewhere; to define a new
datatype, we don't have to alter the underlying machinery of how
datatypes work.  You just need to implement the spec.

Good luck, and let us know if you run into other issues!

-Matt

>
> 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
>



More information about the yt-dev mailing list