Fortran: Module Interface 3D advection (Source File: advection_3d.F90)

INTERFACE:

    module advection_3d
DESCRIPTION:

This module does 3D advection of scalars. The module follows the same convention as the other modules in 'getm'. The module is initialised by calling 'init_advection_3d()'. In the time-loop 'do_advection_3d' is called. 'do_advection_3d' is a wrapper routine which - dependent on the actual advection scheme chosen - makes calls to the appropriate subroutines, which may be done as one-step or multiple-step schemes. The actual subroutines are coded in external FORTRAN files. New advection schemes are easily implemented - at least from a program point of view - since only this module needs to be changed. Additional work arrays can easily be added following the stencil given below. To add a new advection scheme three things must be done:

  1. define a unique constant to identify the scheme (see e.g. UPSTREAM and TVD)
  2. adopt the select case in do_advection_3d and
  3. write the actual subroutine.
USES:
    use domain, only: imin,imax,jmin,jmax,kmax
    use advection
    IMPLICIT NONE
    private
PUBLIC DATA MEMBERS:
    public init_advection_3d, do_advection_3d,print_adv_settings_3d
    integer,public                        :: adv_ver_iterations=1
    integer,public,parameter              :: HVSPLIT=3,W_TAG=33
    character(len=64),public,parameter    :: adv_splits_3d(0:3) = &
             (/"no split: one 3D uvw step                     ",  &
               "full step splitting: u + v + w                ",  &
               "half step splitting: u/2 + v/2 + w + v/2 + u/2",  &
               "hor/ver splitting: uv + w                     "/)
REVISION HISTORY:
    Original author(s): Karsten Bolding & Hans Burchard



Subsections