Skip to content

Latest commit

 

History

History
101 lines (81 loc) · 4.35 KB

crank-nicol.rst

File metadata and controls

101 lines (81 loc) · 4.35 KB

Crank-Nicolson barotropic time stepping

The full implicit time stepping described previously is unconditionally stable but damps the fast gravity waves, resulting in a loss of potential energy. The modification presented now allows one to combine an implicit part (\gamma,\beta) and an explicit part (1-\gamma,1-\beta) for the surface pressure gradient (\gamma) and for the barotropic flow divergence (\beta). For instance, \gamma=\beta=1 is the previous fully implicit scheme; \gamma=\beta=1/2 is the non damping (energy conserving), unconditionally stable, Crank-Nicolson scheme; (\gamma,\beta)=(1,0) or =(0,1) corresponds to the forward - backward scheme that conserves energy but is only stable for small time steps. In the code, \gamma,\beta are defined as parameters, respectively :varlink:`implicSurfPress`, :varlink:`implicDiv2DFlow`. They are read from the main parameter file data (namelist PARM01) and are set by default to 1,1.

Equations :eq:`ustar-backward-free-surface`:eq:`vn+1-backward-free-surface` are modified as follows:

\frac{ \vec{\bf v}^{n+1} }{ \Delta t }
+ {\bf \nabla}_h b_s [ \gamma {\eta}^{n+1} + (1-\gamma) {\eta}^{n} ]
+ \epsilon_{nh} {\bf \nabla}_h {\phi'_{nh}}^{n+1}
= \frac{ \vec{\bf v}^{n} }{ \Delta t }
+ \vec{\bf G}_{\vec{\bf v}} ^{(n+1/2)}
+ {\bf \nabla}_h {\phi'_{hyd}}^{(n+1/2)}
\epsilon_{fs} \frac{ {\eta}^{n+1} - {\eta}^{n} }{ \Delta t}
+ {\bf \nabla}_h \cdot \int_{R_{fixed}}^{R_o}
[ \beta \vec{\bf v}^{n+1} + (1-\beta) \vec{\bf v}^{n}] dr
= \epsilon_{fw} ({\mathcal{P-E}})

We set

\begin{aligned}
\vec{\bf v}^* & = &
\vec{\bf v} ^{n} + \Delta t \vec{\bf G}_{\vec{\bf v}} ^{(n+1/2)}
+ (\gamma-1) \Delta t {\bf \nabla}_h b_s {\eta}^{n}
+ \Delta t {\bf \nabla}_h {\phi'_{hyd}}^{(n+1/2)}
\\
{\eta}^* & = &
\epsilon_{fs} {\eta}^{n} + \epsilon_{fw} \Delta t ({\mathcal{P-E}})
- \Delta t {\bf \nabla}_h \cdot \int_{R_{fixed}}^{R_o}
[ \beta \vec{\bf v}^* + (1-\beta) \vec{\bf v}^{n}] dr\end{aligned}

In the hydrostatic case \epsilon_{nh}=0, allowing us to find {\eta}^{n+1}, thus:

\epsilon_{fs} {\eta}^{n+1} -
{\bf \nabla}_h \cdot \gamma\beta \Delta t^2 b_s (R_o - R_{fixed})
{\bf \nabla}_h {\eta}^{n+1}
= {\eta}^*

and then to compute (:filelink:`CORRECTION_STEP <model/src/correction_step.F>`):

\vec{\bf v}^{n+1} = \vec{\bf v}^{*}
- \gamma \Delta t {\bf \nabla}_h b_s {\eta}^{n+1}

Notes:

  1. The RHS term of equation :eq:`eta-n+1-CrankNick` corresponds the contribution of fresh water flux ({mathcal{P-E}}) to the free-surface variations (\epsilon_{fw}=1, :varlink:`useRealFreshWaterFlux` =.TRUE. in parameter file data). In order to remain consistent with the tracer equation, specially in the non-linear free-surface formulation, this term is also affected by the Crank-Nicolson time stepping. The RHS reads: \epsilon_{fw} ( \beta ({\mathcal{P-E}})^{n+1/2} + (1-\beta) ({\mathcal{P-E}})^{n-1/2} )
  2. The stability criteria with Crank-Nicolson time stepping for the pure linear gravity wave problem in cartesian coordinates is:
    • \gamma + \beta < 1 : unstable
    • \gamma \geq 1/2 and \beta \geq 1/2 : stable
    • \gamma + \beta \geq 1 : stable if c_{max}^2 (\gamma - 1/2)(\beta - 1/2) + 1 \geq 0 with c_{max} = 2 \Delta t \sqrt{gH} \sqrt{ \frac{1}{\Delta x^2} + \frac{1}{\Delta y^2} }
  3. A similar mixed forward/backward time-stepping is also available for the non-hydrostatic algorithm, with a fraction \gamma_{nh} (0 < \gamma_{nh} \leq 1) of the non-hydrostatic pressure gradient being evaluated at time step n+1 (backward in time) and the remaining part (1 - \gamma_{nh}) being evaluated at time step n (forward in time). The run-time parameter :varlink:`implicitNHPress` corresponding to the implicit fraction \gamma_{nh} of the non-hydrostatic pressure is set by default to the implicit fraction \gamma of surface pressure (:varlink:`implicSurfPress`), but can also be specified independently (in main parameter file data, namelist PARM01).