@@ -30,9 +30,10 @@ MODULE ConvPar_GF2020
3030 ,cum_max_edt_land ,cum_max_edt_ocean, cum_hei_down_land &
3131 ,cum_hei_down_ocean,cum_hei_updf_land, cum_hei_updf_ocean &
3232 ,use_momentum_transp,cum_entr_rate,min_entr_rate &
33- ,zero_diff , nmp, lsmp, cnmp,moist_trigger,frac_modis,max_tq_tend &
33+ ,zero_diff_land,zero_diff_entr,zero_diff_vvel &
34+ ,nmp,lsmp,cnmp,moist_trigger,frac_modis,max_tq_tend &
3435 ,cum_fadj_massflx, cum_use_excess, cum_ave_layer, adv_trigger &
35- ,evap_fix,output_sound,use_cloud_dissipation &
36+ ,evap_fix,output_sound,use_cloud_dissipation &
3637 ,use_smooth_tend,GF_convpar_init,beta_sh,c0_shal &
3738 ,use_linear_subcl_mf,cap_maxs,entrversion
3839
@@ -83,7 +84,10 @@ MODULE ConvPar_GF2020
8384
8485 REAL :: MAX_TQ_TEND = 100 . ! = max T,Q tendency allowed (100 K/day)
8586
86- INTEGER :: ZERO_DIFF = 0 ! = to get the closest solution of the stable version Dec 2019 for single-moment
87+ ! INTEGER :: ZERO_DIFF = 0 != to get the closest solution of the stable version Dec 2019 for single-moment
88+ INTEGER :: ZERO_DIFF_ENTR = 0 ! = just the zero_diff entrainment options
89+ INTEGER :: ZERO_DIFF_LAND = 0 ! = just the zero_diff land/ocean options
90+ INTEGER :: ZERO_DIFF_VVEL = 0 ! = just the zero_diff subgrid vvel options
8791
8892 INTEGER :: USE_SMOOTH_TEND = 0 ! = 0 => OFF, > 0 produces smoother tendencies (e.g.: for 1=> makes average between k-1,k,k+1)
8993 !- -- deep, shallow, congestus
@@ -2125,8 +2129,8 @@ SUBROUTINE CUP_gf(its,ite,kts,kte ,itf,ktf, mtp, nmp &
21252129
21262130!
21272131!- -- maximum depth (mb) of capping inversion (larger cap = no convection)
2128- !
2129- IF (ZERO_DIFF == 1 .or. MOIST_TRIGGER== 0 ) THEN
2132+ ! The option here is non ZERO_DIFF, MOIST_TRIGGER==0 is consistent with GF2019
2133+ IF (MOIST_TRIGGER== 0 ) THEN
21302134 if (trim (cumulus) == ' deep' ) then ; cap_max_inc= 20 . ; endif ! cap_maxs=50.
21312135 if (trim (cumulus) == ' mid' ) then ; cap_max_inc= 10 . ; endif ! cap_maxs=50.
21322136 if (trim (cumulus) == ' shallow' ) then ; cap_max_inc= 25 . ; endif ! cap_maxs=50.
@@ -2207,7 +2211,7 @@ SUBROUTINE CUP_gf(its,ite,kts,kte ,itf,ktf, mtp, nmp &
22072211 ! ierr(i)=1
22082212 ! ierrc(i)='scale_dep renders convection insignificant'
22092213 ! endif
2210- if (ierr(i) /= 0 ) cycle
2214+ ! if(ierr(i) /= 0) cycle
22112215 enddo
22122216 endif
22132217 endif
@@ -2585,7 +2589,7 @@ SUBROUTINE CUP_gf(its,ite,kts,kte ,itf,ktf, mtp, nmp &
25852589 else
25862590 entr_rate(i,k)= entr_rate(i,k)* (1.3 - frh)
25872591 endif
2588- if (ZERO_DIFF == 1 ) then
2592+ if (ZERO_DIFF_ENTR == 1 ) then
25892593 cd(i,k)= 0.75e-4 * (1.6 - frh)
25902594 else
25912595 entr_rate(i,k) = max (entr_rate(i,k),min_entr_rate)
@@ -3106,7 +3110,8 @@ SUBROUTINE CUP_gf(its,ite,kts,kte ,itf,ktf, mtp, nmp &
31063110 ! Combine
31073111 tau_ecmwf(i)= tau_0 + tau_1* (1.0 - cnvfrc(i))
31083112 ! Limit
3109- tau_ecmwf(i)= max (dtime,min (tau_ecmwf(i),tau_deep))
3113+ if (trim (cumulus)==' deep' ) tau_ecmwf(i)= max (tau_mid,min (tau_ecmwf(i),tau_deep))
3114+ if (trim (cumulus)==' mid' ) tau_ecmwf(i)= max (dtime ,min (tau_ecmwf(i),tau_mid))
31103115 ENDDO
31113116 ENDIF
31123117 DO i= its,itf
@@ -4189,7 +4194,7 @@ SUBROUTINE CUP_gf(its,ite,kts,kte ,itf,ktf, mtp, nmp &
41894194 call cup_output_ens_3d(cumulus,xff_shal,xff_mid,xf_ens,ierr,dellat,dellaq, &
41904195 dellaqc,outt, outq,outqc,zuo,pre,pwo_eff,xmb,ktop, &
41914196 maxens2,maxens,ierr2,ierr3, &
4192- pr_ens,maxens3,ensdim,sig,xland1, &
4197+ pr_ens,maxens3,ensdim,sig,cnvfrc, xland1, &
41934198 ichoice,ipr,jpr,itf,ktf,its,ite, kts,kte, &
41944199 xf_dicycle,outu,outv,dellu,dellv,dtime,po_cup,kbcon, &
41954200 dellabuoy,outbuoy, &
@@ -4996,7 +5001,8 @@ SUBROUTINE cup_dd_moisture(cumulus,ierrc,zd,hcd,hes_cup,qcd,qes_cup,
49965001 ierrc(i)= " problem2 with buoy in cup_dd_moisture"
49975002 endif
49985003
4999- if (ZERO_DIFF== 0 .and. EVAP_FIX== 1 ) then
5004+ ! ZERO_DIFF: The EVAP_FIX option is not in GF2019
5005+ if (EVAP_FIX== 1 ) then
50005006 if (abs (pwev(i)) > pwavo(i) .and. ierr(i) == 0 )then
50015007 fix_evap = pwavo(i)/ (1.e-16 + abs (pwev(i)))
50025008 pwev(i) = 0 .
@@ -5873,12 +5879,11 @@ SUBROUTINE cup_up_moisture(name,start_level,klcl,ierr,ierrc,z_cup,qc,qrc,pw,pwav
58735879
58745880 ENDDO
58755881
5876- IF (ZERO_DIFF== 0 ) THEN
5877- if (pwav(i) < 0 .) then
5878- ierr(i)= 66
5879- ierrc(i)= " pwav negative"
5880- endif
5881- ENDIF
5882+ ! ZERO_DIFF: not in GF2019
5883+ if (pwav(i) < 0 .) then
5884+ ierr(i)= 66
5885+ ierrc(i)= " pwav negative"
5886+ endif
58825887
58835888 ENDDO
58845889
@@ -6544,7 +6549,7 @@ SUBROUTINE get_zu_zd_pdf(cumulus, draft,ierr,kb,kt,zu,kts,kte,ktf,kpbli,k22,kbco
65446549 zu = 0.0
65456550 zuh= 0.0
65466551 zul= 0.0
6547- IF (zero_diff == 1 ) then
6552+ IF (ZERO_DIFF_LAND == 1 ) then
65486553 if (draft == " deep_up" .and. xland > 0.90 ) itest= 11 ! ocean
65496554 if (draft == " deep_up" .and. xland <= 0.90 ) itest= 12 ! land
65506555 if (draft == " mid_up" ) itest= 5
@@ -6805,13 +6810,12 @@ SUBROUTINE get_zu_zd_pdf(cumulus, draft,ierr,kb,kt,zu,kts,kte,ktf,kpbli,k22,kbco
68056810 !- for gate soundings
68066811 ! if(gate) hei_updf = max(0.1, min(1.,float(JL)/100.)) ! for gate soundings
68076812
6808- !- --non-zero-diff-APR-08-2020
6809- IF ( zero_diff== 1 ) then
6813+ IF ( ZERO_DIFF_LAND== 1 ) then
68106814 pmaxzu= psur- px* (psur- po_cup(kt))
68116815 ELSE
68126816 pmaxzu= psur- hei_updf* (psur- po_cup(kt))
68136817 ENDIF
6814- !- --non-zero-diff-APR-08-2020
6818+
68156819 kb_adj= minloc (abs (po_cup(kts:kt)- pmaxzu),1 )
68166820 kb_adj= max (kb,kb_adj)
68176821 kb_adj= min (kb_adj,kt)
@@ -6911,13 +6915,11 @@ SUBROUTINE get_zu_zd_pdf(cumulus, draft,ierr,kb,kt,zu,kts,kte,ktf,kpbli,k22,kbco
69116915 zuh(kts:min (kte,kt))= zuh(kts:min (kte,kt))/ (1.e-9 + maxval (zuh(kts:min (kte,kt)),1 ))
69126916
69136917 ! increasing contribuition of zuh => more heating at upper levels/less precip
6914- !- --non-zero-diff-APR-08-2020
6915- IF (zero_diff== 1 ) then
6918+ IF (ZERO_DIFF_LAND== 1 ) then
69166919 zu(:)= 0.65 * zul(:)+ 0.35 * zuh(:)
69176920 ELSE
69186921 zu(:)= (1 .- hei_updf)* zul(:) + hei_updf* zuh(:)
69196922 ENDIF
6920- !- --non-zero-diff-APR-08-2020
69216923
69226924 !- - special treatment below k22/klcl
69236925 DO k= klcl,kts+1 ,- 1
@@ -7032,9 +7034,11 @@ SUBROUTINE get_zu_zd_pdf(cumulus, draft,ierr,kb,kt,zu,kts,kte,ktf,kpbli,k22,kbco
70327034
70337035 hei_down= (1 .- xland)* hei_down_LAND+ xland* hei_down_OCEAN
70347036
7035- !- --non-zero-diff-APR-08-2020
7036- IF (zero_diff== 1 ) hei_down= 0.5
7037- !- --non-zero-diff-APR-08-2020
7037+ IF (ZERO_DIFF_LAND== 1 ) then
7038+ hei_down= 0.5
7039+ ELSE
7040+ hei_down= (1 .- xland)* hei_down_LAND+ xland* hei_down_OCEAN
7041+ ENDIF
70387042
70397043 pmaxzu= hei_down * po_cup(kt) + (1 .- hei_down)* psur
70407044 kb_adj= minloc (abs (po_cup(kts:kt)- pmaxzu),1 )
@@ -8147,11 +8151,7 @@ SUBROUTINE cup_cloud_limits(name,ierrc,ierr,cap_inc,cap_max_in
81478151
81488152 DO i= its,itf
81498153 if (ierr(i) /= 0 ) cycle
8150- if (ZERO_DIFF== 1 ) then
8151- start_level(i) = klcl(i)
8152- else
8153- start_level(i) = start_level_(i)
8154- endif
8154+ start_level(i) = start_level_(i) ! start_level_ == klcl, so not a ZERO_DIFF option
81558155
81568156 do k= kts,start_level(i)
81578157 hcot(i,k) = hkbo(i) ! assumed no entraiment between these layers
@@ -8349,7 +8349,7 @@ subroutine cup_up_vvel(vvel2d,vvel1d,zws,entr_rate,cd ,z,z_cup,zu,dby,GAMMA_CUP,
83498349 integer , parameter :: n_smooth= 1
83508350
83518351 ftun1= 0.25 ; ftun2= 1 .
8352- if (ZERO_DIFF == 1 ) then
8352+ if (ZERO_DIFF_VVEL == 1 ) then
83538353 ftun1= 1 . ; ftun2= 0.5
83548354 endif
83558355
@@ -8374,7 +8374,7 @@ subroutine cup_up_vvel(vvel2d,vvel1d,zws,entr_rate,cd ,z,z_cup,zu,dby,GAMMA_CUP,
83748374 BU = g* ( (Tv- Tve)/ Tve - ftun2* 0.50 * (qrco(i,k+1 )+ qrco(i,k) ))
83758375
83768376 dw1 = 2 ./ (f* (1 .+ gam)) * BU * dz
8377- if (ZERO_DIFF == 1 ) then
8377+ if (ZERO_DIFF_VVEL == 1 ) then
83788378 kx = max (entr_rate(i,k),cd(i,k))* dz
83798379 else
83808380 kx = (1 .+ beta* C_d)* max (entr_rate(i,k),cd(i,k))* dz* ftun1
@@ -8391,7 +8391,7 @@ subroutine cup_up_vvel(vvel2d,vvel1d,zws,entr_rate,cd ,z,z_cup,zu,dby,GAMMA_CUP,
83918391 enddo loop0
83928392 enddo
83938393 if (smooth) then
8394- if (ZERO_DIFF == 1 ) then
8394+ if (ZERO_DIFF_VVEL == 1 ) then
83958395 do i= its,itf
83968396 if (ierr(i) /= 0 )cycle
83978397 do k= kts,ktop(i)- 2
@@ -8427,7 +8427,7 @@ subroutine cup_up_vvel(vvel2d,vvel1d,zws,entr_rate,cd ,z,z_cup,zu,dby,GAMMA_CUP,
84278427 !- - sanity check
84288428 where (vvel2d(i,:) < 1 . ) vvel2d(i,:) = 1 .
84298429 where (vvel2d(i,:) > 20 .) vvel2d(i,:) = 20 .
8430- if (ZERO_DIFF == 0 ) vvel2d(i,ktop(i)+ 1 :kte) = 0.1
8430+ if (ZERO_DIFF_VVEL == 0 ) vvel2d(i,ktop(i)+ 1 :kte) = 0.1
84318431
84328432 !- - get the column average vert velocity
84338433 do k= kbcon(i),ktop(i)
@@ -8443,7 +8443,7 @@ end subroutine cup_up_vvel
84438443!- -----------------------------------------------------------------------------------
84448444 SUBROUTINE cup_output_ens_3d (name ,xff_shal ,xff_mid ,xf_ens ,ierr ,dellat ,dellaq ,dellaqc , &
84458445 outtem ,outq ,outqc ,zu ,pre ,pw ,xmb ,ktop , &
8446- nx ,nx2 ,ierr2 ,ierr3 ,pr_ens , maxens3 ,ensdim ,sig ,xland1 , &
8446+ nx ,nx2 ,ierr2 ,ierr3 ,pr_ens , maxens3 ,ensdim ,sig ,cnvfrc , xland1 , &
84478447 ichoice ,ipr ,jpr ,itf ,ktf ,its ,ite , kts ,kte , &
84488448 xf_dicycle ,outu ,outv ,dellu ,dellv ,dtime ,po_cup ,kbcon , &
84498449 dellabuoy ,outbuoy , dellampqi ,outmpqi ,dellampql ,outmpql , &
@@ -8491,7 +8491,7 @@ SUBROUTINE cup_output_ens_3d(name,xff_shal,xff_mid,xf_ens,ierr,dellat,dellaq,del
84918491 zu,po_cup
84928492 real , dimension (its:ite) &
84938493 ,intent (in ) :: &
8494- sig
8494+ sig, cnvfrc
84958495 real , dimension (its:ite,maxens3) &
84968496 ,intent (in ) :: &
84978497 xff_mid
@@ -8633,7 +8633,6 @@ SUBROUTINE cup_output_ens_3d(name,xff_shal,xff_mid,xf_ens,ierr,dellat,dellaq,del
86338633 !- apply the scale-dependence Arakawa's approach
86348634 DO i= its,itf
86358635 if (ierr(i) /= 0 ) cycle
8636- !- scale dependence
86378636 xmb(i)= sig(i)* xmb(i)
86388637
86398638 if (xmb(i) == 0 . ) ierr(i)= 14
@@ -9033,7 +9032,7 @@ SUBROUTINE cup_forcing_ens_3d(itf,ktf,its,ite, kts,kte,ens4,ensdim,ichoice,maxen
90339032! endif
90349033
90359034!- --over the land, only applies closure 10.
9036- if (zero_diff == 0 .and. ichoice == 0 ) then
9035+ if (ZERO_DIFF_LAND == 0 .and. ichoice == 0 ) then
90379036 xf_ens(i,1 :16 )= (1 .- xland(i))* xf_ens(i,10 )+ xland(i)* xf_ens(i,1 :16 )
90389037endif
90399038
@@ -11004,7 +11003,8 @@ subroutine GF_convpar_init (mynum)
1100411003 ,cum_max_edt_land ,cum_max_edt_ocean, cum_hei_down_land &
1100511004 ,cum_hei_down_ocean,cum_hei_updf_land, cum_hei_updf_ocean &
1100611005 ,cum_entr_rate ,tau_deep,tau_mid &
11007- ,zero_diff ,use_momentum_transp ,moist_trigger,frac_modis &
11006+ ,zero_diff_land,zero_diff_vvel,zero_diff_entr &
11007+ ,use_momentum_transp ,moist_trigger,frac_modis &
1100811008 ,cum_use_excess,cum_ave_layer,adv_trigger, evap_fix &
1100911009 ,use_cloud_dissipation,use_smooth_tend,use_gustiness, use_random_num &
1101011010 ,dcape_threshold,beta_sh,c0_shal,use_linear_subcl_mf
@@ -11059,7 +11059,9 @@ subroutine GF_convpar_init (mynum)
1105911059 print * , ' lightning_diag ' , lightning_diag
1106011060 print * , ' use_scale_dep ' , use_scale_dep
1106111061 print * , ' dicycle ' , dicycle
11062- print * , ' zero_diff ' , zero_diff
11062+ print * , ' zero_diff_land ' , zero_diff_land
11063+ print * , ' zero_diff_vvel ' , zero_diff_vvel
11064+ print * , ' zero_diff_entr ' , zero_diff_entr
1106311065 print * , ' cum_entr ' , real (cum_entr_rate ,4 )
1106411066 print * , ' frac_modis ' , frac_modis
1106511067 print * , ' moist_trigger ' , moist_trigger
0 commit comments