2893 Commits

Author SHA1 Message Date
Grzegorz Kowal
226c2a3fe9 Move variable indices to new module 'variables'.
VARIABLES

 - create new module 'variables' which stores references to variable
   indices; we gonna store dofferent objects related to variables in
   this module;
2010-12-01 09:25:30 -02:00
Grzegorz Kowal
c72b862db4 Rename variable nblocks to mblocks.
BLOCK STRUCTURE

 - the global variable nblocks tells how many metablocks are allocated,
   thus its name is changed to mblocks;
 - remove unnecessary checking of the list allocation;
2010-12-01 09:23:03 -02:00
Grzegorz Kowal
c2e6333aab Simplify subroutine bnd_copy().
BOUNDARY CONDITIONS

 - subroutine bnd_copy() has been rewritten in order to simplify it and
   reduce the number of local variables;
2010-10-13 17:21:43 -03:00
Grzegorz Kowal
3572c44064 Rewrite subroutine bnd_rest();
BOUNDARY CONDITIONS

 - the subroutine bnd_rest() has been rewritten in order to make if more
   clear in understanding and remove necessity of using external
   interpolating subroutines and allocatable arrays;
2010-10-13 17:16:18 -03:00
Grzegorz Kowal
787a2e816c Rewrite the subroutine to update variable boundaries.
BOUNDARY CONDITIONS

 - the main subroutine to update the variable boundaries has been
   rewritten in order to update the boundaries in a proper order;
 - first we update the specific boundaries of blocks which don't have
   neighbors;
 - then we update boundaries between blocks at the same levels; this
   assures that the boundaries of the same levels are not contaminated
   by interpolation from other levels;
 - the last step is updating boundaries between blocks at different
   levels;
 - one step more before the last step might be required; in this step we
   update the corners of blocks which have two neighbors at the higher
   level;
2010-10-13 16:59:40 -03:00
Grzegorz Kowal
aab8831bbf Update the copyright info and fix the length of separating lines. 2010-10-13 03:32:10 -03:00
Grzegorz Kowal
c4c23b57d3 Store the number of dimensions and block resolutions. 2010-10-12 22:40:55 -03:00
Grzegorz Kowal
c182e08352 Set the initial coordinates and calculate them during the refinement. 2010-10-11 22:46:07 -03:00
Grzegorz Kowal
992c790988 Store the block coordinates in the output file.
IO

 - the coordinates of the block measured in the units of effective
   resolution are stored now in the output files in the group
   'coordinates';
2010-10-11 21:55:23 -03:00
Grzegorz Kowal
8757789042 Add the field 'coord' to meta block structure.
BLOCK STRUCTURE

 - add a new field 'coord' to store block coordinates in the units of
   the effective resolution;
 - add a subroutine metablock_set_coord() to set the block coordinates;
2010-10-11 02:10:47 -03:00
Grzegorz Kowal
a8dd14def4 Heavy reawrite of the I/O module.
IO

 - the subroutine write_data() is now a wrapper subroutine which call
   the subroutine writing in a supported file format; the file format is
   chosen at the time of compilation;
 - the subroutine write_data_h5() is a new subroutine taking care of
   initialization and storage data in the HDF5 format; depending on the
   file type it calls subroutines to create specific groups and store
   the right data;
 - new subroutines write_atrributes_h5(), write_coordinates_h5(),
   write_variables_h(), write_variables_full_h5(),
   write_metablocks_h5(), write_datablocks_h5(), and number of other
   supporting subroutines to store all data in the proper format for job
   restart, vizualization, and debugging;

MAKE

 - add option to enable/disable HDF5 file compression;
2010-10-11 01:39:15 -03:00
Grzegorz Kowal
76a6b98f69 Add a wrapper subroutine to write data.
IO

 - add a wrapper subroutine write_data() to write data; this subroutines
   chooses the right subroutine depending on the requested format; it
   also choses the data format, i.e. HDF5 at the present time (other
   formats can be added later);
 - rename subroutine write_data() to write_data_primitive_h5();
 - format long lines so they fit within 80 columns;
