Back to home page

MITgcm

 
 

    


Warning, /doc/algorithm/nonlinear-freesurf.rst is written in an unsupported language. File is not indexed.

view on githubraw file Latest commit 0bad585a on 2022-02-16 18:55:09 UTC
4f2617d475 Jeff*0001 .. _nonlinear-freesurface:
                0002 
                0003 Non-linear free-surface
                0004 -----------------------
                0005 
                0006 Options have been added to the model that concern the free surface formulation.
                0007 
                0008 Pressure/geo-potential and free surface
                0009 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                0010 
0bad585a21 Navi*0011 For the atmosphere, since :math:`\phi = \phi_{\rm topo} - \int^p_{p_s} \alpha dp`, subtracting the
4f2617d475 Jeff*0012 reference state defined in section :numref:`hpe-p-geo-potential-split` :
                0013 
                0014 
                0015 .. math::
0bad585a21 Navi*0016      \phi_o = \phi_{\rm topo} - \int^p_{p_o} \alpha_o dp
                0017      \hspace{5mm}\mathrm{with}\hspace{3mm} \phi_o(p_o)=\phi_{\rm topo}
4f2617d475 Jeff*0018 
                0019 we get:
                0020 
                0021 .. math:: \phi' = \phi - \phi_o = \int^{p_s}_p \alpha dp - \int^{p_o}_p \alpha_o dp
                0022 
                0023 For the ocean, the reference state is simpler since :math:`\rho_c`
                0024 does not dependent on :math:`z` (:math:`b_o=g`) and the surface
                0025 reference position is uniformly :math:`z=0` (:math:`R_o=0`), and the
                0026 same subtraction leads to a similar relation. For both fluids, using
                0027 the isomorphic notations, we can write:
                0028 
0bad585a21 Navi*0029 .. math:: \phi' = \int^{r_{\rm surf}}_r b~ dr - \int^{R_o}_r b_o dr
4f2617d475 Jeff*0030 
                0031 and re-write as:
                0032 
                0033 .. math::
0bad585a21 Navi*0034      \phi' = \int^{r_{\rm surf}}_{R_o} b~ dr + \int^{R_o}_r (b - b_o) dr
4f2617d475 Jeff*0035      :label: split-phi-Ro
                0036 
                0037 or:
                0038 
                0039 .. math::
0bad585a21 Navi*0040     \phi' = \int^{r_{surf}}_{R_o} b_o dr + \int^{r_{\rm surf}}_r (b - b_o) dr
4f2617d475 Jeff*0041     :label: split-phi-bo
                0042 
                0043 In section :numref:`finding_the_pressure_field`, following
                0044 eq. :eq:`split-phi-Ro`, the pressure/geo-potential :math:`\phi'` has been
                0045 separated into surface (:math:`\phi_s`), and hydrostatic anomaly
0bad585a21 Navi*0046 (:math:`\phi'_{\rm hyd}`). In this section, the split between :math:`\phi_s`
                0047 and :math:`\phi'_{\rm hyd}` is made according to equation :eq:`split-phi-bo`.
4f2617d475 Jeff*0048 This slightly different definition reflects the actual implementation in
                0049 the code and is valid for both linear and non-linear free-surface
                0050 formulation, in both r-coordinate and r\*-coordinate.
                0051 
                0052 Because the linear free-surface approximation ignores the tracer
                0053 content of the fluid parcel between :math:`R_o` and
0bad585a21 Navi*0054 :math:`r_{\rm surf}=R_o+\eta`, for consistency reasons, this part is also
                0055 neglected in :math:`\phi'_{\rm hyd}` :
4f2617d475 Jeff*0056 
0bad585a21 Navi*0057 .. math:: \phi'_{\rm hyd} = \int^{r_{\rm surf}}_r (b - b_o) dr \simeq \int^{R_o}_r (b - b_o) dr
4f2617d475 Jeff*0058 
                0059 Note that in this case, the two definitions of :math:`\phi_s` and
0bad585a21 Navi*0060 :math:`\phi'_{\rm hyd}` from equations :eq:`split-phi-Ro` and
4f2617d475 Jeff*0061 :eq:`split-phi-bo` converge toward the same (approximated) expressions:
0bad585a21 Navi*0062 :math:`\phi_s = \int^{r_{\rm surf}}_{R_o} b_o dr` and
                0063 :math:`\phi'_{\rm hyd}=\int^{R_o}_r b' dr`.
