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