@@ -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