- two new parameters trun and tsav control how long the job can run;
the parameter trun, expressed in hours, determines the maximum
execution time and the parameter tsav, expressed in minutes, tells
when to terminate the job before the execution time exceeds trun;
- in some rare situations we want to restart a job with the maximum
refinement level decreased; this change implements this feature; the
blocks are read with the previous range of refinement levels, but
after the first mesh update all blocks which lay on levels higher
than maxlev are automatically derefined;
- the new parameter toplev stores the level of refinement larger or
equal to maxlev; this level cannot be set in the config.in, but is
determined during the initiation or restarting the job;
- several subroutines have been updated to use toplev instead of
maxlev;
- the files corresponding to the processors are read in a normal way,
however, the remaining files are read only on the last processor and
the data blocks stored there are appended to this processor; as soon
as the data block restoring finishes, the data blocks are
redistributed among all processors;
- move allocation of restarted data blocks from read_attributes_h5() to
read_datablocks_h5(); in this way we allocate data blocks only on the
processors which read the data block group;
- add a new subroutine read_datablock_dims_h5() which returns the
dimensions of variable arrays stored in the data block group;
- the improved 3rd order WENO reconstruction has been described in the
paper by Yamaleev & Carpenter, 2000, Journal of Computational
Physics, 228, 3025
- in the corners of prolongated boundaries we use constant
interpolation, but the remaining part of boundaries is still
prolongated using the linear interpolation; in this way we solve the
problem of 90 degree symmetry;
- the boundary update goes through levels and updates first from blocks
at the same levels, then restricts from higher level blocks, then in
the another round prolongates from blocks at lower levels, and
finally copies once again from blocks at the same level;
- when the uniform mesh is used, perform the boundary update (copy)
only once;
- when the adaptive mesh is used update boundaries between blocks at
the same levels once before and once after both prolongation and
restriction;
- boundary conditions for AMR are non-trivial; before and after
restrictions and prolongations we need to apply copying around all
blocks, even those on diagonals; only then we will assure the machine
precision of 90 and 180 degree rotation symmetry;
- all steps, copying, prolongation, and restriction, scan all blocks,
even those which do not need update; this can be probably improved by
introducing, for example, boundary update dependent on the refinement
level;
- the subroutine flux_rk2() updates one dimensional fluxes using the
2nd order Runge-Kutta method, and then calculates the averaged flux,
which is used to update the block variables;
- instead of calculating all fluxes at once in update_flux(), select
the direction as a subroutine argument and calculate only the flux
along this direction;
- directional fluxes are needed for the directional RK integration of
the numerical fluxes;
- update subroutines flux_euler(), flux_rk2(), and flux_rk3() to use
new update_flux() subroutine;