2010-10-09 20:37:23 -03:00
Grzegorz Kowal
7ff6e0fb7a Update the copyright info in io.F90.
- also correct the separating lines;
2010-10-09 19:54:07 -03:00
Grzegorz Kowal
476e800c93 Clean up the file driver.F90.
- also break long lines so they fit within 80 characters;
2010-10-06 23:11:22 -03:00
Grzegorz Kowal
14c901b8ee Update the copyright information in driver.F90. 2010-10-06 23:03:47 -03:00
Grzegorz Kowal
96ed98a636 Change the boundary subroutines names.
BOUNDARIES

 - change the name of subroutine boundary() to boundary_variables();
 - change the name of subroutine boundary_flux() to boundary_fluxes();
2010-09-19 14:33:57 +02:00
Grzegorz Kowal
47fe94de69 Add a new subroutine to restrict fluxes.
BOUNDARIES

 - add a new subroutine restrict_flux() to restrict the fluxes from
   blocks at higher level to the lower level blocks;
2010-09-19 12:23:02 +02:00
Grzegorz Kowal
5b172cb875 Add a new subroutine to update flux boundaries.
BOUNDARIES

 - add a new subroutine boundary_flux() to update the boundaries of
   the fluxes.
2010-09-19 12:01:52 +02:00
Grzegorz Kowal
1d56dc6266 Rewrite the subroutine restrict_block(). 2010-09-19 11:49:21 +02:00
Grzegorz Kowal
d4e6f7d0ee Use a pointer to the data structure in prolong_block(). 2010-09-19 11:46:00 +02:00
Grzegorz Kowal
8ae2964b4f Do not allow for the derefinement in the lowest level. 2010-09-19 11:38:55 +02:00
Grzegorz Kowal
7b48386610 Remove flux calculation from the subroutine update().
SCHEME

 - remove the flux calculation from the subroutine update() and all dependent
   subroutines;
2010-09-19 00:08:20 +02:00
Grzegorz Kowal
057c611d9a Some cosmetics in the interpolation subroutines. 2010-09-18 23:56:07 +02:00
Grzegorz Kowal
db478af9e4 Add new global variables to the configuration.
CONFIGURATION

 - add two new variables which determined the half and the double of
   the ghost cell size (nh and nd, respectively);
 - add a variable to determine the half size of the block (ih, jh, and
   kh);
2010-09-18 11:50:24 +02:00
Grzegorz Kowal
d54b57e1eb Cosmetic change in subroutine allocate_datablock() in blocks.F90. 2010-09-18 11:44:46 +02:00
Grzegorz Kowal
b6dc6095ac Make GNU compiler happy and fix indexing of emf. 2010-09-18 11:42:09 +02:00
Grzegorz Kowal
ed88bc2526 First step of implementation of time advance using new method.
BLOCK STRUCTURE

 - add new array to the data block structure to store the electromotive
   force components; these components are located at the centers of cell
   edges, in this way the CT update of the staggered magnetic field
   component will be easier;

EVOLUTION

 - add new subroutine advance() which performs several steps in order to
   advance the solution in time by one-step update; the substeps are the
   updates of the numerical flux, the flux boundary, the advance in time
   the solution, the updates of mesh structure, and the boundaries of
   conserved variables, and finally the new time step estimation;

 - add new subroutine update_flux() to update the numerical fluxes
   stored in the data blocks;

SCHEME

 - add new subroutine numerical_flux() to calculate fluxes at the proper
   locations;

 - add new logical argument to HLL and HLLC in order to specify if the
   flux should be returned as a numerical flux or its derivative;
2010-07-27 19:26:15 -03:00
Grzegorz Kowal
0b62ce8c35 Update the array of fluxes and send it out of the update.
EVOLUTION

 - add new output argument returning the updated fluxes for each block;

SCHEME

 - update the fluxes from the one dimensional fluxes returned by the
   Riemann solver;
2010-07-26 21:12:40 -03:00
Grzegorz Kowal
a2a7fbf3c4 Add a field for storing fluxes in the blocks.
BLOCK STRUCTURE

 - add a multidimensional array to store the numerical fluxes in the
   block structure; it seems that this is necessary for the boundary
   update, since the fluxes should be synchronized between blocks at
   different levels;
2010-07-26 20:46:45 -03:00
Grzegorz Kowal
f12c32a5af Rewrite the subroutine bnd_prol() to use expand_tvd().
INTERPOLATION

 - add subroutine expand_tvd() to prolongate a multidimensional array
   using the second-order TVD interpolation (subroutine
   expand_1d_tvd());

