PUBLIC INTERFACE ~ PUBLIC ROUTINES ~ NAMELIST

Module ocean_vert_mix_mod

Contact:  S.M. Griffies
Reviewers:  A. Rosati
Change History: WebCVS Log


OVERVIEW

Time tendency from vertical mixing

This module does the following: --computes the vertical mixing coefficients for tracer and velocity, --computes thickness weighted and density weighted time tendency for tracer due to vertical diffusion processes, --computes the thickness weighted and density weighted acceleration for velocity due to vertical friction processes. Account is taken of the differences between Bgrid and Cgrid implementations of MOM.


OTHER MODULES USED

            constants_mod
diag_manager_mod
field_manager_mod
fms_mod
mpp_domains_mod
mpp_mod
ocean_domains_mod
ocean_parameters_mod
ocean_tracer_util_mod
ocean_types_mod
ocean_util_mod
ocean_vert_const_mod
ocean_vert_chen_mod
ocean_vert_gotm_mod
ocean_vert_kpp_test_mod
ocean_vert_kpp_mom4p0_mod
ocean_vert_kpp_mom4p1_mod
ocean_vert_pp_mod
ocean_vert_tidal_mod
ocean_vert_util_mod
ocean_workspace_mod

PUBLIC INTERFACE

ocean_vert_mix_init:
diff_cbt_table_init:
bryan_lewis_init:
hwf_init:
diff_cbt_tanh_init:
vert_friction_init:
watermass_diag_init:
vert_mix_coeff:
vert_diffuse:
vert_diffuse_implicit:
vert_friction_bgrid:
vert_friction_cgrid:
vert_friction_implicit_bgrid:
vert_friction_implicit_cgrid:
on_comp_domain:
invcosh:
vmix_min_dissipation:
watermass_diag:
vert_diffuse_implicit_diag:
vert_diffuse_watermass_diag:
ocean_vert_mix_restart:
ocean_vert_mix_end:


