<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">
Hi Matt, 
<div><br>
<div>
<blockquote type="cite">
<div><br>
</div>
<div>Thanks for writing!  I'm sorry I didn't get to this sooner; I had a lot going on this weekend.<br>
<br>
</div>
</blockquote>
<div><br>
</div>
<div>Of course, and you warned us.  Hope it's been a good busy.</div>
<div><br>
</div>
<blockquote type="cite">
<div>
<div><br>
</div>
<div>The documentation of code frontends for 2.x should be reasonably up to date, but there is not yet any documentation of code frontends for the 3.0 work, where things like object selection and so on have been completely reworked.  I recognize this as a deficiency,
 particularly as it's the time where other developers can and should start trying to use 3.0, so I will endeavor as time allows to document things.  Please don't hesitate to ask questions!</div>
</div>
</blockquote>
<div><br>
</div>
<div>Understandable, particularly when the interfaces may be in flux.  I didn't mean it as a criticism, but rather</div>
<div>a statement of fact.  As a first go, it might be useful to mark certain parts of the 2.x documentation as deprecated.</div>
<br>
<blockquote type="cite">
<div>
<div> </div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; ">
<div style="word-wrap:break-word">
<div><br>
</div>
<div>We currently are able to read parameters from artio and set a few fields and units.  This </div>
<div>development has produced the following questions:</div>
<div>
<div><br>
- Is there a list of the properties of StaticOutput that are required?  Each front-end has a slightly<br>
different list and it's not clear which ones are in current use or required (except when the code<br>
throws an exception on load) .  For now we're setting the following:<br>
<br>
dimensionality<br>
refine_by<br>
domain_dimensions<br>
domain_left_edge<br>
domain_right_edge<br>
min_level<br>
max_level<br>
current_time<br>
<br>
and in the case of cosmological simulations:<br>
cosmological_simulation<br>
omega_lambda<br>
omega_matter<br>
hubble_constant<br>
current_redshift<br>
</div>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>Yup, I believe most are needed.  max_level I think is used some places, min_level is probably not used much more at all (as in, allowing the default to be set by the base class should be okay) and I think the others are all enumerated in the wiki or the
 doc page about writing a new frontend.</div>
