So the issue is that you're combining particle fields, which are defined at
the location of your SPH particles, with fields that are defined on the
octree mesh.
data['Gas', 'InternalEnergy']
^ is a particle field defined at the locations of your SPH particles
(particles of type 'Gas').
data['gas', 'density']
^ is a mesh field defined at the cell centers of the octree mesh yt
constructs in memory. It's specifically generated an SPH smoothing
operation.
The reasons the shapes of the arrays you're getting back are different is
that the number of leaf octree cells is not the same as the number of Gas
particles.
I'm not sure if what you're trying to do is supposed to use the mesh
locations or the particle locations. The correct way to modify your script
would be different in the two cases.
On Wed, Aug 26, 2015 at 10:17 AM, Jared Coughlin wrote: Sorry about that! Here's the script: http://paste.yt-project.org/show/5842/ And the traceback: http://paste.yt-project.org/show/5843/ Thanks!
-Jared On Tue, Aug 25, 2015 at 7:41 PM, Nathan Goldbaum On Tuesday, August 25, 2015, Jared Coughlin Hello! I'm really sorry for the barrage of questions; hopefully this
will be the last one!
I now get the error: operands could not be broadcast together with
shapes (2072685,) (2153824,)
on line: fHI = (recomb * ne) / (gamma_HI + (gamma_c * ne)) I printed the shapes of all of those arrays, and this is what I get:
nH.shape
(16, 16, 16)
ne.shape
(16, 16, 16)
gamma_c.shape
(1,)
recomb.shape
(1,)
nH.shape
(2153824,)
ne.shape
(2153824,)
gamma_c.shape
(2072685,)
recomb.shape
(2072685,) Firstly, I'm a little confused as to why their dimensions change, but
what really matters are the bottom ones. I know how many gas particles are
in my gadget simulation: 2072685. All of the arrays were created from
either data["Gas", "InternalEnergy"] or data["gas", "density"], which
should, I would imagine, have the same dimensions: the number of gas
particles. I was just wondering if anyone had seen something like this
before? The function in question was posted to a pastebin in an earlier
email on this thread, and I have since made all of the arrays YTArrays, as
suggested above. Thanks!
-Jared Hey Jared, I looked above but can't seem to find the correct link for the script
you're using. Can you pastebin your updated script and the full error
tracrback you're seeing now? Nathan On Tue, Aug 25, 2015 at 5:58 PM, Jared Coughlin <
Jared.W.Coughlin.29@nd.edu> wrote: Thanks, I'll try that!
-Jared On Tue, Aug 25, 2015 at 5:55 PM, Andrew Myers Hi Jared, You probably don't want to loop over the entire array in pure python;
that could be very slow for large datasets. One thing you can do is use
slicing to select the elements of the array that meet your criterion: indices = data['gas','InternalEnergy'] <= 1e4
data['gas', 'InternalEnergy'][indices] = *something* that would set all the elements where the InternalEnergy field is less
than or equal to 1e4 to *something*. Usually you can express most
operations you'd want to do this way without explicitly looping over the
elements. -Andrew On Tue, Aug 25, 2015 at 2:44 PM, Jared Coughlin <
Jared.W.Coughlin.29@nd.edu> wrote: That seemed to have worked, thanks! I just have another quick question, if you wouldn't mind? In my
function to generate my new field, there's an if statement that looks at
the value of the temperature: if data['gas','InternalEnergy'] <= 1e4:
However, I get the error: "The truth value of an array with more than
one element is ambiguous. Use a.any() or a.all()." I wasn't sure how to
loop over the elements of the array to access a specific element, or if
that's even possible? Using a.any() or a.all() don't seem to fit the bill
for this particular problem, either. Thanks!
-Jared On Tue, Aug 25, 2015 at 3:19 PM, Nathan Goldbaum <
nathan12343@gmail.com> wrote: >
>
> On Tue, Aug 25, 2015 at 2:17 PM, Jared Coughlin <
> Jared.W.Coughlin.29@nd.edu> wrote:
>
>> Great, thanks! I tried that, and it gave me the error: "YTQuantity
>> instances must be scalars." I'm not sure what to do about that, since all
>> of these quantities depend on either temperature or density, both of which
>> are arrays. I tried looking at the doc page for YTQuantity, but I didn't
>> see anything that looked like it could solve this problem, though it's
>> possible I missed it.
>>
>
> You need to use YTArray instead. YTQuantity is a subclass of YTArray
> that only holds scalars. YTArray can hold arrays of data with units.
>
>
>> -Jared
>>
>> On Mon, Aug 24, 2015 at 8:13 PM, Nathan Goldbaum <
>> nathan12343@gmail.com> wrote:
>>
>>>
>>>
>>> On Monday, August 24, 2015, Cameron Hummels _______________________________________________
yt-users mailing list
yt-users@lists.spacepope.org
http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org _______________________________________________
yt-users mailing list
yt-users@lists.spacepope.org
http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org _______________________________________________
yt-users mailing list
yt-users@lists.spacepope.org
http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org _______________________________________________
yt-users mailing list
yt-users@lists.spacepope.org
http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org