From 13ed69f1977fdf7a81b430047ccd0aff46983e69 Mon Sep 17 00:00:00 2001 From: Ricardo Fonseca Date: Tue, 4 Jun 2019 05:32:55 +0200 Subject: [PATCH 01/24] Add the Precipitating Convective Cloud (PCC) scheme to the BMJ cumulus scheme (Koh and Fonseca, 2016, QJRMS). --- Registry/Registry.EM_COMMON | 9 +- dyn_em/module_first_rk_step_part1.F | 5 + dyn_em/start_em.F | 9 +- phys/module_cu_bmj.F | 162 ++++++++++++++++++++++++---- phys/module_cumulus_driver.F | 18 +++- phys/module_physics_init.F | 29 +++-- phys/module_ra_rrtm.F | 44 +++++++- phys/module_ra_rrtmg_lw.F | 61 +++++++++-- phys/module_ra_rrtmg_lwf.F | 51 +++++++-- phys/module_ra_rrtmg_sw.F | 61 +++++++++-- phys/module_ra_rrtmg_swf.F | 50 +++++++-- phys/module_radiation_driver.F | 30 +++++- 12 files changed, 455 insertions(+), 74 deletions(-) diff --git a/Registry/Registry.EM_COMMON b/Registry/Registry.EM_COMMON index 749ca43475..e703810787 100644 --- a/Registry/Registry.EM_COMMON +++ b/Registry/Registry.EM_COMMON @@ -1413,6 +1413,8 @@ state real RQCNCUTEN ikj misc 1 - r "R state real RQINCUTEN ikj misc 1 - r "RQINCUTEN" "Q_IN TENDENCY DUE TO CUMULUS SCHEME" "# kg-1 s-1" state real W0AVG ikj misc 1 - r "W0AVG" "AVERAGE VERTICAL VELOCITY FOR KF CUMULUS SCHEME" "m s-1" +state real qcconv ikj misc 1 - rh "QCCONV" "CLOUD MIXING RATIO FOR BMJ CUMULUS SCHEME" "kg kg-1" +state real qiconv ikj misc 1 - rh "QICONV" "ICE MIXING RATIO FOR BMJ CUMULUS SCHEME" "kg kg-1" state real RAINC ij misc 1 - rh01du "RAINC" "ACCUMULATED TOTAL CUMULUS PRECIPITATION" "mm" state real RAINSH ij misc 1 - rh01du "RAINSH" "ACCUMULATED SHALLOW CUMULUS PRECIPITATION" "mm" state real RAINNC ij misc 1 - rh01du "RAINNC" "ACCUMULATED TOTAL GRID SCALE PRECIPITATION" "mm" @@ -1531,7 +1533,9 @@ state integer STEPCU - misc 1 - r "S state real RTHRATEN ikj misc 1 - rd "RTHRATEN" "THETA TENDENCY DUE TO RADIATION" "K s-1" state real RTHRATENLW ikj misc 1 - r "RTHRATLW" "UNCOUPLED THETA TENDENCY DUE TO LONG WAVE RADIATION" "K s-1" state real RTHRATENSW ikj misc 1 - r "RTHRATSW" "UNCOUPLED THETA TENDENCY DUE TO SHORT WAVE RADIATION" "K s-1" -state real CLDFRA ikj misc 1 - rh "CLDFRA" "CLOUD FRACTION" "" +state real CLDFRA ikj misc 1 - rh "CLDFRA" "CLOUD FRACTION" "" +state real CONVCLD ij misc 1 - rh "CONVCLD" "BMJ CONVECTIVE CLOUD" "kg m-2" +state real CCLDFRA ikj misc 1 - rh "CCLDFRA" "CONVECTIVE CLOUD FRACTION" "" state real CLDFRA_OLD ikj misc 1 - r "CLDFRA_OLD" "previous time level cldfra" "" state real CLDFRA_BL ikj misc 1 - - "CLDFRA_BL" "CLOUD FRACTION pbl" "" state real CLDT ij misc 1 - - "CFRACT" "TOTAL CLOUD FRACTION" "" @@ -2322,6 +2326,7 @@ rconfig integer num_soil_cat namelist,physics 1 16 rconfig integer mp_zero_out namelist,physics 1 0 - "mp_zero_out" "microphysics fields set to zero 0=no action taken, 1=all fields but Qv, 2=all fields including Qv" "flag" rconfig real mp_zero_out_thresh namelist,physics 1 1.e-8 - "mp_zero_out_thresh" "minimum threshold for non-Qv moist fields, below are set to zero" "kg/kg" rconfig real seaice_threshold namelist,physics 1 100 h "seaice_threshold" "tsk below which which water points are set to sea ice for slab scheme" "K" +rconfig logical bmj_rad_feedback namelist,physics max_domains .false. - "if true include radiative effects of bmj clouds" "" rconfig integer sst_update namelist,physics 1 0 h "sst_update" "update sst from wrflowinp file 0=no, 1=yes" "" rconfig integer sst_skin namelist,physics 1 0 h "sst_skin" "calculate sst skin temperature 0=no, 1=yes" "" @@ -2896,7 +2901,7 @@ package mynnpblscheme3_dfi bl_pbl_physics_dfi==6 - dfi_scalar:df package nocuscheme cu_physics==0 - - package kfetascheme cu_physics==1 - state:w0avg -package bmjscheme cu_physics==2 - - +package bmjscheme cu_physics==2 - state:qcconv,qiconv package gfscheme cu_physics==3 - state:cugd_qvten,cugd_tten,cugd_qvtens,cugd_ttens,cugd_qcten,xmb_shallow,k22_shallow,kbcon_shallow,ktop_shallow package scalesasscheme cu_physics==4 - - package g3scheme cu_physics==5 - state:cugd_qvten,cugd_tten,cugd_qvtens,cugd_ttens,cugd_qcten,xmb_shallow,k22_shallow,kbcon_shallow,ktop_shallow diff --git a/dyn_em/module_first_rk_step_part1.F b/dyn_em/module_first_rk_step_part1.F index f2737e86b9..9fa152763a 100644 --- a/dyn_em/module_first_rk_step_part1.F +++ b/dyn_em/module_first_rk_step_part1.F @@ -347,6 +347,8 @@ SUBROUTINE first_rk_step_part1 ( grid , config_flags & & , CLDT=grid%cldt, ZNU=grid%znu & !ZCX- & , CLDFRA=grid%cldfra, CLDFRA_MP_ALL=grid%cldfra_mp_all & + & , CCLDFRA=grid%ccldfra & + & , QCCONV=grid%qcconv, QICONV=grid%qiconv & & , LRADIUS=grid%LRADIUS,IRADIUS=grid%IRADIUS & !BSINGH(01/22/2014) & , CLDFRA_DP=grid%cldfra_dp & ! ckay for subgrid cloud & , CLDFRA_SH=grid%cldfra_sh & @@ -1129,6 +1131,8 @@ SUBROUTINE first_rk_step_part1 ( grid , config_flags & ! Other arguments & ,ITIMESTEP=grid%itimestep ,DT=grid%dt ,DX=grid%dx & & ,CUDT=grid%cudt,CURR_SECS=curr_secs,ADAPT_STEP_FLAG=adapt_step_flag & + & ,CCLDFRA=grid%ccldfra ,CONVCLD=grid%convcld & + & ,QCCONV=grid%qcconv ,QICONV=grid%qiconv & & ,CUDTACTTIME=grid%cudtacttime & & ,RAINC=grid%rainc ,RAINCV=grid%raincv ,PRATEC=grid%pratec & & ,NCA=grid%nca & @@ -1225,6 +1229,7 @@ SUBROUTINE first_rk_step_part1 ( grid , config_flags & & ,lengath2d=grid%lengath2d & ! Selection flag & ,pgcon=config_flags%sas_pgcon & + & ,BMJ_RAD_FEEDBACK=config_flags%bmj_rad_feedback & & ,CU_PHYSICS=config_flags%cu_physics & & ,BL_PBL_PHYSICS=config_flags%bl_pbl_physics & & ,SF_SFCLAY_PHYSICS=config_flags%sf_sfclay_physics & diff --git a/dyn_em/start_em.F b/dyn_em/start_em.F index 068a818015..9b0860eb13 100644 --- a/dyn_em/start_em.F +++ b/dyn_em/start_em.F @@ -1035,15 +1035,16 @@ SUBROUTINE start_domain_em ( grid, allowed_to_read & grid%re_cloud_gsfc, grid%re_ice_gsfc, & ! Goddard grid%re_snow_gsfc, grid%re_graupel_gsfc, & ! Goddard grid%re_hail_gsfc, grid%re_rain_gsfc, & ! Goddard - grid%nca,grid%swrad_scat, & - grid%cldefi,grid%lowlyr, & - grid%mass_flux, & + grid%nca,grid%swrad_scat, & + grid%cldefi, grid%ccldfra, grid%convcld, & + grid%qcconv, grid%qiconv, grid%lowlyr, & + grid%mass_flux, & grid%rthften, grid%rqvften, & grid%cldfra, & #if (WRF_CHEM == 1) grid%cldfra_old, & #else - cldfra_old, & + cldfra_old, & #endif grid%glw,grid%gsw,grid%emiss,grid%embck, & grid%lu_index, & diff --git a/phys/module_cu_bmj.F b/phys/module_cu_bmj.F index a0e8d50dac..ebf6a8fb66 100644 --- a/phys/module_cu_bmj.F +++ b/phys/module_cu_bmj.F @@ -17,8 +17,8 @@ MODULE MODULE_CU_BMJ & ,EPSDN=1.05,EPSDT=0. & & ,EPSNTP=.0001,EPSNTT=.0001,EPSPR=1.E-7 & & ,EPSUP=1.00 & - & ,FR=1.00,FSL=0.85,FSS=0.85 & - & ,FUP=0. & + & ,FR=1.00,FSL=0.85,FSS=0.85,GAM=0.5,PEPS=1./2.5 & + & ,FUP=0.,FCC=5.00,CRMN=0.14,CRMX=85.0 & & ,PBM=13000.,PFRZ=15000.,PNO=1000. & & ,PONE=2500.,PQM=20000. & & ,PSH=20000.,PSHU=45000. & @@ -77,14 +77,14 @@ SUBROUTINE BMJDRV( & & IDS,IDE,JDS,JDE,KDS,KDE & & ,IMS,IME,JMS,JME,KMS,KME & & ,ITS,ITE,JTS,JTE,KTS,KTE & - & ,DT,ITIMESTEP,STEPCU & + & ,DT,ITIMESTEP,STEPCU,CCLDFRA,CONVCLD & & ,RAINCV,PRATEC,CUTOP,CUBOT,KPBL & - & ,TH,T,QV & + & ,TH,T,QV,QCCONV,QICONV,BMJ_RAD_FEEDBACK & & ,PINT,PMID,PI,RHO,DZ8W & & ,CP,R,ELWV,ELIV,G,TFRZ,D608 & & ,CLDEFI,LOWLYR,XLAND,CU_ACT_FLAG & ! optional - & ,RTHCUTEN, RQVCUTEN & + & ,RTHCUTEN,RQVCUTEN & & ) !----------------------------------------------------------------------- IMPLICIT NONE @@ -105,16 +105,21 @@ SUBROUTINE BMJDRV( & & ,PI,PINT & & ,PMID,QV & & ,RHO,T,TH +! + REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(INOUT) :: CCLDFRA & + ,QCCONV & + ,QICONV ! REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME) & & ,OPTIONAL & - & ,INTENT(INOUT) :: RQVCUTEN,RTHCUTEN + & ,INTENT(INOUT) :: RQVCUTEN,RTHCUTEN ! REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: CLDEFI,RAINCV, & - PRATEC + PRATEC,CONVCLD ! REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: CUBOT,CUTOP ! + LOGICAL,INTENT(IN) :: bmj_rad_feedback LOGICAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: CU_ACT_FLAG ! @@ -126,8 +131,11 @@ SUBROUTINE BMJDRV( & INTEGER :: LBOT,LPBL,LTOP ! REAL :: DTCNVC,LANDMASK,PCPCOL,PSFC,PTOP + REAL :: PAVG,PWCOL,DQCOL,DQCOLMIN + REAL :: CUMX,QCIS,RRP,PRRT,MCOL,MPVPR,BBOT,TTOP,FACTL ! REAL,DIMENSION(KTS:KTE) :: DPCOL,DQDT,DTDT,PCOL,QCOL,TCOL + REAL,DIMENSION(KTS:KTE) :: PVPR,JPR ! INTEGER :: I,J,K,KFLIP,LMH @@ -167,11 +175,20 @@ SUBROUTINE BMJDRV( & DO K=KTS,KTE DQDT(K)=0. DTDT(K)=0. + JPR(K)=0. + PVPR(K)=0. + QCCONV(I,K,J)=0. + QICONV(I,K,J)=0. + CCLDFRA(I,K,J)=0. ENDDO ! + DQCOL=0. + PWCOL=0. + PCPCOL=0. + DQCOLMIN=0. RAINCV(I,J)=0. PRATEC(I,J)=0. - PCPCOL=0. + CONVCLD(I,J)=0. PSFC=PINT(I,LOWLYR(I,J),J) PTOP=PINT(I,KTE+1,J) ! KTE+1=KME ! @@ -212,6 +229,7 @@ SUBROUTINE BMJDRV( & CALL BMJ(ITIMESTEP,I,J,DTCNVC,LMH,LANDMASK,CLDEFI(I,J) & & ,DPCOL,PCOL,QCOL,TCOL,PSFC,PTOP & & ,DQDT,DTDT,PCPCOL,LBOT,LTOP,LPBL & + & ,PWCOL,DQCOL,DQCOLMIN & & ,CP,R,ELWV,ELIV,G,TFRZ,D608 & & ,PRINT_DIAG & & ,IDS,IDE,JDS,JDE,KDS,KDE & @@ -242,6 +260,92 @@ SUBROUTINE BMJDRV( & ! CUTOP(I,J)=REAL(KTE+1-LTOP) CUBOT(I,J)=REAL(KTE+1-LBOT) +! + IF ( bmj_rad_feedback ) THEN +! + IF (DQCOL.GT.DQCOLMIN) THEN +! +!*** CONVECTIVE CLOUD FRACTION: BASED ON SLINGO (1987) WITH A POISSON +!*** VERTICAL PROFILE. PLEASE NOTE THAT THE BMJ PRECIPITATION RATE +!*** (PRATEC) HAS TO BE CONVERTED FROM MMS-1 TO MMDAY-1. +! + TTOP=0. + BBOT=0. + PAVG=0. + CUMX=0. + MPVPR=0. + FACTL=0. +! + PRRT=(PRATEC(I,J)*86400.0)/CRMN + RRP=0.8/(LOG(CRMX/CRMN)) + IF (PRRT=17 USE THE STERLING APPROXIMATION AS FOR N=17 IT GIVES A RELATIVE +!*** ERROR OF ~9.4x10E-8. +! + TTOP=CUTOP(I,J) + BBOT=CUBOT(I,J) + PAVG=1./(PEPS*3.)**2 + DO K=KTS,KTE + IF (K.GE.BBOT.AND.K.LE.TTOP) THEN + JPR(K)=(1./PEPS)*((PMID(I,K,J)-PMID(I,TTOP,J))/(PMID(I,BBOT,J)-PMID(I,TTOP,J))) + ELSE + JPR(K)=0.0 + ENDIF + ENDDO +! + DO K=KTS,KTE + PVPR(K)=0. + ENDDO + IF (JPR(BBOT).LT.17) THEN + DO K=BBOT,TTOP + PVPR(K)=(PAVG)**(JPR(K))/GAMMA(JPR(K)+1.) + ENDDO + ELSE + DO K=BBOT,TTOP + FACTL=JPR(K)*LOG(JPR(K))-JPR(K)+1./2.*LOG(2.*JPR(K)*ACOS(-1.))+ & + LOG(1.+1./(12.*JPR(K))+1./(288.*JPR(K)**2)) + PVPR(K)=EXP((JPR(K))*LOG(1.*PAVG)-FACTL) + ENDDO + ENDIF + MPVPR=MAXVAL(PVPR) + DO K=BBOT,TTOP + PVPR(K)=PVPR(K)/MPVPR + ENDDO + DO K=KTS,KTE + CCLDFRA(I,K,J)=CUMX*PVPR(K) + ENDDO +! +!*** COMPUTE THE CONVECTIVE CLOUD CONDENSATES (QCCONV,QICONV). PLEASE NOTE THAT +!*** THE EQUATION FOR QCIS IS VALID FOR PRRTs IN THE RANGE 10**(-7) TO 10**3. +! + QCIS=0. + MCOL=0. + DO K=CUBOT(I,J),CUTOP(I,J) + KFLIP=KTE+1-K + MCOL=RHO(I,K,J)*DZ8W(I,K,J)*QCOL(KFLIP)*CCLDFRA(I,K,J)+MCOL + ENDDO + CONVCLD(I,J)=PWCOL**GAM*(DQCOL-DQCOLMIN)**(1.-GAM) + QCIS=CONVCLD(I,J)/MCOL + DO K=KTS,KTE + KFLIP=KTE+1-K + IF (TCOL(KFLIP)>=TFRZ) THEN + QICONV(I,K,J)=0. + QCCONV(I,K,J)=(QCIS*QCOL(KFLIP)*CCLDFRA(I,K,J))/(1.-QCOL(KFLIP)) + ELSE + QICONV(I,K,J)=(QCIS*QCOL(KFLIP)*CCLDFRA(I,K,J))/(1.-QCOL(KFLIP)) + QCCONV(I,K,J)=0. + ENDIF + ENDDO +! + ENDIF +! + ENDIF ! !----------------------------------------------------------------------- !*** Begin debugging convection @@ -288,6 +392,7 @@ SUBROUTINE BMJ & & (ITIMESTEP,I,J,DTCNVC,LMH,SM,CLDEFI & & ,DPRS,PRSMID,Q,T,PSFC,PT & & ,DQDT,DTDT,PCPCOL,LBOT,LTOP,LPBL & + & ,PWCOL,DQCOL,DQCOLMIN & & ,CP,R,ELWV,ELIV,G,TFRZ,D608 & & ,PRINT_DIAG & & ,IDS,IDE,JDS,JDE,KDS,KDE & @@ -309,7 +414,7 @@ SUBROUTINE BMJ & ! REAL,DIMENSION(KTS:KTE),INTENT(IN) :: DPRS,PRSMID,Q,T ! - REAL,INTENT(INOUT) :: CLDEFI,PCPCOL + REAL,INTENT(INOUT) :: CLDEFI,PCPCOL,PWCOL,DQCOL,DQCOLMIN ! REAL,DIMENSION(KTS:KTE),INTENT(INOUT) :: DQDT,DTDT ! @@ -348,7 +453,7 @@ SUBROUTINE BMJ & & ,PART1,PART2,PART3,PBOT,PBOTFC,PBTK & & ,PK0,PKB,PKL,PKT,PKXXXX,PKXXXY & & ,PLMH,PELEVFC,PBTmx,plo,POTSUM,PP1,PPK,PRECK & - & ,PRESK,PSP,PSUM,PTHRS,PTOP,PTPK,PUP & + & ,PRWD,PDQD,PRESK,PSP,PSUM,PTHRS,PTOP,PTPK,PUP & & ,QBT,QKL,QNEW,QOTSUM,QQ1,QQK,QRFKL & & ,QRFTP,QSP,QSUM,QUP,RDP0T & & ,RDPSUM,RDTCNVC,RHH,RHL,RHMAX,ROTSUM,RTBAR,RHAVG & @@ -406,7 +511,10 @@ SUBROUTINE BMJ & !-----------------------------PREPARATIONS------------------------------ !----------------------------------------------------------------------- LBOT=LMH + DQCOL=0. + PWCOL=0. PCPCOL=0. + DQCOLMIN=0. TREF(KTS)=T(KTS) ! DO L=KTS,LMH @@ -799,7 +907,8 @@ SUBROUTINE BMJ & LTOP=KTE PBOT=PRSMID(LMH) PTOP=PBOT - CLDEFI=AVGEFI*SM+STEFI*(1.-SM) +! CLDEFI=AVGEFI*SM+STEFI*(1.-SM) + CLDEFI=(EFIMN-0.2)*SM+(1.+0.2)*(1.-SM) GO TO 800 ENDIF ! @@ -812,6 +921,7 @@ SUBROUTINE BMJ & DEEP=.TRUE. ELSE SHALLOW=.TRUE. + CLDEFI=(EFIMN-0.1)*SM+(1.+0.1)*(1.-SM) GO TO 600 ENDIF ! @@ -1005,10 +1115,13 @@ SUBROUTINE BMJ & DO L=LTOP,LB SUMDE=((TK(L)-TREFK(L))*CP+(QK(L)-QREFK(L))*EL(L))*DPRS(L) & & +SUMDE + DHDT=(QREFK(L)*A23M4L/((TREFK(L)*APEK(L)/APESK(L))-A4)**2+CP)*DPRS(L) & + & +DHDT SUMDP=SUMDP+DPRS(L) ENDDO ! HCORR=SUMDE/(SUMDP-DPRS(LTOP)) + DHDT=DHDT/(SUMDP-DPRS(LTOP)) LCOR=LTOP+1 !*** !*** FIND LQM @@ -1030,8 +1143,6 @@ SUBROUTINE BMJ & !*** BELOW LQM CORRECT BOTH TEMPERATURE AND MOISTURE !*** DO L=LCOR,LB - TSKL=TREFK(L)*APEK(L)/APESK(L) - DHDT=QREFK(L)*A23M4L/(TSKL-A4)**2+CP TREFK(L)=HCORR/DHDT+TREFK(L) THSKL=TREFK(L)*APEK(L) QREFK(L)=PQ0/PSK(L)*EXP(A2*(THSKL-A3*APESK(L)) & @@ -1046,6 +1157,8 @@ SUBROUTINE BMJ & !----------------------------------------------------------------------- AVRGT=0. PRECK=0. + PDQD=0. + PRWD=0. DSQ=0. DST=0. ! @@ -1059,6 +1172,8 @@ SUBROUTINE BMJ & DSQ=DIFQL*EL(L)*DPOT+DSQ AVRGT=AVRGTL*DPRS(L)+AVRGT PRECK=DIFTL*DPRS(L)+PRECK + PDQD=(QK(L)-QREFK(L))*DPRS(L)+PDQD + PRWD=QK(L)*DPRS(L)+PRWD DIFT(L)=DIFTL DIFQ(L)=DIFQL ENDDO @@ -1096,6 +1211,9 @@ SUBROUTINE BMJ & ! CUP=PRECK*CPRLG PCPCOL=CUP + DQCOL=PDQD/G + PWCOL=PRWD/G + DQCOLMIN=(CRMN*TREL)/(FEFI*86400.) ! DO L=LTOP,LB DTDT(L)=DIFT(L)*FEFI*RDTCNVC @@ -1120,7 +1238,8 @@ SUBROUTINE BMJ & ! ENDIF ! ! CLDEFI=AVGEFI - CLDEFI=EFIMN*SM+STEFI*(1.-SM) +! CLDEFI=EFIMN*SM+STEFI*(1.-SM) + CLDEFI=(EFIMN-0.1)*SM+(1.+0.1)*(1.-SM) !*** !*** SEARCH FOR SHALLOW CLOUD TOP !*** @@ -1689,8 +1808,8 @@ END SUBROUTINE TTBLEX !----------------------------------------------------------------------- !----------------------------------------------------------------------- SUBROUTINE BMJINIT(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN & - & ,CLDEFI,LOWLYR,CP,RD,RESTART & - & ,ALLOWED_TO_READ & + & ,CLDEFI,CCLDFRA,CONVCLD,QCCONV,QICONV,LOWLYR,CP & + & ,RD,RESTART,ALLOWED_TO_READ & & ,IDS,IDE,JDS,JDE,KDS,KDE & & ,IMS,IME,JMS,JME,KMS,KME & & ,ITS,ITE,JTS,JTE,KTS,KTE) @@ -1708,9 +1827,12 @@ SUBROUTINE BMJINIT(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN & & RTHCUTEN & & ,RQVCUTEN & & ,RQCCUTEN & - & ,RQRCUTEN + & ,RQRCUTEN & + & ,CCLDFRA & + & ,QCCONV & + & ,QICONV ! - REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: CLDEFI + REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: CLDEFI,CONVCLD INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: LOWLYR ! @@ -1738,6 +1860,9 @@ SUBROUTINE BMJINIT(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN & DO J=JTS,JTF DO K=KTS,KTF DO I=ITS,ITF + QICONV(I,K,J)=0. + QCCONV(I,K,J)=0. + CCLDFRA(I,K,J)=0. RTHCUTEN(I,K,J)=0. RQVCUTEN(I,K,J)=0. RQCCUTEN(I,K,J)=0. @@ -1748,6 +1873,7 @@ SUBROUTINE BMJINIT(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN & ! DO J=JTS,JTF DO I=ITS,ITF + CONVCLD(I,J)=0. CLDEFI(I,J)=AVGEFI ENDDO ENDDO diff --git a/phys/module_cumulus_driver.F b/phys/module_cumulus_driver.F index e83133a095..8b2ac25b0f 100644 --- a/phys/module_cumulus_driver.F +++ b/phys/module_cumulus_driver.F @@ -16,6 +16,8 @@ SUBROUTINE cumulus_driver(grid & ! --Other arguments ,itimestep,dt,dx,cudt,curr_secs,adapt_step_flag & ,cudtacttime & + ,ccldfra,convcld,qcconv,qiconv & + ,bmj_rad_feedback & ,rainc,raincv,pratec,nca & ,cldfra_dp,cldfra_sh,w_up & !ckay for subgrid cloud ,udr_kf,ddr_kf,uer_kf,der_kf,timec_kf,kf_edrates & !kf_edrates @@ -243,6 +245,8 @@ SUBROUTINE cumulus_driver(grid & ! Qr rain water mixing ratio (kg/kg) ! Qi cloud ice mixing ratio (kg/kg) ! Qs snow mixing ratio (kg/kg) +! QCCONV convective cloud mixing ratio (kg/kg) +! QICONV convective ice mixing ratio (kg/kg) !----------------------------------------------------------------- !-- DT time step (second) !-- CUDT cumulus time step (minute) @@ -310,6 +314,8 @@ SUBROUTINE cumulus_driver(grid & !-- kfeta_trigger namelist for KF trigger (=1, default; =2, moisture-advection-dependent trigger) !-- nsas_dx_factor namelist for NSAS deep scheme to have some dependency on grid sizes !-- rho density (kg/m^3) +!-- CONVCLD Convective cloud (for BMJ scheme) (kg/m^2) +!-- CCLDFRA convective cloud fraction (for BMJ scheme) !-- CLDEFI precipitation efficiency (for BMJ scheme) (dimensionless) !-- STEPCU # of fundamental timesteps between convection calls !-- XLAND land-sea mask (1.0 for land; 2.0 for water) @@ -440,7 +446,10 @@ SUBROUTINE cumulus_driver(grid & REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), & INTENT(INOUT) :: & - W0AVG + W0AVG & + , CCLDFRA & + , QCCONV & + , QICONV !ckay REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), & INTENT(INOUT) :: cldfra_dp & @@ -481,7 +490,8 @@ SUBROUTINE cumulus_driver(grid & , NCA & , HTOP & , HBOT & - , CLDEFI + , CLDEFI & + , CONVCLD #if (EM_CORE == 1) REAL, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT) :: akpbl !CuP, wig 6-Oct-2006 testing !BSINGH - For WRFCuP scheme #endif @@ -516,6 +526,7 @@ SUBROUTINE cumulus_driver(grid & REAL, INTENT(IN ),OPTIONAL :: CUDT REAL, INTENT(IN ),OPTIONAL :: CURR_SECS LOGICAL,INTENT(IN ),OPTIONAL :: adapt_step_flag + LOGICAL,INTENT(IN ) :: bmj_rad_feedback REAL, INTENT(INOUT ),OPTIONAL :: cudtacttime REAL :: cudt_pass, curr_secs_pass,cudtacttime_pass LOGICAL :: adapt_step_flag_pass @@ -973,6 +984,9 @@ SUBROUTINE cumulus_driver(grid & ,LOWLYR=lowlyr ,XLAND=xland & ,CU_ACT_FLAG=cu_act_flag & ,QV=qv_curr & + ,CCLDFRA=ccldfra, CONVCLD=convcld & + ,QCCONV=qcconv, QICONV=qiconv & + ,BMJ_RAD_FEEDBACK=bmj_rad_feedback & ,IDS=ids,IDE=ide,JDS=jds,JDE=jde,KDS=kds,KDE=kde & ,IMS=ims,IME=ime,JMS=jms,JME=jme,KMS=kms,KME=kme & ,ITS=its,ITE=ite,JTS=jts,JTE=jte,KTS=kts,KTE=kte & diff --git a/phys/module_physics_init.F b/phys/module_physics_init.F index db727f1201..7e1350028e 100644 --- a/phys/module_physics_init.F +++ b/phys/module_physics_init.F @@ -55,7 +55,8 @@ SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, & re_rain_gsfc, & ! Goddard #endif NCA,swrad_scat, & - CLDEFI,LOWLYR, & + CLDEFI, CCLDFRA, CONVCLD, QCCONV, & + QICONV, LOWLYR, & MASS_FLUX, & RTHFTEN, RQVFTEN, & CLDFRA,CLDFRA_OLD,GLW,GSW,EMISS,EMBCK, & !EMBCK new @@ -435,6 +436,14 @@ SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, & INTEGER, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: LOWLYR +! bmj + + REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: & + CCLDFRA, QCCONV, QICONV + + REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: & + CONVCLD + !pbl ! soil layer @@ -1414,8 +1423,8 @@ SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, & CALL cu_init(DX,STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, & RQVCUTEN,RQRCUTEN,RQCCUTEN,RQSCUTEN,RQICUTEN, & NCA,RAINC,RAINCV,W0AVG,config_flags,restart, & - CLDEFI,LOWLYR,MASS_FLUX, & - RTHFTEN, RQVFTEN, & + CLDEFI,CCLDFRA,CONVCLD,QCCONV,QICONV,LOWLYR, & + MASS_FLUX,RTHFTEN,RQVFTEN, & #if ( EM_CORE == 1 ) !BSINGH - For WRFCuP Scheme cupflag,cldfra_cup,cldfratend_cup, & !CuP, wig 18-Sep-2006 @@ -3549,8 +3558,8 @@ END SUBROUTINE bl_init SUBROUTINE cu_init(DX,STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, & RQVCUTEN,RQRCUTEN,RQCCUTEN,RQSCUTEN,RQICUTEN,& NCA,RAINC,RAINCV,W0AVG,config_flags,restart, & - CLDEFI,LOWLYR,MASS_FLUX, & - RTHFTEN, RQVFTEN, & + CLDEFI,CCLDFRA,CONVCLD,QCCONV,QICONV,LOWLYR, & + MASS_FLUX, RTHFTEN, RQVFTEN, & #if ( EM_CORE == 1 ) !BSINGH - For WRFCuP Scheme cupflag,cldfra_cup,cldfratend_cup, & !CuP, wig 18-Sep-2006 @@ -3603,8 +3612,8 @@ SUBROUTINE cu_init(DX,STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, & INTEGER , INTENT(INOUT) :: STEPCU REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: & - RUCUTEN, RVCUTEN, RTHCUTEN, & - RQVCUTEN, RQCCUTEN, RQRCUTEN, RQICUTEN, RQSCUTEN + RUCUTEN, RVCUTEN, RTHCUTEN, RQVCUTEN, RQCCUTEN, & + RQRCUTEN, RQICUTEN, RQSCUTEN, CCLDFRA, QCCONV, QICONV #if ( EM_CORE == 1 ) !BSINGH - For WRFCuP Scheme REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: & @@ -3623,6 +3632,8 @@ SUBROUTINE cu_init(DX,STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, & REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: RAINC, RAINCV + REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: CONVCLD + REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: CLDEFI #if ( EM_CORE == 1 ) !BSINGH - For WRFCuP Scheme @@ -3678,8 +3689,8 @@ SUBROUTINE cu_init(DX,STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, & CASE (BMJSCHEME) CALL bmjinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, & - CLDEFI,LOWLYR,cp,r_d,restart, & - allowed_to_read , & + CLDEFI,CCLDFRA,CONVCLD,QCCONV,QICONV, & + LOWLYR,cp,r_d,restart,allowed_to_read, & ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & its, ite, jts, jte, kts, kte ) diff --git a/phys/module_ra_rrtm.F b/phys/module_ra_rrtm.F index 38830222c4..177004a51b 100644 --- a/phys/module_ra_rrtm.F +++ b/phys/module_ra_rrtm.F @@ -1738,8 +1738,10 @@ SUBROUTINE RRTMLWRAD( & ,ims,ime, jms,jme, kms,kme & ,its,ite, jts,jte, kts,kte & ,qv3d,qc3d,qr3d & - ,qi3d,qs3d,qg3d,cldfra3d & + ,qi3d,qs3d,qg3d,cldfra3d, ccldfra & + ,qcconv,qiconv & ,f_qv,f_qc,f_qr,f_qi,f_qs,f_qg & + ,cu_physics & !ccc Added for time-varying trace gases. ,yr, julian ) !ccc @@ -1757,6 +1759,7 @@ SUBROUTINE RRTMLWRAD( & its,ite, jts,jte, kts,kte INTEGER, INTENT(IN ) :: ICLOUD + INTEGER, INTENT(IN ) :: cu_physics ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , & INTENT(IN ) :: dz8w, & @@ -1797,7 +1800,10 @@ SUBROUTINE RRTMLWRAD( & QR3D, & QI3D, & QS3D, & - QG3D + QG3D, & + QICONV, & + QCCONV, & + CCLDFRA LOGICAL, OPTIONAL, INTENT(IN ) :: F_QV,F_QC,F_QR,F_QI,F_QS,F_QG @@ -1819,6 +1825,9 @@ SUBROUTINE RRTMLWRAD( & QG1D ! REAL :: TSFC,GLW0,OLR0,EMISS0 + + REAL :: ITRMX, ITRMN + ! INTEGER:: i,j,K,NK LOGICAL :: predicate @@ -1906,10 +1915,21 @@ SUBROUTINE RRTMLWRAD( & ENDDO IF (ICLOUD .ne. 0) THEN + +! The overlap between the convective and large-scale cloud fractions is +! estimated as the average of the maximum and minimum possible overlaps +! between the two. + IF ( PRESENT( CLDFRA3D ) ) THEN DO K=kts,kte NK=kme-1-K+kms - CLDFRA1D(k)=CLDFRA3D(I,NK,J) + IF ( cu_physics .eq. 2 ) THEN + ITRMX=MIN(CLDFRA3D(I,NK,J),CCLDFRA(I,NK,J)) + ITRMN=MAX(0.,CLDFRA3D(I,NK,J)+CCLDFRA(I,NK,J)-1.) + CLDFRA1D(K)=CLDFRA3D(I,NK,J)+CCLDFRA(I,NK,J)-0.5*(ITRMX+ITRMN) + ELSE + CLDFRA1D(K)=CLDFRA3D(I,NK,J) + ENDIF ENDDO ENDIF @@ -1917,7 +1937,11 @@ SUBROUTINE RRTMLWRAD( & IF ( F_QC) THEN DO K=kts,kte NK=kme-1-K+kms - QC1D(K)=QC3D(I,NK,J) + IF ( cu_physics .eq. 2 ) THEN + QC1D(K)=QC3D(I,NK,J)+QCCONV(I,NK,J) + ELSE + QC1D(K)=QC3D(I,NK,J) + ENDIF QC1D(K)=max(0.,QC1D(K)) ENDDO ENDIF @@ -1945,8 +1969,14 @@ SUBROUTINE RRTMLWRAD( & IF (.NOT. predicate .and. .not. warm_rain) THEN DO K=kts,kte + NK=kme-1-K+kms IF (T1D(K) .lt. 273.15) THEN QI1D(K)=QC1D(K) + IF ( cu_physics .eq. 2 ) THEN + QI1D(K)=QI1D(K)+QICONV(I,NK,J) + ELSE + QI1D(K)=QI1D(K) + ENDIF QS1D(K)=QR1D(K) QC1D(K)=0. QR1D(K)=0. @@ -1957,7 +1987,11 @@ SUBROUTINE RRTMLWRAD( & IF (PRESENT(F_QI) .AND. PRESENT(QI3D)) THEN DO K=kts,kte NK=kme-1-K+kms - QI1D(K)=QI3D(I,NK,J) + IF ( cu_physics .eq. 2 ) THEN + QI1D(K)=QI3D(I,NK,J)+QICONV(I,NK,J) + ELSE + QI1D(K)=QI3D(I,NK,J) + ENDIF QI1D(K)=max(0.,QI1D(K)) ENDDO ENDIF diff --git a/phys/module_ra_rrtmg_lw.F b/phys/module_ra_rrtmg_lw.F index 65cbfb8116..b6a0850efc 100644 --- a/phys/module_ra_rrtmg_lw.F +++ b/phys/module_ra_rrtmg_lw.F @@ -11487,7 +11487,7 @@ SUBROUTINE RRTMG_LWRAD( & glw, olr, lwcf, emiss, & p8w, p3d, pi3d, & dz8w, tsk, t3d, t8w, rho3d, r, g, & - icloud, warm_rain, cldfra3d, & + icloud, warm_rain, cldfra3d, ccldfra, & cldovrlp, & lradius,iradius, & is_cammgmp_used, & @@ -11495,6 +11495,7 @@ SUBROUTINE RRTMG_LWRAD( & xland, xice, snow, & qv3d, qc3d, qr3d, & qi3d, qs3d, qg3d, & + qcconv,qiconv, & o3input, o33d, & f_qv, f_qc, f_qr, f_qi, f_qs, f_qg, & re_cloud, re_ice, re_snow, & ! G. Thompson @@ -11510,6 +11511,7 @@ SUBROUTINE RRTMG_LWRAD( & !ccc added for time varying gases. yr,julian, & !ccc + cu_physics, & mp_physics, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & @@ -11530,6 +11532,7 @@ SUBROUTINE RRTMG_LWRAD( & its,ite, jts,jte, kts,kte INTEGER, INTENT(IN ) :: ICLOUD + INTEGER, INTENT(IN ) :: cu_physics INTEGER, INTENT(IN ) :: MP_PHYSICS ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , & @@ -11580,7 +11583,10 @@ SUBROUTINE RRTMG_LWRAD( & QI3D, & QS3D, & QG3D, & - QNDROP3D + QNDROP3D, & + QICONV, & + QCCONV, & + CCLDFRA !..Added by G. Thompson to couple cloud physics effective radii. REAL, DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(IN):: & @@ -11729,6 +11735,9 @@ SUBROUTINE RRTMG_LWRAD( & ps real :: ro, & dz + + real :: ITRMX, & + ITRMN real:: snow_mass_factor !..We can use message interface regardless of what options are running, @@ -11949,16 +11958,31 @@ SUBROUTINE RRTMG_LWRAD( & ! moist variables IF (ICLOUD .ne. 0) THEN + +! The overlap between the convective and large-scale cloud fractions is +! estimated as the average of the maximum and minimum possible overlaps +! between the two. + IF ( PRESENT( CLDFRA3D ) ) THEN DO K=kts,kte - CLDFRA1D(k)=CLDFRA3D(I,K,J) + IF ( cu_physics .eq. 2 ) THEN + ITRMX=MIN(CLDFRA3D(I,K,J),CCLDFRA(I,K,J)) + ITRMN=MAX(0.,CLDFRA3D(I,K,J)+CCLDFRA(I,K,J)-1.) + CLDFRA1D(K)=CLDFRA3D(I,K,J)+CCLDFRA(I,K,J)-0.5*(ITRMX+ITRMN) + ELSE + CLDFRA1D(K)=CLDFRA3D(I,K,J) + ENDIF ENDDO ENDIF IF (PRESENT(F_QC) .AND. PRESENT(QC3D)) THEN IF ( F_QC) THEN DO K=kts,kte - QC1D(K)=QC3D(I,K,J) + IF ( cu_physics .eq. 2 ) THEN + QC1D(K)=QC3D(I,K,J)+QCCONV(I,K,J) + ELSE + QC1D(K)=QC3D(I,K,J) + ENDIF QC1D(K)=max(0.,QC1D(K)) ENDDO ENDIF @@ -11996,6 +12020,11 @@ SUBROUTINE RRTMG_LWRAD( & DO K=kts,kte IF (T1D(K) .lt. 273.15) THEN QI1D(K)=QC1D(K) + IF ( cu_physics .eq. 2 ) THEN + QI1D(K)=QI1D(K)+QICONV(I,K,J) + ELSE + QI1D(K)=QI1D(K) + ENDIF QS1D(K)=QR1D(K) QC1D(K)=0. QR1D(K)=0. @@ -12006,7 +12035,11 @@ SUBROUTINE RRTMG_LWRAD( & IF (PRESENT(F_QI) .AND. PRESENT(QI3D)) THEN IF (F_QI) THEN DO K=kts,kte - QI1D(K)=QI3D(I,K,J) + IF ( cu_physics .eq. 2 ) THEN + QI1D(K)=QI3D(I,K,J)+QICONV(I,K,J) + ELSE + QI1D(K)=QI3D(I,K,J) + ENDIF QI1D(K)=max(0.,QI1D(K)) ENDDO ENDIF @@ -12036,7 +12069,11 @@ SUBROUTINE RRTMG_LWRAD( & DO K=kts,kte qi1d(k) = 0.1*qs3d(i,k,j) qs1d(k) = 0.9*qs3d(i,k,j) - qc1d(k) = qc3d(i,k,j) + IF ( cu_physics .eq. 2 ) THEN + qc1d(k) = qc3d(i,k,j)+qcconv(i,k,j) + ELSE + qc1d(k) = qc3d(i,k,j) + ENDIF qi1d(k) = max(0.,qi1d(k)) qc1d(k) = max(0.,qc1d(k)) ENDDO @@ -12055,9 +12092,17 @@ SUBROUTINE RRTMG_LWRAD( & mp_physics == FER_MP_HIRES_ADVECT) THEN #endif DO K=kts,kte - qi1d(k) = qi3d(i,k,j) + IF ( cu_physics .eq. 2 ) THEN + qi1d(k) = qi3d(i,k,j)+qiconv(i,k,j) + ELSE + qi1d(k) = qi3d(i,k,j) + ENDIF qs1d(k) = 0.0 - qc1d(k) = qc3d(i,k,j) + IF ( cu_physics .eq. 2 ) THEN + qc1d(k) = qc3d(i,k,j)+qcconv(i,k,j) + ELSE + qc1d(k) = qc3d(i,k,j) + ENDIF qi1d(k) = max(0.,qi1d(k)) qc1d(k) = max(0.,qc1d(k)) ENDDO diff --git a/phys/module_ra_rrtmg_lwf.F b/phys/module_ra_rrtmg_lwf.F index 806cc65aa2..c3db7a8eac 100644 --- a/phys/module_ra_rrtmg_lwf.F +++ b/phys/module_ra_rrtmg_lwf.F @@ -15252,13 +15252,14 @@ SUBROUTINE RRTMG_LWRAD_FAST( & glw, olr, lwcf, emiss, & p8w, p3d, pi3d, & dz8w, tsk, t3d, t8w, rho3d, r, g, & - icloud, warm_rain, cldfra3d, & + icloud, warm_rain, cldfra3d, ccldfra, & lradius,iradius, & is_cammgmp_used, & f_ice_phy, f_rain_phy, & xland, xice, snow, & qv3d, qc3d, qr3d, & qi3d, qs3d, qg3d, & + qcconv,qiconv, & o3input, o33d, & f_qv, f_qc, f_qr, f_qi, f_qs, f_qg, & re_cloud, re_ice, re_snow, & ! G. Thompson @@ -15277,7 +15278,8 @@ SUBROUTINE RRTMG_LWRAD_FAST( & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte, & - lwupflx, lwupflxc, lwdnflx, lwdnflxc & + lwupflx, lwupflxc, lwdnflx, lwdnflxc, & + cu_physics & ) !------------------------------------------------------------------ !ccc To use clWRF time varying trace gases @@ -15293,6 +15295,7 @@ SUBROUTINE RRTMG_LWRAD_FAST( & its,ite, jts,jte, kts,kte INTEGER, INTENT(IN ) :: ICLOUD + INTEGER, INTENT(IN ) :: cu_physics ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , & INTENT(IN ) :: dz8w, & @@ -15342,7 +15345,10 @@ SUBROUTINE RRTMG_LWRAD_FAST( & QI3D, & QS3D, & QG3D, & - QNDROP3D + QNDROP3D, & + QICONV, & + QCCONV, & + CCLDFRA !..Added by G. Thompson to couple cloud physics effective radii. REAL, DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(IN):: & @@ -15481,6 +15487,9 @@ SUBROUTINE RRTMG_LWRAD_FAST( & ps real :: ro, & dz + + real :: ITRMX, & + ITRMN real:: snow_mass_factor !..We can use message interface regardless of what options are running, @@ -15704,16 +15713,31 @@ SUBROUTINE RRTMG_LWRAD_FAST( & ! moist variables IF (ICLOUD .ne. 0) THEN + +! The overlap between the convective and large-scale cloud fractions is +! estimated as the average of the maximum and minimum possible overlaps +! between the two. + IF ( PRESENT( CLDFRA3D ) ) THEN DO K=kts,kte - CLDFRA1D(k)=CLDFRA3D(I,K,J) + IF ( cu_physics .eq. 2 ) THEN + ITRMX=MIN(CLDFRA3D(I,K,J),CCLDFRA(I,K,J)) + ITRMN=MAX(0.,CLDFRA3D(I,K,J)+CCLDFRA(I,K,J)-1.) + CLDFRA1D(K)=CLDFRA3D(I,K,J)+CCLDFRA(I,K,J)-0.5*(ITRMX+ITRMN) + ELSE + CLDFRA1D(K)=CLDFRA3D(I,K,J) + ENDIF ENDDO ENDIF IF (PRESENT(F_QC) .AND. PRESENT(QC3D)) THEN IF ( F_QC) THEN DO K=kts,kte - QC1D(K)=QC3D(I,K,J) + IF ( cu_physics .eq. 2 ) THEN + QC1D(K)=QC3D(I,K,J)+QCCONV(I,K,J) + ELSE + QC1D(K)=QC3D(I,K,J) + ENDIF QC1D(K)=max(0.,QC1D(K)) ENDDO ENDIF @@ -15751,6 +15775,11 @@ SUBROUTINE RRTMG_LWRAD_FAST( & DO K=kts,kte IF (T1D(K) .lt. 273.15) THEN QI1D(K)=QC1D(K) + IF ( cu_physics .eq. 2 ) THEN + QI1D(K)=QI1D(K)+QICONV(I,K,J) + ELSE + QI1D(K)=QI1D(K) + ENDIF QS1D(K)=QR1D(K) QC1D(K)=0. QR1D(K)=0. @@ -15761,7 +15790,11 @@ SUBROUTINE RRTMG_LWRAD_FAST( & IF (PRESENT(F_QI) .AND. PRESENT(QI3D)) THEN IF (F_QI) THEN DO K=kts,kte - QI1D(K)=QI3D(I,K,J) + IF ( cu_physics .eq. 2 ) THEN + QI1D(K)=QI3D(I,K,J)+QICONV(I,K,J) + ELSE + QI1D(K)=QI3D(I,K,J) + ENDIF QI1D(K)=max(0.,QI1D(K)) ENDDO ENDIF @@ -15791,7 +15824,11 @@ SUBROUTINE RRTMG_LWRAD_FAST( & DO K=kts,kte qi1d(k) = 0.1*qs3d(i,k,j) qs1d(k) = 0.9*qs3d(i,k,j) - qc1d(k) = qc3d(i,k,j) + IF ( cu_physics .eq. 2 ) THEN + qc1d(k) = qc3d(i,k,j)+qcconv(i,k,j) + ELSE + qc1d(k) = qc3d(i,k,j) + ENDIF qi1d(k) = max(0.,qi1d(k)) qc1d(k) = max(0.,qc1d(k)) ENDDO diff --git a/phys/module_ra_rrtmg_sw.F b/phys/module_ra_rrtmg_sw.F index af482b6fa8..17c0b3de06 100644 --- a/phys/module_ra_rrtmg_sw.F +++ b/phys/module_ra_rrtmg_sw.F @@ -9925,7 +9925,7 @@ SUBROUTINE RRTMG_SWRAD( & coszr, julday, solcon, & albedo, t3d, t8w, tsk, & p3d, p8w, pi3d, rho3d, & - dz8w, cldfra3d, lradius, iradius, & + dz8w, cldfra3d, ccldfra, lradius, iradius, & is_cammgmp_used, r, g, & re_cloud,re_ice,re_snow, & has_reqc,has_reqi,has_reqs, & @@ -9935,6 +9935,7 @@ SUBROUTINE RRTMG_SWRAD( & xland, xice, snow, & qv3d, qc3d, qr3d, & qi3d, qs3d, qg3d, & + qcconv,qiconv, & o3input, o33d, & aer_opt, aerod, no_src, & alswvisdir, alswvisdif, & !Zhenxin ssib alb comp (06/20/2011) @@ -9956,6 +9957,7 @@ SUBROUTINE RRTMG_SWRAD( & its,ite, jts,jte, kts,kte, & swupflx, swupflxc, & swdnflx, swdnflxc, & + cu_physics, & tauaer3d_sw,ssaaer3d_sw,asyaer3d_sw, & ! jararias 2013/11 swddir, swddni, swddif, & ! jararias 2013/08 swdownc, swddnic, swddirc, & ! PAJ @@ -9972,6 +9974,7 @@ SUBROUTINE RRTMG_SWRAD( & its,ite, jts,jte, kts,kte INTEGER, INTENT(IN ) :: ICLOUD + INTEGER, INTENT(IN ) :: cu_physics INTEGER, INTENT(IN ) :: MP_PHYSICS ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , & @@ -10055,7 +10058,10 @@ SUBROUTINE RRTMG_SWRAD( & QI3D, & QS3D, & QG3D, & - QNDROP3D + QNDROP3D, & + QICONV, & + QCCONV, & + CCLDFRA !..Added by G. Thompson to couple cloud physics effective radii. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN):: & @@ -10235,6 +10241,9 @@ SUBROUTINE RRTMG_SWRAD( & snow_mass_factor integer :: dyofyr + real :: ITRMX, & + ITRMN + integer:: idx_rei real:: corr @@ -10399,16 +10408,31 @@ SUBROUTINE RRTMG_SWRAD( & ! moist variables IF (ICLOUD .ne. 0) THEN + +! The overlap between the convective and large-scale cloud fractions is +! estimated as the average of the maximum and minimum possible overlaps +! between the two. + IF ( PRESENT( CLDFRA3D ) ) THEN DO K=kts,kte - CLDFRA1D(k)=CLDFRA3D(I,K,J) + IF ( cu_physics .eq. 2 ) THEN + ITRMX=MIN(CLDFRA3D(I,K,J),CCLDFRA(I,K,J)) + ITRMN=MAX(0.,CLDFRA3D(I,K,J)+CCLDFRA(I,K,J)-1.) + CLDFRA1D(K)=CLDFRA3D(I,K,J)+CCLDFRA(I,K,J)-0.5*(ITRMX+ITRMN) + ELSE + CLDFRA1D(K)=CLDFRA3D(I,K,J) + ENDIF ENDDO ENDIF IF (PRESENT(F_QC) .AND. PRESENT(QC3D)) THEN IF ( F_QC) THEN DO K=kts,kte - QC1D(K)=QC3D(I,K,J) + IF ( cu_physics .eq. 2 ) THEN + QC1D(K)=QC3D(I,K,J)+QCCONV(I,K,J) + ELSE + QC1D(K)=QC3D(I,K,J) + ENDIF QC1D(K)=max(0.,QC1D(K)) ENDDO ENDIF @@ -10446,6 +10470,11 @@ SUBROUTINE RRTMG_SWRAD( & DO K=kts,kte IF (T1D(K) .lt. 273.15) THEN QI1D(K)=QC1D(K) + IF ( cu_physics .eq. 2 ) THEN + QI1D(K)=QI1D(K)+QICONV(I,K,J) + ELSE + QI1D(K)=QI1D(K) + ENDIF QS1D(K)=QR1D(K) QC1D(K)=0. QR1D(K)=0. @@ -10456,7 +10485,11 @@ SUBROUTINE RRTMG_SWRAD( & IF (PRESENT(F_QI) .AND. PRESENT(QI3D)) THEN IF (F_QI) THEN DO K=kts,kte - QI1D(K)=QI3D(I,K,J) + IF ( cu_physics .eq. 2 ) THEN + QI1D(K)=QI3D(I,K,J)+QICONV(I,K,J) + ELSE + QI1D(K)=QI3D(I,K,J) + ENDIF QI1D(K)=max(0.,QI1D(K)) ENDDO ENDIF @@ -10486,7 +10519,11 @@ SUBROUTINE RRTMG_SWRAD( & DO K=kts,kte qi1d(k) = 0.1*qs3d(i,k,j) qs1d(k) = 0.9*qs3d(i,k,j) - qc1d(k) = qc3d(i,k,j) + IF ( cu_physics .eq. 2 ) THEN + qc1d(k) = qc3d(i,k,j)+qcconv(i,k,j) + ELSE + qc1d(k) = qc3d(i,k,j) + ENDIF qi1d(k) = max(0.,qi1d(k)) qc1d(k) = max(0.,qc1d(k)) ENDDO @@ -10505,9 +10542,17 @@ SUBROUTINE RRTMG_SWRAD( & mp_physics == FER_MP_HIRES_ADVECT) THEN #endif DO K=kts,kte - qi1d(k) = qi3d(i,k,j) + IF ( cu_physics .eq. 2 ) THEN + qi1d(k) = qi3d(i,k,j)+qiconv(i,k,j) + ELSE + qi1d(k) = qi3d(i,k,j) + ENDIF qs1d(k) = 0.0 - qc1d(k) = qc3d(i,k,j) + IF ( cu_physics .eq. 2 ) THEN + qc1d(k) = qc3d(i,k,j)+qcconv(i,k,j) + ELSE + qc1d(k) = qc3d(i,k,j) + ENDIF qi1d(k) = max(0.,qi1d(k)) qc1d(k) = max(0.,qc1d(k)) ENDDO diff --git a/phys/module_ra_rrtmg_swf.F b/phys/module_ra_rrtmg_swf.F index afc2d75e3d..0b7577e9df 100644 --- a/phys/module_ra_rrtmg_swf.F +++ b/phys/module_ra_rrtmg_swf.F @@ -11220,7 +11220,7 @@ SUBROUTINE RRTMG_SWRAD_FAST( & coszr, julday, solcon, & albedo, t3d, t8w, tsk, & p3d, p8w, pi3d, rho3d, & - dz8w, cldfra3d, lradius, iradius, & + dz8w, cldfra3d, ccldfra, lradius, iradius, & is_cammgmp_used, r, g, & re_cloud,re_ice,re_snow, & has_reqc,has_reqi,has_reqs, & @@ -11229,6 +11229,7 @@ SUBROUTINE RRTMG_SWRAD_FAST( & xland, xice, snow, & qv3d, qc3d, qr3d, & qi3d, qs3d, qg3d, & + qcconv,qiconv, & o3input, o33d, & aer_opt, aerod, no_src, & alswvisdir, alswvisdif, & !Zhenxin ssib alb comp (06/20/2011) @@ -11248,6 +11249,7 @@ SUBROUTINE RRTMG_SWRAD_FAST( & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte, & swupflx, swupflxc, swdnflx, swdnflxc, & + cu_physics, & tauaer3d_sw,ssaaer3d_sw,asyaer3d_sw, & ! jararias 2013/11 swddir, swddni, swddif, & ! jararias 2013/08 swdownc, swddnic, swddirc, & ! PAJ @@ -11264,6 +11266,7 @@ SUBROUTINE RRTMG_SWRAD_FAST( & its,ite, jts,jte, kts,kte INTEGER, INTENT(IN ) :: ICLOUD + INTEGER, INTENT(IN ) :: cu_physics ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , & INTENT(IN ) :: dz8w, & @@ -11346,7 +11349,10 @@ SUBROUTINE RRTMG_SWRAD_FAST( & QI3D, & QS3D, & QG3D, & - QNDROP3D + QNDROP3D, & + QICONV, & + QCCONV, & + CCLDFRA !..Added by G. Thompson to couple cloud physics effective radii. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN):: & @@ -11513,6 +11519,10 @@ SUBROUTINE RRTMG_SWRAD_FAST( & snow_mass_factor integer :: dyofyr + real :: ITRMX, & + ITRMN + + integer:: idx_rei real:: corr @@ -11729,16 +11739,31 @@ SUBROUTINE RRTMG_SWRAD_FAST( & ! moist variables IF (ICLOUD .ne. 0) THEN + +! The overlap between the convective and large-scale cloud fractions is +! estimated as the average of the maximum and minimum possible overlaps +! between the two. + IF ( PRESENT( CLDFRA3D ) ) THEN DO K=kts,kte - CLDFRA1D(k)=CLDFRA3D(I,K,J) + IF ( cu_physics .eq. 2 ) THEN + ITRMX=MIN(CLDFRA3D(I,K,J),CCLDFRA(I,K,J)) + ITRMN=MAX(0.,CLDFRA3D(I,K,J)+CCLDFRA(I,K,J)-1.) + CLDFRA1D(K)=CLDFRA3D(I,K,J)+CCLDFRA(I,K,J)-0.5*(ITRMX+ITRMN) + ELSE + CLDFRA1D(K)=CLDFRA3D(I,K,J) + ENDIF ENDDO ENDIF IF (PRESENT(F_QC) .AND. PRESENT(QC3D)) THEN IF ( F_QC) THEN DO K=kts,kte - QC1D(K)=QC3D(I,K,J) + IF ( cu_physics .eq. 2 ) THEN + QC1D(K)=QC3D(I,K,J)+QCCONV(I,K,J) + ELSE + QC1D(K)=QC3D(I,K,J) + ENDIF QC1D(K)=max(0.,QC1D(K)) ENDDO ENDIF @@ -11776,6 +11801,11 @@ SUBROUTINE RRTMG_SWRAD_FAST( & DO K=kts,kte IF (T1D(K) .lt. 273.15) THEN QI1D(K)=QC1D(K) + IF ( cu_physics .eq. 2 ) THEN + QI1D(K)=QI1D(K)+QICONV(I,K,J) + ELSE + QI1D(K)=QI1D(K) + ENDIF QS1D(K)=QR1D(K) QC1D(K)=0. QR1D(K)=0. @@ -11786,7 +11816,11 @@ SUBROUTINE RRTMG_SWRAD_FAST( & IF (PRESENT(F_QI) .AND. PRESENT(QI3D)) THEN IF (F_QI) THEN DO K=kts,kte - QI1D(K)=QI3D(I,K,J) + IF ( cu_physics .eq. 2 ) THEN + QI1D(K)=QI3D(I,K,J)+QICONV(I,K,J) + ELSE + QI1D(K)=QI3D(I,K,J) + ENDIF QI1D(K)=max(0.,QI1D(K)) ENDDO ENDIF @@ -11816,7 +11850,11 @@ SUBROUTINE RRTMG_SWRAD_FAST( & DO K=kts,kte qi1d(k) = 0.1*qs3d(i,k,j) qs1d(k) = 0.9*qs3d(i,k,j) - qc1d(k) = qc3d(i,k,j) + IF ( cu_physics .eq. 2 ) THEN + qc1d(k) = qc3d(i,k,j)+qcconv(i,k,j) + ELSE + qc1d(k) = qc3d(i,k,j) + ENDIF qi1d(k) = max(0.,qi1d(k)) qc1d(k) = max(0.,qc1d(k)) ENDDO diff --git a/phys/module_radiation_driver.F b/phys/module_radiation_driver.F index 009e2d8666..76382d8955 100644 --- a/phys/module_radiation_driver.F +++ b/phys/module_radiation_driver.F @@ -72,6 +72,7 @@ SUBROUTINE radiation_driver ( & , COD2D_OUT & ! goddardrad , CTOP2D_OUT & ! goddardrad , CLDFRA,CLDFRA_MP_ALL,CLDT,ZNU & + , CCLDFRA, QCCONV, QICONV & #if (EM_CORE == 1) , lradius,iradius & #endif @@ -328,6 +329,8 @@ SUBROUTINE radiation_driver ( & ! Qr rain water mixing ratio (kg/kg) ! Qi cloud ice mixing ratio (kg/kg) ! Qs snow mixing ratio (kg/kg) +! QCCONV convective cloud mixing ratio (kg/kg) +! QICONV convective ice mixing ratio (kg/kg) !----------------------------------------------------------------- !-- PM2_5_DRY Dry PM2.5 aerosol mass for all species (ug m^-3) !-- PM2_5_WATER PM2.5 water mass (ug m^-3) @@ -353,6 +356,7 @@ SUBROUTINE radiation_driver ( & !-- CLDFRA_DP cloud fraction from deep cloud in a cumulus scheme !-- CLDFRA_SH cloud fraction from shallow cloud in a cumulus scheme !-- CLDFRA_MP_ALL cloud fraction from CAMMGMP microphysics scheme +!-- CCLDFRA convective cloud fraction (between 0 and 1) !-- EMISS surface emissivity (between 0 and 1) !-- rho_phy density (kg/m^3) !-- rr dry air density (kg/m^3) @@ -732,7 +736,10 @@ SUBROUTINE radiation_driver ( & ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), & OPTIONAL, & - INTENT(INOUT) :: CLDFRA + INTENT(INOUT) :: CLDFRA, & + CCLDFRA,& + QCCONV, & + QICONV REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), & ! ckay for sub-grid cloud fraction OPTIONAL, & @@ -1630,11 +1637,14 @@ SUBROUTINE radiation_driver ( & ,QI3D=QI & ,QS3D=QS & ,QG3D=QG & + ,QCCONV=QCCONV,QICONV=QICONV & ,P8W=p8w,P3D=p,PI3D=pi,DZ8W=dz8w,TSK=tsk,T3D=t & - ,T8W=t8w,RHO3D=rho, CLDFRA3D=CLDFRA,R=R_d,G=G & + ,T8W=t8w,RHO3D=rho,CLDFRA3D=CLDFRA,R=R_d,G=G & + ,CCLDFRA=CCLDFRA & ,F_QV=F_QV,F_QC=F_QC,F_QR=F_QR & ,F_QI=F_QI,F_QS=F_QS,F_QG=F_QG & ,ICLOUD=icloud,WARM_RAIN=warm_rain & + ,cu_physics=cu_physics & !ccc Added for time-varying trace gases. ,YR=YR,JULIAN=JULIAN & !ccc @@ -1847,6 +1857,7 @@ SUBROUTINE radiation_driver ( & P8W=p8w,P3D=p,PI3D=pi,DZ8W=dz8w,TSK=tsk,T3D=t, & T8W=t8w,RHO3D=rho,R=R_d,G=G, & ICLOUD=icloud,WARM_RAIN=warm_rain,CLDFRA3D=CLDFRA,& + CCLDFRA=CCLDFRA, & cldovrlp=cldovrlp, & ! J. Henderson AER: cldovrlp namelist value #if (EM_CORE == 1) LRADIUS=lradius, IRADIUS=iradius, & @@ -1859,6 +1870,7 @@ SUBROUTINE radiation_driver ( & XLAND=XLAND,XICE=XICE,SNOW=SNOW, & QV3D=QV,QC3D=QC,QR3D=QR, & QI3D=QI,QS3D=QS,QG3D=QG, & + QCCONV=QCCONV,QICONV=QICONV, & O3INPUT=O3INPUT,O33D=O3RAD, & F_QV=F_QV,F_QC=F_QC,F_QR=F_QR, & F_QI=F_QI,F_QS=F_QS,F_QG=F_QG, & @@ -1887,6 +1899,7 @@ SUBROUTINE radiation_driver ( & ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte,& LWUPFLX=LWUPFLX,LWUPFLXC=LWUPFLXC, & LWDNFLX=LWDNFLX,LWDNFLXC=LWDNFLXC, & + cu_physics=cu_physics, & mp_physics=mp_physics ) CASE (RRTMK_LWSCHEME) @@ -1933,6 +1946,7 @@ SUBROUTINE radiation_driver ( & P8W=p8w,P3D=p,PI3D=pi,DZ8W=dz8w,TSK=tsk,T3D=t, & T8W=t8w,RHO3D=rho,R=R_d,G=G, & ICLOUD=icloud,WARM_RAIN=warm_rain,CLDFRA3D=CLDFRA,& + CCLDFRA=CCLDFRA, & #if (EM_CORE == 1) LRADIUS=lradius, IRADIUS=iradius, & #endif @@ -1944,6 +1958,7 @@ SUBROUTINE radiation_driver ( & XLAND=XLAND,XICE=XICE,SNOW=SNOW, & QV3D=QV,QC3D=QC,QR3D=QR, & QI3D=QI,QS3D=QS,QG3D=QG, & + QCCONV=QCCONV,QICONV=QICONV, & O3INPUT=O3INPUT,O33D=O3RAD, & F_QV=F_QV,F_QC=F_QC,F_QR=F_QR, & F_QI=F_QI,F_QS=F_QS,F_QG=F_QG, & @@ -1970,7 +1985,8 @@ SUBROUTINE radiation_driver ( & IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme,& ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte,& LWUPFLX=LWUPFLX,LWUPFLXC=LWUPFLXC, & - LWDNFLX=LWDNFLX,LWDNFLXC=LWDNFLXC & + LWDNFLX=LWDNFLX,LWDNFLXC=LWDNFLXC, & + cu_physics=cu_physics & ) #endif @@ -2330,7 +2346,7 @@ SUBROUTINE radiation_driver ( & COSZR=COSZR,JULDAY=JULDAY,SOLCON=SOLCON, & ALBEDO=ALBEDO,t3d=t,t8w=t8w,TSK=TSK, & p3d=p,p8w=p8w,pi3d=pi,rho3d=rho, & - dz8w=dz8w,CLDFRA3D=CLDFRA, & + dz8w=dz8w,CLDFRA3D=CLDFRA,CCLDFRA=CCLDFRA, & #if (EM_CORE == 1) LRADIUS=lradius, IRADIUS=iradius, & #endif @@ -2344,6 +2360,7 @@ SUBROUTINE radiation_driver ( & XLAND=XLAND,XICE=XICE,SNOW=SNOW, & QV3D=qv,QC3D=qc,QR3D=qr, & QI3D=qi,QS3D=qs,QG3D=qg, & + QCCONV=QCCONV,QICONV=QICONV, & O3INPUT=O3INPUT,O33D=O3RAD, & AER_OPT=AER_OPT,aerod=aerod,no_src=no_src_types, & ALSWVISDIR=alswvisdir ,ALSWVISDIF=alswvisdif, & !Zhenxin ssib alb comp (06/2010) @@ -2373,6 +2390,7 @@ SUBROUTINE radiation_driver ( & ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte,& SWUPFLX=SWUPFLX,SWUPFLXC=SWUPFLXC, & SWDNFLX=SWDNFLX,SWDNFLXC=SWDNFLXC, & + cu_physics=cu_physics, & tauaer3d_sw=tauaer_sw, & ! jararias 2013/11 ssaaer3d_sw=ssaaer_sw, & ! jararias 2013/11 asyaer3d_sw=asyaer_sw, & ! jararias 2013/11 @@ -2413,7 +2431,7 @@ SUBROUTINE radiation_driver ( & COSZR=COSZR,JULDAY=JULDAY,SOLCON=SOLCON, & ALBEDO=ALBEDO,t3d=t,t8w=t8w,TSK=TSK, & p3d=p,p8w=p8w,pi3d=pi,rho3d=rho, & - dz8w=dz8w,CLDFRA3D=CLDFRA, & + dz8w=dz8w,CLDFRA3D=CLDFRA,CCLDFRA=CCLDFRA, & #if (EM_CORE == 1) LRADIUS=lradius, IRADIUS=iradius, & #endif @@ -2426,6 +2444,7 @@ SUBROUTINE radiation_driver ( & XLAND=XLAND,XICE=XICE,SNOW=SNOW, & QV3D=qv,QC3D=qc,QR3D=qr, & QI3D=qi,QS3D=qs,QG3D=qg, & + QCCONV=QCCONV,QICONV=QICONV, & O3INPUT=O3INPUT,O33D=O3RAD, & AER_OPT=AER_OPT,aerod=aerod,no_src=no_src_types, & ALSWVISDIR=alswvisdir ,ALSWVISDIF=alswvisdif, & !Zhenxin ssib alb comp (06/2010) @@ -2454,6 +2473,7 @@ SUBROUTINE radiation_driver ( & ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte,& SWUPFLX=SWUPFLX,SWUPFLXC=SWUPFLXC, & SWDNFLX=SWDNFLX,SWDNFLXC=SWDNFLXC, & + cu_physics=cu_physics, & tauaer3d_sw=tauaer_sw, & ! jararias 2013/11 ssaaer3d_sw=ssaaer_sw, & ! jararias 2013/11 asyaer3d_sw=asyaer_sw, & ! jararias 2013/11 From afd433d12a14333cd41c97440e4a3a9580b77a41 Mon Sep 17 00:00:00 2001 From: Ricardo Fonseca Date: Tue, 28 Jan 2020 05:01:10 +0100 Subject: [PATCH 02/24] Files modified following reviewers comment. Thank you! --- phys/module_ra_rrtm.F | 44 +------ phys/module_ra_rrtmg_lw.F | 61 ++------- phys/module_ra_rrtmg_lwf.F | 51 ++------ phys/module_ra_rrtmg_sw.F | 61 ++------- phys/module_ra_rrtmg_swf.F | 50 +------- phys/module_radiation_driver.F | 217 ++++++++++++++++++++++++++++++--- 6 files changed, 231 insertions(+), 253 deletions(-) diff --git a/phys/module_ra_rrtm.F b/phys/module_ra_rrtm.F index 177004a51b..38830222c4 100644 --- a/phys/module_ra_rrtm.F +++ b/phys/module_ra_rrtm.F @@ -1738,10 +1738,8 @@ SUBROUTINE RRTMLWRAD( & ,ims,ime, jms,jme, kms,kme & ,its,ite, jts,jte, kts,kte & ,qv3d,qc3d,qr3d & - ,qi3d,qs3d,qg3d,cldfra3d, ccldfra & - ,qcconv,qiconv & + ,qi3d,qs3d,qg3d,cldfra3d & ,f_qv,f_qc,f_qr,f_qi,f_qs,f_qg & - ,cu_physics & !ccc Added for time-varying trace gases. ,yr, julian ) !ccc @@ -1759,7 +1757,6 @@ SUBROUTINE RRTMLWRAD( & its,ite, jts,jte, kts,kte INTEGER, INTENT(IN ) :: ICLOUD - INTEGER, INTENT(IN ) :: cu_physics ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , & INTENT(IN ) :: dz8w, & @@ -1800,10 +1797,7 @@ SUBROUTINE RRTMLWRAD( & QR3D, & QI3D, & QS3D, & - QG3D, & - QICONV, & - QCCONV, & - CCLDFRA + QG3D LOGICAL, OPTIONAL, INTENT(IN ) :: F_QV,F_QC,F_QR,F_QI,F_QS,F_QG @@ -1825,9 +1819,6 @@ SUBROUTINE RRTMLWRAD( & QG1D ! REAL :: TSFC,GLW0,OLR0,EMISS0 - - REAL :: ITRMX, ITRMN - ! INTEGER:: i,j,K,NK LOGICAL :: predicate @@ -1915,21 +1906,10 @@ SUBROUTINE RRTMLWRAD( & ENDDO IF (ICLOUD .ne. 0) THEN - -! The overlap between the convective and large-scale cloud fractions is -! estimated as the average of the maximum and minimum possible overlaps -! between the two. - IF ( PRESENT( CLDFRA3D ) ) THEN DO K=kts,kte NK=kme-1-K+kms - IF ( cu_physics .eq. 2 ) THEN - ITRMX=MIN(CLDFRA3D(I,NK,J),CCLDFRA(I,NK,J)) - ITRMN=MAX(0.,CLDFRA3D(I,NK,J)+CCLDFRA(I,NK,J)-1.) - CLDFRA1D(K)=CLDFRA3D(I,NK,J)+CCLDFRA(I,NK,J)-0.5*(ITRMX+ITRMN) - ELSE - CLDFRA1D(K)=CLDFRA3D(I,NK,J) - ENDIF + CLDFRA1D(k)=CLDFRA3D(I,NK,J) ENDDO ENDIF @@ -1937,11 +1917,7 @@ SUBROUTINE RRTMLWRAD( & IF ( F_QC) THEN DO K=kts,kte NK=kme-1-K+kms - IF ( cu_physics .eq. 2 ) THEN - QC1D(K)=QC3D(I,NK,J)+QCCONV(I,NK,J) - ELSE - QC1D(K)=QC3D(I,NK,J) - ENDIF + QC1D(K)=QC3D(I,NK,J) QC1D(K)=max(0.,QC1D(K)) ENDDO ENDIF @@ -1969,14 +1945,8 @@ SUBROUTINE RRTMLWRAD( & IF (.NOT. predicate .and. .not. warm_rain) THEN DO K=kts,kte - NK=kme-1-K+kms IF (T1D(K) .lt. 273.15) THEN QI1D(K)=QC1D(K) - IF ( cu_physics .eq. 2 ) THEN - QI1D(K)=QI1D(K)+QICONV(I,NK,J) - ELSE - QI1D(K)=QI1D(K) - ENDIF QS1D(K)=QR1D(K) QC1D(K)=0. QR1D(K)=0. @@ -1987,11 +1957,7 @@ SUBROUTINE RRTMLWRAD( & IF (PRESENT(F_QI) .AND. PRESENT(QI3D)) THEN DO K=kts,kte NK=kme-1-K+kms - IF ( cu_physics .eq. 2 ) THEN - QI1D(K)=QI3D(I,NK,J)+QICONV(I,NK,J) - ELSE - QI1D(K)=QI3D(I,NK,J) - ENDIF + QI1D(K)=QI3D(I,NK,J) QI1D(K)=max(0.,QI1D(K)) ENDDO ENDIF diff --git a/phys/module_ra_rrtmg_lw.F b/phys/module_ra_rrtmg_lw.F index b6a0850efc..65cbfb8116 100644 --- a/phys/module_ra_rrtmg_lw.F +++ b/phys/module_ra_rrtmg_lw.F @@ -11487,7 +11487,7 @@ SUBROUTINE RRTMG_LWRAD( & glw, olr, lwcf, emiss, & p8w, p3d, pi3d, & dz8w, tsk, t3d, t8w, rho3d, r, g, & - icloud, warm_rain, cldfra3d, ccldfra, & + icloud, warm_rain, cldfra3d, & cldovrlp, & lradius,iradius, & is_cammgmp_used, & @@ -11495,7 +11495,6 @@ SUBROUTINE RRTMG_LWRAD( & xland, xice, snow, & qv3d, qc3d, qr3d, & qi3d, qs3d, qg3d, & - qcconv,qiconv, & o3input, o33d, & f_qv, f_qc, f_qr, f_qi, f_qs, f_qg, & re_cloud, re_ice, re_snow, & ! G. Thompson @@ -11511,7 +11510,6 @@ SUBROUTINE RRTMG_LWRAD( & !ccc added for time varying gases. yr,julian, & !ccc - cu_physics, & mp_physics, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & @@ -11532,7 +11530,6 @@ SUBROUTINE RRTMG_LWRAD( & its,ite, jts,jte, kts,kte INTEGER, INTENT(IN ) :: ICLOUD - INTEGER, INTENT(IN ) :: cu_physics INTEGER, INTENT(IN ) :: MP_PHYSICS ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , & @@ -11583,10 +11580,7 @@ SUBROUTINE RRTMG_LWRAD( & QI3D, & QS3D, & QG3D, & - QNDROP3D, & - QICONV, & - QCCONV, & - CCLDFRA + QNDROP3D !..Added by G. Thompson to couple cloud physics effective radii. REAL, DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(IN):: & @@ -11735,9 +11729,6 @@ SUBROUTINE RRTMG_LWRAD( & ps real :: ro, & dz - - real :: ITRMX, & - ITRMN real:: snow_mass_factor !..We can use message interface regardless of what options are running, @@ -11958,31 +11949,16 @@ SUBROUTINE RRTMG_LWRAD( & ! moist variables IF (ICLOUD .ne. 0) THEN - -! The overlap between the convective and large-scale cloud fractions is -! estimated as the average of the maximum and minimum possible overlaps -! between the two. - IF ( PRESENT( CLDFRA3D ) ) THEN DO K=kts,kte - IF ( cu_physics .eq. 2 ) THEN - ITRMX=MIN(CLDFRA3D(I,K,J),CCLDFRA(I,K,J)) - ITRMN=MAX(0.,CLDFRA3D(I,K,J)+CCLDFRA(I,K,J)-1.) - CLDFRA1D(K)=CLDFRA3D(I,K,J)+CCLDFRA(I,K,J)-0.5*(ITRMX+ITRMN) - ELSE - CLDFRA1D(K)=CLDFRA3D(I,K,J) - ENDIF + CLDFRA1D(k)=CLDFRA3D(I,K,J) ENDDO ENDIF IF (PRESENT(F_QC) .AND. PRESENT(QC3D)) THEN IF ( F_QC) THEN DO K=kts,kte - IF ( cu_physics .eq. 2 ) THEN - QC1D(K)=QC3D(I,K,J)+QCCONV(I,K,J) - ELSE - QC1D(K)=QC3D(I,K,J) - ENDIF + QC1D(K)=QC3D(I,K,J) QC1D(K)=max(0.,QC1D(K)) ENDDO ENDIF @@ -12020,11 +11996,6 @@ SUBROUTINE RRTMG_LWRAD( & DO K=kts,kte IF (T1D(K) .lt. 273.15) THEN QI1D(K)=QC1D(K) - IF ( cu_physics .eq. 2 ) THEN - QI1D(K)=QI1D(K)+QICONV(I,K,J) - ELSE - QI1D(K)=QI1D(K) - ENDIF QS1D(K)=QR1D(K) QC1D(K)=0. QR1D(K)=0. @@ -12035,11 +12006,7 @@ SUBROUTINE RRTMG_LWRAD( & IF (PRESENT(F_QI) .AND. PRESENT(QI3D)) THEN IF (F_QI) THEN DO K=kts,kte - IF ( cu_physics .eq. 2 ) THEN - QI1D(K)=QI3D(I,K,J)+QICONV(I,K,J) - ELSE - QI1D(K)=QI3D(I,K,J) - ENDIF + QI1D(K)=QI3D(I,K,J) QI1D(K)=max(0.,QI1D(K)) ENDDO ENDIF @@ -12069,11 +12036,7 @@ SUBROUTINE RRTMG_LWRAD( & DO K=kts,kte qi1d(k) = 0.1*qs3d(i,k,j) qs1d(k) = 0.9*qs3d(i,k,j) - IF ( cu_physics .eq. 2 ) THEN - qc1d(k) = qc3d(i,k,j)+qcconv(i,k,j) - ELSE - qc1d(k) = qc3d(i,k,j) - ENDIF + qc1d(k) = qc3d(i,k,j) qi1d(k) = max(0.,qi1d(k)) qc1d(k) = max(0.,qc1d(k)) ENDDO @@ -12092,17 +12055,9 @@ SUBROUTINE RRTMG_LWRAD( & mp_physics == FER_MP_HIRES_ADVECT) THEN #endif DO K=kts,kte - IF ( cu_physics .eq. 2 ) THEN - qi1d(k) = qi3d(i,k,j)+qiconv(i,k,j) - ELSE - qi1d(k) = qi3d(i,k,j) - ENDIF + qi1d(k) = qi3d(i,k,j) qs1d(k) = 0.0 - IF ( cu_physics .eq. 2 ) THEN - qc1d(k) = qc3d(i,k,j)+qcconv(i,k,j) - ELSE - qc1d(k) = qc3d(i,k,j) - ENDIF + qc1d(k) = qc3d(i,k,j) qi1d(k) = max(0.,qi1d(k)) qc1d(k) = max(0.,qc1d(k)) ENDDO diff --git a/phys/module_ra_rrtmg_lwf.F b/phys/module_ra_rrtmg_lwf.F index c3db7a8eac..806cc65aa2 100644 --- a/phys/module_ra_rrtmg_lwf.F +++ b/phys/module_ra_rrtmg_lwf.F @@ -15252,14 +15252,13 @@ SUBROUTINE RRTMG_LWRAD_FAST( & glw, olr, lwcf, emiss, & p8w, p3d, pi3d, & dz8w, tsk, t3d, t8w, rho3d, r, g, & - icloud, warm_rain, cldfra3d, ccldfra, & + icloud, warm_rain, cldfra3d, & lradius,iradius, & is_cammgmp_used, & f_ice_phy, f_rain_phy, & xland, xice, snow, & qv3d, qc3d, qr3d, & qi3d, qs3d, qg3d, & - qcconv,qiconv, & o3input, o33d, & f_qv, f_qc, f_qr, f_qi, f_qs, f_qg, & re_cloud, re_ice, re_snow, & ! G. Thompson @@ -15278,8 +15277,7 @@ SUBROUTINE RRTMG_LWRAD_FAST( & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte, & - lwupflx, lwupflxc, lwdnflx, lwdnflxc, & - cu_physics & + lwupflx, lwupflxc, lwdnflx, lwdnflxc & ) !------------------------------------------------------------------ !ccc To use clWRF time varying trace gases @@ -15295,7 +15293,6 @@ SUBROUTINE RRTMG_LWRAD_FAST( & its,ite, jts,jte, kts,kte INTEGER, INTENT(IN ) :: ICLOUD - INTEGER, INTENT(IN ) :: cu_physics ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , & INTENT(IN ) :: dz8w, & @@ -15345,10 +15342,7 @@ SUBROUTINE RRTMG_LWRAD_FAST( & QI3D, & QS3D, & QG3D, & - QNDROP3D, & - QICONV, & - QCCONV, & - CCLDFRA + QNDROP3D !..Added by G. Thompson to couple cloud physics effective radii. REAL, DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(IN):: & @@ -15487,9 +15481,6 @@ SUBROUTINE RRTMG_LWRAD_FAST( & ps real :: ro, & dz - - real :: ITRMX, & - ITRMN real:: snow_mass_factor !..We can use message interface regardless of what options are running, @@ -15713,31 +15704,16 @@ SUBROUTINE RRTMG_LWRAD_FAST( & ! moist variables IF (ICLOUD .ne. 0) THEN - -! The overlap between the convective and large-scale cloud fractions is -! estimated as the average of the maximum and minimum possible overlaps -! between the two. - IF ( PRESENT( CLDFRA3D ) ) THEN DO K=kts,kte - IF ( cu_physics .eq. 2 ) THEN - ITRMX=MIN(CLDFRA3D(I,K,J),CCLDFRA(I,K,J)) - ITRMN=MAX(0.,CLDFRA3D(I,K,J)+CCLDFRA(I,K,J)-1.) - CLDFRA1D(K)=CLDFRA3D(I,K,J)+CCLDFRA(I,K,J)-0.5*(ITRMX+ITRMN) - ELSE - CLDFRA1D(K)=CLDFRA3D(I,K,J) - ENDIF + CLDFRA1D(k)=CLDFRA3D(I,K,J) ENDDO ENDIF IF (PRESENT(F_QC) .AND. PRESENT(QC3D)) THEN IF ( F_QC) THEN DO K=kts,kte - IF ( cu_physics .eq. 2 ) THEN - QC1D(K)=QC3D(I,K,J)+QCCONV(I,K,J) - ELSE - QC1D(K)=QC3D(I,K,J) - ENDIF + QC1D(K)=QC3D(I,K,J) QC1D(K)=max(0.,QC1D(K)) ENDDO ENDIF @@ -15775,11 +15751,6 @@ SUBROUTINE RRTMG_LWRAD_FAST( & DO K=kts,kte IF (T1D(K) .lt. 273.15) THEN QI1D(K)=QC1D(K) - IF ( cu_physics .eq. 2 ) THEN - QI1D(K)=QI1D(K)+QICONV(I,K,J) - ELSE - QI1D(K)=QI1D(K) - ENDIF QS1D(K)=QR1D(K) QC1D(K)=0. QR1D(K)=0. @@ -15790,11 +15761,7 @@ SUBROUTINE RRTMG_LWRAD_FAST( & IF (PRESENT(F_QI) .AND. PRESENT(QI3D)) THEN IF (F_QI) THEN DO K=kts,kte - IF ( cu_physics .eq. 2 ) THEN - QI1D(K)=QI3D(I,K,J)+QICONV(I,K,J) - ELSE - QI1D(K)=QI3D(I,K,J) - ENDIF + QI1D(K)=QI3D(I,K,J) QI1D(K)=max(0.,QI1D(K)) ENDDO ENDIF @@ -15824,11 +15791,7 @@ SUBROUTINE RRTMG_LWRAD_FAST( & DO K=kts,kte qi1d(k) = 0.1*qs3d(i,k,j) qs1d(k) = 0.9*qs3d(i,k,j) - IF ( cu_physics .eq. 2 ) THEN - qc1d(k) = qc3d(i,k,j)+qcconv(i,k,j) - ELSE - qc1d(k) = qc3d(i,k,j) - ENDIF + qc1d(k) = qc3d(i,k,j) qi1d(k) = max(0.,qi1d(k)) qc1d(k) = max(0.,qc1d(k)) ENDDO diff --git a/phys/module_ra_rrtmg_sw.F b/phys/module_ra_rrtmg_sw.F index 17c0b3de06..af482b6fa8 100644 --- a/phys/module_ra_rrtmg_sw.F +++ b/phys/module_ra_rrtmg_sw.F @@ -9925,7 +9925,7 @@ SUBROUTINE RRTMG_SWRAD( & coszr, julday, solcon, & albedo, t3d, t8w, tsk, & p3d, p8w, pi3d, rho3d, & - dz8w, cldfra3d, ccldfra, lradius, iradius, & + dz8w, cldfra3d, lradius, iradius, & is_cammgmp_used, r, g, & re_cloud,re_ice,re_snow, & has_reqc,has_reqi,has_reqs, & @@ -9935,7 +9935,6 @@ SUBROUTINE RRTMG_SWRAD( & xland, xice, snow, & qv3d, qc3d, qr3d, & qi3d, qs3d, qg3d, & - qcconv,qiconv, & o3input, o33d, & aer_opt, aerod, no_src, & alswvisdir, alswvisdif, & !Zhenxin ssib alb comp (06/20/2011) @@ -9957,7 +9956,6 @@ SUBROUTINE RRTMG_SWRAD( & its,ite, jts,jte, kts,kte, & swupflx, swupflxc, & swdnflx, swdnflxc, & - cu_physics, & tauaer3d_sw,ssaaer3d_sw,asyaer3d_sw, & ! jararias 2013/11 swddir, swddni, swddif, & ! jararias 2013/08 swdownc, swddnic, swddirc, & ! PAJ @@ -9974,7 +9972,6 @@ SUBROUTINE RRTMG_SWRAD( & its,ite, jts,jte, kts,kte INTEGER, INTENT(IN ) :: ICLOUD - INTEGER, INTENT(IN ) :: cu_physics INTEGER, INTENT(IN ) :: MP_PHYSICS ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , & @@ -10058,10 +10055,7 @@ SUBROUTINE RRTMG_SWRAD( & QI3D, & QS3D, & QG3D, & - QNDROP3D, & - QICONV, & - QCCONV, & - CCLDFRA + QNDROP3D !..Added by G. Thompson to couple cloud physics effective radii. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN):: & @@ -10241,9 +10235,6 @@ SUBROUTINE RRTMG_SWRAD( & snow_mass_factor integer :: dyofyr - real :: ITRMX, & - ITRMN - integer:: idx_rei real:: corr @@ -10408,31 +10399,16 @@ SUBROUTINE RRTMG_SWRAD( & ! moist variables IF (ICLOUD .ne. 0) THEN - -! The overlap between the convective and large-scale cloud fractions is -! estimated as the average of the maximum and minimum possible overlaps -! between the two. - IF ( PRESENT( CLDFRA3D ) ) THEN DO K=kts,kte - IF ( cu_physics .eq. 2 ) THEN - ITRMX=MIN(CLDFRA3D(I,K,J),CCLDFRA(I,K,J)) - ITRMN=MAX(0.,CLDFRA3D(I,K,J)+CCLDFRA(I,K,J)-1.) - CLDFRA1D(K)=CLDFRA3D(I,K,J)+CCLDFRA(I,K,J)-0.5*(ITRMX+ITRMN) - ELSE - CLDFRA1D(K)=CLDFRA3D(I,K,J) - ENDIF + CLDFRA1D(k)=CLDFRA3D(I,K,J) ENDDO ENDIF IF (PRESENT(F_QC) .AND. PRESENT(QC3D)) THEN IF ( F_QC) THEN DO K=kts,kte - IF ( cu_physics .eq. 2 ) THEN - QC1D(K)=QC3D(I,K,J)+QCCONV(I,K,J) - ELSE - QC1D(K)=QC3D(I,K,J) - ENDIF + QC1D(K)=QC3D(I,K,J) QC1D(K)=max(0.,QC1D(K)) ENDDO ENDIF @@ -10470,11 +10446,6 @@ SUBROUTINE RRTMG_SWRAD( & DO K=kts,kte IF (T1D(K) .lt. 273.15) THEN QI1D(K)=QC1D(K) - IF ( cu_physics .eq. 2 ) THEN - QI1D(K)=QI1D(K)+QICONV(I,K,J) - ELSE - QI1D(K)=QI1D(K) - ENDIF QS1D(K)=QR1D(K) QC1D(K)=0. QR1D(K)=0. @@ -10485,11 +10456,7 @@ SUBROUTINE RRTMG_SWRAD( & IF (PRESENT(F_QI) .AND. PRESENT(QI3D)) THEN IF (F_QI) THEN DO K=kts,kte - IF ( cu_physics .eq. 2 ) THEN - QI1D(K)=QI3D(I,K,J)+QICONV(I,K,J) - ELSE - QI1D(K)=QI3D(I,K,J) - ENDIF + QI1D(K)=QI3D(I,K,J) QI1D(K)=max(0.,QI1D(K)) ENDDO ENDIF @@ -10519,11 +10486,7 @@ SUBROUTINE RRTMG_SWRAD( & DO K=kts,kte qi1d(k) = 0.1*qs3d(i,k,j) qs1d(k) = 0.9*qs3d(i,k,j) - IF ( cu_physics .eq. 2 ) THEN - qc1d(k) = qc3d(i,k,j)+qcconv(i,k,j) - ELSE - qc1d(k) = qc3d(i,k,j) - ENDIF + qc1d(k) = qc3d(i,k,j) qi1d(k) = max(0.,qi1d(k)) qc1d(k) = max(0.,qc1d(k)) ENDDO @@ -10542,17 +10505,9 @@ SUBROUTINE RRTMG_SWRAD( & mp_physics == FER_MP_HIRES_ADVECT) THEN #endif DO K=kts,kte - IF ( cu_physics .eq. 2 ) THEN - qi1d(k) = qi3d(i,k,j)+qiconv(i,k,j) - ELSE - qi1d(k) = qi3d(i,k,j) - ENDIF + qi1d(k) = qi3d(i,k,j) qs1d(k) = 0.0 - IF ( cu_physics .eq. 2 ) THEN - qc1d(k) = qc3d(i,k,j)+qcconv(i,k,j) - ELSE - qc1d(k) = qc3d(i,k,j) - ENDIF + qc1d(k) = qc3d(i,k,j) qi1d(k) = max(0.,qi1d(k)) qc1d(k) = max(0.,qc1d(k)) ENDDO diff --git a/phys/module_ra_rrtmg_swf.F b/phys/module_ra_rrtmg_swf.F index 0b7577e9df..afc2d75e3d 100644 --- a/phys/module_ra_rrtmg_swf.F +++ b/phys/module_ra_rrtmg_swf.F @@ -11220,7 +11220,7 @@ SUBROUTINE RRTMG_SWRAD_FAST( & coszr, julday, solcon, & albedo, t3d, t8w, tsk, & p3d, p8w, pi3d, rho3d, & - dz8w, cldfra3d, ccldfra, lradius, iradius, & + dz8w, cldfra3d, lradius, iradius, & is_cammgmp_used, r, g, & re_cloud,re_ice,re_snow, & has_reqc,has_reqi,has_reqs, & @@ -11229,7 +11229,6 @@ SUBROUTINE RRTMG_SWRAD_FAST( & xland, xice, snow, & qv3d, qc3d, qr3d, & qi3d, qs3d, qg3d, & - qcconv,qiconv, & o3input, o33d, & aer_opt, aerod, no_src, & alswvisdir, alswvisdif, & !Zhenxin ssib alb comp (06/20/2011) @@ -11249,7 +11248,6 @@ SUBROUTINE RRTMG_SWRAD_FAST( & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte, & swupflx, swupflxc, swdnflx, swdnflxc, & - cu_physics, & tauaer3d_sw,ssaaer3d_sw,asyaer3d_sw, & ! jararias 2013/11 swddir, swddni, swddif, & ! jararias 2013/08 swdownc, swddnic, swddirc, & ! PAJ @@ -11266,7 +11264,6 @@ SUBROUTINE RRTMG_SWRAD_FAST( & its,ite, jts,jte, kts,kte INTEGER, INTENT(IN ) :: ICLOUD - INTEGER, INTENT(IN ) :: cu_physics ! REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , & INTENT(IN ) :: dz8w, & @@ -11349,10 +11346,7 @@ SUBROUTINE RRTMG_SWRAD_FAST( & QI3D, & QS3D, & QG3D, & - QNDROP3D, & - QICONV, & - QCCONV, & - CCLDFRA + QNDROP3D !..Added by G. Thompson to couple cloud physics effective radii. REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN):: & @@ -11519,10 +11513,6 @@ SUBROUTINE RRTMG_SWRAD_FAST( & snow_mass_factor integer :: dyofyr - real :: ITRMX, & - ITRMN - - integer:: idx_rei real:: corr @@ -11739,31 +11729,16 @@ SUBROUTINE RRTMG_SWRAD_FAST( & ! moist variables IF (ICLOUD .ne. 0) THEN - -! The overlap between the convective and large-scale cloud fractions is -! estimated as the average of the maximum and minimum possible overlaps -! between the two. - IF ( PRESENT( CLDFRA3D ) ) THEN DO K=kts,kte - IF ( cu_physics .eq. 2 ) THEN - ITRMX=MIN(CLDFRA3D(I,K,J),CCLDFRA(I,K,J)) - ITRMN=MAX(0.,CLDFRA3D(I,K,J)+CCLDFRA(I,K,J)-1.) - CLDFRA1D(K)=CLDFRA3D(I,K,J)+CCLDFRA(I,K,J)-0.5*(ITRMX+ITRMN) - ELSE - CLDFRA1D(K)=CLDFRA3D(I,K,J) - ENDIF + CLDFRA1D(k)=CLDFRA3D(I,K,J) ENDDO ENDIF IF (PRESENT(F_QC) .AND. PRESENT(QC3D)) THEN IF ( F_QC) THEN DO K=kts,kte - IF ( cu_physics .eq. 2 ) THEN - QC1D(K)=QC3D(I,K,J)+QCCONV(I,K,J) - ELSE - QC1D(K)=QC3D(I,K,J) - ENDIF + QC1D(K)=QC3D(I,K,J) QC1D(K)=max(0.,QC1D(K)) ENDDO ENDIF @@ -11801,11 +11776,6 @@ SUBROUTINE RRTMG_SWRAD_FAST( & DO K=kts,kte IF (T1D(K) .lt. 273.15) THEN QI1D(K)=QC1D(K) - IF ( cu_physics .eq. 2 ) THEN - QI1D(K)=QI1D(K)+QICONV(I,K,J) - ELSE - QI1D(K)=QI1D(K) - ENDIF QS1D(K)=QR1D(K) QC1D(K)=0. QR1D(K)=0. @@ -11816,11 +11786,7 @@ SUBROUTINE RRTMG_SWRAD_FAST( & IF (PRESENT(F_QI) .AND. PRESENT(QI3D)) THEN IF (F_QI) THEN DO K=kts,kte - IF ( cu_physics .eq. 2 ) THEN - QI1D(K)=QI3D(I,K,J)+QICONV(I,K,J) - ELSE - QI1D(K)=QI3D(I,K,J) - ENDIF + QI1D(K)=QI3D(I,K,J) QI1D(K)=max(0.,QI1D(K)) ENDDO ENDIF @@ -11850,11 +11816,7 @@ SUBROUTINE RRTMG_SWRAD_FAST( & DO K=kts,kte qi1d(k) = 0.1*qs3d(i,k,j) qs1d(k) = 0.9*qs3d(i,k,j) - IF ( cu_physics .eq. 2 ) THEN - qc1d(k) = qc3d(i,k,j)+qcconv(i,k,j) - ELSE - qc1d(k) = qc3d(i,k,j) - ENDIF + qc1d(k) = qc3d(i,k,j) qi1d(k) = max(0.,qi1d(k)) qc1d(k) = max(0.,qc1d(k)) ENDDO diff --git a/phys/module_radiation_driver.F b/phys/module_radiation_driver.F index 76382d8955..0064420299 100644 --- a/phys/module_radiation_driver.F +++ b/phys/module_radiation_driver.F @@ -822,13 +822,18 @@ SUBROUTINE radiation_driver ( & LOGICAL :: doabsems LOGICAL, EXTERNAL :: wrf_dm_on_monitor INTEGER :: s - + REAL :: ITRMX, & + ITRMN REAL :: OBECL,SINOB,SXLONG,ARG,DECDEG, & DJUL,RJUL,ECCFAC REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qc_temp REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qi_save,qc_save REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qs_save + REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qc_old + REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qi_old + REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: cldfra_old + REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qc_cu_weight REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qi_cu_weight REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qs_cu_weight @@ -1249,6 +1254,7 @@ SUBROUTINE radiation_driver ( & ENDDO ENDDO ENDIF + #if (EM_CORE == 1) ! temporarily modify hydrometeors (for P3, if 2 cat then add ice from both categories) ! @@ -1320,7 +1326,6 @@ SUBROUTINE radiation_driver ( & END DO END DO END DO - !--------------- ! Calculate constant for short wave radiation @@ -1337,7 +1342,6 @@ SUBROUTINE radiation_driver ( & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte ) - IF ( PRESENT ( CLDFRA_DP ) ) THEN ! this is for Kain-Fritsch schemes IF ( icloud_cu .EQ. 2 .OR. aercu_opt .GT. 0 ) THEN @@ -1354,7 +1358,6 @@ SUBROUTINE radiation_driver ( & ENDDO ENDDO ENDDO - IF (aercu_opt.gt.0.0) THEN DO j = jts,jte DO k = kts,kte @@ -1628,6 +1631,33 @@ SUBROUTINE radiation_driver ( & ELSE p_top_dummy = -1. ! not used by NMM END IF + + ! save old hydrometeors & cloud fraction + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc_old(i,k,j) = qc(i,k,j) + qi_old(i,k,j) = qi(i,k,j) + cldfra_old(i,k,j) = cldfra(i,k,j) + ENDDO + ENDDO + ENDDO + + IF ( cu_physics .eq. 2 ) THEN + ! temporarily modify hydrometeors & cloud fraction (PCC scheme) + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc(i,k,j) = qc(i,k,j) + QCCONV(i,k,j) + qi(i,k,j) = qi(i,k,j) + QICONV(i,k,j) + ITRMX=MIN(cldfra(i,k,j),ccldfra(i,k,j)) + ITRMN=MAX(0.,cldfra(i,k,j)+ccldfra(i,k,j)-1.) + cldfra(i,k,j)=cldfra(i,k,j)+ccldfra(i,k,j)-0.5*(ITRMX+ITRMN) + ENDDO + ENDDO + ENDDO + ENDIF + CALL RRTMLWRAD( & P_TOP=p_top_dummy & ,RTHRATEN=RTHRATEN,GLW=GLW,OLR=RLWTOA,EMISS=EMISS & @@ -1637,14 +1667,11 @@ SUBROUTINE radiation_driver ( & ,QI3D=QI & ,QS3D=QS & ,QG3D=QG & - ,QCCONV=QCCONV,QICONV=QICONV & ,P8W=p8w,P3D=p,PI3D=pi,DZ8W=dz8w,TSK=tsk,T3D=t & ,T8W=t8w,RHO3D=rho,CLDFRA3D=CLDFRA,R=R_d,G=G & - ,CCLDFRA=CCLDFRA & ,F_QV=F_QV,F_QC=F_QC,F_QR=F_QR & ,F_QI=F_QI,F_QS=F_QS,F_QG=F_QG & ,ICLOUD=icloud,WARM_RAIN=warm_rain & - ,cu_physics=cu_physics & !ccc Added for time-varying trace gases. ,YR=YR,JULIAN=JULIAN & !ccc @@ -1653,6 +1680,17 @@ SUBROUTINE radiation_driver ( & ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte & ) + ! restore old hydrometeors & cloud fraction + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc(i,k,j) = qc_old(i,k,j) + qi(i,k,j) = qi_old(i,k,j) + cldfra(i,k,j) = cldfra_old(i,k,j) + ENDDO + ENDDO + ENDDO + ! NUWRF Version by Toshihisa Matsui and Jainn Shi 20090623 case (goddardlwscheme) @@ -1846,6 +1884,32 @@ SUBROUTINE radiation_driver ( & ENDDO END IF + ! save old hydrometeors & cloud fraction + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc_old(i,k,j) = qc(i,k,j) + qi_old(i,k,j) = qi(i,k,j) + cldfra_old(i,k,j) = cldfra(i,k,j) + ENDDO + ENDDO + ENDDO + + IF ( cu_physics .eq. 2 ) THEN + ! temporarily modify hydrometeors & cloud fraction (PCC scheme) + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc(i,k,j) = qc(i,k,j) + QCCONV(i,k,j) + qi(i,k,j) = qi(i,k,j) + QICONV(i,k,j) + ITRMX=MIN(cldfra(i,k,j),ccldfra(i,k,j)) + ITRMN=MAX(0.,cldfra(i,k,j)+ccldfra(i,k,j)-1.) + cldfra(i,k,j)=cldfra(i,k,j)+ccldfra(i,k,j)-0.5*(ITRMX+ITRMN) + ENDDO + ENDDO + ENDDO + ENDIF + CALL RRTMG_LWRAD( & RTHRATENLW=RTHRATEN, & LWUPT=LWUPT,LWUPTC=LWUPTC,LWUPTCLN=LWUPTCLN, & @@ -1857,7 +1921,6 @@ SUBROUTINE radiation_driver ( & P8W=p8w,P3D=p,PI3D=pi,DZ8W=dz8w,TSK=tsk,T3D=t, & T8W=t8w,RHO3D=rho,R=R_d,G=G, & ICLOUD=icloud,WARM_RAIN=warm_rain,CLDFRA3D=CLDFRA,& - CCLDFRA=CCLDFRA, & cldovrlp=cldovrlp, & ! J. Henderson AER: cldovrlp namelist value #if (EM_CORE == 1) LRADIUS=lradius, IRADIUS=iradius, & @@ -1870,7 +1933,6 @@ SUBROUTINE radiation_driver ( & XLAND=XLAND,XICE=XICE,SNOW=SNOW, & QV3D=QV,QC3D=QC,QR3D=QR, & QI3D=QI,QS3D=QS,QG3D=QG, & - QCCONV=QCCONV,QICONV=QICONV, & O3INPUT=O3INPUT,O33D=O3RAD, & F_QV=F_QV,F_QC=F_QC,F_QR=F_QR, & F_QI=F_QI,F_QS=F_QS,F_QG=F_QG, & @@ -1899,9 +1961,19 @@ SUBROUTINE radiation_driver ( & ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte,& LWUPFLX=LWUPFLX,LWUPFLXC=LWUPFLXC, & LWDNFLX=LWDNFLX,LWDNFLXC=LWDNFLXC, & - cu_physics=cu_physics, & mp_physics=mp_physics ) + ! restore old hydrometeors & cloud fraction + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc(i,k,j) = qc_old(i,k,j) + qi(i,k,j) = qi_old(i,k,j) + cldfra(i,k,j) = cldfra_old(i,k,j) + ENDDO + ENDDO + ENDDO + CASE (RRTMK_LWSCHEME) IF ( PRESENT(F_QNC) .AND. PRESENT(QNC_CURR) ) THEN @@ -1935,6 +2007,32 @@ SUBROUTINE radiation_driver ( & CASE (RRTMG_LWSCHEME_FAST) CALL wrf_debug (100, 'CALL rrtmg_lw') + ! save old hydrometeors & cloud fraction + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc_old(i,k,j) = qc(i,k,j) + qi_old(i,k,j) = qi(i,k,j) + cldfra_old(i,k,j) = cldfra(i,k,j) + ENDDO + ENDDO + ENDDO + + IF ( cu_physics .eq. 2 ) THEN + ! temporarily modify hydrometeors & cloud fraction (PCC scheme) + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc(i,k,j) = qc(i,k,j) + QCCONV(i,k,j) + qi(i,k,j) = qi(i,k,j) + QICONV(i,k,j) + ITRMX=MIN(cldfra(i,k,j),ccldfra(i,k,j)) + ITRMN=MAX(0.,cldfra(i,k,j)+ccldfra(i,k,j)-1.) + cldfra(i,k,j)=cldfra(i,k,j)+ccldfra(i,k,j)-0.5*(ITRMX+ITRMN) + ENDDO + ENDDO + ENDDO + ENDIF + CALL RRTMG_LWRAD_FAST( & RTHRATENLW=RTHRATEN, & LWUPT=LWUPT,LWUPTC=LWUPTC, & @@ -1946,7 +2044,6 @@ SUBROUTINE radiation_driver ( & P8W=p8w,P3D=p,PI3D=pi,DZ8W=dz8w,TSK=tsk,T3D=t, & T8W=t8w,RHO3D=rho,R=R_d,G=G, & ICLOUD=icloud,WARM_RAIN=warm_rain,CLDFRA3D=CLDFRA,& - CCLDFRA=CCLDFRA, & #if (EM_CORE == 1) LRADIUS=lradius, IRADIUS=iradius, & #endif @@ -1958,7 +2055,6 @@ SUBROUTINE radiation_driver ( & XLAND=XLAND,XICE=XICE,SNOW=SNOW, & QV3D=QV,QC3D=QC,QR3D=QR, & QI3D=QI,QS3D=QS,QG3D=QG, & - QCCONV=QCCONV,QICONV=QICONV, & O3INPUT=O3INPUT,O33D=O3RAD, & F_QV=F_QV,F_QC=F_QC,F_QR=F_QR, & F_QI=F_QI,F_QS=F_QS,F_QG=F_QG, & @@ -1985,9 +2081,19 @@ SUBROUTINE radiation_driver ( & IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme,& ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte,& LWUPFLX=LWUPFLX,LWUPFLXC=LWUPFLXC, & - LWDNFLX=LWDNFLX,LWDNFLXC=LWDNFLXC, & - cu_physics=cu_physics & + LWDNFLX=LWDNFLX,LWDNFLXC=LWDNFLXC & ) + + ! restore old hydrometeors & cloud fraction + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc(i,k,j) = qc_old(i,k,j) + qi(i,k,j) = qi_old(i,k,j) + cldfra(i,k,j) = cldfra_old(i,k,j) + ENDDO + ENDDO + ENDDO #endif CASE (HELDSUAREZ) @@ -2334,6 +2440,32 @@ SUBROUTINE radiation_driver ( & ENDDO END IF + ! save old hydrometeors & cloud fraction + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc_old(i,k,j) = qc(i,k,j) + qi_old(i,k,j) = qi(i,k,j) + cldfra_old(i,k,j) = cldfra(i,k,j) + ENDDO + ENDDO + ENDDO + + IF ( cu_physics .eq. 2 ) THEN + ! temporarily modify hydrometeors & cloud fraction (PCC scheme) + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc(i,k,j) = qc(i,k,j) + QCCONV(i,k,j) + qi(i,k,j) = qi(i,k,j) + QICONV(i,k,j) + ITRMX=MIN(cldfra(i,k,j),ccldfra(i,k,j)) + ITRMN=MAX(0.,cldfra(i,k,j)+ccldfra(i,k,j)-1.) + cldfra(i,k,j)=cldfra(i,k,j)+ccldfra(i,k,j)-0.5*(ITRMX+ITRMN) + ENDDO + ENDDO + ENDDO + ENDIF + CALL RRTMG_SWRAD( & RTHRATENSW=RTHRATENSW, & SWUPT=SWUPT,SWUPTC=SWUPTC,SWUPTCLN=SWUPTCLN, & @@ -2346,7 +2478,7 @@ SUBROUTINE radiation_driver ( & COSZR=COSZR,JULDAY=JULDAY,SOLCON=SOLCON, & ALBEDO=ALBEDO,t3d=t,t8w=t8w,TSK=TSK, & p3d=p,p8w=p8w,pi3d=pi,rho3d=rho, & - dz8w=dz8w,CLDFRA3D=CLDFRA,CCLDFRA=CCLDFRA, & + dz8w=dz8w,CLDFRA3D=CLDFRA, & #if (EM_CORE == 1) LRADIUS=lradius, IRADIUS=iradius, & #endif @@ -2360,7 +2492,6 @@ SUBROUTINE radiation_driver ( & XLAND=XLAND,XICE=XICE,SNOW=SNOW, & QV3D=qv,QC3D=qc,QR3D=qr, & QI3D=qi,QS3D=qs,QG3D=qg, & - QCCONV=QCCONV,QICONV=QICONV, & O3INPUT=O3INPUT,O33D=O3RAD, & AER_OPT=AER_OPT,aerod=aerod,no_src=no_src_types, & ALSWVISDIR=alswvisdir ,ALSWVISDIF=alswvisdif, & !Zhenxin ssib alb comp (06/2010) @@ -2390,7 +2521,6 @@ SUBROUTINE radiation_driver ( & ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte,& SWUPFLX=SWUPFLX,SWUPFLXC=SWUPFLXC, & SWDNFLX=SWDNFLX,SWDNFLXC=SWDNFLXC, & - cu_physics=cu_physics, & tauaer3d_sw=tauaer_sw, & ! jararias 2013/11 ssaaer3d_sw=ssaaer_sw, & ! jararias 2013/11 asyaer3d_sw=asyaer_sw, & ! jararias 2013/11 @@ -2406,6 +2536,17 @@ SUBROUTINE radiation_driver ( & ENDDO ENDDO + ! restore old hydrometeors & cloud fraction + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc(i,k,j) = qc_old(i,k,j) + qi(i,k,j) = qi_old(i,k,j) + cldfra(i,k,j) = cldfra_old(i,k,j) + ENDDO + ENDDO + ENDDO + CASE (RRTMK_SWSCHEME) DO j=jts,jte @@ -2419,6 +2560,33 @@ SUBROUTINE radiation_driver ( & #if( BUILD_RRTMG_FAST == 1) CASE (RRTMG_SWSCHEME_FAST) CALL wrf_debug(100, 'CALL rrtmg_sw_fast') + + ! save old hydrometeors & cloud fraction + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc_old(i,k,j) = qc(i,k,j) + qi_old(i,k,j) = qi(i,k,j) + cldfra_old(i,k,j) = cldfra(i,k,j) + ENDDO + ENDDO + ENDDO + + IF ( cu_physics .eq. 2 ) THEN + ! temporarily modify hydrometeors & cloud fraction (PCC scheme) + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc(i,k,j) = qc(i,k,j) + QCCONV(i,k,j) + qi(i,k,j) = qi(i,k,j) + QICONV(i,k,j) + ITRMX=MIN(cldfra(i,k,j),ccldfra(i,k,j)) + ITRMN=MAX(0.,cldfra(i,k,j)+ccldfra(i,k,j)-1.) + cldfra(i,k,j)=cldfra(i,k,j)+ccldfra(i,k,j)-0.5*(ITRMX+ITRMN) + ENDDO + ENDDO + ENDDO + ENDIF + CALL RRTMG_SWRAD_FAST( & RTHRATENSW=RTHRATENSW, & SWUPT=SWUPT,SWUPTC=SWUPTC, & @@ -2431,7 +2599,7 @@ SUBROUTINE radiation_driver ( & COSZR=COSZR,JULDAY=JULDAY,SOLCON=SOLCON, & ALBEDO=ALBEDO,t3d=t,t8w=t8w,TSK=TSK, & p3d=p,p8w=p8w,pi3d=pi,rho3d=rho, & - dz8w=dz8w,CLDFRA3D=CLDFRA,CCLDFRA=CCLDFRA, & + dz8w=dz8w,CLDFRA3D=CLDFRA, & #if (EM_CORE == 1) LRADIUS=lradius, IRADIUS=iradius, & #endif @@ -2444,7 +2612,6 @@ SUBROUTINE radiation_driver ( & XLAND=XLAND,XICE=XICE,SNOW=SNOW, & QV3D=qv,QC3D=qc,QR3D=qr, & QI3D=qi,QS3D=qs,QG3D=qg, & - QCCONV=QCCONV,QICONV=QICONV, & O3INPUT=O3INPUT,O33D=O3RAD, & AER_OPT=AER_OPT,aerod=aerod,no_src=no_src_types, & ALSWVISDIR=alswvisdir ,ALSWVISDIF=alswvisdif, & !Zhenxin ssib alb comp (06/2010) @@ -2473,7 +2640,6 @@ SUBROUTINE radiation_driver ( & ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte,& SWUPFLX=SWUPFLX,SWUPFLXC=SWUPFLXC, & SWDNFLX=SWDNFLX,SWDNFLXC=SWDNFLXC, & - cu_physics=cu_physics, & tauaer3d_sw=tauaer_sw, & ! jararias 2013/11 ssaaer3d_sw=ssaaer_sw, & ! jararias 2013/11 asyaer3d_sw=asyaer_sw, & ! jararias 2013/11 @@ -2488,6 +2654,17 @@ SUBROUTINE radiation_driver ( & ENDDO ENDDO ENDDO + + ! restore old hydrometeors & cloud fraction + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc(i,k,j) = qc_old(i,k,j) + qi(i,k,j) = qi_old(i,k,j) + cldfra(i,k,j) = cldfra_old(i,k,j) + ENDDO + ENDDO + ENDDO #endif CASE (GFDLSWSCHEME) From 41a89e5f29ba290d88667d5606b3518efd16350c Mon Sep 17 00:00:00 2001 From: weiwangncar Date: Wed, 29 Jan 2020 19:30:24 -0700 Subject: [PATCH 03/24] .. to trigger jenkin test... --- phys/module_physics_init.F | 3 --- 1 file changed, 3 deletions(-) diff --git a/phys/module_physics_init.F b/phys/module_physics_init.F index 2a3a17f742..663532a370 100644 --- a/phys/module_physics_init.F +++ b/phys/module_physics_init.F @@ -437,10 +437,8 @@ SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, & INTEGER, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: LOWLYR ! bmj - REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: & CCLDFRA, QCCONV, QICONV - REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: & CONVCLD @@ -448,7 +446,6 @@ SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, & ! soil layer - REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: ZS,DZS REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: & !BSINGH(PNNL)- should be declared inout From 1dce82b568191372af1e5e6890b7aa3603652ffe Mon Sep 17 00:00:00 2001 From: Ricardo Fonseca Date: Thu, 30 Jan 2020 04:34:04 +0100 Subject: [PATCH 04/24] Registry file modified as per the reviewers request. --- Registry/Registry.EM_COMMON | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Registry/Registry.EM_COMMON b/Registry/Registry.EM_COMMON index e703810787..58d6c7269a 100644 --- a/Registry/Registry.EM_COMMON +++ b/Registry/Registry.EM_COMMON @@ -2901,7 +2901,7 @@ package mynnpblscheme3_dfi bl_pbl_physics_dfi==6 - dfi_scalar:df package nocuscheme cu_physics==0 - - package kfetascheme cu_physics==1 - state:w0avg -package bmjscheme cu_physics==2 - state:qcconv,qiconv +package bmjscheme cu_physics==2 - state:qcconv,qiconv,convcld,ccldfra package gfscheme cu_physics==3 - state:cugd_qvten,cugd_tten,cugd_qvtens,cugd_ttens,cugd_qcten,xmb_shallow,k22_shallow,kbcon_shallow,ktop_shallow package scalesasscheme cu_physics==4 - - package g3scheme cu_physics==5 - state:cugd_qvten,cugd_tten,cugd_qvtens,cugd_ttens,cugd_qcten,xmb_shallow,k22_shallow,kbcon_shallow,ktop_shallow From 47cfa8830053412be169055d3815672ab31e3baa Mon Sep 17 00:00:00 2001 From: rmfonsecaweb <51331883+rmfonsecaweb@users.noreply.github.com> Date: Thu, 30 Jan 2020 07:38:08 +0400 Subject: [PATCH 05/24] Update Registry.EM_COMMON The file was updated following the reviewer's request. --- Registry/Registry.EM_COMMON | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Registry/Registry.EM_COMMON b/Registry/Registry.EM_COMMON index 11f06a005c..896df28a6b 100644 --- a/Registry/Registry.EM_COMMON +++ b/Registry/Registry.EM_COMMON @@ -2915,7 +2915,7 @@ package mynnpblscheme3_dfi bl_pbl_physics_dfi==6 - dfi_scalar:df package nocuscheme cu_physics==0 - - package kfetascheme cu_physics==1 - state:w0avg -package bmjscheme cu_physics==2 - state:qcconv,qiconv +package bmjscheme cu_physics==2 - state:qcconv,qiconv,convcld,ccldfra package gfscheme cu_physics==3 - state:cugd_qvten,cugd_tten,cugd_qvtens,cugd_ttens,cugd_qcten,xmb_shallow,k22_shallow,kbcon_shallow,ktop_shallow package scalesasscheme cu_physics==4 - - package g3scheme cu_physics==5 - state:cugd_qvten,cugd_tten,cugd_qvtens,cugd_ttens,cugd_qcten,xmb_shallow,k22_shallow,kbcon_shallow,ktop_shallow From b73d104f3aedfe472a19f8bbc32099c7aaf94d82 Mon Sep 17 00:00:00 2001 From: Ricardo Fonseca Date: Fri, 31 Jan 2020 12:19:01 +0100 Subject: [PATCH 06/24] Code changes to allow compilation with NMM dynamical core. --- Registry/Registry.NMM | 11 ++++++++--- dyn_nmm/module_PHYSICS_CALLS.F | 5 +++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Registry/Registry.NMM b/Registry/Registry.NMM index d9039e69aa..9c32409ca0 100644 --- a/Registry/Registry.NMM +++ b/Registry/Registry.NMM @@ -455,6 +455,8 @@ state real t_adj ijk dyn_nmm 1 - rd=(DownNear) "T_ADJ" "T state real t_old ijk dyn_nmm 1 - r "T_OLD" "T before last call to precip" "K" state real zero_3d ijk dyn_nmm 1 - r state real W0AVG ikj dyn_nmm 1 - r "W0AVG" "AVERAGE VERTICAL VELOCITY FOR KF CUMULUS SCHEME" "m s-1" +state real qcconv ikj dyn_nmm 1 - rh "QCCONV" "CLOUD MIXING RATIO FOR BMJ CUMULUS SCHEME" "kg kg-1" +state real qiconv ikj dyn_nmm 1 - rh "QICONV" "ICE MIXING RATIO FOR BMJ CUMULUS SCHEME" "kg kg-1" state real AKHS_OUT ij dyn_nmm 1 - rh023 "AKHS_OUT" "Output sfc exch coeff for heat" "m2 s-1" state real AKMS_OUT ij dyn_nmm 1 - rh023 "AKMS_OUT" "Output sfc exch coeff for momentum" "m2 s-1" # @@ -587,7 +589,9 @@ state real rrw ijkb dyn_nmm 1 - rh "RRW" "Tracer" state real f_ice ikj dyn_nmm 1 - rh023d=(DownMassIKJ:@EExtrap,0.0)u=(UpMassIKJ:@EExtrap,0.0) "F_ICE" "Frozen fraction of CWM" "" state real f_rain ikj dyn_nmm 1 - rh023d=(DownMassIKJ:@EExtrap,0.0)u=(UpMassIKJ:@EExtrap,0.0) "F_RAIN" "Rain fraction of liquid part of CWM" "" state real f_rimef ikj dyn_nmm 1 - rh023d=(DownMassIKJ:@EExtrap,1.0)u=(UpMassIKJ:@EExtrap,1.0) "F_RIMEF" "Rime factor" "" -state real cldfra ijk dyn_nmm 1 - rh023 "CLDFRA" "Cloud fraction" "" +state real cldfra ijk dyn_nmm 1 - rh023 "CLDFRA" "Cloud fraction" "" +state real CONVCLD ij dyn_nmm 1 - rh "CONVCLD" "BMJ CONVECTIVE CLOUD" "kg m-2" +state real CCLDFRA ikj dyn_nmm 1 - rh "CCLDFRA" "CONVECTIVE CLOUD FRACTION" "" state real sr ij dyn_nmm 1 - irh023 "SR" "Timestep mass ratio of snow:precip" "" state real cfrach ij dyn_nmm 1 - rh023d=(DownCopy) "CFRACH" "High cloud fraction" "" state real cfracl ij dyn_nmm 1 - rh023d=(DownCopy) "CFRACL" "Low cloud fraction" "" @@ -1492,8 +1496,9 @@ rconfig real seaice_snowdepth_max namelist,physics 1 1.E10 rconfig real seaice_snowdepth_min namelist,physics 1 0.001 - "seaice_snowdepth_min" "Minimum snow depth (m) on sea ice" rconfig integer seaice_thickness_opt namelist,physics 1 0 - "seaice_thickness_opt" "Method for setting sea-ice thickness" rconfig real seaice_thickness_default namelist,physics 1 3.0 - "seaice_thickness_default" "Default value for sea-ice thickness" -rconfig logical tice2tsk_if2cold namelist,physics 1 .false. - "tice2tsk_if2cold" "Avoid low ice temps when ice frac and Tsk are inconsistent" +rconfig logical tice2tsk_if2cold namelist,physics 1 .false. - "tice2tsk_if2cold" "Avoid low ice temps when ice frac and Tsk are inconsistent" rconfig integer sst_update namelist,physics 1 0 i01rh "sst_update" "update sst from wrflowinp file 0=no, 1=yes" "" +rconfig logical bmj_rad_feedback namelist,physics max_domains .false. - "if true include radiative effects of bmj clouds" "" rconfig integer sf_urban_physics namelist,physics max_domains 0 h "sf_urban_physics" "activate urban model 0=no, 1=Noah_UCM 2=BEP_UCM" "" rconfig logical usemonalb namelist,physics 1 .true. h "usemonalb" "use 2d field vs table values false=table, True=2d" "" rconfig logical rdmaxalb namelist,physics 1 .true. h "rdmaxalb" "false set it to table values" "" @@ -1855,7 +1860,7 @@ package shinhongscheme bl_pbl_physics==11 - - package fitchscheme windfarm_opt==1 - - package kfetascheme cu_physics==1 - - -package bmjscheme cu_physics==2 - - +package bmjscheme cu_physics==2 - state:qcconv,qiconv,convcld,ccldfra package gdscheme cu_physics==93 - - package sasscheme cu_physics==94 - state:hpbl2d,heat2d,evap2d package scalesasscheme cu_physics==4 - state:hpbl2d,heat2d,evap2d diff --git a/dyn_nmm/module_PHYSICS_CALLS.F b/dyn_nmm/module_PHYSICS_CALLS.F index 4e308e2ee5..02180194bc 100644 --- a/dyn_nmm/module_PHYSICS_CALLS.F +++ b/dyn_nmm/module_PHYSICS_CALLS.F @@ -452,6 +452,8 @@ SUBROUTINE RADIATION(NTSD,DT,JULDAY,JULYR,XTIME,JULIAN & & ,cldovrlp=config_flags%cldovrlp & ! J. Henderson AER: cldovrlp namelist value & ,WARM_RAIN=WARM_RAIN & & ,SWDOWNC=TOTSWDNC,CLDFRA=CLFR & + & ,CCLDFRA=grid%ccldfra & + & ,QCCONV=grid%qcconv,QICONV=grid%qiconv & & ,SWUPT=SWUPT & & ,SWUPTC=SWUPTC & & ,SWDNT=SWDNT & @@ -2863,6 +2865,8 @@ SUBROUTINE CUCNVC(NTSD,DT,NCNVC,NRADS,NRADL & & ,ITIMESTEP=NTSD,DT=DT,DX=GPS & & ,RAINC=RAINC,RAINCV=RAINCV,NCA=NCA & & ,CLDFRA_DP=CLDFRA_DP,CLDFRA_SH=CLDFRA_SH & + & ,CCLDFRA=grid%ccldfra, CONVCLD=grid%convcld & + & ,QCCONV=grid%qcconv, QICONV=grid%qiconv & & ,QC_CU=QC_CU, QI_CU=QI_CU & & ,DZ8W=DZ,P8W=P8W,FORCET=TTEN,FORCEQ=QTEN & & ,CLDEFI=CLDEFI,LOWLYR=LOWLYR,XLAND=XLAND & @@ -2913,6 +2917,7 @@ SUBROUTINE CUCNVC(NTSD,DT,NCNVC,NRADS,NRADL & & ,shalconv=config_flags%sas_shal_conv & & ,shal_pgcon=config_flags%sas_shal_pgcon & & ,IS_CAMMGMP_USED=IS_CAMMGMP_USED & + & ,BMJ_RAD_FEEDBACK=config_flags%bmj_rad_feedback & ! Selection argument & ,CU_PHYSICS=CONFIG_FLAGS%CU_PHYSICS & & ,MP_PHYSICS=CONFIG_FLAGS%MP_PHYSICS & From a7873d8454fd546840798f2afd29917b0d39e663 Mon Sep 17 00:00:00 2001 From: weiwangncar Date: Fri, 31 Jan 2020 09:41:31 -0700 Subject: [PATCH 07/24] to trigger jenkin test... will change it back... --- Registry/Registry.EM_COMMON | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Registry/Registry.EM_COMMON b/Registry/Registry.EM_COMMON index 896df28a6b..7d40621c33 100644 --- a/Registry/Registry.EM_COMMON +++ b/Registry/Registry.EM_COMMON @@ -2335,7 +2335,7 @@ rconfig integer num_soil_cat namelist,physics 1 16 rconfig integer mp_zero_out namelist,physics 1 0 - "mp_zero_out" "microphysics fields set to zero 0=no action taken, 1=all fields but Qv, 2=all fields including Qv" "flag" rconfig real mp_zero_out_thresh namelist,physics 1 1.e-8 - "mp_zero_out_thresh" "minimum threshold for non-Qv moist fields, below are set to zero" "kg/kg" rconfig real seaice_threshold namelist,physics 1 100 h "seaice_threshold" "tsk below which which water points are set to sea ice for slab scheme" "K" -rconfig logical bmj_rad_feedback namelist,physics max_domains .false. - "if true include radiative effects of bmj clouds" "" +rconfig logical bmj_rad_feedback namelist,physics max_domains .true. - "if true include radiative effects of bmj clouds" "" rconfig integer sst_update namelist,physics 1 0 h "sst_update" "update sst from wrflowinp file 0=no, 1=yes" "" rconfig integer sst_skin namelist,physics 1 0 h "sst_skin" "calculate sst skin temperature 0=no, 1=yes" "" From 7c9306d2cd875e63003265a12af1fd0ef44c84a0 Mon Sep 17 00:00:00 2001 From: Wei Wang Date: Fri, 31 Jan 2020 16:44:21 -0700 Subject: [PATCH 08/24] no need to initialize these new variables to zero and this also helps NMM to compile --- dyn_em/start_em.F | 3 +-- phys/module_cu_bmj.F | 15 ++++----------- phys/module_physics_init.F | 21 ++++++--------------- 3 files changed, 11 insertions(+), 28 deletions(-) diff --git a/dyn_em/start_em.F b/dyn_em/start_em.F index c0771c8571..54fd9827d6 100644 --- a/dyn_em/start_em.F +++ b/dyn_em/start_em.F @@ -1036,8 +1036,7 @@ SUBROUTINE start_domain_em ( grid, allowed_to_read & grid%re_snow_gsfc, grid%re_graupel_gsfc, & ! Goddard grid%re_hail_gsfc, grid%re_rain_gsfc, & ! Goddard grid%nca,grid%swrad_scat, & - grid%cldefi, grid%ccldfra, grid%convcld, & - grid%qcconv, grid%qiconv, grid%lowlyr, & + grid%cldefi,grid%lowlyr, & grid%mass_flux, & grid%rthften, grid%rqvften, & grid%cldfra, & diff --git a/phys/module_cu_bmj.F b/phys/module_cu_bmj.F index ebf6a8fb66..a736e3c0cc 100644 --- a/phys/module_cu_bmj.F +++ b/phys/module_cu_bmj.F @@ -1808,8 +1808,8 @@ END SUBROUTINE TTBLEX !----------------------------------------------------------------------- !----------------------------------------------------------------------- SUBROUTINE BMJINIT(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN & - & ,CLDEFI,CCLDFRA,CONVCLD,QCCONV,QICONV,LOWLYR,CP & - & ,RD,RESTART,ALLOWED_TO_READ & + & ,CLDEFI,LOWLYR,CP,RD,RESTART & + ,ALLOWED_TO_READ & & ,IDS,IDE,JDS,JDE,KDS,KDE & & ,IMS,IME,JMS,JME,KMS,KME & & ,ITS,ITE,JTS,JTE,KTS,KTE) @@ -1827,12 +1827,9 @@ SUBROUTINE BMJINIT(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN & & RTHCUTEN & & ,RQVCUTEN & & ,RQCCUTEN & - & ,RQRCUTEN & - & ,CCLDFRA & - & ,QCCONV & - & ,QICONV + & ,RQRCUTEN ! - REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: CLDEFI,CONVCLD + REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: CLDEFI INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: LOWLYR ! @@ -1860,9 +1857,6 @@ SUBROUTINE BMJINIT(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN & DO J=JTS,JTF DO K=KTS,KTF DO I=ITS,ITF - QICONV(I,K,J)=0. - QCCONV(I,K,J)=0. - CCLDFRA(I,K,J)=0. RTHCUTEN(I,K,J)=0. RQVCUTEN(I,K,J)=0. RQCCUTEN(I,K,J)=0. @@ -1873,7 +1867,6 @@ SUBROUTINE BMJINIT(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN & ! DO J=JTS,JTF DO I=ITS,ITF - CONVCLD(I,J)=0. CLDEFI(I,J)=AVGEFI ENDDO ENDDO diff --git a/phys/module_physics_init.F b/phys/module_physics_init.F index 663532a370..ffc41cc702 100644 --- a/phys/module_physics_init.F +++ b/phys/module_physics_init.F @@ -55,8 +55,7 @@ SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, & re_rain_gsfc, & ! Goddard #endif NCA,swrad_scat, & - CLDEFI, CCLDFRA, CONVCLD, QCCONV, & - QICONV, LOWLYR, & + CLDEFI,LOWLYR, & MASS_FLUX, & RTHFTEN, RQVFTEN, & CLDFRA,CLDFRA_OLD,GLW,GSW,EMISS,EMBCK, & !EMBCK new @@ -436,12 +435,6 @@ SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, & INTEGER, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: LOWLYR -! bmj - REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: & - CCLDFRA, QCCONV, QICONV - REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: & - CONVCLD - !pbl ! soil layer @@ -1420,7 +1413,7 @@ SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, & CALL cu_init(DX,STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, & RQVCUTEN,RQRCUTEN,RQCCUTEN,RQSCUTEN,RQICUTEN, & NCA,RAINC,RAINCV,W0AVG,config_flags,restart, & - CLDEFI,CCLDFRA,CONVCLD,QCCONV,QICONV,LOWLYR, & + CLDEFI,LOWLYR, & MASS_FLUX,RTHFTEN,RQVFTEN, & #if ( EM_CORE == 1 ) !BSINGH - For WRFCuP Scheme @@ -3563,7 +3556,7 @@ END SUBROUTINE bl_init SUBROUTINE cu_init(DX,STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, & RQVCUTEN,RQRCUTEN,RQCCUTEN,RQSCUTEN,RQICUTEN,& NCA,RAINC,RAINCV,W0AVG,config_flags,restart, & - CLDEFI,CCLDFRA,CONVCLD,QCCONV,QICONV,LOWLYR, & + CLDEFI,LOWLYR, & MASS_FLUX, RTHFTEN, RQVFTEN, & #if ( EM_CORE == 1 ) !BSINGH - For WRFCuP Scheme @@ -3618,7 +3611,7 @@ SUBROUTINE cu_init(DX,STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, & REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: & RUCUTEN, RVCUTEN, RTHCUTEN, RQVCUTEN, RQCCUTEN, & - RQRCUTEN, RQICUTEN, RQSCUTEN, CCLDFRA, QCCONV, QICONV + RQRCUTEN, RQICUTEN, RQSCUTEN #if ( EM_CORE == 1 ) !BSINGH - For WRFCuP Scheme REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: & @@ -3637,8 +3630,6 @@ SUBROUTINE cu_init(DX,STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, & REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: RAINC, RAINCV - REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: CONVCLD - REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: CLDEFI #if ( EM_CORE == 1 ) !BSINGH - For WRFCuP Scheme @@ -3694,8 +3685,8 @@ SUBROUTINE cu_init(DX,STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, & CASE (BMJSCHEME) CALL bmjinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, & - CLDEFI,CCLDFRA,CONVCLD,QCCONV,QICONV, & - LOWLYR,cp,r_d,restart,allowed_to_read, & + CLDEFI,LOWLYR,cp,r_d,restart, & + allowed_to_read, & ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & its, ite, jts, jte, kts, kte ) From ab0ec027cc3bbb58c8655e864ebf5a7d9eddb52d Mon Sep 17 00:00:00 2001 From: Ricardo Fonseca Date: Sat, 1 Feb 2020 06:27:46 +0100 Subject: [PATCH 09/24] Radiation_Driver modified following reviewers suggestion. --- phys/module_radiation_driver.F | 243 +++++---------------------------- 1 file changed, 37 insertions(+), 206 deletions(-) diff --git a/phys/module_radiation_driver.F b/phys/module_radiation_driver.F index 8c05a37e2a..42115772a8 100644 --- a/phys/module_radiation_driver.F +++ b/phys/module_radiation_driver.F @@ -205,7 +205,7 @@ SUBROUTINE radiation_driver ( & ,p_seas_3, p_seas_4 & !NUWRF #endif #endif - ,KFCUPSCHEME & !BSINGH - Added KFCUPSCHEME for WRFCuP scheme + ,KFCUPSCHEME, BMJSCHEME & !BSINGH - Added KFCUPSCHEME for WRFCuP scheme ,FLGLWSCHEME, FLGSWSCHEME USE module_model_constants @@ -219,7 +219,7 @@ SUBROUTINE radiation_driver ( & USE module_ra_sw , ONLY : swrad USE module_ra_gsfcsw , ONLY : gsfcswrad USE module_ra_rrtm , ONLY : rrtmlwrad - USE module_ra_rrtmg_lw , ONLY : rrtmg_lwrad, rrtmg_lwinit + USE module_ra_rrtmg_lw , ONLY : rrtmg_lwrad USE module_ra_rrtmg_sw , ONLY : rrtmg_swrad #if( BUILD_RRTMG_FAST == 1) USE module_ra_rrtmg_lwf , ONLY : rrtmg_lwrad_fast @@ -832,7 +832,6 @@ SUBROUTINE radiation_driver ( & REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qc_old REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qi_old - REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: cldfra_old REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qc_cu_weight REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qi_cu_weight @@ -1619,7 +1618,29 @@ SUBROUTINE radiation_driver ( & ENDIF #endif - + IF ( cu_physics == BMJSCHEME ) THEN + ! save old hydrometeors + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc_old(i,k,j) = qc(i,k,j) + qi_old(i,k,j) = qi(i,k,j) + ENDDO + ENDDO + ENDDO + ! Modify cloud fraction and temporarily hydrometeors (PCC scheme) + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc(i,k,j) = qc(i,k,j) + QCCONV(i,k,j) + qi(i,k,j) = qi(i,k,j) + QICONV(i,k,j) + ITRMX=MIN(cldfra(i,k,j),ccldfra(i,k,j)) + ITRMN=MAX(0.,cldfra(i,k,j)+ccldfra(i,k,j)-1.) + cldfra(i,k,j)=cldfra(i,k,j)+ccldfra(i,k,j)-0.5*(ITRMX+ITRMN) + ENDDO + ENDDO + ENDDO + ENDIF lwrad_select: SELECT CASE(lw_physics) @@ -1632,32 +1653,6 @@ SUBROUTINE radiation_driver ( & p_top_dummy = -1. ! not used by NMM END IF - ! save old hydrometeors & cloud fraction - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc_old(i,k,j) = qc(i,k,j) - qi_old(i,k,j) = qi(i,k,j) - cldfra_old(i,k,j) = cldfra(i,k,j) - ENDDO - ENDDO - ENDDO - - IF ( cu_physics .eq. 2 ) THEN - ! temporarily modify hydrometeors & cloud fraction (PCC scheme) - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc(i,k,j) = qc(i,k,j) + QCCONV(i,k,j) - qi(i,k,j) = qi(i,k,j) + QICONV(i,k,j) - ITRMX=MIN(cldfra(i,k,j),ccldfra(i,k,j)) - ITRMN=MAX(0.,cldfra(i,k,j)+ccldfra(i,k,j)-1.) - cldfra(i,k,j)=cldfra(i,k,j)+ccldfra(i,k,j)-0.5*(ITRMX+ITRMN) - ENDDO - ENDDO - ENDDO - ENDIF - CALL RRTMLWRAD( & P_TOP=p_top_dummy & ,RTHRATEN=RTHRATEN,GLW=GLW,OLR=RLWTOA,EMISS=EMISS & @@ -1680,16 +1675,6 @@ SUBROUTINE radiation_driver ( & ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte & ) - ! restore old hydrometeors & cloud fraction - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc(i,k,j) = qc_old(i,k,j) - qi(i,k,j) = qi_old(i,k,j) - cldfra(i,k,j) = cldfra_old(i,k,j) - ENDDO - ENDDO - ENDDO ! NUWRF Version by Toshihisa Matsui and Jainn Shi 20090623 case (goddardlwscheme) @@ -1884,52 +1869,6 @@ SUBROUTINE radiation_driver ( & ENDDO END IF - ! save old hydrometeors & cloud fraction - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc_old(i,k,j) = qc(i,k,j) - qi_old(i,k,j) = qi(i,k,j) - cldfra_old(i,k,j) = cldfra(i,k,j) - ENDDO - ENDDO - ENDDO - - IF ( cu_physics .eq. 2 ) THEN - ! temporarily modify hydrometeors & cloud fraction (PCC scheme) - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc(i,k,j) = qc(i,k,j) + QCCONV(i,k,j) - qi(i,k,j) = qi(i,k,j) + QICONV(i,k,j) - ITRMX=MIN(cldfra(i,k,j),ccldfra(i,k,j)) - ITRMN=MAX(0.,cldfra(i,k,j)+ccldfra(i,k,j)-1.) - cldfra(i,k,j)=cldfra(i,k,j)+ccldfra(i,k,j)-0.5*(ITRMX+ITRMN) - ENDDO - ENDDO - ENDDO - ENDIF - - !Need to reset NLAYERS if vertical nesting is used. - !This code follows that for case RRTMSCHEME within - !subroutine RRTMLWRAD. - IF ( PRESENT(p_top) ) THEN - p_top_dummy = p_top - ELSE - p_top_dummy = -1. ! not used by NMM - END IF - IF ( p_top_dummy .GT. 0 ) THEN ! flag value for NMM = -1 - !NLAYERS is recalculated - !every time the radiation scheme is called. This is - !necessary if e_vert parent .NE. e_vert nest since - !NLAYERS could then be different for each domain. - CALL RRTMG_LWINIT( & - p_top, .FALSE. , & - ids, ide, jds, jde, kds, kde, & - ims, ime, jms, jme, kms, kme, & - its, ite, jts, jte, kts, kte ) - ENDIF - CALL RRTMG_LWRAD( & RTHRATENLW=RTHRATEN, & LWUPT=LWUPT,LWUPTC=LWUPTC,LWUPTCLN=LWUPTCLN, & @@ -1983,16 +1922,6 @@ SUBROUTINE radiation_driver ( & LWDNFLX=LWDNFLX,LWDNFLXC=LWDNFLXC, & mp_physics=mp_physics ) - ! restore old hydrometeors & cloud fraction - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc(i,k,j) = qc_old(i,k,j) - qi(i,k,j) = qi_old(i,k,j) - cldfra(i,k,j) = cldfra_old(i,k,j) - ENDDO - ENDDO - ENDDO CASE (RRTMK_LWSCHEME) @@ -2027,32 +1956,6 @@ SUBROUTINE radiation_driver ( & CASE (RRTMG_LWSCHEME_FAST) CALL wrf_debug (100, 'CALL rrtmg_lw') - ! save old hydrometeors & cloud fraction - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc_old(i,k,j) = qc(i,k,j) - qi_old(i,k,j) = qi(i,k,j) - cldfra_old(i,k,j) = cldfra(i,k,j) - ENDDO - ENDDO - ENDDO - - IF ( cu_physics .eq. 2 ) THEN - ! temporarily modify hydrometeors & cloud fraction (PCC scheme) - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc(i,k,j) = qc(i,k,j) + QCCONV(i,k,j) - qi(i,k,j) = qi(i,k,j) + QICONV(i,k,j) - ITRMX=MIN(cldfra(i,k,j),ccldfra(i,k,j)) - ITRMN=MAX(0.,cldfra(i,k,j)+ccldfra(i,k,j)-1.) - cldfra(i,k,j)=cldfra(i,k,j)+ccldfra(i,k,j)-0.5*(ITRMX+ITRMN) - ENDDO - ENDDO - ENDDO - ENDIF - CALL RRTMG_LWRAD_FAST( & RTHRATENLW=RTHRATEN, & LWUPT=LWUPT,LWUPTC=LWUPTC, & @@ -2104,16 +2007,6 @@ SUBROUTINE radiation_driver ( & LWDNFLX=LWDNFLX,LWDNFLXC=LWDNFLXC & ) - ! restore old hydrometeors & cloud fraction - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc(i,k,j) = qc_old(i,k,j) - qi(i,k,j) = qi_old(i,k,j) - cldfra(i,k,j) = cldfra_old(i,k,j) - ENDDO - ENDDO - ENDDO #endif CASE (HELDSUAREZ) @@ -2460,32 +2353,6 @@ SUBROUTINE radiation_driver ( & ENDDO END IF - ! save old hydrometeors & cloud fraction - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc_old(i,k,j) = qc(i,k,j) - qi_old(i,k,j) = qi(i,k,j) - cldfra_old(i,k,j) = cldfra(i,k,j) - ENDDO - ENDDO - ENDDO - - IF ( cu_physics .eq. 2 ) THEN - ! temporarily modify hydrometeors & cloud fraction (PCC scheme) - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc(i,k,j) = qc(i,k,j) + QCCONV(i,k,j) - qi(i,k,j) = qi(i,k,j) + QICONV(i,k,j) - ITRMX=MIN(cldfra(i,k,j),ccldfra(i,k,j)) - ITRMN=MAX(0.,cldfra(i,k,j)+ccldfra(i,k,j)-1.) - cldfra(i,k,j)=cldfra(i,k,j)+ccldfra(i,k,j)-0.5*(ITRMX+ITRMN) - ENDDO - ENDDO - ENDDO - ENDIF - CALL RRTMG_SWRAD( & RTHRATENSW=RTHRATENSW, & SWUPT=SWUPT,SWUPTC=SWUPTC,SWUPTCLN=SWUPTCLN, & @@ -2556,17 +2423,6 @@ SUBROUTINE radiation_driver ( & ENDDO ENDDO - ! restore old hydrometeors & cloud fraction - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc(i,k,j) = qc_old(i,k,j) - qi(i,k,j) = qi_old(i,k,j) - cldfra(i,k,j) = cldfra_old(i,k,j) - ENDDO - ENDDO - ENDDO - CASE (RRTMK_SWSCHEME) DO j=jts,jte @@ -2581,32 +2437,6 @@ SUBROUTINE radiation_driver ( & CASE (RRTMG_SWSCHEME_FAST) CALL wrf_debug(100, 'CALL rrtmg_sw_fast') - ! save old hydrometeors & cloud fraction - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc_old(i,k,j) = qc(i,k,j) - qi_old(i,k,j) = qi(i,k,j) - cldfra_old(i,k,j) = cldfra(i,k,j) - ENDDO - ENDDO - ENDDO - - IF ( cu_physics .eq. 2 ) THEN - ! temporarily modify hydrometeors & cloud fraction (PCC scheme) - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc(i,k,j) = qc(i,k,j) + QCCONV(i,k,j) - qi(i,k,j) = qi(i,k,j) + QICONV(i,k,j) - ITRMX=MIN(cldfra(i,k,j),ccldfra(i,k,j)) - ITRMN=MAX(0.,cldfra(i,k,j)+ccldfra(i,k,j)-1.) - cldfra(i,k,j)=cldfra(i,k,j)+ccldfra(i,k,j)-0.5*(ITRMX+ITRMN) - ENDDO - ENDDO - ENDDO - ENDIF - CALL RRTMG_SWRAD_FAST( & RTHRATENSW=RTHRATENSW, & SWUPT=SWUPT,SWUPTC=SWUPTC, & @@ -2674,17 +2504,6 @@ SUBROUTINE radiation_driver ( & ENDDO ENDDO ENDDO - - ! restore old hydrometeors & cloud fraction - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc(i,k,j) = qc_old(i,k,j) - qi(i,k,j) = qi_old(i,k,j) - cldfra(i,k,j) = cldfra_old(i,k,j) - ENDDO - ENDDO - ENDDO #endif CASE (GFDLSWSCHEME) @@ -2851,6 +2670,18 @@ SUBROUTINE radiation_driver ( & ENDDO ENDIF + IF ( cu_physics == BMJSCHEME ) THEN + ! Restore old hydrometeors (PCC scheme) + DO j=jts,jte + DO k=kts,kte + DO i=its,ite + qc(i,k,j) = qc_old(i,k,j) + qi(i,k,j) = qi_old(i,k,j) + ENDDO + ENDDO + ENDDO + ENDIF + ! Restore qc & qi for any model physics configuration IF ( F_QC ) THEN DO j=jts,jte From 8810095720352ab5fb625b472bdb2a184c8bb99e Mon Sep 17 00:00:00 2001 From: Ricardo Fonseca Date: Sun, 2 Feb 2020 05:43:54 +0100 Subject: [PATCH 10/24] Files modified following reviewers suggestion. --- dyn_em/module_first_rk_step_part1.F | 7 ++----- phys/module_radiation_driver.F | 29 ++++++++++++++++++++++++++--- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/dyn_em/module_first_rk_step_part1.F b/dyn_em/module_first_rk_step_part1.F index b954e5ecb1..a92b2ac0a5 100644 --- a/dyn_em/module_first_rk_step_part1.F +++ b/dyn_em/module_first_rk_step_part1.F @@ -349,6 +349,7 @@ SUBROUTINE first_rk_step_part1 ( grid , config_flags & & , CLDFRA=grid%cldfra, CLDFRA_MP_ALL=grid%cldfra_mp_all & & , CCLDFRA=grid%ccldfra & & , QCCONV=grid%qcconv, QICONV=grid%qiconv & + & , BMJ_RAD_FEEDBACK=config_flags%bmj_rad_feedback & & , LRADIUS=grid%LRADIUS,IRADIUS=grid%IRADIUS & !BSINGH(01/22/2014) & , CLDFRA_DP=grid%cldfra_dp & ! ckay for subgrid cloud & , CLDFRA_SH=grid%cldfra_sh & @@ -1008,22 +1009,18 @@ SUBROUTINE first_rk_step_part1 ( grid , config_flags & & ,bl_mynn_edmf_mom=config_flags%bl_mynn_edmf_mom & & ,bl_mynn_edmf_tke=config_flags%bl_mynn_edmf_tke & & ,bl_mynn_mixscalars=config_flags%bl_mynn_mixscalars & - & ,bl_mynn_output=config_flags%bl_mynn_output & & ,bl_mynn_cloudmix=config_flags%bl_mynn_cloudmix & & ,bl_mynn_mixqt=config_flags%bl_mynn_mixqt & & ,edmf_a=grid%edmf_a,edmf_w=grid%edmf_w & & ,edmf_thl=grid%edmf_thl,edmf_qt=grid%edmf_qt & & ,edmf_ent=grid%edmf_ent,edmf_qc=grid%edmf_qc & - & ,sub_thl3D=grid%sub_thl3D,sub_sqv3D=grid%sub_sqv3D & - & ,det_thl3D=grid%det_thl3D,det_sqv3D=grid%det_sqv3D & & ,rmol=grid%rmol, ch=grid%ch & & ,qcg=grid%qcg, grav_settling=config_flags%grav_settling & ! & ,K_m=grid%K_m, K_h=grid%K_h, K_q=grid%K_q & & ,vdfg=grid%vdfg,nupdraft=grid%nupdraft,maxMF=grid%maxmf & - & ,ktop_plume=grid%ktop_plume & + & ,ktop_shallow=grid%ktop_shallow & & ,spp_pbl=config_flags%spp_pbl & & ,pattern_spp_pbl=grid%pattern_spp_pbl & - & ,restart=config_flags%restart,cycling=config_flags%cycling & !GWD for ARW & ,GWD_OPT=config_flags%gwd_opt & & ,DTAUX3D=grid%dtaux3d,DTAUY3D=grid%dtauy3d & diff --git a/phys/module_radiation_driver.F b/phys/module_radiation_driver.F index 42115772a8..a09030b000 100644 --- a/phys/module_radiation_driver.F +++ b/phys/module_radiation_driver.F @@ -73,6 +73,7 @@ SUBROUTINE radiation_driver ( & , CTOP2D_OUT & ! goddardrad , CLDFRA,CLDFRA_MP_ALL,CLDT,ZNU & , CCLDFRA, QCCONV, QICONV & + , bmj_rad_feedback & #if (EM_CORE == 1) , lradius,iradius & #endif @@ -219,7 +220,7 @@ SUBROUTINE radiation_driver ( & USE module_ra_sw , ONLY : swrad USE module_ra_gsfcsw , ONLY : gsfcswrad USE module_ra_rrtm , ONLY : rrtmlwrad - USE module_ra_rrtmg_lw , ONLY : rrtmg_lwrad + USE module_ra_rrtmg_lw , ONLY : rrtmg_lwrad, rrtmg_lwinit USE module_ra_rrtmg_sw , ONLY : rrtmg_swrad #if( BUILD_RRTMG_FAST == 1) USE module_ra_rrtmg_lwf , ONLY : rrtmg_lwrad_fast @@ -408,6 +409,8 @@ SUBROUTINE radiation_driver ( & !================================================================== ! LOGICAL, OPTIONAL, INTENT(IN) :: explicit_convection + LOGICAL,INTENT(IN) :: bmj_rad_feedback + LOGICAL :: expl_conv INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & @@ -1618,7 +1621,7 @@ SUBROUTINE radiation_driver ( & ENDIF #endif - IF ( cu_physics == BMJSCHEME ) THEN + IF ( cu_physics == BMJSCHEME .AND. bmj_rad_feedback .EQV. .TRUE. ) THEN ! save old hydrometeors DO j=jts,jte DO k=kts,kte @@ -1869,6 +1872,26 @@ SUBROUTINE radiation_driver ( & ENDDO END IF + !Need to reset NLAYERS if vertical nesting is used. + !This code follows that for case RRTMSCHEME within + !subroutine RRTMLWRAD. + IF ( PRESENT(p_top) ) THEN + p_top_dummy = p_top + ELSE + p_top_dummy = -1. ! not used by NMM + END IF + IF ( p_top_dummy .GT. 0 ) THEN ! flag value for NMM = -1 + !NLAYERS is recalculated + !every time the radiation scheme is called. This is + !necessary if e_vert parent .NE. e_vert nest since + !NLAYERS could then be different for each domain. + CALL RRTMG_LWINIT( & + p_top, .FALSE. , & + ids, ide, jds, jde, kds, kde, & + ims, ime, jms, jme, kms, kme, & + its, ite, jts, jte, kts, kte ) + ENDIF + CALL RRTMG_LWRAD( & RTHRATENLW=RTHRATEN, & LWUPT=LWUPT,LWUPTC=LWUPTC,LWUPTCLN=LWUPTCLN, & @@ -2670,7 +2693,7 @@ SUBROUTINE radiation_driver ( & ENDDO ENDIF - IF ( cu_physics == BMJSCHEME ) THEN + IF ( cu_physics == BMJSCHEME .AND. bmj_rad_feedback .EQV. .TRUE. ) THEN ! Restore old hydrometeors (PCC scheme) DO j=jts,jte DO k=kts,kte From 9087ba0455c8f0a318ad1a8d0cec057b2d66ea3a Mon Sep 17 00:00:00 2001 From: weiwangncar Date: Sun, 2 Feb 2020 16:02:40 -0700 Subject: [PATCH 11/24] change the default option back to false, and trigger another jenkins test --- Registry/Registry.EM_COMMON | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Registry/Registry.EM_COMMON b/Registry/Registry.EM_COMMON index 7d40621c33..896df28a6b 100644 --- a/Registry/Registry.EM_COMMON +++ b/Registry/Registry.EM_COMMON @@ -2335,7 +2335,7 @@ rconfig integer num_soil_cat namelist,physics 1 16 rconfig integer mp_zero_out namelist,physics 1 0 - "mp_zero_out" "microphysics fields set to zero 0=no action taken, 1=all fields but Qv, 2=all fields including Qv" "flag" rconfig real mp_zero_out_thresh namelist,physics 1 1.e-8 - "mp_zero_out_thresh" "minimum threshold for non-Qv moist fields, below are set to zero" "kg/kg" rconfig real seaice_threshold namelist,physics 1 100 h "seaice_threshold" "tsk below which which water points are set to sea ice for slab scheme" "K" -rconfig logical bmj_rad_feedback namelist,physics max_domains .true. - "if true include radiative effects of bmj clouds" "" +rconfig logical bmj_rad_feedback namelist,physics max_domains .false. - "if true include radiative effects of bmj clouds" "" rconfig integer sst_update namelist,physics 1 0 h "sst_update" "update sst from wrflowinp file 0=no, 1=yes" "" rconfig integer sst_skin namelist,physics 1 0 h "sst_skin" "calculate sst skin temperature 0=no, 1=yes" "" From 6481d840f78de2fce3a7c18d2eb0ac60033fd232 Mon Sep 17 00:00:00 2001 From: weiwangncar Date: Tue, 4 Feb 2020 14:52:46 -0700 Subject: [PATCH 12/24] revert the change to that committed for MYNN (PR#1063) --- dyn_em/module_first_rk_step_part1.F | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dyn_em/module_first_rk_step_part1.F b/dyn_em/module_first_rk_step_part1.F index a92b2ac0a5..c597e38c2d 100644 --- a/dyn_em/module_first_rk_step_part1.F +++ b/dyn_em/module_first_rk_step_part1.F @@ -1018,7 +1018,7 @@ SUBROUTINE first_rk_step_part1 ( grid , config_flags & & ,qcg=grid%qcg, grav_settling=config_flags%grav_settling & ! & ,K_m=grid%K_m, K_h=grid%K_h, K_q=grid%K_q & & ,vdfg=grid%vdfg,nupdraft=grid%nupdraft,maxMF=grid%maxmf & - & ,ktop_shallow=grid%ktop_shallow & + & ,ktop_plume=grid%ktop_plume & & ,spp_pbl=config_flags%spp_pbl & & ,pattern_spp_pbl=grid%pattern_spp_pbl & !GWD for ARW From 869518ff15ca919242cbb7baa806dd54549044bd Mon Sep 17 00:00:00 2001 From: weiwangncar Date: Tue, 4 Feb 2020 16:41:02 -0700 Subject: [PATCH 13/24] need to pass namelist bmj_rad_feedback to radiation driver --- dyn_nmm/module_PHYSICS_CALLS.F | 1 + 1 file changed, 1 insertion(+) diff --git a/dyn_nmm/module_PHYSICS_CALLS.F b/dyn_nmm/module_PHYSICS_CALLS.F index 02180194bc..747d7b70de 100644 --- a/dyn_nmm/module_PHYSICS_CALLS.F +++ b/dyn_nmm/module_PHYSICS_CALLS.F @@ -454,6 +454,7 @@ SUBROUTINE RADIATION(NTSD,DT,JULDAY,JULYR,XTIME,JULIAN & & ,SWDOWNC=TOTSWDNC,CLDFRA=CLFR & & ,CCLDFRA=grid%ccldfra & & ,QCCONV=grid%qcconv,QICONV=grid%qiconv & + & ,BMJ_RAD_FEEDBACK=config_flags%bmj_rad_feedback & & ,SWUPT=SWUPT & & ,SWUPTC=SWUPTC & & ,SWDNT=SWDNT & From e7869bea5949bd531c142e583710edcc4e48ebef Mon Sep 17 00:00:00 2001 From: weiwangncar Date: Tue, 4 Feb 2020 16:44:52 -0700 Subject: [PATCH 14/24] restoring recent MYNN changes --- dyn_em/module_first_rk_step_part1.F | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dyn_em/module_first_rk_step_part1.F b/dyn_em/module_first_rk_step_part1.F index c597e38c2d..4fe455b2e2 100644 --- a/dyn_em/module_first_rk_step_part1.F +++ b/dyn_em/module_first_rk_step_part1.F @@ -1006,11 +1006,14 @@ SUBROUTINE first_rk_step_part1 ( grid , config_flags & & ,icloud_bl=config_flags%icloud_bl & & ,qc_bl=grid%qc_bl,cldfra_bl=grid%cldfra_bl & & ,bl_mynn_edmf=config_flags%bl_mynn_edmf & + & ,bl_mynn_output=config_flags%bl_mynn_output & & ,bl_mynn_edmf_mom=config_flags%bl_mynn_edmf_mom & & ,bl_mynn_edmf_tke=config_flags%bl_mynn_edmf_tke & & ,bl_mynn_mixscalars=config_flags%bl_mynn_mixscalars & & ,bl_mynn_cloudmix=config_flags%bl_mynn_cloudmix & & ,bl_mynn_mixqt=config_flags%bl_mynn_mixqt & + & ,sub_thl3D=grid%sub_thl3D,sub_sqv3D=grid%sub_sqv3D & + & ,det_thl3D=grid%det_thl3D,det_sqv3D=grid%det_sqv3D & & ,edmf_a=grid%edmf_a,edmf_w=grid%edmf_w & & ,edmf_thl=grid%edmf_thl,edmf_qt=grid%edmf_qt & & ,edmf_ent=grid%edmf_ent,edmf_qc=grid%edmf_qc & @@ -1021,6 +1024,7 @@ SUBROUTINE first_rk_step_part1 ( grid , config_flags & & ,ktop_plume=grid%ktop_plume & & ,spp_pbl=config_flags%spp_pbl & & ,pattern_spp_pbl=grid%pattern_spp_pbl & + & ,restart=config_flags%restart,cycling=config_flags%cycling & !GWD for ARW & ,GWD_OPT=config_flags%gwd_opt & & ,DTAUX3D=grid%dtaux3d,DTAUY3D=grid%dtauy3d & From d3ea29f862abaaa04f5e0933cd58a982a8eb99ff Mon Sep 17 00:00:00 2001 From: weiwangncar Date: Tue, 4 Feb 2020 16:50:07 -0700 Subject: [PATCH 15/24] redo the restoration change so that the code goes to their original places --- dyn_em/module_first_rk_step_part1.F | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dyn_em/module_first_rk_step_part1.F b/dyn_em/module_first_rk_step_part1.F index 4fe455b2e2..27ed35d282 100644 --- a/dyn_em/module_first_rk_step_part1.F +++ b/dyn_em/module_first_rk_step_part1.F @@ -1006,17 +1006,17 @@ SUBROUTINE first_rk_step_part1 ( grid , config_flags & & ,icloud_bl=config_flags%icloud_bl & & ,qc_bl=grid%qc_bl,cldfra_bl=grid%cldfra_bl & & ,bl_mynn_edmf=config_flags%bl_mynn_edmf & - & ,bl_mynn_output=config_flags%bl_mynn_output & & ,bl_mynn_edmf_mom=config_flags%bl_mynn_edmf_mom & & ,bl_mynn_edmf_tke=config_flags%bl_mynn_edmf_tke & & ,bl_mynn_mixscalars=config_flags%bl_mynn_mixscalars & + & ,bl_mynn_output=config_flags%bl_mynn_output & & ,bl_mynn_cloudmix=config_flags%bl_mynn_cloudmix & & ,bl_mynn_mixqt=config_flags%bl_mynn_mixqt & - & ,sub_thl3D=grid%sub_thl3D,sub_sqv3D=grid%sub_sqv3D & - & ,det_thl3D=grid%det_thl3D,det_sqv3D=grid%det_sqv3D & & ,edmf_a=grid%edmf_a,edmf_w=grid%edmf_w & & ,edmf_thl=grid%edmf_thl,edmf_qt=grid%edmf_qt & & ,edmf_ent=grid%edmf_ent,edmf_qc=grid%edmf_qc & + & ,sub_thl3D=grid%sub_thl3D,sub_sqv3D=grid%sub_sqv3D & + & ,det_thl3D=grid%det_thl3D,det_sqv3D=grid%det_sqv3D & & ,rmol=grid%rmol, ch=grid%ch & & ,qcg=grid%qcg, grav_settling=config_flags%grav_settling & ! & ,K_m=grid%K_m, K_h=grid%K_h, K_q=grid%K_q & From bd7c6cb12d47939884513c2124287a6274e741b9 Mon Sep 17 00:00:00 2001 From: weiwangncar Date: Fri, 7 Feb 2020 15:24:58 -0700 Subject: [PATCH 16/24] remove arrays from older version of the code --- phys/module_radiation_driver.F | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/phys/module_radiation_driver.F b/phys/module_radiation_driver.F index f6140043ac..83cec86dcc 100644 --- a/phys/module_radiation_driver.F +++ b/phys/module_radiation_driver.F @@ -74,19 +74,6 @@ SUBROUTINE radiation_driver ( & , COD2D_OUT & ! goddardrad , CTOP2D_OUT & ! goddardrad , CLDFRA,CLDFRA_MP_ALL,CLDT,ZNU & - , TLWDN, TLWUP & - , SLWDN, SLWUP & - , TSWDN, TSWUP & - , SSWDN, SSWUP & - , RE_CLOUD_GSFC & - , RE_RAIN_GSFC & - , RE_ICE_GSFC & - , RE_SNOW_GSFC & - , RE_GRAUPEL_GSFC & - , RE_HAIL_GSFC & - , COD2D_OUT & - , CTOP2D_OUT & - , CLDFRA,CLDFRA_MP_ALL,CLDT,ZNU & #if (EM_CORE == 1) , lradius,iradius & #endif From 751a45fb8ba78eb8bfefb99aedaddfc13633470b Mon Sep 17 00:00:00 2001 From: weiwangncar Date: Sat, 8 Feb 2020 18:41:20 -0700 Subject: [PATCH 17/24] try to restore correct code --- phys/module_radiation_driver.F | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phys/module_radiation_driver.F b/phys/module_radiation_driver.F index 83cec86dcc..e44919e378 100644 --- a/phys/module_radiation_driver.F +++ b/phys/module_radiation_driver.F @@ -58,8 +58,6 @@ SUBROUTINE radiation_driver ( & ,j_start,j_end & ,kts, kte & ,num_tiles & - ,CCLDFRA, QCCONV, QICONV & - ,bmj_rad_feedback & ! Optional , TLWDN, TLWUP & ! goddard schemes , SLWDN, SLWUP & ! goddard schemes @@ -74,6 +72,8 @@ SUBROUTINE radiation_driver ( & , COD2D_OUT & ! goddardrad , CTOP2D_OUT & ! goddardrad , CLDFRA,CLDFRA_MP_ALL,CLDT,ZNU & + ,CCLDFRA, QCCONV, QICONV & + ,bmj_rad_feedback & #if (EM_CORE == 1) , lradius,iradius & #endif From 7666d4f4526d0b8eb016126dd6fc706966bd49c7 Mon Sep 17 00:00:00 2001 From: weiwangncar Date: Sat, 8 Feb 2020 20:07:31 -0700 Subject: [PATCH 18/24] .. changes one more time... --- phys/module_radiation_driver.F | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/phys/module_radiation_driver.F b/phys/module_radiation_driver.F index e44919e378..fa8834a032 100644 --- a/phys/module_radiation_driver.F +++ b/phys/module_radiation_driver.F @@ -59,21 +59,21 @@ SUBROUTINE radiation_driver ( & ,kts, kte & ,num_tiles & ! Optional - , TLWDN, TLWUP & ! goddard schemes - , SLWDN, SLWUP & ! goddard schemes - , TSWDN, TSWUP & ! goddard schemes - , SSWDN, SSWUP & ! goddard schemes - , RE_CLOUD_GSFC & ! goddard - , RE_RAIN_GSFC & ! goddard - , RE_ICE_GSFC & ! goddard - , RE_SNOW_GSFC & ! goddard - , RE_GRAUPEL_GSFC & ! goddard - , RE_HAIL_GSFC & ! goddard - , COD2D_OUT & ! goddardrad - , CTOP2D_OUT & ! goddardrad - , CLDFRA,CLDFRA_MP_ALL,CLDT,ZNU & - ,CCLDFRA, QCCONV, QICONV & - ,bmj_rad_feedback & + , TLWDN, TLWUP & + , SLWDN, SLWUP & + , TSWDN, TSWUP & + , SSWDN, SSWUP & + , RE_CLOUD_GSFC & + , RE_RAIN_GSFC & + , RE_ICE_GSFC & + , RE_SNOW_GSFC & + , RE_GRAUPEL_GSFC & + , RE_HAIL_GSFC & + , COD2D_OUT & + , CTOP2D_OUT & + , CLDFRA,CLDFRA_MP_ALL,CLDT,ZNU & + , CCLDFRA, QCCONV, QICONV & + , bmj_rad_feedback & #if (EM_CORE == 1) , lradius,iradius & #endif From d653c540ec359e1f4b994505cefea14942d6bc93 Mon Sep 17 00:00:00 2001 From: weiwangncar Date: Sat, 8 Feb 2020 20:08:53 -0700 Subject: [PATCH 19/24] .. line the code up again... --- phys/module_radiation_driver.F | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phys/module_radiation_driver.F b/phys/module_radiation_driver.F index fa8834a032..7ba889cc8b 100644 --- a/phys/module_radiation_driver.F +++ b/phys/module_radiation_driver.F @@ -59,7 +59,7 @@ SUBROUTINE radiation_driver ( & ,kts, kte & ,num_tiles & ! Optional - , TLWDN, TLWUP & + , TLWDN, TLWUP & , SLWDN, SLWUP & , TSWDN, TSWUP & , SSWDN, SSWUP & From ae4386069e5f6e76692bb965217966db8060190d Mon Sep 17 00:00:00 2001 From: Wei Wang Date: Sat, 8 Feb 2020 20:23:42 -0700 Subject: [PATCH 20/24] remove CLDEFI change so that we can get same results before and after PCC change --- phys/module_cu_bmj.F | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/phys/module_cu_bmj.F b/phys/module_cu_bmj.F index a736e3c0cc..8e76c45049 100644 --- a/phys/module_cu_bmj.F +++ b/phys/module_cu_bmj.F @@ -907,8 +907,8 @@ SUBROUTINE BMJ & LTOP=KTE PBOT=PRSMID(LMH) PTOP=PBOT -! CLDEFI=AVGEFI*SM+STEFI*(1.-SM) - CLDEFI=(EFIMN-0.2)*SM+(1.+0.2)*(1.-SM) + CLDEFI=AVGEFI*SM+STEFI*(1.-SM) +! CLDEFI=(EFIMN-0.2)*SM+(1.+0.2)*(1.-SM) GO TO 800 ENDIF ! @@ -921,7 +921,7 @@ SUBROUTINE BMJ & DEEP=.TRUE. ELSE SHALLOW=.TRUE. - CLDEFI=(EFIMN-0.1)*SM+(1.+0.1)*(1.-SM) +! CLDEFI=(EFIMN-0.1)*SM+(1.+0.1)*(1.-SM) GO TO 600 ENDIF ! @@ -1238,8 +1238,8 @@ SUBROUTINE BMJ & ! ENDIF ! ! CLDEFI=AVGEFI -! CLDEFI=EFIMN*SM+STEFI*(1.-SM) - CLDEFI=(EFIMN-0.1)*SM+(1.+0.1)*(1.-SM) + CLDEFI=EFIMN*SM+STEFI*(1.-SM) +! CLDEFI=(EFIMN-0.1)*SM+(1.+0.1)*(1.-SM) !*** !*** SEARCH FOR SHALLOW CLOUD TOP !*** From f42505da16225004030a86cd9e20228f0d55db1e Mon Sep 17 00:00:00 2001 From: Wei Wang Date: Sat, 8 Feb 2020 20:27:42 -0700 Subject: [PATCH 21/24] line up code --- phys/module_radiation_driver.F | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phys/module_radiation_driver.F b/phys/module_radiation_driver.F index 7ba889cc8b..a90917a4e8 100644 --- a/phys/module_radiation_driver.F +++ b/phys/module_radiation_driver.F @@ -59,7 +59,7 @@ SUBROUTINE radiation_driver ( & ,kts, kte & ,num_tiles & ! Optional - , TLWDN, TLWUP & + , TLWDN, TLWUP & , SLWDN, SLWUP & , TSWDN, TSWUP & , SSWDN, SSWUP & From 92c96faa76eeadd6e11e81b02985c0975bb3d6c5 Mon Sep 17 00:00:00 2001 From: Wei Wang Date: Mon, 10 Feb 2020 12:54:34 -0700 Subject: [PATCH 22/24] making BMJ bug fix consistant with the latest one --- phys/module_cu_bmj.F | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/phys/module_cu_bmj.F b/phys/module_cu_bmj.F index 8e76c45049..0f2fb413bc 100644 --- a/phys/module_cu_bmj.F +++ b/phys/module_cu_bmj.F @@ -1091,9 +1091,10 @@ SUBROUTINE BMJ & !*** !*** HUMIDITY PROFILE !*** + PSK(L)=PK(L)+DSP + APESK(L)=(1.E5/PSK(L))**CAPA + IF(PK(L)>PQM)THEN - PSK(L)=PK(L)+DSP - APESK(L)=(1.E5/PSK(L))**CAPA THSK(L)=TREFK(L)*APEK(L) QREFK(L)=PQ0/PSK(L)*EXP(A2*(THSK(L)-A3*APESK(L)) & & /(THSK(L)-A4*APESK(L))) @@ -1111,6 +1112,7 @@ SUBROUTINE BMJ & ! SUMDE=0. SUMDP=0. + DHDT =0. ! DO L=LTOP,LB SUMDE=((TK(L)-TREFK(L))*CP+(QK(L)-QREFK(L))*EL(L))*DPRS(L) & From ea92c8368518e54656f69b645dd4d68f1beafa9f Mon Sep 17 00:00:00 2001 From: Wei Wang Date: Mon, 10 Feb 2020 14:23:41 -0700 Subject: [PATCH 23/24] no need to save qc, qi to qc_old and qi_old - they have been saved to qc_save, qi_save, and recovered later in the driver --- phys/module_radiation_driver.F | 27 ++------------------------- 1 file changed, 2 insertions(+), 25 deletions(-) diff --git a/phys/module_radiation_driver.F b/phys/module_radiation_driver.F index a90917a4e8..3f91434046 100644 --- a/phys/module_radiation_driver.F +++ b/phys/module_radiation_driver.F @@ -834,9 +834,6 @@ SUBROUTINE radiation_driver ( & REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qi_save,qc_save REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qs_save - REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qc_old - REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qi_old - REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qc_cu_weight REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qi_cu_weight REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) :: qs_cu_weight @@ -1623,16 +1620,8 @@ SUBROUTINE radiation_driver ( & #endif IF ( cu_physics == BMJSCHEME .AND. bmj_rad_feedback .EQV. .TRUE. ) THEN - ! save old hydrometeors - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc_old(i,k,j) = qc(i,k,j) - qi_old(i,k,j) = qi(i,k,j) - ENDDO - ENDDO - ENDDO - ! Modify cloud fraction and temporarily hydrometeors (PCC scheme) +! hydrometeors from microphysics scheme have saved in q*_save +! Modify cloud fraction and temporarily hydrometeors (PCC scheme) DO j=jts,jte DO k=kts,kte DO i=its,ite @@ -2694,18 +2683,6 @@ SUBROUTINE radiation_driver ( & ENDDO ENDIF - IF ( cu_physics == BMJSCHEME .AND. bmj_rad_feedback .EQV. .TRUE. ) THEN - ! Restore old hydrometeors (PCC scheme) - DO j=jts,jte - DO k=kts,kte - DO i=its,ite - qc(i,k,j) = qc_old(i,k,j) - qi(i,k,j) = qi_old(i,k,j) - ENDDO - ENDDO - ENDDO - ENDIF - ! Restore qc & qi for any model physics configuration IF ( F_QC ) THEN DO j=jts,jte From cc5e6985adaf0fd15deff96550d7f330f738415a Mon Sep 17 00:00:00 2001 From: Wei Wang Date: Mon, 10 Feb 2020 14:48:49 -0700 Subject: [PATCH 24/24] remove the four new variables added in this PR from history file --- Registry/Registry.EM_COMMON | 8 ++++---- Registry/Registry.NMM | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Registry/Registry.EM_COMMON b/Registry/Registry.EM_COMMON index 839598c0e5..89a4599262 100644 --- a/Registry/Registry.EM_COMMON +++ b/Registry/Registry.EM_COMMON @@ -1425,8 +1425,8 @@ state real RQCNCUTEN ikj misc 1 - r "R state real RQINCUTEN ikj misc 1 - r "RQINCUTEN" "Q_IN TENDENCY DUE TO CUMULUS SCHEME" "# kg-1 s-1" state real W0AVG ikj misc 1 - r "W0AVG" "AVERAGE VERTICAL VELOCITY FOR KF CUMULUS SCHEME" "m s-1" -state real qcconv ikj misc 1 - rh "QCCONV" "CLOUD MIXING RATIO FOR BMJ CUMULUS SCHEME" "kg kg-1" -state real qiconv ikj misc 1 - rh "QICONV" "ICE MIXING RATIO FOR BMJ CUMULUS SCHEME" "kg kg-1" +state real qcconv ikj misc 1 - r "QCCONV" "CLOUD MIXING RATIO FOR BMJ CUMULUS SCHEME" "kg kg-1" +state real qiconv ikj misc 1 - r "QICONV" "ICE MIXING RATIO FOR BMJ CUMULUS SCHEME" "kg kg-1" state real RAINC ij misc 1 - rh01du "RAINC" "ACCUMULATED TOTAL CUMULUS PRECIPITATION" "mm" state real RAINSH ij misc 1 - rh01du "RAINSH" "ACCUMULATED SHALLOW CUMULUS PRECIPITATION" "mm" state real RAINNC ij misc 1 - rh01du "RAINNC" "ACCUMULATED TOTAL GRID SCALE PRECIPITATION" "mm" @@ -1546,8 +1546,8 @@ state real RTHRATEN ikj misc 1 - rd "R state real RTHRATENLW ikj misc 1 - r "RTHRATLW" "UNCOUPLED THETA TENDENCY DUE TO LONG WAVE RADIATION" "K s-1" state real RTHRATENSW ikj misc 1 - r "RTHRATSW" "UNCOUPLED THETA TENDENCY DUE TO SHORT WAVE RADIATION" "K s-1" state real CLDFRA ikj misc 1 - rh "CLDFRA" "CLOUD FRACTION" "" -state real CONVCLD ij misc 1 - rh "CONVCLD" "BMJ CONVECTIVE CLOUD" "kg m-2" -state real CCLDFRA ikj misc 1 - rh "CCLDFRA" "CONVECTIVE CLOUD FRACTION" "" +state real CONVCLD ij misc 1 - r "CONVCLD" "BMJ CONVECTIVE CLOUD" "kg m-2" +state real CCLDFRA ikj misc 1 - r "CCLDFRA" "CONVECTIVE CLOUD FRACTION" "" state real CLDFRA_OLD ikj misc 1 - r "CLDFRA_OLD" "previous time level cldfra" "" state real CLDFRA_BL ikj misc 1 - r "CLDFRA_BL" "CLOUD FRACTION pbl" "" state real CLDT ij misc 1 - - "CFRACT" "TOTAL CLOUD FRACTION" "" diff --git a/Registry/Registry.NMM b/Registry/Registry.NMM index 8468788a28..bbd1fd9673 100644 --- a/Registry/Registry.NMM +++ b/Registry/Registry.NMM @@ -456,8 +456,8 @@ state real t_adj ijk dyn_nmm 1 - rd=(DownNear) "T_ADJ" "T state real t_old ijk dyn_nmm 1 - r "T_OLD" "T before last call to precip" "K" state real zero_3d ijk dyn_nmm 1 - r state real W0AVG ikj dyn_nmm 1 - r "W0AVG" "AVERAGE VERTICAL VELOCITY FOR KF CUMULUS SCHEME" "m s-1" -state real qcconv ikj dyn_nmm 1 - rh "QCCONV" "CLOUD MIXING RATIO FOR BMJ CUMULUS SCHEME" "kg kg-1" -state real qiconv ikj dyn_nmm 1 - rh "QICONV" "ICE MIXING RATIO FOR BMJ CUMULUS SCHEME" "kg kg-1" +state real qcconv ikj dyn_nmm 1 - r "QCCONV" "CLOUD MIXING RATIO FOR BMJ CUMULUS SCHEME" "kg kg-1" +state real qiconv ikj dyn_nmm 1 - r "QICONV" "ICE MIXING RATIO FOR BMJ CUMULUS SCHEME" "kg kg-1" state real AKHS_OUT ij dyn_nmm 1 - rh023 "AKHS_OUT" "Output sfc exch coeff for heat" "m2 s-1" state real AKMS_OUT ij dyn_nmm 1 - rh023 "AKMS_OUT" "Output sfc exch coeff for momentum" "m2 s-1" # @@ -591,8 +591,8 @@ state real f_ice ikj dyn_nmm 1 - rh023d=(DownMassIKJ:@EExtrap, state real f_rain ikj dyn_nmm 1 - rh023d=(DownMassIKJ:@EExtrap,0.0)u=(UpMassIKJ:@EExtrap,0.0) "F_RAIN" "Rain fraction of liquid part of CWM" "" state real f_rimef ikj dyn_nmm 1 - rh023d=(DownMassIKJ:@EExtrap,1.0)u=(UpMassIKJ:@EExtrap,1.0) "F_RIMEF" "Rime factor" "" state real cldfra ijk dyn_nmm 1 - rh023 "CLDFRA" "Cloud fraction" "" -state real CONVCLD ij dyn_nmm 1 - rh "CONVCLD" "BMJ CONVECTIVE CLOUD" "kg m-2" -state real CCLDFRA ikj dyn_nmm 1 - rh "CCLDFRA" "CONVECTIVE CLOUD FRACTION" "" +state real CONVCLD ij dyn_nmm 1 - r "CONVCLD" "BMJ CONVECTIVE CLOUD" "kg m-2" +state real CCLDFRA ikj dyn_nmm 1 - r "CCLDFRA" "CONVECTIVE CLOUD FRACTION" "" state real sr ij dyn_nmm 1 - irh023 "SR" "Timestep mass ratio of snow:precip" "" state real cfrach ij dyn_nmm 1 - rh023d=(DownCopy) "CFRACH" "High cloud fraction" "" state real cfracl ij dyn_nmm 1 - rh023d=(DownCopy) "CFRACL" "Low cloud fraction" ""