8.4.1. GMREDI: GentMcWilliams/Redi Eddy Parameterization¶
8.4.1.1. Introduction¶
Package gmredi parameterizes the effects of unresolved mesoscale eddies on tracer distribution, i.e., temperature, salinity and other tracers.
There are two parts to the Redi/GM subgridscale parameterization of geostrophic eddies. The first, the Redi scheme (Redi 1982 [Red82]), aims to mix tracer properties along isentropes (neutral surfaces) by means of a diffusion operator oriented along the local isentropic surface. The second part, GM (Gent and McWiliams 1990 [GM90], Gent et al. 1995 [GWMM95]), adiabatically rearranges tracers through an advective flux where the advecting flow is a function of slope of the isentropic surfaces.
A description of key package equations used is
given in Section 8.4.1.2.
CPP options enable or disable different aspects of the package
(Section 8.4.1.3). Runtime options, flags, and filenames
are set in data.gmredi
(Section 8.4.1.4). Available diagnostics
output is listed in Section 8.4.1.5.
8.4.1.2. Description¶
The first GCM implementation of the Redi scheme was by Cox (1987) [Cox87] in the GFDL ocean circulation model. The original approach failed to distinguish between isopycnals and surfaces of locally referenced potential density (now called neutral surfaces), which are proper isentropes for the ocean. As will be discussed later, it also appears that the Cox implementation is susceptible to a computational mode. Due to this mode, the Cox scheme requires a background lateral diffusion to be present to conserve the integrity of the model fields.
The GM parameterization was then added to the GFDL code in the form of a nondivergent bolus velocity. The method defines two streamfunctions expressed in terms of the isoneutral slopes subject to the boundary condition of zero value on upper and lower boundaries. The horizontal bolus velocities are then the vertical derivative of these functions. Here in lies a problem highlighted by Griffies et al. (1998) [GGP+98]: the bolus velocities involve multiple derivatives on the potential density field, which can consequently give rise to noise. Griffies et al. point out that the GM bolus fluxes can be identically written as a skew flux which involves fewer differential operators. Further, combining the skew flux formulation and Redi scheme, substantial cancellations take place to the point that the horizontal fluxes are unmodified from the lateral diffusion parameterization.
8.4.1.2.1. Redi scheme: Isopycnal diffusion¶
The Redi scheme diffuses tracers along isopycnals and introduces a term in the tendency (rhs) of such a tracer (here \(\tau\)) of the form:
where \(\kappa_\rho\) is the along isopycnal diffusivity and \({\bf K}_{\rm Redi}\) is a rank 2 tensor that projects the gradient of \(\tau\) onto the isopycnal surface. The unapproximated projection tensor is:
Here, \(S_x = \partial_x \sigma / \partial_z \sigma\), \(S_y = \partial_y \sigma / \partial_z \sigma\) are the components of the isoneutral slope, and \({\bf S}^2 = S_x^2 + S_y^2\).
The first point to note is that a typical slope in the ocean interior is small, say of the order \(10^{4}\). A maximum slope might be of order \(10^{2}\) and only exceeds such in unstratified regions where the slope is illdefined. It is, therefore, justifiable, and customary, to make the smallslope approximation, i.e., \({\bf S} \ll 1\). Then Redi projection tensor then simplifies to:
8.4.1.2.2. GM parameterization¶
The GM parameterization aims to represent the advective or “transport” effect of geostrophic eddies by means of a “bolus” velocity, \({\bf u}^\star\). The divergence of this advective flux is added to the tracer tendency equation (on the rhs):
The bolus velocity \({\bf u}^\star\) is defined as the rotational part of a streamfunction \({\bf F}^\star = (F_x^\star, F_y^\star, 0)\):
and thus is automatically nondivergent. In the GM parameterization, the streamfunction is specified in terms of the isoneutral slopes \(S_x\) and \(S_y\):
with boundary conditions \(F_x^\star=F_y^\star=0\) on upper and lower boundaries. \(\kappa_{\rm GM}\) is colloquially called the isopycnal “thickness diffusivity” or the “GM diffusivity”. The bolus transport in the GM parameterization is thus given by:
This is the “advective form” of the GM parameterization as applied by Danabasoglu and McWilliams (1995) [DJCM95],
employed in the GFDL Modular Ocean Model (MOM) versions 1 and 2. To use the advective form in MITgcm, set
GM_AdvForm =.TRUE.
in data.gmredi
(also requires #define
GM_BOLUS_ADVEC and GM_EXTRA_DIAGONAL).
As implemented in the MITgcm code, \({\bf u}^\star\) is simply added to Eulerian \(\vec{\bf u}\)
(i.e., MITgcm variables uVel, vVel, wVel)
and passed to tracer advection subroutines (Section 2.17)
unless GM_AdvSeparate =.TRUE.
in data.gmredi
, in which case the bolus transport is computed separately.
Note that in MITgcm, the variables for the GM bolus streamfunction GM_PsiX and GM_PsiY are defined:
8.4.1.2.3. Griffies Skew Flux¶
Griffies (1998) [Gri98] notes that the discretization of bolus velocities involves multiple layers of differencing and interpolation that potentially lead to noisy fields and computational modes. He pointed out that the bolus flux can be rewritten in terms of a nondivergent flux and a skewflux:
The first vector is nondivergent and thus has no effect on the tracer field and can be dropped. The remaining flux can be written:
where
is an antisymmetric tensor.
This formulation of the GM parameterization involves fewer derivatives than the original and also involves only terms that already appear in the Redi mixing scheme. Indeed, a somewhat fortunate cancellation becomes apparent when we use the GM parameterization in conjunction with the Redi isoneutral mixing scheme:
If the Redi and GM diffusivities are equal, \(\kappa_{\rm GM} = \kappa_{\rho}\), then
which only differs from the variable Laplacian diffusion tensor by the two nonzero elements in the \(z\)row.
Subroutine
S/R GMREDI_CALC_TENSOR (pkg/gmredi/gmredi_calc_tensor.F)
\(\sigma_x\): SlopeX (argument on entry)
\(\sigma_y\): SlopeY (argument on entry)
\(\sigma_z\): SlopeY (argument)
\(S_x\): SlopeX (argument on exit)
\(S_y\): SlopeY (argument on exit)
8.4.1.2.4. Visbeck et al. 1997 GM diffusivity \(\kappa_{GM}(x,y)\)¶
Visbeck et al. (1997) [VMHS97] suggest making the eddy coefficient, \(\kappa_{\rm GM}\), a function of the Eady growth rate, \(f/\sqrt{\rm Ri}\). The formula involves a nondimensional constant, \(\alpha\), and a lengthscale \(L\):
where the Eady growth rate has been depth averaged (indicated by the overline). A local Richardson number is defined \({\rm Ri} = N^2 / (\partial_z u)^2\) which, when combined with thermal wind gives:
where \(M^2 = g  \nabla \sigma / \rho_0\). Substituting into the formula for \(\kappa_{\rm GM}\) gives:
8.4.1.2.5. Tapering and stability¶
Experience with the GFDL model showed that the GM scheme has to be matched to the convective parameterization. This was originally expressed in connection with the introduction of the KPP boundary layer scheme (Large et al. 1994 [LMD94]) but in fact, as subsequent experience with the MIT model has found, is necessary for any convective parameterization.
Slope clipping¶
Deep convection sites and the mixed layer are indicated by homogenized, unstable or nearly unstable stratification. The slopes in such regions can be either infinite, very large with a sign reversal or simply very large. From a numerical point of view, large slopes lead to large variations in the tensor elements (implying large bolus flow) and can be numerically unstable. This was first recognized by Cox (1987) [Cox87] who implemented “slope clipping” in the isopycnal mixing tensor. Here, the slope magnitude is simply restricted by an upper limit:
Notice that this algorithm assumes stable stratification through the “min” function. In the case where the fluid is well stratified (\(\sigma_z < S_{\rm lim}\)) then the slopes evaluate to:
while in the limited regions (\(\sigma_z > S_{\rm lim}\)) the slopes become:
so that the slope magnitude is limited \(\sqrt{s_x^2 + s_y^2} = S_{\max}\).
The slope clipping scheme is activated in the model by setting
GM_taper_scheme = ’clipping’
in data.gmredi
.
Even using slope clipping, it is normally the case that the vertical diffusion term (with coefficient \(\kappa_\rho{\bf K}_{33} = \kappa_\rho S_{\max}^2\)) is large and must be timestepped using an implicit procedure (see Section 2.6). Fig. [figmixedlayer] shows the mixed layer depth resulting from a) using the GM scheme with clipping and b) no GM scheme (horizontal diffusion). The classic result of dramatically reduced mixed layers is evident. Indeed, the deep convection sites to just one or two points each and are much shallower than we might prefer. This, it turns out, is due to the over zealous restratification due to the bolus transport parameterization. Limiting the slopes also breaks the adiabatic nature of the GM/Redi parameterization, reintroducing diabatic fluxes in regions where the limiting is in effect.
Subroutine
S/R GMREDI_SLOPE_LIMIT (pkg/gmredi/gmredi_slope_limit.F)
\(\sigma_x, s_x\): SlopeX (argument)
\(\sigma_y, s_y\): SlopeY (argument)
\(\sigma_z\): dSigmadRReal (argument)
\(z_\sigma^{*}\): dRdSigmaLtd (argument)
Tapering: Gerdes, Koberle and Willebrand, 1991 (GKW91)¶
The tapering scheme used in Gerdes et al. (1991) [GKW91] (GKW91) addressed two issues with the clipping method: the introduction of large vertical fluxes in addition to convective adjustment fluxes is avoided by tapering the GM/Redi slopes back to zero in lowstratification regions; the adjustment of slopes is replaced by a tapering of the entire GM/Redi tensor. This means the direction of fluxes is unaffected as the amplitude is scaled.
The scheme inserts a tapering function, \(f_1(S)\), in front of the GM/Redi tensor:
where \(S_{\max}\) is the maximum slope you want allowed. Where the slopes, \({\bf S}<S_{\max}\) then \(f_1(S) = 1\) and the tensor is untapered but where \({\bf S} \ge S_{\max}\) then \(f_1(S)\) scales down the tensor so that the effective vertical diffusivity term \(\kappa f_1(S) {\bf S}^2 = \kappa S_{\max}^2\).
The GKW91 tapering scheme is activated in the model by setting
GM_taper_scheme = ’gkw91’
in data.gmredi
.
Tapering: Danabasoglu and McWilliams, 1995 (DM95)¶
The tapering scheme used by Danabasoglu and McWilliams (1995) [DJCM95] (DM95) followed a similar procedure but used a different tapering function, \(f_1(S)\):
where \(S_c = 0.004\) is a cutoff slope and \(S_d=0.001\) is a scale over which the slopes are smoothly tapered. Functionally, the operates in the same way as the GKW91 scheme but has a substantially lower cutoff, turning off the GM/Redi parameterization for weaker slopes.
The DM95 tapering scheme is activated in the model by setting
GM_taper_scheme = ’dm95’
in data.gmredi
.
Tapering: Large, Danabasoglu and Doney, 1997 (LDD97)¶
The tapering used in Large et al. (1997) [LDDM97] (LDD97) is based on the DM95 tapering scheme, but also tapers the scheme with an additional function of height, \(f_2(z)\), so that the GM/Redi subgridscale fluxes are reduced near the surface:
where \(D = (c / f) {\bf S}\) is a depth scale, with \(f\) the Coriolis parameter and \(c=2\) m/s (corresponding to the first baroclinic wave speed, so that \(c/f\) is the Rossby radius). This tapering that varies with depth was introduced to fix some spurious interaction with the mixedlayer KPP parameterization.
The LDD97 tapering scheme is activated in the model by setting
GM_taper_scheme = ’ldd97’
in data.gmredi
.
8.4.1.3. GMREDI configuration and compiling¶
8.4.1.3.1. Compiletime options¶
As with all MITgcm packages, GMREDI can be turned on or off at compile time (see Section 3.5)
using the
packages.conf
file by addinggmredi
to itor using genmake2 adding
enable=gmredi
ordisable=gmredi
switchesrequired packages and CPP options: gmredi requires
Parts of the gmredi code can be enabled or disabled at compile time via CPP preprocessor flags. These options are set in GMREDI_OPTIONS.h. Table 8.5 summarizes the most important ones. For additional options see GMREDI_OPTIONS.h.
CPP option 
Default 
Description 

