From bb785a8e042532a1eb16c2a86026676133f912c9 Mon Sep 17 00:00:00 2001 From: Gustavo Marques Date: Mon, 14 Oct 2019 16:32:46 -0600 Subject: [PATCH 1/4] Adds option to scale KHTH with depth This commit adds the option to scale KHTH with depth by setting DEPTH_SCALED_KHTH = True. The scalling is applied as follows: KHTH = MIN(1,H/H_0)**N * KHTH, where H_0 is defined by DEPTH_SCALED_KHTH_H0, and N by DEPTH_SCALED_KHTH_EXP. --- src/core/MOM.F90 | 9 ++- .../lateral/MOM_lateral_mixing_coeffs.F90 | 72 ++++++++++++++++++- .../lateral/MOM_thickness_diffuse.F90 | 37 +++++++--- 3 files changed, 103 insertions(+), 15 deletions(-) diff --git a/src/core/MOM.F90 b/src/core/MOM.F90 index 23c11cc05b..6d5df84ea7 100644 --- a/src/core/MOM.F90 +++ b/src/core/MOM.F90 @@ -77,7 +77,7 @@ module MOM use MOM_hor_index, only : hor_index_type, hor_index_init use MOM_interface_heights, only : find_eta use MOM_lateral_mixing_coeffs, only : calc_slope_functions, VarMix_init -use MOM_lateral_mixing_coeffs, only : calc_resoln_function, VarMix_CS +use MOM_lateral_mixing_coeffs, only : calc_resoln_function, calc_depth_function, VarMix_CS use MOM_MEKE, only : MEKE_init, MEKE_alloc_register_restart, step_forward_MEKE, MEKE_CS use MOM_MEKE_types, only : MEKE_type use MOM_mixed_layer_restrat, only : mixedlayer_restrat, mixedlayer_restrat_init, mixedlayer_restrat_CS @@ -565,6 +565,7 @@ subroutine step_MOM(forces, fluxes, sfc_state, Time_start, time_interval, CS, & call enable_averaging(cycle_time, Time_start + real_to_time(cycle_time), & CS%diag) call calc_resoln_function(h, CS%tv, G, GV, US, CS%VarMix) + call calc_depth_function(h, CS%tv, G, GV, US, CS%VarMix) call disable_averaging(CS%diag) endif endif @@ -1403,6 +1404,7 @@ subroutine step_offline(forces, fluxes, sfc_state, Time_start, time_interval, CS if (associated(CS%VarMix)) then call pass_var(CS%h, G%Domain) call calc_resoln_function(CS%h, CS%tv, G, GV, US, CS%VarMix) + call calc_depth_function(CS%h, CS%tv, G, GV, US, CS%VarMix) call calc_slope_functions(CS%h, CS%tv, REAL(dt_offline), G, GV, US, CS%VarMix) endif call tracer_hordiff(CS%h, REAL(dt_offline), CS%MEKE, CS%VarMix, G, GV, US, & @@ -1428,6 +1430,7 @@ subroutine step_offline(forces, fluxes, sfc_state, Time_start, time_interval, CS if (associated(CS%VarMix)) then call pass_var(CS%h, G%Domain) call calc_resoln_function(CS%h, CS%tv, G, GV, US, CS%VarMix) + call calc_depth_function(CS%h, CS%tv, G, GV, US, CS%VarMix) call calc_slope_functions(CS%h, CS%tv, REAL(dt_offline), G, GV, US, CS%VarMix) endif call tracer_hordiff(CS%h, REAL(dt_offline), CS%MEKE, CS%VarMix, G, GV, US, & @@ -1674,8 +1677,8 @@ subroutine initialize_MOM(Time, Time_init, param_file, dirs, CS, restart_CSp, & "faster by eliminating subroutine calls.", default=.false.) call get_param(param_file, "MOM", "DO_DYNAMICS", CS%do_dynamics, & "If False, skips the dynamics calls that update u & v, as well as "//& - "the gravity wave adjustment to h. This is a fragile feature and "//& - "thus undocumented.", default=.true., do_not_log=.true. ) + "the gravity wave adjustment to h. This may be a fragile feature, "//& + "but can be useful during development", default=.true.) call get_param(param_file, "MOM", "ADVECT_TS", advect_TS, & "If True, advect temperature and salinity horizontally "//& "If False, T/S are registered for advection. "//& diff --git a/src/parameterizations/lateral/MOM_lateral_mixing_coeffs.F90 b/src/parameterizations/lateral/MOM_lateral_mixing_coeffs.F90 index 1582b23615..9b579b108f 100644 --- a/src/parameterizations/lateral/MOM_lateral_mixing_coeffs.F90 +++ b/src/parameterizations/lateral/MOM_lateral_mixing_coeffs.F90 @@ -29,6 +29,8 @@ module MOM_lateral_mixing_coeffs !! when the deformation radius is well resolved. logical :: Resoln_scaled_KhTh !< If true, scale away the thickness diffusivity !! when the deformation radius is well resolved. + logical :: Depth_scaled_KhTh !< If true, the interface depth diffusivity is scaled away + !! when the depth is shallower than a reference depth. logical :: Resoln_scaled_KhTr !< If true, scale away the tracer diffusivity !! when the deformation radius is well resolved. logical :: interpolate_Res_fn !< If true, interpolate the resolution function @@ -48,6 +50,8 @@ module MOM_lateral_mixing_coeffs !! This parameter is set depending on other parameters. logical :: calculate_res_fns !< If true, calculate all the resolution factors. !! This parameter is set depending on other parameters. + logical :: calculate_depth_fns !< If true, calculate all the depth factors. + !! This parameter is set depending on other parameters. logical :: calculate_Eady_growth_rate !< If true, calculate all the Eady growth rate. !! This parameter is set depending on other parameters. real, dimension(:,:), pointer :: & @@ -64,6 +68,10 @@ module MOM_lateral_mixing_coeffs !! deformation radius to the grid spacing at u points [nondim]. Res_fn_v => NULL(), & !< Non-dimensional function of the ratio the first baroclinic !! deformation radius to the grid spacing at v points [nondim]. + Depth_fn_u => NULL(), & !< Non-dimensional function of the ratio of the depth to + !! a reference depth (maximum 1) at u points [nondim] + Depth_fn_v => NULL(), & !< Non-dimensional function of the ratio of the depth to + !! a reference depth (maximum 1) at v points [nondim] beta_dx2_h => NULL(), & !< The magnitude of the gradient of the Coriolis parameter !! times the grid spacing squared at h points [L T-1 ~> m s-1]. beta_dx2_q => NULL(), & !< The magnitude of the gradient of the Coriolis parameter @@ -111,6 +119,8 @@ module MOM_lateral_mixing_coeffs real :: Res_coef_visc !< A non-dimensional number that determines the function !! of resolution, used for lateral viscosity, as: !! F = 1 / (1 + (Res_coef_visc*Ld/dx)^Res_fn_power) + real :: depth_scaled_khth_h0 !< The depth above which KHTH is linearly scaled away [Z ~> m] + real :: depth_scaled_khth_exp !< The exponent used in the depth dependent scaling function for KHTH [nondim] real :: kappa_smooth !< A diffusivity for smoothing T/S in vanished layers [Z2 T-1 ~> m2 s-1] integer :: Res_fn_power_khth !< The power of dx/Ld in the KhTh resolution function. Any !! positive integer power may be used, but even powers @@ -140,10 +150,48 @@ module MOM_lateral_mixing_coeffs end type VarMix_CS public VarMix_init, calc_slope_functions, calc_resoln_function -public calc_QG_Leith_viscosity +public calc_QG_Leith_viscosity, calc_depth_function contains +!> Calculates and stires the non-dimensional depth functions. +subroutine calc_depth_function(h, tv, G, GV, US, CS) + type(ocean_grid_type), intent(inout) :: G !< Ocean grid structure + real, dimension(SZI_(G),SZJ_(G),SZK_(G)), intent(in) :: h !< Layer thickness [H ~> m or kg m-2] + type(thermo_var_ptrs), intent(in) :: tv !< Thermodynamic variables + type(verticalGrid_type), intent(in) :: GV !< Vertical grid structure + type(unit_scale_type), intent(in) :: US !< A dimensional unit scaling type + type(VarMix_CS), pointer :: CS !< Variable mixing coefficients + + ! Local variables + integer :: is, ie, js, je, Isq, Ieq, Jsq, Jeq, nz + integer :: i, j, k + real :: H0 ! local variable for reference depth + real :: expo ! exponent used in the depth dependent scaling + is = G%isc ; ie = G%iec ; js = G%jsc ; je = G%jec ; nz = G%ke + Isq = G%IscB ; Ieq = G%IecB ; Jsq = G%JscB ; Jeq = G%JecB + + if (.not. associated(CS)) call MOM_error(FATAL, "calc_depth_function:"// & + "Module must be initialized before it is used.") + if (.not. CS%calculate_depth_fns) return + if (.not. associated(CS%Depth_fn_u)) call MOM_error(FATAL, & + "calc_depth_function: %Depth_fn_u is not associated with Depth_scaled_KhTh.") + if (.not. associated(CS%Depth_fn_v)) call MOM_error(FATAL, & + "calc_depth_function: %Depth_fn_v is not associated with Depth_scaled_KhTh.") + + H0 = CS%depth_scaled_khth_h0 + expo = CS%depth_scaled_khth_exp +!$OMP do + do j=js,je ; do I=is-1,Ieq + CS%Depth_fn_u(I,j) = (MIN(1.0, 0.5*(G%bathyT(i,j) + G%bathyT(i+1,j))/H0))**expo + enddo ; enddo +!$OMP do + do J=js-1,Jeq ; do i=is,ie + CS%Depth_fn_v(i,J) = (MIN(1.0, 0.5*(G%bathyT(i,j) + G%bathyT(i,j+1))/H0))**expo + enddo ; enddo + +end subroutine calc_depth_function + !> Calculates and stores the non-dimensional resolution functions subroutine calc_resoln_function(h, tv, G, GV, US, CS) type(ocean_grid_type), intent(inout) :: G !< Ocean grid structure @@ -913,7 +961,7 @@ subroutine VarMix_init(Time, G, GV, US, param_file, diag, CS) CS%calculate_Rd_dx = .false. CS%calculate_res_fns = .false. CS%calculate_Eady_growth_rate = .false. - + CS%calculate_depth_fns = .false. ! Read all relevant parameters and write them to the model log. call log_version(param_file, mdl, version, "") call get_param(param_file, mdl, "USE_VARIABLE_MIXING", CS%use_variable_mixing,& @@ -929,6 +977,13 @@ subroutine VarMix_init(Time, G, GV, US, param_file, diag, CS) "If true, the Laplacian lateral viscosity is scaled away "//& "when the first baroclinic deformation radius is well "//& "resolved.", default=.false.) + call get_param(param_file, mdl, "DEPTH_SCALED_KHTH", CS%Depth_scaled_KhTh, & + "If true, the interface depth diffusivity is scaled away "//& + "when the depth is shallower than a reference depth: "//& + "KHTH = MIN(1,H/H0)**N * KHTH, where H0 is a reference"//& + "depth, controlled via DEPTH_SCALED_KHTH_H0, and the"//& + "exponent (N) is controlled via DEPTH_SCALED_KHTH_EXP.",& + default=.false.) call get_param(param_file, mdl, "RESOLN_SCALED_KHTH", CS%Resoln_scaled_KhTh, & "If true, the interface depth diffusivity is scaled away "//& "when the first baroclinic deformation radius is well "//& @@ -978,6 +1033,7 @@ subroutine VarMix_init(Time, G, GV, US, param_file, diag, CS) call get_param(param_file, mdl, "DEBUG", CS%debug, default=.false., do_not_log=.true.) + if (CS%Resoln_use_ebt .or. CS%khth_use_ebt_struct) then in_use = .true. call get_param(param_file, mdl, "RESOLN_N2_FILTER_DEPTH", N2_filter_depth, & @@ -1160,6 +1216,18 @@ subroutine VarMix_init(Time, G, GV, US, param_file, diag, CS) endif + if (CS%Depth_scaled_KhTh) then + CS%calculate_depth_fns = .true. + allocate(CS%Depth_fn_u(IsdB:IedB,jsd:jed)) ; CS%Depth_fn_u(:,:) = 0.0 + allocate(CS%Depth_fn_v(isd:ied,JsdB:JedB)) ; CS%Depth_fn_v(:,:) = 0.0 + call get_param(param_file, mdl, "DEPTH_SCALED_KHTH_H0", CS%depth_scaled_khth_h0, & + "The depth above which KHTH is scaled away.",& + units="m", default=1000.) + call get_param(param_file, mdl, "DEPTH_SCALED_KHTH_EXP", CS%depth_scaled_khth_exp, & + "The exponent used in the depth dependent scaling function for KHTH.",& + units="nondim", default=3.0) + endif + ! Resolution %Rd_dx_h CS%id_Rd_dx = register_diag_field('ocean_model', 'Rd_dx', diag%axesT1, Time, & 'Ratio between deformation radius and grid spacing', 'm m-1') diff --git a/src/parameterizations/lateral/MOM_thickness_diffuse.F90 b/src/parameterizations/lateral/MOM_thickness_diffuse.F90 index d639a986bf..eb31a45cc3 100644 --- a/src/parameterizations/lateral/MOM_thickness_diffuse.F90 +++ b/src/parameterizations/lateral/MOM_thickness_diffuse.F90 @@ -137,12 +137,13 @@ subroutine thickness_diffuse(h, uhtr, vhtr, tv, dt, G, GV, US, MEKE, VarMix, CDp real, dimension(SZI_(G), SZJB_(G)) :: & KH_v_CFL ! The maximum stable interface height diffusivity at v grid points [L2 T-1 ~> m2 s-1] real :: Khth_Loc_u(SZIB_(G), SZJ_(G)) + real :: Khth_Loc_v(SZI_(G), SZJB_(G)) real :: Khth_Loc(SZIB_(G), SZJB_(G)) ! locally calculated thickness diffusivity [L2 T-1 ~> m2 s-1] real :: h_neglect ! A thickness that is so small it is usually lost ! in roundoff and can be neglected [H ~> m or kg m-2]. real, dimension(:,:), pointer :: cg1 => null() !< Wave speed [L T-1 ~> m s-1] real :: dt_in_T ! Time increment [T ~> s] - logical :: use_VarMix, Resoln_scaled, use_stored_slopes, khth_use_ebt_struct, use_Visbeck + logical :: use_VarMix, Resoln_scaled, Depth_scaled, use_stored_slopes, khth_use_ebt_struct, use_Visbeck logical :: use_QG_Leith integer :: i, j, k, is, ie, js, je, nz real :: hu(SZI_(G), SZJ_(G)) ! u-thickness [H ~> m or kg m-2] @@ -168,10 +169,12 @@ subroutine thickness_diffuse(h, uhtr, vhtr, tv, dt, G, GV, US, MEKE, VarMix, CDp use_VarMix = .false. ; Resoln_scaled = .false. ; use_stored_slopes = .false. khth_use_ebt_struct = .false. ; use_Visbeck = .false. ; use_QG_Leith = .false. + Depth_scaled = .false. if (associated(VarMix)) then use_VarMix = VarMix%use_variable_mixing .and. (CS%KHTH_Slope_Cff > 0.) Resoln_scaled = VarMix%Resoln_scaled_KhTh + Depth_scaled = VarMix%Depth_scaled_KhTh use_stored_slopes = VarMix%use_stored_slopes khth_use_ebt_struct = VarMix%khth_use_ebt_struct use_Visbeck = VarMix%use_Visbeck @@ -238,6 +241,13 @@ subroutine thickness_diffuse(h, uhtr, vhtr, tv, dt, G, GV, US, MEKE, VarMix, CDp enddo ; enddo endif + if (Depth_scaled) then +!$OMP do + do j=js,je; do I=is-1,ie + Khth_loc_u(I,j) = Khth_loc_u(I,j) * VarMix%Depth_fn_u(I,j) + enddo ; enddo + endif + if (CS%Khth_Max > 0) then !$OMP do do j=js,je; do I=is-1,ie @@ -284,55 +294,62 @@ subroutine thickness_diffuse(h, uhtr, vhtr, tv, dt, G, GV, US, MEKE, VarMix, CDp !$OMP do do J=js-1,je ; do i=is,ie - Khth_loc(i,j) = CS%Khth + Khth_loc_v(i,J) = CS%Khth enddo ; enddo if (use_VarMix) then !$OMP do if (use_Visbeck) then do J=js-1,je ; do i=is,ie - Khth_loc(i,j) = Khth_loc(i,j) + CS%KHTH_Slope_Cff*VarMix%L2v(i,J)*VarMix%SN_v(i,J) + Khth_loc_v(i,J) = Khth_loc_v(i,J) + CS%KHTH_Slope_Cff*VarMix%L2v(i,J)*VarMix%SN_v(i,J) enddo ; enddo endif endif if (associated(MEKE)) then ; if (associated(MEKE%Kh)) then !$OMP do if (CS%MEKE_GEOMETRIC) then - do j=js-1,je ; do I=is,ie - Khth_loc(I,j) = Khth_loc(I,j) + G%mask2dCv(i,J) * CS%MEKE_GEOMETRIC_alpha * & + do J=js-1,je ; do i=is,ie + Khth_loc_v(i,J) = Khth_loc_v(i,J) + G%mask2dCv(i,J) * CS%MEKE_GEOMETRIC_alpha * & 0.5*(MEKE%MEKE(i,j)+MEKE%MEKE(i,j+1)) / & (VarMix%SN_v(i,J) + CS%MEKE_GEOMETRIC_epsilon) enddo ; enddo else do J=js-1,je ; do i=is,ie - Khth_loc(i,j) = Khth_loc(i,j) + MEKE%KhTh_fac*sqrt(MEKE%Kh(i,j)*MEKE%Kh(i,j+1)) + Khth_loc_v(i,J) = Khth_loc_v(i,J) + MEKE%KhTh_fac*sqrt(MEKE%Kh(i,j)*MEKE%Kh(i,j+1)) enddo ; enddo endif endif ; endif if (Resoln_scaled) then +!$OMP do + do J=js-1,je; do i=is,ie + Khth_loc_v(i,J) = Khth_loc_v(i,J) * VarMix%Res_fn_v(i,J) + enddo ; enddo + endif + + if (Depth_scaled) then !$OMP do do J=js-1,je ; do i=is,ie - Khth_loc(i,j) = Khth_loc(i,j) * VarMix%Res_fn_v(i,J) + Khth_loc_v(i,J) = Khth_loc_v(i,J) * VarMix%Depth_fn_v(i,J) enddo ; enddo endif if (CS%Khth_Max > 0) then !$OMP do do J=js-1,je ; do i=is,ie - Khth_loc(i,j) = max(CS%Khth_Min, min(Khth_loc(i,j), CS%Khth_Max)) + Khth_loc_v(i,J) = max(CS%Khth_Min, min(Khth_loc_v(i,J), CS%Khth_Max)) enddo ; enddo else !$OMP do do J=js-1,je ; do i=is,ie - Khth_loc(i,j) = max(CS%Khth_Min, Khth_loc(i,j)) + Khth_loc_v(i,J) = max(CS%Khth_Min, Khth_loc_v(i,J)) enddo ; enddo endif if (CS%max_Khth_CFL > 0.0) then !$OMP do do J=js-1,je ; do i=is,ie - KH_v(i,J,1) = min(KH_v_CFL(i,J), Khth_loc(i,j)) + KH_v(i,J,1) = min(KH_v_CFL(i,J), Khth_loc_v(i,J)) enddo ; enddo endif From 67016eba918ca380c4177300184c3a534bcc73a7 Mon Sep 17 00:00:00 2001 From: Gustavo Marques Date: Wed, 16 Oct 2019 11:04:36 -0600 Subject: [PATCH 2/4] Reverts description in DO_DYNAMICS to older version as this was changed by mistake. --- src/core/MOM.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/MOM.F90 b/src/core/MOM.F90 index 6d5df84ea7..2e2a2177c0 100644 --- a/src/core/MOM.F90 +++ b/src/core/MOM.F90 @@ -1677,8 +1677,8 @@ subroutine initialize_MOM(Time, Time_init, param_file, dirs, CS, restart_CSp, & "faster by eliminating subroutine calls.", default=.false.) call get_param(param_file, "MOM", "DO_DYNAMICS", CS%do_dynamics, & "If False, skips the dynamics calls that update u & v, as well as "//& - "the gravity wave adjustment to h. This may be a fragile feature, "//& - "but can be useful during development", default=.true.) + "the gravity wave adjustment to h. This is a fragile feature and "//& + "thus undocumented.", default=.true., do_not_log=.true. ) call get_param(param_file, "MOM", "ADVECT_TS", advect_TS, & "If True, advect temperature and salinity horizontally "//& "If False, T/S are registered for advection. "//& From 223037c76f00e53ff0cf25b76ac6c3f38b798e33 Mon Sep 17 00:00:00 2001 From: Gustavo Marques Date: Wed, 16 Oct 2019 11:58:18 -0600 Subject: [PATCH 3/4] Deletes unneeded variables from calc_depth_function --- src/core/MOM.F90 | 6 +++--- .../lateral/MOM_lateral_mixing_coeffs.F90 | 14 +++++--------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/core/MOM.F90 b/src/core/MOM.F90 index 2e2a2177c0..06634753e6 100644 --- a/src/core/MOM.F90 +++ b/src/core/MOM.F90 @@ -565,7 +565,7 @@ subroutine step_MOM(forces, fluxes, sfc_state, Time_start, time_interval, CS, & call enable_averaging(cycle_time, Time_start + real_to_time(cycle_time), & CS%diag) call calc_resoln_function(h, CS%tv, G, GV, US, CS%VarMix) - call calc_depth_function(h, CS%tv, G, GV, US, CS%VarMix) + call calc_depth_function(G, CS%VarMix) call disable_averaging(CS%diag) endif endif @@ -1404,7 +1404,7 @@ subroutine step_offline(forces, fluxes, sfc_state, Time_start, time_interval, CS if (associated(CS%VarMix)) then call pass_var(CS%h, G%Domain) call calc_resoln_function(CS%h, CS%tv, G, GV, US, CS%VarMix) - call calc_depth_function(CS%h, CS%tv, G, GV, US, CS%VarMix) + call calc_depth_function(G, CS%VarMix) call calc_slope_functions(CS%h, CS%tv, REAL(dt_offline), G, GV, US, CS%VarMix) endif call tracer_hordiff(CS%h, REAL(dt_offline), CS%MEKE, CS%VarMix, G, GV, US, & @@ -1430,7 +1430,7 @@ subroutine step_offline(forces, fluxes, sfc_state, Time_start, time_interval, CS if (associated(CS%VarMix)) then call pass_var(CS%h, G%Domain) call calc_resoln_function(CS%h, CS%tv, G, GV, US, CS%VarMix) - call calc_depth_function(CS%h, CS%tv, G, GV, US, CS%VarMix) + call calc_depth_function(G, CS%VarMix) call calc_slope_functions(CS%h, CS%tv, REAL(dt_offline), G, GV, US, CS%VarMix) endif call tracer_hordiff(CS%h, REAL(dt_offline), CS%MEKE, CS%VarMix, G, GV, US, & diff --git a/src/parameterizations/lateral/MOM_lateral_mixing_coeffs.F90 b/src/parameterizations/lateral/MOM_lateral_mixing_coeffs.F90 index 9b579b108f..16d4ca6540 100644 --- a/src/parameterizations/lateral/MOM_lateral_mixing_coeffs.F90 +++ b/src/parameterizations/lateral/MOM_lateral_mixing_coeffs.F90 @@ -155,20 +155,16 @@ module MOM_lateral_mixing_coeffs contains !> Calculates and stires the non-dimensional depth functions. -subroutine calc_depth_function(h, tv, G, GV, US, CS) - type(ocean_grid_type), intent(inout) :: G !< Ocean grid structure - real, dimension(SZI_(G),SZJ_(G),SZK_(G)), intent(in) :: h !< Layer thickness [H ~> m or kg m-2] - type(thermo_var_ptrs), intent(in) :: tv !< Thermodynamic variables - type(verticalGrid_type), intent(in) :: GV !< Vertical grid structure - type(unit_scale_type), intent(in) :: US !< A dimensional unit scaling type +subroutine calc_depth_function(G, CS) + type(ocean_grid_type), intent(in) :: G !< Ocean grid structure type(VarMix_CS), pointer :: CS !< Variable mixing coefficients ! Local variables - integer :: is, ie, js, je, Isq, Ieq, Jsq, Jeq, nz - integer :: i, j, k + integer :: is, ie, js, je, Isq, Ieq, Jsq, Jeq + integer :: i, j real :: H0 ! local variable for reference depth real :: expo ! exponent used in the depth dependent scaling - is = G%isc ; ie = G%iec ; js = G%jsc ; je = G%jec ; nz = G%ke + is = G%isc ; ie = G%iec ; js = G%jsc ; je = G%jec Isq = G%IscB ; Ieq = G%IecB ; Jsq = G%JscB ; Jeq = G%JecB if (.not. associated(CS)) call MOM_error(FATAL, "calc_depth_function:"// & From 1522ad0d7134b2dd0df589cab132f30f6b0cc1e0 Mon Sep 17 00:00:00 2001 From: Gustavo Marques Date: Wed, 16 Oct 2019 14:30:07 -0600 Subject: [PATCH 4/4] Minor changes in the doxygen comments --- .../lateral/MOM_lateral_mixing_coeffs.F90 | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/parameterizations/lateral/MOM_lateral_mixing_coeffs.F90 b/src/parameterizations/lateral/MOM_lateral_mixing_coeffs.F90 index 16d4ca6540..caa84325ce 100644 --- a/src/parameterizations/lateral/MOM_lateral_mixing_coeffs.F90 +++ b/src/parameterizations/lateral/MOM_lateral_mixing_coeffs.F90 @@ -29,8 +29,8 @@ module MOM_lateral_mixing_coeffs !! when the deformation radius is well resolved. logical :: Resoln_scaled_KhTh !< If true, scale away the thickness diffusivity !! when the deformation radius is well resolved. - logical :: Depth_scaled_KhTh !< If true, the interface depth diffusivity is scaled away - !! when the depth is shallower than a reference depth. + logical :: Depth_scaled_KhTh !< If true, KHTH is scaled away when the depth is + !! shallower than a reference depth. logical :: Resoln_scaled_KhTr !< If true, scale away the tracer diffusivity !! when the deformation radius is well resolved. logical :: interpolate_Res_fn !< If true, interpolate the resolution function @@ -154,7 +154,7 @@ module MOM_lateral_mixing_coeffs contains -!> Calculates and stires the non-dimensional depth functions. +!> Calculates the non-dimensional depth functions. subroutine calc_depth_function(G, CS) type(ocean_grid_type), intent(in) :: G !< Ocean grid structure type(VarMix_CS), pointer :: CS !< Variable mixing coefficients @@ -974,11 +974,10 @@ subroutine VarMix_init(Time, G, GV, US, param_file, diag, CS) "when the first baroclinic deformation radius is well "//& "resolved.", default=.false.) call get_param(param_file, mdl, "DEPTH_SCALED_KHTH", CS%Depth_scaled_KhTh, & - "If true, the interface depth diffusivity is scaled away "//& - "when the depth is shallower than a reference depth: "//& - "KHTH = MIN(1,H/H0)**N * KHTH, where H0 is a reference"//& - "depth, controlled via DEPTH_SCALED_KHTH_H0, and the"//& - "exponent (N) is controlled via DEPTH_SCALED_KHTH_EXP.",& + "If true, KHTH is scaled away when the depth is shallower"//& + "than a reference depth: KHTH = MIN(1,H/H0)**N * KHTH, "//& + "where H0 is a reference depth, controlled via DEPTH_SCALED_KHTH_H0, "//& + "and the exponent (N) is controlled via DEPTH_SCALED_KHTH_EXP.",& default=.false.) call get_param(param_file, mdl, "RESOLN_SCALED_KHTH", CS%Resoln_scaled_KhTh, & "If true, the interface depth diffusivity is scaled away "//&