Fine Grained Output¶
When making significant changes to Enzo that have non-local impact, such as adding a new accretion
mechanism for sink particles or face centered magnetic fields, there are many
places to introduce errors. In order to examine the effect of changes at
specific points in the code, one can use
ExtraOutputs. This run time
parameter makes a call to
WriteAllData at various points in
For instance, putting:
ExtraOutput = 1 StopCycle = 2 MaximumRefinementLevel = 0
to be written, along with your regular outputs. With one level of refinement, six outputs will be written. The relation between output number and position is below. Up to 10 output points can be specified.
Unraveling what output gets written when can be a challenge. One technique is
to run with
-d, and use the following command:
egrep "^Level||ExtraOutput" output.log
on the output log, which will show what output gets called on which level, and a string indicating
at which point in
EvolveLevel it was called.
It should be noted that
ExtraOutputs is not written into parameter files on
data dumps, though it can be added to restart parameter files. This is to prevent absurd amounts of data being written to disk.
By design, this technique outputs many data dumps for each root grid timestep,
following the W cycle.
This has the added disadvantage of making the code slower, as disk access is
rarely the fastest part of any machine.
In the code, overhead is minimized by wrapping the full function signature in a macro. New calls can be added with:
EXTRA_OUTPUT_MACRO(42, "After My Special Purpose")
where, of course, 42 is replaced by an integer not used by another output, and the string represents the location in the code. It is often instructive to include this output mechanism in
EvolveHierarchy as well, though this has not been done in the current checkin.
Here’s a table of output number vs. position in
EvolveLevel. Please refer to the Enzo Flow Chart, Source Browser
to understand each entry. The non-continuity represents some outputs that will be introduced when
MHDCT is merged, but not relevant for pure hydro.
|1||Before time loop|
|2||After SolveHydroEquations grid loop|
|6||After the time loop|