#define 
allows the leading diagonal (top two rows) to be nonunity 

#define 
allows different values of \(\kappa_{\rm GM}\) and \(\kappa_{\rho}\); also required for advective form 

#define 
allows use of the advective form (bolus velocity) 

#define 
allows use of BoundaryValueProblem method to evaluate bolus transport 

#undef 
allow QG Leith variable viscosity to be added to GMRedi coefficient 

#undef 
allows Visbeck et al. formulation to compute \(\kappa_{\rm GM}\) 
8.4.1.4. Runtime parameters¶
Runtime parameters (see Table 8.6) are set in
data.gmredi
(read in pkg/gmredi/gmredi_readparms.F).
8.4.1.4.1. Enabling the package¶
gmredi package is switched on/off at runtime by
setting useGMREDI = .TRUE.,
in data.pkg
.
8.4.1.4.2. General flags and parameters¶
Table 8.6 lists most runtime parameters.
Name 
Default value 
Description 

FALSE 
use advective form (bolus velocity); FALSE uses skewflux form 

FALSE 
do advection by Eulerian and bolus velocity separately 

0.0 
thickness diffusivity \(\kappa_{\rm GM}\) (m^{2}/s) (GM bolus transport) 

isopycnal diffusivity \(\kappa_{\rho}\) (m^{2}/s) (Redi tensor) 

