- 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;
- a new module COORDS handles the mesh variables which needed to be
separated from the MESH module since they are used in PROBLEM module,
which is required by MESH module; this created a circular dependency;
by introducing a new COORDS module we removed that problem;
- now, if we want to restart a job and use more processors than we used
while creating restart files, all processors read and recreate meta
block structure, but only N previously used processors will read data
block; as soon as the job is restarted, we call redistribute_blocks()
in order to get equal number of data blocks on each processor;
- the new subroutine redistribute_blocks() calculates the new
distribution of blocks among all processors and move data blocks
which need to be moved to another processor;
- replace autobalancing in update_mesh() using the new subroutine
redistribute_blocks();
- in the binaries problem we have to reinitiate the velocity within
the satellite properly, taking into account not only the speed of
wind at the surface, but also setting the satellite's velocity due to
its orbital motion; this produces properly the bow shock in front of
the satellite, and the new time step is calculated correctly since it
includes the speed of the satellite;