Contact: B. Wyman
Reviewers:
Change history: WebCVS Log for bgrid_advection.f90
B-grid dynamical core module that performs vertical and horizontal
advection for temperature, prognostic tracers, and momentum.
Tracer advection may be followed by borrowing scheme to reduce
negative tracer values.
This module performs the following:
- sets advection control parameters by reading namelist input
and querying the tracer manager (field table)
- vertical advection options include finite volume or
centered differencing schemes
- horizontal advection options only include centered
differencing schemes
- negative tracer removal through local borrowing
(separate vertical and horizontal routines)
bgrid_horiz_mod bgrid_vert_mod bgrid_masks_mod bgrid_prog_var_mod bgrid_polar_filter_mod bgrid_halo_mod bgrid_change_grid_mod vert_advection_mod fms_mod mpp_mod field_manager_mod tracer_manager_mod
use bgrid_advection_mod [ ,only: advection_init,
advection,
advection_end ]
advection_init
Initialization routine for bgrid_advection_mod.
It is mandatory that this routine be called.
Read namelist parameters and initializes advection control parameters.
advection
Computes vertical and horizontal advective tendencies and
performs tracer borrowing to remove negative tracer.
advection_end
Optional termination routine for bgrid_advection_mod.
It is not mandatory that this routine be called.
NOTES
1) A namelist interface called bgrid_advection_nml is read
from file input.nml.
2) Advection parameters for individual tracers may set in the
tracer_manager's field_table.
call advection_init ( Hgrid ) DESCRIPTION This routine reads the bgrid_advection_nml namelist, queries the tracer manager for advection and filling scheme options, and then defines advection control parameters (stored internally in advec_control_type). This routine must be called before calling subroutine advection. INPUT Hgrid horizontal grid constants [horiz_grid_type]
call advection ( Pfilt, Hgrid, Vgrid, Masks, pfilt_opt, dt, dpde_old, dpde, few, fns, etadot, u, v, t, Var, Var_dt ) DESCRIPTION Updates the prognostic variable tendencies with vertical and horizontal advective tendencies for the given mass fluxes. The vertical and horizontal scheme used is controlled by namelist and field_table (tracers only). Prognostic tracer tendencies are updated to reduce negative tracer values. INPUT Pfilt polar filter constants [pfilt_control_type] Vgrid vertical grid constants [vert_grid_type] Masks grid masking constants [grid_mask_type] pf_opt polar filter option flag [integer] dt adjustment time step [real] dpde_old Pressure thickness of model layers at the start of the advective time step. [real, dimension(Hgrid%ilb:,Hgrid%jlb:,:)] dpde The current pressure thickness of model layers (updated for the current time step). [real, dimension(Hgrid%ilb:,Hgrid%jlb:,:)] u, v, t Prognostic variables at the end of the start of the current advective time step. Note that tracers have not been updated since the last advective time step, therefore, r = Var%r + dt*Var_dt%r [real, dimension(Hgrid%ilb:,Hgrid%jlb:,:)] Var Prognostic variables at the start of the current atmospheric/dynamics time step, Values updated for the current time step are computed as: uc = Var%u + dt*Var_dt%u. See note for tracers above. [prog_var_type] INPUT/OUTPUT Hgrid horizontal grid constants [horiz_grid_type] few, fns zonal, meridional mass fluxes (Pa-m2/s) (summation for the current advection time step) [real, dimension(Hgrid%ilb:,Hgrid%jlb:,:)] etadot vertical mass flux (Pa/s) (summation for the current advection time step) [real, dimension(Hgrid%ilb:,Hgrid%jlb:,:)] Var_dt prognostic variable tendencies, accumulated since the variables were updated in Var [prog_var_type] call advection_end DESCRIPTION This routine terminates the bgrid_advection module. It is not mandatory that this routine be called. It releases a minimal amount of global storage used and calls other termination routines. There are no arguments to this routine.
&bgrid_advection_nml
vert_advec_scheme_wind The vertical advection scheme.
vert_advec_scheme_temp Possible values are: 'NONE', 'SECOND_CENTERED', 'FOURTH_CENTERED',
vert_advec_scheme_tracer 'NONE' - turns off vertical advection
'SECOND_CENTERED' - second order centered differencing
assuming equally-spaced model levels
'FOURTH_CENTERED' - fourth order centered differencing
assuming equally-spaced model levels
'SECOND_CENTERED_WTS' - second order centered differencing
assuming unequally-spaced model levels
'FOURTH_CENTERED_WTS' - fourth order centered differencing
assuming unequally-spaced model levels
(more costly than assuming equal spacing)
'FINITE_VOLUME_LINEAR' - finite volume scheme using piecewise linear scheme (van Leer)
'FINITE_VOLUME_PARABOLIC' - finite volume scheme using piecewise parabolic scheme (PPM)
Using finite volume schemes for momentum has not been tested and may produce poor results.
[character, default: 'SECOND_CENTERED']
horiz_advec_scheme_wind The horizontal advection scheme.
horiz_advec_scheme_temp Possible values are 'NONE', 'SECOND_CENTERED', 'FOURTH_CENTERED'.
horiz_advec_scheme_tracer [character, default: 'SECOND_CENTERED']
advec_weight_wind Weights used for modified Euler-backward time differencing
advec_weight_temp (i.e., when the scheme is SECOND_CENTERED or FOURTH_CENTERED).
advec_weight_tracer 0.0 = full Euler-forward (not recommended)
1.0 = full Euler-backward
[real, default: advec_weight__=0.70]
num_fill_pass The number of successive repetitions of the tracer borrowing scheme.
This value applies to both the horizontal and vertical schemes.
Use the field_table to independently modify the number of horizontal
and vertical passes.
[integer, default: num_fill_pass = 1]
compute_vert_wind_flux If TRUE then the vertical flux ("sigma-dot") for momentum
is recomputed using the horizontal momentum fluxes.
If FALSE then the vertical flux is determined by averaging
the vertical flux from the temperature grid.
[logical, default: .FALSE.]
Advection Methods:
Advection Schemes:
Advection Parameters:
Examples:
'advec_horiz', 'fourth_centered', 'wt=.80'
'advec_vert', 'finite_volume_parabolic'
Filling Methods:
Filling Schemes:
Filling Parameters:
Examples:
'filling', 'linear', 'hp=2,vp=1'
'filling', 'none'
FATAL errors in bgrid_advection_mod
horizontal finite volume schemes are not implemented with this release
Sorry, but the horizontal finite volume schemes are still in development.
Currently only vertical finite volume scheme have been implemented.
E-B weight out of range [0,1]
You have specified a weight for the modified Euler-backward scheme
that is not in the range 0.0 to 1.0. Your incorrect value may have
been input either through the namelist or the field_table.
invalid filling scheme, .....
You have specified an invalid tracer filling scheme.
This value is input as the filling method in the field_table.
Possible values are: "LOCAL" or "NONE".
advection scheme not supported
You have specified an invalid horizontal advection scheme.
invalid advection scheme, .....
You have specified an invalid horizontal or vertical advection scheme.
Check your input values in the namelist and field_table.
invalid advection scheme number
An invalid advection scheme was detected.
Check your input values in the namelist and field_table.
etadot cannot be recomputed for the eta coordinate
The namelist option "compute_vert_wind_flux=.TRUE." cannot be used
with the eta coordinate.
None.
1) Horizontal finite volume schemes for tracers (and possibly temperature). 2) Longer advective time steps for tracers using finite volume schemes. 3) Move tracer borrowing code to separate module.