Skip to content

Commit 14939c5

Browse files
authored
Merge pull request #105 from mnlevy1981/add_shear_prandtl
Add shear prandtl number variable
2 parents 65ef5c7 + 5d2b0d7 commit 14939c5

3 files changed

Lines changed: 38 additions & 19 deletions

File tree

reg_tests/shear/input.nl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ max_nlev = 60
88
LMD_nu_zero = 5d-3
99
LMD_Ri_zero = 0.7d0
1010
LMD_exp = 3.0d0
11+
LMD_Prandtl_shear = 2.0d0
1112
/
1213
! Shear mixing parameters from PP81 paper
1314
&PP_nml

src/drivers/cvmix_shear_drv.F90

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ Subroutine cvmix_shear_driver(nlev, max_nlev)
6363

6464
! Namelist variables
6565
! KPP mixing parameters for column
66-
real(cvmix_r8) :: LMD_nu_zero, LMD_Ri_zero, LMD_exp
66+
real(cvmix_r8) :: LMD_nu_zero, LMD_Ri_zero, LMD_exp, LMD_Prandtl_shear
6767

68-
namelist/LMD_nml/LMD_nu_zero, LMD_Ri_zero, LMD_exp
68+
namelist/LMD_nml/LMD_nu_zero, LMD_Ri_zero, LMD_exp, LMD_Prandtl_shear
6969
namelist/PP_nml/PP_nu_zero, PP_alpha, PP_exp
7070

7171
print*, "Active levels: ", nlev
@@ -74,7 +74,8 @@ Subroutine cvmix_shear_driver(nlev, max_nlev)
7474
! Namelist (set defaults then read from file)
7575
LMD_nu_zero = 5e-3_cvmix_r8
7676
LMD_Ri_zero = 0.7_cvmix_r8
77-
LMD_exp = real(3, cvmix_r8)
77+
LMD_exp = real(3, cvmix_r8)
78+
LMD_Prandtl_shear = real(1, cvmix_r8)
7879

7980
PP_nu_zero = 5e-3_cvmix_r8
8081
PP_alpha = real(5, cvmix_r8)
@@ -89,6 +90,7 @@ Subroutine cvmix_shear_driver(nlev, max_nlev)
8990
print*, "KPP_nu_zero = ", LMD_nu_zero
9091
print*, "KPP_Ri_zero = ", LMD_Ri_zero
9192
print*, "KPP_exp = ", LMD_exp
93+
print*, "Prandtl_shear = ", LMD_Prandtl_shear
9294

9395
print*, ""
9496
print*, "Parameters Used in PP test"
@@ -144,7 +146,8 @@ Subroutine cvmix_shear_driver(nlev, max_nlev)
144146

145147
! Set LMD94 parameters
146148
call cvmix_init_shear(mix_scheme='KPP', KPP_nu_zero=LMD_nu_zero, &
147-
KPP_Ri_zero=LMD_Ri_zero, KPP_exp=LMD_exp)
149+
KPP_Ri_zero=LMD_Ri_zero, KPP_exp=LMD_exp, &
150+
Prandtl_shear=LMD_Prandtl_shear)
148151
call cvmix_coeffs_shear(CVmix_vars_LMD_1D)
149152

150153
! Set PP81 single column parameters
@@ -167,7 +170,7 @@ Subroutine cvmix_shear_driver(nlev, max_nlev)
167170
call cvmix_io_open(fid, "data_LMD.out", "ascii")
168171
#endif
169172

170-
call cvmix_output_write(fid, CVmix_vars_LMD_1D, (/"Ri ", "Tdiff"/))
173+
call cvmix_output_write(fid, CVmix_vars_LMD_1D, (/"Ri ", "Tdiff", "Mdiff"/))
171174
#ifdef _NETCDF
172175
call cvmix_output_write_att(fid, "long_name", "Richardson number", &
173176
var_name="ShearRichardson")
@@ -186,7 +189,7 @@ Subroutine cvmix_shear_driver(nlev, max_nlev)
186189
call cvmix_io_open(fid, "data_PP1d.out", "ascii")
187190
#endif
188191

