Skip to content

Commit

Permalink
Adding udm microphysics as option 27 (#2147)
Browse files Browse the repository at this point in the history
TYPE: new feature

KEYWORDS: UFS Double Moment Microphysics scheme (UDM)

SOURCE: Songyou Hong via internal

DESCRIPTION OF CHANGES:
The new microphysics option is based on 7-class WDM7 with revision and improvements and will be mp_physics=27.

LIST OF MODIFIED FILES: 
M       Registry/Registry.EM_COMMON
M       phys/Makefile
M       phys/module_microphysics_driver.F
M       phys/module_physics_init.F
M       phys/module_mp_udm.F

TESTS CONDUCTED: 
1. Compilation on derecho Cray Intel (ftn) seems to need -O2.
2. squall2d_x test case runs OK.
3. The Jenkins tests are all passing.

RELEASE NOTE: An new microphysics, UFS Double Moment (UDM), 7-class microphysics from Songyou Hong is added (mp_physics=27). UDM mp largely adopts microphysical processes in WDM7, but with bug fixes or revisions
based on literature and accumulated realism. UDM mp utilizes the in-cloud microphysics concept (Kim and Hong 2018), with the addition of water-friendly aerosols for CCN initialization. Semi-lagrangian sedimentation of Juang and Hong (2010) is also re-configured for computational efficiency and numerical accuracy. All production terms are optimized by introducing a cloud-top definition for hydrometeors.
  • Loading branch information
dudhia authored Feb 5, 2025
1 parent 61d1c84 commit 5fc76c5
Show file tree
Hide file tree
Showing 5 changed files with 4,077 additions and 1 deletion.
2 changes: 2 additions & 0 deletions Registry/Registry.EM_COMMON
Original file line number Diff line number Diff line change
Expand Up @@ -3032,6 +3032,7 @@ package wdm6scheme mp_physics==16 - moist:qv,qc
package nssl_2mom mp_physics==18 - moist:qv,qc,qr,qi,qs,qg
package wsm7scheme mp_physics==24 - moist:qv,qc,qr,qi,qs,qg,qh;state:re_cloud,re_ice,re_snow
package wdm7scheme mp_physics==26 - moist:qv,qc,qr,qi,qs,qg,qh;scalar:qnn,qnc,qnr;state:re_cloud,re_ice,re_snow
package udmscheme mp_physics==27 - moist:qv,qc,qr,qi,qs,qg,qh;scalar:qnn,qnc,qnr;state:re_cloud,re_ice,re_snow
package thompsonaero mp_physics==28 - moist:qv,qc,qr,qi,qs,qg;scalar:qni,qnr,qnc,qnwfa,qnifa,qnbca;state:re_cloud,re_ice,re_snow,qnwfa2d,qnifa2d,taod5503d,taod5502d
package thompsongh mp_physics==38 - moist:qv,qc,qr,qi,qs,qg;scalar:qni,qnr,qnc,qng,qvolg,qnwfa,qnifa,qnbca;state:re_cloud,re_ice,re_snow,qnwfa2d,qnifa2d,taod5503d,taod5502d
package p3_1category mp_physics==50 - moist:qv,qc,qr,qi;scalar:qni,qnr,qir,qib;state:re_cloud,re_ice,vmi3d,rhopo3d,di3d,refl_10cm,th_old,qv_old
Expand Down Expand Up @@ -3087,6 +3088,7 @@ package nssl_2mom_dfi mp_physics_dfi==18 - dfi_moist:dfi
#package nssl_2momg_dfi mp_physics_dfi==22 - dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg;dfi_scalar:dfi_qndrop,dfi_qnr,dfi_qni,dfi_qns,dfi_qng,dfi_qvolg;state:dfi_re_cloud,dfi_re_ice,dfi_re_snow
package wsm7scheme_dfi mp_physics_dfi==24 - dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg,dfi_qh;state:dfi_re_cloud,dfi_re_ice,dfi_re_snow
package wdm7scheme_dfi mp_physics_dfi==26 - dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg,dfi_qh;dfi_scalar:dfi_qnn,dfi_qnc,dfi_qnr;state:dfi_re_cloud,dfi_re_ice,dfi_re_snow
package udmscheme_dfi mp_physics_dfi==27 - dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg,dfi_qh;dfi_scalar:dfi_qnn,dfi_qnc,dfi_qnr;state:dfi_re_cloud,dfi_re_ice,dfi_re_snow
package thompsonaero_dfi mp_physics_dfi==28 - dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg;dfi_scalar:dfi_qni,dfi_qnr,dfi_qnc,dfi_qnwfa,dfi_qnifa,dfi_qnbca;state:dfi_re_cloud,dfi_re_ice,dfi_re_snow
package thompsongh_dfi mp_physics_dfi==38 - dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi,dfi_qs,dfi_qg;dfi_scalar:dfi_qni,dfi_qnr,dfi_qng,dfi_qvolg,dfi_qnc,dfi_qnwfa,dfi_qnifa,dfi_qnbca;state:dfi_re_cloud,dfi_re_ice,dfi_re_snow
package p3_1category_dfi mp_physics_dfi==50 - dfi_moist:dfi_qv,dfi_qc,dfi_qr,dfi_qi;dfi_scalar:dfi_qni,dfi_qnr,dfi_qir,dfi_qib;state:dfi_re_cloud,dfi_re_ice
Expand Down
1 change: 1 addition & 0 deletions phys/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ MODULES = \
module_mp_wdm5.o \
module_mp_wdm6.o \
module_mp_wdm7.o \
module_mp_udm.o \
module_mp_ntu.o \
module_mp_cammgmp_driver.o \
module_ra_sw.o \
Expand Down
55 changes: 54 additions & 1 deletion phys/module_microphysics_driver.F
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ SUBROUTINE microphysics_driver( &
,WSM6SCHEME, ETAMPNEW, FER_MP_HIRES, THOMPSON, THOMPSONAERO, RCON_MP_SCHEME, THOMPSONGH, FAST_KHAIN_LYNN_SHPUND, MORR_TWO_MOMENT &
,GSFCGCESCHEME, WDM5SCHEME, WDM6SCHEME, NSSL_2MOM, MADWRF_MP &
,FER_MP_HIRES_ADVECT &
,WSM7SCHEME, WDM7SCHEME &
,WSM7SCHEME, WDM7SCHEME, UDMSCHEME &
,NUWRF4ICESCHEME &
,MILBRANDT2MOM , CAMMGMPSCHEME,FULL_KHAIN_LYNN, P3_1CATEGORY, P3_1CATEGORY_NC, P3_2CATEGORY, P3_1CAT_3MOM &
,MORR_TM_AERO, JENSEN_ISHMAEL, SPRINKLER, NTU !,MILBRANDT3MOM
Expand Down Expand Up @@ -239,6 +239,7 @@ SUBROUTINE microphysics_driver( &
USE module_mp_wdm5
USE module_mp_wdm6
USE module_mp_wdm7
USE module_mp_udm
USE module_mp_milbrandt2mom
# if (EM_CORE == 1)
USE module_mp_cammgmp_driver, ONLY: CAMMGMP ! CAM5's microphysics driver
Expand Down Expand Up @@ -2653,6 +2654,58 @@ SUBROUTINE microphysics_driver( &
CALL wrf_error_fatal ( 'arguments not present for calling wdm7')
ENDIF
CASE (UDMSCHEME)
CALL wrf_debug ( 100 , 'microphysics_driver: calling udm' )
IF ( PRESENT( QV_CURR ) .AND. PRESENT ( QC_CURR ) .AND. &
PRESENT( QR_CURR ) .AND. PRESENT ( QI_CURR ) .AND. &
PRESENT( QS_CURR ) .AND. PRESENT ( QG_CURR ) .AND. &
PRESENT( QH_CURR ) .AND. &
PRESENT( QNN_CURR ) .AND. PRESENT ( QNC_CURR ) .AND. &
PRESENT( QNR_CURR ).AND. &
PRESENT( RAINNC ) .AND. PRESENT ( RAINNCV ) ) THEN
CALL udm( &
TH=th &
,Q=qv_curr &
,QC=qc_curr &
,QR=qr_curr &
,QI=qi_curr &
,QS=qs_curr &
,QG=qg_curr &
,QH=qh_curr &
,NN=qnn_curr &
,NC=qnc_curr &
,NR=qnr_curr &
,DEN=rho,PII=pi_phy,P=p,DELZ=dz8w &
,DELT=dt,G=g,CPD=cp,CPV=cpv,CCN0=ccn_conc & ! RAS
,RD=r_d,RV=r_v,T0C=svpt0 &
,EP1=ep_1, EP2=ep_2, QMIN=epsilon &
,XLS=xls, XLV0=xlv, XLF0=xlf &
,DEN0=rhoair0, DENR=rhowater &
,CLIQ=cliq,CICE=cice,PSAT=psat &
,xland=xland & ! land mask, 1: land, 2: water
,RAIN=rainnc ,RAINNCV=rainncv &
,SNOW=snownc ,SNOWNCV=snowncv &
,SR=sr &
,REFL_10CM=refl_10cm & ! added for radar reflectivity
,diagflag=diagflag & ! added for radar reflectivity
,do_radar_ref=do_radar_ref & ! added for radar reflectivity
,GRAUPEL=graupelnc ,GRAUPELNCV=graupelncv &
,HAIL=hailnc ,HAILNCV=hailncv &
,ITIMESTEP=itimestep &
,has_reqc=has_reqc & ! for radiation +
,has_reqi=has_reqi &
,has_reqs=has_reqs &
,re_cloud=re_cloud &
,re_ice=re_ice &
,re_snow=re_snow & ! for radiation -
,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 &
)
ELSE
CALL wrf_error_fatal ( 'arguments not present for calling udm')
ENDIF
CASE (ETAMPNEW) !-- Operational 4-km High-Resolution Window (HRW) version
CALL wrf_debug ( 100 , 'microphysics_driver: calling etampnew')
Expand Down
Loading

0 comments on commit 5fc76c5

Please sign in to comment.