Shortwave penetration in MOM6
Date: 30/07/2026
Presenter: Dougie Squire (@dougiesquire)
The general stuff
Incoming shortwave radiation (SW) penetrates and heats a finite layer of the water column. Getting the vertical penetration right is important for SST and mixed-layer dynamics.
Absorption is strongly wavelength-dependent. Over half the incoming total SW is near-infrared and is absorbed within the top metre or so. The visible band penetrates further, with blue light reaching deepest. The optical properties of the ocean are strongly affected by phytoplankton/chlorophyll, dissolved organic matter and suspended particulates.
MOM6 has a number of different schemes for defining how SW penetrates into the ocean interior.
Beer–Lambert law
The Beer-Lambert law states that the loss of light intensity when it propagates in a medium is directly proportional to intensity and path length. This leads to an exponential attenuation law (for a given ocean column):
\(\mathrm{SW}(d,b) = \mathrm{SW}(0,b) \cdot \exp \left( - \int_{0}^{d} \kappa(z,b) dz \right)\)
The attenuation coefficient \(\kappa\) is often referred to as the "optical density" or the "opacity". Larger \(\kappa\) gives a shallower e-folding depth so is SW absorbed (and heats the ocean) closer to the surface.
The different opacity schemes in MOM6 provide different ways to define \(\mathrm{SW}(0,b)\) and \(\kappa(d,b)\).
Implementation in MOM6
In MOM6, the implementation of the SW penetration is split into two parts:
-
Scheme-dependent calculation of the opacity and penetrating SW at the surface (\(\kappa(d,b)\) and \(\mathrm{SW}(0,b)\) above). This occurs in the
MOM_opacitymodule, specifically in theset_opacityroutine, which sets the following arrays:type, public :: optics_type integer :: nbands real, allocatable :: opacity_band(:,:,:,:) ! <-- kappa(band, i, j, k) real, allocatable :: sw_pen_band(:,:,:) ! <-- SW_0(band, i, j) ... end type optics_type -
Scheme-independent application of the SW flux. This occurs in the
MOM_diabatic_auxmodule, specifically in theapplyBoundaryFluxesInOutroutine, which- Accounts for the surface layer heating from the SW that does not penetrate (in
extractFluxes1d); - Accounts for heating from penetrating SW by applying Beer-Lambert per band and through the column (in
absorbRemainingSW). The heat added to a given layer is calculated from the convergence of the flux across all bands, i.e. the difference between the total flux entering the top and leaving the bottom. Any unabsorbed SW at the bottom of the column is added as a uniform temperature increment across the column.
- Accounts for the surface layer heating from the SW that does not penetrate (in
MOM6 opacity schemes
MOM6 includes a number of schemes for calculating the opacity (\(\kappa(d,b)\)) and how much SW penetrates at the surface (\(\mathrm{SW}(0,b)\)). The scheme can be set in the MOM_input file using the EXP_OPACITY_SCHEME parameter (constant schemes; VAR_PEN_SW = False) or OPACITY_SCHEME parameter (chlorophyll-based schemes; VAR_PEN_SW = True). The number of wavelength bands and their bounds can be set using the PEN_SW_NBANDS and OPACITY_BAND_WAVELENGTHS parameters.
For the chlorophyll-based schemes, chlorophyll concentrations can be either provided via a file (2D and MOM uses the same value for all layers), or a 3D, prognostic field taken directly from a tracer package.
EXP_OPACITY_SCHEME = SINGLE_EXP: constant, one band
User sets:
PEN_SW_SCALE: the constant e-folding depth (i.e. \(1/\kappa\))PEN_SW_FRAC: the constant fraction of total SW that penetrates the surface
EXP_OPACITY_SCHEME = DOUBLE_EXP: constant, two bands
User sets:
PEN_SW_SCALEandPEN_SW_SCALE_2ND: the constant e-folding depths for each bandSW_1ST_EXP_RATIO: the constant fraction of total SW that penetrates the surface in the first band. The remaining SW penetrates in the second band.
OPACITY_SCHEME = MOREL_88: chlorophyll-dependent, one band
Based on Morel (1988) and Morel & Antoine (1994). The opacity and penetrating fraction are calculated from polynomial functions of chlorophyll concentration. Note this scheme allows specifying multiple bands, but in this case the opacity and penetrating fraction are simply the same in each band.
User can set:
OPACITY_VALUES_MOREL: coefficients to calculate the opacity from the chlorophyllSW_PEN_FRAC_COEFS_MOREL: coefficients to calculate the penetrating fraction of visible SW from the chlorophyll
OPACITY_SCHEME = OHLMANN_03: chlorophyll-dependent, two bands
Based on Ohlmann (2003), as implemented in CESM-POP. The opacity and penetrating fraction of total SW for each of the two bands are found using a look-up table in log10(chlorophyll) space.
OPACITY_SCHEME = MANIZZA_05: chlorophyll-dependent, per-band
Based on Manizza et al. (2005). The opacity is calculated for each band from a polynomial function of chlorophyll concentration: \(\kappa_b = a_b + b_b \cdot \mathrm{chl}^{c_b}\). By default, the first two bands use polynomial coefficients for blue and red light and any remaining bands are near-infrared with no chlorophyll-dependence. The penetrating shortwave is split into blue (band 1) and red (band 2) fractions of the visible shortwave. The near-infrared shortwave is divided evenly across any remaining bands.
User can set:
OPACITY_VALUES_MANIZZA: pairs of coefficients (\(a_b\) and \(b_b\)) for blue, red and near-infrared bands to calculate the opacity from the chlorophyllCHOROPHYLL_POWER_MANIZZA: powers (\(c_b\)) for blue, red and near-infrared bands to calculate the opacity from the chlorophyllBLUE_FRAC_SW: the fraction of visible SW to put in the blue band