dcaaa42497 Jeff*0064 On the contrary, the unapproximated formulation
                0065 (see :numref:`free_surf_effect_col_thick`) retains the full expression:
0bad585a21 Navi*0066 :math:`\phi'_{\rm hyd} = \int^{r_{\rm surf}}_r (b - b_o) dr` . This is
4f2617d475 Jeff*0067 obtained by selecting :varlink:`nonlinFreeSurf` =4 in parameter file ``data``.
                0068 Regarding the surface potential:
                0069 
                0070 .. math::
                0071     \phi_s = \int_{R_o}^{R_o+\eta} b_o dr = b_s \eta
                0072      \hspace{5mm}\mathrm{with}\hspace{5mm}
                0073      b_s = \frac{1}{\eta} \int_{R_o}^{R_o+\eta} b_o dr
                0074 
                0075 :math:`b_s \simeq b_o(R_o)` is an excellent approximation (better
                0076 than the usual numerical truncation, since generally :math:`|\eta|` is
                0077 smaller than the vertical grid increment).
                0078 
                0079 For the ocean, :math:`\phi_s = g \eta` and :math:`b_s = g` is uniform.
                0080 For the atmosphere, however, because of topographic effects, the
                0081 reference surface pressure :math:`R_o=p_o` has large spatial variations
                0082 that are responsible for significant :math:`b_s` variations (from 0.8 to
0bad585a21 Navi*0083 1.2 :math:`\rm [m^3/kg]`). For this reason, when :varlink:`uniformLin_PhiSurf`
4f2617d475 Jeff*0084 =.FALSE. (parameter file ``data``, namelist ``PARAM01``) a non-uniform
                0085 linear coefficient :math:`b_s` is used and computed (:filelink:`INI_LINEAR_PHISURF <model/src/ini_linear_phisurf.F>`)
                0086 according to the reference surface pressure :math:`p_o`:
0bad585a21 Navi*0087 :math:`b_s = b_o(R_o) = c_p \kappa (p_o / P^o_{\rm SLP})^{(\kappa - 1)} \theta_{ref}(p_o)`,
                0088 with :math:`P^o_{\rm SLP}` the mean sea-level pressure.
4f2617d475 Jeff*0089 
dcaaa42497 Jeff*0090 .. _free_surf_effect_col_thick:
                0091 
4f2617d475 Jeff*0092 Free surface effect on column total thickness (Non-linear free-surface)
                0093 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                0094 
0bad585a21 Navi*0095 The total thickness of the fluid column is :math:`r_{\rm surf} - R_{\rm fixed} =
                0096 \eta + R_o - R_{\rm fixed}`. In most applications, the free surface
4f2617d475 Jeff*0097 displacements are small compared to the total thickness
0bad585a21 Navi*0098 :math:`\eta \ll H_o = R_o - R_{\rm fixed}`. In the previous sections and in
4f2617d475 Jeff*0099 older version of the model, the linearized free-surface approximation
0bad585a21 Navi*0100 was made, assuming :math:`r_{\rm surf} - R_{\rm fixed} \simeq H_o` when
4f2617d475 Jeff*0101 computing horizontal transports, either in the continuity equation or in
                0102 tracer and momentum advection terms. This approximation is dropped when
                0103 using the non-linear free-surface formulation and the total thickness,
                0104 including the time varying part :math:`\eta`, is considered when
                0105 computing horizontal transports. Implications for the barotropic part
                0106 are presented hereafter. In section :numref:`tracer-cons-nonlinear-freesurface`
                0107 consequences for tracer conservation is briefly discussed (more details
                0108 can be found in Campin et al. (2004) :cite:`cam:04`) ; the general
                0109 time-stepping is presented in section :numref:`nonlin-freesurf-timestepping`
                0110 with some limitations regarding the vertical resolution in section
                0111 :numref:`nonlin-freesurf-dzsurf`.
                0112 
                0113 In the non-linear formulation, the continuous form of the model
                0114 equations remains unchanged, except for the 2D continuity equation
                0115 :eq:`discrete-time-backward-free-surface` which is now integrated from
