Issuing rollback() due to DESTROY without explicit disconnect() of DBD::mysql::db handle dbname=MITgcm at /usr/local/share/lxr/lib/LXR/Common.pm line 1224.
Last-Modified: Sun, 4 Apr 2026 05:09:28 GMT
Content-Type: text/html; charset=utf-8
MITgcm/MITgcm/doc/algorithm/algorithm.rst
4f2617d475 Jeff*0001 .. _discret_algorithm:
00020003 Discretization and Algorithm
0004 ****************************
00050006 This chapter lays out the numerical schemes that are employed in the
0007 core MITgcm algorithm. Whenever possible links are made to actual
0008 program code in the MITgcm implementation. The chapter begins with a
0009 discussion of the temporal discretization used in MITgcm. This
0010 discussion is followed by sections that describe the spatial
0011 discretization. The schemes employed for momentum terms are described
0012 first, afterwards the schemes that apply to passive and dynamically
0013 active tracers are described.
00140015 Notation
0016 ========
00170018 Because of the particularity of the vertical direction in stratified
0019 fluid context, in this chapter, the vector notations are mostly used for
0020 the horizontal component: the horizontal part of a vector is simply
0bad585a21 Navi*0021 written :math:`\vec{\bf v}` (instead of :math:`{{\bf v}_h}` or
4f2617d475 Jeff*0022 :math:`\vec{\mathbf{v}}_{h}` in chapter 1) and a 3D vector is simply
0023 written :math:`\vec{v}` (instead of :math:`\vec{\mathbf{v}}` in chapter
0024 1).
00250026 The notations we use to describe the discrete formulation of the model
0027 are summarized as follows.
00280029 General notation:
00300031 | :math:`\Delta x, \Delta y, \Delta r` grid spacing in X, Y, R directions
0032 |
0033 | :math:`A_c,A_w,A_s,A_{\zeta}` : horizontal area of a grid cell surrounding :math:`\theta,u,v,\zeta` point
0034 |
0035 | :math:`{\cal V}_u , {\cal V}_v , {\cal V}_w , {\cal V}_\theta` : Volume of the grid box surrounding :math:`u,v,w,\theta` point
0036 |
0037 | :math:`i,j,k` : current index relative to X, Y, R directions
0038 |
00390040 Basic operators:
00410042 | :math:`\delta_i` :
0043 :math:`\delta_i \Phi = \Phi_{i+1/2} - \Phi_{i-1/2}`
0044 |
0045 | :math:`~^{-i}` :
0046 :math:`\overline{\Phi}^i = ( \Phi_{i+1/2} + \Phi_{i-1/2} ) / 2`
0047 |
0048 | :math:`\delta_x` :
0049 :math:`\delta_x \Phi = \frac{1}{\Delta x} \delta_i \Phi`
0050 |
0bad585a21 Navi*0051 | :math:`\overline{ \nabla }` = horizontal gradient operator :
0052 :math:`\overline{ \nabla } \Phi = \{ \delta_x \Phi , \delta_y \Phi \}`
4f2617d475 Jeff*0053 |
0bad585a21 Navi*0054 | :math:`\overline{ \nabla } \cdot` = horizontal divergence operator :
ab47de63dc Mart*0055 :math:`\overline{ \nabla }\cdot \vec{\mathrm{{\bf f}}} =
0056 \dfrac{1}{\cal A} \{ \delta_i \Delta y \, \mathrm{f}_x
4f2617d475 Jeff*0057 + \delta_j \Delta x \, \mathrm{f}_y \}`
0058 |
0059 | :math:`\overline{\nabla}^2` = horizontal Laplacian operator :
ab47de63dc Mart*0060 :math:`\overline{\nabla}^2 \Phi =
0bad585a21 Navi*0061 \overline{ \nabla } \cdot \overline{ \nabla } \Phi`
4f2617d475 Jeff*0062 |
006368aadaa6bd Phob*0064 .. _time_stepping:
00654f2617d475 Jeff*0066 Time-stepping
0067 =============
00680069 The equations of motion integrated by the model involve four prognostic
0070 equations for flow, :math:`u` and :math:`v`, temperature,
0071 :math:`\theta`, and salt/moisture, :math:`S`, and three diagnostic
0072 equations for vertical flow, :math:`w`, density/buoyancy,
0bad585a21 Navi*0073 :math:`\rho`/:math:`b`, and pressure/geo-potential, :math:`\phi_{\rm hyd}`.
4f2617d475 Jeff*0074 In addition, the surface pressure or height may by described by either a
0075 prognostic or diagnostic equation and if non-hydrostatics terms are
0076 included then a diagnostic equation for non-hydrostatic pressure is also
0077 solved. The combination of prognostic and diagnostic equations requires
0078 a model algorithm that can march forward prognostic variables while
0079 satisfying constraints imposed by diagnostic equations.
00800081 Since the model comes in several flavors and formulation, it would be
0082 confusing to present the model algorithm exactly as written into code
0083 along with all the switches and optional terms. Instead, we present the
0084 algorithm for each of the basic formulations which are:
00850086 #. the semi-implicit pressure method for hydrostatic equations with a
0087 rigid-lid, variables co-located in time and with Adams-Bashforth
ab47de63dc Mart*0088 time-stepping;
4f2617d475 Jeff*00890090 #. as 1 but with an implicit linear free-surface;
00910092 #. as 1 or 2 but with variables staggered in time;
00930094 #. as 1 or 2 but with non-hydrostatic terms included;
00950096 #. as 2 or 3 but with non-linear free-surface.
00970098 In all the above configurations it is also possible to substitute the
0099 Adams-Bashforth with an alternative time-stepping scheme for terms
0100 evaluated explicitly in time. Since the over-arching algorithm is
0101 independent of the particular time-stepping scheme chosen we will
0102 describe first the over-arching algorithm, known as the pressure method,
0103 with a rigid-lid model in :numref:`press_meth_rigid`. This
0104 algorithm is essentially unchanged, apart for some coefficients, when
0105 the rigid lid assumption is replaced with a linearized implicit
0106 free-surface, described in :numref:`press_meth_linear`. These two flavors of the
0107 pressure-method encompass all formulations of the model as it exists
0108 today. The integration of explicit in time terms is out-lined in
0109 :numref:`adams-bashforth` and put into the context of the overall algorithm
0110 in :numref:`adams-bashforth-sync` and :numref:`adams-bashforth-staggered`.
0111 Inclusion of non-hydrostatic terms
0112 requires applying the pressure method in three dimensions instead of two
0113 and this algorithm modification is described in
0114 :numref:`non-hydrostatic`. Finally, the free-surface equation may be treated
0115 more exactly, including non-linear terms, and this is described in
0116 :numref:`nonlinear-freesurface`.
01170118 .. _press_meth_rigid:
ab47de63dc Mart*01194f2617d475 Jeff*0120 Pressure method with rigid-lid
0121 ==============================
01220123 The horizontal momentum and continuity equations for the ocean
0124 (:eq:`eq-ocean-mom` and :eq:`eq-ocean-cont`), or for the atmosphere
0125 (:eq:`atmos-mom` and :eq:`atmos-cont`), can be summarized by:
01260127 .. math::
01280129 \begin{aligned}
0bad585a21 Navi*0130 \partial_t u + g \partial_x \eta & = G_u \\
0131 \partial_t v + g \partial_y \eta & = G_v \\
0132 \partial_x u + \partial_y v + \partial_z w & = 0\end{aligned}
4f2617d475 Jeff*01330134 where we are adopting the oceanic notation for brevity. All terms in
0135 the momentum equations, except for surface pressure gradient, are
0136 encapsulated in the :math:`G` vector. The continuity equation, when
0137 integrated over the fluid depth, :math:`H`, and with the rigid-lid/no
0138 normal flow boundary conditions applied, becomes:
01390140 .. math::
0141 \partial_x H \widehat{u} + \partial_y H \widehat{v} = 0
0142 :label: rigid-lid-continuity
01430144 Here, :math:`H\widehat{u} = \int_H u dz` is the depth integral of
0145 :math:`u`, similarly for :math:`H\widehat{v}`. The rigid-lid
0146 approximation sets :math:`w=0` at the lid so that it does not move but
0147 allows a pressure to be exerted on the fluid by the lid. The horizontal
0148 momentum equations and vertically integrated continuity equation are be
0149 discretized in time and space as follows:
01500151 .. math::
0152 u^{n+1} + \Delta t g \partial_x \eta^{n+1}
0153 = u^{n} + \Delta t G_u^{(n+1/2)}
0154 :label: discrete-time-u
01550156 .. math::
0157 v^{n+1} + \Delta t g \partial_y \eta^{n+1}
0158 = v^{n} + \Delta t G_v^{(n+1/2)}
0159 :label: discrete-time-v
01600161 .. math::
0162 \partial_x H \widehat{u^{n+1}}
0163 + \partial_y H \widehat{v^{n+1}} = 0
0164 :label: discrete-time-cont-rigid-lid
01650166 As written here, terms on the LHS all involve time level :math:`n+1`
0167 and are referred to as implicit; the implicit backward time stepping
0168 scheme is being used. All other terms in the RHS are explicit in time.
0169 The thermodynamic quantities are integrated forward in time in parallel
0170 with the flow and will be discussed later. For the purposes of
0171 describing the pressure method it suffices to say that the hydrostatic
0172 pressure gradient is explicit and so can be included in the vector
0173 :math:`G`.
01740bad585a21 Navi*0175 Substituting the two momentum equations into the depth-integrated
4f2617d475 Jeff*0176 continuity equation eliminates :math:`u^{n+1}` and :math:`v^{n+1}`
0177 yielding an elliptic equation for :math:`\eta^{n+1}`. Equations
0178 :eq:`discrete-time-u`, :eq:`discrete-time-v` and
0179 :eq:`discrete-time-cont-rigid-lid` can then be re-arranged as follows:
01800181 .. math:: u^{*} = u^{n} + \Delta t G_u^{(n+1/2)}
0182 :label: ustar-rigid-lid
01830184 .. math:: v^{*} = v^{n} + \Delta t G_v^{(n+1/2)}
0185 :label: vstar-rigid-lid
01860187 .. math:: \partial_x \Delta t g H \partial_x \eta^{n+1}
0188 + \partial_y \Delta t g H \partial_y \eta^{n+1}
0189 = \partial_x H \widehat{u^{*}}
ab47de63dc Mart*0190 + \partial_y H \widehat{v^{*}}
4f2617d475 Jeff*0191 :label: elliptic
01920193 .. math:: u^{n+1} = u^{*} - \Delta t g \partial_x \eta^{n+1}
0194 :label: un+1-rigid-lid
01950196 .. math:: v^{n+1} = v^{*} - \Delta t g \partial_y \eta^{n+1}
0197 :label: vn+1-rigid-lid
01980199 Equations :eq:`ustar-rigid-lid` to :eq:`vn+1-rigid-lid`, solved
0200 sequentially, represent the pressure method algorithm used in the model.
0201 The essence of the pressure method lies in the fact that any explicit
0202 prediction for the flow would lead to a divergence flow field so a
0203 pressure field must be found that keeps the flow non-divergent over each
0204 step of the integration. The particular location in time of the pressure
0205 field is somewhat ambiguous; in :numref:`pressure-method-rigid-lid` we
0206 depicted as co-located with the future flow field (time level
0207 :math:`n+1`) but it could equally have been drawn as staggered in time
0208 with the flow.
02090210 .. figure:: figs/pressure-method-rigid-lid.*
0211 :width: 70%
0212 :align: center
0213 :alt: pressure-method-rigid-lid
0214 :name: pressure-method-rigid-lid
02150216 A schematic of the evolution in time of the pressure method algorithm. A prediction for the flow variables at time level :math:`n+1` is made based only on the explicit terms, :math:`G^{(n+^1/_2)}`, and denoted :math:`u^*`, :math:`v^*`. Next, a pressure field is found such that :math:`u^{n+1}`, :math:`v^{n+1}` will be non-divergent. Conceptually, the :math:`*` quantities exist at time level :math:`n+1` but they are intermediate and only temporary.
021702180219 The correspondence to the code is as follows:
02200221 - the prognostic phase, equations :eq:`ustar-rigid-lid` and
0222 :eq:`vstar-rigid-lid`, stepping forward :math:`u^n` and :math:`v^n` to
0223 :math:`u^{*}` and :math:`v^{*}` is coded in :filelink:`timestep.F <model/src/timestep.F>`
02240225 - the vertical integration, :math:`H \widehat{u^*}` and :math:`H
0226 \widehat{v^*}`, divergence and inversion of the elliptic operator in
0227 equation :eq:`elliptic` is coded in :filelink:`solve_for_pressure.F <model/src/solve_for_pressure.F>`
02280229 - finally, the new flow field at time level :math:`n+1` given by
0230 equations :eq:`un+1-rigid-lid` and :eq:`vn+1-rigid-lid` is calculated
0231 in :filelink:`correction_step.F <model/src/correction_step.F>`
02320233 The calling tree for these routines is as follows:
02340235 .. _call-tree-press-meth:
02360237 .. admonition:: Pressure method calling tree
0238 :class: note
02390240 | :filelink:`FORWARD\_STEP <model/src/forward_step.F>`
0241 | :math:`\phantom{W}` :filelink:`DYNAMICS <model/src/dynamics.F>`
0242 | :math:`\phantom{WW}` :filelink:`TIMESTEP <model/src/timestep.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxxxxxx}` :math:`u^*,v^*` :eq:`ustar-rigid-lid` , :eq:`vstar-rigid-lid`
0243 | :math:`\phantom{W}` :filelink:`SOLVE\_FOR\_PRESSURE <model/src/solve_for_pressure.F>`
0244 | :math:`\phantom{WW}` :filelink:`CALC\_DIV\_GHAT <model/src/calc_div_ghat.F>` :math:`\phantom{xxxxxxxxxxxxxxxx}` :math:`H\widehat{u^*},H\widehat{v^*}` :eq:`elliptic`
0245 | :math:`\phantom{WW}` :filelink:`CG2D <model/src/cg2d.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxxxxxxxxxx}` :math:`\eta^{n+1}` :eq:`elliptic`
0246 | :math:`\phantom{W}` :filelink:`MOMENTUM\_CORRECTION\_STEP <model/src/momentum_correction_step.F>`
0247 | :math:`\phantom{WW}` :filelink:`CALC\_GRAD\_PHI\_SURF <model/src/calc_grad_phi_surf.F>` :math:`\phantom{xxxxxxxxxx}` :math:`\nabla \eta^{n+1}`
0248 | :math:`\phantom{WW}` :filelink:`CORRECTION\_STEP <model/src/correction_step.F>` :math:`\phantom{xxxxxxxxxxxxw}` :math:`u^{n+1},v^{n+1}` :eq:`un+1-rigid-lid` , :eq:`vn+1-rigid-lid`
02490250 In general, the horizontal momentum time-stepping can contain some terms
0251 that are treated implicitly in time, such as the vertical viscosity when
0bad585a21 Navi*0252 using the backward time-stepping scheme (:varlink:`implicitViscosity` ``=.TRUE.``). The method used to solve
4f2617d475 Jeff*0253 those implicit terms is provided in :numref:`implicit-backward-stepping`, and modifies equations
0254 :eq:`discrete-time-u` and :eq:`discrete-time-v` to give:
02550256 .. math::
02570258 \begin{aligned}
0259 u^{n+1} - \Delta t \partial_z A_v \partial_z u^{n+1}
0bad585a21 Navi*0260 + \Delta t g \partial_x \eta^{n+1} & = u^{n} + \Delta t G_u^{(n+1/2)}
4f2617d475 Jeff*0261 \\
0262 v^{n+1} - \Delta t \partial_z A_v \partial_z v^{n+1}
0bad585a21 Navi*0263 + \Delta t g \partial_y \eta^{n+1} & = v^{n} + \Delta t G_v^{(n+1/2)}\end{aligned}
4f2617d475 Jeff*026402650266 .. _press_meth_linear:
02670268 Pressure method with implicit linear free-surface
0269 =================================================
02700271 The rigid-lid approximation filters out external gravity waves
0272 subsequently modifying the dispersion relation of barotropic Rossby
0273 waves. The discrete form of the elliptic equation has some zero
0274 eigenvalues which makes it a potentially tricky or inefficient problem
0275 to solve.
02760277 The rigid-lid approximation can be easily replaced by a linearization of
0278 the free-surface equation which can be written:
02790280 .. math::
94151a9b18 Jeff*0281 \partial_t \eta + \partial_x H \widehat{u} + \partial_y H \widehat{v} = {\mathcal{P-E+R}}
4f2617d475 Jeff*0282 :label: linear-free-surface=P-E
02830bad585a21 Navi*0284 which differs from the depth-integrated continuity equation with
0285 rigid-lid :eq:`rigid-lid-continuity` by the time-dependent term and
4f2617d475 Jeff*0286 fresh-water source term.
02870288 Equation :eq:`discrete-time-cont-rigid-lid` in the rigid-lid pressure
0289 method is then replaced by the time discretization of
0290 :eq:`linear-free-surface=P-E` which is:
02910292 .. math::
0293 \eta^{n+1}
0294 + \Delta t \partial_x H \widehat{u^{n+1}}
0295 + \Delta t \partial_y H \widehat{v^{n+1}}
94151a9b18 Jeff*0296 = \eta^{n} + \Delta t ( {\mathcal{P-E}})
4f2617d475 Jeff*0297 :label: discrete-time-backward-free-surface
02980299 where the use of flow at time level :math:`n+1` makes the method
0300 implicit and backward in time. This is the preferred scheme since it
0301 still filters the fast unresolved wave motions by damping them. A
d4a066fa68 Jean*0302 centered scheme, such as Crank-Nicolson (see
4f2617d475 Jeff*0303 :numref:`crank-nicolson_baro`), would alias the energy of the fast modes onto
0304 slower modes of motion.
03050306 As for the rigid-lid pressure method, equations :eq:`discrete-time-u`,
0307 :eq:`discrete-time-v` and :eq:`discrete-time-backward-free-surface` can be
0308 re-arranged as follows:
03090310 .. math::
0311 u^{*} = u^{n} + \Delta t G_u^{(n+1/2)}
0312 :label: ustar-backward-free-surface
03130314 .. math::
0315 v^{*} = v^{n} + \Delta t G_v^{(n+1/2)}
0316 :label: vstar-backward-free-surface
03170318 .. math::
0bad585a21 Navi*0319 \eta^* = \epsilon_{\rm fs} ( \eta^{n} + \Delta t ({\mathcal{P-E}}) )
4f2617d475 Jeff*0320 - \Delta t ( \partial_x H \widehat{u^{*}}
0321 + \partial_y H \widehat{v^{*}} )
0322 :label: etastar-backward-free-surface
03230324 .. math::
0325 \partial_x g H \partial_x \eta^{n+1}
0326 + \partial_y g H \partial_y \eta^{n+1}
0bad585a21 Navi*0327 - \frac{\epsilon_{\rm fs} \eta^{n+1}}{\Delta t^2} =
4f2617d475 Jeff*0328 - \frac{\eta^*}{\Delta t^2}
0329 :label: elliptic-backward-free-surface
03300331 .. math::
0332 u^{n+1} = u^{*} - \Delta t g \partial_x \eta^{n+1}
0333 :label: un+1-backward-free-surface
03340335 .. math::
0336 v^{n+1} = v^{*} - \Delta t g \partial_y \eta^{n+1}
0337 :label: vn+1-backward-free-surface
03380339 Equations :eq:`ustar-backward-free-surface`
0340 to :eq:`vn+1-backward-free-surface`, solved sequentially, represent the
0341 pressure method algorithm with a backward implicit, linearized free
0342 surface. The method is still formerly a pressure method because in the
0343 limit of large :math:`\Delta t` the rigid-lid method is recovered.
0344 However, the implicit treatment of the free-surface allows the flow to
0345 be divergent and for the surface pressure/elevation to respond on a
0346 finite time-scale (as opposed to instantly). To recover the rigid-lid
dcaaa42497 Jeff*0347 formulation, we use a switch-like variable,
0bad585a21 Navi*0348 :math:`\epsilon_{\rm fs}` (:varlink:`freesurfFac`), which selects between the free-surface and
0349 rigid-lid; :math:`\epsilon_{\rm fs}=1` allows the free-surface to evolve;
0350 :math:`\epsilon_{\rm fs}=0` imposes the rigid-lid. The evolution in time and
4f2617d475 Jeff*0351 location of variables is exactly as it was for the rigid-lid model so
0352 that :numref:`pressure-method-rigid-lid` is still applicable.
0353 Similarly, the calling sequence, given :ref:`here <call-tree-press-meth>`, is as for the pressure-method.
03540355 .. _adams-bashforth:
03560357 Explicit time-stepping: Adams-Bashforth
0358 =======================================
03590360 In describing the the pressure method above we deferred describing the
0361 time discretization of the explicit terms. We have historically used the
838416a165 Jeff*0362 quasi-second order Adams-Bashforth method (AB-II) for all explicit terms in both
4f2617d475 Jeff*0363 the momentum and tracer equations. This is still the default mode of
0364 operation but it is now possible to use alternate schemes for tracers
ab47de63dc Mart*0365 (see :numref:`tracer_eqns`), or a 3rd order Adams-Bashforth method (AB-III).
838416a165 Jeff*0366 In the previous sections, we summarized an explicit scheme as:
4f2617d475 Jeff*03670368 .. math::
0369 \tau^{*} = \tau^{n} + \Delta t G_\tau^{(n+1/2)}
0370 :label: taustar
03710372 where :math:`\tau` could be any prognostic variable (:math:`u`,
0373 :math:`v`, :math:`\theta` or :math:`S`) and :math:`\tau^*` is an
0374 explicit estimate of :math:`\tau^{n+1}` and would be exact if not for
0375 implicit-in-time terms. The parenthesis about :math:`n+1/2` indicates
838416a165 Jeff*0376 that the term is explicit and extrapolated forward in time. Below we describe
0377 in more detail the AB-II and AB-III schemes.
03780379 Adams-Bashforth II
0380 ------------------
03810382 The quasi-second order Adams-Bashforth scheme is formulated as follows:
4f2617d475 Jeff*03830384 .. math::
0bad585a21 Navi*0385 G_\tau^{(n+1/2)} = ( 3/2 + \epsilon_{\rm AB}) G_\tau^n
0386 - ( 1/2 + \epsilon_{\rm AB}) G_\tau^{n-1}
4f2617d475 Jeff*0387 :label: adams-bashforth2
03880389 This is a linear extrapolation, forward in time, to
0bad585a21 Navi*0390 :math:`t=(n+1/2+{\epsilon_{\rm AB}})\Delta t`. An extrapolation to the
4f2617d475 Jeff*0391 mid-point in time, :math:`t=(n+1/2)\Delta t`, corresponding to
0bad585a21 Navi*0392 :math:`\epsilon_{\rm AB}=0`, would be second order accurate but is weakly
4f2617d475 Jeff*0393 unstable for oscillatory terms. A small but finite value for
0bad585a21 Navi*0394 :math:`\epsilon_{\rm AB}` stabilizes the method. Strictly speaking, damping
4f2617d475 Jeff*0395 terms such as diffusion and dissipation, and fixed terms (forcing), do
0396 not need to be inside the Adams-Bashforth extrapolation. However, in the
0397 current code, it is simpler to include these terms and this can be
0398 justified if the flow and forcing evolves smoothly. Problems can, and
0399 do, arise when forcing or motions are high frequency and this
0400 corresponds to a reduced stability compared to a simple forward
0401 time-stepping of such terms. The model offers the possibility to leave
0402 terms outside the Adams-Bashforth extrapolation, by turning off the logical flag :varlink:`forcing_In_AB`
0bad585a21 Navi*0403 (parameter file ``data``, namelist ``PARM01``, default value = ``.TRUE.``) and then setting :varlink:`tracForcingOutAB`
4f2617d475 Jeff*0404 (default=0), :varlink:`momForcingOutAB` (default=0), and :varlink:`momDissip_In_AB` (parameter file ``data``, namelist ``PARM01``,
0405 default value = TRUE), respectively for the tracer terms, momentum forcing terms, and the dissipation terms.
04060407 A stability analysis for an oscillation equation should be given at this
0408 point.
04090410 A stability analysis for a relaxation equation should be given at this
0411 point.
04120413 .. figure:: figs/oscil+damp_AB2.*
0414 :width: 80%
0415 :align: center
0416 :alt: stability_analysis
0417 :name: oscil+damp_AB2
04180bad585a21 Navi*0419 Oscillatory and damping response of quasi-second order Adams-Bashforth scheme for different values of the :math:`\epsilon _{\rm AB}`
0420 parameter (0.0, 0.1, 0.25, from top to bottom) The analytical solution (in black), the physical mode (in blue) and the numerical
0421 mode (in red) are represented with a CFL step of 0.1. The left column represents the oscillatory response on the complex plane
0422 for CFL ranging from 0.1 up to 0.9. The right column represents the damping response amplitude (y-axis) function of the CFL (x-axis).
4f2617d475 Jeff*0423838416a165 Jeff*0424 Adams-Bashforth III
0425 -------------------
04260427 The 3rd order Adams-Bashforth time stepping (AB-III) provides several
0428 advantages (see, e.g., Durran 1991 :cite:`durran:91`) compared to the
0429 default quasi-second order Adams-Bashforth method:
04300431 - higher accuracy;
04320433 - stable with a longer time-step;
04340435 - no additional computation (just requires the storage of one
0436 additional time level).
04370438 The 3rd order Adams-Bashforth can be used to extrapolate
0439 forward in time the tendency (replacing :eq:`adams-bashforth2`)
0440 as:
04410442 .. math::
0bad585a21 Navi*0443 G_\tau^{(n+1/2)} = ( 1 + \alpha_{\rm AB} + \beta_{\rm AB}) G_\tau^n
0444 - ( \alpha_{\rm AB} + 2 \beta_{\rm AB}) G_\tau^{n-1}
0445 + \beta_{\rm AB} G_\tau^{n-2}
838416a165 Jeff*0446 :label: adams-bashforth3
04470448 3rd order accuracy is obtained with
0bad585a21 Navi*0449 :math:`(\alpha_{\rm AB},\,\beta_{\rm AB}) = (1/2,\,5/12)`. Note that selecting
0450 :math:`(\alpha_{\rm AB},\,\beta_{\rm AB}) = (1/2+\epsilon_{AB},\,0)` one
838416a165 Jeff*0451 recovers AB-II. The AB-III time stepping improves the
0452 stability limit for an oscillatory problem like advection or Coriolis.
0453 As seen from :numref:`ab3_oscill_response`, it remains stable up to a
0454 CFL of 0.72, compared to only 0.50 with AB-II and
0bad585a21 Navi*0455 :math:`\epsilon_{\rm AB} = 0.1`. It is interesting to note that the
838416a165 Jeff*0456 stability limit can be further extended up to a CFL of 0.786 for an
0457 oscillatory problem (see :numref:`ab3_oscill_response`) using
0bad585a21 Navi*0458 :math:`(\alpha_{\rm AB},\,\beta_{\rm AB}) = (0.5,\,0.2811)` but then the scheme
838416a165 Jeff*0459 is only second order accurate.
04600461 However, the behavior of the AB-III for a damping problem (like diffusion)
0462 is less favorable, since the stability limit is reduced to 0.54 only
0bad585a21 Navi*0463 (and 0.64 with :math:`\beta_{\rm AB} = 0.2811`) compared to 1.0 (and 0.9 with
0464 :math:`\epsilon_{\rm AB} = 0.1`) with the AB-II (see
838416a165 Jeff*0465 :numref:`ab3_damp_response`).
04660467 A way to enable the use of a longer time step is to keep the dissipation
0468 terms outside the AB extrapolation (setting :varlink:`momDissip_In_AB` to ``.FALSE.``
0469 in main parameter file ``data``, namelist ``PARM03``, thus returning to
0470 a simple forward time-stepping for dissipation, and to use AB-III only for
0471 advection and Coriolis terms.
04720473 The AB-III time stepping is activated by defining the option ``#define``
0474 :varlink:`ALLOW_ADAMSBASHFORTH_3` in :filelink:`CPP_OPTIONS.h <model/inc/CPP_OPTIONS.h>`. The parameters
0bad585a21 Navi*0475 :math:`\alpha_{\rm AB},\beta_{\rm AB}` can be set from the main parameter file
838416a165 Jeff*0476 ``data`` (namelist ``PARM03``) and their default values correspond to
0477 the 3rd order Adams-Bashforth. A simple example is provided in
0478 :filelink:`verification/advect_xy/input.ab3_c4`.
04790480 AB-III is not yet available for the vertical momentum equation
0481 (non-hydrostatic) nor for passive tracers.
04820483 .. figure:: figs/stab_AB3_oscil.*
0484 :width: 80%
0485 :align: center
0486 :alt: ab3_stability_analysis
0487 :name: ab3_oscill_response
04880bad585a21 Navi*0489 Oscillatory response of third order Adams-Bashforth scheme for different values of the :math:`(\alpha_{\rm AB},\,\beta_{\rm AB})` parameters.
838416a165 Jeff*0490 The analytical solution (in black), the physical mode (in blue) and the numerical mode (in red) are represented with a CFL step of 0.1.
04910492 .. figure:: figs/stab_AB3_dampR.*
0493 :width: 80%
0494 :align: center
0495 :alt: ab3_damping_analysis
0496 :name: ab3_damp_response
04970bad585a21 Navi*0498 Damping response of third order Adams-Bashforth scheme for different values of the :math:`(\alpha_{\rm AB},\,\beta_{\rm AB})` parameters.
838416a165 Jeff*0499 The analytical solution (in black), the physical mode (in blue) and the numerical mode (in red) are represented with a CFL step of 0.1.
050005014f2617d475 Jeff*0502 .. _implicit-backward-stepping:
05030504 Implicit time-stepping: backward method
0505 =======================================
05060507 Vertical diffusion and viscosity can be treated implicitly in time using
0508 the backward method which is an intrinsic scheme. Recently, the option
0509 to treat the vertical advection implicitly has been added, but not yet
0510 tested; therefore, the description hereafter is limited to diffusion and
0511 viscosity. For tracers, the time discretized equation is:
05120513 .. math::
0514 \tau^{n+1} - \Delta t \partial_r \kappa_v \partial_r \tau^{n+1} = \tau^{n} + \Delta t G_\tau^{(n+1/2)}
0515 :label: implicit-diffusion
05160517 where :math:`G_\tau^{(n+1/2)}` is the remaining explicit terms
0518 extrapolated using the Adams-Bashforth method as described above.
0519 Equation :eq:`implicit-diffusion` can be split split into:
05200521 .. math::
0522 \tau^* = \tau^{n} + \Delta t G_\tau^{(n+1/2)}
0523 :label: taustar-implicit
05240525 .. math::
0526 \tau^{n+1} = {\cal L}_\tau^{-1} ( \tau^* )
0527 :label: tau-n+1-implicit
05280529 where :math:`{\cal L}_\tau^{-1}` is the inverse of the operator
05300531 .. math:: {\cal L}_\tau = \left[ 1 + \Delta t \partial_r \kappa_v \partial_r \right]
05320533 Equation :eq:`taustar-implicit` looks exactly as :eq:`taustar` while
0534 :eq:`tau-n+1-implicit` involves an operator or matrix inversion. By
0535 re-arranging :eq:`implicit-diffusion` in this way we have cast the method
0536 as an explicit prediction step and an implicit step allowing the latter
0537 to be inserted into the over all algorithm with minimal interference.
05380539 The calling sequence for stepping forward a tracer variable such as temperature with implicit diffusion is
0540 as follows:
05410542 .. _adams-bash-calltree:
05430544 .. admonition:: Adams-Bashforth calling tree
0545 :class: note
05460547 | :filelink:`FORWARD\_STEP <model/src/forward_step.F>`
0548 | :math:`\phantom{W}` :filelink:`THERMODYNAMICS <model/src/thermodynamics.F>`
0549 | :math:`\phantom{WW}` :filelink:`TEMP\_INTEGRATE <model/src/temp_integrate.F>`
0550 | :math:`\phantom{WWW}` :filelink:`GAD\_CALC\_RHS <pkg/generic_advdiff/gad_calc_rhs.F>` :math:`\phantom{xxxxxxxxxw}` :math:`G_\theta^n = G_\theta( u, \theta^n)`
0551 | :math:`\phantom{WWW}` either
0552 | :math:`\phantom{WWWW}` :filelink:`EXTERNAL\_FORCING <model/src/external_forcing.F>` :math:`\phantom{xxxx}` :math:`G_\theta^n = G_\theta^n + {\cal Q}`
0553 | :math:`\phantom{WWWW}` :filelink:`ADAMS\_BASHFORTH2 <model/src/adams_bashforth2.F>` :math:`\phantom{xxi}` :math:`G_\theta^{(n+1/2)}` :eq:`adams-bashforth2`
0554 | :math:`\phantom{WWW}` or
0555 | :math:`\phantom{WWWW}` :filelink:`EXTERNAL\_FORCING <model/src/external_forcing.F>` :math:`\phantom{xxxx}` :math:`G_\theta^{(n+1/2)} = G_\theta^{(n+1/2)} + {\cal Q}`
0556 | :math:`\phantom{WW}` :filelink:`TIMESTEP\_TRACER <model/src/timestep_tracer.F>` :math:`\phantom{xxxxxxxxxx}` :math:`\tau^*` :eq:`taustar`
0557 | :math:`\phantom{WW}` :filelink:`IMPLDIFF <model/src/impldiff.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxw}` :math:`\tau^{(n+1)}` :eq:`tau-n+1-implicit`
05580559 In order to fit within the pressure method, the implicit viscosity must
0560 not alter the barotropic flow. In other words, it can only redistribute
0561 momentum in the vertical. The upshot of this is that although vertical
0562 viscosity may be backward implicit and unconditionally stable, no-slip
0563 boundary conditions may not be made implicit and are thus cast as a an
0564 explicit drag term.
05650566 .. _adams-bashforth-sync:
05670568 Synchronous time-stepping: variables co-located in time
0569 =======================================================
05700571 .. figure:: figs/adams-bashforth-sync.*
0572 :width: 70%
0573 :align: center
0574 :alt: adams-bash-sync
0575 :name: adams-bash-sync
05760577 A schematic of the explicit Adams-Bashforth and implicit time-stepping phases of the algorithm. All prognostic variables are co-located in time. Explicit tendencies are evaluated at time level :math:`n` as a function of the state at that time level (dotted arrow). The explicit tendency from the previous time level, :math:`n-1`, is used to extrapolate tendencies to :math:`n+1/2` (dashed arrow). This extrapolated tendency allows variables to be stably integrated forward-in-time to render an estimate (:math:`*` -variables) at the :math:`n+1` time level (solid arc-arrow). The operator :math:`{\cal L}` formed from implicit-in-time terms is solved to yield the state variables at time level :math:`n+1`.
057805790580 The Adams-Bashforth extrapolation of explicit tendencies fits neatly
0581 into the pressure method algorithm when all state variables are
0582 co-located in time. The algorithm can be represented by the sequential solution of the
0583 follow equations:
0584ab47de63dc Mart*0585 .. math::
4f2617d475 Jeff*0586 G_{\theta,S}^{n} = G_{\theta,S} ( u^n, \theta^n, S^n )
0587 :label: Gt-n-sync
05880589 .. math::
0590 G_{\theta,S}^{(n+1/2)} = (3/2+\epsilon_{AB}) G_{\theta,S}^{n}-(1/2+\epsilon_{AB}) G_{\theta,S}^{n-1}
0591 :label: Gt-n+5-sync
05920593 .. math::
0594 (\theta^*,S^*) = (\theta^{n},S^{n}) + \Delta t G_{\theta,S}^{(n+1/2)}
0595 :label: tstar-sync
05960597 .. math::
0598 (\theta^{n+1},S^{n+1}) = {\cal L}^{-1}_{\theta,S} (\theta^*,S^*)
0599 :label: t-n+1-sync
06000601 .. math::
0bad585a21 Navi*0602 \phi^n_{\rm hyd} = \int b(\theta^n,S^n) dr
4f2617d475 Jeff*0603 :label: phi-hyd-sync
06040605 .. math::
0bad585a21 Navi*0606 \vec{\bf G}_{\vec{\bf v}}^{n} = \vec{\bf G}_{\vec{\bf v}} ( \vec{\bf v}^n, \phi^n_{\rm hyd} )
4f2617d475 Jeff*0607 :label: Gv-n-sync
06080609 .. math::
0610 \vec{\bf G}_{\vec{\bf v}}^{(n+1/2)} = (3/2 + \epsilon_{AB} ) \vec{\bf G}_{\vec{\bf v}}^{n} - (1/2 + \epsilon_{AB} ) \vec{\bf G}_{\vec{\bf v}}^{n-1}
0611 :label: Gv-n+5-sync
06120613 .. math::
0614 \vec{\bf v}^{*} = \vec{\bf v}^{n} + \Delta t \vec{\bf G}_{\vec{\bf v}}^{(n+1/2)}
0615 :label: vstar-sync
06160617 .. math::
0618 \vec{\bf v}^{**} = {\cal L}_{\vec{\bf v}}^{-1} ( \vec{\bf v}^* )
0619 :label: vstarstar-sync
06200621 .. math::
0bad585a21 Navi*0622 \eta^* = \epsilon_{\rm fs} \left( \eta^{n} + \Delta t ({\mathcal{P-E}}) \right)- \Delta t
0623 \nabla \cdot H \widehat{ \vec{\bf v}^{**} }
4f2617d475 Jeff*0624 :label: nstar-sync
06250626 .. math::
0bad585a21 Navi*0627 \nabla \cdot g H \nabla \eta^{n+1} - \frac{\epsilon_{\rm fs} \eta^{n+1}}{\Delta t^2} ~ = ~ - \frac{\eta^*}{\Delta t^2}
4f2617d475 Jeff*0628 :label: elliptic-sync
06290630 .. math::
0bad585a21 Navi*0631 \vec{\bf v}^{n+1} = \vec{\bf v}^{**} - \Delta t g \nabla \eta^{n+1}
4f2617d475 Jeff*0632 :label: v-n+1-sync
06330634 :numref:`adams-bash-sync` illustrates the location of variables
0635 in time and evolution of the algorithm with time. The Adams-Bashforth
0636 extrapolation of the tracer tendencies is illustrated by the dashed
0637 arrow, the prediction at :math:`n+1` is indicated by the solid arc.
0638 Inversion of the implicit terms, :math:`{\cal
0639 L}^{-1}_{\theta,S}`, then yields the new tracer fields at :math:`n+1`.
0640 All these operations are carried out in subroutine :filelink:`THERMODYNAMICS <model/src/thermodynamics.F>` and
0641 subsidiaries, which correspond to equations :eq:`Gt-n-sync` to
0642 :eq:`t-n+1-sync`. Similarly illustrated is the Adams-Bashforth
0643 extrapolation of accelerations, stepping forward and solving of implicit
0644 viscosity and surface pressure gradient terms, corresponding to
0645 equations :eq:`Gv-n-sync` to :eq:`v-n+1-sync`. These operations are
0646 carried out in subroutines :filelink:`DYNAMICS <model/src/dynamics.F>`,
0647 :filelink:`SOLVE\_FOR\_PRESSURE <model/src/solve_for_pressure.F>` and
0648 :filelink:`MOMENTUM\_CORRECTION\_STEP <model/src/momentum_correction_step.F>`.
0649 This, then, represents an entire algorithm
0650 for stepping forward the model one time-step. The corresponding calling
0651 tree for the overall synchronous algorithm using
0652 Adams-Bashforth time-stepping is given below. The place where the model geometry
0653 :varlink:`hFac` factors) is updated is added here but is only relevant
0654 for the non-linear free-surface algorithm.
0655 For completeness, the external forcing,
0656 ocean and atmospheric physics have been added, although they are mainly optional.
06570658 .. admonition:: Synchronous Adams-Bashforth calling tree
0659 :class: note
06600661 | :filelink:`FORWARD\_STEP <model/src/forward_step.F>`
0662 | :math:`\phantom{WWW}` :filelink:`EXTERNAL\_FIELDS\_LOAD <model/src/external_fields_load.F>`
0663 | :math:`\phantom{WWW}` :filelink:`DO\_ATMOSPHERIC\_PHYS <model/src/do_atmospheric_phys.F>`
0664 | :math:`\phantom{WWW}` :filelink:`DO\_OCEANIC\_PHYS <model/src/do_oceanic_phys.F>`
0665 | :math:`\phantom{WW}` :filelink:`THERMODYNAMICS <model/src/thermodynamics.F>`
0666 | :math:`\phantom{WWW}` :filelink:`CALC\_GT <model/src/calc_gt.F>`
0667 | :math:`\phantom{WWWW}` :filelink:`GAD\_CALC\_RHS <pkg/generic_advdiff/gad_calc_rhs.F>` :math:`\phantom{xxxxxxxxxxxxxlwww}` :math:`G_\theta^n = G_\theta( u, \theta^n )` :eq:`Gt-n-sync`
0668 | :math:`\phantom{WWWW}` :filelink:`EXTERNAL\_FORCING <model/src/external_forcing.F>` :math:`\phantom{xxxxxxxxxxlww}` :math:`G_\theta^n = G_\theta^n + {\cal Q}`
0669 | :math:`\phantom{WWWW}` :filelink:`ADAMS\_BASHFORTH2 <model/src/adams_bashforth2.F>` :math:`\phantom{xxxxxxxxxxxw}` :math:`G_\theta^{(n+1/2)}` :eq:`Gt-n+5-sync`
0670 | :math:`\phantom{WWW}` :filelink:`TIMESTEP\_TRACER <model/src/timestep_tracer.F>` :math:`\phantom{xxxxxxxxxxxxxxxww}` :math:`\theta^*` :eq:`tstar-sync`
0671 | :math:`\phantom{WWW}` :filelink:`IMPLDIFF <model/src/impldiff.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxxxxxvwww}` :math:`\theta^{(n+1)}` :eq:`t-n+1-sync`
0672 | :math:`\phantom{WW}` :filelink:`DYNAMICS <model/src/dynamics.F>`
0bad585a21 Navi*0673 | :math:`\phantom{WWW}` :filelink:`CALC\_PHI\_HYD <model/src/calc_phi_hyd.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxxxxi}` :math:`\phi_{\rm hyd}^n` :eq:`phi-hyd-sync`
4f2617d475 Jeff*0674 | :math:`\phantom{WWW}` :filelink:`MOM\_FLUXFORM <pkg/mom_fluxform/mom_fluxform.F>` or :filelink:`MOM\_VECINV <pkg/mom_vecinv/mom_vecinv.F>` :math:`\phantom{xxi}` :math:`G_{\vec{\bf v}}^n` :eq:`Gv-n-sync`
0675 | :math:`\phantom{WWW}` :filelink:`TIMESTEP <model/src/timestep.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxxxxxxxxxx}` :math:`\vec{\bf v}^*` :eq:`Gv-n+5-sync`, :eq:`vstar-sync`
0676 | :math:`\phantom{WWW}` :filelink:`IMPLDIFF <model/src/impldiff.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxxxxxxxxlw}` :math:`\vec{\bf v}^{**}` :eq:`vstarstar-sync`
0677 | :math:`\phantom{WW}` :filelink:`UPDATE\_R\_STAR <model/src/update_r_star.F>` or :filelink:`UPDATE\_SURF\_DR <model/src/update_surf_dr.F>` (NonLin-FS only)
0678 | :math:`\phantom{WW}` :filelink:`SOLVE\_FOR\_PRESSURE <model/src/solve_for_pressure.F>`
0679 | :math:`\phantom{WWW}` :filelink:`CALC\_DIV\_GHAT <model/src/calc_div_ghat.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxxxx}` :math:`\eta^*` :eq:`nstar-sync`
0680 | :math:`\phantom{WWW}` :filelink:`CG2D <model/src/cg2d.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxi}` :math:`\eta^{n+1}` :eq:`elliptic-sync`
0681 | :math:`\phantom{WW}` :filelink:`MOMENTUM\_CORRECTION\_STEP <model/src/momentum_correction_step.F>`
0682 | :math:`\phantom{WWW}` :filelink:`CALC\_GRAD\_PHI\_SURF <model/src/calc_grad_phi_surf.F>` :math:`\phantom{xxxxxxxxxxxxxx}` :math:`\nabla \eta^{n+1}`
0683 | :math:`\phantom{WWW}` :filelink:`CORRECTION\_STEP <model/src/correction_step.F>` :math:`\phantom{xxxxxxxxxxxxxxxxw}` :math:`u^{n+1},v^{n+1}` :eq:`v-n+1-sync`
0684 | :math:`\phantom{WW}` :filelink:`TRACERS\_CORRECTION\_STEP <model/src/tracers_correction_step.F>`
0685 | :math:`\phantom{WWW}` :filelink:`CYCLE\_TRACER <model/src/cycle_tracer.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxxxxx}` :math:`\theta^{n+1}`
0686 | :math:`\phantom{WWW}` :filelink:`SHAP_FILT_APPLY_TS <pkg/shap_filt/shap_filt_apply_ts.F>` or :filelink:`ZONAL_FILT_APPLY_TS <pkg/zonal_filt/zonal_filt_apply_ts.F>`
0687 | :math:`\phantom{WWW}` :filelink:`CONVECTIVE_ADJUSTMENT <model/src/convective_adjustment.F>`
068806890690 .. _adams-bashforth-staggered:
06910692 Staggered baroclinic time-stepping
0693 ==================================
06940695 .. figure:: figs/adams-bashforth-staggered.*
0696 :width: 80%
0697 :align: center
0698 :alt: adams-bash-staggered
0699 :name: adams-bash-staggered
07000bad585a21 Navi*0701 A schematic of the explicit Adams-Bashforth and implicit time-stepping phases of the algorithm but with staggering in time of thermodynamic variables with the flow. Explicit momentum tendencies are evaluated at time level :math:`n-1/2` as a function of the flow field at that time level :math:`n-1/2`. The explicit tendency from the previous time level, :math:`n-3/2`, is used to extrapolate tendencies to :math:`n` (dashed arrow). The hydrostatic pressure/geo-potential :math:`\phi _{\rm hyd}` is evaluated directly at time level :math:`n` (vertical arrows) and used with the extrapolated tendencies to step forward the flow variables from :math:`n-1/2` to :math:`n+1/2` (solid arc-arrow). The implicit-in-time operator :math:`{\cal L}_{\bf u,v}` (vertical arrows) is then applied to the previous estimation of the the flow field (:math:`*` -variables) and yields to the two velocity components :math:`u,v` at time level :math:`n+1/2`. These are then used to calculate the advection term (dashed arc-arrow) of the thermo-dynamics tendencies at time step :math:`n`. The extrapolated thermodynamics tendency, from time level :math:`n-1` and :math:`n` to :math:`n+1/2`, allows thermodynamic variables to be stably integrated forward-in-time (solid arc-arrow) up to time level :math:`n+1`.
4f2617d475 Jeff*07020703 For well-stratified problems, internal gravity waves may be the limiting
0704 process for determining a stable time-step. In the circumstance, it is
0705 more efficient to stagger in time the thermodynamic variables with the
0706 flow variables. :numref:`adams-bash-staggered` illustrates the
0707 staggering and algorithm. The key difference between this and
0708 :numref:`adams-bash-sync` is that the thermodynamic variables are
0709 solved after the dynamics, using the recently updated flow field. This
0710 essentially allows the gravity wave terms to leap-frog in time giving
0711 second order accuracy and more stability.
07120713 The essential change in the staggered algorithm is that the
0714 thermodynamics solver is delayed from half a time step, allowing the use
0715 of the most recent velocities to compute the advection terms. Once the
0716 thermodynamics fields are updated, the hydrostatic pressure is computed
0717 to step forward the dynamics. Note that the pressure gradient must also
0718 be taken out of the Adams-Bashforth extrapolation. Also, retaining the
0719 integer time-levels, :math:`n` and :math:`n+1`, does not give a user the
0720 sense of where variables are located in time. Instead, we re-write the
0721 entire algorithm, :eq:`Gt-n-sync` to :eq:`v-n+1-sync`, annotating the
0722 position in time of variables appropriately:
07230724 .. math::
0bad585a21 Navi*0725 \phi^{n}_{\rm hyd} = \int b(\theta^{n},S^{n}) dr
4f2617d475 Jeff*0726 :label: phi-hyd-staggered
07270728 .. math::
0729 \vec{\bf G}_{\vec{\bf v}}^{n-1/2} = \vec{\bf G}_{\vec{\bf v}} ( \vec{\bf v}^{n-1/2} )
0730 :label: Gv-n-staggered
07310732 .. math::
0733 \vec{\bf G}_{\vec{\bf v}}^{(n)} = (3/2 + \epsilon_{AB} ) \vec{\bf G}_{\vec{\bf v}}^{n-1/2} - (1/2 + \epsilon_{AB} ) \vec{\bf G}_{\vec{\bf v}}^{n-3/2}
0734 :label: Gv-n+5-staggered
07350736 .. math::
0bad585a21 Navi*0737 \vec{\bf v}^{*} = \vec{\bf v}^{n-1/2} + \Delta t \left( \vec{\bf G}_{\vec{\bf v}}^{(n)} - \nabla \phi_{\rm hyd}^{n} \right)
4f2617d475 Jeff*0738 :label: vstar-staggered
07390740 .. math::
0741 \vec{\bf v}^{**} = {\cal L}_{\vec{\bf v}}^{-1} ( \vec{\bf v}^* )
0742 :label: vstarstar-staggered
07430744 .. math::
0bad585a21 Navi*0745 \eta^* = \epsilon_{\rm fs} \left( \eta^{n-1/2} + \Delta t ({\mathcal{P-E}})^n \right)- \Delta t
0746 \nabla \cdot H \widehat{ \vec{\bf v}^{**} }
4f2617d475 Jeff*0747 :label: nstar-staggered
07480749 .. math::
0bad585a21 Navi*0750 \nabla \cdot g H \nabla \eta^{n+1/2} - \frac{\epsilon_{\rm fs} \eta^{n+1/2}}{\Delta t^2}
0751 = - \frac{\eta^*}{\Delta t^2}
4f2617d475 Jeff*0752 :label: elliptic-staggered
07530754 .. math::
0bad585a21 Navi*0755 \vec{\bf v}^{n+1/2} = \vec{\bf v}^{**} - \Delta t g \nabla \eta^{n+1/2}
4f2617d475 Jeff*0756 :label: v-n+1-staggered
07570758 .. math::
0759 G_{\theta,S}^{n} = G_{\theta,S} ( u^{n+1/2}, \theta^{n}, S^{n} )
0760 :label: Gt-n-staggered
07610762 .. math::
0763 G_{\theta,S}^{(n+1/2)} = (3/2+\epsilon_{AB}) G_{\theta,S}^{n}-(1/2+\epsilon_{AB}) G_{\theta,S}^{n-1}
0764 :label: Gt-n+5-staggered
07650766 .. math::
0767 (\theta^*,S^*) = (\theta^{n},S^{n}) + \Delta t G_{\theta,S}^{(n+1/2)}
0768 :label: tstar-staggered
07690770 .. math::
0771 (\theta^{n+1},S^{n+1}) = {\cal L}^{-1}_{\theta,S} (\theta^*,S^*)
0772 :label: t-n+1-staggered
07730774 The corresponding calling tree is given below. The staggered algorithm is
0bad585a21 Navi*0775 activated with the run-time flag :varlink:`staggerTimeStep` ``=.TRUE.`` in
4f2617d475 Jeff*0776 parameter file ``data``, namelist ``PARM01``.
07770778 .. admonition:: Staggered Adams-Bashforth calling tree
0779 :class: note
07800781 | :filelink:`FORWARD\_STEP <model/src/forward_step.F>`
0782 | :math:`\phantom{WWW}` :filelink:`EXTERNAL\_FIELDS\_LOAD <model/src/external_fields_load.F>`
0783 | :math:`\phantom{WWW}` :filelink:`DO\_ATMOSPHERIC\_PHYS <model/src/do_atmospheric_phys.F>`
0784 | :math:`\phantom{WWW}` :filelink:`DO\_OCEANIC\_PHYS <model/src/do_oceanic_phys.F>`
0785 | :math:`\phantom{WW}` :filelink:`DYNAMICS <model/src/dynamics.F>`
0bad585a21 Navi*0786 | :math:`\phantom{WWW}` :filelink:`CALC\_PHI\_HYD <model/src/calc_phi_hyd.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxxxxi}` :math:`\phi_{\rm hyd}^n` :eq:`phi-hyd-staggered`
4f2617d475 Jeff*0787 | :math:`\phantom{WWW}` :filelink:`MOM\_FLUXFORM <pkg/mom_fluxform/mom_fluxform.F>` or :filelink:`MOM\_VECINV <pkg/mom_vecinv/mom_vecinv.F>` :math:`\phantom{xxi}` :math:`G_{\vec{\bf v}}^{n-1/2}` :eq:`Gv-n-staggered`
0788 | :math:`\phantom{WWW}` :filelink:`TIMESTEP <model/src/timestep.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxxxxxxxxxx}` :math:`\vec{\bf v}^*` :eq:`Gv-n+5-staggered`, :eq:`vstar-staggered`
0789 | :math:`\phantom{WWW}` :filelink:`IMPLDIFF <model/src/impldiff.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxxxxxxxxlw}` :math:`\vec{\bf v}^{**}` :eq:`vstarstar-staggered`
0790 | :math:`\phantom{WW}` :filelink:`UPDATE\_R\_STAR <model/src/update_r_star.F>` or :filelink:`UPDATE\_SURF\_DR <model/src/update_surf_dr.F>` (NonLin-FS only)
0791 | :math:`\phantom{WW}` :filelink:`SOLVE\_FOR\_PRESSURE <model/src/solve_for_pressure.F>`
0792 | :math:`\phantom{WWW}` :filelink:`CALC\_DIV\_GHAT <model/src/calc_div_ghat.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxxxx}` :math:`\eta^*` :eq:`nstar-staggered`
0793 | :math:`\phantom{WWW}` :filelink:`CG2D <model/src/cg2d.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxi}` :math:`\eta^{n+1/2}` :eq:`elliptic-staggered`
0794 | :math:`\phantom{WW}` :filelink:`MOMENTUM\_CORRECTION\_STEP <model/src/momentum_correction_step.F>`
0795 | :math:`\phantom{WWW}` :filelink:`CALC\_GRAD\_PHI\_SURF <model/src/calc_grad_phi_surf.F>` :math:`\phantom{xxxxxxxxxxxxxx}` :math:`\nabla \eta^{n+1/2}`
0796 | :math:`\phantom{WWW}` :filelink:`CORRECTION\_STEP <model/src/correction_step.F>` :math:`\phantom{xxxxxxxxxxxxxxxxw}` :math:`u^{n+1/2},v^{n+1/2}` :eq:`v-n+1-staggered`
0797 | :math:`\phantom{WW}` :filelink:`THERMODYNAMICS <model/src/thermodynamics.F>`
0798 | :math:`\phantom{WWW}` :filelink:`CALC\_GT <model/src/calc_gt.F>`
0799 | :math:`\phantom{WWWW}` :filelink:`GAD\_CALC\_RHS <pkg/generic_advdiff/gad_calc_rhs.F>` :math:`\phantom{xxxxxxxxxxxxxlwww}` :math:`G_\theta^n = G_\theta( u, \theta^n )` :eq:`Gt-n-staggered`
0800 | :math:`\phantom{WWWW}` :filelink:`EXTERNAL\_FORCING <model/src/external_forcing.F>` :math:`\phantom{xxxxxxxxxxlww}` :math:`G_\theta^n = G_\theta^n + {\cal Q}`
0801 | :math:`\phantom{WWWW}` :filelink:`ADAMS\_BASHFORTH2 <model/src/adams_bashforth2.F>` :math:`\phantom{xxxxxxxxxxxw}` :math:`G_\theta^{(n+1/2)}` :eq:`Gt-n+5-staggered`
0802 | :math:`\phantom{WWW}` :filelink:`TIMESTEP\_TRACER <model/src/timestep_tracer.F>` :math:`\phantom{xxxxxxxxxxxxxxxww}` :math:`\theta^*` :eq:`tstar-staggered`
0803 | :math:`\phantom{WWW}` :filelink:`IMPLDIFF <model/src/impldiff.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxxxxxvwww}` :math:`\theta^{(n+1)}` :eq:`t-n+1-staggered`
0804 | :math:`\phantom{WW}` :filelink:`TRACERS\_CORRECTION\_STEP <model/src/tracers_correction_step.F>`
0805 | :math:`\phantom{WWW}` :filelink:`CYCLE\_TRACER <model/src/cycle_tracer.F>` :math:`\phantom{xxxxxxxxxxxxxxxxxxxxx}` :math:`\theta^{n+1}`
0806 | :math:`\phantom{WWW}` :filelink:`SHAP_FILT_APPLY_TS <pkg/shap_filt/shap_filt_apply_ts.F>` or :filelink:`ZONAL_FILT_APPLY_TS <pkg/zonal_filt/zonal_filt_apply_ts.F>`
0807 | :math:`\phantom{WWW}` :filelink:`CONVECTIVE_ADJUSTMENT <model/src/convective_adjustment.F>`
08080809 The only difficulty with this approach is apparent in equation
0810 :eq:`Gt-n-staggered` and illustrated by the dotted arrow connecting
0811 :math:`u,v^{n+1/2}` with :math:`G_\theta^{n}`. The flow used to advect
0812 tracers around is not naturally located in time. This could be avoided
0813 by applying the Adams-Bashforth extrapolation to the tracer field itself
0814 and advecting that around but this approach is not yet available. We’re
0815 not aware of any detrimental effect of this feature. The difficulty lies
0816 mainly in interpretation of what time-level variables and terms
0817 correspond to.
08180819 .. _non-hydrostatic:
08200821 Non-hydrostatic formulation
0822 ===========================
082308240825 The non-hydrostatic formulation re-introduces the full vertical momentum
0826 equation and requires the solution of a 3-D elliptic equations for
0827 non-hydrostatic pressure perturbation. We still integrate vertically for
0828 the hydrostatic pressure and solve a 2-D elliptic equation for the
0829 surface pressure/elevation for this reduces the amount of work needed to
0830 solve for the non-hydrostatic pressure.
08310832 The momentum equations are discretized in time as follows:
08330834 .. math::
0bad585a21 Navi*0835 \frac{1}{\Delta t} u^{n+1} + g \partial_x \eta^{n+1} + \partial_x \phi_{\rm nh}^{n+1}
4f2617d475 Jeff*0836 = \frac{1}{\Delta t} u^{n} + G_u^{(n+1/2)}
0837 :label: discrete-time-u-nh
08380839 .. math::
0bad585a21 Navi*0840 \frac{1}{\Delta t} v^{n+1} + g \partial_y \eta^{n+1} + \partial_y \phi_{\rm nh}^{n+1}
4f2617d475 Jeff*0841 = \frac{1}{\Delta t} v^{n} + G_v^{(n+1/2)}
0842 :label: discrete-time-v-nh
08430844 .. math::
0bad585a21 Navi*0845 \frac{1}{\Delta t} w^{n+1} + \partial_r \phi_{\rm nh}^{n+1}
4f2617d475 Jeff*0846 = \frac{1}{\Delta t} w^{n} + G_w^{(n+1/2)}
0847 :label: discrete-time-w-nh
08480849 which must satisfy the discrete-in-time depth integrated continuity,
0850 equation :eq:`discrete-time-backward-free-surface` and the local
0851 continuity equation
08520853 .. math::
0854 \partial_x u^{n+1} + \partial_y v^{n+1} + \partial_r w^{n+1} = 0
0855 :label: non-divergence-nh
08560857 As before, the explicit predictions for momentum are consolidated as:
08580859 .. math::
08600861 \begin{aligned}
0bad585a21 Navi*0862 u^* & = u^n + \Delta t G_u^{(n+1/2)} \\
0863 v^* & = v^n + \Delta t G_v^{(n+1/2)} \\
0864 w^* & = w^n + \Delta t G_w^{(n+1/2)}\end{aligned}
4f2617d475 Jeff*08650866 but this time we introduce an intermediate step by splitting the
0867 tendency of the flow as follows:
08680869 .. math::
08700871 \begin{aligned}
0bad585a21 Navi*0872 u^{n+1} = u^{**} - \Delta t \partial_x \phi_{\rm nh}^{n+1}
4f2617d475 Jeff*0873 & &
0874 u^{**} = u^{*} - \Delta t g \partial_x \eta^{n+1} \\
0bad585a21 Navi*0875 v^{n+1} = v^{**} - \Delta t \partial_y \phi_{\rm nh}^{n+1}
4f2617d475 Jeff*0876 & &
0877 v^{**} = v^{*} - \Delta t g \partial_y \eta^{n+1}\end{aligned}
08780879 Substituting into the depth integrated continuity
0bad585a21 Navi*0880 :eq:`discrete-time-backward-free-surface` gives
4f2617d475 Jeff*08810882 .. math::
0bad585a21 Navi*0883 \partial_x H \partial_x \left( g \eta^{n+1} + \widehat{\phi}_{\rm nh}^{n+1} \right)
0884 + \partial_y H \partial_y \left( g \eta^{n+1} + \widehat{\phi}_{\rm nh}^{n+1} \right)
0885 - \frac{\epsilon_{\rm fs}\eta^{n+1}}{\Delta t^2}
4f2617d475 Jeff*0886 = - \frac{\eta^*}{\Delta t^2}
0887 :label: substituting-in-cont
08880889 which is approximated by equation :eq:`elliptic-backward-free-surface`
0bad585a21 Navi*0890 on the basis that i) :math:`\phi_{\rm nh}^{n+1}` is not yet known and ii)
0891 :math:`\nabla \widehat{\phi}_{\rm nh} \ll g \nabla \eta`.
0892 If :eq:`elliptic-backward-free-surface` is solved
0893 accurately then the implication is that :math:`\widehat{\phi}_{\rm nh}
4f2617d475 Jeff*0894 \approx 0` so that the non-hydrostatic pressure field does not drive
0895 barotropic motion.
08960897 The flow must satisfy non-divergence (equation :eq:`non-divergence-nh`)
0898 locally, as well as depth integrated, and this constraint is used to
0bad585a21 Navi*0899 form a 3-D elliptic equations for :math:`\phi_{\rm nh}^{n+1}`:
4f2617d475 Jeff*09000901 .. math::
0bad585a21 Navi*0902 \partial_{xx} \phi_{\rm nh}^{n+1} + \partial_{yy} \phi_{\rm nh}^{n+1} +
0903 \partial_{rr} \phi_{\rm nh}^{n+1} =
4f2617d475 Jeff*0904 \partial_x u^{**} + \partial_y v^{**} + \partial_r w^{*}
0905 :label: elliptic-pnh
09060907 The entire algorithm can be summarized as the sequential solution of the
0908 following equations:
09090910 .. math::
0911 u^{*} = u^{n} + \Delta t G_u^{(n+1/2)}
0912 :label: ustar-nh
0913ab47de63dc Mart*0914 .. math::
4f2617d475 Jeff*0915 v^{*} = v^{n} + \Delta t G_v^{(n+1/2)}
0916 :label: vstar-nh
ab47de63dc Mart*09174f2617d475 Jeff*0918 .. math::
0919 w^{*} = w^{n} + \Delta t G_w^{(n+1/2)}
0920 :label: wstar-nh
09210922 .. math::
0bad585a21 Navi*0923 \eta^* ~ = ~ \epsilon_{\rm fs} \left( \eta^{n} + \Delta t ({\mathcal{P-E}}) \right)
4f2617d475 Jeff*0924 - \Delta t \left( \partial_x H \widehat{u^{*}}
0925 + \partial_y H \widehat{v^{*}} \right)
0926 :label: etastar-nh
09270928 .. math::
0929 \partial_x g H \partial_x \eta^{n+1}
0930 + \partial_y g H \partial_y \eta^{n+1}
0bad585a21 Navi*0931 - \frac{\epsilon_{\rm fs} \eta^{n+1}}{\Delta t^2}
4f2617d475 Jeff*0932 ~ = ~ - \frac{\eta^*}{\Delta t^2}
0933 :label: elliptic-nh
09340935 .. math::
0936 u^{**} = u^{*} - \Delta t g \partial_x \eta^{n+1}
0937 :label: unx-nh
09380939 .. math::
0940 v^{**} = v^{*} - \Delta t g \partial_y \eta^{n+1}
0941 :label: vnx-nh
09420943 .. math::
0bad585a21 Navi*0944 \partial_{xx} \phi_{\rm nh}^{n+1} + \partial_{yy} \phi_{\rm nh}^{n+1} +
0945 \partial_{rr} \phi_{\rm nh}^{n+1} =
4f2617d475 Jeff*0946 \partial_x u^{**} + \partial_y v^{**} + \partial_r w^{*}
0947 :label: phi-nh
09480949 .. math::
0bad585a21 Navi*0950 u^{n+1} = u^{**} - \Delta t \partial_x \phi_{\rm nh}^{n+1}
4f2617d475 Jeff*0951 :label: un+1-nh
09520953 .. math::
0bad585a21 Navi*0954 v^{n+1} = v^{**} - \Delta t \partial_y \phi_{\rm nh}^{n+1}
4f2617d475 Jeff*0955 :label: vn+1-nh
09560957 .. math::
0958 \partial_r w^{n+1} = - \partial_x u^{n+1} - \partial_y v^{n+1}
0959 :label: wn+1-nh
09600961 where the last equation is solved by vertically integrating for
0962 :math:`w^{n+1}`.
09630964 Variants on the Free Surface
0965 ============================
09660967 We now describe the various formulations of the free-surface that
d4a066fa68 Jean*0968 include non-linear forms, implicit in time using Crank-Nicolson,
4f2617d475 Jeff*0969 explicit and [one day] split-explicit. First, we’ll reiterate the
0970 underlying algorithm but this time using the notation consistent with
0971 the more general vertical coordinate :math:`r`. The elliptic equation
0972 for free-surface coordinate (units of :math:`r`), corresponding to
0973 :eq:`discrete-time-backward-free-surface`, and assuming no
0bad585a21 Navi*0974 non-hydrostatic effects (:math:`\epsilon_{\rm nh} = 0`) is:
4f2617d475 Jeff*09750976 .. math::
0bad585a21 Navi*0977 \epsilon_{\rm fs} {\eta}^{n+1} -
0978 \nabla _h \cdot \Delta t^2 (R_o-R_{\rm fixed}) \nabla _h b_s
4f2617d475 Jeff*0979 {\eta}^{n+1} = {\eta}^*
0980 :label: eq-solve2D
09810982 where
09830984 .. math::
0bad585a21 Navi*0985 {\eta}^* = \epsilon_{\rm fs} \: {\eta}^{n} -
0986 \Delta t \nabla _h \cdot \int_{R_{\rm fixed}}^{R_o} \vec{\bf v}^* dr
0987 \: + \: \epsilon_{\rm fw} \Delta t ({\mathcal{P-E}})^{n}
4f2617d475 Jeff*0988 :label: eq-solve2D_rhs
09890990 .. admonition:: S/R :filelink:`SOLVE_FOR_PRESSURE <model/src/solve_for_pressure.F>`
0991 :class: note
09920993 | :math:`u^*` : :varlink:`gU` ( :filelink:`DYNVARS.h <model/inc/DYNVARS.h>` )
0994 | :math:`v^*` : :varlink:`gV` ( :filelink:`DYNVARS.h <model/inc/DYNVARS.h>` )
0995 | :math:`{\eta}^*` : :varlink:`cg2d_b` ( :filelink:`SOLVE_FOR_PRESSURE.h <model/inc/SOLVE_FOR_PRESSURE.h>` )
0996 | :math:`{\eta}^{n+1}` : :varlink:`etaN` ( :filelink:`DYNVARS.h <model/inc/DYNVARS.h>` )
099709980999 Once :math:`{\eta}^{n+1}` has been found, substituting into
1000 :eq:`discrete-time-u`, :eq:`discrete-time-v` yields
1001 :math:`\vec{\bf v}^{n+1}` if the model is hydrostatic
0bad585a21 Navi*1002 (:math:`\epsilon_{\rm nh}=0`):
4f2617d475 Jeff*10031004 .. math::
1005 \vec{\bf v}^{n+1} = \vec{\bf v}^{*}
0bad585a21 Navi*1006 - \Delta t \nabla _h b_s {\eta}^{n+1}
4f2617d475 Jeff*10071008 This is known as the correction step. However, when the model is
0bad585a21 Navi*1009 non-hydrostatic (:math:`\epsilon_{\rm nh}=1`) we need an additional step and
1010 an additional equation for :math:`\phi'_{\rm nh}`. This is obtained by
4f2617d475 Jeff*1011 substituting :eq:`discrete-time-u-nh`, :eq:`discrete-time-v-nh` and
1012 :eq:`discrete-time-w-nh` into continuity:
10131014 .. math::
0bad585a21 Navi*1015 [ \nabla _h^2 + \partial_{rr} ] {\phi'_{\rm nh}}^{n+1}
ab47de63dc Mart*1016 = \frac{1}{\Delta t}
0bad585a21 Navi*1017 \nabla _h \cdot \vec{\bf v}^{**} + \partial_r \dot{r}^*
ab47de63dc Mart*1018 :label: sub-u-v-w-in-cont
4f2617d475 Jeff*10191020 where
10210bad585a21 Navi*1022 .. math:: \vec{\bf v}^{**} = \vec{\bf v}^* - \Delta t \nabla _h b_s {\eta}^{n+1}
4f2617d475 Jeff*10231024 Note that :math:`\eta^{n+1}` is also used to update the second RHS term
1025 :math:`\partial_r \dot{r}^*` since the vertical velocity at the surface
0bad585a21 Navi*1026 (:math:`\dot{r}_{\rm surf}`) is evaluated as
4f2617d475 Jeff*1027 :math:`(\eta^{n+1} - \eta^n) / \Delta t`.
10281029 Finally, the horizontal velocities at the new time level are found by:
10301031 .. math::
1032 \vec{\bf v}^{n+1} = \vec{\bf v}^{**}
0bad585a21 Navi*1033 - \epsilon_{\rm nh} \Delta t \nabla _h {\phi'_{\rm nh}}^{n+1}
ab47de63dc Mart*1034 :label: v-new-time-lev
4f2617d475 Jeff*10351036 and the vertical velocity is found by integrating the continuity
1037 equation vertically. Note that, for the convenience of the restart
1038 procedure, the vertical integration of the continuity equation has been
1039 moved to the beginning of the time step (instead of at the end), without
1040 any consequence on the solution.
10411042 .. _correction_step_sr_in-out:
10431044 .. admonition:: S/R :filelink:`CORRECTION_STEP <model/src/correction_step.F>`
1045 :class: note
10461047 | :math:`{\eta}^{n+1}` : :varlink:`etaN` ( :filelink:`DYNVARS.h <model/inc/DYNVARS.h>` )
0bad585a21 Navi*1048 | :math:`{\phi}^{n+1}_{\rm nh}` : :varlink:`phi_nh` ( :filelink:`NH_VARS.h <model/inc/NH_VARS.h>` )
4f2617d475 Jeff*1049 | :math:`u^*` : :varlink:`gU` ( :filelink:`DYNVARS.h <model/inc/DYNVARS.h>` )
1050 | :math:`v^*` : :varlink:`gV` ( :filelink:`DYNVARS.h <model/inc/DYNVARS.h>` )
1051 | :math:`u^{n+1}` : :varlink:`uVel` ( :filelink:`DYNVARS.h <model/inc/DYNVARS.h>` )
1052 | :math:`v^{n+1}` : :varlink:`vVel` ( :filelink:`DYNVARS.h <model/inc/DYNVARS.h>` )
105310541055 Regarding the implementation of the surface pressure solver, all
1056 computation are done within the routine
1057 :filelink:`SOLVE_FOR_PRESSURE <model/src/solve_for_pressure.F>` and its
1058 dependent calls. The standard method to solve the 2D elliptic problem
1059 :eq:`eq-solve2D` uses the conjugate gradient method
1060 (routine :filelink:`CG2D <model/src/cg2d.F>`); the
1061 solver matrix and conjugate gradient operator are only function of the
1062 discretized domain and are therefore evaluated separately, before the
1063 time iteration loop, within :filelink:`INI_CG2D <model/src/ini_cg2d.F>`. The computation of the RHS
1064 :math:`\eta^*` is partly done in :filelink:`CALC_DIV_GHAT <model/src/calc_div_ghat.F>` and in
1065 :filelink:`SOLVE\_FOR\_PRESSURE <model/src/solve_for_pressure.F>`.
10661067 The same method is applied for the non hydrostatic part, using a
1068 conjugate gradient 3D solver (:filelink:`CG3D <model/src/cg3d.F>`) that is initialized in
1069 :filelink:`INI_CG3D <model/src/ini_cg3d.F>`. The RHS terms of 2D and 3D problems are computed together
1070 at the same point in the code.
10711072 .. toctree::
1073 crank-nicol.rst
1074 nonlinear-freesurf.rst
10751c87316fba Jeff*1076 .. _spatial_discret_dyn_eq:
4f2617d475 Jeff*10771078 Spatial discretization of the dynamical equations
1079 =================================================
10801081 Spatial discretization is carried out using the finite volume method.
1082 This amounts to a grid-point method (namely second-order centered finite
1083 difference) in the fluid interior but allows boundaries to intersect a
1084 regular grid allowing a more accurate representation of the position of
1085 the boundary. We treat the horizontal and vertical directions as
1086 separable and differently.
10871088 .. toctree::
1089 finitevol-meth.rst
1090 c-grid.rst
1091 horiz-grid.rst
1092 vert-grid.rst
ab47de63dc Mart*10934f2617d475 Jeff*1094 Continuity and horizontal pressure gradient term
1095 =================================================
109610971098 The core algorithm is based on the “C grid” discretization of the
1099 continuity equation which can be summarized as:
11001101 .. math::
0bad585a21 Navi*1102 \partial_t u + \frac{1}{\Delta x_c} \delta_i \left. \frac{ \partial \Phi}{\partial r}\right|_{s} \eta + \frac{\epsilon_{\rm nh}}{\Delta x_c} \delta_i \Phi_{\rm nh}' = G_u - \frac{1}{\Delta x_c} \delta_i \Phi_h'
4f2617d475 Jeff*1103 :label: discrete-momu
11041105 .. math::
0bad585a21 Navi*1106 \partial_t v + \frac{1}{\Delta y_c} \delta_j \left. \frac{ \partial \Phi}{\partial r}\right|_{s} \eta + \frac{\epsilon_{\rm nh}}{\Delta y_c} \delta_j \Phi_{\rm nh}' = G_v - \frac{1}{\Delta y_c} \delta_j \Phi_h'
4f2617d475 Jeff*1107 :label: discrete-momv
11081109 .. math::
0bad585a21 Navi*1110 \epsilon_{\rm nh} \left( \partial_t w + \frac{1}{\Delta r_c} \delta_k \Phi_{\rm nh}' \right) = \epsilon_{\rm nh} G_w + \overline{b}^k - \frac{1}{\Delta r_c} \delta_k \Phi_{h}'
4f2617d475 Jeff*1111 :label: discrete-momw
11121113 .. math::
1114 \delta_i \Delta y_g \Delta r_f h_w u +
1115 \delta_j \Delta x_g \Delta r_f h_s v +
94151a9b18 Jeff*1116 \delta_k {\cal A}_c w = {\cal A}_c \delta_k (\mathcal{P-E})_{r=0}
4f2617d475 Jeff*1117 :label: discrete-continuity
11181119 where the continuity equation has been most naturally discretized by
1120 staggering the three components of velocity as shown in
1121 :numref:`cgrid3d`. The grid lengths :math:`\Delta x_c` and
1122 :math:`\Delta y_c` are the lengths between tracer points (cell centers).
1123 The grid lengths :math:`\Delta x_g`, :math:`\Delta y_g` are the grid
1124 lengths between cell corners. :math:`\Delta r_f` and :math:`\Delta r_c`
1125 are the distance (in units of :math:`r`) between level interfaces
1126 (w-level) and level centers (tracer level). The surface area presented
1127 in the vertical is denoted :math:`{\cal
1128 A}_c`. The factors :math:`h_w` and :math:`h_s` are non-dimensional
1129 fractions (between 0 and 1) that represent the fraction cell depth that
1130 is “open” for fluid flow.
11311132 The last equation, the discrete continuity equation, can be summed in
1133 the vertical to yield the free-surface equation:
11341135 .. math::
1136 {\cal A}_c \partial_t \eta + \delta_i \sum_k \Delta y_g \Delta r_f h_w
1137 u + \delta_j \sum_k \Delta x_g \Delta r_f h_s v = {\cal
94151a9b18 Jeff*1138 A}_c(\mathcal{P-E})_{r=0}
4f2617d475 Jeff*1139 :label: discrete-freesurface
114094151a9b18 Jeff*1141 The source term :math:`\mathcal{P-E}` on the rhs of continuity accounts for the
4f2617d475 Jeff*1142 local addition of volume due to excess precipitation and run-off over
1143 evaporation and only enters the top-level of the ocean model.
11441145 Hydrostatic balance
1146 ===================
11471148 The vertical momentum equation has the hydrostatic or quasi-hydrostatic
1149 balance on the right hand side. This discretization guarantees that the
1150 conversion of potential to kinetic energy as derived from the buoyancy
1151 equation exactly matches the form derived from the pressure gradient
1152 terms when forming the kinetic energy equation.
11531154 In the ocean, using z-coordinates, the hydrostatic balance terms are
1155 discretized:
11561157 .. math::
0bad585a21 Navi*1158 \epsilon_{\rm nh} \partial_t w
4f2617d475 Jeff*1159 + g \overline{\rho'}^k + \frac{1}{\Delta z} \delta_k \Phi_h' = \ldots
1160 :label: discrete_hydro_ocean
11611162 In the atmosphere, using p-coordinates, hydrostatic balance is
1163 discretized:
11641165 .. math::
1166 \overline{\theta'}^k + \frac{1}{\Delta \Pi} \delta_k \Phi_h' = 0
1167 :label: discrete_hydro_atmos
11681169 where :math:`\Delta \Pi` is the difference in Exner function between
1170 the pressure points. The non-hydrostatic equations are not available in
1171 the atmosphere.
11721173 The difference in approach between ocean and atmosphere occurs because
1174 of the direct use of the ideal gas equation in forming the potential
1175 energy conversion term :math:`\alpha \omega`. Because of the different
1176 representation of hydrostatic balance between
1177 ocean and atmosphere there is no elegant way to represent both systems
1178 using an arbitrary coordinate.
11791180 The integration for hydrostatic pressure is made in the positive
1181 :math:`r` direction (increasing k-index). For the ocean, this is from
1182 the free-surface down and for the atmosphere this is from the ground up.
11831184 The calculations are made in the subroutine :filelink:`CALC_PHI_HYD <model/src/calc_phi_hyd.F>`. Inside
1185 this routine, one of other of the atmospheric/oceanic form is selected
1186 based on the string variable :varlink:`buoyancyRelation`.
118768aadaa6bd Phob*1188 .. _flux-form_momentum_equations:
4f2617d475 Jeff*11891190 Flux-form momentum equations
1191 ============================
119211931194 The original finite volume model was based on the Eulerian flux form
1195 momentum equations. This is the default though the vector invariant form
1196 is optionally available (and recommended in some cases).
11971198 The “G’s” (our colloquial name for all terms on rhs!) are broken into
1199 the various advective, Coriolis, horizontal dissipation, vertical
1200 dissipation and metric forces:
12011202 .. math::
0bad585a21 Navi*1203 G_u = G_u^{\rm adv} + G_u^{\rm Cor} + G_u^{h- \rm diss} + G_u^{v- \rm diss} +
1204 G_u^{\rm metric} + G_u^{\rm nh-metric}
4f2617d475 Jeff*1205 :label: gsplit_momu
12061207 .. math::
0bad585a21 Navi*1208 G_v = G_v^{\rm adv} + G_v^{\rm Cor} + G_v^{h- \rm diss} + G_v^{v- \rm diss} +
1209 G_v^{\rm metric} + G_v^{\rm nh-metric}
4f2617d475 Jeff*1210 :label: gsplit_momv
12111212 .. math::
0bad585a21 Navi*1213 G_w = G_w^{\rm adv} + G_w^{\rm Cor} + G_w^{h- \rm diss} + G_w^{v- \rm diss} +
1214 G_w^{\rm metric} + G_w^{\rm nh-metric}
4f2617d475 Jeff*1215 :label: gsplit_momw
12160bad585a21 Navi*1217 In the hydrostatic limit, :math:`G_w=0` and :math:`\epsilon_{\rm nh}=0`,
4f2617d475 Jeff*1218 reducing the vertical momentum to hydrostatic balance.
12191220 These terms are calculated in routines called from subroutine
1221 :filelink:`MOM_FLUXFORM <pkg/mom_fluxform/mom_fluxform.F>` and collected into the global arrays :varlink:`gU`, :varlink:`gV`, and
1222 :varlink:`gW`.
12231224 .. admonition:: S/R :filelink:`MOM_FLUXFORM <pkg/mom_fluxform/mom_fluxform.F>`
1225 :class: note
12261227 | :math:`G_u` : :varlink:`gU` ( :filelink:`DYNVARS.h <model/inc/DYNVARS.h>` )
1228 | :math:`G_v` : :varlink:`gV` ( :filelink:`DYNVARS.h <model/inc/DYNVARS.h>` )
1229 | :math:`G_w` : :varlink:`gW` ( :filelink:`NH_VARS.h <model/inc/NH_VARS.h>` )
ab47de63dc Mart*12304f2617d475 Jeff*12311232 Advection of momentum
1233 ---------------------
12341235 The advective operator is second order accurate in space:
12361237 .. math::
0bad585a21 Navi*1238 {\cal A}_w \Delta r_f h_w G_u^{\rm adv} =
4f2617d475 Jeff*1239 \delta_i \overline{ U }^i \overline{ u }^i
1240 + \delta_j \overline{ V }^i \overline{ u }^j
1241 + \delta_k \overline{ W }^i \overline{ u }^k
1242 :label: discrete-momadvu
12431244 .. math::
0bad585a21 Navi*1245 {\cal A}_s \Delta r_f h_s G_v^{\rm adv} =
4f2617d475 Jeff*1246 \delta_i \overline{ U }^j \overline{ v }^i
1247 + \delta_j \overline{ V }^j \overline{ v }^j
ab47de63dc Mart*1248 + \delta_k \overline{ W }^j \overline{ v }^k
4f2617d475 Jeff*1249 :label: discrete-momadvv
12501251 .. math::
0bad585a21 Navi*1252 {\cal A}_c \Delta r_c G_w^{\rm adv} =
4f2617d475 Jeff*1253 \delta_i \overline{ U }^k \overline{ w }^i
1254 + \delta_j \overline{ V }^k \overline{ w }^j
1255 + \delta_k \overline{ W }^k \overline{ w }^k
1256 :label: discrete-momadvw
12571258 and because of the flux form does not contribute to the global budget
1259 of linear momentum. The quantities :math:`U`, :math:`V` and :math:`W`
1260 are volume fluxes defined:
12611262 .. math::
1263 U = \Delta y_g \Delta r_f h_w u
1264 :label: utrans
12651266 .. math::
1267 V = \Delta x_g \Delta r_f h_s v
1268 :label: vtrans
12691270 .. math::
1271 W = {\cal A}_c w
1272 :label: rtrans
12731274 The advection of momentum takes the same form as the advection of
1275 tracers but by a translated advective flow. Consequently, the
1276 conservation of second moments, derived for tracers later, applies to
1277 :math:`u^2` and :math:`v^2` and :math:`w^2` so that advection of
1278 momentum correctly conserves kinetic energy.
12791280 .. admonition:: S/R :filelink:`MOM_U_ADV_UU <pkg/mom_fluxform/mom_u_adv_uu.F>`, :filelink:`MOM_U_ADV_VU <pkg/mom_fluxform/mom_u_adv_vu.F>`, :filelink:`MOM_U_ADV_WU <pkg/mom_fluxform/mom_u_adv_wu.F>`
1281 :class: note
12821283 | :math:`uu, vu, wu` : :varlink:`fZon`, :varlink:`fMer`, :varlink:`fVerUkp` ( local to :filelink:`MOM_FLUXFORM.F <pkg/mom_fluxform/mom_fluxform.F>` )
12841285 .. admonition:: S/R :filelink:`MOM_V_ADV_UV <pkg/mom_fluxform/mom_v_adv_uv.F>`, :filelink:`MOM_V_ADV_VV <pkg/mom_fluxform/mom_v_adv_vv.F>`, :filelink:`MOM_V_ADV_WV <pkg/mom_fluxform/mom_v_adv_wv.F>`
1286 :class: note
12871288 | :math:`uv, vv, wv` : :varlink:`fZon`, :varlink:`fMer`, :varlink:`fVerVkp` ( local to :filelink:`MOM_FLUXFORM.F <pkg/mom_fluxform/mom_fluxform.F>` )
12899c8516d9da Jeff*1290 .. _fluxform_cor_terms:
12914f2617d475 Jeff*1292 Coriolis terms
1293 --------------
12941295 The “pure C grid” Coriolis terms (i.e. in absence of C-D scheme) are
1296 discretized:
12971298 .. math::
0bad585a21 Navi*1299 {\cal A}_w \Delta r_f h_w G_u^{\rm Cor} =
4f2617d475 Jeff*1300 \overline{ f {\cal A}_c \Delta r_f h_c \overline{ v }^j }^i
0bad585a21 Navi*1301 - \epsilon_{\rm nh} \overline{ f' {\cal A}_c \Delta r_f h_c \overline{ w }^k }^i
4f2617d475 Jeff*1302 :label: cdscheme_gu
13031304 .. math::
0bad585a21 Navi*1305 {\cal A}_s \Delta r_f h_s G_v^{\rm Cor} =
4f2617d475 Jeff*1306 - \overline{ f {\cal A}_c \Delta r_f h_c \overline{ u }^i }^j
1307 :label: cdscheme_gv
13081309 .. math::
0bad585a21 Navi*1310 {\cal A}_c \Delta r_c G_w^{\rm Cor} =
1311 \epsilon_{\rm nh} \overline{ f' {\cal A}_c \Delta r_f h_c \overline{ u }^i }^k
4f2617d475 Jeff*1312 :label: cdscheme_gw
13131314 where the Coriolis parameters :math:`f` and :math:`f'` are defined:
13151316 .. math::
13171318 \begin{aligned}
0bad585a21 Navi*1319 f & = 2 \Omega \sin{\varphi} \\
1320 f' & = 2 \Omega \cos{\varphi}\end{aligned}
4f2617d475 Jeff*13211322 where :math:`\varphi` is geographic latitude when using spherical
1323 geometry, otherwise the :math:`\beta`-plane definition is used:
13241325 .. math::
13261327 \begin{aligned}
0bad585a21 Navi*1328 f & = f_o + \beta y \\
1329 f' & = 0\end{aligned}
4f2617d475 Jeff*13301331 This discretization globally conserves kinetic energy. It should be
1332 noted that despite the use of this discretization in former
1333 publications, all calculations to date have used the following different
1334 discretization:
13351336 .. math::
0bad585a21 Navi*1337 G_u^{\rm Cor} = f_u \overline{ v }^{ji}
1338 - \epsilon_{\rm nh} f_u' \overline{ w }^{ik}
4f2617d475 Jeff*1339 :label: gu_cor
13401341 .. math::
0bad585a21 Navi*1342 G_v^{\rm Cor} = - f_v \overline{ u }^{ij}
4f2617d475 Jeff*1343 :label: gv_cor
13441345 .. math::
0bad585a21 Navi*1346 G_w^{\rm Cor} = \epsilon_{\rm nh} f_w' \overline{ u }^{ik}
4f2617d475 Jeff*1347 :label: gw_cor
13481349 where the subscripts on :math:`f` and :math:`f'` indicate evaluation of
1350 the Coriolis parameters at the appropriate points in space. The above
1351 discretization does *not* conserve anything, especially energy, but for
1352 historical reasons is the default for the code. A flag controls this
7843dde2de jm-c 1353 discretization: set run-time integer :varlink:`selectCoriScheme` to two (=2)
1354 (which otherwise defaults to zero)
1355 to select the energy-conserving conserving form :eq:`cdscheme_gu`, :eq:`cdscheme_gv`, and :eq:`cdscheme_gw` above.
13564f2617d475 Jeff*13571358 .. admonition:: S/R :filelink:`CD_CODE_SCHEME <pkg/cd_code/cd_code_scheme.F>`, :filelink:`MOM_U_CORIOLIS <pkg/mom_fluxform/mom_u_coriolis.F>`, :filelink:`MOM_V_CORIOLIS <pkg/mom_fluxform/mom_v_coriolis.F>`
1359 :class: note
13600bad585a21 Navi*1361 | :math:`G_u^{\rm Cor}, G_v^{\rm Cor}` : :varlink:`cF` ( local to :filelink:`MOM_FLUXFORM.F <pkg/mom_fluxform/mom_fluxform.F>` )
4f2617d475 Jeff*13621363 Curvature metric terms
1364 ----------------------
13651366 The most commonly used coordinate system on the sphere is the geographic
1367 system :math:`(\lambda,\varphi)`. The curvilinear nature of these
1368 coordinates on the sphere lead to some “metric” terms in the component
1369 momentum equations. Under the thin-atmosphere and hydrostatic
1370 approximations these terms are discretized:
13711372 .. math::
0bad585a21 Navi*1373 {\cal A}_w \Delta r_f h_w G_u^{\rm metric} =
4f2617d475 Jeff*1374 \overline{ \frac{ \overline{u}^i }{a} \tan{\varphi} {\cal A}_c \Delta r_f h_c \overline{ v }^j }^i
1375 :label: gu_metric
ab47de63dc Mart*13764f2617d475 Jeff*1377 .. math::
0bad585a21 Navi*1378 {\cal A}_s \Delta r_f h_s G_v^{\rm metric} =
4f2617d475 Jeff*1379 - \overline{ \frac{ \overline{u}^i }{a} \tan{\varphi} {\cal A}_c \Delta r_f h_c \overline{ u }^i }^j \\
1380 :label: gv_metric
ab47de63dc Mart*13814f2617d475 Jeff*1382 .. math::
0bad585a21 Navi*1383 G_w^{\rm metric} = 0
4f2617d475 Jeff*1384 :label: gw_metric
ab47de63dc Mart*13854f2617d475 Jeff*1386 where :math:`a` is the radius of the planet (sphericity is assumed) or
1387 the radial distance of the particle (i.e. a function of height). It is
1388 easy to see that this discretization satisfies all the properties of the
1389 discrete Coriolis terms since the metric factor :math:`\frac{u}{a}
1390 \tan{\varphi}` can be viewed as a modification of the vertical Coriolis
1391 parameter: :math:`f \rightarrow f+\frac{u}{a} \tan{\varphi}`.
13921393 However, as for the Coriolis terms, a non-energy conserving form has
1394 exclusively been used to date:
13951396 .. math::
13971398 \begin{aligned}
0bad585a21 Navi*1399 G_u^{\rm metric} & = \frac{u \overline{v}^{ij} }{a} \tan{\varphi} \\
1400 G_v^{\rm metric} & = \frac{ \overline{u}^{ij} \overline{u}^{ij}}{a} \tan{\varphi}\end{aligned}
4f2617d475 Jeff*14011402 where :math:`\tan{\varphi}` is evaluated at the :math:`u` and :math:`v`
1403 points respectively.
14041405 .. admonition:: S/R :filelink:`MOM_U_METRIC_SPHERE <pkg/mom_fluxform/mom_u_metric_sphere.F>`, :filelink:`MOM_V_METRIC_SPHERE <pkg/mom_fluxform/mom_v_metric_sphere.F>`
1406 :class: note
14070bad585a21 Navi*1408 | :math:`G_u^{\rm metric}, G_v^{\rm metric}` : :varlink:`mT` ( local to :filelink:`MOM_FLUXFORM.F <pkg/mom_fluxform/mom_fluxform.F>` )
4f2617d475 Jeff*1409dcaaa42497 Jeff*1410 .. _non_hyd_metric_terms:
4f2617d475 Jeff*14111412 Non-hydrostatic metric terms
1413 ----------------------------
14141415 For the non-hydrostatic equations, dropping the thin-atmosphere
1416 approximation re-introduces metric terms involving :math:`w` which are
1417 required to conserve angular momentum:
14181419 .. math::
0bad585a21 Navi*1420 {\cal A}_w \Delta r_f h_w G_u^{\rm metric} =
4f2617d475 Jeff*1421 - \overline{ \frac{ \overline{u}^i \overline{w}^k }{a} {\cal A}_c \Delta r_f h_c }^i
1422 :label: gu_metricnh
ab47de63dc Mart*14234f2617d475 Jeff*1424 .. math::
0bad585a21 Navi*1425 {\cal A}_s \Delta r_f h_s G_v^{\rm metric} =
4f2617d475 Jeff*1426 - \overline{ \frac{ \overline{v}^j \overline{w}^k }{a} {\cal A}_c \Delta r_f h_c}^j
1427 :label: gv_metricnh
ab47de63dc Mart*14284f2617d475 Jeff*1429 .. math::
0bad585a21 Navi*1430 {\cal A}_c \Delta r_c G_w^{\rm metric} =
4f2617d475 Jeff*1431 \overline{ \frac{ {\overline{u}^i}^2 + {\overline{v}^j}^2}{a} {\cal A}_c \Delta r_f h_c }^k
1432 :label: wv_metricnh
14331434 Because we are always consistent, even if consistently wrong, we have,
1435 in the past, used a different discretization in the model which is:
14361437 .. math::
14381439 \begin{aligned}
ab47de63dc Mart*1440 G_u^{\rm metric} & =
4f2617d475 Jeff*1441 - \frac{u}{a} \overline{w}^{ik} \\
ab47de63dc Mart*1442 G_v^{\rm metric} & =
4f2617d475 Jeff*1443 - \frac{v}{a} \overline{w}^{jk} \\
ab47de63dc Mart*1444 G_w^{\rm metric} & =
4f2617d475 Jeff*1445 \frac{1}{a} ( {\overline{u}^{ik}}^2 + {\overline{v}^{jk}}^2 )\end{aligned}
14461447 .. admonition:: S/R :filelink:`MOM_U_METRIC_NH <pkg/mom_common/mom_u_metric_nh.F>`, :filelink:`MOM_V_METRIC_NH <pkg/mom_common/mom_v_metric_nh.F>`
1448 :class: note
14490bad585a21 Navi*1450 | :math:`G_u^{\rm metric}, G_v^{\rm metric}` : :varlink:`mT` ( local to :filelink:`MOM_FLUXFORM.F <pkg/mom_fluxform/mom_fluxform.F>` )
4f2617d475 Jeff*14519c8516d9da Jeff*1452 .. _fluxform_lat_dissip:
4f2617d475 Jeff*14531454 Lateral dissipation
1455 -------------------
14561457 Historically, we have represented the SGS Reynolds stresses as simply
1458 down gradient momentum fluxes, ignoring constraints on the stress tensor
1459 such as symmetry.
14601461 .. math::
0bad585a21 Navi*1462 {\cal A}_w \Delta r_f h_w G_u^{h- \rm diss} =
4f2617d475 Jeff*1463 \delta_i \Delta y_f \Delta r_f h_c \tau_{11}
1464 + \delta_j \Delta x_v \Delta r_f h_\zeta \tau_{12}
1465 :label: gu_h-diss
14661467 .. math::
0bad585a21 Navi*1468 {\cal A}_s \Delta r_f h_s G_v^{h- \rm diss} =
4f2617d475 Jeff*1469 \delta_i \Delta y_u \Delta r_f h_\zeta \tau_{21}
1470 + \delta_j \Delta x_f \Delta r_f h_c \tau_{22}
1471 :label: gv_h-diss
147214731474 The lateral viscous stresses are discretized:
14751476 .. math::
1477 \tau_{11} = A_h c_{11\Delta}(\varphi) \frac{1}{\Delta x_f} \delta_i u
1478 -A_4 c_{11\Delta^2}(\varphi) \frac{1}{\Delta x_f} \delta_i \nabla^2 u
1479 :label: tau11
14801481 .. math::
1482 \tau_{12} = A_h c_{12\Delta}(\varphi) \frac{1}{\Delta y_u} \delta_j u
1483 -A_4 c_{12\Delta^2}(\varphi)\frac{1}{\Delta y_u} \delta_j \nabla^2 u
1484 :label: tau12
14851486 .. math::
1487 \tau_{21} = A_h c_{21\Delta}(\varphi) \frac{1}{\Delta x_v} \delta_i v
1488 -A_4 c_{21\Delta^2}(\varphi) \frac{1}{\Delta x_v} \delta_i \nabla^2 v
1489 :label: tau21
14901491 .. math::
1492 \tau_{22} = A_h c_{22\Delta}(\varphi) \frac{1}{\Delta y_f} \delta_j v
1493 -A_4 c_{22\Delta^2}(\varphi) \frac{1}{\Delta y_f} \delta_j \nabla^2 v
1494 :label: tau22
1495025afa4065 Jeff*1496 where the non-dimensional factors :math:`c_{lm\Delta^n}(\varphi), \{l,m,n\} \in \{1,2\}`
1497 define the “cosine” scaling with latitude which can be applied
4f2617d475 Jeff*1498 in various ad-hoc ways. For instance, :math:`c_{11\Delta} =
1499 c_{21\Delta} = (\cos{\varphi})^{3/2}`,
1500 :math:`c_{12\Delta}=c_{22\Delta}=1` would represent the anisotropic
1501 cosine scaling typically used on the “lat-lon” grid for Laplacian
1502 viscosity.
15031504 It should be noted that despite the ad-hoc nature of the scaling, some
1505 scaling must be done since on a lat-lon grid the converging meridians
1506 make it very unlikely that a stable viscosity parameter exists across
1507 the entire model domain.
15081509 The Laplacian viscosity coefficient, :math:`A_h` (:varlink:`viscAh`), has units
1510 of :math:`m^2 s^{-1}`. The bi-harmonic viscosity coefficient,
1511 :math:`A_4` (:varlink:`viscA4`), has units of :math:`m^4 s^{-1}`.
15121513 .. admonition:: S/R :filelink:`MOM_U_XVISCFLUX <pkg/mom_fluxform/mom_u_xviscflux.F>`, :filelink:`MOM_U_YVISCFLUX <pkg/mom_fluxform/mom_u_yviscflux.F>`
1514 :class: note
15151516 | :math:`\tau_{11}, \tau_{12}` : :varlink:`vF`, :varlink:`v4F` ( local to :filelink:`MOM_FLUXFORM.F <pkg/mom_fluxform/mom_fluxform.F>` )
15171518 .. admonition:: S/R :filelink:`MOM_V_XVISCFLUX <pkg/mom_fluxform/mom_v_xviscflux.F>`, :filelink:`MOM_V_YVISCFLUX <pkg/mom_fluxform/mom_v_yviscflux.F>`
1519 :class: note
15201521 | :math:`\tau_{21}, \tau_{22}` : :varlink:`vF`, :varlink:`v4F` ( local to :filelink:`MOM_FLUXFORM.F <pkg/mom_fluxform/mom_fluxform.F>` )
15221523 Two types of lateral boundary condition exist for the lateral viscous
1524 terms, no-slip and free-slip.
15251526 The free-slip condition is most convenient to code since it is
1527 equivalent to zero-stress on boundaries. Simple masking of the stress
1528 components sets them to zero. The fractional open stress is properly
1529 handled using the lopped cells.
15301531 The no-slip condition defines the normal gradient of a tangential flow
1532 such that the flow is zero on the boundary. Rather than modify the
1533 stresses by using complicated functions of the masks and “ghost” points
1534 (see Adcroft and Marshall (1998) :cite:`adcroft:98`) we add the boundary stresses as an
1535 additional source term in cells next to solid boundaries. This has the
1536 advantage of being able to cope with “thin walls” and also makes the
1537 interior stress calculation (code) independent of the boundary
1538 conditions. The “body” force takes the form:
15391540 .. math::
0bad585a21 Navi*1541 G_u^{\rm side-drag} =
4f2617d475 Jeff*1542 \frac{4}{\Delta z_f} \overline{ (1-h_\zeta) \frac{\Delta x_v}{\Delta y_u} }^j
1543 \left( A_h c_{12\Delta}(\varphi) u - A_4 c_{12\Delta^2}(\varphi) \nabla^2 u \right)
1544 :label: gu_sidedrag
15451546 .. math::
0bad585a21 Navi*1547 G_v^{\rm side-drag} =
4f2617d475 Jeff*1548 \frac{4}{\Delta z_f} \overline{ (1-h_\zeta) \frac{\Delta y_u}{\Delta x_v} }^i
1549 \left( A_h c_{21\Delta}(\varphi) v - A_4 c_{21\Delta^2}(\varphi) \nabla^2 v \right)
1550 :label: gv_sidedrag
15511552 In fact, the above discretization is not quite complete because it
1553 assumes that the bathymetry at velocity points is deeper than at
1554 neighboring vorticity points, e.g. :math:`1-h_w < 1-h_\zeta`
15551556 .. admonition:: S/R :filelink:`MOM_U_SIDEDRAG <pkg/mom_common/mom_u_sidedrag.F>`, :filelink:`MOM_V_SIDEDRAG <pkg/mom_common/mom_v_sidedrag.F>`
1557 :class: note
15580bad585a21 Navi*1559 | :math:`G_u^{\rm side-drag}, G_v^{\rm side-drag}` : :varlink:`vF` ( local to :filelink:`MOM_FLUXFORM.F <pkg/mom_fluxform/mom_fluxform.F>` )
4f2617d475 Jeff*15601561 Vertical dissipation
1562 --------------------
15631564 Vertical viscosity terms are discretized with only partial adherence to
1565 the variable grid lengths introduced by the finite volume formulation.
1566 This reduces the formal accuracy of these terms to just first order but
1567 only next to boundaries; exactly where other terms appear such as linear
1568 and quadratic bottom drag.
15691570 .. math::
0bad585a21 Navi*1571 G_u^{v- \rm diss} =
4f2617d475 Jeff*1572 \frac{1}{\Delta r_f h_w} \delta_k \tau_{13}
1573 :label: gu_u-diss
15741575 .. math::
0bad585a21 Navi*1576 G_v^{v- \rm diss} =
4f2617d475 Jeff*1577 \frac{1}{\Delta r_f h_s} \delta_k \tau_{23}
1578 :label: gv_v-diss
15791580 .. math::
0bad585a21 Navi*1581 G_w^{v- \rm diss} = \epsilon_{\rm nh}
4f2617d475 Jeff*1582 \frac{1}{\Delta r_f h_d} \delta_k \tau_{33}
1583 :label: gw_w-diss
15841585 represents the general discrete form of the vertical dissipation terms.
15861587 In the interior the vertical stresses are discretized:
15881589 .. math::
15901591 \begin{aligned}
0bad585a21 Navi*1592 \tau_{13} & = A_v \frac{1}{\Delta r_c} \delta_k u \\
1593 \tau_{23} & = A_v \frac{1}{\Delta r_c} \delta_k v \\
1594 \tau_{33} & = A_v \frac{1}{\Delta r_f} \delta_k w\end{aligned}
4f2617d475 Jeff*15951596 It should be noted that in the non-hydrostatic form, the stress tensor
1597 is even less consistent than for the hydrostatic (see Wajsowicz (1993)
1598 :cite:`wajsowicz:93`). It is well known how to do this
1599 properly (see Griffies and Hallberg (2000) :cite:`griffies:00`) and is on the list of
1600 to-do’s.
16011602 .. admonition:: S/R :filelink:`MOM_U_RVISCFLUX <pkg/mom_common/mom_u_rviscflux.F>`, :filelink:`MOM_V_RVISCFLUX <pkg/mom_common/mom_v_rviscflux.F>`
1603 :class: note
16041605 | :math:`\tau_{13}` : :varlink:`fVrUp`, :varlink:`fVrDw` ( local to :filelink:`MOM_FLUXFORM.F <pkg/mom_fluxform/mom_fluxform.F>` )
1606 | :math:`\tau_{23}` : :varlink:`fVrUp`, :varlink:`fVrDw` ( local to :filelink:`MOM_FLUXFORM.F <pkg/mom_fluxform/mom_fluxform.F>` )
16071608 As for the lateral viscous terms, the free-slip condition is equivalent
1609 to simply setting the stress to zero on boundaries. The no-slip
ab47de63dc Mart*1610 condition is implemented as an additional term acting in conjunction with the
4f2617d475 Jeff*1611 interior and free-slip stresses. Bottom drag represents additional
1612 friction, in addition to that imposed by the no-slip condition at the
1613 bottom. The drag is cast as a stress expressed as a linear or quadratic
1614 function of the mean flow in the layer above the topography:
16151616 .. math::
0bad585a21 Navi*1617 \tau_{13}^{\rm bottom-drag} =
4f2617d475 Jeff*1618 \left(
1619 2 A_v \frac{1}{\Delta r_c}
1620 + r_b
0bad585a21 Navi*1621 + C_d \sqrt{ \overline{2 \mathrm{KE}}^i }
4f2617d475 Jeff*1622 \right) u
1623 :label: tau13
16241625 .. math::
0bad585a21 Navi*1626 \tau_{23}^{\rm bottom-drag} =
4f2617d475 Jeff*1627 \left(
1628 2 A_v \frac{1}{\Delta r_c}
1629 + r_b
0bad585a21 Navi*1630 + C_d \sqrt{ \overline{2 \mathrm{KE}}^j }
4f2617d475 Jeff*1631 \right) v
1632 :label: tau23
16331634 where these terms are only evaluated immediately above topography.
ab47de63dc Mart*1635 :math:`r_b` (:varlink:`bottomDragLinear`) has units of m s\ :sup:`-1` and a
1636 typical value of the order 0.0002 m s\ :sup:`-1`. :math:`C_d`
4f2617d475 Jeff*1637 (:varlink:`bottomDragQuadratic`) is dimensionless with typical values in the
1638 range 0.001–0.003.
1639ab47de63dc Mart*1640 After defining :varlink:`ALLOW_BOTTOMDRAG_ROUGHNESS` in
1641 :filelink:`MOM_COMMON_OPTIONS.h <pkg/mom_common/MOM_COMMON_OPTIONS.h>`,
1642 the quadratic drag coefficient can be
1643 computed by the logarithmic law of the wall:
16441645 .. math::
1646 u(z) = \left(\frac{\tau}{\rho}\right)^{\frac{1}{2}}\frac{1}{0.4}
1647 \ln{\frac{z+z_r}{z_r}}
1648 :label: logLawWallu
16491650 where :math:`z_r` is the roughness length (runtime parameter
1651 :varlink:`zRoughBot`). Here, :math:`z` is the height from the seafloor and
1652 :math:`\tau` is the bottom stress (and stress in the log-layer). The velocity
1653 is computed at the center of the bottom cell :math:`z_b=\frac{1}{2}\Delta r_f
1654 h_w`, so stress on the bottom cell is :math:`\tau / \rho = C_d u_b^2`, where
1655 :math:`u_b = u(z_b)` is the bottom cell velocity and:
16561657 .. math::
1658 C_d = \left(\frac{0.4}{
1659 \ln{\frac{\frac{1}{2} \Delta r_f h_w + z_{r} }{z_{r}}}}\right)^2
1660 :label: logLawWallcd
16611662 This formulation assumes that the bottommost cell is sufficiently thin that it
1663 is in a constant-stress log layer. A value of :varlink:`zRoughBot` of 0.01 m
1664 yields a quadratic drag coefficient of 0.0022 for :math:`\Delta r_f =` 100 m,
1665 or a quadratic drag coefficient of 0.0041 for :math:`\Delta r_f =` 10 m.
16661667 For :math:`z_r = 0`, :math:`C_d` defaults to the value of
1668 :varlink:`bottomDragQuadratic`.
16691670 .. admonition:: S/R :filelink:`MOM_U_BOTTOMDRAG
1671 <pkg/mom_common/mom_u_bottomdrag.F>`,
1672 :filelink:`MOM_V_BOTTOMDRAG
1673 <pkg/mom_common/mom_v_bottomdrag.F>`
4f2617d475 Jeff*1674 :class: note
16750bad585a21 Navi*1676 | :math:`\tau_{13}^{\rm bottom-drag} / \Delta r_f , \tau_{23}^{\rm bottom-drag} / \Delta r_f` : :varlink:`vF` ( local to :filelink:`MOM_FLUXFORM.F <pkg/mom_fluxform/mom_fluxform.F>` )
4f2617d475 Jeff*16771678 Derivation of discrete energy conservation
1679 ------------------------------------------
16801681 These discrete equations conserve kinetic plus potential energy using
1682 the following definitions:
16831684 .. math::
0bad585a21 Navi*1685 \mathrm{KE} = \frac{1}{2} \left( \overline{ u^2 }^i + \overline{ v^2 }^j +
1686 \epsilon_{\rm nh} \overline{ w^2 }^k \right)
4f2617d475 Jeff*1687 :label: KE_discrete
16889ce7d74115 Jeff*1689 .. _mom_diagnostics:
16904f2617d475 Jeff*1691 Mom Diagnostics
1692 ---------------
16931694 ::
169516961697 ------------------------------------------------------------------------
ab47de63dc Mart*1698 <-Name->|Levs|<-parsing code->|<-- Units -->|<- Tile (max=80c)
4f2617d475 Jeff*1699 ------------------------------------------------------------------------
1700 VISCAHZ | 15 |SZ MR |m^2/s |Harmonic Visc Coefficient (m2/s) (Zeta Pt)
1701 VISCA4Z | 15 |SZ MR |m^4/s |Biharmonic Visc Coefficient (m4/s) (Zeta Pt)
1702 VISCAHD | 15 |SM MR |m^2/s |Harmonic Viscosity Coefficient (m2/s) (Div Pt)
1703 VISCA4D | 15 |SM MR |m^4/s |Biharmonic Viscosity Coefficient (m4/s) (Div Pt)
1704 VAHZMAX | 15 |SZ MR |m^2/s |CFL-MAX Harm Visc Coefficient (m2/s) (Zeta Pt)
1705 VA4ZMAX | 15 |SZ MR |m^4/s |CFL-MAX Biharm Visc Coefficient (m4/s) (Zeta Pt)
1706 VAHDMAX | 15 |SM MR |m^2/s |CFL-MAX Harm Visc Coefficient (m2/s) (Div Pt)
1707 VA4DMAX | 15 |SM MR |m^4/s |CFL-MAX Biharm Visc Coefficient (m4/s) (Div Pt)
1708 VAHZMIN | 15 |SZ MR |m^2/s |RE-MIN Harm Visc Coefficient (m2/s) (Zeta Pt)
1709 VA4ZMIN | 15 |SZ MR |m^4/s |RE-MIN Biharm Visc Coefficient (m4/s) (Zeta Pt)
1710 VAHDMIN | 15 |SM MR |m^2/s |RE-MIN Harm Visc Coefficient (m2/s) (Div Pt)
1711 VA4DMIN | 15 |SM MR |m^4/s |RE-MIN Biharm Visc Coefficient (m4/s) (Div Pt)
1712 VAHZLTH | 15 |SZ MR |m^2/s |Leith Harm Visc Coefficient (m2/s) (Zeta Pt)
1713 VA4ZLTH | 15 |SZ MR |m^4/s |Leith Biharm Visc Coefficient (m4/s) (Zeta Pt)
1714 VAHDLTH | 15 |SM MR |m^2/s |Leith Harm Visc Coefficient (m2/s) (Div Pt)
1715 VA4DLTH | 15 |SM MR |m^4/s |Leith Biharm Visc Coefficient (m4/s) (Div Pt)
1716 VAHZLTHD| 15 |SZ MR |m^2/s |LeithD Harm Visc Coefficient (m2/s) (Zeta Pt)
1717 VA4ZLTHD| 15 |SZ MR |m^4/s |LeithD Biharm Visc Coefficient (m4/s) (Zeta Pt)
1718 VAHDLTHD| 15 |SM MR |m^2/s |LeithD Harm Visc Coefficient (m2/s) (Div Pt)
1719 VA4DLTHD| 15 |SM MR |m^4/s |LeithD Biharm Visc Coefficient (m4/s) (Div Pt)
1720 VAHZSMAG| 15 |SZ MR |m^2/s |Smagorinsky Harm Visc Coefficient (m2/s) (Zeta Pt)
1721 VA4ZSMAG| 15 |SZ MR |m^4/s |Smagorinsky Biharm Visc Coeff. (m4/s) (Zeta Pt)
1722 VAHDSMAG| 15 |SM MR |m^2/s |Smagorinsky Harm Visc Coefficient (m2/s) (Div Pt)
1723 VA4DSMAG| 15 |SM MR |m^4/s |Smagorinsky Biharm Visc Coeff. (m4/s) (Div Pt)
1724 momKE | 15 |SM MR |m^2/s^2 |Kinetic Energy (in momentum Eq.)
1725 momHDiv | 15 |SM MR |s^-1 |Horizontal Divergence (in momentum Eq.)
1726 momVort3| 15 |SZ MR |s^-1 |3rd component (vertical) of Vorticity
1727 Strain | 15 |SZ MR |s^-1 |Horizontal Strain of Horizontal Velocities
1728 Tension | 15 |SM MR |s^-1 |Horizontal Tension of Horizontal Velocities
1729 UBotDrag| 15 |UU 129MR |m/s^2 |U momentum tendency from Bottom Drag
1730 VBotDrag| 15 |VV 128MR |m/s^2 |V momentum tendency from Bottom Drag
1731 USidDrag| 15 |UU 131MR |m/s^2 |U momentum tendency from Side Drag
1732 VSidDrag| 15 |VV 130MR |m/s^2 |V momentum tendency from Side Drag
1733 Um_Diss | 15 |UU 133MR |m/s^2 |U momentum tendency from Dissipation
1734 Vm_Diss | 15 |VV 132MR |m/s^2 |V momentum tendency from Dissipation
1735 Um_Advec| 15 |UU 135MR |m/s^2 |U momentum tendency from Advection terms
1736 Vm_Advec| 15 |VV 134MR |m/s^2 |V momentum tendency from Advection terms
1737 Um_Cori | 15 |UU 137MR |m/s^2 |U momentum tendency from Coriolis term
1738 Vm_Cori | 15 |VV 136MR |m/s^2 |V momentum tendency from Coriolis term
1739 Um_Ext | 15 |UU 137MR |m/s^2 |U momentum tendency from external forcing
1740 Vm_Ext | 15 |VV 138MR |m/s^2 |V momentum tendency from external forcing
1741 Um_AdvZ3| 15 |UU 141MR |m/s^2 |U momentum tendency from Vorticity Advection
1742 Vm_AdvZ3| 15 |VV 140MR |m/s^2 |V momentum tendency from Vorticity Advection
1743 Um_AdvRe| 15 |UU 143MR |m/s^2 |U momentum tendency from vertical Advection (Explicit part)
1744 Vm_AdvRe| 15 |VV 142MR |m/s^2 |V momentum tendency from vertical Advection (Explicit part)
1745 ADVx_Um | 15 |UM 145MR |m^4/s^2 |Zonal Advective Flux of U momentum
1746 ADVy_Um | 15 |VZ 144MR |m^4/s^2 |Meridional Advective Flux of U momentum
1747 ADVrE_Um| 15 |WU LR |m^4/s^2 |Vertical Advective Flux of U momentum (Explicit part)
1748 ADVx_Vm | 15 |UZ 148MR |m^4/s^2 |Zonal Advective Flux of V momentum
1749 ADVy_Vm | 15 |VM 147MR |m^4/s^2 |Meridional Advective Flux of V momentum
1750 ADVrE_Vm| 15 |WV LR |m^4/s^2 |Vertical Advective Flux of V momentum (Explicit part)
1751 VISCx_Um| 15 |UM 151MR |m^4/s^2 |Zonal Viscous Flux of U momentum
1752 VISCy_Um| 15 |VZ 150MR |m^4/s^2 |Meridional Viscous Flux of U momentum
1753 VISrE_Um| 15 |WU LR |m^4/s^2 |Vertical Viscous Flux of U momentum (Explicit part)
1754 VISrI_Um| 15 |WU LR |m^4/s^2 |Vertical Viscous Flux of U momentum (Implicit part)
1755 VISCx_Vm| 15 |UZ 155MR |m^4/s^2 |Zonal Viscous Flux of V momentum
1756 VISCy_Vm| 15 |VM 154MR |m^4/s^2 |Meridional Viscous Flux of V momentum
1757 VISrE_Vm| 15 |WV LR |m^4/s^2 |Vertical Viscous Flux of V momentum (Explicit part)
1758 VISrI_Vm| 15 |WV LR |m^4/s^2 |Vertical Viscous Flux of V momentum (Implicit part)
1759d67096e55c Jeff*1760 .. _vec_invar_mom_eqs:
4f2617d475 Jeff*17611762 Vector invariant momentum equations
1763 ===================================
17641765 The finite volume method lends itself to describing the continuity and
1766 tracer equations in curvilinear coordinate systems. However, in
1767 curvilinear coordinates many new metric terms appear in the momentum
1768 equations (written in Lagrangian or flux-form) making generalization far
1769 from elegant. Fortunately, an alternative form of the equations, the
1770 vector invariant equations are exactly that; invariant under coordinate
1771 transformations so that they can be applied uniformly in any orthogonal
1772 curvilinear coordinate system such as spherical coordinates, boundary
1773 following or the conformal spherical cube system.
17741775 The non-hydrostatic vector invariant equations read:
17761777 .. math::
0bad585a21 Navi*1778 \partial_t \vec{\bf v} + ( 2\vec{\boldsymbol{\Omega}} + \vec{\boldsymbol{\zeta}}) \times \vec{\bf v}
1779 - b \hat{\bf r}
1780 + \nabla B = \nabla \cdot \vec{\boldsymbol{\tau}}
4f2617d475 Jeff*1781 :label: vect_invar_nh
17821783 which describe motions in any orthogonal curvilinear coordinate system.
ab47de63dc Mart*1784 Here, :math:`B` is the Bernoulli function and :math:`\vec{\boldsymbol{\zeta}}= \nabla
0bad585a21 Navi*1785 \times \vec{\bf v}` is the vorticity vector. We can take advantage of the
4f2617d475 Jeff*1786 elegance of these equations when discretizing them and use the discrete
1787 definitions of the grad, curl and divergence operators to satisfy
1788 constraints. We can also consider the analogy to forming derived
1789 equations, such as the vorticity equation, and examine how the
1790 discretization can be adjusted to give suitable vorticity advection
1791 among other things.
17921793 The underlying algorithm is the same as for the flux form equations. All
1794 that has changed is the contents of the “G’s”. For the time-being, only
1795 the hydrostatic terms have been coded but we will indicate the points
1796 where non-hydrostatic contributions will enter:
17971798 .. math::
1799 G_u = G_u^{fv} + G_u^{\zeta_3 v} + G_u^{\zeta_2 w} + G_u^{\partial_x B}
0bad585a21 Navi*1800 + G_u^{\partial_z \tau^x} + G_u^{h- \rm diss} + G_u^{v- \rm diss}
4f2617d475 Jeff*1801 :label: gu_vecinv
18021803 .. math::
1804 G_v = G_v^{fu} + G_v^{\zeta_3 u} + G_v^{\zeta_1 w} + G_v^{\partial_y B}
0bad585a21 Navi*1805 + G_v^{\partial_z \tau^y} + G_v^{h- \rm diss} + G_v^{v- \rm diss}
4f2617d475 Jeff*1806 :label: gv_vecinv
18071808 .. math::
1809 G_w = G_w^{fu} + G_w^{\zeta_1 v} + G_w^{\zeta_2 u} + G_w^{\partial_z B}
0bad585a21 Navi*1810 + G_w^{h- \rm diss} + G_w^{v- \rm diss}
4f2617d475 Jeff*1811 :label: gw_vecinv
18121813 .. admonition:: S/R :filelink:`MOM_VECINV <pkg/mom_vecinv/mom_vecinv.F>`
1814 :class: note
18151816 | :math:`G_u` : :varlink:`gU` ( :filelink:`DYNVARS.h <model/inc/DYNVARS.h>` )
1817 | :math:`G_v` : :varlink:`gV` ( :filelink:`DYNVARS.h <model/inc/DYNVARS.h>` )
1818 | :math:`G_w` : :varlink:`gW` ( :filelink:`NH_VARS.h <model/inc/NH_VARS.h>` )
18191820 Relative vorticity
1821 ------------------
18221823 The vertical component of relative vorticity is explicitly calculated
1824 and use in the discretization. The particular form is crucial for
1825 numerical stability; alternative definitions break the conservation
1826 properties of the discrete equations.
18271828 Relative vorticity is defined:
18291830 .. math::
1831 \zeta_3 = \frac{\Gamma}{A_\zeta}
1832 = \frac{1}{{\cal A}_\zeta} ( \delta_i \Delta y_c v - \delta_j \Delta x_c u )
1833 :label: zeta3
18341835 where :math:`{\cal A}_\zeta` is the area of the vorticity cell
1836 presented in the vertical and :math:`\Gamma` is the circulation about
1837 that cell.
18381839 .. admonition:: S/R :filelink:`MOM_CALC_RELVORT3 <pkg/mom_common/mom_calc_relvort3.F>`
1840 :class: note
18411842 | :math:`\zeta_3` : :varlink:`vort3` ( local to :filelink:`MOM_VECINV.F <pkg/mom_vecinv/mom_vecinv.F>` )
18431844 Kinetic energy
1845 --------------
18460bad585a21 Navi*1847 The kinetic energy, denoted :math:`\mathrm{KE}`, is defined:
4f2617d475 Jeff*18481849 .. math::
ab47de63dc Mart*1850 \mathrm{KE} = \frac{1}{2} ( \overline{ u^2 }^i + \overline{ v^2 }^j
0bad585a21 Navi*1851 + \epsilon_{\rm nh} \overline{ w^2 }^k )
4f2617d475 Jeff*1852 :label: KE_vecinv
18531854 .. admonition:: S/R :filelink:`MOM_CALC_KE <pkg/mom_common/mom_calc_KE.F>`
1855 :class: note
18560bad585a21 Navi*1857 | :math:`\mathrm{KE}` : :varlink:`KE` ( local to :filelink:`MOM_VECINV.F <pkg/mom_vecinv/mom_vecinv.F>` )
4f2617d475 Jeff*18581859 Coriolis terms
1860 --------------
18611862 The potential enstrophy conserving form of the linear Coriolis terms are
1863 written:
18641865 .. math::
1866 G_u^{fv} = \frac{1}{\Delta x_c}
1867 \overline{ \frac{f}{h_\zeta} }^j \overline{ \overline{ \Delta x_g h_s v }^j }^i
1868 :label: gu_fv
18691870 .. math::
1871 G_v^{fu} = - \frac{1}{\Delta y_c}
1872 \overline{ \frac{f}{h_\zeta} }^i \overline{ \overline{ \Delta y_g h_w u }^i }^j
1873 :label: gv_fv
18741875 Here, the Coriolis parameter :math:`f` is defined at vorticity (corner)
1876 points.
18771878 The potential enstrophy conserving form of the non-linear Coriolis terms
1879 are written:
18801881 .. math::
1882 G_u^{\zeta_3 v} = \frac{1}{\Delta x_c}
1883 \overline{ \frac{\zeta_3}{h_\zeta} }^j \overline{ \overline{ \Delta x_g h_s v }^j }^i
1884 :label: gu_zeta3
18851886 .. math::
1887 G_v^{\zeta_3 u} = - \frac{1}{\Delta y_c}
1888 \overline{ \frac{\zeta_3}{h_\zeta} }^i \overline{ \overline{ \Delta y_g h_w u }^i }^j
1889 :label: gv_zeta3
18901891 The Coriolis terms can also be evaluated together and expressed in terms
1892 of absolute vorticity :math:`f+\zeta_3`. The potential enstrophy
1893 conserving form using the absolute vorticity is written:
18941895 .. math::
1896 G_u^{fv} + G_u^{\zeta_3 v} = \frac{1}{\Delta x_c}
1897 \overline{ \frac{f + \zeta_3}{h_\zeta} }^j \overline{ \overline{ \Delta x_g h_s v }^j }^i
1898 :label: gu_together
18991900 .. math::
1901 G_v^{fu} + G_v^{\zeta_3 u} = - \frac{1}{\Delta y_c}
1902 \overline{ \frac{f + \zeta_3}{h_\zeta} }^i \overline{ \overline{ \Delta y_g h_w u }^i }^j
1903 :label: gv_together
190419051906 The distinction between using absolute vorticity or relative vorticity
1907 is useful when constructing higher order advection schemes; monotone
1908 advection of relative vorticity behaves differently to monotone
1909 advection of absolute vorticity. Currently the choice of
1910 relative/absolute vorticity, centered/upwind/high order advection is
1911 available only through commented subroutine calls.
19121913 .. admonition:: S/R :filelink:`MOM_VI_CORIOLIS <pkg/mom_vecinv/mom_vi_coriolis.F>`, :filelink:`MOM_VI_U_CORIOLIS <pkg/mom_vecinv/mom_vi_u_coriolis.F>`, :filelink:`MOM_VI_V_CORIOLIS <pkg/mom_vecinv/mom_vi_v_coriolis.F>`
1914 :class: note
19151916 | :math:`G_u^{fv} , G_u^{\zeta_3 v}` : :varlink:`uCf` ( local to :filelink:`MOM_VECINV.F <pkg/mom_vecinv/mom_vecinv.F>` )
1917 | :math:`G_v^{fu} , G_v^{\zeta_3 u}` : :varlink:`vCf` ( local to :filelink:`MOM_VECINV.F <pkg/mom_vecinv/mom_vecinv.F>` )
19181919 Shear terms
1920 -----------
19211922 The shear terms (:math:`\zeta_2w` and :math:`\zeta_1w`) are are
1923 discretized to guarantee that no spurious generation of kinetic energy
1924 is possible; the horizontal gradient of Bernoulli function has to be
1925 consistent with the vertical advection of shear:
19261927 .. math::
1928 G_u^{\zeta_2 w} = \frac{1}{ {\cal A}_w \Delta r_f h_w } \overline{
0bad585a21 Navi*1929 \overline{ {\cal A}_c w }^i ( \delta_k u - \epsilon_{\rm nh} \delta_i w ) }^k
4f2617d475 Jeff*1930 :label: gu_zeta2w
19311932 .. math::
1933 G_v^{\zeta_1 w} = \frac{1}{ {\cal A}_s \Delta r_f h_s } \overline{
0bad585a21 Navi*1934 \overline{ {\cal A}_c w }^j ( \delta_k v - \epsilon_{\rm nh} \delta_j w ) }^k
4f2617d475 Jeff*1935 :label: gv_zeta1w
19361937 .. admonition:: S/R :filelink:`MOM_VI_U_VERTSHEAR <pkg/mom_vecinv/mom_vi_u_vertshear.F>`, :filelink:`MOM_VI_V_VERTSHEAR <pkg/mom_vecinv/mom_vi_v_vertshear.F>`
1938 :class: note
19391940 | :math:`G_u^{\zeta_2 w}` : :varlink:`uCf` ( local to :filelink:`MOM_VECINV.F <pkg/mom_vecinv/mom_vecinv.F>` )
1941 | :math:`G_v^{\zeta_1 w}` : :varlink:`vCf` ( local to :filelink:`MOM_VECINV.F <pkg/mom_vecinv/mom_vecinv.F>` )
194219431944 Gradient of Bernoulli function
1945 ------------------------------
19461947 .. math::
1948 G_u^{\partial_x B} =
0bad585a21 Navi*1949 \frac{1}{\Delta x_c} \delta_i ( \phi' + \mathrm{KE} )
4f2617d475 Jeff*1950 :label: gu_dBdx
19511952 .. math::
1953 G_v^{\partial_y B} =
0bad585a21 Navi*1954 \frac{1}{\Delta x_y} \delta_j ( \phi' + \mathrm{KE} )
4f2617d475 Jeff*1955 :label: gv_dBdy
19561957 .. admonition:: S/R :filelink:`MOM_VI_U_GRAD_KE <pkg/mom_vecinv/mom_vi_u_grad_ke.F>`, :filelink:`MOM_VI_V_GRAD_KE <pkg/mom_vecinv/mom_vi_v_grad_ke.F>`
1958 :class: note
19590bad585a21 Navi*1960 | :math:`G_u^{\partial_x \mathrm{KE}}` : :varlink:`uCf` ( local to :filelink:`MOM_VECINV.F <pkg/mom_vecinv/mom_vecinv.F>` )
1961 | :math:`G_v^{\partial_y \mathrm{KE}}` : :varlink:`vCf` ( local to :filelink:`MOM_VECINV.F <pkg/mom_vecinv/mom_vecinv.F>` )
4f2617d475 Jeff*196219631964 Horizontal divergence
1965 ---------------------
19661967 The horizontal divergence, a complimentary quantity to relative
1968 vorticity, is used in parameterizing the Reynolds stresses and is
1969 discretized:
19701971 .. math::
1972 D = \frac{1}{{\cal A}_c h_c} (
1973 \delta_i \Delta y_g h_w u
1974 + \delta_j \Delta x_g h_s v )
1975 :label: horiz_div)vecinv
19761977 .. admonition:: S/R :filelink:`MOM_CALC_KE <pkg/mom_common/mom_calc_ke.F>`
1978 :class: note
19791980 | :math:`D` : :varlink:`hDiv` ( local to :filelink:`MOM_VECINV.F <pkg/mom_vecinv/mom_vecinv.F>` )
19811982 Horizontal dissipation
1983 ----------------------
19841985 The following discretization of horizontal dissipation conserves
1986 potential vorticity (thickness weighted relative vorticity) and
1987 divergence and dissipates energy, enstrophy and divergence squared:
19881989 .. math::
0bad585a21 Navi*1990 G_u^{h- \rm diss} =
4f2617d475 Jeff*1991 \frac{1}{\Delta x_c} \delta_i ( A_D D - A_{D4} D^*)
1992 - \frac{1}{\Delta y_u h_w} \delta_j h_\zeta ( A_\zeta \zeta - A_{\zeta4} \zeta^* )
1993 :label: gu_h-dissip
19941995 .. math::
0bad585a21 Navi*1996 G_v^{h- \rm diss} =
4f2617d475 Jeff*1997 \frac{1}{\Delta x_v h_s} \delta_i h_\zeta ( A_\zeta \zeta - A_\zeta \zeta^* )
1998 + \frac{1}{\Delta y_c} \delta_j ( A_D D - A_{D4} D^* )
1999 :label: gv_h-dissip
20002001 where
20022003 .. math::
20042005 \begin{aligned}
0bad585a21 Navi*2006 D^* & = \frac{1}{{\cal A}_c h_c} (
4f2617d475 Jeff*2007 \delta_i \Delta y_g h_w \nabla^2 u
2008 + \delta_j \Delta x_g h_s \nabla^2 v ) \\
0bad585a21 Navi*2009 \zeta^* & = \frac{1}{{\cal A}_\zeta} (
4f2617d475 Jeff*2010 \delta_i \Delta y_c \nabla^2 v
2011 - \delta_j \Delta x_c \nabla^2 u )\end{aligned}
20122013 .. admonition:: S/R :filelink:`MOM_VI_HDISSIP <pkg/mom_vecinv/mom_vi_hdissip.F>`
2014 :class: note
20152016 | :math:`G_u^{h-dissip}` : :varlink:`uDissip` ( local to :filelink:`MOM_VI_HDISSIP.F <pkg/mom_vecinv/mom_vi_hdissip.F>` )
2017 | :math:`G_v^{h-dissip}` : :varlink:`vDissip` ( local to :filelink:`MOM_VI_HDISSIP.F <pkg/mom_vecinv/mom_vi_hdissip.F>` )
201820192020 Vertical dissipation
2021 --------------------
20222023 Currently, this is exactly the same code as the flux form equations.
20242025 .. math::
0bad585a21 Navi*2026 G_u^{v- \rm diss} =
4f2617d475 Jeff*2027 \frac{1}{\Delta r_f h_w} \delta_k \tau_{13}
2028 :label: gu_v-dissip
20292030 .. math::
0bad585a21 Navi*2031 G_v^{v- \rm diss} =
4f2617d475 Jeff*2032 \frac{1}{\Delta r_f h_s} \delta_k \tau_{23}
2033 :label: gv_v-dissip
20342035 represents the general discrete form of the vertical dissipation terms.
20362037 In the interior the vertical stresses are discretized:
20382039 .. math::
20402041 \begin{aligned}
0bad585a21 Navi*2042 \tau_{13} & = A_v \frac{1}{\Delta r_c} \delta_k u \\
2043 \tau_{23} & = A_v \frac{1}{\Delta r_c} \delta_k v\end{aligned}
4f2617d475 Jeff*20442045 .. admonition:: S/R :filelink:`MOM_U_RVISCFLUX <pkg/mom_common/mom_u_rviscflux.F>`, :filelink:`MOM_V_RVISCFLUX <pkg/mom_common/mom_u_rviscflux.F>`
2046 :class: note
20472048 | :math:`\tau_{13}, \tau_{23}` : :varlink:`vrf` ( local to :filelink:`MOM_VECINV.F <pkg/mom_vecinv/mom_vecinv.F>` )
20492050 .. _tracer_eqns:
20512052 Tracer equations
2053 ================
20542055 The basic discretization used for the tracer equations is the second
2056 order piece-wise constant finite volume form of the forced
2057 advection-diffusion equations. There are many alternatives to second
2058 order method for advection and alternative parameterizations for the
2059 sub-grid scale processes. The Gent-McWilliams eddy parameterization, KPP
2060 mixing scheme and PV flux parameterization are all dealt with in
2061 separate sections. The basic discretization of the advection-diffusion
2062 part of the tracer equations and the various advection schemes will be
2063 described here.
206468aadaa6bd Phob*2065 .. _sub_tracer_eqns_ab:
20664f2617d475 Jeff*2067 Time-stepping of tracers: ABII
2068 ------------------------------
20692070 The default advection scheme is the centered second order method which
2071 requires a second order or quasi-second order time-stepping scheme to be
2072 stable. Historically this has been the quasi-second order
2073 Adams-Bashforth method (ABII) and applied to all terms. For an arbitrary
2074 tracer, :math:`\tau`, the forced advection-diffusion equation reads:
20750bad585a21 Navi*2076 .. math:: \partial_t \tau + G_{\rm adv}^\tau = G_{\rm diff}^\tau + G_{\rm forc}^\tau
4f2617d475 Jeff*2077 :label: trac_forced_advdiff
20780bad585a21 Navi*2079 where :math:`G_{\rm adv}^\tau`, :math:`G_{\rm diff}^\tau` and
2080 :math:`G_{\rm forc}^\tau` are the tendencies due to advection, diffusion and
4f2617d475 Jeff*2081 forcing, respectively, namely:
20822083 .. math::
0bad585a21 Navi*2084 G_{\rm adv}^\tau = \partial_x (u \tau) + \partial_y (v \tau) + \partial_r (w \tau)
2085 - \tau \nabla \cdot {\bf v}
4f2617d475 Jeff*2086 :label: g_adv-tau
20872088 .. math::
0bad585a21 Navi*2089 G_{\rm diff}^\tau = \nabla \cdot \left ( {\bf K} \nabla \tau \right )
4f2617d475 Jeff*2090 :label: g_diff-tau
20912092 and the forcing can be some arbitrary function of state, time and
2093 space.
20940bad585a21 Navi*2095 The term, :math:`\tau \nabla \cdot {\bf v}`, is required to retain local
4f2617d475 Jeff*2096 conservation in conjunction with the linear implicit free-surface. It
2097 only affects the surface layer since the flow is non-divergent
2098 everywhere else. This term is therefore referred to as the surface
2099 correction term. Global conservation is not possible using the flux-form
2100 (as here) and a linearized free-surface
2101 (Griffies and Hallberg (2000) :cite:`griffies:00` , Campin et al. (2004) :cite:`cam:04`).
21022103 The continuity equation can be recovered by setting
0bad585a21 Navi*2104 :math:`G_{\rm diff}=G_{\rm forc}=0` and :math:`\tau=1`.
4f2617d475 Jeff*21052106 The driver routine that calls the routines to calculate tendencies are
2107 :filelink:`CALC_GT <model/src/calc_gt.F>` and :filelink:`CALC_GS <model/src/calc_gs.F>` for temperature and salt (moisture),
2108 respectively. These in turn call a generic advection diffusion routine
2109 :filelink:`GAD_CALC_RHS <pkg/generic_advdiff/gad_calc_rhs.F>` that is called with the flow field and relevant
2110 tracer as arguments and returns the collective tendency due to advection
2111 and diffusion. Forcing is add subsequently in :filelink:`CALC_GT <model/src/calc_gt.F>`
2112 or :filelink:`CALC_GS <model/src/calc_gs.F>` to the same tendency array.
21132114 .. admonition:: S/R :filelink:`GAD_CALC_RHS <pkg/generic_advdiff/gad_calc_rhs.F>`
2115 :class: note
21162117 | :math:`\tau` : :varlink:`tau` ( argument )
2118 | :math:`G^{(n)}` : :varlink:`gTracer` ( argument )
2119 | :math:`F_r` : :varlink:`fVerT` ( argument )
21202121 The space and time discretization are treated separately (method of
2122 lines). Tendencies are calculated at time levels :math:`n` and
2123 :math:`n-1` and extrapolated to :math:`n+1/2` using the Adams-Bashforth
2124 method:
21252126 .. math::
ab47de63dc Mart*2127 G^{(n+1/2)} =
0bad585a21 Navi*2128 (\tfrac{3}{2} + \epsilon) G^{(n)} - (\tfrac{1}{2} + \epsilon) G^{(n-1)}
4f2617d475 Jeff*2129 :label: g_nponehalf
21300bad585a21 Navi*2131 where :math:`G^{(n)} = G_{\rm adv}^\tau + G_{\rm diff}^\tau + G_{\rm src}^\tau` at
4f2617d475 Jeff*2132 time step :math:`n`. The tendency at :math:`n-1` is not re-calculated
2133 but rather the tendency at :math:`n` is stored in a global array for
2134 later re-use.
21352136 .. admonition:: S/R :filelink:`ADAMS_BASHFORTH2 <model/src/gad_calc_rhs.F>`
2137 :class: note
21382139 | :math:`G^{(n+1/2)}` : :varlink:`gTracer` ( argument on exit )
2140 | :math:`G^{(n)}` : :varlink:`gTracer` ( argument on entry )
2141 | :math:`G^{(n-1)}` : :varlink:`gTrNm1` ( argument )
2142 | :math:`\epsilon` : :varlink:`ABeps` ( :filelink:`PARAMS.h <model/inc/PARAMS.h>` )
21432144 The tracers are stepped forward in time using the extrapolated tendency:
21452146 .. math:: \tau^{(n+1)} = \tau^{(n)} + \Delta t G^{(n+1/2)}
2147 :label: tau_np1
21482149 .. admonition:: S/R :filelink:`TIMESTEP_TRACER <model/src/timestep_tracer.F>`
2150 :class: note
21512152 | :math:`\tau^{(n+1)}` : :varlink:`gTracer` ( argument on exit )
2153 | :math:`\tau^{(n)}` : :varlink:`tracer` ( argument on entry )
2154 | :math:`G^{(n+1/2)}` : :varlink:`gTracer` ( argument )
2155 | :math:`\Delta t` : :varlink:`deltaTtracer` ( :filelink:`PARAMS.h <model/inc/PARAMS.h>` )
21562157 Strictly speaking the ABII scheme should be applied only to the
2158 advection terms. However, this scheme is only used in conjunction with
2159 the standard second, third and fourth order advection schemes. Selection
2160 of any other advection scheme disables Adams-Bashforth for tracers so
2161 that explicit diffusion and forcing use the forward method.
216268aadaa6bd Phob*2163 .. _advection_schemes:
4f2617d475 Jeff*216468aadaa6bd Phob*2165 Advection schemes
2166 =================
4f2617d475 Jeff*2167ab47de63dc Mart*2168 .. toctree::
68aadaa6bd Phob*2169 adv-schemes.rst
4f2617d475 Jeff*2170025afa4065 Jeff*2171 .. _shapiro_filter:
4f2617d475 Jeff*21722173 Shapiro Filter
2174 ==============
21752176 The Shapiro filter (Shapiro 1970) :cite:`shapiro:70` is a high order
2177 horizontal filter that efficiently remove small scale grid noise without
2178 affecting the physical structures of a field. It is applied at the end
2179 of the time step on both velocity and tracer fields.
21802181 Three different space operators are considered here (S1,S2 and S4). They
2182 differ essentially by the sequence of derivative in both X and Y
2183 directions. Consequently they show different damping response function
2184 specially in the diagonal directions X+Y and X-Y.
21852186 Space derivatives can be computed in the real space, taking into account
2187 the grid spacing. Alternatively, a pure computational filter can be
2188 defined, using pure numerical differences and ignoring grid spacing.
2189 This later form is stable whatever the grid is, and therefore specially
2190 useful for highly anisotropic grid such as spherical coordinate grid. A
2191 damping time-scale parameter :math:`\tau_{shap}` defines the strength of
2192 the filter damping.
21932194 The three computational filter operators are :
21952196 .. math::
0bad585a21 Navi*2197 \begin{aligned}
2198 & \mathrm{S1c:}\hspace{2cm}
2199 [1 - 1/2 \frac{\Delta t}{\tau_{\rm Shap}}
ab47de63dc Mart*2200 \{ (\frac{1}{4}\delta_{ii})^n
0bad585a21 Navi*2201 + (\frac{1}{4}\delta_{jj})^n \} ]\\
2202 & \mathrm{S2c:}\hspace{2cm}
ab47de63dc Mart*2203 [1 - \frac{\Delta t}{\tau_{\rm Shap}}
0bad585a21 Navi*2204 \{ \frac{1}{8} (\delta_{ii} + \delta_{jj}) \}^n]\\
2205 & \mathrm{S4c:}\hspace{2cm}
2206 [1 - \frac{\Delta t}{\tau_{\rm Shap}} (\frac{1}{4}\delta_{ii})^n]
ab47de63dc Mart*2207 [1 - \frac{\Delta t}{\tau_{\rm Shap}} (\frac{1}{4}\delta_{jj})^n]\end{aligned}
4f2617d475 Jeff*22082209 In addition, the S2 operator can easily be extended to a physical space
2210 filter:
22112212 .. math::
22132214 \mathrm{S2g:}\hspace{2cm}
0bad585a21 Navi*2215 [1 - \frac{\Delta t}{\tau_{\rm Shap}}
2216 \{ \frac{L_{\rm Shap}^2}{8} \overline{\nabla}^2 \}^n]
4f2617d475 Jeff*22172218 with the Laplacian operator :math:`\overline{\nabla}^2` and a length
0bad585a21 Navi*2219 scale parameter :math:`L_{\rm Shap}`. The stability of this S2g filter
2220 requires :math:`L_{\rm Shap} < \mathrm{Min}^{(\rm Global)}(\Delta x,\Delta y)`.
4f2617d475 Jeff*22219ce7d74115 Jeff*2222 .. _shapiro_diagnostics:
22234f2617d475 Jeff*2224 SHAP Diagnostics
2225 ----------------
22262227 ::
22282229 --------------------------------------------------------------
ab47de63dc Mart*2230 <-Name->|Levs|parsing code|<-Units->|<- Tile (max=80c)
4f2617d475 Jeff*2231 --------------------------------------------------------------
2232 SHAP_dT | 5 |SM MR |K/s |Temperature Tendency due to Shapiro Filter
2233 SHAP_dS | 5 |SM MR |g/kg/s |Specific Humidity Tendency due to Shapiro Filter
2234 SHAP_dU | 5 |UU 148MR |m/s^2 |Zonal Wind Tendency due to Shapiro Filter
2235 SHAP_dV | 5 |VV 147MR |m/s^2 |Meridional Wind Tendency due to Shapiro Filter
22369c8516d9da Jeff*2237 .. _nonlinear_vis_schemes:
4f2617d475 Jeff*22382239 Nonlinear Viscosities for Large Eddy Simulation
2240 ===============================================
22412242 In Large Eddy Simulations (LES), a turbulent closure needs to be
2243 provided that accounts for the effects of subgridscale motions on the
2244 large scale. With sufficiently powerful computers, we could resolve the
2245 entire flow down to the molecular viscosity scales
2246 (:math:`L_{\nu}\approx 1 \rm cm`). Current computation allows perhaps
2247 four decades to be resolved, so the largest problem computationally
2248 feasible would be about 10m. Most oceanographic problems are much larger
2249 in scale, so some form of LES is required, where only the largest scales
2250 of motion are resolved, and the subgridscale effects on the
2251 large-scale are parameterized.
22522253 To formalize this process, we can introduce a filter over the
2254 subgridscale L: :math:`u_\alpha\rightarrow \overline{u_\alpha}` and L:
2255 :math:`b\rightarrow \overline{b}`. This filter has some intrinsic length and time
2256 scales, and we assume that the flow at that scale can be characterized
2257 with a single velocity scale (:math:`V`) and vertical buoyancy gradient
2258 (:math:`N^2`). The filtered equations of motion in a local Mercator
2259 projection about the gridpoint in question (see Appendix for notation
2260 and details of approximation) are:
22612262 .. math::
2263 {\frac{{ \overline{D} {{\tilde {\overline{u}}}}}} {{\overline{Dt}}}} - \frac{{{\tilde {\overline{v}}}}
2264 \sin\theta}{{\rm Ro}\sin\theta_0} + \frac{{M_{Ro}}}{{\rm Ro}} \frac{\partial{\overline{\pi}}}{\partial{x}}
2265 = -\left({\overline{\frac{D{\tilde u}}{Dt} }} - {\frac{{\overline{D} {{\tilde {\overline{u}}}}}}{{\overline{Dt}}} }\right)
2266 +\frac{\nabla^2{{\tilde {\overline{u}}}}}{{\rm Re}}
2267 :label: mercat
22682269 .. math::
2270 {\frac{{ \overline{D} {{\tilde {\overline{v}}}}}} {{\overline{Dt}}}} - \frac{{{\tilde {\overline{u}}}}
2271 \sin\theta}{{\rm Ro}\sin\theta_0} + \frac{{M_{Ro}}}{{\rm Ro}} \frac{\partial{\overline{\pi}}}{\partial{y}}
2272 = -\left({\overline{\frac{D{\tilde v}}{Dt} }} - {\frac{{\overline{D} {{\tilde {\overline{v}}}}}}{{\overline{Dt}}} }\right)
2273 +\frac{\nabla^2{{\tilde {\overline{v}}}}}{{\rm Re}}
2274 :label: mercat_v
22752276 .. math::
2277 \frac{{\overline{D} \overline w}}{{\overline{Dt}}} + \frac{ \frac{\partial{\overline{\pi}}}{\partial{z}} - \overline b}{{\rm Fr}^2\lambda^2}
2278 = -\left(\overline{\frac{D{w}}{Dt}} - \frac{{\overline{D} \overline w}}{{\overline{Dt}}}\right)
0bad585a21 Navi*2279 +\frac{\nabla^2 \overline w}{{\rm Re}}
4f2617d475 Jeff*2280 :label: mercat_w
22812282 .. math::
2283 \frac{{\overline{D} \bar b}}{{\overline{Dt}}} + \overline w =
2284 -\left(\overline{\frac{D{b}}{Dt}} - \frac{{\overline{D} \bar b}}{{\overline{Dt}}}\right)
0bad585a21 Navi*2285 +\frac{\nabla^2 \overline b}{\Pr{\rm Re}}
4f2617d475 Jeff*2286 :label: mercat_b
22872288 .. math::
2289 \mu^2\left({\frac{\partial{\tilde {\overline{u}}}}{\partial{x}}} + {\frac{\partial{\tilde {\overline{v}}}}{\partial{y}}} \right)
2290 + {\frac{\partial{\overline w}}{\partial{z}}} = 0
2291 :label: cont_bfk
22922293 Tildes denote multiplication by :math:`\cos\theta/\cos\theta_0` to
2294 account for converging meridians.
22952296 The ocean is usually turbulent, and an operational definition of
2297 turbulence is that the terms in parentheses (the ’eddy’ terms) on the
2298 right of :eq:`mercat` - :eq:`mercat_b`) are of comparable magnitude to the terms on the
2299 left-hand side. The terms proportional to the inverse of , instead, are
2300 many orders of magnitude smaller than all of the other terms in
2301 virtually every oceanic application.
23022303 Eddy Viscosity
2304 --------------
23052306 A turbulent closure provides an approximation to the ’eddy’ terms on the
2307 right of the preceding equations. The simplest form of LES is just to
2308 increase the viscosity and diffusivity until the viscous and diffusive
2309 scales are resolved. That is, we approximate :eq:`mercat` - :eq:`mercat_b`:
23102311 .. math::
2312 \left({\overline{\frac{D{\tilde u}}{Dt} }} - {\frac{{\overline{D} {{\tilde {\overline{u}}}}}}{{\overline{Dt}}} }\right)
2313 \approx\frac{\nabla^2_h{{\tilde {\overline{u}}}}}{{\rm Re}_h}
2314 +\frac{{\frac{\partial^2{{\tilde {\overline{u}}}}}{{\partial{z}}^2}}}{{\rm Re}_v}
2315 :label: eddyvisc_u
23162317 .. math::
2318 \left({\overline{\frac{D{\tilde v}}{Dt} }} - {\frac{{\overline{D} {{\tilde {\overline{v}}}}}}{{\overline{Dt}}} }\right)
2319 \approx\frac{\nabla^2_h{{\tilde {\overline{v}}}}}{{\rm Re}_h}
2320 +\frac{{\frac{\partial^2{{\tilde {\overline{v}}}}}{{\partial{z}}^2}}}{{\rm Re}_v}
2321 :label: eddyvisc_v
23222323 .. math::
2324 \left(\overline{\frac{D{w}}{Dt}} - \frac{{\overline{D} \overline w}}{{\overline{Dt}}}\right)
2325 \approx\frac{\nabla^2_h \overline w}{{\rm Re}_h}
2326 +\frac{{\frac{\partial^2{\overline w}}{{\partial{z}}^2}}}{{\rm Re}_v}
2327 :label: eddyvisc_w
23282329 .. math::
2330 \left(\overline{\frac{D{b}}{Dt}} - \frac{{\overline{D} \bar b}}{{\overline{Dt}}}\right)
2331 \approx\frac{\nabla^2_h \overline b}{\Pr{\rm Re}_h}
0bad585a21 Navi*2332 +\frac{{\frac{\partial^2{\overline b}}{{\partial{z}}^2}}}{\Pr{\rm Re}_v}
4f2617d475 Jeff*2333 :label: eddyvisc_b
23342335 Reynolds-Number Limited Eddy Viscosity
2336 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
23372338 One way of ensuring that the gridscale is sufficiently viscous (i.e.,
2339 resolved) is to choose the eddy viscosity :math:`A_h` so that the
2340 gridscale horizontal Reynolds number based on this eddy viscosity,
2341 :math:`{\rm Re}_h`, is O(1). That is, if the gridscale is to be
2342 viscous, then the viscosity should be chosen to make the viscous terms
2343 as large as the advective ones. Bryan et al. (1975)
2344 :cite:`bryan:75` notes that a computational mode is
2345 squelched by using :math:`{\rm Re}_h<`\ 2.
23462347 MITgcm users can select horizontal eddy viscosities based on
2348 :math:`{\rm Re}_h` using two methods. 1) The user may estimate the
2349 velocity scale expected from the calculation and grid spacing and set
2350 :varlink:`viscAh` to satisfy :math:`{\rm Re}_h<2`. 2) The user may use
2351 :varlink:`viscAhReMax`, which ensures that the viscosity is always chosen so that
2352 :math:`{\rm Re}_h<` :varlink:`viscAhReMax`. This last option should be used with
2353 caution, however, since it effectively implies that viscous terms are
2354 fixed in magnitude relative to advective terms. While it may be a useful
2355 method for specifying a minimum viscosity with little effort, tests
2356 Bryan et al. (1975) :cite:`bryan:75` have shown that setting :varlink:`viscAhReMax` =2
2357 often tends to increase the viscosity substantially over other more
2358 ’physical’ parameterizations below, especially in regions where
2359 gradients of velocity are small (and thus turbulence may be weak), so
2360 perhaps a more liberal value should be used, e.g. :varlink:`viscAhReMax` =10.
23612362 While it is certainly necessary that viscosity be active at the
2363 gridscale, the wavelength where dissipation of energy or enstrophy
2364 occurs is not necessarily :math:`L=A_h/U`. In fact, it is by ensuring
2365 that either the dissipation of energy in a 3-d turbulent cascade
2366 (Smagorinsky) or dissipation of enstrophy in a 2-d turbulent cascade
2367 (Leith) is resolved that these parameterizations derive their physical
2368 meaning.
23692370 Vertical Eddy Viscosities
2371 ~~~~~~~~~~~~~~~~~~~~~~~~~
23722373 Vertical eddy viscosities are often chosen in a more subjective way, as
2374 model stability is not usually as sensitive to vertical viscosity.
2375 Usually the ’observed’ value from finescale measurements is used
2376 (e.g. :varlink:`viscAr`\ :math:`\approx1\times10^{-4} m^2/s`). However,
2377 Smagorinsky (1993) :cite:`smag:93` notes that the Smagorinsky
2378 parameterization of isotropic turbulence implies a value of the vertical
2379 viscosity as well as the horizontal viscosity (see below).
23802381 Smagorinsky Viscosity
2382 ~~~~~~~~~~~~~~~~~~~~~
23832384 Some suggest (see Smagorinsky 1963 :cite:`smag:63`; Smagorinsky 1993 :cite:`smag:93`) choosing a viscosity
2385 that *depends on the resolved motions*. Thus, the overall viscous
2386 operator has a nonlinear dependence on velocity. Smagorinsky chose his
2387 form of viscosity by considering Kolmogorov’s ideas about the energy
2388 spectrum of 3-d isotropic turbulence.
23892390 Kolmogorov supposed that energy is injected into the flow at
2391 large scales (small :math:`k`) and is ’cascaded’ or transferred
2392 conservatively by nonlinear processes to smaller and smaller scales
2393 until it is dissipated near the viscous scale. By setting the energy
2394 flux through a particular wavenumber :math:`k`, :math:`\epsilon`, to be
2395 a constant in :math:`k`, there is only one combination of viscosity and
2396 energy flux that has the units of length, the Kolmogorov wavelength. It
2397 is :math:`L_\epsilon(\nu)\propto\pi\epsilon^{-1/4}\nu^{3/4}` (the
2398 :math:`\pi` stems from conversion from wavenumber to wavelength). To
2399 ensure that this viscous scale is resolved in a numerical model, the
2400 gridscale should be decreased until :math:`L_\epsilon(\nu)>L` (so-called
2401 Direct Numerical Simulation, or DNS). Alternatively, an eddy viscosity
2402 can be used and the corresponding Kolmogorov length can be made larger
2403 than the gridscale,
2404 :math:`L_\epsilon(A_h)\propto\pi\epsilon^{-1/4}A_h^{3/4}` (for Large
2405 Eddy Simulation or LES).
24062407 There are two methods of ensuring that the Kolmogorov length is resolved
2408 in MITgcm. 1) The user can estimate the flux of energy through spectral
2409 space for a given simulation and adjust grid spacing or :varlink:`viscAh` to ensure
2410 that :math:`L_\epsilon(A_h)>L`; 2) The user may use the approach of
2411 Smagorinsky with :varlink:`viscC2Smag`, which estimates the energy flux at every
2412 grid point, and adjusts the viscosity accordingly.
24132414 Smagorinsky formed the energy equation from the momentum equations by
2415 dotting them with velocity. There are some complications when using the
2416 hydrostatic approximation as described by Smagorinsky (1993)
2417 :cite:`smag:93`. The positive definite energy
2418 dissipation by horizontal viscosity in a hydrostatic flow is
2419 :math:`\nu D^2`, where D is the deformation rate at the viscous scale.
2420 According to Kolmogorov’s theory, this should be a good approximation to
2421 the energy flux at any wavenumber :math:`\epsilon\approx\nu D^2`.
2422 Kolmogorov and Smagorinsky noted that using an eddy viscosity that
2423 exceeds the molecular value :math:`\nu` should ensure that the energy
2424 flux through viscous scale set by the eddy viscosity is the same as it
2425 would have been had we resolved all the way to the true viscous scale.
2426 That is, :math:`\epsilon\approx
0bad585a21 Navi*2427 A_{h \rm Smag} \overline D^2`. If we use this approximation to estimate the
4f2617d475 Jeff*2428 Kolmogorov viscous length, then
24292430 .. math::
0bad585a21 Navi*2431 L_\epsilon(A_{h \rm Smag})\propto\pi\epsilon^{-1/4}A_{h \rm Smag}^{3/4}\approx\pi(A_{h \rm Smag}
2432 \overline D^2)^{-1/4}A_{h\rm Smag}^{3/4} = \pi A_{h\rm Smag}^{1/2}\overline D^{-1/2}
4f2617d475 Jeff*2433 :label: kolm_visc_len
24340bad585a21 Navi*2435 To make :math:`L_\epsilon(A_{h\rm Smag})` scale with the gridscale, then
4f2617d475 Jeff*24360bad585a21 Navi*2437 .. math:: A_{h\rm Smag} = \left(\frac{{\sf viscC2Smag}}{\pi}\right)^2L^2|\overline D|
4f2617d475 Jeff*2438 :label: AhSmag
24392440 Where the deformation rate appropriate for hydrostatic flows with
2441 shallow-water scaling is
24422443 .. math::
2444 |\overline D|=\sqrt{\left({\frac{\partial{\overline {\tilde u}}}{\partial{x}}} - {\frac{\partial{\overline {\tilde v}}}{\partial{y}}}\right)^2
2445 + \left({\frac{\partial{\overline {\tilde u}}}{\partial{y}}} + {\frac{\partial{\overline {\tilde v}}}{\partial{x}}}\right)^2}
2446 :label: Dbar_mag
24472448 The coefficient :varlink:`viscC2Smag` is what an MITgcm user sets, and it replaces
2449 the proportionality in the Kolmogorov length with an equality. Others
2450 (Griffies and Hallberg, 2000 :cite:`griffies:00`) suggest values of :varlink:`viscC2Smag` from 2.2 to
2451 4 for oceanic problems. Smagorinsky (1993) :cite:`smag:93`
2452 shows that values from 0.2 to 0.9 have been used in atmospheric modeling.
24532454 Smagorinsky (1993) :cite:`smag:93` shows that a corresponding
2455 vertical viscosity should be used:
24562457 .. math::
0bad585a21 Navi*2458 A_{v \rm Smag} = \left(\frac{{\sf viscC2Smag}}{\pi}\right)^2H^2
4f2617d475 Jeff*2459 \sqrt{\left({\frac{\partial{\overline {\tilde u}}}{\partial{z}}}\right)^2
2460 + \left({\frac{\partial{\overline {\tilde v}}}{\partial{z}}}\right)^2}
2461 :label: A_vsmag
24622463 This vertical viscosity is currently not implemented in MITgcm.
24649c8516d9da Jeff*2465 .. _leith_viscosity:
24664f2617d475 Jeff*2467 Leith Viscosity
2468 ~~~~~~~~~~~~~~~
24699c8516d9da Jeff*2470 Leith (1968, 1996) :cite:`leith:68` :cite:`leith:96` notes that 2-D turbulence is
2471 quite different from 3-D. In 2-D turbulence, energy cascades
4f2617d475 Jeff*2472 to larger scales, so there is no concern about resolving the scales of
2473 energy dissipation. Instead, another quantity, enstrophy, (which is the
9c8516d9da Jeff*2474 vertical component of vorticity squared) is conserved in 2-D turbulence,
4f2617d475 Jeff*2475 and it cascades to smaller scales where it is dissipated.
24762477 Following a similar argument to that above about energy flux, the
2478 enstrophy flux is estimated to be equal to the positive-definite
0bad585a21 Navi*2479 gridscale dissipation rate of enstrophy :math:`\eta\approx A_{h \rm Leith}
4f2617d475 Jeff*2480 |\nabla\overline \omega_3|^2`. By dimensional analysis, the
0bad585a21 Navi*2481 enstrophy-dissipation scale is :math:`L_\eta(A_{h \rm Leith})\propto\pi
2482 A_{h \rm Leith}^{1/2}\eta^{-1/6}`. Thus, the Leith-estimated length scale of
4f2617d475 Jeff*2483 enstrophy-dissipation and the resulting eddy viscosity are
24842485 .. math::
0bad585a21 Navi*2486 L_\eta(A_{h \rm Leith})\propto\pi A_{h \rm Leith}^{1/2}\eta^{-1/6}
2487 = \pi A_{h \rm Leith}^{1/3}| \nabla \overline \omega_3|^{-1/3}
4f2617d475 Jeff*2488 :label: L_eta
24892490 .. math::
0bad585a21 Navi*2491 A_{h \rm Leith} = \left(\frac{{\sf viscC2Leith}}{\pi}\right)^3L^3| \nabla \overline\omega_3|
4f2617d475 Jeff*2492 :label: Ah_Leith
24932494 .. math::
0bad585a21 Navi*2495 | \nabla \omega_3| \equiv \sqrt{\left[{\frac{\partial{\ }}{\partial{x}}}
4f2617d475 Jeff*2496 \left({\frac{\partial{\overline {\tilde v}}}{\partial{x}}} - {\frac{\partial{\overline {\tilde u}}}{\partial{y}}}\right)\right]^2
2497 + \left[{\frac{\partial{\ }}{\partial{y}}}\left({\frac{\partial{\overline {\tilde v}}}{\partial{x}}}
2498 - {\frac{\partial{\overline {\tilde u}}}{\partial{y}}}\right)\right]^2}
2499 :label: Leith3
25009c8516d9da Jeff*2501 The runtime flag :varlink:`useFullLeith` controls whether or not to calculate the full gradients for the Leith viscosity (.TRUE.)
2502 or to use an approximation (.FALSE.). The only reason to set :varlink:`useFullLeith` = .FALSE. is if your simulation fails when
2503 computing the gradients. This can occur when using the cubed sphere and other complex grids.
f59d76b0dd Ed D*25044f2617d475 Jeff*2505 Modified Leith Viscosity
2506 ~~~~~~~~~~~~~~~~~~~~~~~~
25072508 The argument above for the Leith viscosity parameterization uses
2509 concepts from purely 2-dimensional turbulence, where the horizontal flow
2510 field is assumed to be non-divergent. However, oceanic flows are only
2511 quasi-two dimensional. While the barotropic flow, or the flow within
2512 isopycnal layers may behave nearly as two-dimensional turbulence, there
2513 is a possibility that these flows will be divergent. In a
2514 high-resolution numerical model, these flows may be substantially
2515 divergent near the grid scale, and in fact, numerical instabilities
2516 exist which are only horizontally divergent and have little vertical
2517 vorticity. This causes a difficulty with the Leith viscosity, which can
2518 only respond to buildup of vorticity at the grid scale.
25192520 MITgcm offers two options for dealing with this problem. 1) The
2521 Smagorinsky viscosity can be used instead of Leith, or in conjunction
2522 with Leith -- a purely divergent flow does cause an increase in Smagorinsky
2523 viscosity; 2) The :varlink:`viscC2LeithD` parameter can be set. This is a damping
2524 specifically targeting purely divergent instabilities near the
2525 gridscale. The combined viscosity has the form:
25262527 .. math::
0bad585a21 Navi*2528 A_{h \rm Leith} = L^3\sqrt{\left(\frac{{\sf viscC2Leith}}{\pi}\right)^6
2529 | \nabla \overline \omega_3|^2 + \left(\frac{{\sf viscC2LeithD}}{\pi}\right)^6
2530 | \nabla ( \nabla \cdot \overline {\tilde u}_h)|^2}
4f2617d475 Jeff*2531 :label: Ah_Leithcomb
25322533 .. math::
0bad585a21 Navi*2534 | \nabla ( \nabla \cdot \overline {\tilde u}_h)| \equiv
4f2617d475 Jeff*2535 \sqrt{\left[{\frac{\partial{\ }}{\partial{x}}}\left({\frac{\partial{\overline {\tilde u}}}{\partial{x}}}
2536 + {\frac{\partial{\overline {\tilde v}}}{\partial{y}}}\right)\right]^2
2537 + \left[{\frac{\partial{\ }}{\partial{y}}}\left({\frac{\partial{\overline {\tilde u}}}{\partial{x}}}
2538 + {\frac{\partial{\overline {\tilde v}}}{\partial{y}}}\right)\right]^2}
2539 :label: Leith_mod
25402541 Whether there is any physical rationale for this correction is unclear,
2542 but the numerical consequences are good. The divergence
2543 in flows with the grid scale larger or comparable to the Rossby radius
2544 is typically much smaller than the vorticity, so this adjustment only
2545 rarely adjusts the viscosity if :varlink:`viscC2LeithD` = :varlink:`viscC2Leith`.
2546 However, the rare regions where this
2547 viscosity acts are often the locations for the largest vales of vertical
2548 velocity in the domain. Since the CFL condition on vertical velocity is
2549 often what sets the maximum timestep, this viscosity may substantially
2550 increase the allowable timestep without severely compromising the verity
2551 of the simulation. Tests have shown that in some calculations, a
2552 timestep three times larger was allowed when :varlink:`viscC2LeithD` = :varlink:`viscC2Leith`.
2553f59d76b0dd Ed D*25542555 Quasi-Geostrophic Leith Viscosity
2556 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25572558 A variant of Leith viscosity can be derived for quasi-geostrophic dynamics.
2559 This leads to a slightly different equation for the viscosity that includes
2560 a contribution from quasigeostrophic vortex stretching (Bachman et al. 2017 :cite:`bachman:17`).
2561 The viscosity is given by
25622563 .. math::
ab47de63dc Mart*2564 \nu_{*} = \left(\frac{\Lambda \Delta s}{\pi}\right)^{3} \left| \nabla _{h}(f\mathbf{\hat{z}}) +
0bad585a21 Navi*2565 \nabla _{h}( \nabla \times \mathbf{v}_{h*}) + \partial_{z}\frac{f}{N^{2}} \nabla _{h} b \right|
f59d76b0dd Ed D*2566 :label: bachman2017_eq39
25672568 where :math:`\Lambda` is a tunable parameter of :math:`\mathcal{O}(1)`,
2569 :math:`\Delta s = \sqrt{\Delta x \Delta y}` is the grid scale, :math:`f\mathbf{\hat{z}}`
2570 is the vertical component of the Coriolis parameter, :math:`\mathbf{v}_{h*}` is the horizontal velocity,
2571 :math:`N^{2}` is the Brunt-Väisälä frequency, and :math:`b` is the buoyancy.
25722573 However, the viscosity given by :eq:`bachman2017_eq39` does not constrain purely
2574 divergent motions. As such, a small :math:`\mathcal{O}(\epsilon)` correction is added
25752576 .. math::
ab47de63dc Mart*2577 \nu_{*} = \left(\frac{\Lambda \Delta s}{\pi}\right)^{3}
2578 \sqrt{\left| \nabla _{h}(f\mathbf{\hat{z}}) + \nabla _{h}( \nabla \times \mathbf{v}_{h*}) +
0bad585a21 Navi*2579 \partial_{z} \frac{f}{N^{2}} \nabla _{h} b\right|^{2} + | \nabla ( \nabla \cdot \mathbf{v}_{h})|^{2}}
f59d76b0dd Ed D*2580 :label: bachman2017_eq40
25812582 This form is, however, numerically awkward; as the Brunt-Väisälä Frequency becomes very small
2583 in regions of weak or vanishing stratification, the vortex stretching term becomes very large.
2584 The resulting large viscosities can lead to numerical instabilities. Bachman et al. (2017) :cite:`bachman:17`
2585 present two limiting forms for the viscosity based on flow parameters such as :math:`Fr_{*}`,
2586 the Froude number, and :math:`Ro_{*}`, the Rossby number. The second of which,
25872588 .. math::
2589 \begin{aligned}
2590 \nu_{*} = & \left(\frac{\Lambda \Delta s}{\pi}\right)^{3} \\
0bad585a21 Navi*2591 & \sqrt{\min \left( \left| \nabla _{h}q_{2*} + \partial_{z} \frac{f^{2}}{N^{2}} \nabla _{h} b \right|,
2592 \left( 1 + \frac{Fr_{*}^{2}}{Ro_{*}^{2}} + Fr_{*}^{4}\right) | \nabla _{h}q_{2*}|\right)^{2} + | \nabla ( \nabla \cdot \mathbf{v}_{h}) |^{2}}
f59d76b0dd Ed D*2593 \end{aligned}
2594 :label: bachman2017_eq56
259525962597 has been implemented and is active when ``#define`` :varlink:`ALLOW_LEITH_QG` is included
2598 in a copy of :filelink:`MOM_COMMON_OPTIONS.h<pkg/mom_common/MOM_COMMON_OPTIONS.h>` in
2599 a code mods directory (specified through :ref:`-mods <mods_option>` command
2600 line option in :filelink:`genmake2 <tools/genmake2>`).
26012602 LeithQG viscosity is designed to work best in simulations that resolve some mesoscale features.
2603 In simulations that are too coarse to permit eddies or fine enough to resolve submesoscale features,
2604 it should fail gracefully. The non-dimensional parameter :varlink:`viscC2LeithQG` corresponds to
2605 :math:`\Lambda` in the above equations and scales the viscosity; the recommended value is 1.
26062607 There is no reason to use the quasi-geostrophic form of Leith at the same time as either
2608 standard Leith or modified Leith. Therefore, the model will not run if non-zero values have
2609 been set for these coefficients; the model will stop during the configuration check.
2610 LeithQG can be used regardless of the setting for :varlink:`useFullLeith`. Just as for the
2611 other forms of Leith viscosity, this flag determines whether or not the full gradients are used.
2612 The simplified gradients were originally intended for use on complex grids, but have been
2613 shown to produce better kinetic energy spectra even on very straightforward grids.
26142615 To add the LeithQG viscosity to the GMRedi coefficient, as was done in some of the simulations
2616 in Bachman et al. (2017) :cite:`bachman:17`, ``#define`` :varlink:`ALLOW_LEITH_QG` must be specified,
2617 as described above. In addition to this, the compile-time flag :varlink:`ALLOW_GM_LEITH_QG`
2618 must also be defined in a (``-mods``) copy of :filelink:`GMREDI_OPTIONS.h<pkg/gmredi/GMREDI_OPTIONS.h>`
2619 when the model is compiled, and the runtime parameter :varlink:`GM_useLeithQG` set to .TRUE. in ``data.gmredi``.
2620 This will use the value of :varlink:`viscC2LeithQG` specified in the ``data`` input file to compute the coefficient.
26219c8516d9da Jeff*2622 .. _CFL_constraint_visc:
f59d76b0dd Ed D*26234f2617d475 Jeff*2624 Courant–Freidrichs–Lewy Constraint on Viscosity
2625 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
26262627 Whatever viscosities are used in the model, the choice is constrained by
2628 gridscale and timestep by the Courant–Freidrichs–Lewy (CFL) constraint
2629 on stability:
26302631 .. math::
2632 \begin{aligned}
2633 A_h & < \frac{L^2}{4\Delta t} \\
2634 A_4 & \le \frac{L^4}{32\Delta t}\end{aligned}
26352636 The viscosities may be automatically limited to be no greater than
2637 these values in MITgcm by specifying :varlink:`viscAhGridMax` :math:`<1` and
2638 :varlink:`viscA4GridMax` :math:`<1`. Similarly-scaled minimum values of
2639 viscosities are provided by :varlink:`viscAhGridMin` and :varlink:`viscA4GridMin`, which if
2640 used, should be set to values :math:`\ll 1`. :math:`L` is roughly the
2641 gridscale (see below).
26422643 Following Griffies and Hallberg (2000) :cite:`griffies:00`, we note that there is a
2644 factor of :math:`\Delta x^2/8` difference between the harmonic and biharmonic viscosities. Thus,
2645 whenever a non-dimensional harmonic coefficient is used in the MITgcm
2646 (e.g. :varlink:`viscAhGridMax` :math:`<1`), the biharmonic equivalent is scaled
2647 so that the same non-dimensional value can be used (e.g. :varlink:`viscA4GridMax` :math:`<1`).
26482649 Biharmonic Viscosity
2650 ~~~~~~~~~~~~~~~~~~~~
26512652 Holland (1978) :cite:`holland:78` suggested that eddy viscosities ought to be
2653 focused on the dynamics at the grid scale, as larger motions would be
2654 ’resolved’. To enhance the scale selectivity of the viscous operator, he
2655 suggested a biharmonic eddy viscosity instead of a harmonic (or Laplacian) viscosity:
26562657 .. math::
2658 \left({\overline{\frac{D{\tilde u}}{Dt} }} - {\frac{{\overline{D} {{\tilde {\overline{u}}}}}}{{\overline{Dt}}} }\right)
2659 \approx \frac{-\nabla^4_h{{\tilde {\overline{u}}}}}{{\rm Re}_4}
2660 + \frac{{\frac{\partial^2{{\tilde {\overline{u}}}}}{{\partial{z}}^2}}}{{\rm Re}_v}
2661 :label: bieddyvisc_u
266226632664 .. math::
2665 \left({\overline{\frac{D{\tilde v}}{Dt} }} - {\frac{{\overline{D} {{\tilde {\overline{v}}}}}}{{\overline{Dt}}} }\right)
2666 \approx \frac{-\nabla^4_h{{\tilde {\overline{v}}}}}{{\rm Re}_4}
0bad585a21 Navi*2667 + \frac{{\frac{\partial^2{{\tilde {\overline{v}}}}}{{\partial{z}}^2}}}{{\rm Re}_v}
4f2617d475 Jeff*2668 :label: bieddyvisc_v
266926702671 .. math::
2672 \left(\overline{\frac{D{w}}{Dt}} - \frac{{\overline{D} \overline w}}{{\overline{Dt}}}\right)
0bad585a21 Navi*2673 \approx\frac{-\nabla^4_h\overline w}{{\rm Re}_4} + \frac{{\frac{\partial^2{\overline w}}{{\partial{z}}^2}}}{{\rm Re}_v}
4f2617d475 Jeff*2674 :label: bieddyvisc_w
26752676 .. math::
2677 \left(\overline{\frac{D{b}}{Dt}} - \frac{{\overline{D} \bar b}}{{\overline{Dt}}}\right)
2678 \approx \frac{-\nabla^4_h \overline b}{\Pr{\rm Re}_4}
0bad585a21 Navi*2679 +\frac{{\frac{\partial^2{\overline b}}{{\partial{z}}^2}}}{\Pr{\rm Re}_v}
4f2617d475 Jeff*2680 :label: bieddyvisc_b
268126822683 Griffies and Hallberg (2000) :cite:`griffies:00` propose that if one scales the
2684 biharmonic viscosity by stability considerations, then the biharmonic
2685 viscous terms will be similarly active to harmonic viscous terms at the
2686 gridscale of the model, but much less active on larger scale motions.
2687 Similarly, a biharmonic diffusivity can be used for less diffusive
2688 flows.
26892690 In practice, biharmonic viscosity and diffusivity allow a less viscous,
2691 yet numerically stable, simulation than harmonic viscosity and
2692 diffusivity. However, there is no physical rationale for such operators
2693 being of leading order, and more boundary conditions must be specified
2694 than for the harmonic operators. If one considers the approximations of
2695 :eq:`eddyvisc_u` - :eq:`eddyvisc_b` and :eq:`bieddyvisc_u` - :eq:`bieddyvisc_b`
2696 to be terms in the Taylor series
2697 expansions of the eddy terms as functions of the large-scale gradient,
2698 then one can argue that both harmonic and biharmonic terms would occur
2699 in the series, and the only question is the choice of coefficients.
2700 Using biharmonic viscosity alone implies that one zeros the first
2701 non-vanishing term in the Taylor series, which is unsupported by any
2702 fluid theory or observation.
27032704 Nonetheless, MITgcm supports a plethora of biharmonic viscosities and
2705 diffusivities, which are controlled with parameters named similarly to
2706 the harmonic viscosities and diffusivities with the substitution
2707 h :math:`\rightarrow 4` in the MITgcm parameter name. MITgcm also supports biharmonic Leith and
2708 Smagorinsky viscosities:
27092710 .. math::
0bad585a21 Navi*2711 A_{4 \rm Smag} = \left(\frac{{\sf viscC4Smag}}{\pi}\right)^2\frac{L^4}{8}|D|
4f2617d475 Jeff*2712 :label: A4_Smag
27132714 .. math::
0bad585a21 Navi*2715 A_{4 \rm Leith} = \frac{L^5}{8}\sqrt{\left(\frac{{\sf viscC4Leith}}{\pi}\right)^6
2716 | \nabla \overline \omega_3|^2 + \left(\frac{{\sf viscC4LeithD}}{\pi}\right)^6
2717 | \nabla ( \nabla \cdot \overline {\bf {\tilde u}}_h)|^2}
4f2617d475 Jeff*2718 :label: A4_Leith
27192720 However, it should be noted that unlike the harmonic forms, the
2721 biharmonic scaling does not easily relate to whether energy-dissipation
2722 or enstrophy-dissipation scales are resolved. If similar arguments are
2723 used to estimate these scales and scale them to the gridscale, the
2724 resulting biharmonic viscosities should be:
27252726 .. math::
0bad585a21 Navi*2727 A_{4 \rm Smag} = \left(\frac{{\sf viscC4Smag}}{\pi}\right)^5L^5
4f2617d475 Jeff*2728 |\nabla^2\overline {\bf {\tilde u}}_h|
2729 :label: A4_Smag_alt
27302731 .. math::
0bad585a21 Navi*2732 A_{4 \rm Leith} = L^6\sqrt{\left(\frac{{\sf viscC4Leith}}{\pi}\right)^{12}
4f2617d475 Jeff*2733 |\nabla^2 \overline \omega_3|^2 + \left(\frac{{\sf viscC4LeithD}}{\pi}\right)^{12}
0bad585a21 Navi*2734 |\nabla^2 ( \nabla \cdot \overline {\bf {\tilde u}}_h)|^2}
4f2617d475 Jeff*2735 :label: A4_Leith_alt
27362737 Thus, the biharmonic scaling suggested by Griffies and Hallberg (2000)
2738 :cite:`griffies:00` implies:
27392740 .. math::
2741 \begin{aligned}
2742 |D| & \propto L|\nabla^2\overline {\bf {\tilde u}}_h|\\
0bad585a21 Navi*2743 | \nabla \overline \omega_3| & \propto L|\nabla^2 \overline \omega_3|\end{aligned}
4f2617d475 Jeff*27442745 It is not at all clear that these assumptions ought to hold. Only the
2746 Griffies and Hallberg (2000) :cite:`griffies:00` forms are currently implemented in
2747 MITgcm.
27482749 Selection of Length Scale
2750 ~~~~~~~~~~~~~~~~~~~~~~~~~
27512752 Above, the length scale of the grid has been denoted :math:`L`. However,
2753 in strongly anisotropic grids, :math:`L_x` and :math:`L_y` will be quite
2754 different in some locations. In that case, the CFL condition suggests
2755 that the minimum of :math:`L_x` and :math:`L_y` be used. On the other
2756 hand, other viscosities which involve whether a particular wavelength is
2757 ’resolved’ might be better suited to use the maximum of :math:`L_x` and
2758 :math:`L_y`. Currently, MITgcm uses :varlink:`useAreaViscLength` to select between
dcaaa42497 Jeff*2759 two options. If false, the square root of the `harmonic mean <https://en.wikipedia.org/wiki/Harmonic_mean>`_
2760 of :math:`L^2_x` and
4f2617d475 Jeff*2761 :math:`L^2_y` is used for all viscosities, which is closer to the
2762 minimum and occurs naturally in the CFL constraint. If :varlink:`useAreaViscLength`
2763 is true, then the square root of the area of the grid cell is used.
27642765 Mercator, Nondimensional Equations
2766 ----------------------------------
27672768 The rotating, incompressible, Boussinesq equations of motion
2769 (Gill, 1982) :cite:`gill:82` on a sphere can be written in Mercator
2770 projection about a latitude :math:`\theta_0` and geopotential height
2771 :math:`z=r-r_0`. The nondimensional form of these equations is:
27722773 .. math::
2774 {\rm Ro} \frac{D{\tilde u}}{Dt} - \frac{{\tilde v}
2775 \sin\theta}{\sin\theta_0}+M_{Ro}{\frac{\partial{\pi}}{\partial{x}}}
2776 + \frac{\lambda{\rm Fr}^2 M_{Ro}\cos \theta}{\mu\sin\theta_0} w
2777 = -\frac{{\rm Fr}^2 M_{Ro} {\tilde u} w}{r/H}
2778 + \frac{{\rm Ro} {\bf \hat x}\cdot\nabla^2{\bf u}}{{\rm Re}}
2779 :label: gill_u
27802781 .. math::
2782 {\rm Ro} \frac{D{\tilde v}}{Dt} +
2783 \frac{{\tilde u}\sin\theta}{\sin\theta_0} + M_{Ro}{\frac{\partial{\pi}}{\partial{y}}}
ab47de63dc Mart*2784 = -\frac{\mu{\rm Ro} \tan\theta({\tilde u}^2 + {\tilde v}^2)}{r/L}
4f2617d475 Jeff*2785 - \frac{{\rm Fr}^2M_{Ro} {\tilde v} w}{r/H}
2786 + \frac{{\rm Ro} {\bf \hat y}\cdot\nabla^2{\bf u}}{{\rm Re}}
2787 :label: gill_v
27882789 .. math::
2790 {\rm Fr}^2\lambda^2\frac{D{w}}{Dt} - b + {\frac{\partial{\pi}}{\partial{z}}}
2791 -\frac{\lambda\cot \theta_0 {\tilde u}}{M_{Ro}}
2792 = \frac{\lambda\mu^2({\tilde u}^2+{\tilde v}^2)}{M_{Ro}(r/L)}
2793 + \frac{{\rm Fr}^2\lambda^2{\bf \hat z}\cdot\nabla^2{\bf u}}{{\rm Re}}
2794 :label: gill_w
27952796 .. math::
2797 \frac{D{b}}{Dt} + w = \frac{\nabla^2 b}{\Pr{\rm Re}}\nonumber
2798 :label: gill_b
27992800 .. math::
2801 \mu^2\left({\frac{\partial{\tilde u}}{\partial{x}}} + {\frac{\partial{\tilde v}}{\partial{y}}} \right)+{\frac{\partial{w}}{\partial{z}}} = 0
2802 :label: gill_cont
28032804 Where
28052806 .. math::
2807 \mu\equiv\frac{\cos\theta_0}{\cos\theta},\ \ \
2808 {\tilde u}=\frac{u^*}{V\mu},\ \ \ {\tilde v}=\frac{v^*}{V\mu}
28092810 .. math::
ab47de63dc Mart*2811 f_0\equiv2\Omega\sin\theta_0,\ \ \
2812 %,\ \ \ \BFKDt\ \equiv \mu^2\left({\tilde u}\BFKpd x\
2813 %+{\tilde v} \BFKpd y\ \right)+\frac{\rm Fr^2M_{Ro}}{\rm Ro} w\BFKpd z\
2814 \frac{D}{Dt} \equiv \mu^2\left({\tilde u}\frac{\partial}{\partial x}
4f2617d475 Jeff*2815 +{\tilde v} \frac{\partial}{\partial y} \right)
2816 +\frac{\rm Fr^2M_{Ro}}{\rm Ro} w\frac{\partial}{\partial z}
28172818 .. math::
ab47de63dc Mart*2819 x\equiv \frac{r}{L} \phi \cos \theta_0, \ \ \
4f2617d475 Jeff*2820 y\equiv \frac{r}{L} \int_{\theta_0}^\theta
ab47de63dc Mart*2821 \frac{\cos \theta_0 {\,\rm d\theta}'}{\cos\theta'}, \ \ \
4f2617d475 Jeff*2822 z\equiv \lambda\frac{r-r_0}{L}
28232824 .. math:: t^*=t \frac{L}{V},\ \ \ b^*= b\frac{V f_0M_{Ro}}{\lambda}
28252826 .. math::
ab47de63dc Mart*2827 \pi^* = \pi V f_0 LM_{Ro},\ \ \
4f2617d475 Jeff*2828 w^* = w V \frac{{\rm Fr}^2 \lambda M_{Ro}}{\rm Ro}
28292830 .. math:: {\rm Ro} \equiv \frac{V}{f_0 L},\ \ \ M_{Ro}\equiv \max[1,\rm Ro]
28312832 .. math::
ab47de63dc Mart*2833 {\rm Fr} \equiv \frac{V}{N \lambda L}, \ \ \
2834 {\rm Re} \equiv \frac{VL}{\nu}, \ \ \
4f2617d475 Jeff*2835 {\rm Pr} \equiv \frac{\nu}{\kappa}
28362837 Dimensional variables are denoted by an asterisk where necessary. If we
2838 filter over a grid scale typical for ocean models:
28392840 | 1m :math:`< L <` 100km
2841 | 0.0001 :math:`< \lambda <` 1
2842 | 0.001m/s :math:`< V <` 1 m/s
2843 | :math:`f_0 <` 0.0001 s :sup:`-1`
2844 | 0.01 s :sup:`-1` :math:`< N <` 0.0001 s :sup:`-1`
ab47de63dc Mart*2845 |
4f2617d475 Jeff*28462847 these equations are very well approximated by
28482849 .. math::
2850 {\rm Ro}\frac{D{\tilde u}}{Dt} - \frac{{\tilde v}
2851 \sin\theta}{\sin\theta_0}+M_{Ro}{\frac{\partial{\pi}}{\partial{x}}}
2852 = -\frac{\lambda{\rm Fr}^2M_{Ro}\cos \theta}{\mu\sin\theta_0} w
2853 + \frac{{\rm Ro}\nabla^2{{\tilde u}}}{{\rm Re}} \\
2854 :label: gill_u_filt
28552856 .. math::
2857 {\rm Ro}\frac{D{\tilde v}}{Dt} +
2858 \frac{{\tilde u}\sin\theta}{\sin\theta_0}+M_{Ro}{\frac{\partial{\pi}}{\partial{y}}}
2859 = \frac{{\rm Ro}\nabla^2{{\tilde v}}}{{\rm Re}} \\
2860 :label: gill_v_filt
28612862 .. math::
2863 {\rm Fr}^2\lambda^2\frac{D{w}}{Dt} - b + {\frac{\partial{\pi}}{\partial{z}}}
2864 = \frac{\lambda\cot \theta_0 {\tilde u}}{M_{Ro}}
ab47de63dc Mart*2865 +\frac{{\rm Fr}^2\lambda^2\nabla^2w}{{\rm Re}}
4f2617d475 Jeff*2866 :label: gill_w_filt
28672868 .. math::
ab47de63dc Mart*2869 \frac{D{b}}{Dt} + w = \frac{\nabla^2 b}{\Pr{\rm Re}}
4f2617d475 Jeff*2870 :label: gill_b_filt
287128722873 .. math::
2874 \mu^2\left({\frac{\partial{\tilde u}}{\partial{x}}} + {\frac{\partial{\tilde v}}{\partial{y}}} \right)+{\frac{\partial{w}}{\partial{z}}} = 0
2875 :label: gill_cont_filt
28762877 .. math::
2878 \nabla^2 \approx \left(\frac{\partial^2}{\partial x^2}
2879 +\frac{\partial^2}{\partial y^2}
2880 +\frac{\partial^2}{\lambda^2\partial z^2}\right)
28812882 Neglecting the non-frictional terms on the right-hand side is usually
2883 called the ’traditional’ approximation. It is appropriate, with either
2884 large aspect ratio or far from the tropics. This approximation is used
2885 here, as it does not affect the form of the eddy stresses which is the
2886 main topic. The frictional terms are preserved in this approximate form
2887 for later comparison with eddy stresses.