Actually the more I look at this, the more I think it's probably quite easy
to turn this into a data selector itself, avoiding the need for a cut
region. Should be straightforward to add it to selection_routines and
selection_data_containers and have it work out of the box.
On Fri, Jan 16, 2015 at 6:20 PM, Matthew Turk <matthewturk(a)gmail.com> wrote:
On Wed, Jan 14, 2015 at 11:03 AM, Stuart Levy <salevy(a)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
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,
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
ds.cut_region(dd, "obj['z'] - (obj['x']**2 +
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 +
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