0bad585a21 Navi*0116 :math:`R_{\rm fixed}(x,y)` up to :math:`r_{\rm surf}=R_o+\eta` :
4f2617d475 Jeff*0117 
                0118 .. math::
0bad585a21 Navi*0119    \epsilon_{\rm fs} \partial_t \eta =
                0120    \left. \dot{r} \right|_{r=r_{\rm surf}} + \epsilon_{\rm fw} ({\mathcal{P-E}}) =
                0121    - {\bf \nabla}_h \cdot \int_{R_{\rm fixed}}^{R_o+\eta} \vec{\bf v} dr
94151a9b18 Jeff*0122    + \epsilon_{fw} ({\mathcal{P-E}})
4f2617d475 Jeff*0123 
                0124 Since :math:`\eta` has a direct effect on the horizontal velocity
0bad585a21 Navi*0125 (through :math:`\nabla_h \Phi_{\rm surf}`), this adds a non-linear term to
4f2617d475 Jeff*0126 the free surface equation. Several options for the time discretization
                0127 of this non-linear part can be considered, as detailed below.
                0128 
                0129 If the column thickness is evaluated at time step :math:`n`, and with
                0130 implicit treatment of the surface potential gradient, equations
                0131 :eq:`eq-solve2D` and :eq:`eq-solve2D_rhs` become:
                0132 
                0133 .. math::
                0134 
                0135    \begin{aligned}
0bad585a21 Navi*0136    \epsilon_{\rm fs} {\eta}^{n+1} -
                0137    {\bf \nabla}_h \cdot \Delta t^2 (\eta^{n}+R_o-R_{\rm fixed})
4f2617d475 Jeff*0138    {\bf \nabla}_h b_s {\eta}^{n+1}
                0139    = {\eta}^*\end{aligned}
                0140 
                0141 where
                0142 
                0143 .. math::
                0144 
                0145    \begin{aligned}
0bad585a21 Navi*0146    {\eta}^* = \epsilon_{\rm fs} \: {\eta}^{n} -
                0147    \Delta t {\bf \nabla}_h \cdot \int_{R_{\rm fixed}}^{R_o+\eta^n} \vec{\bf v}^* dr
                0148    \: + \: \epsilon_{\rm fw} \Delta_t ({\mathcal{P-E}})^{n}\end{aligned}
4f2617d475 Jeff*0149 
                0150 This method requires us to update the solver matrix at each time step.
                0151 
                0152 Alternatively, the non-linear contribution can be evaluated fully
                0153 explicitly:
                0154 
                0155 .. math::
                0156 
                0157    \begin{aligned}
0bad585a21 Navi*0158    \epsilon_{\rm fs} {\eta}^{n+1} -
                0159    {\bf \nabla}_h \cdot \Delta t^2 (R_o-R_{\rm fixed})
4f2617d475 Jeff*0160    {\bf \nabla}_h b_s {\eta}^{n+1}
                0161    = {\eta}^*
                0162    +{\bf \nabla}_h \cdot \Delta t^2 (\eta^{n})
                0163    {\bf \nabla}_h b_s {\eta}^{n}\end{aligned}
                0164 
                0165 This formulation allows one to keep the initial solver matrix unchanged
                0166 though throughout the integration, since the non-linear free surface
                0167 only affects the RHS.
                0168 
                0169 Finally, another option is a “linearized” formulation where the total
                0170 column thickness appears only in the integral term of the RHS
                0171 :eq:`eq-solve2D_rhs` but not directly in the equation :eq:`eq-solve2D`.
                0172 
                0173 Those different options (see :numref:`nonlinFreeSurf-flags`) have
                0174 been tested and show little differences. However, we recommend the use
                0175 of the most precise method (:varlink:`nonlinFreeSurf` =4) since the computation cost
                0176 involved in the solver matrix update is negligible.
                0177 
                0178 .. table:: Non-linear free-surface flags
                0179    :name: nonlinFreeSurf-flags
                0180 
