Skip to content

Commit

Permalink
+Rename visc%TKE_BBL to visc%BBL_meanKE_loss
Browse files Browse the repository at this point in the history
  Revised the name of visc%TKE_BBL to visc%BBL_meanKE_loss to better reflect
what these variables contain, and the fact that the efficiency of the conversion
from mean kinetic energy loss to turbulent kinetic energy has not been applied
yet.  The units of visc%BBL_meanKE_loss are [H L2 T-3 ~> m3 s-3 or W m-2],
whereas those of visc%TKE_BBL were [H Z2 T-3 ~> m3 s-3 or W m-2].  The factor
rescaling between the units of mean kinetic energy and those of turbulent
kinetic energy have been incorporated into set_diffusivity_CS%BBL_effic and
energetic_PBL_CS%ePBL_BBL_effic.  All answers are bitwise identical.
  • Loading branch information
Hallberg-NOAA committed Jan 19, 2025
1 parent 54feb6f commit 30edcf8
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 26 deletions.
4 changes: 2 additions & 2 deletions src/core/MOM_variables.F90
Original file line number Diff line number Diff line change
Expand Up @@ -237,8 +237,8 @@ module MOM_variables
kv_bbl_v, & !< The bottom boundary layer viscosity at the v-points [H Z T-1 ~> m2 s-1 or Pa s]
ustar_BBL, & !< The turbulence velocity in the bottom boundary layer at
!! h points [H T-1 ~> m s-1 or kg m-2 s-1].
TKE_BBL, & !< A term related to the bottom boundary layer source of turbulent kinetic
!! energy, currently in [H Z2 T-3 ~> m3 s-3 or W m-2].
BBL_meanKE_loss, & !< The viscous loss of mean kinetic energy in the bottom boundary layer
!! [H L2 T-3 ~> m3 s-3 or W m-2].
taux_shelf, & !< The zonal stresses on the ocean under shelves [R Z L T-2 ~> Pa].
tauy_shelf !< The meridional stresses on the ocean under shelves [R Z L T-2 ~> Pa].
real, allocatable, dimension(:,:) :: tbl_thick_shelf_u
Expand Down
13 changes: 8 additions & 5 deletions src/parameterizations/vertical/MOM_energetic_PBL.F90
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,9 @@ module MOM_energetic_PBL
real :: Max_Enhance_M = 5. !< The maximum allowed LT enhancement to the mixing [nondim].