<div> </div>
</div>
</blockquote>
<blockquote type="cite">
<div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; ">
<div style="word-wrap:break-word"><br>
and <br>
parameters["initial_redshift']<br>
parameters["HydroMethod"]</div>
</blockquote>
<div><br>
</div>
<div>I would like to get rid of these.  The first I have no idea why is required (where did this error get thrown?) and the second is really a proxy for things like "How do I calculate thermal energy?" or "Do these values need to be center-differenced to get
 cell-centered quantities?"  I'd like to see places where they appear outside of yt/frontends identified and removed.  Both uses can be handled much more simply by derived fields.</div>
<div> </div>
</div>
</blockquote>
<div><br>
</div>
<div>I think initial_redshift was my guess at the proper name, given a comment somewhere in the code that CosmologicalInitialRedshift or something</div>
<div>like it was deprecated.  I agree pushing as much into the front-ends is ideal, even if those front-ends simply call up the class hierarchy.</div>
<br>
<blockquote type="cite">
<div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; ">
<div style="word-wrap:break-word">
<div><br>
</div>
<div>what about units?  time_units?  </div>
</div>
</blockquote>
<div><br>
</div>
<div>Casey's going to be working on this, but for now, putting units into the "units" dictionary would work fine.  I will be working with Casey to re-work how things like length units, code units for fields, and so on are accessed.</div>
<div> </div>
</div>
</blockquote>
<div><br>
</div>
<div>Okay.  If there's been any discussion on the list that I can use to get more up to date, let me know and I'll take</div>
<div>my catching-up offline.</div>
<br>
<blockquote type="cite">
<div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; ">
<div style="word-wrap:break-word">
<div><br>
</div>
<div><br>
- It looks like GeometryHandler has replaced AMRHierarchy as the preferred frontend interface?  Chombo <br>
now uses GridGeometryHandler rather than AMRHierarchy, for example.  How does that affect io.py, where </div>
<div>the online documentation (<a href="http://yt-project.org/doc/advanced/creating_frontend.html" target="_blank">http://yt-project.org/doc/advanced/creating_frontend.html</a>) describes Grid instances</div>
<div>being passed to methods in io.py.  What if we're using an OctreeGeometryHandler rather than a</div>
<div>GridGeometryHandler?</div>
</div>
</blockquote>
<div><br>
</div>
<div><br>
</div>
<div>Yes, GeometryHandler is now the replacement for the AMRHierarchy.  The RAMSES frontend shows how this is done, but what it comes down to is that IO is now handled by relatively flexible "chunks".</div>
<div><br>
</div>
<div>Chunks are designed to allow code specific frontends to define the best way to handle batching of data IO.  If you look in ramses's io.py and Enzo's io.py, you can see that the methods that need to be implemented are:</div>
<div><br>
</div>
<div>_read_particle_selection(self, chunks, selector, fields) (usually delegates, as in the case of Enzo, to a type-specific reader)</div>
<div>_read_fluid_selection(self, chunks, selector, fields, size)</div>
<div><br>
</div>
<div>These are the basic methods that are called by the geometry handler's functions _read_fluid_fields and _read_particle_fields.  The arguments look like:</div>
<div><br>
</div>
<div>chunks: list of YTDataChunk objects</div>
<div>selector: SelectorObjects (you can see the definition in yt/geometry/selection_routines.pxd) which can tell you which cells or particles to include in an object</div>
<div>fields: list of fields of the form (ftype, fname) where ftype is a string (for the case of multi-fluid simulations) and fname is the name of the fluid type.</div>
<div>size: the total (expected) number of cells that intersect, so that fields can be pre-allocated (to avoid memory fragmentation)</div>
<div><br>
</div>
<div>In the case of RAMSES, the chunks are RAMSESDomainSubsets, which contain information about fields.  For Enzo, they'll be objects that contain lists of grid objects as an attribute.</div>
<div> </div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; ">
<div style="word-wrap:break-word">
<div><br>
</div>
<div>
<div>- What would be the best way to start developing a customized geometry handler?  Where are the major entry</div>
<div>points, and what functions are required vs optional?  Is it possible to begin by writing something coarse that doesn't</div>
<div>implement any performance features like chunking or parallelism?  </div>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>I think the basic level would be a geometry handler that only implemented an "all" chunking system, which I do believe would work as of right now.  This would prevent parallelism at the moment, but there's also the possibility of simply arbitrarily subdividing
 for the other chunking systems -- which would also be a good first pass.  The only thing I suggest is raising a NotImplementedError for spatial chunking as of right now, as I'm still thinking about the best way to do this for Octree data, and once you've taken
 a look it would be useful to have your feedback as well.</div>
<div><br>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>Great, this is all very useful.  One issue is that spatial chunking is likely to be our preferred chunking method, given the on-disk</div>
<div>layout.  I'm hoping we can get something that functions as soon as possible, and use that to learn what what is working and what</div>
<div>needs refactoring for performance or flexibility.  Feel free to offload things that need to be implemented or need to be tested in </div>
<div>order to make that happen.  Sam seemed to think that the ramses reader was broken for one of the test examples, but he'll need </div>
<div>to be more specific and report to the list.</div>
<div><br>
</div>
<br>
<blockquote type="cite">
<div>
<div>As near as I can tell, the *absolute* minimum routines you need to implement are:</div>
<div><br>
</div>
<div> * _count_selection</div>
<div> * _identify_base_chunk</div>
<div> * _chunk_*</div>
<div><br>
</div>
<div>You'll also probably have to implement the different chunks.</div>
<div> </div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; ">
<div style="word-wrap:break-word">
<div>
<div><br>
</div>
<div><br>
</div>
<div>- We'd like to use the RAMSES and ART frontends as examples, since their data structures are very similar to our</div>
<div>own.  How current are those frontends in yt-3.0?  Are there any major pieces which are scheduled for deprecation</div>
<div>or refactoring that we should be aware of?  In RAMSES, for example, some field names are hard-coded in </div>
<div>RAMSESGeometryHandler._detect_fields.  Shouldn't this information be pulled from the fields interface?</div>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>Ah, the field hardcoding is because as near as I can tell, RAMSES doesn't have an enumerated list of fields anywhere on disk.  This is something I've been meaning to upgrade to allow specification, as this will be important for other irregular or non-self-describing
 formats like Gadget binary and NMSU-ART.  The RAMSES reader I do hope to improve spatial data and eventually -- but not in the first pass -- move to a generalized distributed Octree.  That will require much more thought, but it is on the docket for sometime
 after the first release of 3.0 goes out.</div>
<div><br>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>Right, that's been a big flaw with NMSU-ART and early distributed ART formats.  Luckily this is corrected with artio.</div>
<br>
<blockquote type="cite">
<div>
<div>The "ART" frontend (which either needs a better name or needs to be co-located with the new ART frontend, like how Enzo2.x and Enzo3.0 will be) has not been upgraded at all.  I have some scripts that mock this up, but Chris has been very busy lately and
 hasn't been able to synchronize with me.  The RAMSES frontend to the best of my knowledge is functional; I have tested it and it works, and I have also been working with Nick Moeckel to make sure that it meets his needs -- I have received the occasional email
 which has helped improve things like boundary conditions and so on.</div>
<div><br>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>I'm probably the only person on the planet who speaks all flavors of ART (that's certainly nothing to brag about).  If we're able </div>
<div>to get our version up and running, it should be possible to merge the two into one coherent interface that is able to auto-detect </div>
<div>code version, however, for now that's too daunting a task.  </div>
<div><br>
</div>
<div>We're really hesitant to write a regridding version of artio to support 2.4, but it depends on how alpha 3.0 ends up being.  If it</div>
<div>turns out to be the better choice, we can drop back to stable and catch up later.</div>
<div><br>
</div>
<div>Doug</div>
</div>
<br>
<div><br>
</div>
</div>
</body>
</html>