1.0E02 
maximum slope (tapering/clipping) 

0.0 
minimum horizontal diffusivity (m^{2}/s) 

1.0E20 
\(\epsilon\) used in computing the slope 

1.0E+48 
\({\bf S}^2\) cutoff value for zero taper function 

‘ ‘ 
taper scheme option (‘orig’, ‘clipping’, ‘fm07’, ‘stableGmAdjTap’, ‘linear’, ‘ac02’, ‘gkw91’, ‘dm95’, ‘ldd97’) 

500.0 
maximum transition layer thickness (m) 

5.0 
maximum trans. layer thick. as a factor of local mixedlayer depth 

1.0 
minimum trans. layer thick. as a factor of local dr 

0.004 
\(S_c\) parameter for ‘dm95’ and ‘ldd97 ‘ tapering function 

0.001 
\(S_d\) parameter for ‘dm95’ and ‘ldd97’ tapering function 

FALSE 
use BoundaryValueProblem method for bolus transport 

1 
vertical mode number used for speed \(c\) in BVP transport 

1.0E01 
minimum value for wave speed parameter \(c\) in BVP (m/s) 

FALSE 
use submesoscale eddy parameterization for bolus transport 

7.0E02 
efficiency coefficient of mixedlayer eddies 

2.0E06 
inverse of mixing timescale in submeso parameterization (s^{1}) 

