[yt-users] Problems with fields

Cameron Hummels chummels at gmail.com
Wed Oct 2 16:06:53 PDT 2013


Interesting.  When I replace data["GridLevel"] with data.Level, it works in
cases where I'm using ValidateSpatial(0), but not in cases when
ValidateSpatial(1) is called.  Even in a simple test case this is true.  So
for instance this works:

def _testfield(field, data):
    level = data.Level
    return data.dds[0]*2.0**level
add_field("TestField", function=_testfield,
              validators=[ValidateSpatial(0)])


But this does not:

def _testfield(field, data):
    level = data.Level
    return data.dds[0]*2.0**level
add_field("TestField", function=_testfield,
              validators=[ValidateSpatial(1,["dx"])])

with the traceback pointing to line: "level = data.Level" stating that
AMRSmoothedCoveringGrid object has no attribute 'Level'.  This is weird
because the same dataset works for the previous field call so clearly the
AMRSmoothedCoveringGrid *does* have that attribute.

So I guess there is no way around this for 2D datasets, or at least, this
2D dataset?  I'm out of ideas here.


On Wed, Oct 2, 2013 at 3:38 PM, Matthew Turk <matthewturk at gmail.com> wrote:

> On Wed, Oct 2, 2013 at 6:28 PM, Matthew Turk <matthewturk at gmail.com>
> wrote:
> > On Wed, Oct 2, 2013 at 6:20 PM, Cameron Hummels <chummels at gmail.com>
> wrote:
> >> Hi Matt,
> >>
> >> Thanks for the message and suggestions.
> >>
> >>>
> >>> Yes -- you need to strip off the extra zones before returning a field
> >>> from a ValidateSpatial(N) where N > 0.  For instance, this means this
> >>> would be a bad definition:
> >>>
> >>> @derived_field(name = "MyField1", validators=[ValidateSpatial(1)])
> >>> def _some_field(field, data):
> >>>     return data["Density"]
> >>>
> >>> but this would be a good one:
> >>>
> >>> @derived_field(name = "MyField1", validators=[ValidateSpatial(1)])
> >>> def _some_field(field, data):
> >>>     return data["Density"][1:-1,1:-1,1:-1]
> >>>
> >>
> >> I agree that this makes sense, but I actually mostly copied the shear
> field
> >> definition from the VorticitySquared field definition in the code,
> which did
> >> not observe this rule.  In fact, neither does DivV.  These fields
> return a
> >> field which is [x+2][y+2][z+2] in shape, which I found odd, but that is
> why
> >> I left it as it was in my code.  Either way, when I make the correction
> to
> >> return a field of size [x][y][z], it doesn't seem to fix the problem,
> >> unfortunately.  The error seems to occur prior to the field being
> returned,
> >> so I think that it may be an independent problem.
> >
> > You're right, I was wrong -- the field needs to be Ngz*2 bigger in
> > each dimension.
> >
> >>
> >>>
> >>> That's why "ShearMach" doesn't work, because the field is incorrectly
> >>> sized when it is returned, and why the error shows up the same for the
> >>> next item.  I should note that what happens when your field definition
> >>> is wrapped in a ValidateSpatial is that *all* of the fields accessed
> >>> inside the field definition have the additional ghost zones.
> >>
> >>
> >> I don't understand this.  How is my entire field definition wrapped in a
> >> ValidateSpatial?  I only include ValidateSpatial in the validators when
> I
> >> add the field--it doesn't seem to me that it is wrapping the whole
> thing in
> >> any of my 3 field definitions, but maybe I'm just missing this.  In my
> >> ShearMach3, I simply have a list of separate validators for different
> >> fields, one ValidateSpatial with 1 ghost zone for the velocity fields,
> and
> >> one ValidateSpatial with 0 ghost zones for the dx and GridLevel fields.
>  I
> >> guess my use of whitespace makes it look like they are nested, but they
> are
> >> not.
> >
> > Nothing, besides "dx", "dy" and "dz", will have varying shape inside
> > the field definition.
> >
> > What ValidateSpatial *does* is receive how many ghost zones you need
> > as well as the fields you think you might want.  If you ask for a
> > field you do not enumerate in that list, it too will have N+2*NGZ in
> > its shape, but it will be generated a second time.  This is a hint to
> > yt so that it can consolidate IO, as generating ghost zones can be
> > expensive.  Supplying multiple ValidateSpatial arguments will not vary
> > the behavior depending on the field.
> >
> >>
> >>
> >>>
> >>> The "data" variable like has a .Level attribute as well, but I do not
> >>> think you should rely on it.
> >>>
> >> I'll look at this level attribute to see if this helps.
> >>
> >>
> >>>
> >>> That being said, the usage of 2D data for ghost zones is mostly
> >>> unexplored.  Do you have your data somewhere I can test on it?
> >>
> >>
> >> The dataset is up at
> http://www.astro.columbia.edu/~chummels/DD0100.tar.gz
> >> if you want to take a look at it.  It's small and a quick download.
> >>
> >
> > Thank you, I will take a look.
>
> The problem seems to be that the nested spatial fields -- which you
> are not responsible for, but is how yt generates "GridLevel" and "dx"
> -- are causing the issue.  Try using "data.level" and "data.dds".
>
> Incidentally, it seems to be a combination of the nested spatial
> fields and the 2D dataset.  In 3D, your definitions work for me.
>
> -Matt
>
> >
> > -Matt
> >
> >> Thanks for the help with this!
> >>
> >> Cameron
> >>
> >> --
> >> Cameron Hummels
> >> Postdoctoral Researcher
> >> Steward Observatory
> >> University of Arizona
> >> http://chummels.org
> >>
> >> _______________________________________________
> >> yt-users mailing list
> >> yt-users at lists.spacepope.org
> >> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
> >>
> _______________________________________________
> yt-users mailing list
> yt-users at lists.spacepope.org
> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>



-- 
Cameron Hummels
Postdoctoral Researcher
Steward Observatory
University of Arizona
http://chummels.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.spacepope.org/pipermail/yt-users-spacepope.org/attachments/20131002/9c94c011/attachment.html>


More information about the yt-users mailing list