@@ -82,7 +82,7 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntrw, &
82
82
& prsi ,del ,prsl ,prslk ,phii ,phil ,delt , &
83
83
& dspheat ,dusfc ,dvsfc ,dtsfc ,dqsfc ,hpbl ,dkt ,dku ,tkeh , &
84
84
& kinver ,xkzm_m ,xkzm_h ,xkzm_s ,dspfac ,bl_upfr ,bl_dnfr , &
85
- & rlmx ,elmx ,sfc_rlm ,tc_pbl , &
85
+ & rlmx ,elmx ,sfc_rlm ,tc_pbl ,use_lpt , &
86
86
& ntqv ,dtend ,dtidx ,index_of_temperature ,index_of_x_wind , &
87
87
& index_of_y_wind ,index_of_process_pbl ,gen_tend ,ldiag3d , &
88
88
& errmsg ,errflg )
@@ -97,6 +97,7 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntrw, &
97
97
& ntke, ntqv
98
98
integer , intent (in ) :: sfc_rlm
99
99
integer , intent (in ) :: tc_pbl
100
+ integer , intent (in ) :: use_lpt
100
101
integer , intent (in ) :: kinver(:)
101
102
integer , intent (out ) :: kpbl(:)
102
103
logical , intent (in ) :: gen_tend,ldiag3d
@@ -259,6 +260,8 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntrw, &
259
260
real (kind= kind_phys) h1
260
261
261
262
real (kind= kind_phys) bfac, mffac
263
+
264
+ real (kind= kind_phys) qice(im,km),qliq(im,km)
262
265
!!
263
266
parameter (bfac= 100 .)
264
267
parameter (wfac= 7.0 ,cfac= 4.5 )
@@ -467,15 +470,20 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntrw, &
467
470
do i= 1 ,im
468
471
pix(i,k) = psk(i) / prslk(i,k)
469
472
theta(i,k) = t1(i,k) * pix(i,k)
473
+ qice(i,k) = 0.0
474
+ qliq(i,k) = 0.0
470
475
if (ntiw > 0 ) then
471
476
tem = max (q1(i,k,ntcw),qlmin)
472
477
tem1 = max (q1(i,k,ntiw),qlmin)
478
+ qice(i,k) = tem1
479
+ qliq(i,k) = tem
473
480
qlx(i,k) = tem + tem1
474
481
ptem = hvap* tem + (hvap+ hfus)* tem1
475
482
slx(i,k) = cp * t1(i,k) + phil(i,k) - ptem
476
483
else
477
484
qlx(i,k) = max (q1(i,k,ntcw),qlmin)
478
485
slx(i,k) = cp * t1(i,k) + phil(i,k) - hvap* qlx(i,k)
486
+ qliq(i,k) = qlx(i,k)
479
487
endif
480
488
tem2 = 1 .+ fv* max (q1(i,k,1 ),qmin)- qlx(i,k)
481
489
thvx(i,k) = theta(i,k) * tem2
@@ -1818,6 +1826,10 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntrw, &
1818
1826
rdz = rdzt(i,k)
1819
1827
tem1 = dsig * dkt(i,k) * rdz
1820
1828
dsdzt = tem1 * gocp
1829
+ if (use_lpt > 0) then
1830
+ dsdzt = dsdzt-tem1*elocp*(qliq(i,k+1)-qliq(i,k))*rdz
1831
+ & -(1+0.33/2.5)*tem1*elocp*(qice(i,k+1)-qice(i,k))*rdz
1832
+ endif
1821
1833
dsdz2 = tem1 * rdz
1822
1834
au(i,k) = -dtodsd*dsdz2
1823
1835
al(i,k) = -dtodsu*dsdz2
0 commit comments