Skip to content

Commit 3176b17

Browse files
committed
+Rename fluxes%TKE_tidal to fluxes%BBL_tidal_dis
Revised the name of fluxes%TKE_tidal to fluxes%BBL_tidal_dis to better reflect what this field holds,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 fluxes%BBL_tidal_dis are [R Z L2 T-3 ~> W m-2], whereas those of fluxes%TKE_tidal were [R Z3 T-3 ~> W m-2]. The factor rescaling between the units of mean kinetic energy and those of turbulent kinetic energy were already in set_diffusivity_CS%BBL_effic, and these have been cancelled out by this change, but this is offset by the addition of rescaling factors in the term setting this array in the NUOPC and mct convert_IOB_to_fluxes routines. In the FMS_cap version of convert_IOB_to_fluxes, the extra rescaling factor is rolled into the scaling factor used in the get_param call for rho_TKE_tidal. All answers are bitwise identical, but there is a change in the name and rescaled units of an element of a transparent type.
1 parent 30edcf8 commit 3176b17

File tree

5 files changed

+42
-35
lines changed

5 files changed

+42
-35
lines changed

config_src/drivers/FMS_cap/MOM_surface_forcing_gfdl.F90

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,8 @@ module MOM_surface_forcing_gfdl
8888
real :: gust_const !< Constant unresolved background gustiness for ustar [R L Z T-2 ~> Pa]
8989
logical :: read_gust_2d !< If true, use a 2-dimensional gustiness supplied from an input file.
9090
real, pointer, dimension(:,:) :: &
91-
TKE_tidal => NULL() !< Turbulent kinetic energy introduced to the bottom boundary layer
92-
!! by drag on the tidal flows [R Z3 T-3 ~> W m-2].
91+
BBL_tidal_dis => NULL() !< Tidal energy dissipation in the bottom boundary layer that can act as a
92+
!! source of energy for bottom boundary layer mixing [R Z L2 T-3 ~> W m-2]
9393
real, pointer, dimension(:,:) :: &
9494
gust => NULL() !< A spatially varying unresolved background gustiness that
9595
!! contributes to ustar [R L Z T-2 ~> Pa]. gust is used when read_gust_2d is true.
@@ -302,7 +302,7 @@ subroutine convert_IOB_to_fluxes(IOB, fluxes, index_bounds, Time, valid_time, G,
302302
call safe_alloc_ptr(fluxes%salt_flux,isd,ied,jsd,jed)
303303
call safe_alloc_ptr(fluxes%salt_flux_in,isd,ied,jsd,jed)
304304

305-
call safe_alloc_ptr(fluxes%TKE_tidal,isd,ied,jsd,jed)
305+
call safe_alloc_ptr(fluxes%BBL_tidal_dis,isd,ied,jsd,jed)
306306
call safe_alloc_ptr(fluxes%ustar_tidal,isd,ied,jsd,jed)
307307

308308
call safe_alloc_ptr(fluxes%heat_added,isd,ied,jsd,jed)
@@ -311,7 +311,7 @@ subroutine convert_IOB_to_fluxes(IOB, fluxes, index_bounds, Time, valid_time, G,
311311
if (associated(IOB%excess_salt)) call safe_alloc_ptr(fluxes%salt_left_behind,isd,ied,jsd,jed)
312312

313313
do j=js-2,je+2 ; do i=is-2,ie+2
314-
fluxes%TKE_tidal(i,j) = CS%TKE_tidal(i,j)
314+
fluxes%BBL_tidal_dis(i,j) = CS%BBL_tidal_dis(i,j)
315315
fluxes%ustar_tidal(i,j) = CS%ustar_tidal(i,j)
316316
enddo ; enddo
317317

@@ -1304,11 +1304,15 @@ subroutine surface_forcing_init(Time, G, US, param_file, diag, CS, wind_stagger)
13041304

13051305
! Local variables
13061306
real :: utide ! The RMS tidal velocity [Z T-1 ~> m s-1].
1307+
real, dimension(SZI_(G),SZJ_(G)) :: &
1308+
utide_2d ! A 2d array of RMS tidal velocities [Z T-1 ~> m s-1].
13071309
real :: Flux_const_dflt ! A default piston velocity for restoring surface properties [m day-1]
13081310
logical :: Boussinesq ! If true, this run is fully Boussinesq
13091311
logical :: semi_Boussinesq ! If true, this run is partially non-Boussinesq
1310-
real :: rho_TKE_tidal ! The constant bottom density used to translate tidal amplitudes into the
1311-
! tidal bottom TKE input used with INT_TIDE_DISSIPATION [R ~> kg m-3]
1312+
real :: rho_TKE_tidal ! The constant bottom density used to translate tidal amplitudes into
1313+
! the tidal bottom TKE input used with INT_TIDE_DISSIPATION, times the
1314+
! factor rescaling from the units of TKE to those of mean kinetic
1315+
! energy [R L2 Z-2 ~> kg m-3]
13121316
logical :: new_sim ! False if this simulation was started from a restart file
13131317
! or other equivalent files.
13141318
logical :: iceberg_flux_diags ! If true, diagnostics of fluxes from icebergs are available.
@@ -1573,27 +1577,28 @@ subroutine surface_forcing_init(Time, G, US, param_file, diag, CS, wind_stagger)
15731577
call get_param(param_file, mdl, "TKE_TIDAL_RHO", rho_TKE_tidal, &
15741578
"The constant bottom density used to translate tidal amplitudes into the tidal "//&
15751579
"bottom TKE input used with INT_TIDE_DISSIPATION.", &
1576-
units="kg m-3", default=CS%Rho0*US%R_to_kg_m3, scale=US%kg_m3_to_R, &
1580+
units="kg m-3", default=CS%Rho0*US%R_to_kg_m3, scale=US%kg_m3_to_R*US%Z_to_L**2, &
15771581
do_not_log=.not.(CS%read_TIDEAMP.or.(CS%utide>0.0)))
15781582

1579-
call safe_alloc_ptr(CS%TKE_tidal,isd,ied,jsd,jed)
1583+
call safe_alloc_ptr(CS%BBL_tidal_dis,isd,ied,jsd,jed)
15801584
call safe_alloc_ptr(CS%ustar_tidal,isd,ied,jsd,jed)
15811585

15821586
if (CS%read_TIDEAMP) then
15831587
TideAmp_file = trim(CS%inputdir) // trim(TideAmp_file)
15841588
! NOTE: There are certain cases where FMS is unable to read this file, so
15851589
! we use read_netCDF_data in place of MOM_read_data.
1586-
call read_netCDF_data(TideAmp_file, 'tideamp', CS%TKE_tidal, G%Domain, &
1590+
utide_2d(:,:) = 0.0
1591+
call read_netCDF_data(TideAmp_file, 'tideamp', utide_2d, G%Domain, &
15871592
rescale=US%m_to_Z*US%T_to_s)
15881593
do j=jsd, jed; do i=isd, ied
1589-
utide = CS%TKE_tidal(i,j)
1590-
CS%TKE_tidal(i,j) = G%mask2dT(i,j)*rho_TKE_tidal*CS%cd_tides*(utide*utide*utide)
1594+
utide = utide_2d(i,j)
1595+
CS%BBL_tidal_dis(i,j) = G%mask2dT(i,j)*rho_TKE_tidal*CS%cd_tides*(utide*utide*utide)
15911596
CS%ustar_tidal(i,j) = sqrt(CS%cd_tides)*utide
15921597
enddo ; enddo
15931598
else
15941599
do j=jsd,jed; do i=isd,ied
15951600
utide = CS%utide
1596-
CS%TKE_tidal(i,j) = rho_TKE_tidal*CS%cd_tides*(utide*utide*utide)
1601+
CS%BBL_tidal_dis(i,j) = rho_TKE_tidal*CS%cd_tides*(utide*utide*utide)
15971602
CS%ustar_tidal(i,j) = sqrt(CS%cd_tides)*utide
15981603
enddo ; enddo
15991604
endif

config_src/drivers/STALE_mct_cap/mom_surface_forcing_mct.F90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ subroutine convert_IOB_to_fluxes(IOB, fluxes, index_bounds, Time, valid_time, G,
295295
call safe_alloc_ptr(fluxes%salt_flux_in,isd,ied,jsd,jed)
296296
call safe_alloc_ptr(fluxes%salt_flux_added,isd,ied,jsd,jed)
297297

298-
call safe_alloc_ptr(fluxes%TKE_tidal,isd,ied,jsd,jed)
298+
call safe_alloc_ptr(fluxes%BBL_tidal_dis,isd,ied,jsd,jed)
299299
call safe_alloc_ptr(fluxes%ustar_tidal,isd,ied,jsd,jed)
300300

301301
if (CS%allow_flux_adjustments) then
@@ -304,7 +304,7 @@ subroutine convert_IOB_to_fluxes(IOB, fluxes, index_bounds, Time, valid_time, G,
304304
endif
305305

306306
do j=js-2,je+2 ; do i=is-2,ie+2
307-
fluxes%TKE_tidal(i,j) = CS%TKE_tidal(i,j)
307+
fluxes%BBL_tidal_dis(i,j) = US%Z_to_L**2*CS%TKE_tidal(i,j)
308308
fluxes%ustar_tidal(i,j) = CS%ustar_tidal(i,j)
309309
enddo ; enddo
310310

config_src/drivers/nuopc_cap/mom_surface_forcing_nuopc.F90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ subroutine convert_IOB_to_fluxes(IOB, fluxes, index_bounds, Time, valid_time, G,
317317
call safe_alloc_ptr(fluxes%salt_flux_in,isd,ied,jsd,jed)
318318
call safe_alloc_ptr(fluxes%salt_flux_added,isd,ied,jsd,jed)
319319

320-
call safe_alloc_ptr(fluxes%TKE_tidal,isd,ied,jsd,jed)
320+
call safe_alloc_ptr(fluxes%BBL_tidal_dis,isd,ied,jsd,jed)
321321
call safe_alloc_ptr(fluxes%ustar_tidal,isd,ied,jsd,jed)
322322

323323
if (CS%allow_flux_adjustments) then
@@ -326,7 +326,7 @@ subroutine convert_IOB_to_fluxes(IOB, fluxes, index_bounds, Time, valid_time, G,
326326
endif
327327

328328
do j=js-2,je+2 ; do i=is-2,ie+2
329-
fluxes%TKE_tidal(i,j) = CS%TKE_tidal(i,j)
329+
fluxes%BBL_tidal_dis(i,j) = US%Z_to_L**2*CS%TKE_tidal(i,j)
330330
fluxes%ustar_tidal(i,j) = CS%ustar_tidal(i,j)
331331
enddo ; enddo
332332

src/core/MOM_forcing_type.F90

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,8 @@ module MOM_forcing_type
168168

169169
! tide related inputs
170170
real, pointer, dimension(:,:) :: &
171-
TKE_tidal => NULL(), & !< tidal energy source driving mixing in bottom boundary layer [R Z3 T-3 ~> W m-2]
171+
BBL_tidal_dis => NULL(), & !< Tidal energy dissipation in the bottom boundary layer that can act
172+
!! as a source of energy for bottom boundary layer mixing [R Z L2 T-3 ~> W m-2]
172173
ustar_tidal => NULL() !< tidal contribution to bottom ustar [Z T-1 ~> m s-1]
173174

174175
! iceberg related inputs
@@ -1313,8 +1314,9 @@ subroutine MOM_forcing_chksum(mesg, fluxes, G, US, haloshift)
13131314
call hchksum(fluxes%ice_fraction, mesg//" fluxes%ice_fraction", G%HI, haloshift=hshift)
13141315
if (associated(fluxes%salt_flux)) &
13151316
call hchksum(fluxes%salt_flux, mesg//" fluxes%salt_flux", G%HI, haloshift=hshift, unscale=US%RZ_T_to_kg_m2s)
1316-
if (associated(fluxes%TKE_tidal)) &
1317-
call hchksum(fluxes%TKE_tidal, mesg//" fluxes%TKE_tidal", G%HI, haloshift=hshift, unscale=US%RZ3_T3_to_W_m2)
1317+
if (associated(fluxes%BBL_tidal_dis)) &
1318+
call hchksum(fluxes%BBL_tidal_dis, mesg//" fluxes%BBL_tidal_dis", G%HI, haloshift=hshift, &
1319+
unscale=US%L_to_Z**2*US%RZ3_T3_to_W_m2)
13181320
if (associated(fluxes%ustar_tidal)) &
13191321
call hchksum(fluxes%ustar_tidal, mesg//" fluxes%ustar_tidal", G%HI, haloshift=hshift, unscale=US%Z_to_m*US%s_to_T)
13201322
if (associated(fluxes%lrunoff)) &
@@ -1438,7 +1440,7 @@ subroutine forcing_SinglePointPrint(fluxes, G, i, j, mesg)
14381440
call locMsg(fluxes%seaice_melt_heat,'seaice_melt_heat')
14391441
call locMsg(fluxes%p_surf,'p_surf')
14401442
call locMsg(fluxes%salt_flux,'salt_flux')
1441-
call locMsg(fluxes%TKE_tidal,'TKE_tidal')
1443+
call locMsg(fluxes%BBL_tidal_dis,'BBL_tidal_dis')
14421444
call locMsg(fluxes%ustar_tidal,'ustar_tidal')
14431445
call locMsg(fluxes%lrunoff,'lrunoff')
14441446
call locMsg(fluxes%frunoff,'frunoff')
@@ -1546,7 +1548,7 @@ subroutine register_forcing_type_diags(Time, diag, US, use_temperature, handles,
15461548
cmor_standard_name='sea_water_pressure_at_sea_water_surface')
15471549

15481550
handles%id_TKE_tidal = register_diag_field('ocean_model', 'TKE_tidal', diag%axesT1, Time, &
1549-
'Tidal source of BBL mixing', 'W m-2', conversion=US%RZ3_T3_to_W_m2)
1551+
'Tidal source of BBL mixing', 'W m-2', conversion=US%L_to_Z**2*US%RZ3_T3_to_W_m2)
15501552

15511553
if (.not. use_temperature) then
15521554
handles%id_buoy = register_diag_field('ocean_model', 'buoy', diag%axesT1, Time, &
@@ -3160,8 +3162,8 @@ subroutine forcing_diagnostics(fluxes_in, sfc_state, G_in, US, time_end, diag, h
31603162
if ((handles%id_psurf > 0) .and. associated(fluxes%p_surf)) &
31613163
call post_data(handles%id_psurf, fluxes%p_surf, diag)
31623164

3163-
if ((handles%id_TKE_tidal > 0) .and. associated(fluxes%TKE_tidal)) &
3164-
call post_data(handles%id_TKE_tidal, fluxes%TKE_tidal, diag)
3165+
if ((handles%id_TKE_tidal > 0) .and. associated(fluxes%BBL_tidal_dis)) &
3166+
call post_data(handles%id_TKE_tidal, fluxes%BBL_tidal_dis, diag)
31653167

31663168
if ((handles%id_buoy > 0) .and. associated(fluxes%buoy)) &
31673169
call post_data(handles%id_buoy, fluxes%buoy, diag)
@@ -3348,8 +3350,8 @@ subroutine allocate_forcing_by_ref(fluxes_ref, G, fluxes, turns)
33483350
call myAlloc(fluxes%buoy, G%isd, G%ied, G%jsd, G%jed, &
33493351
associated(fluxes_ref%buoy))
33503352

3351-
call myAlloc(fluxes%TKE_tidal, G%isd, G%ied, G%jsd, G%jed, &
3352-
associated(fluxes_ref%TKE_tidal))
3353+
call myAlloc(fluxes%BBL_tidal_dis, G%isd, G%ied, G%jsd, G%jed, &
3354+
associated(fluxes_ref%BBL_tidal_dis))
33533355
call myAlloc(fluxes%ustar_tidal, G%isd, G%ied, G%jsd, G%jed, &
33543356
associated(fluxes_ref%ustar_tidal))
33553357

@@ -3566,7 +3568,7 @@ subroutine deallocate_forcing_type(fluxes)
35663568
if (associated(fluxes%salt_flux)) deallocate(fluxes%salt_flux)
35673569
if (associated(fluxes%p_surf_full)) deallocate(fluxes%p_surf_full)
35683570
if (associated(fluxes%p_surf)) deallocate(fluxes%p_surf)
3569-
if (associated(fluxes%TKE_tidal)) deallocate(fluxes%TKE_tidal)
3571+
if (associated(fluxes%BBL_tidal_dis)) deallocate(fluxes%BBL_tidal_dis)
35703572
if (associated(fluxes%ustar_tidal)) deallocate(fluxes%ustar_tidal)
35713573
if (associated(fluxes%ustar_shelf)) deallocate(fluxes%ustar_shelf)
35723574
if (associated(fluxes%iceshelf_melt)) deallocate(fluxes%iceshelf_melt)
@@ -3713,8 +3715,8 @@ subroutine rotate_forcing(fluxes_in, fluxes, turns)
37133715
if (associated(fluxes_in%buoy)) &
37143716
call rotate_array(fluxes_in%buoy, turns, fluxes%buoy)
37153717

3716-
if (associated(fluxes_in%TKE_tidal)) &
3717-
call rotate_array(fluxes_in%TKE_tidal, turns, fluxes%TKE_tidal)
3718+
if (associated(fluxes_in%BBL_tidal_dis)) &
3719+
call rotate_array(fluxes_in%BBL_tidal_dis, turns, fluxes%BBL_tidal_dis)
37183720
if (associated(fluxes_in%ustar_tidal)) &
37193721
call rotate_array(fluxes_in%ustar_tidal, turns, fluxes%ustar_tidal)
37203722

@@ -3985,8 +3987,8 @@ subroutine homogenize_forcing(fluxes, G, GV, US)
39853987
if (associated(fluxes%buoy)) &
39863988
call homogenize_field_t(fluxes%buoy, G, tmp_scale=US%L_to_m**2*US%s_to_T**3)
39873989

3988-
if (associated(fluxes%TKE_tidal)) &
3989-
call homogenize_field_t(fluxes%TKE_tidal, G, tmp_scale=US%RZ3_T3_to_W_m2)
3990+
if (associated(fluxes%BBL_tidal_dis)) &
3991+
call homogenize_field_t(fluxes%BBL_tidal_dis, G, tmp_scale=US%L_to_Z**2*US%RZ3_T3_to_W_m2)
39903992

39913993
if (associated(fluxes%ustar_tidal)) &
39923994
call homogenize_field_t(fluxes%ustar_tidal, G, tmp_scale=US%Z_to_m*US%s_to_T)

src/parameterizations/vertical/MOM_set_diffusivity.F90

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1416,8 +1416,8 @@ subroutine add_drag_diffusivity(h, u, v, tv, fluxes, visc, j, TKE_to_Kd, maxTKE,
14161416
endif
14171417
TKE(i) = ((CS%BBL_effic * cdrag_sqrt) * exp(-I2decay(i)*h(i,j,nz)) ) * visc%BBL_meanKE_loss(i,j)
14181418

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

14231423
! Distribute the work over a BBL of depth 20^2 ustar^2 / g' following
@@ -1647,9 +1647,9 @@ subroutine add_LOTW_BBL_diffusivity(h, u, v, tv, fluxes, visc, j, N2_int, Rho_bo
16471647
!### I am still unsure about sqrt(cdrag) in this expressions - AJA
16481648
BBL_meanKE_dis = cdrag_sqrt * visc%BBL_meanKE_loss(i,j)
16491649
! Add in tidal dissipation energy at the bottom [H Z2 T-3 ~> m3 s-3 or W m-2].
1650-
! Note that TKE_tidal is in [R Z3 T-3 ~> W m-2].
1651-
if (associated(fluxes%TKE_tidal)) &
1652-
BBL_meanKE_dis = BBL_meanKE_dis + US%Z_to_L**2*fluxes%TKE_tidal(i,j) * GV%RZ_to_H
1650+
! Note that BBL_tidal_dis is in [R Z L2 T-3 ~> W m-2].
1651+
if (associated(fluxes%BBL_tidal_dis)) &
1652+
BBL_meanKE_dis = BBL_meanKE_dis + fluxes%BBL_tidal_dis(i,j) * GV%RZ_to_H
16531653
TKE_column = CS%BBL_effic * BBL_meanKE_dis ! Only use a fraction of the mechanical dissipation for mixing.
16541654

16551655
TKE_remaining = TKE_column

0 commit comments

Comments
 (0)