New URL for NEMO forge!

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 11388 for NEMO/trunk/doc/latex/NEMO/subfiles/chap_ZDF.tex – NEMO

2019-08-01T18:09:07+02:00 (4 years ago)

Add adaptive-implicit vertical advection section to ZDF chapter. May still need a few tweaks next week and refers to an updated traadv_fct.F90 which is not yet submitted. Finals tests are in progress

1 edited


  • NEMO/trunk/doc/latex/NEMO/subfiles/chap_ZDF.tex

    r11318 r11388  
    1271 This refers to \citep{shchepetkin_OM15}. 
    1273 TBC ... 
     1271The adaptive-implicit vertical advection option in NEMO is based on the work of 
     1272\citep{shchepetkin_OM15}.  In common with most ocean models, the timestep used with NEMO 
     1273needs to satisfy multiple criteria associated with different physical processes in order 
     1274to maintain numerical stability. \citep{shchepetkin_OM15} pointed out that the vertical 
     1275CFL criterion is commonly the most limiting. \citep{lemarie.debreu.ea_OM15} examined the 
     1276constraints for a range of time and space discretizations and provide the CFL stability 
     1277criteria for a range of advection schemes. The values for the Leap-Frog with Robert 
     1278asselin filter time-stepping (as used in NEMO) are reproduced in 
     1279\autoref{tab:zad_Aimp_CFLcrit}. Treating the vertical advection implicitly can avoid these 
     1280restrictions but at the cost of large dispersive errors and, possibly, large numerical 
     1281viscosity. The adaptive-implicit vertical advection option provides a targetted use of the 
     1282implicit scheme only when and where potential breaches of the vertical CFL condition 
     1283occur. In many practical applications these events may occur remote from the main area of 
     1284interest or due to short-lived conditions such that the extra numerical diffusion or 
     1285viscosity does not greatly affect the overall solution. With such applications, setting: 
     1286\forcode{ln_zad_Aimp = .true.} should allow much longer model timesteps to be used whilst 
     1287retaining the accuracy of the high order explicit schemes over most of the domain. 
     1290  \begin{center} 
     1291    % \begin{tabular}{cp{70pt}cp{70pt}cp{70pt}cp{70pt}} 
     1292    \begin{tabular}{r|ccc} 
     1293      \hline 
     1294      spatial discretization &   2nd order centered   & 3rd order upwind & 4th order compact  \\ 
     1295      advective CFL criterion     & 0.904 &   0.472  &   0.522    \\ 
     1296      \hline 
     1297    \end{tabular} 
     1298    \caption{ 
     1299      \protect\label{tab:zad_Aimp_CFLcrit} 
     1300      The advective CFL criteria for a range of spatial discretizations for the Leap-Frog with Robert Asselin filter time-stepping 
     1301      ($\nu=0.1$) as given in \citep{lemarie.debreu.ea_OM15}. 
     1302    } 
     1303  \end{center} 
     1306In particular, the advection scheme remains explicit everywhere except where and when 
     1307local vertical velocities exceed a threshold set just below the explicit stability limit. 
     1308Once the threshold is reached a tapered transition towards an implicit scheme is used by 
     1309partitioning the vertical velocity into a part that can be treated explicitly and any 
     1310excess that must be treated implicitly. The partitioning is achieved via a Courant-number 
     1311dependent weighting algorithm as described in \citep{shchepetkin_OM15}. 
     1313The local cell Courant number ($Cu$) used for this partitioning is: 
     1316  \label{eq:Eqn_zad_Aimp_Courant} 
     1317  \begin{split} 
     1318    Cu &= {2 \rdt \over e^n_{3t_{ijk}}} \bigg (\big [ \texttt{Max}(w^n_{ijk},0.0) - \texttt{Min}(w^n_{ijk+1},0.0) \big ]    \\ 
     1319       &\phantom{=} +\big [ \texttt{Max}(e_{{2_u}ij}e^n_{{3_{u}}ijk}u^n_{ijk},0.0) - \texttt{Min}(e_{{2_u}i-1j}e^n_{{3_{u}}i-1jk}u^n_{i-1jk},0.0) \big ] 
     1320                     \big / e_{{1_t}ij}e_{{2_t}ij}            \\ 
     1321       &\phantom{=} +\big [ \texttt{Max}(e_{{1_v}ij}e^n_{{3_{v}}ijk}v^n_{ijk},0.0) - \texttt{Min}(e_{{1_v}ij-1}e^n_{{3_{v}}ij-1k}v^n_{ij-1k},0.0) \big ] 
     1322                     \big / e_{{1_t}ij}e_{{2_t}ij} \bigg )    \\ 
     1323  \end{split} 
     1326\noindent and the tapering algorithm follows \citep{shchepetkin_OM15} as: 
     1329  \label{eq:Eqn_zad_Aimp_partition} 
     1330Cu_{min} &= 0.15 \nonumber \\ 
     1331Cu_{max} &= 0.27 \nonumber \\ 
     1332Cu_{cut} &= 2Cu_{max} - Cu_{min} \nonumber \\ 
     1333Fcu    &= 4Cu_{max}*(Cu_{max}-Cu_{min}) \nonumber \\ 
     1334Cf &= 
     1335     \begin{cases} 
     1336        0.0                                                        &\text{if $Cu \leq Cu_{min}$} \\ 
     1337        (Cu - Cu_{min})^2 / (Fcu +  (Cu - Cu_{min})^2)             &\text{else if $Cu < Cu_{cut}$} \\ 
     1338        (Cu - Cu_{max}) / Cu                                       &\text{else} 
     1339     \end{cases} 
     1342\noindent With these settings the coefficient ($Cf$) is shown in \autoref{fig:zad_Aimp_coeff} 
     1345  \begin{center} 
     1346    \includegraphics[width=\textwidth]{Fig_ZDF_zad_Aimp_coeff} 
     1347    \caption{ 
     1348      \protect\label{fig:zad_Aimp_coeff} 
     1349      The value of the partitioning coefficient ($Cf$) used to partition vertical velocities into parts to 
     1350      be treated implicitly and explicitly for a range of typical Courant numbers (\forcode{ln_zad_Aimp=.true.}) 
     1351    } 
     1352  \end{center} 
     1355\noindent The partitioning coefficient is used to determine the part of the vertical 
     1356velocity that must be handled implicitly ($w_i$) and to subtract this from the total 
     1357vertical velocity ($w_n$) to leave that which can continue to be handled explicitly: 
     1360  \label{eq:Eqn_zad_Aimp_partition2} 
     1361    w_{i_{ijk}} &= Cf_{ijk} w_{n_{ijk}}     \nonumber \\ 
     1362    w_{n_{ijk}} &= (1-Cf_{ijk}) w_{n_{ijk}}            
     1365\noindent Note that the coefficient is such that the treatment is never fully implicit; 
     1366the three cases from \autoref{eq:Eqn_zad_Aimp_partition} can be considered as: 
     1367fully-explicit; mixed explicit/implicit and mostly-implicit.  The $w_i$ component is added 
     1368to the implicit solvers for the vertical mixing in \mdl{dynzdf} and \mdl{trazdf} in a 
     1369similar way to \citep{shchepetkin_OM15}.  This is sufficient for the flux-limited 
     1370advection scheme (\forcode{ln_traadv_mus}) but further intervention is required when using 
     1371the flux-corrected scheme (\forcode{ln_traadv_fct}). For these schemes the implicit 
     1372upstream fluxes must be added to both the monotonic guess and to the higher order solution 
     1373when calculating the antidiffusive fluxes. The implicit vertical fluxes are then removed 
     1374since they are added by the implicit solver later on. 
     1376The adaptive-implicit vertical advection option is new to NEMO at v4.0 and has yet to be  
     1377used in a wide range of simulations. The following test simulation, however, does illustrate 
     1378the potential benefits and will hopefully encourage further testing and feedback from users: 
     1380\subsection{Adaptive-implicit vertical advection in the OVERFLOW test-case} 
     1381The \href{\_cases.html\#overflow}{OVERFLOW test case} 
     1382provides a simple illustration of the adaptive-implicit advection in action. The example here differs from the basic test case 
     1383by only a few extra physics choices namely: 
     1386     ln_dynldf_OFF = .false. 
     1387     ln_dynldf_lap = .true. 
     1388     ln_dynldf_hor = .true. 
     1389     ln_zdfnpc     = .true. 
     1390     ln_traadv_fct = .true. 
     1391        nn_fct_h   =  4 
     1392        nn_fct_v   =  4 
     1395\noindent which were chosen to provide a slightly more stable and less noisy solution. The 
     1396result when using the default value of \forcode{nn_rdt = 10.} without adaptive-implicit 
     1397vertical velocity is illustrated in \autoref{fig:zad_Aimp_overflow_frames}. The mass of 
     1398cold water, initially sitting on the shelf, moves down the slope and forms a 
     1399bottom-trapped, dense plume. Even with these extra physics choices the model is close to 
     1400stability limits and attempts with \forcode{nn_rdt = 30.} will fail after about 5.5 hours 
     1401with excessively high horizontal velocities. This time-scale corresponds with the time the 
     1402plume reaches the steepest part of the topography and, although detected as a horizontal 
     1403CFL breach, the instability originates from a breach of the vertical CFL limit. This is a good 
     1404candidate, therefore, for use of the adaptive-implicit vertical advection scheme. 
     1406The results with \forcode{ln_zad_Aimp=.true.} and a variety of model timesteps are shown 
     1407in \autoref{fig:zad_Aimp_overflow_all_rdt} (together with the equivalent frames from the 
     1408base run).  In this simple example the use of the adaptive-implicit vertcal advection 
     1409scheme has enabled a 12x increase in the model timestep without significantly altering the 
     1410solution (although at this extreme the plume is more diffuse and has not travelled so far). 
     1411Notably, the solution with and without the scheme is slightly different even with 
     1412\forcode{nn_rdt = 10.}; suggesting that the base run was close enough to instability to 
     1413trigger the scheme despite completing successfully.  To assist in diagnosing how active 
     1414the scheme is, in both location and time, the 3D implicit and explicit components of the 
     1415vertical velocity are available via XIOS as \texttt{wimp} and \texttt{wexp} respectively. 
     1416Likewise, the partitioning coefficient ($Cf$) is also available as \texttt{wi\_cff}. 
     1419  \begin{center} 
     1420    \includegraphics[width=\textwidth]{Fig_ZDF_zad_Aimp_overflow_frames} 
     1421    \caption{ 
     1422      \protect\label{fig:zad_Aimp_overflow_frames} 
     1423      A time-series of temperature vertical cross-sections for the OVERFLOW test case. These results are for the default 
     1424      settings with \forcode{nn_rdt=10.0} and without adaptive implicit vertical advection (\forcode{ln_zad_Aimp=.false.}). 
     1425    } 
     1426  \end{center} 
     1430  \begin{center} 
     1431    \includegraphics[width=\textwidth]{Fig_ZDF_zad_Aimp_overflow_all_rdt} 
     1432    \caption{ 
     1433      \protect\label{fig:zad_Aimp_overflow_all_rdt} 
     1434      Sample temperature vertical cross-sections from mid- and end-run using different values for \forcode{nn_rdt}  
     1435      and with or without adaptive implicit vertical advection. Without the adaptive implicit vertical advection only 
     1436      the run with the shortest timestep is able to run to completion. Note also that the colour-scale has been 
     1437      chosen to confirm that temperatures remain within the original range of 10$^o$ to 20$^o$. 
     1438    } 
     1439  \end{center} 
Note: See TracChangeset for help on using the changeset viewer.