0bad585a21 Navi*0181    +---------------------------+---------+-----------------------------------------------------------------------------------------+
                0182    | Parameter                 | Value   | Description                                                                             |
                0183    +===========================+=========+=========================================================================================+
                0184    | :varlink:`nonlinFreeSurf` | -1      | linear free-surface, restart from a pickup file                                         |
                0185    |                           |         | produced with #undef :varlink:`EXACT_CONSERV` code                                      |
                0186    +---------------------------+---------+-----------------------------------------------------------------------------------------+
                0187    |                           | 0       | linear free-surface (= default)                                                         |
                0188    +---------------------------+---------+-----------------------------------------------------------------------------------------+
                0189    |                           | 4       | full non-linear free-surface                                                            |
                0190    +---------------------------+---------+-----------------------------------------------------------------------------------------+
                0191    |                           | 3       | same as 4 but neglecting :math:`\int_{R_o}^{R_o+\eta} b' dr` in :math:`\Phi'_{\rm hyd}` |
                0192    +---------------------------+---------+-----------------------------------------------------------------------------------------+
                0193    |                           | 2       | same as 3 but do not update cg2d solver matrix                                          |
                0194    +---------------------------+---------+-----------------------------------------------------------------------------------------+
                0195    |                           | 1       | same as 2 but treat momentum as in linear free-surface                                  |
                0196    +---------------------------+---------+-----------------------------------------------------------------------------------------+
                0197    | :varlink:`select_rStar`   | 0       | do not use :math:`r^*` vertical coordinate (= default)                                  |
                0198    +---------------------------+---------+-----------------------------------------------------------------------------------------+
                0199    |                           | 2       | use :math:`r^*` vertical coordinate                                                     |
                0200    +---------------------------+---------+-----------------------------------------------------------------------------------------+
                0201    |                           | 1       | same as 2 but without the contribution of the                                           |
                0202    |                           |         | slope of the coordinate in :math:`\nabla \Phi`                                          |
                0203    +---------------------------+---------+-----------------------------------------------------------------------------------------+
4f2617d475 Jeff*0204 
                0205 
                0206 .. _tracer-cons-nonlinear-freesurface:
                0207 
                0208 Tracer conservation with non-linear free-surface
                0209 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                0210 
                0211 To ensure global tracer conservation (i.e., the total amount) as well as
                0212 local conservation, the change in the surface level thickness must be
                0213 consistent with the way the continuity equation is integrated, both in
                0214 the barotropic part (to find :math:`\eta`) and baroclinic part (to find
                0215 :math:`w = \dot{r}`).
                0216 
                0217 To illustrate this, consider the shallow water model, with a source of
94151a9b18 Jeff*0218 fresh water (:math:`\mathcal{P}`):
4f2617d475 Jeff*0219 
0bad585a21 Navi*0220 .. math:: \partial_t h +  \nabla  \cdot h \vec{\bf v} = \mathcal{P}
4f2617d475 Jeff*0221 
                0222 where :math:`h` is the total thickness of the water column. To conserve
                0223 the tracer :math:`\theta` we have to discretize:
                0224 
                0225 .. math::
0bad585a21 Navi*0226    \partial_t (h \theta) +  \nabla  \cdot ( h \theta \vec{\bf v})
                0227      = \mathcal{P} \theta_{\rm rain}
4f2617d475 Jeff*0228 
                0229 Using the implicit (non-linear) free surface described above
                0230 (:numref:`press_meth_linear`) we have:
                0231 
                0232 .. math::
                0233    \begin{aligned}
0bad585a21 Navi*0234    h^{n+1} = h^{n} - \Delta t  \nabla  \cdot (h^n \, \vec{\bf v}^{n+1} ) + \Delta t \mathcal{P} \\\end{aligned}
4f2617d475 Jeff*0235 
                0236 The discretized form of the tracer equation must adopt the same “form”
                0237 in the computation of tracer fluxes, that is, the same value of
                0238 :math:`h`, as used in the continuity equation:
                0239 
                0240 .. math::
                0241    \begin{aligned}
                0242    h^{n+1} \, \theta^{n+1} = h^n \, \theta^n
0bad585a21 Navi*0243            - \Delta t  \nabla  \cdot (h^n \, \theta^n \, \vec{\bf v}^{n+1})
                0244            + \Delta t \mathcal{P} \theta_{\rm rain}\end{aligned}
