Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 45 additions & 7 deletions src/parameterizations/lateral/MOM_thickness_diffuse.F90
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ module MOM_thickness_diffuse
use MOM_EOS, only : calculate_density_second_derivs
use MOM_file_parser, only : get_param, log_version, param_file_type
use MOM_grid, only : ocean_grid_type
use MOM_io, only : MOM_read_data
use MOM_interface_heights, only : find_eta
use MOM_isopycnal_slopes, only : vert_fill_TS
use MOM_lateral_mixing_coeffs, only : VarMix_CS
Expand Down Expand Up @@ -81,6 +82,8 @@ module MOM_thickness_diffuse
real :: Stanley_det_coeff !< The coefficient correlating SGS temperature variance with the mean
!! temperature gradient in the deterministic part of the Stanley parameterization.
!! Negative values disable the scheme." [nondim]
logical :: read_khth ! If true, read a file containing the spatially varying
! horizontal thickness diffusivity

type(diag_ctrl), pointer :: diag => NULL() !< structure used to regulate timing of diagnostics
real, allocatable :: GMwork(:,:) !< Work by thickness diffusivity [R Z L2 T-3 ~> W m-2]
Expand All @@ -89,6 +92,7 @@ module MOM_thickness_diffuse

real, allocatable :: KH_u_GME(:,:,:) !< interface height diffusivities in u-columns [L2 T-1 ~> m2 s-1]
real, allocatable :: KH_v_GME(:,:,:) !< interface height diffusivities in v-columns [L2 T-1 ~> m2 s-1]
real, allocatable, dimension(:,:) :: khth2d !< 2D thickness diffusivity at h-points [L2 T-1 ~> m2 s-1]

!>@{
!! Diagnostic identifier
Expand Down Expand Up @@ -165,7 +169,8 @@ subroutine thickness_diffuse(h, uhtr, vhtr, tv, dt, G, GV, US, MEKE, VarMix, CDp
"Module must be initialized before it is used.")

if ((.not.CS%thickness_diffuse) &
.or. .not. (CS%Khth > 0.0 .or. VarMix%use_variable_mixing)) return
.or. .not. (CS%Khth > 0.0 .or. CS%read_khth &
.or. VarMix%use_variable_mixing)) return

is = G%isc ; ie = G%iec ; js = G%jsc ; je = G%jec ; nz = GV%ke
h_neglect = GV%H_subroundoff
Expand Down Expand Up @@ -213,9 +218,15 @@ subroutine thickness_diffuse(h, uhtr, vhtr, tv, dt, G, GV, US, MEKE, VarMix, CDp
!$OMP int_slope_v,khth_use_ebt_struct, Depth_scaled, &
!$OMP Khth_loc_v)
!$OMP do
do j=js,je ; do I=is-1,ie
Khth_loc_u(I,j) = CS%Khth
enddo ; enddo
if (.not. CS%read_khth) then
do j=js,je ; do I=is-1,ie
Khth_loc_u(I,j) = CS%Khth
enddo ; enddo
else ! read KHTH from file
do j=js,je ; do I=is-1,ie
Khth_loc_u(I,j) = 0.5 * (CS%khth2d(i,j) + CS%khth2d(i+1,j))
enddo ; enddo
endif

if (use_VarMix) then
if (use_Visbeck) then
Expand Down Expand Up @@ -301,9 +312,15 @@ subroutine thickness_diffuse(h, uhtr, vhtr, tv, dt, G, GV, US, MEKE, VarMix, CDp
endif

!$OMP do
do J=js-1,je ; do i=is,ie
Khth_loc_v(i,J) = CS%Khth
enddo ; enddo
if (.not. CS%read_khth) then
do J=js-1,je ; do i=is,ie
Khth_loc_v(i,J) = CS%Khth
enddo ; enddo
else ! read KHTH from file
do J=js-1,je ; do i=is,ie
Khth_loc_v(i,J) = 0.5 * (CS%khth2d(i,j) + CS%khth2d(i,j+1))
enddo ; enddo
endif

if (use_VarMix) then
if (use_Visbeck) then
Expand Down Expand Up @@ -1901,6 +1918,9 @@ subroutine thickness_diffuse_init(Time, G, GV, US, param_file, diag, CDp, CS)
! rotation [nondim].
logical :: default_2018_answers ! The default setting for the various 2018_ANSWERS flags.

! Local variables
character(len=200) :: khth_file

CS%initialized = .true.
CS%diag => diag

Expand All @@ -1912,6 +1932,22 @@ subroutine thickness_diffuse_init(Time, G, GV, US, param_file, diag, CDp, CS)
call get_param(param_file, mdl, "KHTH", CS%Khth, &
"The background horizontal thickness diffusivity.", &
default=0.0, units="m2 s-1", scale=US%m_to_L**2*US%T_to_s)
call get_param(param_file, mdl, "READ_KHTH", CS%read_khth, &
"If true, read a file (given by KHTH_FILE) containing the "//&
"spatially varying horizontal thickness diffusivity.", default=.false.)
if (CS%read_khth) then
if (CS%Khth > 0) then
call MOM_error(FATAL, "thickness_diffuse_init: KHTH > 0 is not "// &
"compatible with READ_KHTH = TRUE. ")
endif
call get_param(param_file, mdl, "KHTH_FILE", khth_file, &
"The file containing the spatially varying horizontal "//&
"thickness diffusivity.", default="INPUT/khth.nc")

allocate(CS%khth2d(G%isd:G%ied, G%jsd:G%jed), source=0.0)
call MOM_read_data(khth_file, 'khth', CS%khth2d(:,:), G%domain, scale=US%m_to_L**2*US%T_to_s)
call pass_var(CS%khth2d, G%domain)
endif
call get_param(param_file, mdl, "KHTH_SLOPE_CFF", CS%KHTH_Slope_Cff, &
"The nondimensional coefficient in the Visbeck formula "//&
"for the interface depth diffusivity", units="nondim", &
Expand Down Expand Up @@ -2130,6 +2166,8 @@ subroutine thickness_diffuse_end(CS, CDp)
deallocate(CS%KH_u_GME)
deallocate(CS%KH_v_GME)
endif

if (allocated(CS%khth2d)) deallocate(CS%khth2d)
end subroutine thickness_diffuse_end

!> \namespace mom_thickness_diffuse
Expand Down