PUBLIC ROUTINES

  1. ocean_vert_mix_init

    DESCRIPTION
    Initialization for the vertical mixing module.


  2. diff_cbt_table_init

    DESCRIPTION
    Read in static diffusivities that have been entered to the diff_cbt_table.


  3. bryan_lewis_init

    DESCRIPTION
    Initialize the Bryan-Lewis static background diffusivities.


  4. hwf_init

    DESCRIPTION
    Initialize the HWF static background diffusivity. Two forms are available: 1/ Depth dependent form, meant to emulate the Bryan-Lewis approach. This form is not generally used at GFDL. 2/ Depth independent form motivated by use in the CM2G isopycnal ocean climate model at GFDL.


  5. diff_cbt_tanh_init

    DESCRIPTION
    Initialize the tanh background diffusivity.


  6. vert_friction_init

    DESCRIPTION
    Initialize vertical friction portion of ocean_vert_mix_mod


  7. watermass_diag_init

    DESCRIPTION
    Initialization of watermass diagnostic output files. Also determine the logical compute_watermass_diag.


  8. vert_mix_coeff

    DESCRIPTION
    This subroutine calls the relevant scheme to compute vertical diffusivity and vertical viscosity. Background values are also incorporated here.


  9. vert_diffuse

    DESCRIPTION
    This subroutine computes the thickness weighted and density weighted time tendency for tracer associated with vertical diffusion based on explicit time update of the vertical diffusion equation. MOM only supports aidif==0.0 or aidif==1.0. MOM does not support cases with 0.0 < aidif < 1.0. The watermass diagnostics have not been ported to this subroutine since aidif=0 is rarely used, even in idealized studies.


  10. vert_diffuse_implicit

    DESCRIPTION
    Contributions to thickness weighted and density weighted time tendency from time-implicit vertical diffusion.


  11. vert_friction_bgrid

    DESCRIPTION
    This subroutine computes the thickness weighted and density weighted acceleration (kg/m^3)*(m^2/s^2) associated with vertical friction. Assumes here that the horizontal grid is B-grid. For aidif=1.0, this module does nothing since all vertical friction is in this case handled implicitly in time, and this is computed elswewhere. MOM only supports aidif==0.0 or aidif==1.0. MOM does not support cases with 0.0 < aidif < 1.0. Note that smf and bmf have units (kg/m^3)*(m^2/s^2) So the vertical diffusive fluxes must be in these units too. For this purpose, we multiply the viscosity by rho0. This is an approximation consistent with the Boussinesq approximation. For non-Boussinesq, we should be using the in situ rho. But to the level of accuracy that we know the vertical viscosity, and to the extent that the ocean density is close to rho0, our use of rho0 for the non-Boussinesq case is of minor consequence for vertical friction calculation. Note: the form drag contribution to vertical viscosity must be handled within aidif=1.0 implicit vertical mixing. It is ignored in this routine, as its contribution would generally cause the model to be unstable. Note: if try to merge this routine with vert_friction_cgrid some machines and compilers will change bits by the mere introduction of extra if-test logic into the calculation. So we define the separate routines to maintain bit-wise agreement with older results, with bit-wise agreement a useful means to check for errors as the model evolves.


  12. vert_friction_cgrid

    DESCRIPTION
    This subroutine computes the thickness weighted and density weighted acceleration (kg/m^3)*(m^2/s^2) associated with vertical friction. Assumes horizontal grid is C-grid. For aidif=1.0, this module does nothing since all vertical friction is instead handled implicitly in time, and this is computed in the velocity module. MOM only supports aidif==0.0 or aidif==1.0. MOM does not support cases with 0.0 < aidif < 1.0. Note that smf and bmf have units (kg/m^3)*(m^2/s^2) So the vertical diffusive fluxes must be in these units too. For this purpose, we multiply the viscosity by rho0. This is an approximation consistent with the Boussinesq approximation. For non-Boussinesq, we should be using the in situ rho. But to the level of accuracy that we know the vertical viscosity, and to the extent that the ocean density is close to rho0, our use of rho0 for the non-Boussinesq case is of minor consequence for vertical friction calculation. Note: use visc_cbt for both C-grid velocity components, even though the velocity components sit at different sides of the tracer cell. This choice is for simplicity. It also acknowledges that the alternative of introducing distinct visc_cbt_u and visc_cbt_v would presume knowledge of subgrid scale features that we really do not have. So again, visc_cbt is used for both u,v C-grid velocity components. Note: the form drag contribution to vertical viscosity must be handled within aidif=1.0 implicit vertical mixing. It is ignored in this routine, as its contribution would generally cause the model to be unstable. Note: if try to merge this routine with vert_friction_cgrid some machines and compilers will change bits by the mere introduction of extra if-test logic into the calculation. So we define the separate routines to maintain bit-wise agreement with older results, with bit-wise agreement a useful means to check for errors as the model evolves.


  13. vert_friction_implicit_bgrid

    DESCRIPTION
    Contributions to thickness weighted and density weighted acceleration from implicit vertical friction. Assume that the horizontal grid is B-grid. Note that smf and bmf have units N/m^2. These are the natural units for surface stress. To include these stresses as boundary terms in the call to invtri, it is necessary to use vertical viscosities with units (kg/m^3)*(m2^/s) = N/m^2. This is achieved by multiplying visc_cbu by rho0 when sent to invtri. For depth-like vertical coordinates, this is cancelled exactly by the rho0 in rho_dzu. For pressure-like vertical coordinates, the rho0*visc_cbu introduces a negligible change in the vertical viscosity that is well within uncertainty in this coefficient. Include visc_cbu_form_drag to each of the velocity components vertical friction. Note: if try to merge this routine with vert_friction_cgrid some machines and compilers will change bits by the mere introduction of extra if-test logic into the calculation. So we define the separate routines to maintain bit-wise agreement with older results, with bit-wise agreement a useful means to check for errors as the model evolves.


  14. vert_friction_implicit_cgrid

    DESCRIPTION
    Contributions to thickness weighted and density weighted acceleration from implicit vertical friction. Assume that the horizontal grid is C-grid. Note that smf and bmf have units N/m^2. These are the natural units for surface stress. To include these stresses as boundary terms in the call to invtri, it is necessary to use vertical viscosities with units (kg/m^3)*(m2^/s) = N/m^2. This is achieved by multiplying visc_cbu by rho0 when sent to invtri. For depth-like vertical coordinates, this is cancelled exactly by the rho0 in rho_dzu. For pressure-like vertical coordinates, the rho0*visc_cbu introduces a negligible change in the vertical viscosity that is well within uncertainty in this coefficient. Include visc_cbu_form_drag to each of the velocity components vertical friction. Note: if try to merge this routine with vert_friction_cgrid some machines and compilers will change bits by the mere introduction of extra if-test logic into the calculation. So we define the separate routines to maintain bit-wise agreement with older results, with bit-wise agreement a useful means to check for errors as the model evolves. Note: use visc_cbt for both C-grid velocity components, even though the velocity components sit at different sides of the tracer cell. This choice is for simplicity. It also acknowledges that the alternative of introducing distinct visc_cbt_u and visc_cbt_v would presume knowledge of subgrid scale features that we really do not have. So again, visc_cbt is used for both u,v C-grid velocity components.


  15. on_comp_domain

    DESCRIPTION
    Determine if the point is in comp-domain for the processor.


  16. invcosh

    DESCRIPTION
    Inverse cosh function. Argument must be >=1.


  17. vmix_min_dissipation

    DESCRIPTION
    Impose a floor to the dissipation arising from vertical tracer diffusion.


  18. watermass_diag

    DESCRIPTION
    Diagnose watermass transformation diagnostics for --sbc --bbc --vmix = diff_cbt + K33-implicit neutral diffusion Estimations of the contributions from diff_cbt alone, and from K33-implicit alone, are computed in vert_diffuse_watermass_diag. The diagnostic for vdiffuse computes all processes in one invtri call, which is actually how the model prognostically updates tracers from vertical diffusion. The sum of the sbc + bbc + vmix should equal to the full vdiffuse diagnostic, so that, for example, neut_rho_vdiffuse = neut_rho_sbc + neut_rho_bbc + neut_rho_vmix Additionally, we should have neut_rho_vmix = neut_rho_diff_cbt + neut_rho_k33 with the terms neut_rho_diff_cbt and neut_rho_k33 computed in routine vert_diffuse_watermass_diag. watermass_diag is called prior to implicit update of the tracer fields, so that the initial taup1 value contains only explicit in-time tendencies. The incremental tendencies are diagnosed in this routine by various calls to invtri using same methods as for the prognostic calculation. This routine requires the logical compute_watermass_diag=.true., which is determined inside watermass_diag_init.


  19. vert_diffuse_implicit_diag

    DESCRIPTION
    Diagnose contributions from time-implicit vertical diffusion. We perform the diagnostics using the taup1 value of the tracer concentration, obtained after performing the invtri step. The fluxes are diagnosed as if we are performing an explicit-time update, but using the taup1 values of the tracer concentrations. This diagnostic suffers from time truncation errors relative to the prognostic calculation, since the prognostic time update is performed using an invtri calculation. However, the errors are small. The alternative method, which is to separate the combined invtri step into individual physical mixing processes is not an option, since this step is not equivalent algorithmically to the single invtri mixing step. It is for this reason that we perform the diagnostic step using this "explicit flux computed with time-implicit computed concentration" approach. In contrast to the interior mixing, the boundary fluxes can be diagnostically split from the invtri step, as these fluxes are determined prior to the vert_diffuse_implicit routine. Hence, the boundary flux contributions can be diagnosed either by calling an invtri step passing just the stf and btf terms, or by using the even simpler methods in this subroutine.


  20. vert_diffuse_watermass_diag

    DESCRIPTION
    Diagnose contributions from time-implicit vertical diffusion acting on watermasses from diff_cbt and k33. We perform the diagnostics using the taup1 value of the tracer concentration, obtained after performing the invtri step. The fluxes are diagnosed as if we are performing an explicit-time update, but using the taup1 values of the tracer concentrations. This diagnostic suffers from time truncation errors relative to the prognostic calculation, since the prognostic time update is performed using an invtri calculation. However, the errors are small. The alternative method, which is to separate the combined invtri step into individual physical mixing processes is not an option, since this step is not equivalent algorithmically to the single invtri mixing step. It is for this reason that we perform the diagnostic step using this "explicit flux computed with time-implicit computed concentration" approach.


  21. ocean_vert_mix_restart

    DESCRIPTION
    Write out restart files registered through register_restart_file


  22. ocean_vert_mix_end

    DESCRIPTION
    Chen Scheme requires output of Krauss mixed layer for reproducible results. GOTM requires fields for advection tendency.



