PUBLIC INTERFACE ~ PUBLIC DATA ~ PUBLIC ROUTINES ~ NAMELIST ~ DIAGNOSTIC FIELDS ~ ERROR MESSAGES ~ REFERENCES ~ NOTES

Module ocean_tracer_advect_mod

Contact:  Matt Harrison Ron Pacanowski S. M. Griffies John Dunne Alistair Adcroft J. Simeon Bill Merryfield
Reviewers: 
Change History: WebCVS Log


OVERVIEW

This module computes thickness weighted tracer advection tendencies.

This module computes thickness weighted tracer advection tendencies using a variety of advection schemes.


OTHER MODULES USED

        constants_mod
diag_manager_mod
fms_mod
fms_io_mod
mpp_domains_mod
mpp_mod
ocean_domains_mod
ocean_obc_mod
ocean_parameters_mod
ocean_topog_mod
ocean_tracer_util_mod
ocean_types_mod
ocean_workspace_mod

PUBLIC INTERFACE

ocean_tracer_advect_init:
quicker_init:
fourth_sixth_init:
mdfl_init:
mdppm_init:
psom_init:
horz_advect_tracer:
vert_advect_tracer:
horz_advect_tracer_upwind:
horz_advect_tracer_2nd_order:
horz_advect_tracer_4th_order:
horz_advect_tracer_6th_order:
horz_advect_tracer_quicker:
horz_advect_tracer_quickmom3:
vert_advect_tracer_upwind:
vert_advect_tracer_2nd_order:
vert_advect_tracer_4th_order:
vert_advect_tracer_6th_order:
vert_advect_tracer_quicker:
vert_advect_tracer_quickmom3:
advect_tracer_mdfl_sup_b:
advect_tracer_mdfl_sweby:
advect_tracer_sweby_all:
advect_tracer_psom:
psom_x:
psom_y:
psom_z:
advect_tracer_mdppm:
ppm_limit_cw84:
ppm_limit_ifc:
ppm_limit_sh:
gyre_overturn_diagnose:
compute_adv_diss:
ocean_tracer_advect_restart:
ocean_tracer_advect_end:


PUBLIC DATA

None.


