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.