Skip to content

Commit a49af05

Browse files
authored
Restrict undefined grids from UPP computation Part 3 (#348)
* Modify the computation at defined points. * The second part of changes from debug mode. * The third part of changes from debug_mode. * The fourth part of changes from debug_mode. * The fifth part of changes from debug_mode. * Update per comments from code reviewer. * Remove legacy sigma level temperature from PRSLEV dataset. * Fix MCONV computation on undefined grids. * Fixes for global and regional inline post in debug mode. * Update VERSION to 10.0.9. * Remove duplicated line.
1 parent 2787388 commit a49af05

26 files changed

+192
-120
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
10.0.8
1+
10.0.9

parm/fv3lam.xml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1598,14 +1598,6 @@
15981598
<scale>5.0</scale>
15991599
</param>
16001600

1601-
<param>
1602-
<shortname>TMP_ON_SIGMA_LVL_HPC</shortname>
1603-
<pname>TMP</pname>
1604-
<scale_fact_fixed_sfc1>4</scale_fact_fixed_sfc1>
1605-
<level>9000. 8500. 8000. 7500. 7000.</level>
1606-
<scale>-4.0</scale>
1607-
</param>
1608-
16091601
<param>
16101602
<shortname>PBLREG_ON_SURFACE</shortname>
16111603
<pname>PBLREG</pname>

parm/postxconfig-NT-fv3lam.txt

Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
2
22
219
3-
259
3+
258
44
PRSLEV
55
32769
66
ncep_nco
@@ -8416,43 +8416,6 @@ entire_atmos_single_lyr
84168416
?
84178417
?
84188418
?
8419-
296
8420-
TMP_ON_SIGMA_LVL_HPC
8421-
?
8422-
1
8423-
tmpl4_0
8424-
TMP
8425-
?
8426-
?
8427-
sigma_lvl
8428-
1
8429-
4
8430-
5
8431-
9000. 8500. 8000. 7500. 7000.
8432-
?
8433-
0
8434-
?
8435-
0
8436-
?
8437-
?
8438-
?
8439-
0
8440-
0.0
8441-
0
8442-
0.0
8443-
?
8444-
0
8445-
0.0
8446-
0
8447-
0.0
8448-
1
8449-
-4.0
8450-
0
8451-
0
8452-
0
8453-
?
8454-
?
8455-
?
84568419
344
84578420
PBLREG_ON_SURFACE
84588421
?

sorc/ncep_post.fd/ALLOCATE_ALL.f

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ SUBROUTINE ALLOCATE_ALL()
4646
integer ierr,jsx,jex
4747
integer i,j,l,k
4848
! Allocate arrays
49-
allocate(u(im,jsta_2l:jend_2u,lm))
49+
allocate(u(im+1,jsta_2l:jend_2u,lm))
5050
allocate(v(im,jsta_2l:jvend_2u,lm))
5151
allocate(t(im,jsta_2l:jend_2u,lm))
5252
! CHUANG ADD POTENTIAL TEMP BECAUSE WRF OUTPUT THETA
@@ -79,9 +79,23 @@ SUBROUTINE ALLOCATE_ALL()
7979
!$omp parallel do private(i,j,l)
8080
do l=1,lm
8181
do j=jsta_2l,jend_2u
82-
do i=1,im
82+
do i=1,im+1
8383
u(i,j,l)=0.
84+
enddo
85+
enddo
86+
enddo
87+
!$omp parallel do private(i,j,l)
88+
do l=1,lm
89+
do j=jsta_2l,jvend_2u
90+
do i=1,im
8491
v(i,j,l)=0.
92+
enddo
93+
enddo
94+
enddo
95+
!$omp parallel do private(i,j,l)
96+
do l=1,lm
97+
do j=jsta_2l,jend_2u
98+
do i=1,im
8599
t(i,j,l)=spval
86100
q(i,j,l)=spval
87101
uh(i,j,l)=spval
@@ -810,14 +824,14 @@ SUBROUTINE ALLOCATE_ALL()
810824
cldfra(i,j)=spval
811825
cprate(i,j)=spval
812826
cnvcfr(i,j)=spval
813-
ivgtyp(i,j)=spval
814-
isltyp(i,j)=spval
827+
ivgtyp(i,j)=0
828+
isltyp(i,j)=0
815829
hbotd(i,j)=spval
816830
htopd(i,j)=spval
817831
hbots(i,j)=spval
818832
htops(i,j)=spval
819833
cldefi(i,j)=spval
820-
islope(i,j)=spval
834+
islope(i,j)=0
821835
si(i,j)=spval
822836
lspa(i,j)=spval
823837
rswinc(i,j)=spval

sorc/ncep_post.fd/BNDLYR.f

Lines changed: 18 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
!! 00-01-04 JIM TUCCILLO - MPI VERSION
3232
!! 02-01-15 MIKE BALDWIN - WRF VERSION
3333
!! 20-11-10 JESSE MENG - USE UPP_PHYSICS MODULE
34-
!! 21-04-01 JESSE MENG - COMPUTATION ON DEFINED POINTS ONLY
34+
!! 21-08-20 Wen Meng - Retrict computation fro undefined points.
3535
!!
3636
!! USAGE: CALL BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND,
3737
!! WBND,OMGBND,PWTBND,QCNVBND)
@@ -208,6 +208,18 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, &
208208
END IF
209209
QSBND(I,J,LBND) = QSBND(I,J,LBND) + QSAT*DP
210210
ENDIF
211+
ELSE !undeined grids
212+
PBND(I,J,LBND)=SPVAL
213+
TBND(I,J,LBND)=SPVAL
214+
UBND(I,J,LBND)=SPVAL
215+
VBND(I,J,LBND)=SPVAL
216+
WBND(I,J,LBND)=SPVAL
217+
OMGBND(I,J,LBND)=SPVAL
218+
QCNVBND(I,J,LBND)=SPVAL
219+
PWTBND(I,J,LBND)=SPVAL
220+
QBND(I,J,LBND)=SPVAL
221+
QSBND(I,J,LBND)=SPVAL
222+
RHBND(I,J,LBND)=SPVAL
211223
ENDIF
212224
ENDDO
213225
ENDDO
@@ -273,9 +285,7 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, &
273285
DO LBND=1,NBND
274286
DO J=JSTA,JEND
275287
DO I=1,IM
276-
IF(PSUM(I,J,LBND)/=0.)THEN
277-
IF(T(I,J,LBND)<spval.and.Q(I,J,LBND)<spval.and.&
278-
UH(I,J,LBND)<spval.and.VH(I,J,LBND)<spval) THEN
288+
IF(PSUM(I,J,LBND)/=0..AND.TBND(I,J,LBND)<SPVAL)THEN
279289
RPSUM = 1./PSUM(I,J,LBND)
280290
LVLBND(I,J,LBND)= LVLBND(I,J,LBND)/NSUM(I,J,LBND)
281291
PBND(I,J,LBND) = (PBINT(I,J,LBND)+PBINT(I,J,LBND+1))*0.5
@@ -288,18 +298,8 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, &
288298
VBND(I,J,LBND) = VBND(I,J,LBND)*RPSUM
289299
END IF
290300
WBND(I,J,LBND) = WBND(I,J,LBND)*RPSUM
301+
IF(QCNVBND(I,J,LBND)<SPVAL) &
291302
QCNVBND(I,J,LBND) = QCNVBND(I,J,LBND)*RPSUM
292-
ELSE
293-
LVLBND(I,J,LBND)= spval
294-
PBND(I,J,LBND) = spval
295-
TBND(I,J,LBND) = spval
296-
QBND(I,J,LBND) = spval
297-
OMGBND(I,J,LBND)= spval
298-
UBND(I,J,LBND) = spval
299-
VBND(I,J,LBND) = spval
300-
WBND(I,J,LBND) = spval
301-
QCNVBND(I,J,LBND)= spval
302-
ENDIF
303303
ENDIF
304304
ENDDO
305305
ENDDO
@@ -308,14 +308,9 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, &
308308
DO J=JSTA_M,JEND_M
309309
DO I=2,IM-1
310310
IF(PVSUM(I,J,LBND)/=0.)THEN
311-
IF(UBND(I,J,LBND)<spval.and.VBND(I,J,LBND)<spval.and.PVSUM(I,J,LBND)<spval)THEN
312311
RPVSUM = 1./PVSUM(I,J,LBND)
313312
UBND(I,J,LBND) = UBND(I,J,LBND)*RPVSUM
314313
VBND(I,J,LBND) = VBND(I,J,LBND)*RPVSUM
315-
ELSE
316-
UBND(I,J,LBND) = spval
317-
VBND(I,J,LBND) = spval
318-
ENDIF
319314
ENDIF
320315
ENDDO
321316
ENDDO
@@ -331,7 +326,7 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, &
331326
DO LBND=1,NBND
332327
DO J=JSTA,JEND
333328
DO I=1,IM
334-
IF(PSUM(I,J,LBND)==0.)THEN
329+
IF(PSUM(I,J,LBND)==0..AND.PBND(I,J,LBND)<SPVAL)THEN
335330
L = LM
336331
PMIN = 9999999.
337332
PBND(I,J,LBND) = (PBINT(I,J,LBND)+PBINT(I,J,LBND+1))*0.5
@@ -355,7 +350,6 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, &
355350
VBND(I,J,LBND) = VH(I,J,L)
356351
END IF
357352
WBND(I,J,LBND) = WH(I,J,L)
358-
IF(T(I,J,LBND)<spval.and.Q(I,J,LBND)<spval)THEN
359353
QCNVBND(I,J,LBND) = QCNVG(I,J,L)
360354
IF(MODELNAME == 'GFS' .OR. MODELNAME == 'FV3R')THEN
361355
ES = FPVSNEW(T(I,J,L))
@@ -367,17 +361,11 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, &
367361
QSBND(I,J,LBND) = QSAT
368362
OMGBND(I,J,LBND) = OMGA(I,J,L)
369363
PWTBND(I,J,LBND) = (Q(I,J,L)+CWM(I,J,L))*DP*GI
370-
ELSE
371-
QCNVBND(I,J,LBND)= spval
372-
QSBND(I,J,LBND) = spval
373-
OMGBND(I,J,LBND) = spval
374-
PWTBND(I,J,LBND) = spval
375-
ENDIF
376364
ENDIF
377365
!
378366
! RH, BOUNDS CHECK
379367
!
380-
IF(T(I,J,LBND)<spval.and.Q(I,J,LBND)<spval)THEN
368+
IF(QSBND(I,J,LBND)/=0..AND.QBND(I,J,LBND)<SPVAL)THEN
381369
RHBND(I,J,LBND) = QBND(I,J,LBND)/QSBND(I,J,LBND)
382370
IF (RHBND(I,J,LBND)>1.0) THEN
383371
RHBND(I,J,LBND) = 1.0
@@ -387,10 +375,7 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, &
387375
RHBND(I,J,LBND) = 0.01
388376
QBND(I,J,LBND) = RHBND(I,J,LBND)*QSBND(I,J,LBND)
389377
ENDIF
390-
ELSE
391-
RHBND(I,J,LBND) = spval
392-
QBND(I,J,LBND) = spval
393-
ENDIF
378+
ENDIF
394379
ENDDO
395380
ENDDO
396381
!

