- 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;
- this subroutine does exactly the same as bnd_copy, i.e. copies domain
from a neighbor at the same level to the boundary of the current
block, but instead of passing the whola array U it passes only the
part of the domain which will update the boundary;
- separate the boundaries for different level differences between the
updated block and its neighbor in order to prepare this subroutine
for sending only minimum required subvolume of variables between
processors;
- this subroutine reads the number of processors and the maximum level
from the first restart file; these two parameters are required
before restoring the data for a job restart if we want to restart it
with a different number of processors or with a different maximum
level;