1.0E+03 
minimum value for lengthscale \(L_f\) (m) 

110.0E+03 
maximum horizontal gridscale length (m) 

0.0 
\(\alpha\) parameter for Visbeck et al. scheme (nondim.) 

200.0E+03 
\(L\) length scale parameter for Visbeck et al. scheme (m) 

1000.0 
depth (m) over which to average in computing Visbeck \(\kappa_{\rm GM}\) 

maximum slope used in computing Visbeck et al. \(\kappa_{\rm GM}\) 

0.0 
minimum \(\kappa_{\rm GM}\) (m^{2}/s) using Visbeck et al. 

2500.0 
maximum \(\kappa_{\rm GM}\) (m^{2}/s) using Visbeck et al. 

FALSE 
add Leith QG viscosity to GMRedi tensor 

‘ ‘ 
input file for 2D (\(x,y\)) scaling of isopycnal diffusivity 

‘ ‘ 
input file for 1D vert. scaling of isopycnal diffusivity 

‘ ‘ 
input file for 2D (\(x,y\)) scaling of thickness diffusivity 

‘ ‘ 
input file for 1D vert. scaling of thickness diffusivity 

‘ ‘ 
input file for 3D (\(x,y,r\)) GM_background_K 

‘ ‘ 
input file for 3D (\(x,y,r\)) GM_isopycK 

