diff --git a/Registry/Registry.EM_COMMON b/Registry/Registry.EM_COMMON index 96fca732fe..89a4599262 100644 --- a/Registry/Registry.EM_COMMON +++ b/Registry/Registry.EM_COMMON @@ -1425,6 +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 - 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" @@ -1543,7 +1545,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 - 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" "" @@ -2334,6 +2338,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" "" @@ -2913,7 +2918,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,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 diff --git a/Registry/Registry.NMM b/Registry/Registry.NMM index da847b06aa..bbd1fd9673 100644 --- a/Registry/Registry.NMM +++ b/Registry/Registry.NMM @@ -456,6 +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 - 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" # @@ -588,7 +590,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 - 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" "" @@ -1493,8 +1497,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" "" @@ -1858,7 +1863,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_em/module_first_rk_step_part1.F b/dyn_em/module_first_rk_step_part1.F index 70de6b4843..4ba3545cec 100644 --- a/dyn_em/module_first_rk_step_part1.F +++ b/dyn_em/module_first_rk_step_part1.F @@ -349,6 +349,9 @@ 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 & + & , 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 & @@ -1135,6 +1138,8 @@ SUBROUTINE first_rk_step_part1 ( grid , config_flags & & ,ITIMESTEP=grid%itimestep ,DT=grid%dt ,DX=grid%dx & & ,DX2D=grid%dx2d, AREA2D=grid%area2d & & ,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 & @@ -1231,6 +1236,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 71529a5503..43c415111d 100644 --- a/dyn_em/start_em.F +++ b/dyn_em/start_em.F @@ -1035,15 +1035,15 @@ 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%nca,grid%swrad_scat, & grid%cldefi,grid%lowlyr, & - grid%mass_flux, & + 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/dyn_nmm/module_PHYSICS_CALLS.F b/dyn_nmm/module_PHYSICS_CALLS.F index 4e308e2ee5..747d7b70de 100644 --- a/dyn_nmm/module_PHYSICS_CALLS.F +++ b/dyn_nmm/module_PHYSICS_CALLS.F @@ -452,6 +452,9 @@ 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 & + & ,BMJ_RAD_FEEDBACK=config_flags%bmj_rad_feedback & & ,SWUPT=SWUPT & & ,SWUPTC=SWUPTC & & ,SWDNT=SWDNT & @@ -2863,6 +2866,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 +2918,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 & diff --git a/phys/module_cu_bmj.F b/phys/module_cu_bmj.F index a0e8d50dac..0f2fb413bc 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 @@ -800,6 +908,7 @@ SUBROUTINE BMJ & PBOT=PRSMID(LMH) PTOP=PBOT 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 ! @@ -981,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))) @@ -1001,14 +1112,18 @@ 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) & & +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 +1145,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 +1159,8 @@ SUBROUTINE BMJ & !----------------------------------------------------------------------- AVRGT=0. PRECK=0. + PDQD=0. + PRWD=0. DSQ=0. DST=0. ! @@ -1059,6 +1174,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 +1213,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 @@ -1121,6 +1241,7 @@ SUBROUTINE BMJ & ! ! CLDEFI=AVGEFI CLDEFI=EFIMN*SM+STEFI*(1.-SM) +! CLDEFI=(EFIMN-0.1)*SM+(1.+0.1)*(1.-SM) !*** !*** SEARCH FOR SHALLOW CLOUD TOP !*** @@ -1690,7 +1811,7 @@ END SUBROUTINE TTBLEX !----------------------------------------------------------------------- SUBROUTINE BMJINIT(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN & & ,CLDEFI,LOWLYR,CP,RD,RESTART & - & ,ALLOWED_TO_READ & + ,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_cumulus_driver.F b/phys/module_cumulus_driver.F index 1fa5a143d4..4b6f25277f 100644 --- a/phys/module_cumulus_driver.F +++ b/phys/module_cumulus_driver.F @@ -17,6 +17,8 @@ SUBROUTINE cumulus_driver(grid & ,itimestep,dt,dx,dx2d,area2d & ,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 @@ -244,6 +246,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) @@ -311,6 +315,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) @@ -441,7 +447,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 & @@ -482,7 +491,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 @@ -517,6 +527,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 @@ -972,6 +983,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 f572bc749c..7461a787c3 100644 --- a/phys/module_physics_init.F +++ b/phys/module_physics_init.F @@ -441,7 +441,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 @@ -1432,8 +1431,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,LOWLYR, & + MASS_FLUX,RTHFTEN,RQVFTEN, & #if ( EM_CORE == 1 ) !BSINGH - For WRFCuP Scheme cupflag,cldfra_cup,cldfratend_cup, & !CuP, wig 18-Sep-2006 @@ -3575,8 +3574,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,LOWLYR, & + MASS_FLUX, RTHFTEN, RQVFTEN, & #if ( EM_CORE == 1 ) !BSINGH - For WRFCuP Scheme cupflag,cldfra_cup,cldfratend_cup, & !CuP, wig 18-Sep-2006 @@ -3629,8 +3628,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 #if ( EM_CORE == 1 ) !BSINGH - For WRFCuP Scheme REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: & @@ -3705,7 +3704,7 @@ 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 , & + 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_radiation_driver.F b/phys/module_radiation_driver.F index 5d9302b602..3f91434046 100644 --- a/phys/module_radiation_driver.F +++ b/phys/module_radiation_driver.F @@ -72,6 +72,8 @@ SUBROUTINE radiation_driver ( & , COD2D_OUT & , CTOP2D_OUT & , CLDFRA,CLDFRA_MP_ALL,CLDT,ZNU & + , CCLDFRA, QCCONV, QICONV & + , bmj_rad_feedback & #if (EM_CORE == 1) , lradius,iradius & #endif @@ -204,7 +206,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 @@ -328,6 +330,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 +357,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) @@ -404,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, & @@ -732,7 +739,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, & @@ -816,7 +826,8 @@ 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 @@ -1243,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) ! @@ -1314,7 +1326,6 @@ SUBROUTINE radiation_driver ( & END DO END DO END DO - !--------------- ! Calculate constant for short wave radiation @@ -1331,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 @@ -1348,7 +1358,6 @@ SUBROUTINE radiation_driver ( & ENDDO ENDDO ENDDO - IF (aercu_opt.gt.0.0) THEN DO j = jts,jte DO k = kts,kte @@ -1610,7 +1619,21 @@ SUBROUTINE radiation_driver ( & ENDIF #endif - + IF ( cu_physics == BMJSCHEME .AND. bmj_rad_feedback .EQV. .TRUE. ) THEN +! 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 + 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) @@ -1622,6 +1645,7 @@ SUBROUTINE radiation_driver ( & ELSE p_top_dummy = -1. ! not used by NMM END IF + CALL RRTMLWRAD( & P_TOP=p_top_dummy & ,RTHRATEN=RTHRATEN,GLW=GLW,OLR=RLWTOA,EMISS=EMISS & @@ -1632,7 +1656,7 @@ SUBROUTINE radiation_driver ( & ,QS3D=QS & ,QG3D=QG & ,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 & ,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 & @@ -1644,6 +1668,7 @@ SUBROUTINE radiation_driver ( & ,ITS=its,ITE=ite, JTS=jts,JTE=jte, KTS=kts,KTE=kte & ) + ! NUWRF Version by Toshihisa Matsui and Jainn Shi 20090623 case (goddardlwscheme) @@ -1910,6 +1935,7 @@ SUBROUTINE radiation_driver ( & LWDNFLX=LWDNFLX,LWDNFLXC=LWDNFLXC, & mp_physics=mp_physics ) + CASE (RRTMK_LWSCHEME) IF ( PRESENT(F_QNC) .AND. PRESENT(QNC_CURR) ) THEN @@ -1993,6 +2019,7 @@ SUBROUTINE radiation_driver ( & LWUPFLX=LWUPFLX,LWUPFLXC=LWUPFLXC, & LWDNFLX=LWDNFLX,LWDNFLXC=LWDNFLXC & ) + #endif CASE (HELDSUAREZ) @@ -2422,6 +2449,7 @@ SUBROUTINE radiation_driver ( & #if( BUILD_RRTMG_FAST == 1) CASE (RRTMG_SWSCHEME_FAST) CALL wrf_debug(100, 'CALL rrtmg_sw_fast') + CALL RRTMG_SWRAD_FAST( & RTHRATENSW=RTHRATENSW, & SWUPT=SWUPT,SWUPTC=SWUPTC, &