Warning, /doc/phys_pkgs/kl10.rst is written in an unsupported language. File is not indexed.
view on githubraw file Latest commit 0bad585a on 2022-02-16 18:55:09 UTC
8679f9097b Jeff*0001 .. _sub_phys_pkg_kl10:
0002
0003 KL10: Vertical Mixing Due to Breaking Internal Waves
0004 ----------------------------------------------------
0005
0006
0007 (in directory: *pkg/kl10/*)
0008
0009 Authors: Jody M. Klymak
0010
0011 .. _ssub_phys_pkg_kl10_intro:
0012
0013 Introduction
0014 ++++++++++++
0015
0016 The :cite:`klymaklegg10` parameterization for breaking internal waves is meant to represent
0017 mixing in the ocean “interior” due to convective instability. Many
0018 mixing schemes in the presence of unstable stratification simply turn on
0019 an arbitrarily large diffusivity and viscosity in the overturning
0020 region. This assumes the fluid completely mixes, which is probably not a
0021 terrible assumption, but it also makes estimating the turbulence
0022 dissipation rate in the overturning region meaningless.
0023
0024 The KL10 scheme overcomes this limitation by estimating the viscosity
0025 and diffusivity from a combination of the Ozmidov relation and the
0026 Osborn relation, assuming a turbulent Prandtl number of one. The Ozmidov
0027 relation says that outer scale of turbulence in an overturn will scale
0028 with the strength of the turbulence :math:`\epsilon`, and the
0029 stratification :math:`N`, as
0030
0031 .. math::
0032 :label: eq-pkg-kl10-Lo
0033
0034 L_O^2 \approx \epsilon N^{-3}.
0035
0036 The Osborn relation relates the strength of the dissipation to the
0037 vertical diffusivity as
0038
0039 .. math:: K_{v}=\Gamma \epsilon N^{-2},
0040
0041 where :math:`\Gamma\approx 0.2` is the mixing ratio of buoyancy flux to
0042 thermal dissipation due to the turbulence. Combining the two gives us
0043
0044 .. math:: K_{v} \approx \Gamma L_O^2 N.
0045
0046 The ocean turbulence community often approximates the Ozmidov scale by
0047 the root-mean-square of the Thorpe displacement, :math:`\delta_z`, in an
0048 overturn :cite:`thorpe77`. The Thorpe displacement is the distance one would have to
0049 move a water parcel for the water column to be stable, and is readily
0050 measured in a measured profile by sorting the profile and tracking how
0051 far each parcel moves during the sorting procedure. This method gives an
0052 imperfect estimate of the turbulence, but it has been found to agree on
0053 average over a large range of overturns :cite:`wesson94,seimgregg94,moum96`.
0054
0055 The algorithm coded here is a slight simplification of the usual Thorpe
0056 method for estimating turbulence in overturning regions. Usually,
0057 overturns are identified and :math:`N` is averaged over the overturn.
0058 Here, instead we estimate
0059
0060 .. math:: K_{v}(z) \approx \Gamma \delta_z^2\, N_s(z).
0061
0062 where :math:`N_s(z)` is the local sorted stratification. This saves
0063 complexity in the code and adds a slight inaccuracy, but we don’t
0064 believe is biased.
0065
0066 We assume a turbulent Prandtl number of 1, so :math:`A_v=K_{v}`.
0067
0068 We also calculate and output a turbulent dissipation from this scheme.
0069 We do not simply evaluate the overturns for :math:`\epsilon` using
8586b5df8e Mart*0070 :eq:`eq-pkg-kl10-Lo`. Instead we compute the vertical shear terms that the
8679f9097b Jeff*0071 viscosity is acting on:
0072
0bad585a21 Navi*0073 .. math:: \epsilon_v = A_v \left[ \left(\partial_z u \right)^2 + \left( \frac{\partial u}{\partial z} \right)^2 \right].
8679f9097b Jeff*0074
0075 There are straightforward caveats to this approach, covered in :cite:`klymaklegg10`.
0076
0077 - If your resolution is too low to resolve the breaking internal waves,
0078 you won’t have any turbulence.
0079
0080 - If the model resolution is too high, the estimates of
0081 :math:`\epsilon_v` will start to be exaggerated, particularly if the
0082 run in non-hydrostatic. That is because there will be significant
0083 shear at small scales that represents the turbulence being
0084 parameterized in the scheme. At very high resolutions direct
0085 numerical simulation or more sophisticated large-eddy schemes should
0086 be used.
0087
0088 - We find that grid cells of approximately 10 to 1 aspect ratio are a
0089 good rule of thumb for achieving good results are usual oceanic
0090 scales. For a site like the Hawaiian Ridge, and Luzon Strait, this
0091 means 10-m vertical resolusion and approximately 100-m horizontal.
0092 The 10-m resolution can be relaxed if the stratification drops, and
0093 we often WKB-stretch the grid spacing with depth.
0094
0095 - The dissipation estimate is useful for pinpoiting the location of
0096 turbulence, but again, is grid size dependent to some extent, and
0097 should be treated with a grain of salt. It will also not include any
0098 numerical dissipation such as you may find with higher order
0099 advection schemes.
0100
0101
0102 .. _ssub_phys_pkg_kl10_comp:
0103
8586b5df8e Mart*0104 KL10 configuration and compiling
8679f9097b Jeff*0105 ++++++++++++++++++++++++++++++++
0106
0107 As with all MITgcm packages, KL10 can be turned on or off at compile
0108 time
0109
0110 - using the ``packages.conf`` file by adding ``kl10`` to it,
0111
0112 - or using ``genmake2`` adding ``-enable=kl10`` or ``-disable=kl10``
0113 switches
0114
0115 - *Required packages and CPP options:*
0116 No additional packages are required.
0117
0118 (see Section [sec:buildingCode]).
0119
0120 KL10 has no compile-time options (``KL10_OPTIONS.h`` is empty).
0121
0122
0123 .. _ssub_phys_pkg_kl10_runtime:
0124
0125 Run-time parameters
0126 +++++++++++++++++++
0127
0128 Run-time parameters are set in files ``data.pkg`` and ``data.kl10``
0129 which are read in ``kl10_readparms.F``. Run-time parameters may be
0130 broken into 3 categories: (i) switching on/off the package at runtime,
0131 (ii) required MITgcm flags, (iii) package flags and parameters.
0132
0133 Enabling the package
0134 ####################
0135
0136 The KL10 package is switched on at runtime by setting
0137 ``useKL10 = .TRUE.`` in ``data.pkg``.
0138
0139 Required MITgcm flags
0140 #####################
0141
0142 The following flags/parameters of the MITgcm dynamical kernel need to
0143 be set in conjunction with KL10:
0144
0145 +----------------------------------+--------------------------------------+
0146 | ``implicitViscosity = .TRUE.`` | enable implicit vertical viscosity |
0147 +----------------------------------+--------------------------------------+
0148 | ``implicitDiffusion = .TRUE.`` | enable implicit vertical diffusion |
0149 +----------------------------------+--------------------------------------+
0150
0151 Package flags and parameters
0152 ############################
0153
0154 :numref:`tab_phys_pkg_kl10_runtime` summarizes the runtime
0155 flags that are set in ``data.kl10``, and their default values.
0156
0157
0158 .. table:: KL10 runtime parameters.
0159 :name: tab_phys_pkg_kl10_runtime
0160
0161 +----------------------+---------------------------------+----------------------------------------------+
0162 | **Flag/parameter** | **default** | **Description** |
0163 +======================+=================================+==============================================+
0164 | KLviscMax | 300\ m\ :sup:`2` s\ :sup:`--1` | Maximum viscosity the scheme will ever give |
0165 | | | (useful for stability) |
0166 +----------------------+---------------------------------+----------------------------------------------+
0167 | KLdumpFreq | ``dumpFreq`` | Dump frequency of KL10 field snapshots |
0168 +----------------------+---------------------------------+----------------------------------------------+
0169 | KLtaveFreq | ``taveFreq`` | Averaging and dump frequency of KL10 fields |
0170 +----------------------+---------------------------------+----------------------------------------------+
0171 | KLwriteState | ``.FALSE.`` | write KL10 state to file |
0172 +----------------------+---------------------------------+----------------------------------------------+
0173
0174 .. _ssub_phys_pkg_kl10_equations:
0175
0176 Equations and key routines
0177 ++++++++++++++++++++++++++
0178
0179 KL10_CALC:
0180 ###########
0181
0182 Top-level routine. Calculates viscosity and diffusivity on the grid cell
0183 centers. Note that the runtime parameters ``viscAz`` and ``diffKzT`` act
0184 as minimum viscosity and diffusivities. So if there are no overturns (or
0185 they are weak) then these will be returned.
0186
0187 KL10_CALC_VISC:
0188 ###############
0189
0190 Calculates viscosity on the W and S grid faces for U and V respectively.
0191
0192 KL10_CALC_DIFF:
0193 ###############
0194
0195 Calculates the added diffusion from KL10.
0196
0197 .. _ssub_phys_pkg_kl10_diagnostics:
0198
0199 KL10 diagnostics
0200 ++++++++++++++++
0201
0202 Diagnostics output is available via the diagnostics package (see Section
0203 [sec:pkg:diagnostics]). Available output fields are summarized here:
0204
0205 ::
0206
0207 ------------------------------------------------------
0208 <-Name->|Levs|grid|<-- Units -->|<- Tile (max=80c)
0209 ------------------------------------------------------
0210 KLviscAr| Nr |SM |m^2/s |KL10 vertical eddy viscosity coefficient
0211 KLdiffKr| Nr |SM |m^2/s |Vertical diffusion coefficient for salt, temperature, & tracers
0212 KLeps | Nr |SM |m^3/s^3 |Turbulence dissipation estimate.
0213
0214
0215 .. _ssub_phys_pkg_kl10_examples:
0216
0217
0218 References
0219 ++++++++++
0220
0221 Klymak and Legg, 2010, *Oc.Modell.*.
0222
0223
0224 Experiments and tutorials that use KL10
0225 +++++++++++++++++++++++++++++++++++++++
0226
0227 - Modified Internal Wave experiment, in internal_wave verification
0228 directory