PUBLIC ROUTINES

  1. ocean_tracer_advect_init

    DESCRIPTION
    Initialize the tracer advection module.


  2. quicker_init

    DESCRIPTION
    Initialize quicker specific fields.


  3. fourth_sixth_init

    DESCRIPTION
    Initialize the fourth order and sixth order advection fields.


  4. mdfl_init

    DESCRIPTION
    Initialize mdfl and dst_linear specific fields.


  5. mdppm_init

    DESCRIPTION
    Initialize mdppm specific fields.


  6. psom_init

    DESCRIPTION
    Read restart or initialize moments for prather advection


  7. horz_advect_tracer

    DESCRIPTION
    Compute horizontal advection of tracers


  8. vert_advect_tracer

    DESCRIPTION
    Compute vertical advection of tracers.


  9. horz_advect_tracer_upwind

    DESCRIPTION
    Compute horizontal advection of tracers from first order upwind. This scheme is positive definite but very diffusive.


  10. horz_advect_tracer_2nd_order

    DESCRIPTION
    Compute horizontal advection of tracers from second order centered differences.


  11. horz_advect_tracer_4th_order

    DESCRIPTION
    Compute horizontal advection of tracers from fourth order centered differences.

    WARNING: This code does NOT account for non-uniform grids.



  12. horz_advect_tracer_6th_order

    DESCRIPTION
    Compute horizontal advection of tracers from sixth order centered differences.

    WARNING: this code does NOT account for non-uniform grids.



  13. horz_advect_tracer_quicker

    DESCRIPTION
    Compute horizontal advection of tracers from quicker.


  14. horz_advect_tracer_quickmom3

    DESCRIPTION
    Compute horizontal advection of tracers from quicker using MOM3 masking. This method has proven useful for reproducing MOM3 results with MOM4.


  15. vert_advect_tracer_upwind

    DESCRIPTION
    Compute vertical advection of tracers from first order upwind. This scheme is positive definite, but very diffusive.


  16. vert_advect_tracer_2nd_order

    DESCRIPTION
    Compute vertical advection of tracers from second order centered differences.


  17. vert_advect_tracer_4th_order

    DESCRIPTION
    Compute vertical advection of tracers from fourth order centered differences. NOTE: this code does not account for non-uniform grids.


  18. vert_advect_tracer_6th_order

    DESCRIPTION
    Compute vertical advection of tracers from sixth order centered differences. NOTE: this code does not account for non-uniform grids.


  19. vert_advect_tracer_quicker

    DESCRIPTION
    Compute vertical advection of tracers from quicker.


  20. vert_advect_tracer_quickmom3

    DESCRIPTION
    Compute vertical advection of tracers from quicker using MOM3 masking. This method has proven useful for reproducing MOM3 results with MOM4.


  21. advect_tracer_mdfl_sup_b

    DESCRIPTION
    Compute tendency due to 3D advection of tracers using a multi-dimensional flux-limited method. This method differs from other mom4 advection methods in the following ways:

    1) Horizontal and vertical advection are combined 2) Calculations of the three coordinates (Z, X, Y) are performed sequentially as updates to the tracer, so that the advection components for X and Y depend on Z and Z,Y respectively. This helps limit the flux. 3) During the update for each direction, the 2nd order Super-B flux limiter is applied. 4) Flux divergence is included within the calculation to also help limit the flux: - During the update for each direction, the divergence in each direction is added. - During the overall tendency calculated, the divergence in all three directions is removed. 5) All fluxes are functions of the tracer field at the taum1 time step. This means that this method is ideally suited for the twolevel time stepping scheme, in which "taum1=tau", thus enabling twice the tracer time step available for the threelevel scheme.

    The calculation proceeds as follows:

    IMPORTANT NOTE: If this scheme is used at all, it must be used as the option for BOTH horizontal and vertical advection. In the the tracer tendency, it is applied as the horizontal term, but applies to vertical as well, for which case the vertical term in the tracer tendency equation is set to zero.

    This scheme was ported to mom4 from the MIT-GCM by John Dunne and Alistair Adcroft during Summer 2003



  22. advect_tracer_mdfl_sweby

    DESCRIPTION
    Compute tendency due to 3D advection of tracers using a multi-dimensional flux-limited method. This method differs from other methods in the following ways:

    1) Horizontal and vertical advection are combined 2) Calculations of the three coordinates (Z, X, Y) are performed sequentially as updates to the tracer, so that the advection components for X and Y depend on Z and Z,Y respectively... This helps limit the flux. 3) During the update for each direction, the 3rd order Sweby flux limiter is applied. 4) Flux divergence is included within the calculation to also help limit the flux: - During the update for each direction, the divergence in each direction is added. - During the overall tendency calculated, the divergence in all three directions is removed. 5) All fluxes are functions of the tracer field at the taum1 time step. This means that this method is ideally suited for the twolevel time stepping scheme, in which "taum1=tau", thus enabling twice the tracer time step available for the threelevel scheme.

    The calculation proceeds as follows:

    IMPORTANT NOTE: If this scheme is used at all, it must be used as the option for BOTH horizontal and vertical advection. In the tracer tendency, it is applied as the horizontal term, but applies to vertical as well, for which case the vertical term in the tracer tendency equation is set to zero.

    This scheme was ported to mom4 from the MIT-GCM by John Dunne and Alistair Adcroft during Summer 2003

    Griffies: 5/27/04 Optimized by filling 3d arrays prior to sending for mpp_update_domains

    07/11/2007 by Stephen.Griffies@noaa.gov When the nonlinear limiters are removed (sweby_limiter=0.0), this scheme reduces to a linear direct space-time method (ADVECT_DST_LINEAR).



  23. advect_tracer_sweby_all

    DESCRIPTION
    Sweby scheme optimized by doing all tracers at once, so can send larger packet to mpp_update_domains.

    This scheme is available ONLY when advecting all tracers with the sweby scheme.

    This scheme CANNOT be called from compute_adv_diss.

    Stephen.Griffies@noaa.gov June 2004



  24. advect_tracer_psom

    DESCRIPTION
    Compute advective tendency of dzt*rho*tracer concentration using Prather's second order moment method (SOM):

    Prather, M. J.,"Numerical Advection by Conservation of Second-Order Moments" JGR, Vol 91, NO. D6, p 6671-6681, May 20, 1986

    Merryfield and Holloway (2003), "Application of an accurate advection algorithm to sea-ice modelling". Ocean Modelling, Vol 5, p 1-15.

    MOM 3 code by M. Hofmann and M. A. M. Maqueda Ported to mom4p0 by Ronald.Pacanowski@noaa.gov Ported to mom4p1 by Stephen.Griffies@noaa.gov

    The preferred limiters are taken from Merryfield and Holloway, and generalized by Bill Merryfield for non-constant grid spacing.

    IMPORTANT NOTE: This scheme must be used for BOTH horizontal and vertical advection. In the tracer tendency, it is applied as the horizontal term, but applies to vertical as well, for which case the vertical term in the tracer tendency equation is set to zero.

    NOTE: When using psom_limit_prather=.true., the tracer has a lower bound of zero. So this limiter IS NOT appropriate for temperature when measured in degrees C. The preferred, and default, limiter is from Merryfield and Holloway.



  25. psom_x

    DESCRIPTION
    Compute i-advective flux using Prather's SOM.


  26. psom_y

    DESCRIPTION
    Computes j-advective flux using Prather's SOM.


  27. psom_z

    DESCRIPTION
    Computes k-advective flux using Prather's SOM.


  28. advect_tracer_mdppm

    DESCRIPTION
    Compute advective tendency of dzt*rho*tracer concentration using multi-dimensional piecewise parabolic method.

    Controlling parameters: Tracer%ppm_hlimiter=0 -> No limiting in the horizontal ppm_hlimiter=1 -> Full constraint (Colella and Woodward, 1984) ppm_hlimiter=2 -> Improved full constraint (Lin, 2004) ppm_hlimiter=3 -> Huynh limiter (Huynh, 1996)

    ppm_vlimiter=* -> as for ppm_hlimit but for the vertical

    Coded by Alistair.Adcroft@noaa.gov Jan/Feb 2006

    Updated with controlling parameters, April 2006



  29. ppm_limit_cw84

    DESCRIPTION
    Kernel to limit the edge values for PPM following Colella and Woodward, 1984

    Coded by Alistair.Adcroft@noaa.gov Apr 2006



  30. ppm_limit_ifc

    DESCRIPTION
    Kernel to limit the edge values for PPM using the Improved Full Constraint (IFC) of Lin, 2004.

    Coded by Alistair.Adcroft@noaa.gov Apr 2006



  31. ppm_limit_sh

    DESCRIPTION
    Kernel to limit the edge values for PPM following the monotonicity- preserving approach of Suresh and Huynh, 1997.

    Coded by Alistair.Adcroft@noaa.gov Apr 2006



    NOTE
    About efficiency: ppm_limit_sh() is not as efficient as it would be if we wrote a s/r for each direction. The pre-calculation of d1m, d1p, d1mm and d1pp duplicates operations and would be much faster if d1m was replaced by d1p(i+1). However, in order to re-use this limiter for the all directions (to simplify debugging) I have opted for the less efficient form for now. - AJA


  32. gyre_overturn_diagnose

    DESCRIPTION
    Diagnose tracer transport according to zonal mean and deviations from zonal mean.

    We allow for the use of a basin mask so that the zonal means are performed over the global domain and each of five other basins. If no basin mask is read, then assume global domain used to define the zonal means.

    []=zonal mean; *=deviation from zonal mean

    V = rho_dzt dxt T, with rho=rho0 for Boussinesq

    int [V T] = total advective int [V][T] = overturning int V* T* = gyre

    Stephen.Griffies@noaa.gov May 2007



  33. compute_adv_diss

    DESCRIPTION
    Compute the dissipation due to advection truncation errors. This diagnostic requires computation of advection operator acting on the squared tracer concentration.

    NOTE: This scheme isolates the dissipation from trucation errors in advection ONLY for the following vertical coordinates: 1/ geopotential: for all k-levels, except for k=1 (due to undulating surface height) 2/ pressure: for all k-levels, except for k=kmt (due to undulating bottom pressure)

    NOTE: For the Quicker advection scheme, we assume the preferred two_level time scheme is used here, so that taum1=tau.

    NOTE: If PSOM is used for temp or salt, then we MUST also enable a new passive tracer in the field table, with name passive_temp_sq and passive_salt_sq. This extra tracer is used for diagnostics alone, and is required due to the extra moment fields used for computing the PSOM tendency. If PSOM is used for another tracer besides temp or salt, then some extra code needs to be written inside ocean_passive.F90, emulating the work done for temp and salt.



  34. ocean_tracer_advect_restart

    DESCRIPTION
    Write out restart files registered through register_restart_file


  35. ocean_tracer_advect_end

    DESCRIPTION
    Write the PSOM moments for restarts.