sorc/ncep_post.fd/CALDWP.f

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
!! AMBIENT TEMPERATURE.
1313
!! 98-06-08 T BLACK - CONVERSION FROM 1-D TO 2-D
1414
!! 00-01-04 JIM TUCCILLO - MPI VERSION
15+
!! 21-07-23 Wen Meng - Retrict computation from undefined points
1516
!!
1617
!! USAGE: CALL CALDWP(P1D,Q1D,TDWP,T1D)
1718
!! INPUT ARGUMENT LIST:
@@ -42,7 +43,7 @@ SUBROUTINE CALDWP(P1D,Q1D,TDWP,T1D)
4243
!
4344
! SET PARAMETERS.
4445
use params_mod, only: eps, oneps, d001, h1m12
45-
use ctlblk_mod, only: jsta, jend, im
46+
use ctlblk_mod, only: jsta, jend, im, spval
4647
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
4748
implicit none
4849
!
@@ -62,8 +63,12 @@ SUBROUTINE CALDWP(P1D,Q1D,TDWP,T1D)
6263
!$omp parallel do private(i,j)
6364
DO J=JSTA,JEND
6465
DO I=1,IM
66+
IF(P1D(I,j)<spval .and. Q1D(I,J)<spval) THEN
6567
EVP(I,J) = P1D(I,J)*Q1D(I,J)/(EPS+ONEPS*Q1D(I,J))
6668
EVP(I,J) = MAX(H1M12,EVP(I,J)*D001)
69+
ELSE
70+
EVP(I,J) = spval
71+
ENDIF
6772
ENDDO
6873
ENDDO
6974
!