4f2617d475 Jeff*0245 
                0246 The use of a 3 time-levels time-stepping scheme such as the
                0247 Adams-Bashforth make the conservation sightly tricky. The current
                0248 implementation with the Adams-Bashforth time-stepping provides an exact
                0249 local conservation and prevents any drift in the global tracer content
                0250 (Campin et al. (2004) :cite:`cam:04`). Compared to the linear free-surface
                0251 method, an additional step is required: the variation of the water
                0252 column thickness (from :math:`h^n` to :math:`h^{n+1}`) is not
                0253 incorporated directly into the tracer equation. Instead, the model uses
                0254 the :math:`G_\theta` terms (first step) as in the linear free surface
                0255 formulation (with the “*surface correction*” turned “on”, see tracer
                0256 section):
                0257 
                0258 .. math::
0bad585a21 Navi*0259    G_\theta^n = \left(-  \nabla  \cdot (h^n \, \theta^n \, \vec{\bf v}^{n+1})
                0260             - \dot{r}_{\rm surf}^{n+1} \theta^n \right) / h^n
4f2617d475 Jeff*0261 
                0262 Then, in a second step, the thickness variation (expansion/reduction)
                0263 is taken into account:
                0264 
                0265 .. math::
                0266    \theta^{n+1} = \theta^n + \Delta t \frac{h^n}{h^{n+1}}
94151a9b18 Jeff*0267       \left( G_\theta^{(n+1/2)} + \mathcal{P} (\theta_{\mathrm{rain}} - \theta^n )/h^n \right)
4f2617d475 Jeff*0268 
                0269 Note that with a simple forward time step (no Adams-Bashforth), these
                0270 two formulations are equivalent, since
0bad585a21 Navi*0271 :math:`(h^{n+1} - h^{n})/ \Delta t = \mathcal{P} -  \nabla  \cdot (h^n \, \vec{\bf v}^{n+1} ) = P + \dot{r}_{\rm surf}^{n+1}`
4f2617d475 Jeff*0272 
                0273 .. _nonlin-freesurf-timestepping:
                0274 
                0275 Time stepping implementation of the non-linear free-surface
                0276 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                0277 
                0278 The grid cell thickness was hold constant with the linear free-surface;
                0279 with the non-linear free-surface, it is now varying in time, at least at
                0280 the surface level. This implies some modifications of the general
                0281 algorithm described earlier in sections :numref:`adams-bashforth-sync` and
                0282 :numref:`adams-bashforth-staggered`.
                0283 
                0284 A simplified version of the staggered in time, non-linear free-surface
                0285 algorithm is detailed hereafter, and can be compared to the equivalent
                0286 linear free-surface case (eq. :eq:`Gv-n-staggered` to
                0287 :eq:`t-n+1-staggered`) and can also be easily transposed to the
                0288 synchronous time-stepping case. Among the simplifications, salinity
                0289 equation, implicit operator and detailed elliptic equation are
                0290 omitted. Surface forcing is explicitly written as fluxes of
                0291 temperature, fresh water and momentum,
94151a9b18 Jeff*0292 :math:`\mathcal{Q}^{n+1/2}, \mathcal{P}^{n+1/2}, \mathcal{F}_{\bf v}^n` respectively. :math:`h^n`
4f2617d475 Jeff*0293 and :math:`dh^n` are the column and grid box thickness in
                0294 r-coordinate.
                0295 
                0296   .. math::
0bad585a21 Navi*0297      \phi^{n}_{\rm hyd} = \int b(\theta^{n},S^{n},r) dr
4f2617d475 Jeff*0298      :label: phi-hyd-nlfs
                0299 
                0300   .. math::
                0301      \vec{\bf G}_{\vec{\bf v}}^{n-1/2}\hspace{-2mm} =
                0302      \vec{\bf G}_{\vec{\bf v}} (dh^{n-1},\vec{\bf v}^{n-1/2})
                0303      \hspace{+2mm};\hspace{+2mm}
                0304      \vec{\bf G}_{\vec{\bf v}}^{(n)} =
                0305         \frac{3}{2} \vec{\bf G}_{\vec{\bf v}}^{n-1/2}
                0306      -  \frac{1}{2} \vec{\bf G}_{\vec{\bf v}}^{n-3/2}
                0307      :label: Gv-n-nlfs
                0308 
                0309   .. math::
                0310      \vec{\bf v}^{*} = \vec{\bf v}^{n-1/2} + \Delta t \frac{dh^{n-1}}{dh^{n}} \left(
                0311      \vec{\bf G}_{\vec{\bf v}}^{(n)} + F_{\vec{\bf v}}^{n}/dh^{n-1} \right)
