Skip to content

Commit 8a68b4b

Browse files
Merge pull request #93 from ufs-community/ufs/dev
sync with ufs/dev
2 parents fc5a466 + 24643b0 commit 8a68b4b

File tree

72 files changed

+8017
-4833
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+8017
-4833
lines changed

CMakeLists.txt

+3-2
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,10 @@ SET_PROPERTY(SOURCE ${SCHEMES} ${CAPS}
140140
APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_PHYSICS} ${OpenMP_Fortran_FLAGS}")
141141

142142
# Lower optimization for certain schemes when compiling with Intel in Release mode
143-
if(CMAKE_BUILD_TYPE STREQUAL "Release" AND ${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel")
143+
if(CMAKE_BUILD_TYPE STREQUAL "Release" AND (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel" OR ${CMAKE_Fortran_COMPILER_ID} STREQUAL "IntelLLVM"))
144144
# Define a list of schemes that need lower optimization with Intel in Release mode
145145
set(SCHEME_NAMES_LOWER_OPTIMIZATION module_sf_mynn.F90
146+
module_mp_nssl_2mom.F90
146147
mynnedmf_wrapper.F90
147148
gcycle.F90)
148149
foreach(SCHEME_NAME IN LISTS SCHEME_NAMES_LOWER_OPTIMIZATION)
@@ -156,7 +157,7 @@ if(CMAKE_BUILD_TYPE STREQUAL "Release" AND ${CMAKE_Fortran_COMPILER_ID} STREQUAL
156157
endif()
157158

158159
# No optimization for certain schemes when compiling with Intel in Release mode
159-
if(CMAKE_BUILD_TYPE STREQUAL "Release" AND ${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel")
160+
if(CMAKE_BUILD_TYPE STREQUAL "Release" AND (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel" OR ${CMAKE_Fortran_COMPILER_ID} STREQUAL "IntelLLVM"))
160161
# Define a list of schemes that can't be optimized with Intel in Release mode
161162
set(SCHEME_NAMES_NO_OPTIMIZATION GFS_typedefs.F90)
162163
foreach(SCHEME_NAME IN LISTS SCHEME_NAMES_NO_OPTIMIZATION)

CODEOWNERS

+180-182
Large diffs are not rendered by default.

physics/CONV/Grell_Freitas/cu_gf_deep.F90

+8-6
Original file line numberDiff line numberDiff line change
@@ -425,9 +425,9 @@ subroutine cu_gf_deep_run( &
425425
integer :: turn,pmin_lev(its:ite),start_level(its:ite),ktopkeep(its:ite)
426426
real(kind=kind_phys), dimension (its:ite,kts:kte) :: dtempdz
427427
integer, dimension (its:ite,kts:kte) :: k_inv_layers
428-
real(kind=kind_phys), dimension (its:ite) :: c0 ! HCB
428+
real(kind=kind_phys), dimension (its:ite) :: c0, rrfs_factor ! HCB
429429
real(kind=kind_phys), dimension (its:ite,kts:kte) :: c0t3d ! hli for smoke/dust wet scavenging
430-
!$acc declare create(pmin_lev,start_level,ktopkeep,dtempdz,k_inv_layers,c0,c0t3d)
430+
!$acc declare create(pmin_lev,start_level,ktopkeep,dtempdz,k_inv_layers,c0,rrfs_factor,c0t3d)
431431

432432
! rainevap from sas
433433
real(kind=kind_phys) zuh2(40)
@@ -486,6 +486,7 @@ subroutine cu_gf_deep_run( &
486486
! Set cloud water to rain water conversion rate (c0)
487487
!$acc kernels
488488
c0(:)=0.004
489+
rrfs_factor(:)=1.
489490
do i=its,itf
490491
xland1(i)=int(xland(i)+.0001) ! 1.
491492
if(xland(i).gt.1.5 .or. xland(i).lt.0.5)then
@@ -495,6 +496,7 @@ subroutine cu_gf_deep_run( &
495496
if(imid.eq.1)then
496497
c0(i)=0.002
497498
endif
499+
if(kdt.le.(4500./dtime))rrfs_factor(i)=1.-(float(kdt)/(4500./dtime)-1.)**2
498500
enddo
499501
!$acc end kernels
500502

@@ -591,7 +593,6 @@ subroutine cu_gf_deep_run( &
591593
sig(i)=(1.-frh)**2
592594
!frh_out(i) = frh
593595
if(forcing(i,7).eq.0.)sig(i)=1.
594-
if(kdt.le.(3600./dtime))sig(i)=1.
595596
frh_out(i) = frh*sig(i)
596597
enddo
597598
!$acc end kernels
@@ -2029,7 +2030,7 @@ subroutine cu_gf_deep_run( &
20292030
zuo,pre,pwo_ens,xmb,ktop, &
20302031
edto,pwdo,'deep',ierr2,ierr3, &
20312032
po_cup,pr_ens,maxens3, &
2032-
sig,closure_n,xland1,xmbm_in,xmbs_in, &
2033+
sig,closure_n,xland1,xmbm_in,xmbs_in,rrfs_factor, &
20332034
ichoice,imid,ipr,itf,ktf, &
20342035
its,ite, kts,kte, &
20352036
dicycle,xf_dicycle )
@@ -4056,7 +4057,7 @@ subroutine cup_output_ens_3d(xff_mid,xf_ens,ierr,dellat,dellaq,dellaqc, &
40564057
zu,pre,pw,xmb,ktop, &
40574058
edt,pwd,name,ierr2,ierr3,p_cup,pr_ens, &
40584059
maxens3, &
4059-
sig,closure_n,xland1,xmbm_in,xmbs_in, &
4060+
sig,closure_n,xland1,xmbm_in,xmbs_in,rrfs_factor, &
40604061
ichoice,imid,ipr,itf,ktf, &
40614062
its,ite, kts,kte, &
40624063
dicycle,xf_dicycle )
@@ -4118,7 +4119,7 @@ subroutine cup_output_ens_3d(xff_mid,xf_ens,ierr,dellat,dellaq,dellaqc, &
41184119
,intent (inout) :: &
41194120
ierr,ierr2,ierr3
41204121
integer, intent(in) :: dicycle
4121-
real(kind=kind_phys), intent(in), dimension (its:ite) :: xf_dicycle
4122+
real(kind=kind_phys), intent(in), dimension (its:ite) :: xf_dicycle, rrfs_factor
41224123
!$acc declare copyin(zu,pwd,p_cup,sig,xmbm_in,xmbs_in,edt,xff_mid,dellat,dellaqc,dellaq,pw,ktop,xland1,xf_dicycle)
41234124
!$acc declare copy(xf_ens,pr_ens,outtem,outq,outqc,pre,xmb,closure_n,ierr,ierr2,ierr3)
41244125
!
@@ -4198,6 +4199,7 @@ subroutine cup_output_ens_3d(xff_mid,xf_ens,ierr,dellat,dellaq,dellaqc, &
41984199
clos_wei=16./max(1.,closure_n(i))
41994200
xmb_ave(i)=min(xmb_ave(i),100.)
42004201
xmb(i)=clos_wei*sig(i)*xmb_ave(i)
4202+
if(dx(i)<dx_thresh) xmb(i)=rrfs_factor(i)*xmb(i)
42014203

42024204
if(xmb(i) < 1.e-16)then
42034205
ierr(i)=19

physics/CONV/Grell_Freitas/cu_gf_driver.F90

+7-4
Original file line numberDiff line numberDiff line change
@@ -883,6 +883,13 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,&
883883
cutenm(i)=0.
884884
endif ! pret > 0
885885

886+
maxupmf(i)=0.
887+
if(forcing2(i,6).gt.0.)then
888+
maxupmf(i)=maxval(xmb(i)*zu(i,kts:ktf)/forcing2(i,6))
889+
endif
890+
if (xland(i)==0)then ! cu precip rate (mm/h)
891+
if((maxupmf(i).lt.0.1) .or. (pret(i)*3600.lt.0.05)) pret(i)=0.
892+
endif
886893
if(pret(i).gt.0.)then
887894
cuten(i)=1.
888895
cutenm(i)=0.
@@ -999,10 +1006,6 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,&
9991006
gdc(i,15,10)=qfx(i)
10001007
gdc(i,16,10)=pret(i)*3600.
10011008

1002-
maxupmf(i)=0.
1003-
if(forcing2(i,6).gt.0.)then
1004-
maxupmf(i)=maxval(xmb(i)*zu(i,kts:ktf)/forcing2(i,6))
1005-
endif
10061009

10071010
if(ktop(i).gt.2 .and.pret(i).gt.0.)dt_mf(i,ktop(i)-1)=ud_mf(i,ktop(i))
10081011
endif

physics/CONV/SAMF/samfdeepcnv.f

+20-8
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,8 @@ subroutine samfdeepcnv_run (im,km,first_time_step,restart, &
215215
!
216216
! parameters for prognostic sigma closure
217217
real(kind=kind_phys) omega_u(im,km),zdqca(im,km),tmfq(im,km),
218-
& omegac(im),zeta(im,km),dbyo1(im,km),sigmab(im),qadv(im,km)
218+
& omegac(im),zeta(im,km),dbyo1(im,km),sigmab(im),qadv(im,km),
219+
& sigmaoutx(im)
219220
real(kind=kind_phys) gravinv,invdelt,sigmind,sigminm,sigmins
220221
parameter(sigmind=0.01,sigmins=0.03,sigminm=0.01)
221222
logical flag_shallow, flag_mid
@@ -3423,17 +3424,28 @@ subroutine samfdeepcnv_run (im,km,first_time_step,restart, &
34233424
endif
34243425
enddo
34253426
c
3426-
c convective cloud water
3427+
!
3428+
if(progsigma)then
3429+
do i = 1, im
3430+
sigmaoutx(i)=max(sigmaout(i,1),0.0)
3431+
sigmaoutx(i)=min(sigmaoutx(i),1.0)
3432+
enddo
3433+
endif
34273434
c
34283435
!> - Calculate convective cloud water.
34293436
do k = 1, km
3430-
do i = 1, im
3431-
if (cnvflg(i) .and. rn(i) > 0.) then
3432-
if (k >= kbcon(i) .and. k < ktcon(i)) then
3433-
cnvw(i,k) = cnvwt(i,k) * xmb(i) * dt2
3437+
do i = 1, im
3438+
if (cnvflg(i) .and. rn(i) > 0.) then
3439+
if (k >= kbcon(i) .and. k < ktcon(i)) then
3440+
cnvw(i,k) = cnvwt(i,k) * xmb(i) * dt2
3441+
if(progsigma)then
3442+
cnvw(i,k) = cnvw(i,k) * sigmaoutx(i)
3443+
else
3444+
cnvw(i,k) = cnvw(i,k) * sigmagfm(i)
3445+
endif
3446+
endif
34343447
endif
3435-
endif
3436-
enddo
3448+
enddo
34373449
enddo
34383450
c
34393451
c convective cloud cover

physics/CONV/SAMF/samfshalcnv.f

+21-12
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ subroutine samfshalcnv_run(im,km,itc,ntc,cliq,cp,cvap, &
162162
! parameters for prognostic sigma closure
163163
real(kind=kind_phys) omega_u(im,km),zdqca(im,km),tmfq(im,km),
164164
& omegac(im),zeta(im,km),dbyo1(im,km),
165-
& sigmab(im),qadv(im,km)
165+
& sigmab(im),qadv(im,km),sigmaoutx(im)
166166
real(kind=kind_phys) gravinv,dxcrtas,invdelt,sigmind,sigmins,
167167
& sigminm
168168
logical flag_shallow,flag_mid
@@ -2397,20 +2397,29 @@ subroutine samfshalcnv_run(im,km,itc,ntc,cliq,cp,cvap, &
23972397
endif
23982398
enddo
23992399
c
2400-
c convective cloud water
2401-
c
2402-
!> - Calculate shallow convective cloud water.
2400+
if(progsigma)then
2401+
do i = 1, im
2402+
sigmaoutx(i)=max(sigmaout(i,1),0.0)
2403+
sigmaoutx(i)=min(sigmaoutx(i),1.0)
2404+
enddo
2405+
endif
2406+
2407+
c convective cloud water
24032408
do k = 1, km
2404-
do i = 1, im
2405-
if (cnvflg(i)) then
2406-
if (k >= kbcon(i) .and. k < ktcon(i)) then
2407-
cnvw(i,k) = cnvwt(i,k) * xmb(i) * dt2
2409+
do i = 1, im
2410+
if (cnvflg(i)) then
2411+
if (k >= kbcon(i) .and. k < ktcon(i)) then
2412+
cnvw(i,k) = cnvwt(i,k) * xmb(i) * dt2
2413+
if (progsigma) then
2414+
cnvw(i,k) = cnvw(i,k) * sigmaoutx(i)
2415+
else
2416+
cnvw(i,k) = cnvw(i,k) * sigmagfm(i)
2417+
endif
2418+
endif
24082419
endif
2409-
endif
2410-
enddo
2420+
enddo
24112421
enddo
2412-
2413-
c
2422+
c
24142423
c convective cloud cover
24152424
c
24162425
!> - Calculate convective cloud cover, which is used when pdf-based cloud fraction is used (i.e., pdfcld=.true.).

0 commit comments

Comments
 (0)