NAMELIST

&ocean_vert_mix_nml

debug_this_module
For debugging purposes.
[logical]
aidif
aidif=1 for implicit in time solution of the vertical mixing equation. aidif=0 for explicit in time solution of the vertical mixing equation. semi-implicit method with 0 < aidif < 1 is not fully supported in MOM.
[real]
use_explicit_vert_diffuse
Must be true to use time-explicit vertical tracer diffusion.
[logical]
verbose_init
For verbose writes during initialization.
[logical]
vert_mix_scheme
To determine the vertical mixing scheme: "const", "kpp", "kpp_mom4p0","kpp_mom4p1", "chen", "pp", or "gotm".
[character]
vert_diff_back_via_max
If .true. then include a static background diffusivity via the max function, as used in mom4p0d. The alternative is via simply adding the background to the diffusivity obtained via other approaches. This option remains for legacy. Default is vert_diff_back_via_max=.true.
[logical]
vert_visc_back
If .true. then include a static depth dependent vertical viscosity which is used only if running w/ constant vertical viscosity scheme. Standard application is when have a model with fine vertical resolution, yet no mixed layer scheme. Wind stress must be spread deeper than the top cell, or the model may go unstable, or at the least it will produce spuriously large vertical shears.
[logical]
visc_cbu_back_max
For use in setting background vertical viscosity.
[real, units: m^2/sec]
visc_cbu_back_min
For use in setting background vertical viscosity.
[real, units: m^2/sec]
visc_cbu_back_zmid
Mid-point of tanh function used to define background vertical viscosity.
[real, units: m]
visc_cbu_back_zwid
Width of tanh function used to define background vertical viscosity.
[real, units: m]
diff_cbt_tanh
For enabling tanh background vertical diffusivity profile. Default diff_cbt_tanh=.false.
[logical]
diff_cbt_tanh_max
For use in setting background vertical diffusivity. Default diff_cbt_tanh_max=1e-3.
[real, units: m^2/sec]
diff_cbt_tanh_min
For use in setting background vertical diffusivity. Default diff_cbt_tanh_min=2e-5.
[real, units: m^2/sec]
diff_cbt_tanh_zmid
Mid-point of tanh function used to define background vertical diffusivity. Default diff_cbt_tanh_zmid=150.0.
[real, units: m]
diff_cbt_tanh_zwid
Width of tanh function used to define background vertical diffusivity. Default diff_cbt_tanh_zwid=30.0.
[real, units: m]
hwf_diffusivity
3D background diffusivity which gets smaller in equatorial region. Based on the work of Henyey etal (1986). This scheme should NOT be used if Bryan-Lewis is used. Default hwf_diffusivity=.false.
[logical]
hwf_diffusivity_3d
3D background diffusivity which gets smaller in equatorial region. Based on the work of Henyey etal (1986). This form has not been used much at GFDL, with preference given to a simpler two-dimensional (depth independent) form assessed with the default hwf_diffusivity_3d=.false.
[logical]
hwf_depth_transition
Depth of transition for hwf scheme. The HWF method actually has no depth dependence. But we include the atan depth dependency from Bryan-Lewis, for those cases where we wish to replace Bryan-Lewis with the HWF scheme. To get the usual Bryan-Lewis transition, set hwf_depth_transition=2500.0. However, since we often use hwf in the presence of tide mixing, we do not wish to have any depth dependence, in which case the default is hwf_depth_transition=2500.0e4.
[real, units: m]
hwf_min_diffusivity
Minimum diffusivity for the HWF scheme. Default hwf_min_diffusivity=2e-6.
[real, units: m^2/sec]
hwf_30_diffusivity
Diffusivity at 30deg latitude for the HWF scheme. Default hwf_30_diffusivity=2e-5.
[real, units: m^2/sec]
hwf_N0_2Omega
Ratio of the typical Buoyancy frequency to twice the earth's rotation period. Default hwf_N0_2Omega=20.0.
[real, units: dimensionless]
bryan_lewis_diffusivity
If .true. then add a Bryan-Lewis background to the diffusivity. This background is a time-independent function of depth. This diffusivity is NOT used when have use_pp_vert_mix_coeff=.true. This scheme should NOT be used if HWF is used.
[logical]
bryan_lewis_lat_depend
If .true. then allow for Bryan-Lewis background to be different outside of a tropical band than inside the band.
[logical]
bryan_lewis_lat_transition
North/South latitude where transition from Bryan-Lewis values in the tropic to those in the higher latitudes.
[real]
afkph_90, dfkph_90, sfkph_90, zfkph_90
Parameters setting the Bryan-Lewis vertical diffusivity profile. When use bryan_lewis_lat_depend, these are the values used in the pole.
[real, units: dimensionless]
afkph_00, dfkph_00, sfkph_00, zfkph_00
Parameters setting the Bryan-Lewis vertical diffusivity profile in the tropics. When use bryan_lewis_lat_depend=.true. , these are the values used in the tropics. When use bryan_lewis_lat_depend=.false., these are the values used globally.
[real, units: dimensionless]
use_diff_cbt_table
If .true., then read in a table that specifies (i,j,ktop-->kbottom) and the diffusivity. This method is useful when aiming to mix vertically at points where do cross-land insertion or where may wish to enhance mixing at river mouths.
[logical]
linear_taper_diff_cbt_table
If .true., then linear taper the diff_cbt_table value from so that it gets smaller with depth.
[logical]
vmix_rescale_nonbouss
To rescale the vertical mixing coefficients by rho0/rho in order to bring the effects from vertical diffusion in a non-Boussinesq model more in line with that from a Boussinesq model. Default vmix_rescale_nonbouss=.false.
[logical]
vmix_set_min_dissipation
To set a minimum dissipation rate. This scheme will compute the dissipation from the full diffusivity. If the resulting dissipation is smaller than a specified dissipation, then the diffusivity will be locally increased so that the min dissipation is maintained. Default vmix_set_min_dissipation=.false.
[logical]
vmix_min_diss_const
Minimum dissipation rate as a constant. Default vmix_min_diss_const=1e-7.
[real, units: W/m^3]
vmix_min_diss_bvfreq_scale
Scaling use to set the minimum dissipation rate as determined by the local stratification. Default vmix_min_diss_bvfreq_scale=6e-4.
[real, units: J/m^3]
vmix_min_diss_flux_ri_max
Maximum flux Richardson number for computation of diffusivity from dissipation. Default vmix_min_diss_flux_ri_max=0.2.
[real, units: dimensionless]


REFERENCES

  1. Kirk Bryan and L.J. Lewis A water mass model of the world ocean Journal of Geophysical Research (1979) vol 84, pages 2503--2517
  2. Elements of MOM (2012) S.M. Griffies
  3. Henyey, F.S., J. Wright, and S.M. Flatte, 1986: Energy and action flow through the internal wave field: an eikonal approach. Journal of Geophysical Research, {\bf 91}, Issue C7, 8487--8496.


NOTES

The Bryan-Lewis vertical diffusivity is small in the upper ocean and increases with depth according to an inverse tangent profile. The default values are from roughly 0.05e-5 m^2/sec to roughly 1.0e-4 m^2/sec. Latitudinally dependent Bryan-Lewis values are available.


top