sorc/ncep_post.fd/CALLCL.f

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
!! 00-01-04 JIM TUCCILLO - MPI VERSION
2020
!! 02-04-24 MIKE BALDWIN - WRF VERSION
2121
!! 19-10-30 Bo CUI - REMOVE "GOTO" STATEMENT
22+
!! 21-07-28 W Meng - Restriction compuatation from undefined grids
2223
!!
2324
!! USAGE: CALL CALLCL(P1D,T1D,Q1D,PLCL,ZLCL)
2425
!! INPUT ARGUMENT LIST:
@@ -88,6 +89,7 @@ SUBROUTINE CALLCL(P1D,T1D,Q1D,PLCL,ZLCL)
8889
DO 30 J=JSTA_M,JEND_M
8990
DO 30 I=2,IM-1
9091
! DO 30 I=1,IM
92+
IF(P1D(I,J)<spval.and.Q1D(I,J)<spval)THEN
9193
EVP = P1D(I,J)*Q1D(I,J)/(EPS+ONEPS*Q1D(I,J))
9294
RMX = EPS*EVP/(P1D(I,J)-EVP)
9395
RKAPA = 1.0 / (D2845*(1.0-D28*RMX))
@@ -107,6 +109,7 @@ SUBROUTINE CALLCL(P1D,T1D,Q1D,PLCL,ZLCL)
107109
EXIT
108110
ENDIF
109111
20 CONTINUE
112+
ENDIF
110113
30 CONTINUE
111114
!
112115
! END OF ROUTINE.