NAMELIST

&ocean_tracer_advect_nml

limit_with_upwind
If true, will compute tracer fluxes entering a cell using upwind if the tracer value is outside a specified range. Implemented only for quick at this time. This is an ad hoc and incomplete attempt to maintain monotonicity with the quicker scheme.
[logical]
advect_sweby_all
For running all tracers with sweby, thereby utilizing a bitwise same routine that reorganizes loops and can be faster for certain configurations. Default advect_sweby_all=.false.
[logical]
zero_tracer_advect_horz
For debugging. Set to .true. to turn off horizontal advection.
[logical]
zero_tracer_advect_vert
For debugging. Set to .true. to turn off vertical advection.
[logical]
psom_limit_prather
For running with the original Prather limiter for the PSOM scheme. The limiter is positive definite, but not monotonic. This limiter is NOT recommended for most applications. The default is psom_limit_prather=.false., since we prefer to use the limiter from Merryfield and Holloway (2003).
[logical]
debug_this_module
For debugging
[logical]
write_a_restart
Set true to write a restart. False setting only for rare cases where wish to benchmark model without measuring the cost of writing restarts and associated chksums. Default is write_a_restart=.true.
[logical]
compute_gyre_overturn_diagnose
For computing gyre and overturning transport components. This logical is useful as the diagnostic requires a number of global arrays, so it is best to enable these arrays only if turning on the logical. Default compute_gyre_overturn_diagnose=.false.
[logical]
read_basin_mask
For reading in a mask that selects regions of the domain for performing gyre and overturning diagnostics. The basin-mask convention used at GFDL has Southern=1.0,Atlantic=2.0,Pacific=3.0,Arctic=4.0,Indian=5.0 Default read_basin_mask=.false., whereby basin_mask is set to tmask(k=1).
[logical]


