INTERFACE:
module advection_3dDESCRIPTION:
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:
use domain, only: imin,imax,jmin,jmax,kmax use advection IMPLICIT NONE privatePUBLIC 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