Skip to content

Commit e856749

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 fcdf8db commit e856749

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, &
@@ -3174,8 +3176,8 @@ subroutine forcing_diagnostics(fluxes_in, sfc_state, G_in, US, time_end, diag, h
31743176
if ((handles%id_psurf > 0) .and. associated(fluxes%p_surf)) &
31753177
call post_data(handles%id_psurf, fluxes%p_surf, diag)
31763178

3177-
if ((handles%id_TKE_tidal > 0) .and. associated(fluxes%TKE_tidal)) &
3178-
call post_data(handles%id_TKE_tidal, fluxes%TKE_tidal, diag)
3179+
if ((handles%id_TKE_tidal > 0) .and. associated(fluxes%BBL_tidal_dis)) &
3180+
call post_data(handles%id_TKE_tidal, fluxes%BBL_tidal_dis, diag)
31793181

31803182
if ((handles%id_buoy > 0) .and. associated(fluxes%buoy)) &
31813183
call post_data(handles%id_buoy, fluxes%buoy, diag)
@@ -3362,8 +3364,8 @@ subroutine allocate_forcing_by_ref(fluxes_ref, G, fluxes, turns)
33623364
call myAlloc(fluxes%buoy, G%isd, G%ied, G%jsd, G%jed, &
33633365
associated(fluxes_ref%buoy))
33643366

3365-
call myAlloc(fluxes%TKE_tidal, G%isd, G%ied, G%jsd, G%jed, &
3366-
associated(fluxes_ref%TKE_tidal))
3367+
call myAlloc(fluxes%BBL_tidal_dis, G%isd, G%ied, G%jsd, G%jed, &
3368+
associated(fluxes_ref%BBL_tidal_dis))
33673369
call myAlloc(fluxes%ustar_tidal, G%isd, G%ied, G%jsd, G%jed, &
33683370
associated(fluxes_ref%ustar_tidal))
33693371

@@ -3580,7 +3582,7 @@ subroutine deallocate_forcing_type(fluxes)
35803582
if (associated(fluxes%salt_flux)) deallocate(fluxes%salt_flux)
35813583
if (associated(fluxes%p_surf_full)) deallocate(fluxes%p_surf_full)
35823584
if (associated(fluxes%p_surf)) deallocate(fluxes%p_surf)
3583-
if (associated(fluxes%TKE_tidal)) deallocate(fluxes%TKE_tidal)
3585+
if (associated(fluxes%BBL_tidal_dis)) deallocate(fluxes%BBL_tidal_dis)
35843586
if (associated(fluxes%ustar_tidal)) deallocate(fluxes%ustar_tidal)
35853587
if (associated(fluxes%ustar_shelf)) deallocate(fluxes%ustar_shelf)
35863588
if (associated(fluxes%iceshelf_melt)) deallocate(fluxes%iceshelf_melt)
@@ -3727,8 +3729,8 @@ subroutine rotate_forcing(fluxes_in, fluxes, turns)
37273729
if (associated(fluxes_in%buoy)) &
37283730
call rotate_array(fluxes_in%buoy, turns, fluxes%buoy)
37293731

3730-
if (associated(fluxes_in%TKE_tidal)) &
3731-
call rotate_array(fluxes_in%TKE_tidal, turns, fluxes%TKE_tidal)
3732+
if (associated(fluxes_in%BBL_tidal_dis)) &
3733+
call rotate_array(fluxes_in%BBL_tidal_dis, turns, fluxes%BBL_tidal_dis)
37323734
if (associated(fluxes_in%ustar_tidal)) &
37333735
call rotate_array(fluxes_in%ustar_tidal, turns, fluxes%ustar_tidal)
37343736

@@ -3999,8 +4001,8 @@ subroutine homogenize_forcing(fluxes, G, GV, US)
39994001
if (associated(fluxes%buoy)) &
40004002
call homogenize_field_t(fluxes%buoy, G, tmp_scale=US%L_to_m**2*US%s_to_T**3)
40014003

4002-
if (associated(fluxes%TKE_tidal)) &
4003-
call homogenize_field_t(fluxes%TKE_tidal, G, tmp_scale=US%RZ3_T3_to_W_m2)
4004+
if (associated(fluxes%BBL_tidal_dis)) &
4005+
call homogenize_field_t(fluxes%BBL_tidal_dis, G, tmp_scale=US%L_to_Z**2*US%RZ3_T3_to_W_m2)
40044006

40054007
if (associated(fluxes%ustar_tidal)) &
40064008
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)