- 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;
- now the satellite changes positions and velocity accordind to Keplers
laws; correct Keplerian orbit has been implemented in
shape_binaries();
- correct initialization of the satellite in init_binaries();
- now a more efficient boundary prolongation works correctly both for
the uni- and multiprocessor runs;
- the only difference now, however, since we are using a constant
interpolation for the prolongation, is that the criterion for the
refinement does not oscilate so much, but keeps the block at higher
level until the fields are completely smooth; thus, the possibility
of using linear interpolation should be reinvestigated;
- the implemented method removes the necessity of repeating the
prolongated boundary update twice;
- this subroutine takes the input array and expands it to match the
size of the boundary of the current block; the expansion is done with
the constant interpolation;
- this subroutine is required to reduce the amount of data transfered
between processors;
- the new version reduces the data transfer between processors by a big
factor when we restrict neighbors data in order to update the current
block boundary; this commit implements this optimization for the
blocks belonging to different processors;
- this subroutines restricts the data from neighbor in order to update
the current block boundary; this function does the same as
bnd_rest(), but passes only the subdomain which is used for
restriction;