[yt-dev] Enzo frontend

Matthew Turk matthewturk at gmail.com
Mon Jan 27 10:55:39 PST 2014


On Mon, Jan 27, 2014 at 1:53 PM, Brian Crosby <crosby.bd at gmail.com> wrote:
> Hi yt dev,
>
> I’ve been working with the Enzo frontend for running yt inline during
> simulations, and have come across a strange problem that I can’t seem to
> sort out.  I ported a handful of functions in yt/frontends/enzo/io.py from
> the IOHandlerPackedHDF5 class to IOHandlerInMemory, and clearly messed
> something up in the _read_particle_fields function.  In particular,
> converting the mass from Enzo’s internal units (actually a density) with the
> line
>
> data *= g.dds.prod(dtype="f8”)
>
> (where g.dds.prod() gives the cell volume, a step that can be seen in Enzo’s
> code mass to actual mass conversion, see:
> https://enzo.readthedocs.org/en/latest/reference/EnzoParticleMass.html#enzoparticlemass).
>
> What’s problematic is that this is actually changing the particle mass in
> Enzo every time yt is called.  I’m testing this on a 128^3, DM only unigrid
> simulation, and this results in reducing the particle masses by a factor of
> 1/128^3 each time.  Simply removing this line, on the other hand, results in
> the particle masses being a factor of 128^3 too large.  I’m concerned that
> this calculation is actually modifying the Enzo particle masses (which I
> confirmed by checking the DD* and RD* outputs), I think that this conversion
> should only happen on the yt side, without pushing back to Enzo at this
> stage, but I’m not totally clear on how the Enzo/yt communication works.
> Does anyone have some suggestions about what would be the best course of
> action?  Am I simply misunderstanding the intended flow of communications
> between yt and Enzo when running yt inline, or did my errors in porting this
> function actually cause something more insidious to happen?

Ah, the inline frontend for enzo avoids copying data until it
absolutely has to.  So you're actually modifying, in place, the
original arrays from Enzo.

You can just do:

data = data * g.dds.prod(dtype="f8")

which should create a new array (out of place) and assign it to the
variable data.

-Matt

>
> Thanks,
> Brian
>
> _______________________________________________
> yt-dev mailing list
> yt-dev at lists.spacepope.org
> http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org
>



More information about the yt-dev mailing list