BOUNDARY CONDITIONS

 - rewrite the subroutine bnd_prol() in order to minimize the size of
   interpolated arrays and use the subroutine expand_tvd();
2010-07-20 15:37:22 -03:00
Grzegorz Kowal
b9dd7d97e8 Remove unnecessary argument from bnd_copy() subroutine.
BOUNDARY CONDITIONS

 - if the blocks are on the same level there is no need for iteration
   over the faces; remove the argument iface from the subroutine
   bnd_copy() since it is not used;
2010-07-20 11:39:23 -03:00
Grzegorz Kowal
ea448122be We don't need to iterate over levels in the boundary update.
BOUNDARY CONDITIONS

 - the boundaries should be updated in the directional manner, i.e.
   first the update of all blocks along the X direction, then along the
   Y direction, and finally along the Z direction; this assures the
   proper boundary zones update;

 - in the boundary update there is no reason for the iteration over the
   levels if the boundary update is happening in the directional manner;
2010-07-20 11:33:24 -03:00
Grzegorz Kowal
26e103ce86 Rewrite subroutine restrict_block.
MESH

 - subroutine restrict_block has been rewritten to use one big array for
   storage variables from all children and them restricting this array
   and putting resulted variables in a new data block;
2010-07-04 01:15:34 -03:00
Grzegorz Kowal
c057d098de Implement magnetic field prolongation with boundary.
INTERPOLATION

 - add subroutine expand_1d_tvd to 1D TVD prolongation;

 - implement magnetic field boundary prolongation with a given boundary;
   this is used for boundary update of magnetic components in a block at
   higher level, where the boundary is updated from the block at lower
   level; the prolongation is divergence free; for now only 2D case is
   implemented;

BOUNDARY CONDITIONS

 - use the boundary prolongation subroutine expand_mag_bnd in the
   updating the magnetic field boundaries in a blocks which neighbors
   are at lower level; this should be ready for 3D too;
2010-07-03 23:37:02 -03:00
Grzegorz Kowal
4dea14df91 Fix compilation when EOS=ISO.
IO

 - obtain indices ipr and ien only when we use adiabatic equation of
   state;

PROBLEM

 - obtain indices ien and ipr only when EOS=ADI;
 - in the case of isothermal EOS define initial star as an increase of
   density instead of pressure;
 - in checking the refirement criterion use only density gradient when
   EOS=ISO;

SCHEME

 - obtain indices ipr and ien only when we use adiabatic EOS;
 - in function maxspeed() obtain parameter csnd2 in the case of
   isothermal equation of state;
2010-03-30 23:23:49 -03:00
Grzegorz Kowal
cc4e6e50bb Rewrite indices in subroutine bnd_copy().
BOUNDARY CONDITIONS

 - rewrite index calculation in subroutine bnd_copy();
2010-03-30 21:53:07 -03:00
Grzegorz Kowal
03f00b65d5 Add subroutine divergence() and use it in I/O.
INTERPOLATION

 - add a new subroutine divergence() calculating the divergence of a
   vector field;

IO

 - utilize a new subroutine divergence() in calculation of the
   divergence of staggered magnetic field;
2010-03-30 17:44:48 -03:00
Grzegorz Kowal
1dd934c606 More micro optimizations in subroutine magtocen(). 2010-03-30 16:11:23 -03:00
Grzegorz Kowal
9a2ce9cd41 Index micro optimizations in bnd_rest() and magtocen().
BOUNDARY CONDITIONS

 - micro optimizations of the indices in bnd_rest();

INTERPOLATION

 - micro optimizations of the indices in magtocen();
2010-03-30 16:07:29 -03:00
Grzegorz Kowal
024ead539f Implement divergence free correction in magtocen() for 3D case.
INTERPOLATION

 - in the subroutine magtocen() implement divergence free correction for
   the three dimensional case;
2010-03-22 16:36:14 -03:00
Grzegorz Kowal
81c241a76a Remove argument ng from all restriction subroutines.
BOUNDARY CONDITIONS

 - remove the third argument from all calls of the subroutine shrink();

INTERPOLATION

 - remove ng argument from subroutines shrink() and shrink_1d();
 - small fixes to subroutine magtocen() in the divergence free
   correction calculation;

