PUBLIC INTERFACE / ROUTINES / NAMELIST / ERRORS / NOTES


module bgrid_advection_mod

     Contact:   B. Wyman
     Reviewers:
     Change history: WebCVS Log for bgrid_advection.f90


OVERVIEW


    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)


OTHER MODULES USED


   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


PUBLIC INTERFACE


   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.


PUBLIC ROUTINES



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.

NAMELIST


 &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.]


FIELD_TABLE OPTIONS

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'

ERROR MESSAGES


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.


NOTES


     None.


FUTURE PLANS


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.