DATA SETS

None.


ERROR MESSAGES

None.


REFERENCES

  1. S.-J. Lin A "Vertically Lagrangian" Finite-Volume Dynamical Core for Global Models Month. Weather Rev. (2004) 132, 2293-2307 (Appendix B)
  2. H.T. Huynh Schemes and Constraints for advection 15th Intern. Conf. on Numeric. Meth. in Fluid Mech., Springer (1997)
  3. Colella P. and P.R. Woodward The piecewise parabloic method (PPM) for gasdynamical simulations J. Comput. Phys. (1984) 54, 174-201
  4. A. Suresh and H.T. Huynh Accurate Monotonicity-Preserving Schemes with Runge-Kutta Time Splitting J. Comput. Phys. (1997) 136, 83-99
  5. Prather, M. J.,"Numerical Advection by Conservation of Second-Order Moments" JGR, Vol 91, NO. D6, p 6671-6681, May 20, 1986
  6. Merryfield and Holloway (2003), "Application of an accurate advection algorithm to sea-ice modelling". Ocean Modelling, Vol 5, p 1-15.
  7. Hundsdorder and Trompert (1994), "Method of lines and direct discretization: a comparison for linear advection", Applied Numerical Mathematics, pages 469--490.
  8. Sweby (1984): "High-resolution schemes using flux limiters for hyperbolic conservation laws", SIAM Journal of Numerical Analysis, vol. 21 pages 995-1011.


COMPILER SPECIFICS

None.


PRECOMPILER OPTIONS

None.


LOADER OPTIONS

None.


TEST PROGRAM

None.


KNOWN BUGS

None.


NOTES

None.


FUTURE PLANS

None.


top