MESH

 - fix index calculation and remove the third argument from calling the
   subroutine shrink();
2010-03-22 02:17:44 -03:00
Grzegorz Kowal
f035771f28 Fix divergence free prolongation and boundary conditions.
BOUNDARY CONDITIONS

 - update boundary conditions starting from the block with the maximum
   refinement level and stepping down; this fixes update of the
   boundary conditions in the corners;

INTERPOLATION

 - fix divergence free prolongation of the staggered magnetic field;
2010-03-21 19:05:29 -03:00
Grzegorz Kowal
aa1a0867bd Implement divergence-free reconstruction. Rewrite bnd_prol().
BOUNDARY CONDITIONS

 - rewrite subroutine bnd_prol() and use expand_mag() in it;

 - fix some index calculations in bnd_rest();

INTERPOLATION

 - implement new subroutine expand_mag() performing divergence-free
   prolongation of the staggered magnetic field;

 - implement divergence-free correction in interpolation of cell
   centered magnetic field in subroutine magtocen();

MESH

 - use new subroutine expand_mag() in block prolongation;
2010-03-21 11:54:54 -03:00
Grzegorz Kowal
7ea19cd486 Write down the divergence of B in the output files. 2010-03-14 21:16:34 -03:00
Grzegorz Kowal
d64c91be6b Rework indices in bnd_prol().
Now we use more intuitive calculation of the indices for boundary
conditions.
2010-03-14 20:53:26 -03:00
Grzegorz Kowal
9c861ff96d Use TVD interpolation in boundary update, update mesh before time step.
BOUNDARY CONDITIONS

  - use TVD interpolation for prolongation of the boundary conditions

CONFIGURATION

  - put lower limit for the number of ghost and domain cells

HOST FILES

  - host files should not be included in the revision control

INTERPOLATION

  - define all arrays as REAL, not REAL(KIND=8) since the precision of
    calculations is determined at the compilation stage

  - replace j0 and j1 indices with new more obvious il and ir

MESH

  - update mesh before calculating new time step
2010-03-14 15:40:24 -03:00
Grzegorz Kowal
5a826f0107 Fix the enforcement of the number of ghost zones. 2010-03-08 21:16:21 -03:00
Grzegorz Kowal
6a2b6f6fbb Implement boundary conditions for staggered magnetic field.
BOUNDARY CONDITIONS

  - rewrite bnd_copy() so first the indices are prepared and then there
    is one call to fill out the destination array; include the lower
    index change for staggered magnetic field components;

  - in the subroutine bnd_rest() implement correct restriction of the
    staggered magnetic field components; take into account the change
    of the lower index;

  - in the subroutine bnd_prol() implement correct prolongation of the
    staggered magnetic field components; take into account the change of
    the lowe index;

  - by default use 2 ghost cell and the restriction and expansion to
    prevent errors resulting from interpolation;

CONFIGURATION

  - enforce a lower limit for number of ghost zones to 6 when MHD=Y and
    4 otherwise

INTERPOLATION

  - remove unnecessary interpolation methods

  - limit 'c' interpolation to the second order only

MESH

  - implement divergence-free prolongation and restriction for the
    staggered magnetic field components in the block refinement and
    derefinement
2010-03-08 19:09:49 -03:00
Grzegorz Kowal
88761c9622 Implement FLUXCT integration of the induction equation.
SCHEME

  - implement Flux-CT scheme for the staggered magnetic field
    integration;

BLOCK STRUCTURE

  - use more space efficient storage of the variables, which means
    storing only staggered components of magnetic field; cell-centered
    components are calculated only when necessary;

EVOLUTION

  - remove loops in the field updates; operations are performed on the
    arrays;

BOUNDARY CONDITIONS

  - remove loops in the bnd_copy; operations are calculated on the whole
    array now;

INTERPOLATION

  - subroutine magtocen() has been rewritten to avoid problems with the
    array allocation; now as an argument we enter the array of all
    variables; subroutine uses indices for the face-centered and
    cell-centered magnetic field components internally;

MAKE

  - add flag defining Flux-CT scheme;

PROBLEM

  - use predefined array variables instead of allocated;
2010-02-28 18:35:57 -03:00
Grzegorz Kowal
cab66e8fc3 Implement FIELD-CD scheme for magnetic field evolution. 2010-02-22 16:21:20 -03:00