[yt-users] cut_region: can I make an expression dimensionless?

Matthew Turk matthewturk at gmail.com
Fri Jan 16 16:20:02 PST 2015


On Wed, Jan 14, 2015 at 11:03 AM, Stuart Levy <salevy at illinois.edu> wrote:

> Using one of Sam's past e-mails to answer my own question, it at least
> syntactically works to use the '.uq' unit-quantity attribute of a YT object
> to get something that has the units of the object, so e.g. 0.78 *
> obj['x'].uq is 0.78 in x's length units.  So it actually seems to work to
> say:
>
>    cr = ds.cut_region( dd, ["obj['z']-(obj['x']**2 +
> obj['y']**2)/(2.0*obj['z'].uq) < 0.78*obj['z'].uq"])
>
> Neato!
>
>
> As it turns out, I'll look for another lower-level way to do this - with
> the above cut_region applied, 32GB of RAM isn't enough to process a single
> data field of about 512^3, and it takes several minutes of CPU time even to
> start.    But it's good to know that the above is possible.


Glad you kind of got it working ... this is kind of ridiculous that it
takes so much, though.  What I think could cut it dowen considerably is to
reduce the numebr of sequential numpy operations; right now it's computing
them and storing temporary arrays like crazy.  Unfortunately I don't know
how one might do this with the current setup of cut_region.

Perhaps one way would be to make a derived field that is each component,
and inside it do each operation inline, then apply the conditional there?


>
>
> On 1/14/15 10:26 AM, Stuart Levy wrote:
>
>> Hello yt people,
>>
>> I'm hoping to write a cut_region expression that (a) depends on position
>> and (b) does it in a nonlinear way - I'd like to do a sort of paraboloidal
>> cut, like
>>
>>     ds.cut_region(dd, "obj['z'] - (obj['x']**2 + obj['y']**2)/2.0 < 0.78")
>>
> er, correction - cut_region()'s 2nd arg is a [] list of strings rather
> than a string, so I'd tried
>
>
>           ds.cut_region(dd, ["obj['z'] - (obj['x']**2 + obj['y']**2)/2.0 <
> 0.78"])
>
>
>> But this runs afoul of the unit-checking - obj['z'] doesn't have the same
>> units as obj['x']**2.
>>
>> Somehow I either need to cast all the obj[] terms to be dimensionless
>> ("trust me, I promise it's right"), or else give dimensions of length to
>> the constants.   Should there be a way to do either one?
>>
>
> _______________________________________________
> yt-users mailing list
> yt-users at lists.spacepope.org
> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.spacepope.org/pipermail/yt-users-spacepope.org/attachments/20150116/86e76963/attachment.htm>


More information about the yt-users mailing list