sorc/ncep_post.fd/CALMCVG.f

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,11 @@ SUBROUTINE CALMCVG(Q1D,U1D,V1D,QCNVG)
8181
!$omp parallel do private(i,j)
8282
DO J=JSTA_2L,JEND_2U
8383
DO I=1,IM
84+
IF(U1D(I,J)<SPVAL)THEN
8485
QCNVG(I,J) = 0.
86+
ELSE
87+
QCNVG(I,J) = SPVAL
88+
ENDIF
8589
UWND(I,J) = U1D(I,J)
8690
VWND(I,J) = V1D(I,J)
8791
IF (UWND(I,J) == SPVAL) UWND(I,J) = D00
@@ -97,7 +101,8 @@ SUBROUTINE CALMCVG(Q1D,U1D,V1D,QCNVG)
97101
DO J=JSTA_M,JEND_M
98102
DO I=2,IM-1
99103
IF(Q1D(I,J+1)<SPVAL.AND.Q1D(I,J-1)<SPVAL.AND. &
100-
Q1D(I+1,J)<SPVAL.AND.Q1D(I-1,J)<SPVAL) THEN
104+
Q1D(I+1,J)<SPVAL.AND.Q1D(I-1,J)<SPVAL.AND. &
105+
Q1D(I,J)<SPVAL) THEN
101106
R2DX = 1./(2.*DX(I,J)) !MEB DX?
102107
R2DY = 1./(2.*DY(I,J)) !MEB DY?
103108
QUDX = (Q1D(I+1,J)*UWND(I+1,J)-Q1D(I-1,J)*UWND(I-1,J))*R2DX
@@ -141,7 +146,8 @@ SUBROUTINE CALMCVG(Q1D,U1D,V1D,QCNVG)
141146
IEND = IM-1-MOD(J,2)
142147
DO I=2,IEND
143148
IF(QV(I+IHE(J),J)<SPVAL.AND.UWND(I+IHE(J),J)<SPVAL.AND.&
144-
QV(I+IHW(J),J)<SPVAL.AND.UWND(I+IHW(J),J)<SPVAL) THEN
149+
QV(I+IHW(J),J)<SPVAL.AND.UWND(I+IHW(J),J)<SPVAL.AND.&
150+
QV(I,J)<SPVAL.AND.QV(I,J-1)<SPVAL.AND.QV(I,J+1)<SPVAL) THEN
145151
R2DX = 1./(2.*DX(I,J))
146152
R2DY = 1./(2.*DY(I,J))
147153
QUDX = (QV(I+IHE(J),J)*UWND(I+IHE(J),J) &

sorc/ncep_post.fd/CALTAU.f

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
!! 02-01-15 MIKE BALDWIN - WRF VERSION, OUTPUT IS ON MASS-POINTS
1818
!! 05-02-23 H CHUANG - COMPUTE STRESS FOR NMM ON WIND POINTS
1919
!! 05-07-07 BINBIN ZHOU - ADD RSM STRESS for A GRID
20+
!! 21-07-26 W Meng - Restrict computation from undefined grids
2021
!! USAGE: CALL CALTAU(TAUX,TAUY)
2122
!! INPUT ARGUMENT LIST:
2223
!! NONE
@@ -99,6 +100,8 @@ SUBROUTINE CALTAU(TAUX,TAUY)
99100
DO I=1,IM
100101
!
101102
LMHK = NINT(LMH(I,J))
103+
IF(EL(I,J,LMHK-1)<spval.and.Z0(I,J)<spval.and. &
104+
UZ0(I,J)<spval.and.VZ0(I,J)<spval)THEN
102105
!
103106
! COMPUTE THICKNESS OF LAYER AT MASS POINT.
104107
!
@@ -128,6 +131,10 @@ SUBROUTINE CALTAU(TAUX,TAUY)
128131
ELSQR = EL(I,J,LMHK-1)*EL(I,J,LMHK-1)
129132
TAUX(I,J) = RHO*ELSQR*DELUDZ*DELUDZ
130133
TAUY(I,J) = RHO*ELSQR*DELVDZ*DELVDZ
134+
ELSE
135+
TAUX(I,J) = spval
136+
TAUY(I,J) = spval
137+
ENDIF
131138

132139
!
133140
END DO

sorc/ncep_post.fd/CALTHTE.f

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
!! 93-06-18 RUSS TREADON
1313
!! 98-06-16 T BLACK - CONVERSION FROM 1-D TO 2-D
1414
!! 00-01-04 JIM TUCCILLO - MPI VERSION
15+
!! 21-07-28 W Meng - Restrict computation from undefined grids
1516
!!
1617
!! USAGE: CALL CALTHTE(P1D,T1D,Q1D,THTE)
1718
!! INPUT ARGUMENT LIST:
@@ -40,7 +41,7 @@ SUBROUTINE CALTHTE(P1D,T1D,Q1D,THTE)
4041
!
4142
!
4243
use params_mod, only: d00, eps, oneps, d01, h1m12, p1000, h1
43-
use ctlblk_mod, only: jsta, jend, im
44+
use ctlblk_mod, only: jsta, jend, im, spval
4445
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
4546
implicit none
4647
!
@@ -77,6 +78,7 @@ SUBROUTINE CALTHTE(P1D,T1D,Q1D,THTE)
7778
!$omp parallel do private(i,j,p,t,q,evp,rmx,ckapa,rkapa,arg,denom,tlcl,plcl,fac,eterm,thetae)
7879
DO J=JSTA,JEND
7980
DO I=1,IM
81+
IF(P1D(I,J)<spval.and.T1D(I,J)<spval.and.Q1D(I,J)<spval)THEN
8082
P = P1D(I,J)
8183
T = T1D(I,J)
8284
Q = Q1D(I,J)
@@ -92,6 +94,7 @@ SUBROUTINE CALTHTE(P1D,T1D,Q1D,THTE)
9294
ETERM = (D3376/TLCL-D00254)*(RMX*KG2G*(H1+D81*RMX))
9395
THETAE = T*FAC*EXP(ETERM)
9496
THTE(I,J)= THETAE
97+
ENDIF
9598
ENDDO
9699
ENDDO
97100
!

0 commit comments

Comments
 (0)