On Wed, Jan 14, 2015 at 11:03 AM, Stuart Levy <email@example.com> 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"])
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,er, correction - cut_region()'s 2nd arg is a  list of strings rather than a string, so I'd tried
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")
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