189-
call cvmix_output_write(fid, CVmix_vars_PP_1D, (/"Ri ", "Mdiff"/))
192+
call cvmix_output_write(fid, CVmix_vars_PP_1D, (/"Ri ", "Tdiff", "Mdiff"/))
190193
#ifdef _NETCDF
191194
call cvmix_output_write_att(fid, "long_name", "Richardson number", &
192195
var_name="ShearRichardson")
@@ -204,7 +207,7 @@ Subroutine cvmix_shear_driver(nlev, max_nlev)
204207
#else
205208
call cvmix_io_open(fid, "data_PP2d.out", "ascii")
206209
#endif
207-
call cvmix_output_write(fid, CVmix_vars_PP_2D, (/"Ri ", "Mdiff"/))
210+
call cvmix_output_write(fid, CVmix_vars_PP_2D, (/"Ri ", "Tdiff", "Mdiff"/))
208211
#ifdef _NETCDF
209212
call cvmix_output_write_att(fid, "long_name", "Richardson number", &
210213
var_name="ShearRichardson")

src/shared/cvmix_shear.F90

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ module cvmix_shear
101101
! Exponent of unitless factor of diffusities (3 in LMD94)
102102
real(cvmix_r8) :: KPP_exp ! units: unitless
103103

104+
! Prandtl number for shear mixing (1.0 to match initial Mdiff_out = Tdiff_out)
105+
real(cvmix_r8) :: Prandtl_shear ! units: unitless
106+
104107
! Flag for what to do with old values of CVmix_vars%[MTS]diff
105108
integer :: handle_old_vals
106109
end type cvmix_shear_params_type
@@ -118,7 +121,7 @@ module cvmix_shear
118121
subroutine cvmix_init_shear(CVmix_shear_params_user, mix_scheme, &
119122
PP_nu_zero, PP_alpha, PP_exp, PP_nu_b, &
120123
PP_kappa_b, KPP_nu_zero, KPP_Ri_zero, KPP_exp, &
121-
old_vals)
124+
Prandtl_shear, old_vals)
122125