0bad585a21 Navi*0312      - \Delta t \nabla \phi_{\rm hyd}^{n}
4f2617d475 Jeff*0313      :label: vstar-nlfs
                0314 
                0315   .. math::
0bad585a21 Navi*0316      \longrightarrow \rm update \phantom{x} \rm model \phantom{x} \rm geometry : {\bf hFac}(dh^n)
4f2617d475 Jeff*0317 
                0318   .. math::
                0319      \begin{aligned}
                0320      \eta^{n+1/2} \hspace{-1mm} & =
                0321      \eta^{n-1/2} + \Delta t P^{n+1/2} - \Delta t
0bad585a21 Navi*0322       \nabla  \cdot \int \vec{\bf v}^{n+1/2} dh^{n} \\
4f2617d475 Jeff*0323      & = \eta^{n-1/2} + \Delta t P^{n+1/2} - \Delta t
0bad585a21 Navi*0324       \nabla  \cdot \int \!\!\! \left( \vec{\bf v}^* - g \Delta t \nabla \eta^{n+1/2} \right) dh^{n}\end{aligned}
4f2617d475 Jeff*0325      :label: nstar-nlfs
                0326 
                0327   .. math::
                0328      \vec{\bf v}^{n+1/2}\hspace{-2mm} =
                0329      \vec{\bf v}^{*} - g \Delta t \nabla \eta^{n+1/2}
                0330      :label: v-n+1-nlfs
                0331 
                0332   .. math::
                0333      h^{n+1} = h^{n} + \Delta t P^{n+1/2} - \Delta t