!/ Bottom boundary layer mixing related options
real :: ePBL_BBL_effic !< The efficiency of bottom boundary layer mixing via ePBL [nondim]
real :: ePBL_BBL_effic !< The efficiency of bottom boundary layer mixing via ePBL, times
!! conversion factors between the natural units of mean kinetic energy
!! and those those used for TKE [Z2 L-2 ~> nondim].
logical :: Use_BBLD_iteration !< If true, use the proximity to the top of the actively turbulent
!! bottom boundary layer to constrain the mixing lengths.
real :: TKE_decay_BBL !< The ratio of the natural Ekman depth to the TKE decay scale for
Expand Down Expand Up @@ -654,7 +656,7 @@ subroutine energetic_PBL(h_3d, u_3d, v_3d, tv, fluxes, visc, dt, Kd_int, G, GV,
if (CS%ePBL_BBL_effic > 0.0) then
if (CS%MLD_iteration_guess .and. (CS%BBL_depth(i,j) > 0.0)) BBLD_io = CS%BBL_depth(i,j)
BBLD_in = BBLD_io
BBL_TKE = CS%ePBL_BBL_effic * GV%H_to_RZ * dt * visc%TKE_BBL(i,j)
BBL_TKE = CS%ePBL_BBL_effic * GV%H_to_RZ * dt * visc%BBL_meanKE_loss(i,j)
u_star_BBL = max(visc%ustar_BBL(i,j), CS%ustar_min*GV%Z_to_H)
call ePBL_BBL_column(h, dz, u, v, T0, S0, dSV_dT_1d, dSV_dS_1d, SpV_dt, absf, dt, Kd, BBL_TKE, &
u_star_BBL, Kd_BBL, BBLD_io, mixvel_BBL, mixlen_BBL, GV, US, CS, eCD)
Expand Down Expand Up @@ -730,7 +732,7 @@ subroutine energetic_PBL(h_3d, u_3d, v_3d, tv, fluxes, visc, dt, Kd_int, G, GV,
mixvel, mixlen, GV, US, CS_tmp2, eCD_tmp, Waves, G, i, j)
else
BLD_1 = BBLD_in ; BLD_2 = BBLD_in
BBL_TKE = CS%ePBL_BBL_effic * GV%H_to_RZ * dt * visc%TKE_BBL(i,j)
BBL_TKE = CS%ePBL_BBL_effic * GV%H_to_RZ * dt * visc%BBL_meanKE_loss(i,j)
u_star_BBL = max(visc%ustar_BBL(i,j), CS%ustar_min*GV%Z_to_H)
call ePBL_BBL_column(h, dz, u, v, T0, S0, dSV_dT_1d, dSV_dS_1d, SpV_dt, absf, dt, Kd, BBL_TKE, &
u_star_BBL, Kd_1, BLD_1, mixvel_BBL, mixlen_BBL, GV, US, CS_tmp1, eCD_tmp)
Expand Down Expand Up @@ -760,7 +762,8 @@ subroutine energetic_PBL(h_3d, u_3d, v_3d, tv, fluxes, visc, dt, Kd_int, G, GV,
enddo ! j-loop

if (CS%debug .and. (CS%ePBL_BBL_effic > 0.0)) then
call hchksum(visc%TKE_BBL, "ePBL visc%TKE_BBL", G%HI, unscale=GV%H_to_MKS*US%Z_to_m**2*US%s_to_T**3)
call hchksum(visc%BBL_meanKE_loss, "ePBL visc%BBL_meanKE_loss", G%HI, &
unscale=GV%H_to_MKS*US%L_T_to_m_s**2*US%s_to_T)
call hchksum(visc%ustar_BBL, "ePBL visc%ustar_BBL", G%HI, unscale=GV%H_to_MKS*US%s_to_T)
call hchksum(Kd_int, "End of ePBL Kd_int", G%HI, unscale=GV%H_to_MKS*US%Z_to_m*US%s_to_T)
call hchksum(diag_Velocity_Scale, "ePBL Velocity_Scale", G%HI, unscale=US%Z_to_m*US%s_to_T)
Expand Down Expand Up @@ -3670,7 +3673,7 @@ subroutine energetic_PBL_init(Time, G, GV, US, param_file, diag, CS)
call get_param(param_file, mdl, "EPBL_BBL_EFFIC", CS%ePBL_BBL_effic, &
"The efficiency of bottom boundary layer mixing via ePBL. Setting this to a "//&
"value that is greater than 0 to enable bottom boundary layer mixing from EPBL.", &
units="nondim", default=0.0)
units="nondim", default=0.0, scale=US%L_to_Z**2)
no_BBL = (CS%ePBL_BBL_effic<=0.0)
call get_param(param_file, mdl, "USE_BBLD_ITERATION", CS%Use_BBLD_iteration, &
"A logical that specifies whether or not to use the distance to the top of the "//&
Expand Down
38 changes: 21 additions & 17 deletions src/parameterizations/vertical/MOM_set_diffusivity.F90
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,10 @@ module MOM_set_diffusivity
logical :: LOTW_BBL_use_omega !< If true, use simpler/less precise, BBL diffusivity.
real :: Von_Karm !< The von Karman constant as used in the BBL diffusivity calculation
!! [nondim]. See (http://en.wikipedia.org/wiki/Von_Karman_constant)
real :: BBL_effic !< efficiency with which the energy extracted
!! by bottom drag drives BBL diffusion in the original BBL scheme [nondim]
real :: BBL_effic !< Efficiency with which the energy extracted
!! by bottom drag drives BBL diffusion in the original BBL scheme, times
!! conversion factors between the natural units of mean kinetic energy
!! and those those used for TKE [Z2 L-2 ~> nondim].
real :: ePBL_BBL_effic !< efficiency with which the energy extracted
!! by bottom drag drives BBL diffusion in the ePBL BBL scheme [nondim]
real :: cdrag !< quadratic drag coefficient [nondim]
Expand Down Expand Up @@ -1412,10 +1414,10 @@ subroutine add_drag_diffusivity(h, u, v, tv, fluxes, visc, j, TKE_to_Kd, maxTKE,
! If ustar_h = 0, this is land so this value doesn't matter.
I2decay(i) = 0.5*CS%IMax_decay
endif
TKE(i) = ((CS%BBL_effic * cdrag_sqrt) * exp(-I2decay(i)*h(i,j,nz)) ) * visc%TKE_BBL(i,j)
TKE(i) = ((CS%BBL_effic * cdrag_sqrt) * exp(-I2decay(i)*h(i,j,nz)) ) * visc%BBL_meanKE_loss(i,j)

if (associated(fluxes%TKE_tidal)) &
TKE(i) = TKE(i) + fluxes%TKE_tidal(i,j) * GV%RZ_to_H * &
TKE(i) = TKE(i) + US%Z_to_L**2*fluxes%TKE_tidal(i,j) * GV%RZ_to_H * &
(CS%BBL_effic * exp(-I2decay(i)*h(i,j,nz)))

! Distribute the work over a BBL of depth 20^2 ustar^2 / g' following
Expand Down Expand Up @@ -1471,7 +1473,7 @@ subroutine add_drag_diffusivity(h, u, v, tv, fluxes, visc, j, TKE_to_Kd, maxTKE,
else ; TKE_to_layer = 0.0 ; endif

! TKE_Ray has been initialized to 0 above.
if (Rayleigh_drag) TKE_Ray = 0.5*CS%BBL_effic * US%L_to_Z**2 * G%IareaT(i,j) * &
if (Rayleigh_drag) TKE_Ray = 0.5*CS%BBL_effic * G%IareaT(i,j) * &
(((G%areaCu(I-1,j) * visc%Ray_u(I-1,j,k) * u(I-1,j,k)**2) + &
(G%areaCu(I,j) * visc%Ray_u(I,j,k) * u(I,j,k)**2)) + &
((G%areaCv(i,J-1) * visc%Ray_v(i,J-1,k) * v(i,J-1,k)**2) + &
Expand Down Expand Up @@ -1576,6 +1578,8 @@ subroutine add_LOTW_BBL_diffusivity(h, u, v, tv, fluxes, visc, j, N2_int, Rho_bo
real :: dz(SZI_(G),SZK_(GV)) ! Height change across layers [Z ~> m]
real :: dz_above(SZK_(GV)+1) ! Distance from each interface to the surface [Z ~> m]
real :: TKE_column ! net TKE input into the column [H Z2 T-3 ~> m3 s-3 or W m-2]
real :: BBL_meanKE_dis ! Sum of tidal and mean kinetic energy dissipation in the bottom boundary layer, which
! can act as a source of TKE [H L2 T-3 ~> m3 s-3 or W m-2]
real :: TKE_remaining ! remaining TKE available for mixing in this layer and above [H Z2 T-3 ~> m3 s-3 or W m-2]
real :: TKE_consumed ! TKE used for mixing in this layer [H Z2 T-3 ~> m3 s-3 or W m-2]
real :: TKE_Kd_wall ! TKE associated with unlimited law of the wall mixing [H Z2 T-3 ~> m3 s-3 or W m-2]
Expand Down Expand Up @@ -1639,14 +1643,14 @@ subroutine add_LOTW_BBL_diffusivity(h, u, v, tv, fluxes, visc, j, N2_int, Rho_bo
if ((ustar > 0.0) .and. (absf > CS%IMax_decay * ustar)) Idecay = absf / ustar

! Energy input at the bottom [H Z2 T-3 ~> m3 s-3 or W m-2].
! (Note that visc%TKE_BBL is in [H Z2 T-3 ~> m3 s-3 or W m-2], set in set_BBL_TKE().)
! I am still unsure about sqrt(cdrag) in this expressions - AJA
TKE_column = cdrag_sqrt * visc%TKE_BBL(i,j)
! (Note that visc%BBL_meanKE_loss is in [H L2 T-3 ~> m3 s-3 or W m-2], set in set_BBL_TKE().)
!### I am still unsure about sqrt(cdrag) in this expressions - AJA
BBL_meanKE_dis = cdrag_sqrt * visc%BBL_meanKE_loss(i,j)
! Add in tidal dissipation energy at the bottom [H Z2 T-3 ~> m3 s-3 or W m-2].
! Note that TKE_tidal is in [R Z3 T-3 ~> W m-2].
if (associated(fluxes%TKE_tidal)) &
TKE_column = TKE_column + fluxes%TKE_tidal(i,j) * GV%RZ_to_H
TKE_column = CS%BBL_effic * TKE_column ! Only use a fraction of the mechanical dissipation for mixing.
BBL_meanKE_dis = BBL_meanKE_dis + US%Z_to_L**2*fluxes%TKE_tidal(i,j) * GV%RZ_to_H
TKE_column = CS%BBL_effic * BBL_meanKE_dis ! Only use a fraction of the mechanical dissipation for mixing.

TKE_remaining = TKE_column
if (CS%LOTW_BBL_answer_date > 20240630) then
Expand All @@ -1670,7 +1674,7 @@ subroutine add_LOTW_BBL_diffusivity(h, u, v, tv, fluxes, visc, j, N2_int, Rho_bo

! Add in additional energy input from bottom-drag against slopes (sides)
if (Rayleigh_drag) TKE_remaining = TKE_remaining + &
0.5*CS%BBL_effic * US%L_to_Z**2 * G%IareaT(i,j) * &
0.5*CS%BBL_effic * G%IareaT(i,j) * &
(((G%areaCu(I-1,j) * visc%Ray_u(I-1,j,k) * u(I-1,j,k)**2) + &
(G%areaCu(I,j) * visc%Ray_u(I,j,k) * u(I,j,k)**2)) + &
((G%areaCv(i,J-1) * visc%Ray_v(i,J-1,k) * v(i,J-1,k)**2) + &
Expand Down Expand Up @@ -1949,8 +1953,8 @@ subroutine set_BBL_TKE(u, v, h, tv, fluxes, visc, G, GV, US, CS, OBC)
if (allocated(visc%ustar_BBL)) then
do j=js,je ; do i=is,ie ; visc%ustar_BBL(i,j) = 0.0 ; enddo ; enddo
endif
if (allocated(visc%TKE_BBL)) then
do j=js,je ; do i=is,ie ; visc%TKE_BBL(i,j) = 0.0 ; enddo ; enddo
if (allocated(visc%BBL_meanKE_loss)) then
do j=js,je ; do i=is,ie ; visc%BBL_meanKE_loss(i,j) = 0.0 ; enddo ; enddo
endif
return
endif
Expand Down Expand Up @@ -2075,7 +2079,7 @@ subroutine set_BBL_TKE(u, v, h, tv, fluxes, visc, G, GV, US, CS, OBC)
(G%areaCu(I,j)*(ustar(I)*ustar(I)))) + &
((G%areaCv(i,J-1)*(vstar(i,J-1)*vstar(i,J-1))) + &
(G%areaCv(i,J)*(vstar(i,J)*vstar(i,J)))) ) )
visc%TKE_BBL(i,j) = US%L_to_Z**2 * &
visc%BBL_meanKE_loss(i,j) = &
((((G%areaCu(I-1,j)*(ustar(I-1)*u2_bbl(I-1))) + &
(G%areaCu(I,j) * (ustar(I)*u2_bbl(I)))) + &
((G%areaCv(i,J-1)*(vstar(i,J-1)*v2_bbl(i,J-1))) + &
Expand Down Expand Up @@ -2358,9 +2362,9 @@ subroutine set_diffusivity_init(Time, G, GV, US, param_file, diag, CS, int_tide_
"velocity field to the bottom stress. CDRAG is only used "//&
"if BOTTOMDRAGLAW is true.", units="nondim", default=0.003)
call get_param(param_file, mdl, "BBL_EFFIC", CS%BBL_effic, &
"The efficiency with which the energy extracted by "//&
"bottom drag drives BBL diffusion. This is only "//&
"used if BOTTOMDRAGLAW is true.", units="nondim", default=0.20)
"The efficiency with which the energy extracted by bottom drag drives BBL "//&
"diffusion. This is only used if BOTTOMDRAGLAW is true.", &
units="nondim", default=0.20, scale=US%L_to_Z**2)
call get_param(param_file, mdl, "EPBL_BBL_EFFIC", CS%ePBL_BBL_effic, &
units="nondim", default=0.0,do_not_log=.true.)
call get_param(param_file, mdl, "BBL_MIXING_MAX_DECAY", decay_length, &
Expand Down
4 changes: 2 additions & 2 deletions src/parameterizations/vertical/MOM_set_viscosity.F90
Original file line number Diff line number Diff line change
Expand Up @@ -3139,7 +3139,7 @@ subroutine set_visc_init(Time, G, GV, US, param_file, diag, visc, CS, restart_CS
allocate(visc%kv_bbl_u(IsdB:IedB,jsd:jed), source=0.0)
allocate(visc%kv_bbl_v(isd:ied,JsdB:JedB), source=0.0)
allocate(visc%ustar_bbl(isd:ied,jsd:jed), source=0.0)
allocate(visc%TKE_bbl(isd:ied,jsd:jed), source=0.0)
allocate(visc%BBL_meanKE_loss(isd:ied,jsd:jed), source=0.0)

CS%id_bbl_thick_u = register_diag_field('ocean_model', 'bbl_thick_u', &
diag%axesCu1, Time, 'BBL thickness at u points', 'm', conversion=US%Z_to_m)
Expand Down Expand Up @@ -3214,7 +3214,7 @@ subroutine set_visc_end(visc, CS)
if (associated(visc%Kv_shear)) deallocate(visc%Kv_shear)
if (associated(visc%Kv_shear_Bu)) deallocate(visc%Kv_shear_Bu)
if (allocated(visc%ustar_bbl)) deallocate(visc%ustar_bbl)
if (allocated(visc%TKE_bbl)) deallocate(visc%TKE_bbl)
if (allocated(visc%BBL_meanKE_loss)) deallocate(visc%BBL_meanKE_loss)
if (allocated(visc%taux_shelf)) deallocate(visc%taux_shelf)
if (allocated(visc%tauy_shelf)) deallocate(visc%tauy_shelf)
if (allocated(visc%tbl_thick_shelf_u)) deallocate(visc%tbl_thick_shelf_u)
Expand Down

0 comments on commit 30edcf8

Please sign in to comment.