@@ -1043,7 +1043,8 @@ subroutine mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, &
10431043 tprr_rcs, tprv_rev, tten3, qvten3, &
10441044 qrten3, qsten3, qgten3, qiten3, niten3, &
10451045 nrten3, ncten3, qcten3, &
1046- pfils, pflls)
1046+ pfils, pflls, &
1047+ fs_fac_rain, fs_fac_snow)
10471048
10481049 implicit none
10491050
@@ -1112,6 +1113,8 @@ subroutine mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, &
11121113 tprr_rcs, tprv_rev, tten3, qvten3, &
11131114 qrten3, qsten3, qgten3, qiten3, niten3, &
11141115 nrten3, ncten3, qcten3
1116+ ! Fall speed adjustment
1117+ real (wp), INTENT (IN ), optional :: fs_fac_rain, fs_fac_snow
11151118
11161119 ! ..Local variables
11171120 real (wp), dimension (kts:kte):: &
@@ -1481,7 +1484,8 @@ subroutine mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, &
14811484 tprr_rcs1, tprv_rev1, &
14821485 tten1, qvten1, qrten1, qsten1, &
14831486 qgten1, qiten1, niten1, nrten1, ncten1, qcten1, &
1484- pfil1, pfll1)
1487+ pfil1, pfll1, &
1488+ fs_fac_rain, fs_fac_snow)
14851489
14861490 pcp_ra(i,j) = pcp_ra(i,j) + pptrain
14871491 pcp_sn(i,j) = pcp_sn(i,j) + pptsnow
@@ -1901,7 +1905,8 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, &
19011905 tprr_rcs1, tprv_rev1, &
19021906 tten1, qvten1, qrten1, qsten1, &
19031907 qgten1, qiten1, niten1, nrten1, ncten1, qcten1, &
1904- pfil1, pfll1)
1908+ pfil1, pfll1, &
1909+ fs_fac_rain, fs_fac_snow)
19051910
19061911 use mpi_f08
19071912
@@ -1937,6 +1942,8 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, &
19371942 tprr_rcs1, tprv_rev1, tten1, qvten1, &
19381943 qrten1, qsten1, qgten1, qiten1, niten1, &
19391944 nrten1, ncten1, qcten1
1945+ ! Fall speed adjustment
1946+ real (wp), intent (in ), optional :: fs_fac_rain, fs_fac_snow
19401947
19411948#if ( WRF_CHEM == 1 )
19421949 real (wp), dimension (kts:kte), intent (inout ) :: &
@@ -2031,6 +2038,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, &
20312038 logical :: debug_flag
20322039 integer :: nu_c
20332040
2041+ real (wp) :: fallspeed_adjustment_factor
20342042! +---+
20352043
20362044 debug_flag = .false.
@@ -3769,6 +3777,9 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, &
37693777 enddo
37703778
37713779 if (ANY (L_qr .eqv. .true. )) then
3780+ fallspeed_adjustment_factor= 1.0
3781+ if ( present (fs_fac_rain) ) fallspeed_adjustment_factor= fs_fac_rain
3782+
37723783 do k = kte, kts, - 1
37733784 vtr = 0 .
37743785 rhof(k) = SQRT (RHO_NOT/ rho(k))
@@ -3777,15 +3788,15 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, &
37773788 lamr = (am_r* crg(3 )* org2* nr(k)/ rr(k))** obmr
37783789 vtr = rhof(k)* av_r* crg(6 )* org3 * lamr** cre(3 ) &
37793790 * ((lamr+ fv_r)** (- cre(6 )))
3780- vtrk(k) = vtr
3791+ vtrk(k) = vtr* fallspeed_adjustment_factor
37813792! First below is technically correct:
37823793! vtr = rhof(k)*av_r*crg(5)*org2 * lamr**cre(2) &
37833794! *((lamr+fv_r)**(-cre(5)))
37843795! Test: make number fall faster (but still slower than mass)
37853796! Goal: less prominent size sorting
37863797 vtr = rhof(k)* av_r* crg(7 )/ crg(12 ) * lamr** cre(12 ) &
37873798 * ((lamr+ fv_r)** (- cre(7 )))
3788- vtnrk(k) = vtr
3799+ vtnrk(k) = vtr* fallspeed_adjustment_factor
37893800 else
37903801 vtrk(k) = vtrk(k+1 )
37913802 vtnrk(k) = vtnrk(k+1 )
@@ -3869,6 +3880,9 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, &
38693880! +---+-----------------------------------------------------------------+
38703881
38713882 if (ANY (L_qs .eqv. .true. )) then
3883+ fallspeed_adjustment_factor= 1.0
3884+ if ( present (fs_fac_snow) ) fallspeed_adjustment_factor= fs_fac_snow
3885+
38723886 nstep = 0
38733887 do k = kte, kts, - 1
38743888 vts = 0 .
@@ -3886,6 +3900,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, &
38863900 t3_vts = Kap0* csg(1 )* ils1** cse(1 )
38873901 t4_vts = Kap1* Mrat** mu_s* csg(7 )* ils2** cse(7 )
38883902 vts = rhof(k)* av_s * (t1_vts+ t2_vts)/ (t3_vts+ t4_vts)
3903+ vts= vts* fallspeed_adjustment_factor
38893904 if (prr_sml(k) .gt. 0.0 ) then
38903905 ! vtsk(k) = max(vts*vts_boost(k), &
38913906 ! & vts*((vtrk(k)-vts*vts_boost(k))/(temp(k)-T_0)))
0 commit comments