Skip to content

Commit 76cf93f

Browse files
authored
Merge pull request #1073 from grantfirl/ufs-dev-PR184
UFS-dev PR#184
2 parents 6d8fccb + a3760b8 commit 76cf93f

34 files changed

+161
-225
lines changed

CMakeLists.txt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.3)
1+
cmake_minimum_required(VERSION 3.10)
22

33
project(ccpp_physics
44
VERSION 5.0.0
@@ -8,6 +8,13 @@ project(ccpp_physics
88
set(PACKAGE "ccpp-physics")
99
set(AUTHORS "Grant Firl" "Dustin Swales" "Man Zhang" "Mike Kavulich" )
1010

11+
#------------------------------------------------------------------------------
12+
# Set MPI flags for Fortran with MPI F08 interface
13+
find_package(MPI REQUIRED Fortran)
14+
if(NOT MPI_Fortran_HAVE_F08_MODULE)
15+
message(FATAL_ERROR "MPI implementation does not support the Fortran 2008 mpi_f08 interface")
16+
endif()
17+
1118
#------------------------------------------------------------------------------
1219
# Set OpenMP flags for C/C++/Fortran
1320
if (OPENMP)

physics/GWD/cires_tauamf_data.F90

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ subroutine gfs_idate_calendar(idate, fhour, ddd, fddd)
180180
integer :: jdow, jdoy, jday
181181
real(8) :: rinc(5)
182182
real(4) :: rinc4(5)
183-
integer :: w3kindreal, w3kindint
184183

185184
integer :: iw3jdn
186185
integer :: jd1, jddd
@@ -196,13 +195,7 @@ subroutine gfs_idate_calendar(idate, fhour, ddd, fddd)
196195
rinc(1:5) = 0.
197196
rinc(2) = fhour
198197
!
199-
call w3kind(w3kindreal,w3kindint)
200-
if(w3kindreal==4) then
201-
rinc4 = rinc
202-
call w3movdat(rinc4, idat,jdat)
203-
else
204-
call w3movdat(rinc, idat,jdat)
205-
endif
198+
call w3movdat(rinc, idat,jdat)
206199
! jdate(8)- date and time (yr, mo, day, [tz], hr, min, sec)
207200
jdow = 0
208201
jdoy = 0

physics/Interstitials/UFS_SCM_NEPTUNE/GFS_debug.F90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling,
385385
nthreads, blkno, errmsg, errflg)
386386

387387
#ifdef MPI
388-
use mpi
388+
use mpi_f08
389389
#endif
390390
#ifdef _OPENMP
391391
use omp_lib
@@ -1055,7 +1055,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup
10551055
nthreads, blkno, errmsg, errflg)
10561056

10571057
#ifdef MPI
1058-
use mpi
1058+
use mpi_f08
10591059
#endif
10601060
#ifdef _OPENMP
10611061
use omp_lib

physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,6 @@ subroutine GFS_phys_time_vary_timestep_init (
793793
real(kind_phys) :: rannie(cny)
794794
real(kind_phys) :: rndval(cnx*cny*nrcm)
795795
real(kind_dbl_prec) :: rinc(5)
796-
real(kind_sngl_prec) :: rinc4(5)
797796

798797
! Initialize CCPP error handling variables
799798
errmsg = ''
@@ -813,7 +812,7 @@ subroutine GFS_phys_time_vary_timestep_init (
813812
!$OMP shared(ozpl,ddy_o3,h2o_phys,jindx1_h,jindx2_h,h2opl,ddy_h,iaerclm,master) &
814813
!$OMP shared(levs,prsl,iccn,jindx1_ci,jindx2_ci,ddy_ci,iindx1_ci,iindx2_ci) &
815814
!$OMP shared(ddx_ci,in_nm,ccn_nm,do_ugwp_v1,jindx1_tau,jindx2_tau,ddy_j1tau) &
816-
!$OMP shared(ddy_j2tau,tau_amf,iflip,ozphys,rjday,n1,n2,idat,jdat,rinc,rinc4) &
815+
!$OMP shared(ddy_j2tau,tau_amf,iflip,ozphys,rjday,n1,n2,idat,jdat,rinc) &
817816
!$OMP shared(w3kindreal,w3kindint,jdow,jdoy,jday) &
818817
!$OMP private(iseed,iskip,i,j,k)
819818

@@ -873,13 +872,7 @@ subroutine GFS_phys_time_vary_timestep_init (
873872
idat(5)=idate(1)
874873
rinc=0.
875874
rinc(2)=fhour
876-
call w3kind(w3kindreal,w3kindint)
877-
if(w3kindreal==4) then
878-
rinc4=rinc
879-
CALL w3movdat(rinc4,idat,jdat)
880-
else
881-
CALL w3movdat(rinc,idat,jdat)
882-
endif
875+
CALL w3movdat(rinc,idat,jdat)
883876
jdow = 0
884877
jdoy = 0
885878
jday = 0

physics/Interstitials/UFS_SCM_NEPTUNE/GFS_rrtmg_pre.F90

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ module GFS_rrtmg_pre
1919
!>\section rrtmg_pre_gen General Algorithm
2020
subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, lextop,&
2121
ltp, imfdeepcnv, imfdeepcnv_gf, imfdeepcnv_c3, me, ncnd, ntrac, &
22-
num_p3d, npdf3d, &
22+
num_p3d, npdf3d, xr_cnvcld, &
2323
ncnvcld3d,ntqv, ntcw,ntiw, ntlnc, ntinc, ntrnc, ntsnc, ntccn, top_at_1,&
2424
ntrw, ntsw, ntgl, nthl, ntwa, ntoz, ntsmoke, ntdust, ntcoarsepm, &
2525
ntclamt, nleffr, nieffr, nseffr, lndp_type, kdt, &
@@ -129,7 +129,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, lextop,&
129129
uni_cld, effr_in, do_mynnedmf, &
130130
lmfshal, lmfdeep2, pert_clds, lcrick,&
131131
lcnorm, top_at_1, lextop, mraerosol
132-
logical, intent(in) :: rrfs_sd, aero_dir_fdb
132+
logical, intent(in) :: rrfs_sd, aero_dir_fdb, xr_cnvcld
133133

134134
logical, intent(in) :: nssl_ccn_on, nssl_invertccn
135135
integer, intent(in) :: spp_rad
@@ -981,7 +981,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, lextop,&
981981
& iovr_dcorr, iovr_exp, iovr_exprand, idcor, idcor_con, &
982982
& idcor_hogan, idcor_oreopoulos, lcrick, lcnorm, &
983983
& imfdeepcnv, imfdeepcnv_gf, imfdeepcnv_c3, do_mynnedmf, &
984-
& lgfdlmprad, &
984+
& lgfdlmprad, xr_cnvcld, &
985985
& uni_cld, lmfshal, lmfdeep2, cldcov, clouds1, &
986986
& effrl, effri, effrr, effrs, effr_in, &
987987
& effrl_inout, effri_inout, effrs_inout, &

physics/Interstitials/UFS_SCM_NEPTUNE/GFS_rrtmg_pre.meta

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,13 @@
5656
dimensions = ()
5757
type = logical
5858
intent = in
59+
[xr_cnvcld]
60+
standard_name = flag_for_suspended_convective_clouds_in_Xu_Randall
61+
long_name = flag for using suspended convective clouds in Xu Randall
62+
units = flag
63+
dimensions = ()
64+
type = logical
65+
intent = in
5966
[ltp]
6067
standard_name = extra_top_layer
6168
long_name = extra top layer for radiation

physics/Interstitials/UFS_SCM_NEPTUNE/GFS_time_vary_pre.fv3.F90

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,8 @@ subroutine GFS_time_vary_pre_timestep_init (jdat, idat, dtp, nsswr,
9494

9595
real(kind=kind_phys), parameter :: con_24 = 24.0_kind_phys
9696
real(kind=kind_phys), parameter :: con_hr = 3600.0_kind_phys
97-
real(kind=kind_sngl_prec) :: rinc4(5)
9897
real(kind=kind_dbl_prec) :: rinc8(5)
9998

100-
integer :: w3kindreal,w3kindint
10199
integer :: iw3jdn
102100
integer :: jd0, jd1
103101
real :: fjd
@@ -115,19 +113,9 @@ subroutine GFS_time_vary_pre_timestep_init (jdat, idat, dtp, nsswr,
115113

116114
!--- jdat is being updated directly inside of FV3GFS_cap.F90
117115
!--- update calendars and triggers
118-
call w3kind(w3kindreal,w3kindint)
119-
if (w3kindreal == 8) then
120-
rinc8(1:5) = 0
121-
call w3difdat(jdat,idat,4,rinc8)
122-
sec = rinc8(4)
123-
else if (w3kindreal == 4) then
124-
rinc4(1:5) = 0
125-
call w3difdat(jdat,idat,4,rinc4)
126-
sec = rinc4(4)
127-
else
128-
write(0,*)' FATAL ERROR: Invalid w3kindreal'
129-
call abort
130-
endif
116+
rinc8(1:5) = 0
117+
call w3difdat(jdat,idat,4,rinc8)
118+
sec = rinc8(4)
131119
phour = sec/con_hr
132120
!--- set current bucket hour
133121
zhour = phour

physics/Interstitials/UFS_SCM_NEPTUNE/GFS_time_vary_pre.scm.F90

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,8 @@ subroutine GFS_time_vary_pre_timestep_init (jdat, idat, dtp, nsswr, &
9191

9292
real(kind=kind_phys), parameter :: con_24 = 24.0_kind_phys
9393
real(kind=kind_phys), parameter :: con_hr = 3600.0_kind_phys
94-
real(kind=kind_sngl_prec) :: rinc4(5)
9594
real(kind=kind_dbl_prec) :: rinc8(5)
9695

97-
integer :: w3kindreal,w3kindint
9896
integer :: iw3jdn
9997
integer :: jd0, jd1
10098
real :: fjd
@@ -114,19 +112,9 @@ subroutine GFS_time_vary_pre_timestep_init (jdat, idat, dtp, nsswr, &
114112
!--- jdat is being updated directly inside of the time integration
115113
!--- loop of scm.F90
116114
!--- update calendars and triggers
117-
call w3kind(w3kindreal,w3kindint)
118-
if (w3kindreal == 8) then
119-
rinc8(1:5) = 0
120-
call w3difdat(jdat,idat,4,rinc8)
121-
sec = rinc8(4)
122-
else if (w3kindreal == 4) then
123-
rinc4(1:5) = 0
124-
call w3difdat(jdat,idat,4,rinc4)
125-
sec = rinc4(4)
126-
else
127-
write(0,*)' FATAL ERROR: Invalid w3kindreal'
128-
call abort
129-
endif
115+
rinc8(1:5) = 0
116+
call w3difdat(jdat,idat,4,rinc8)
117+
sec = rinc8(4)
130118
phour = sec/con_hr
131119
!--- set current bucket hour
132120
zhour = phour

physics/Interstitials/UFS_SCM_NEPTUNE/iccninterp.F90

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ SUBROUTINE read_cidata (me, master)
2323
integer, intent(in) :: me
2424
integer, intent(in) :: master
2525
!--- locals
26+
integer :: ncerr
2627
integer :: i, n, k, ncid, varid,j,it
2728
real(kind=kind_phys), allocatable, dimension(:) :: hyam,hybm
2829
real(kind=4), allocatable, dimension(:,:,:) :: ci_ps
@@ -31,29 +32,29 @@ SUBROUTINE read_cidata (me, master)
3132
allocate (ciplin(lonscip,latscip,kcipl,timeci))
3233
allocate (ccnin(lonscip,latscip,kcipl,timeci))
3334
allocate (ci_pres(lonscip,latscip,kcipl,timeci))
34-
call nf_open("cam5_4_143_NAAI_monclimo2.nc", NF90_NOWRITE, ncid)
35-
call nf_inq_varid(ncid, "lat", varid)
36-
call nf_get_var(ncid, varid, ci_lat)
37-
call nf_inq_varid(ncid, "lon", varid)
38-
call nf_get_var(ncid, varid, ci_lon)
39-
call nf_inq_varid(ncid, "PS", varid)
40-
call nf_get_var(ncid, varid, ci_ps)
41-
call nf_inq_varid(ncid, "hyam", varid)
42-
call nf_get_var(ncid, varid, hyam)
43-
call nf_inq_varid(ncid, "hybm", varid)
44-
call nf_get_var(ncid, varid, hybm)
45-
call nf_inq_varid(ncid, "NAAI", varid)
46-
call nf_get_var(ncid, varid, ciplin)
35+
ncerr = nf90_open("cam5_4_143_NAAI_monclimo2.nc", NF90_NOWRITE, ncid)
36+
ncerr = nf90_inq_varid(ncid, "lat", varid)
37+
ncerr = nf90_get_var(ncid, varid, ci_lat)
38+
ncerr = nf90_inq_varid(ncid, "lon", varid)
39+
ncerr = nf90_get_var(ncid, varid, ci_lon)
40+
ncerr = nf90_inq_varid(ncid, "PS", varid)
41+
ncerr = nf90_get_var(ncid, varid, ci_ps)
42+
ncerr = nf90_inq_varid(ncid, "hyam", varid)
43+
ncerr = nf90_get_var(ncid, varid, hyam)
44+
ncerr = nf90_inq_varid(ncid, "hybm", varid)
45+
ncerr = nf90_get_var(ncid, varid, hybm)
46+
ncerr = nf90_inq_varid(ncid, "NAAI", varid)
47+
ncerr = nf90_get_var(ncid, varid, ciplin)
4748
do it = 1,timeci
4849
do k=1, kcipl
4950
ci_pres(:,:,k,it)=hyam(k)*1.e5+hybm(k)*ci_ps(:,:,it)
5051
end do
5152
end do
52-
call nf_close(ncid)
53-
call nf_open("cam5_4_143_NPCCN_monclimo2.nc", NF90_NOWRITE, ncid)
54-
call nf_inq_varid(ncid, "NPCCN", varid)
55-
call nf_get_var(ncid, varid, ccnin)
56-
call nf_close(ncid)
53+
ncerr = nf90_close(ncid)
54+
ncerr = nf90_open("cam5_4_143_NPCCN_monclimo2.nc", NF90_NOWRITE, ncid)
55+
ncerr = nf90_inq_varid(ncid, "NPCCN", varid)
56+
ncerr = nf90_get_var(ncid, varid, ccnin)
57+
ncerr = nf90_close(ncid)
5758
!---
5859
deallocate (hyam, hybm, ci_ps)
5960
if (me == master) then
@@ -128,7 +129,7 @@ END SUBROUTINE setindxci
128129
SUBROUTINE ciinterpol(me,npts,IDATE,FHOUR,jindx1,jindx2,ddy, &
129130
iindx1,iindx2,ddx,lev, prsl, ciplout,ccnout)
130131
!
131-
USE MACHINE, ONLY : kind_phys
132+
USE MACHINE, ONLY : kind_phys, kind_dbl_prec
132133
use iccn_def
133134
implicit none
134135
integer i1,i2, iday,j,j1,j2,l,npts,nc,n1,n2,lev,k,i
@@ -144,10 +145,8 @@ SUBROUTINE ciinterpol(me,npts,IDATE,FHOUR,jindx1,jindx2,ddy, &
144145
real(kind=kind_phys) ccnout(npts,lev),ccnpm(npts,kcipl)
145146
real(kind=kind_phys) cipres(npts,kcipl), prsl(npts,lev)
146147
real(kind=kind_phys) rjday
148+
real(kind=kind_dbl_prec) rinc(5)
147149
integer jdow, jdoy, jday
148-
real(8) RINC(5)
149-
real(4) rinc4(5)
150-
integer w3kindreal,w3kindint
151150
!
152151
IDAT=0
153152
IDAT(1)=IDATE(4)
@@ -156,13 +155,7 @@ SUBROUTINE ciinterpol(me,npts,IDATE,FHOUR,jindx1,jindx2,ddy, &
156155
IDAT(5)=IDATE(1)
157156
RINC=0.
158157
RINC(2)=FHOUR
159-
call w3kind(w3kindreal,w3kindint)
160-
if(w3kindreal==4) then
161-
rinc4=rinc
162-
CALL W3MOVDAT(RINC4,IDAT,JDAT)
163-
else
164-
CALL W3MOVDAT(RINC,IDAT,JDAT)
165-
endif
158+
CALL W3MOVDAT(RINC,IDAT,JDAT)
166159
!
167160
jdow = 0
168161
jdoy = 0

physics/Interstitials/UFS_SCM_NEPTUNE/maximum_hourly_diagnostics.F90

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ module maximum_hourly_diagnostics
1515
real(kind=kind_phys), parameter ::PQ0=379.90516E0, A2A=17.2693882, A3=273.16, A4=35.86, RHmin=1.0E-6
1616
! *DH
1717

18+
! Conversion from flashes per five minutes to flashes per minute.
19+
real(kind=kind_phys), parameter :: scaling_factor = 0.2
20+
1821
contains
1922

2023
#if 0
@@ -195,7 +198,10 @@ subroutine lightning_threat_indices
195198
endif
196199

197200
IF ( ltg1 .LT. clim1 ) ltg1 = 0.
198-
201+
202+
! Scale to flashes per minue
203+
ltg1 = ltg1 * scaling_factor
204+
199205
IF ( ltg1 .GT. ltg1_max(i) ) THEN
200206
ltg1_max(i) = ltg1
201207
ENDIF
@@ -208,14 +214,19 @@ subroutine lightning_threat_indices
208214
ltg2 = coef2 * totice_colint(i)
209215

210216
IF ( ltg2 .LT. clim2 ) ltg2 = 0.
217+
218+
! Scale to flashes per minute
219+
ltg2 = ltg2 * scaling_factor
211220

212221
IF ( ltg2 .GT. ltg2_max(i) ) THEN
213222
ltg2_max(i) = ltg2
214223
ENDIF
215224

225+
! This calculation is already in flashes per minute.
216226
ltg3_max(i) = 0.95 * ltg1_max(i) + 0.05 * ltg2_max(i)
217227

218-
IF ( ltg3_max(i) .LT. clim3 ) ltg3_max(i) = 0.
228+
! Thus, we must scale clim3. The compiler will optimize this away.
229+
IF ( ltg3_max(i) .LT. clim3 * scaling_factor ) ltg3_max(i) = 0.
219230
enddo
220231

221232
end subroutine lightning_threat_indices

0 commit comments

Comments
 (0)