0bad585a21 Navi*0334         \nabla  \cdot \int \vec{\bf v}^{n+1/2} dh^{n}
4f2617d475 Jeff*0335      :label: h-n+1-nlfs
                0336 
                0337   .. math::
                0338      G_{\theta}^{n} = G_{\theta} ( dh^{n}, u^{n+1/2}, \theta^{n} )
                0339      \hspace{+2mm};\hspace{+2mm}
                0340      G_{\theta}^{(n+1/2)} = \frac{3}{2} G_{\theta}^{n} - \frac{1}{2} G_{\theta}^{n-1}
                0341      :label: Gt-n-nlfs
                0342 
                0343   .. math::
                0344      \theta^{n+1} =\theta^{n} + \Delta t \frac{dh^n}{dh^{n+1}} \left(
                0345      G_{\theta}^{(n+1/2)}
94151a9b18 Jeff*0346      +( P^{n+1/2} (\theta_{\mathrm{rain}}-\theta^n) + \mathcal{Q}^{n+1/2})/dh^n \right)
4f2617d475 Jeff*0347      :label: t-n+1-nlfs
                0348 
                0349 Two steps have been added to linear free-surface algorithm (eq.
                0350 :eq:`Gv-n-staggered` to :eq:`t-n+1-staggered`): Firstly, the model
                0351 “geometry” (here the **hFacC,W,S**) is updated just before entering
                0352 :filelink:`SOLVE_FOR_PRESSURE <model/src/solve_for_pressure.F>`,
                0353 using the current :math:`dh^{n}` field.
                0354 Secondly, the vertically integrated continuity equation
                0355 :eq:`h-n+1-nlfs` has been added (:varlink:`exactConserv` =.TRUE., in
                0356 parameter file ``data``, namelist ``PARM01``) just before computing the
                0357 vertical velocity, in subroutine :filelink:`INTEGR_CONTINUITY <model/src/integr_continuity.F>`. Although this
                0358 equation might appear redundant with :eq:`nstar-nlfs`, the
                0359 integrated column thickness :math:`h^{n+1}` will be different from
                0360 :math:`\eta^{n+1/2} + H`  in the following cases:
                0361 
                0362 -  when Crank-Nicolson time-stepping is used (see :numref:`crank-nicolson_baro`).
                0363 
                0364 -  when filters are applied to the flow field, after :eq:`v-n+1-nlfs`,
                0365    and alter the divergence of the flow.
                0366 
                0367 -  when the solver does not iterate until convergence; for example,
                0368    because a too large residual target was set (:varlink:`cg2dTargetResidual`,
                0369    parameter file ``data``, namelist ``PARM02``).
                0370 
                0371 In this staggered time-stepping algorithm, the momentum tendencies are
                0372 computed using :math:`dh^{n-1}` geometry factors :eq:`Gv-n-nlfs`
                0373 and then rescaled in subroutine :filelink:`TIMESTEP <model/src/timestep.F>`, :eq:`vstar-nlfs`,
                0374 similarly to tracer tendencies (see :numref:`tracer-cons-nonlinear-freesurface`).
                0375 The tracers are stepped forward later,
                0376 using the recently updated flow field :math:`{\bf v}^{n+1/2}` and the
                0377 corresponding model geometry :math:`dh^{n}` to compute the tendencies
                0378 :eq:`Gt-n-nlfs`; then the tendencies are rescaled by
                0379 :math:`dh^n/dh^{n+1}` to derive the new tracers values
                0380 :math:`(\theta,S)^{n+1}` (:eq:`t-n+1-nlfs`, in subroutines :filelink:`CALC_GT <model/src/calc_gt.F>`,
                0381 :filelink:`CALC_GS <model/src/calc_gs.F>`).
                0382 
                0383 Note that the fresh-water input is added in a consistent way in the
                0384 continuity equation and in the tracer equation, taking into account the
                0385 fresh-water temperature :math:`\theta_{\mathrm{rain}}`.
                0386 
                0387 Regarding the restart procedure, two 2D fields :math:`h^{n-1}` and
                0388 :math:`(h^n-h^{n-1})/\Delta t` in addition to the standard state
                0389 variables and tendencies (:math:`\eta^{n-1/2}`,
                0390 :math:`{\bf v}^{n-1/2}`, :math:`\theta^n`, :math:`S^n`,
                0391 :math:`{\bf G}_{\bf v}^{n-3/2}`, :math:`G_{\theta,S}^{n-1}`) are
                0392 stored in a “*pickup*” file. The model restarts reading this
                0393 pickup file, then updates the model geometry according to
                0394 :math:`h^{n-1}`, and compute :math:`h^n` and the vertical velocity
                0395 before starting the main calling sequence (eq. :eq:`phi-hyd-nlfs` to
                0396 :eq:`t-n+1-nlfs`, :filelink:`FORWARD_STEP <model/src/forward_step.F>`).
                0397 
                0398 .. admonition:: S/R  :filelink:`INTEGR_CONTINUITY <model/src/integr_continuity.F>`
                0399   :class: note
                0400 
                0401     | :math:`h^{n+1} - H_o` : :varlink:`etaH` ( :filelink:`DYNVARS.h <model/inc/DYNVARS.h>` )
                0402     | :math:`h^n - H_o` : :varlink:`etaHnm1` ( :filelink:`SURFACE.h <model/inc/SURFACE.h>` )
                0403     | :math:`(h^{n+1} - h^n ) / \Delta t` : :varlink:`dEtaHdt` ( :filelink:`SURFACE.h <model/inc/SURFACE.h>` )
                0404 
                0405 
                0406 .. _nonlin-freesurf-dzsurf:
                0407 
                0408 Non-linear free-surface and vertical resolution
                0409 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                0410 
                0411 When the amplitude of the free-surface variations becomes as large as
                0412 the vertical resolution near the surface, the surface layer thickness
                0413 can decrease to nearly zero or can even vanish completely. This later
                0414 possibility has not been implemented, and a minimum relative thickness
                0415 is imposed (:varlink:`hFacInf`, parameter file ``data``, namelist ``PARM01``) to
                0416 prevent numerical instabilities caused by very thin surface level.
                0417 
                0418 A better alternative to the vanishing level problem relies on a different vertical coordinate
                0419 :math:`r^*` : The time variation of the total column thickness becomes
                0420 part of the :math:`r^*` coordinate motion, as in a :math:`\sigma_{z},\sigma_{p}`
                0421 model, but the fixed part related to topography is treated as in a
                0422 height or pressure coordinate model. A complete description is given in
                0423 Adcroft and Campin (2004) :cite:`adcroft:04a`.
                0424 
                0425 The time-stepping implementation of the :math:`r^*` coordinate is
                0426 identical to the non-linear free-surface in :math:`r` coordinate, and
                0427 differences appear only in the spacial discretization.
                0428