write GMREDI snapshot output using /pkg/mnc 
8.4.1.5. GMREDI Diagnostics¶

<Name>Levs< code >< Units >< Description

GM_VisbK 1 SM P M1m^2/s Mixing coefficient from Visbeck etal parameterization
GM_hTrsL 1 SM P M1m Base depth (>0) of the Transition Layer
GM_baseS 1 SM P M11 Slope at the base of the Transition Layer
GM_rLamb 1 SM P M11/m Slope vertical gradient at Trans. Layer Base (=recip.Lambda)
SubMesLf 1 SM P M1m SubMeso horiz. Length Scale (Lf)
SubMpsiX 1 UU M1m^2/s SubMeso transp.streamfunct. magnitude (Psi0): U component
SubMpsiY 1 VV M1m^2/s SubMeso transp.streamfunct. magnitude (Psi0): V component
GM_Kux  18 UU P MRm^2/s K_11 element (U.point, X.dir) of GMRedi tensor
GM_Kvy  18 VV P MRm^2/s K_22 element (V.point, Y.dir) of GMRedi tensor
GM_Kuz  18 UU MRm^2/s K_13 element (U.point, Z.dir) of GMRedi tensor
GM_Kvz  18 VV MRm^2/s K_23 element (V.point, Z.dir) of GMRedi tensor
GM_Kwx  18 UM LRm^2/s K_31 element (W.point, X.dir) of GMRedi tensor
GM_Kwy  18 VM LRm^2/s K_32 element (W.point, Y.dir) of GMRedi tensor
GM_Kwz  18 WM P LRm^2/s K_33 element (W.point, Z.dir) of GMRedi tensor
GM_PsiX  18 UU LRm^2/s GM Bolus transport streamfunction : U component
GM_PsiY  18 VV LRm^2/s GM Bolus transport streamfunction : V component
GM_KuzTz 18 UU MRdegC.m^3/s Redi Offdiagonal Temperature flux: X component
GM_KvzTz 18 VV MRdegC.m^3/s Redi Offdiagonal Temperature flux: Y component
GM_KwzTz 18 WM LRdegC.m^3/s Redi maindiagonal vertical Temperature flux
GM_ubT  18 UUr MRdegC.m^3/s Zonal MassWeight Bolus Transp of Pot Temp
GM_vbT  18 VVr MRdegC.m^3/s Meridional MassWeight Bolus Transp of Pot Temp
GM_BVPcW 1 SU P M1m/s WKB wave speed (at Western edge location)
GM_BVPcS 1 SV P M1m/s WKB wave speed (at Southern edge location)
8.4.1.6. Experiments and tutorials that use GMREDI¶
Southern Ocean Reentrant Channel Example, in verification/tutorial_reentrant_channel, described in Section 4.3
Global Ocean Simulation, in verification/tutorial_global_oce_latlon, described in Section 4.5
Front Relax experiment, in verification/front_relax
Ideal 2D Ocean experiment, in verification/ideal_2D_oce.