123126
! !DESCRIPTION:
124127
! Initialization routine for shear (Richardson number-based) mixing. There are
@@ -162,7 +165,8 @@ subroutine cvmix_init_shear(CVmix_shear_params_user, mix_scheme, &
162165
PP_kappa_b, &
163166
KPP_nu_zero, &
164167
KPP_Ri_zero, &
165-
KPP_exp
168+
KPP_exp, &
169+
Prandtl_shear
166170

167171
! !OUTPUT PARAMETERS:
168172
type(cvmix_shear_params_type), optional, target, intent(inout) :: &
@@ -243,6 +247,11 @@ subroutine cvmix_init_shear(CVmix_shear_params_user, mix_scheme, &
243247
call cvmix_put_shear("KPP_exp", 3, CVmix_shear_params_user)
244248
end if
245249

250+
if (present(Prandtl_shear)) then
251+
call cvmix_put_shear("Prandtl_shear", Prandtl_shear, CVmix_shear_params_user)
252+
else
253+
call cvmix_put_shear("Prandtl_shear", cvmix_one, CVmix_shear_params_user)
254+
end if
246255
case DEFAULT
247256
print*, "ERROR: ", trim(CVmix_shear_params_out%mix_scheme), &
248257
" is not a valid choice for shear mixing."
@@ -362,6 +371,7 @@ subroutine cvmix_coeffs_shear_low(Mdiff_out, Tdiff_out, RICH, nlev, &
362371
real(cvmix_r8) :: PP_alpha, PP_nu_b, PP_kappa_b, denom
363372
! Parameters only used in LMD94
364373
real(cvmix_r8) :: KPP_Ri_zero
374+
real(cvmix_r8) :: Prandtl_shear
365375
type(cvmix_shear_params_type), pointer :: CVmix_shear_params
366376

367377
if (present(CVmix_shear_params_user)) then
@@ -393,9 +403,10 @@ subroutine cvmix_coeffs_shear_low(Mdiff_out, Tdiff_out, RICH, nlev, &
393403

394404
case ('KPP')
395405
! Copy parameters to make the code more legible
396-
nu_zero = CVmix_shear_params%KPP_nu_zero
397-
KPP_Ri_zero = CVmix_shear_params%KPP_Ri_zero
398-
loc_exp = CVmix_shear_params%KPP_exp
406+
nu_zero = CVmix_shear_params%KPP_nu_zero
407+
KPP_Ri_zero = CVmix_shear_params%KPP_Ri_zero
408+
loc_exp = CVmix_shear_params%KPP_exp
409+
Prandtl_shear = CVmix_shear_params%Prandtl_shear
399410

400411
! Large, et al
401412
do kw=1,nlev+1
@@ -409,7 +420,7 @@ subroutine cvmix_coeffs_shear_low(Mdiff_out, Tdiff_out, RICH, nlev, &
409420
end if
410421
end do
411422
! to do: include global params for prandtl number!
412-
Mdiff_out = Tdiff_out
423+
Mdiff_out = Prandtl_shear * Tdiff_out
413424

414425
case DEFAULT
415426
! Note: this error should be caught in cvmix_init_shear
@@ -513,6 +524,8 @@ subroutine cvmix_put_shear_real(varname, val, CVmix_shear_params_user)
513524
CVmix_shear_params_out%KPP_Ri_zero = val
514525
case ('KPP_exp')
515526
CVmix_shear_params_out%KPP_exp = val
527+
case('Prandtl_shear')
528+
CVmix_shear_params_out%Prandtl_shear = val
516529
case DEFAULT
517530
print*, "ERROR: ", trim(varname), " not a valid choice!"
518531
stop 1
@@ -601,17 +614,19 @@ function cvmix_get_shear_real(varname, CVmix_shear_params_user)
601614
cvmix_get_shear_real = cvmix_zero
602615
select case (trim(varname))
603616
case ('PP_nu_zero')
604-
cvmix_get_shear_real =CVmix_shear_params_in%PP_nu_zero
617+
cvmix_get_shear_real = CVmix_shear_params_in%PP_nu_zero
605618
case ('PP_alpha')
606-
cvmix_get_shear_real =CVmix_shear_params_in%PP_alpha
619+
cvmix_get_shear_real = CVmix_shear_params_in%PP_alpha
607620
case ('PP_exp')
608-
cvmix_get_shear_real =CVmix_shear_params_in%PP_exp
621+
cvmix_get_shear_real = CVmix_shear_params_in%PP_exp
609622
case ('KPP_nu_zero')
610-
cvmix_get_shear_real =CVmix_shear_params_in%KPP_nu_zero
623+
cvmix_get_shear_real = CVmix_shear_params_in%KPP_nu_zero
611624
case ('KPP_Ri_zero')
612-
cvmix_get_shear_real =CVmix_shear_params_in%KPP_Ri_zero
625+
cvmix_get_shear_real = CVmix_shear_params_in%KPP_Ri_zero
613626
case ('KPP_exp')
614-
cvmix_get_shear_real =CVmix_shear_params_in%KPP_exp
627+
cvmix_get_shear_real = CVmix_shear_params_in%KPP_exp
628+
case ('Prandtl_shear')
629+
cvmix_get_shear_real = CVmix_shear_params_in%Prandtl_shear
615630
case DEFAULT
616631
print*, "ERROR: ", trim(varname), " not a valid choice!"
617632
stop 1

0 commit comments

Comments
 (0)