@@ -150,6 +150,7 @@ subroutine cu_ntiedtke( &
150
150
,u3d ,v3d ,w ,t3d ,qv3d ,qc3d ,qi3d ,pi3d ,rho3d &
151
151
,qvften ,thften &
152
152
,dz8w ,pcps ,p8w ,xland ,cu_act_flag ,dx &
153
+ ,ntiedtke_dx_opt &
153
154
,ids ,ide , jds ,jde , kds ,kde &
154
155
,ims ,ime , jms ,jme , kms ,kme &
155
156
,its ,ite , jts ,jte , kts ,kte &
@@ -191,6 +192,7 @@ subroutine cu_ntiedtke( &
191
192
!-- dz8w dz between full levels (m)
192
193
!-- qfx upward moisture flux at the surface (kg/ m^2 / s)
193
194
!-- hfx upward heat flux at the surface (w/ m^2 )
195
+ !-- ntiedtke_dx_opt whether the schemem is scale- aware
194
196
!-- dt time step (s)
195
197
!-- ids start index for i in domain
196
198
!-- ide end index for i in domain
@@ -217,6 +219,8 @@ subroutine cu_ntiedtke( &
217
219
itimestep, &
218
220
stepcu
219
221
222
+ integer , intent (in ) :: ntiedtke_dx_opt
223
+
220
224
real , intent (in ) :: &
221
225
dt
222
226
real , dimension (ims:ime, jms:jme), intent (in ) :: &
@@ -426,7 +430,7 @@ subroutine cu_ntiedtke( &
426
430
!
427
431
!########################################################################
428
432
call tiecnvn(u1,v1,t1,q1,q2,q3,q1b,t1b,ghtl,ghti,omg,prsl,prsi,evap,heatflux, &
429
- rn,slimsk,im,kx,kx1,delt,dx2d)
433
+ rn,slimsk,im,kx,kx1,delt,dx2d,ntiedtke_dx_opt )
430
434
431
435
do i= its,ite
432
436
raincv(i,j)= rn(i)/ stepcu
@@ -555,7 +559,7 @@ end subroutine ntiedtkeinit
555
559
! level 1 subroutine ' tiecnvn'
556
560
!-----------------------------------------------------------------
557
561
subroutine tiecnvn (pu ,pv ,pt ,pqv ,pqc ,pqi ,pqvf ,ptf ,poz ,pzz ,pomg , &
558
- & pap ,paph ,evap ,hfx ,zprecc ,lndj ,lq ,km ,km1 ,dt ,dx )
562
+ & pap ,paph ,evap ,hfx ,zprecc ,lndj ,lq ,km ,km1 ,dt ,dx , ntiedtke_dx_opt )
559
563
!-----------------------------------------------------------------
560
564
! this is the interface between the model and the mass
561
565
! flux convection module
@@ -577,6 +581,7 @@ subroutine tiecnvn(pu,pv,pt,pqv,pqc,pqi,pqvf,ptf,poz,pzz,pomg, &
577
581
& zqsat(lq,km), pqc(lq,km), pqi(lq,km), zrain(lq)
578
582
real pqvf(lq,km), ptf(lq,km)
579
583
real dx(lq)
584
+ integer ntiedtke_dx_opt
580
585
581
586
integer icbot(lq), ictop(lq), ktype(lq), lndj(lq)
582
587
logical locum(lq)
@@ -585,6 +590,18 @@ subroutine tiecnvn(pu,pv,pt,pqv,pqc,pqi,pqvf,ptf,poz,pzz,pomg, &
585
590
integer i,j,k,lq,km,km1
586
591
real dt,ztpp1
587
592
real zew,zqs,zcor
593
+ real scale_fac(lq), dxref
594
+ !
595
+ ! set scale- dependency factor when dx is < 15 km
596
+ !
597
+ dxref = 15000 .
598
+ do j= 1 ,lq
599
+ if (dx(j).lt. dxref .and. ntiedtke_dx_opt.eq. 1 ) then
600
+ scale_fac(j) = (1 .+ log (dxref/ dx(j)))** 3
601
+ else
602
+ scale_fac(j) = 1 .+ 1.33e-5 * dx(j)
603
+ end if
604
+ end do
588
605
!
589
606
ztmst= dt
590
607
!
@@ -638,7 +655,8 @@ subroutine tiecnvn(pu,pv,pt,pqv,pqc,pqi,pqvf,ptf,poz,pzz,pomg, &
638
655
& pssfc, locum, &
639
656
& ktype, icbot, ictop, ztu, zqu, &
640
657
& zlu, zlude, zmfu, zmfd, zrain,&
641
- & pcte, phhfl, lndj, pgeoh, dx)
658
+ & pcte, phhfl, lndj, pgeoh, dx, &
659
+ & scale_fac, ntiedtke_dx_opt )
642
660
!
643
661
! to include the cloud water and cloud ice detrained from convection
644
662
!
@@ -693,7 +711,8 @@ subroutine cumastrn &
693
711
& pssfc, ldcum, &
694
712
& ktype, kcbot, kctop, ptu, pqu,&
695
713
& plu, plude, pmfu, pmfd, prain,&
696
- & pcte, phhfl, lndj, zgeoh, dx)
714
+ & pcte, phhfl, lndj, zgeoh, dx, &
715
+ & scale_fac, ntiedtke_dx_opt )
697
716
implicit none
698
717
!
699
718
!*** cumastrn* master routine for cumulus massflux- scheme
@@ -801,6 +820,8 @@ subroutine cumastrn &
801
820
& ktype(klon), lndj(klon)
802
821
logical ldcum(klon)
803
822
logical loddraf(klon), llo1, llo2(klon)
823
+ real scale_fac(klon)
824
+ integer ntiedtke_dx_opt
804
825
805
826
! local varaiables
806
827
real zcons,zcons2,zqumqe,zdqmin,zdh,zmfmax
@@ -901,7 +922,8 @@ subroutine cumastrn &
901
922
& zuu, zvu, pmfu, zmfub,&
902
923
& zmfus, zmfuq, zmful, plude, zdmfup,&
903
924
& kcbot, kctop, ictop0, icum, ztmst,&
904
- & zqsenh, zlglac, lndj, wup, wbase, kdpl, pmfude_rate )
925
+ & zqsenh, zlglac, lndj, wup, wbase, kdpl, pmfude_rate,&
926
+ & scale_fac, ntiedtke_dx_opt )
905
927
906
928
!* (b) check cloud depth and change entrainment rate accordingly
907
929
! calculate precipitation rate (for downdraft calculation)
@@ -1017,10 +1039,14 @@ subroutine cumastrn &
1017
1039
if (ldcum(jl).and. ktype(jl).eq. 1 ) then
1018
1040
ikb = kcbot(jl)
1019
1041
ikt = kctop(jl)
1020
- ztau = ztauc(jl) * ( 1 . + 1.33e-5 * dx(jl) )
1042
+ ztau = ztauc(jl) * scale_fac(jl )
1021
1043
ztau = max (ztmst,ztau)
1022
1044
ztau = max (360 .,ztau)
1023
- ztau = min (10800 .,ztau)
1045
+ if (ntiedtke_dx_opt.eq. 1 ) then
1046
+ ztau = min (43200 .,ztau)
1047
+ else
1048
+ ztau = min (10800 .,ztau)
1049
+ end if
1024
1050
if (nonequil) then
1025
1051
zcape2(jl)= max (0 .,zcape2(jl))
1026
1052
zcape(jl) = max (0 .,min (zcape1(jl)- zcape2(jl),5000 .))
@@ -1060,6 +1086,9 @@ subroutine cumastrn &
1060
1086
zmfub1(jl) = zmfub(jl)
1061
1087
end if
1062
1088
zmfub1(jl) = min (zmfub1(jl),zmfmax)
1089
+ if (ntiedtke_dx_opt.eq. 1 ) then
1090
+ zmfub1(jl) = zmfub1(jl)/ (scale_fac(jl))** (.5 )
1091
+ end if
1063
1092
end if
1064
1093
1065
1094
!* 6.3 mid- level convection - nothing special
@@ -2102,7 +2131,8 @@ subroutine cuascn &
2102
2131
& puu, pvu, pmfu, pmfub, &
2103
2132
& pmfus, pmfuq, pmful, plude, pdmfup,&
2104
2133
& kcbot, kctop, kctop0, kcum, ztmst,&
2105
- & pqsenh, plglac, lndj, wup, wbase, kdpl, pmfude_rate)
2134
+ & pqsenh, plglac, lndj, wup, wbase, kdpl, pmfude_rate,&
2135
+ & scale_fac, ntiedtke_dx_opt )
2106
2136
implicit none
2107
2137
! this routine does the calculations for cloud ascents
2108
2138
! for cumulus parameterization
@@ -2223,12 +2253,18 @@ subroutine cuascn &
2223
2253
real zrnew,zz,zdmfeu,zdmfdu,dp
2224
2254
real zfac,zbuoc,zdkbuo,zdken,zvv,zarg,zchange,zxe,zxs,zdshrd
2225
2255
real atop1,atop2,abot
2256
+ real scale_fac(klon)
2257
+ integer ntiedtke_dx_opt
2226
2258
!--------------------------------
2227
2259
!* 1 . specify parameters
2228
2260
!--------------------------------
2229
2261
zcons2= 3 ./ (g* ztmst)
2230
2262
zfacbuo = 0.5 / (1 .+ 0.5 )
2263
+ if (ntiedtke_dx_opt.eq. 1 ) then
2264
+ zprcdgw = cprcon* zrg/ (scale_fac(jl)** (1 ./ 3 .))
2265
+ else
2231
2266
zprcdgw = cprcon* zrg
2267
+ end if
2232
2268
z_cldmax = 5.e-3
2233
2269
z_cwifrac = 0.5
2234
2270
z_cprc2 = 0.5
@@ -2307,7 +2343,7 @@ subroutine cuascn &
2307
2343
& pgeo, pgeoh, ldcum, ktype, klab, zlrain,&
2308
2344
& pmfu, pmfub, kcbot, ptu,&
2309
2345
& pqu, plu, puu, pvu, pmfus,&
2310
- & pmfuq, pmful, pdmfup)
2346
+ & pmfuq, pmful, pdmfup, ntiedtke_dx_opt )
2311
2347
is = 0
2312
2348
jlm = 0
2313
2349
do jl = 1 ,klon
@@ -3709,7 +3745,7 @@ subroutine cubasmcn &
3709
3745
& pgeo, pgeoh, ldcum, ktype, klab, plrain,&
3710
3746
& pmfu, pmfub, kcbot, ptu,&
3711
3747
& pqu, plu, puu, pvu, pmfus,&
3712
- & pmfuq, pmful, pdmfup)
3748
+ & pmfuq, pmful, pdmfup, ntiedtke_dx_opt )
3713
3749
implicit none
3714
3750
! m.tiedtke e.c.m.w.f. 12 / 89
3715
3751
! c.zhang iprc 05 / 2012
@@ -3746,9 +3782,38 @@ subroutine cubasmcn &
3746
3782
! local variabels
3747
3783
integer jl,kk,klev,klon,klevp1,klevm1
3748
3784
real zzzmb
3785
+ integer ntiedtke_dx_opt
3749
3786
!--------------------------------------------------------
3750
3787
!* 1 . calculate entrainment and detrainment rates
3751
3788
! -------------------------------------------------------
3789
+ if (ntiedtke_dx_opt.eq. 1 ) then
3790
+ do jl= 1 ,klon
3791
+ if (.not. ldcum(jl) .and. klab(jl,kk+1 ).eq. 0 ) then
3792
+ if (lmfmid .and. pqen(jl,kk) .gt. 0.80 * pqsen(jl,kk).and. &
3793
+ ! ww (no mid level conv, if the air is saturated)
3794
+ pqen(jl,kk) .le. pqsen(jl,kk).and. &
3795
+ pgeo(jl,kk)* zrg .gt. 5.0e2 .and. &
3796
+ & pgeo(jl,kk)* zrg .lt. 1.0e4 ) then
3797
+ ptu(jl,kk+1 )= (cpd* pten(jl,kk)+ pgeo(jl,kk)- pgeoh(jl,kk+1 ))&
3798
+ & * rcpd
3799
+ pqu(jl,kk+1 )= pqen(jl,kk)
3800
+ plu(jl,kk+1 )= 0 .
3801
+ zzzmb= max (cmfcmin,- pverv(jl,kk)* zrg)
3802
+ zzzmb= min (zzzmb,cmfcmax)
3803
+ pmfub(jl)= zzzmb
3804
+ pmfu(jl,kk+1 )= pmfub(jl)
3805
+ pmfus(jl,kk+1 )= pmfub(jl)* (cpd* ptu(jl,kk+1 )+ pgeoh(jl,kk+1 ))
3806
+ pmfuq(jl,kk+1 )= pmfub(jl)* pqu(jl,kk+1 )
3807
+ pmful(jl,kk+1 )= 0 .
3808
+ pdmfup(jl,kk+1 )= 0 .
3809
+ kcbot(jl)= kk
3810
+ klab(jl,kk+1 )= 1
3811
+ plrain(jl,kk+1 )= 0.0
3812
+ ktype(jl)= 3
3813
+ end if
3814
+ end if
3815
+ end do
3816
+ else
3752
3817
do jl= 1 ,klon
3753
3818
if (.not. ldcum(jl) .and. klab(jl,kk+1 ).eq. 0 ) then
3754
3819
if (lmfmid .and. pqen(jl,kk) .gt. 0.80 * pqsen(jl,kk).and. &
@@ -3773,6 +3838,7 @@ subroutine cubasmcn &
3773
3838
end if
3774
3839
end if
3775
3840
end do
3841
+ end if
3776
3842
return
3777
3843
end subroutine cubasmcn
3778
3844
!---------------------------------------------------------
0 commit comments