! &namzdf ! vertical physics ! rn_avm0 = 1.2e4 ! vertical eddy viscosity [m2/s] (background Kz if not "key_zdfcst") rn_avt0 = 1.2e5 ! vertical eddy diffusivity [m2/s] (background Kz if not "key_zdfcst") nn_avb = 0 ! profile for background avt & avm (=1) or not (=0) nn_havtb = 0 ! horizontal shape for avtb (=1) or not (=0) ln_zdfevd = .true. ! enhanced vertical diffusion (evd) (T) or not (F) nn_evdm = 0 ! evd apply on tracer (=0) or on tracer and momentum (=1) rn_avevd = 100. ! evd mixing coefficient [m2/s] ln_zdfnpc = .false. ! NonPenetrative Convective algorithm (T) or not (F) nn_npc = 1 ! frequency of application of npc nn_npcp = 365 ! npc control print frequency ln_zdfexp = .false. ! timestepping: splitexplicit (T) or implicit (F) time stepping nn_zdfexp = 3 ! number of subtimestep for ln_zdfexp=T /
Static instabilities (i.e. light potential densities under heavy ones) may occur at particular ocean grid points. In nature, convective processes quickly reestablish the static stability of the water column. These processes have been removed from the model via the hydrostatic assumption so they must be parameterized. Three parameterisations are available to deal with convective processes: a nonpenetrative convective adjustment or an enhanced vertical diffusion, or/and the use of a turbulent closure scheme.
! &namzdf ! vertical physics ! rn_avm0 = 1.2e4 ! vertical eddy viscosity [m2/s] (background Kz if not "key_zdfcst") rn_avt0 = 1.2e5 ! vertical eddy diffusivity [m2/s] (background Kz if not "key_zdfcst") nn_avb = 0 ! profile for background avt & avm (=1) or not (=0) nn_havtb = 0 ! horizontal shape for avtb (=1) or not (=0) ln_zdfevd = .true. ! enhanced vertical diffusion (evd) (T) or not (F) nn_evdm = 0 ! evd apply on tracer (=0) or on tracer and momentum (=1) rn_avevd = 100. ! evd mixing coefficient [m2/s] ln_zdfnpc = .false. ! NonPenetrative Convective algorithm (T) or not (F) nn_npc = 1 ! frequency of application of npc nn_npcp = 365 ! npc control print frequency ln_zdfexp = .false. ! timestepping: splitexplicit (T) or implicit (F) time stepping nn_zdfexp = 3 ! number of subtimestep for ln_zdfexp=T /

Options are defined through the namzdf namelist variables. The nonpenetrative convective adjustment is used when ln_zdfnpc = true. It is applied at each nn_npc time step and mixes downwards instantaneously the statically unstable portion of the water column, but only until the density structure becomes neutrally stable ( until the mixed portion of the water column has exactly the density of the water just below) [Madec et al., 1991b]. The associated algorithm is an iterative process used in the following way (Fig. 10.3): starting from the top of the ocean, the first instability is found. Assume in the following that the instability is located between levels and . The temperature and salinity in the two levels are vertically mixed, conserving the heat and salt contents of the water column. The new density is then computed by a linear approximation. If the new density profile is still unstable between levels and , levels , and are then mixed. This process is repeated until stability is established below the level (the mixing process can go down to the ocean bottom). The algorithm is repeated to check if the density profile between level and is unstable and/or if there is no deeper instability.
This algorithm is significantly different from mixing statically unstable levels two by two. The latter procedure cannot converge with a finite number of iterations for some vertical profiles while the algorithm used in NEMO converges for any profile in a number of iterations which is less than the number of vertical levels. This property is of paramount importance as pointed out by Killworth [1989]: it avoids the existence of permanent and unrealistic static instabilities at the sea surface. This nonpenetrative convective algorithm has been proved successful in studies of the deep water formation in the northwestern Mediterranean Sea [Madec and Crépon, 1991, Madec et al., 1991b, Madec et al., 1991a].
The current implementation has been modified in order to deal with any non linear equation of seawater (L. Brodeau, personnal communication). Two main differences have been introduced compared to the original algorithm: the stability is now checked using the BruntVäisälä frequency (not the the difference in potential density) ; when two levels are found unstable, their thermal and haline expansion coefficients are vertically mixed in the same way their temperature and salinity has been mixed. These two modifications allow the algorithm to perform properly and accurately with TEOS10 or EOS80 without having to recompute the expansion coefficients at each mixing iteration.
! &namzdf ! vertical physics ! rn_avm0 = 1.2e4 ! vertical eddy viscosity [m2/s] (background Kz if not "key_zdfcst") rn_avt0 = 1.2e5 ! vertical eddy diffusivity [m2/s] (background Kz if not "key_zdfcst") nn_avb = 0 ! profile for background avt & avm (=1) or not (=0) nn_havtb = 0 ! horizontal shape for avtb (=1) or not (=0) ln_zdfevd = .true. ! enhanced vertical diffusion (evd) (T) or not (F) nn_evdm = 0 ! evd apply on tracer (=0) or on tracer and momentum (=1) rn_avevd = 100. ! evd mixing coefficient [m2/s] ln_zdfnpc = .false. ! NonPenetrative Convective algorithm (T) or not (F) nn_npc = 1 ! frequency of application of npc nn_npcp = 365 ! npc control print frequency ln_zdfexp = .false. ! timestepping: splitexplicit (T) or implicit (F) time stepping nn_zdfexp = 3 ! number of subtimestep for ln_zdfexp=T /
Options are defined through the namzdf namelist variables. The enhanced vertical diffusion parameterisation is used when ln_zdfevd=true. In this case, the vertical eddy mixing coefficients are assigned very large values (a typical value is in regions where the stratification is unstable ( when the BruntVaisälä frequency is negative) [Lazar et al., 1999, Lazar, 1997]. This is done either on tracers only (nn_evdm=0) or on both momentum and tracers (nn_evdm=1).
In practice, where , and , and if nn_evdm=1, the four neighbouring and values also, are set equal to the namelist parameter rn_avevd. A typical value for is between 1 and . This parameterisation of convective processes is less time consuming than the convective adjustment algorithm presented above when mixing both tracers and momentum in the case of static instabilities. It requires the use of an implicit time stepping on vertical diffusion terms (i.e. ln_zdfexp=false).
Note that the stability test is performed on both before and now values of . This removes a potential source of divergence of odd and even time step in a leapfrog environment [Leclair, 2010] (see §3.5).
The turbulent closure scheme presented in §10.1.3 and §10.1.5 (key_ zdftke or key_ zdftke is defined) in theory solves the problem of statically unstable density profiles. In such a case, the term corresponding to the destruction of turbulent kinetic energy through stratification in (10.4) or (10.19) becomes a source term, since is negative. It results in large values of and , and also the four neighbouring (up to . These large values restore the static stability of the water column in a way similar to that of the enhanced vertical diffusion parameterisation (§10.2.2). However, in the vicinity of the sea surface (first ocean layer), the eddy coefficients computed by the turbulent closure scheme do not usually exceed , because the mixing length scale is bounded by the distance to the sea surface. It can thus be useful to combine the enhanced vertical diffusion with the turbulent closure scheme, setting the ln_zdfnpc namelist parameter to true and defining the turbulent closure CPP key all together.
The KPP turbulent closure scheme already includes enhanced vertical diffusion in the case of convection, as governed by the variables and found in zdfkpp.F90, therefore ln_zdfevd=false should be used with the KPP scheme.
Gurvan Madec and the NEMO Team
NEMO European Consortium20170217