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

Stuart Levy salevy at illinois.edu
Wed Jan 14 09:03:42 PST 2015


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.

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?




More information about the yt-users mailing list