Changeset 11388 for NEMO/trunk/doc/latex/NEMO/subfiles/chap_ZDF.tex
 Timestamp:
 20190801T18:09:07+02:00 (4 years ago)
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

NEMO/trunk/doc/latex/NEMO/subfiles/chap_ZDF.tex
r11318 r11388 1269 1269 \label{subsec:ZDF_aimp} 1270 1270 1271 This refers to \citep{shchepetkin_OM15}. 1272 1273 TBC ... 1274 1271 The adaptiveimplicit 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 1273 needs to satisfy multiple criteria associated with different physical processes in order 1274 to maintain numerical stability. \citep{shchepetkin_OM15} pointed out that the vertical 1275 CFL criterion is commonly the most limiting. \citep{lemarie.debreu.ea_OM15} examined the 1276 constraints for a range of time and space discretizations and provide the CFL stability 1277 criteria for a range of advection schemes. The values for the LeapFrog with Robert 1278 asselin filter timestepping (as used in NEMO) are reproduced in 1279 \autoref{tab:zad_Aimp_CFLcrit}. Treating the vertical advection implicitly can avoid these 1280 restrictions but at the cost of large dispersive errors and, possibly, large numerical 1281 viscosity. The adaptiveimplicit vertical advection option provides a targetted use of the 1282 implicit scheme only when and where potential breaches of the vertical CFL condition 1283 occur. In many practical applications these events may occur remote from the main area of 1284 interest or due to shortlived conditions such that the extra numerical diffusion or 1285 viscosity 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 1287 retaining the accuracy of the high order explicit schemes over most of the domain. 1288 1289 \begin{table}[htbp] 1290 \begin{center} 1291 % \begin{tabular}{cp{70pt}cp{70pt}cp{70pt}cp{70pt}} 1292 \begin{tabular}{rccc} 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 LeapFrog with Robert Asselin filter timestepping 1301 ($\nu=0.1$) as given in \citep{lemarie.debreu.ea_OM15}. 1302 } 1303 \end{center} 1304 \end{table} 1305 1306 In particular, the advection scheme remains explicit everywhere except where and when 1307 local vertical velocities exceed a threshold set just below the explicit stability limit. 1308 Once the threshold is reached a tapered transition towards an implicit scheme is used by 1309 partitioning the vertical velocity into a part that can be treated explicitly and any 1310 excess that must be treated implicitly. The partitioning is achieved via a Courantnumber 1311 dependent weighting algorithm as described in \citep{shchepetkin_OM15}. 1312 1313 The local cell Courant number ($Cu$) used for this partitioning is: 1314 1315 \begin{equation} 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}i1j}e^n_{{3_{u}}i1jk}u^n_{i1jk},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}ij1}e^n_{{3_{v}}ij1k}v^n_{ij1k},0.0) \big ] 1322 \big / e_{{1_t}ij}e_{{2_t}ij} \bigg ) \\ 1323 \end{split} 1324 \end{equation} 1325 1326 \noindent and the tapering algorithm follows \citep{shchepetkin_OM15} as: 1327 1328 \begin{align} 1329 \label{eq:Eqn_zad_Aimp_partition} 1330 Cu_{min} &= 0.15 \nonumber \\ 1331 Cu_{max} &= 0.27 \nonumber \\ 1332 Cu_{cut} &= 2Cu_{max}  Cu_{min} \nonumber \\ 1333 Fcu &= 4Cu_{max}*(Cu_{max}Cu_{min}) \nonumber \\ 1334 Cf &= 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} 1340 \end{align} 1341 1342 \noindent With these settings the coefficient ($Cf$) is shown in \autoref{fig:zad_Aimp_coeff} 1343 1344 \begin{figure}[!t] 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} 1353 \end{figure} 1354 1355 \noindent The partitioning coefficient is used to determine the part of the vertical 1356 velocity that must be handled implicitly ($w_i$) and to subtract this from the total 1357 vertical velocity ($w_n$) to leave that which can continue to be handled explicitly: 1358 1359 \begin{align} 1360 \label{eq:Eqn_zad_Aimp_partition2} 1361 w_{i_{ijk}} &= Cf_{ijk} w_{n_{ijk}} \nonumber \\ 1362 w_{n_{ijk}} &= (1Cf_{ijk}) w_{n_{ijk}} 1363 \end{align} 1364 1365 \noindent Note that the coefficient is such that the treatment is never fully implicit; 1366 the three cases from \autoref{eq:Eqn_zad_Aimp_partition} can be considered as: 1367 fullyexplicit; mixed explicit/implicit and mostlyimplicit. The $w_i$ component is added 1368 to the implicit solvers for the vertical mixing in \mdl{dynzdf} and \mdl{trazdf} in a 1369 similar way to \citep{shchepetkin_OM15}. This is sufficient for the fluxlimited 1370 advection scheme (\forcode{ln_traadv_mus}) but further intervention is required when using 1371 the fluxcorrected scheme (\forcode{ln_traadv_fct}). For these schemes the implicit 1372 upstream fluxes must be added to both the monotonic guess and to the higher order solution 1373 when calculating the antidiffusive fluxes. The implicit vertical fluxes are then removed 1374 since they are added by the implicit solver later on. 1375 1376 The adaptiveimplicit vertical advection option is new to NEMO at v4.0 and has yet to be 1377 used in a wide range of simulations. The following test simulation, however, does illustrate 1378 the potential benefits and will hopefully encourage further testing and feedback from users: 1379 1380 \subsection{Adaptiveimplicit vertical advection in the OVERFLOW testcase} 1381 The \href{https://forge.ipsl.jussieu.fr/nemo/chrome/site/doc/NEMO/guide/html/test\_cases.html\#overflow}{OVERFLOW test case} 1382 provides a simple illustration of the adaptiveimplicit advection in action. The example here differs from the basic test case 1383 by only a few extra physics choices namely: 1384 1385 \begin{verbatim} 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 1393 \end{verbatim} 1394 1395 \noindent which were chosen to provide a slightly more stable and less noisy solution. The 1396 result when using the default value of \forcode{nn_rdt = 10.} without adaptiveimplicit 1397 vertical velocity is illustrated in \autoref{fig:zad_Aimp_overflow_frames}. The mass of 1398 cold water, initially sitting on the shelf, moves down the slope and forms a 1399 bottomtrapped, dense plume. Even with these extra physics choices the model is close to 1400 stability limits and attempts with \forcode{nn_rdt = 30.} will fail after about 5.5 hours 1401 with excessively high horizontal velocities. This timescale corresponds with the time the 1402 plume reaches the steepest part of the topography and, although detected as a horizontal 1403 CFL breach, the instability originates from a breach of the vertical CFL limit. This is a good 1404 candidate, therefore, for use of the adaptiveimplicit vertical advection scheme. 1405 1406 The results with \forcode{ln_zad_Aimp=.true.} and a variety of model timesteps are shown 1407 in \autoref{fig:zad_Aimp_overflow_all_rdt} (together with the equivalent frames from the 1408 base run). In this simple example the use of the adaptiveimplicit vertcal advection 1409 scheme has enabled a 12x increase in the model timestep without significantly altering the 1410 solution (although at this extreme the plume is more diffuse and has not travelled so far). 1411 Notably, 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 1413 trigger the scheme despite completing successfully. To assist in diagnosing how active 1414 the scheme is, in both location and time, the 3D implicit and explicit components of the 1415 vertical velocity are available via XIOS as \texttt{wimp} and \texttt{wexp} respectively. 1416 Likewise, the partitioning coefficient ($Cf$) is also available as \texttt{wi\_cff}. 1417 1418 \begin{figure}[!t] 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 timeseries of temperature vertical crosssections 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} 1427 \end{figure} 1428 1429 \begin{figure}[!t] 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 crosssections from mid and endrun 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 colourscale has been 1437 chosen to confirm that temperatures remain within the original range of 10$^o$ to 20$^o$. 1438 } 1439 \end{center} 1440 \end{figure} 1275 1441 1276 1442
Note: See TracChangeset
for help on using the changeset viewer.