When activating the LMD_KPP option for internal mixing, there is an option to use both surface and bottom kpp scheme, LMD_SKPP and LMD_BKPP.
The bottom boundary layer scheme, lmd_bkpp.F, mimics the surface BL, and likewise allows for input of the heat, salt, and shortwave radiation fluxes. The apparent coding error is that the _surface_ heat flux, STFLX, and _surface_ solar radiation, SRFLX, are used (up to the version ROMS2.1 and ROMS2.2) in place of _bottom_ heat flux, BTFLX, and radiation flux, BRFLX (might need to be included in very shallow waters, due to possible reflected from the bottom - ??).
The bottom turbulent buoyancy forcing "Bo" is currently computed as:
Bo(i,j)=g*(alpha(i,j)*(stflx(i,j,itemp)-srflx(i,j))- beta (i,j)*stflx(i,j,isalt))
that needs to be replaced by something more like:
Bo(i,j)=g*(alpha(i,j)*(btflx(i,j,itemp))- beta (i,j)*btflx(i,j,isalt))
"Bosol", radiative buoyancy forcing, is currently set to zero, and thus could be either eliminated at all from the routine, or maybe made more sophisticated to account for the reflection from the bottom.
This coding error will be undetected, unless you input surface heat flux and solar heat flux along with using the current LMD_BKPP. In our simulations, the heat fluxes were passed to ROMS from the atmospheric model, and were very strong during the daytime. The result was that unrealistic heating was applied at the model bottom, yielding a strong diurnal cycle throughout the entire water column in shallow regions.
When we fixed the bug, and replaced the surface fluxes by bottom ones, the results qualitatively improved; no more temperature or momentum diurnal cycles in the interior, and weird profiles in the shallow regions.
Please, send your comments!
Thanks,
Natalie.