diff --git a/sorc/ncep_post.fd/AVIATION.f b/sorc/ncep_post.fd/AVIATION.f index 7c8219ec0..4de228f92 100644 --- a/sorc/ncep_post.fd/AVIATION.f +++ b/sorc/ncep_post.fd/AVIATION.f @@ -5,6 +5,7 @@ !! SUBPROGRAM: CALLLWS COMPUTES Low Level Wind Shear (0-2000feet) !! PRGRMMR: Binbin Zhou /NCEP/EMC DATE: 2005-08-16 !! 19-10-30 Bo CUI - REMOVE "GOTO" STATEMENT +!! 21-04-01 Jesse Meng - computation on defined points only !! !! ABSTRACT: !! This program computes the low level wind shear(LLWS) over 0-2000 feet (0-609.5m) @@ -83,7 +84,7 @@ SUBROUTINE CALLLWS(U,V,H,LLWS) ! USE vrbls2d, only: fis, u10, v10 use params_mod, only: gi - use ctlblk_mod, only: jsta, jend, im, jm, lsm + use ctlblk_mod, only: jsta, jend, im, jm, lsm, spval !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! @@ -137,9 +138,10 @@ SUBROUTINE CALLLWS(U,V,H,LLWS) END IF !computer vector difference -610 LLWS(I,J)=SQRT((U2-U10(I,J))**2+(V2-V10(I,J))**2)/ & + LLWS(I,J) = spval + if(U10(I,J)= 251.0) & .AND. RH(I,J) >= 70.0) THEN @@ -217,6 +219,9 @@ SUBROUTINE CALICING (T1,RH,OMGA, ICING) ELSE ICING(I,J) = 0.0 END IF + ELSE + ICING(I,J) = SPVAL + ENDIF ENDDO ENDDO @@ -335,6 +340,8 @@ SUBROUTINE CALCAT(U,V,H,U_OLD,V_OLD,H_OLD,CAT) DO I=ISTART,ISTOP ! IF(GRIDTYPE=='B')THEN + IF(U(I,J) feet VISI = VIS(I,J) / 1609.0 !from m -> miles @@ -561,7 +641,9 @@ SUBROUTINE CALFLTCND (CEILING,FLTCND) FLTCND(I,J) = 4.0 END IF - + ELSE + FLTCND(I,J) = SPVAL + ENDIF ENDDO ENDDO diff --git a/sorc/ncep_post.fd/BNDLYR.f b/sorc/ncep_post.fd/BNDLYR.f index e06c53c7c..f78c2f08b 100644 --- a/sorc/ncep_post.fd/BNDLYR.f +++ b/sorc/ncep_post.fd/BNDLYR.f @@ -31,6 +31,7 @@ !! 00-01-04 JIM TUCCILLO - MPI VERSION !! 02-01-15 MIKE BALDWIN - WRF VERSION !! 20-11-10 JESSE MENG - USE UPP_PHYSICS MODULE +!! 21-04-01 JESSE MENG - COMPUTATION ON DEFINED POINTS ONLY !! !! USAGE: CALL BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, !! WBND,OMGBND,PWTBND,QCNVBND) @@ -273,6 +274,8 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, & DO J=JSTA,JEND DO I=1,IM IF(PSUM(I,J,LBND)/=0.)THEN + IF(T(I,J,LBND)1.0) THEN RHBND(I,J,LBND) = 1.0 @@ -360,6 +387,10 @@ SUBROUTINE BNDLYR(PBND,TBND,QBND,RHBND,UBND,VBND, & RHBND(I,J,LBND) = 0.01 QBND(I,J,LBND) = RHBND(I,J,LBND)*QSBND(I,J,LBND) ENDIF + ELSE + RHBND(I,J,LBND) = spval + QBND(I,J,LBND) = spval + ENDIF ENDDO ENDDO ! diff --git a/sorc/ncep_post.fd/CALHEL.f b/sorc/ncep_post.fd/CALHEL.f index 84d5fc841..8520bf5cd 100644 --- a/sorc/ncep_post.fd/CALHEL.f +++ b/sorc/ncep_post.fd/CALHEL.f @@ -84,7 +84,7 @@ SUBROUTINE CALHEL(DEPTH,UST,VST,HELI,USHR1,VSHR1,USHR6,VSHR6) use params_mod, only: g use lookup_mod, only: ITB,JTB,ITBQ,JTBQ use ctlblk_mod, only: jsta, jend, jsta_m, jend_m, jsta_2l, jend_2u, & - lm, im, jm, me + lm, im, jm, me, spval use gridspec_mod, only: gridtype !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -444,6 +444,10 @@ SUBROUTINE CALHEL(DEPTH,UST,VST,HELI,USHR1,VSHR1,USHR6,VSHR6) DU2 = UH(I,J,L)-UH(I,J,L-1) DV1 = VH(I,J,L+1)-VH(I,J,L) DV2 = VH(I,J,L)-VH(I,J,L-1) + IF( VH(I,J,L) = LUPP(I,J) .AND. L <= LLOW(I,J) ) THEN + IF( VH(I,J,L) 180.) CANGLE(I,J)=360.-CANGLE(I,J) IF(CANGLE(I,J) < 0. .AND. CANGLE(I,J) >= -180.) CANGLE(I,J)=-CANGLE(I,J) IF(CANGLE(I,J) < -180.) CANGLE(I,J)=360.+CANGLE(I,J) + ELSE + CANGLE(I,J)=spval + ENDIF ENDDO ENDDO ! diff --git a/sorc/ncep_post.fd/CALHEL3.f b/sorc/ncep_post.fd/CALHEL3.f index 1bd11a0bc..976778bfb 100644 --- a/sorc/ncep_post.fd/CALHEL3.f +++ b/sorc/ncep_post.fd/CALHEL3.f @@ -86,7 +86,7 @@ SUBROUTINE CALHEL3(LLOW,LUPP,UST,VST,HELI) use params_mod, only: g use lookup_mod, only: ITB,JTB,ITBQ,JTBQ use ctlblk_mod, only: jsta, jend, jsta_m, jend_m, jsta_2l, jend_2u, & - lm, im, jm, me + lm, im, jm, me, spval use gridspec_mod, only: gridtype !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -458,6 +458,10 @@ SUBROUTINE CALHEL3(LLOW,LUPP,UST,VST,HELI) DV1 = VH(I,J,L+1)-VH(I,J,L) DV2 = VH(I,J,L)-VH(I,J,L-1) IF( L >= LUPP(I,J) .AND. L <= LLOW(I,J) ) THEN + IF( VH(I,J,L) 0) THEN + GRID1 = spval IF (MODELNAME == 'RAPR') THEN DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = IWP(I,J)/1000.0 ! use WRF-diagnosed value + IF(IWP(I,J) < SPVAL) GRID1(I,J) = IWP(I,J)/1000.0 ! use WRF-diagnosed value ENDDO ENDDO ELSE @@ -697,7 +705,7 @@ SUBROUTINE CLDRAD !$omp parallel do DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = GRID1(I,J)*RRNUM + IF(GRID1(I,J) < SPVAL) GRID1(I,J) = GRID1(I,J)*RRNUM ENDDO ENDDO ID(1:25)=0 @@ -747,7 +755,7 @@ SUBROUTINE CLDRAD !$omp parallel do DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = GRID1(I,J)*RRNUM + IF(GRID1(I,J) < SPVAL) GRID1(I,J) = GRID1(I,J)*RRNUM ENDDO ENDDO ID(1:25)=0 @@ -1334,10 +1342,14 @@ SUBROUTINE CLDRAD ! ENDIF !ADDED BRAD'S MODIFICATION RSUM = D00 + IF (NCFRST(I,J) 0) RSUM=ACFRST(I,J)/NCFRST(I,J) IF (NCFRCV(I,J) > 0) & RSUM=MAX(RSUM, ACFRCV(I,J)/NCFRCV(I,J)) GRID1(I,J) = RSUM*100. + ELSE + GRID1(I,J) = spval + ENDIF ENDDO ENDDO END IF @@ -1389,11 +1401,15 @@ SUBROUTINE CLDRAD ELSE DO J=JSTA,JEND DO I=1,IM + IF (NCFRST(I,J)0.0) THEN GRID1(I,J) = ACFRST(I,J)/NCFRST(I,J)*100. ELSE GRID1(I,J) = D00 ENDIF + ELSE + GRID1(I,J) = spval + ENDIF ENDDO ENDDO END IF @@ -1437,11 +1453,15 @@ SUBROUTINE CLDRAD ELSE DO J=JSTA,JEND DO I=1,IM + IF (NCFRCV(I,J)0.0) THEN GRID1(I,J) = ACFRCV(I,J)/NCFRCV(I,J)*100. ELSE GRID1(I,J) = D00 ENDIF + ELSE + GRID1(I,J) = spval + ENDIF ENDDO ENDDO END IF @@ -3668,14 +3688,17 @@ SUBROUTINE CLDRAD ! ! CURRENT INCOMING SW RADIATION AT THE SURFACE. IF (IGET(156)>0) THEN + GRID1=SPVAL DO J=JSTA,JEND DO I=1,IM + IF(RSWIN(I,J)1.E-6) THEN FACTRS=CZEN(I,J)/CZMEAN(I,J) ELSE FACTRS=0.0 ENDIF - GRID1(I,J)=RSWIN(I,J)*FACTRS + IF(RSWIN(I,J)0.0) THEN LLMH=NINT(LMH(I,J)) TLMH=T(I,J,LLMH) @@ -3703,6 +3727,7 @@ SUBROUTINE CLDRAD FACTRL=0.0 ENDIF IF(RLWIN(I,J) < spval) GRID1(I,J)=RLWIN(I,J)*FACTRL + ENDIF ENDIF ENDDO ENDDO @@ -3716,15 +3741,18 @@ SUBROUTINE CLDRAD ! ! CURRENT OUTGOING SW RADIATION AT THE SURFACE. IF (IGET(141)>0) THEN + GRID1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(RSWOUT(I,J)1.E-6) THEN FACTRS=CZEN(I,J)/CZMEAN(I,J) ELSE FACTRS=0.0 ENDIF - GRID1(I,J)=RSWOUT(I,J)*FACTRS + IF(RSWOUT(I,J)0) THEN + GRID1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(RSWINC(I,J)1.E-6) THEN FACTRS=CZEN(I,J)/CZMEAN(I,J) ELSE FACTRS=0.0 ENDIF - GRID1(I,J) = RSWINC(I,J)*FACTRS + IF(RSWINC(I,J) 0 ) THEN + GRID1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(SCA2D(I,J) 0.0 ) THEN ASY2D(I,J) = ASY2D(I,J) / SCA2D(I,J) ELSE ASY2D(I,J) = 0. ENDIF - GRID1(I,J)=ASY2D(I,J) + IF(ASY2D(I,J) 0 ) THEN + GRID1 = SPVAL !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(AOD(I,J) 0.0 ) THEN SCA2D(I,J) = SCA2D(I,J) / AOD(I,J) ELSE SCA2D(I,J) = 1.0 ENDIF - GRID1(I,J)=SCA2D(I,J) + IF(SCA2D(I,J)0 ) THEN + GRID1=SPVAL !$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM !GRID1(I,J) = DUCMASS(I,J) * 1.E-6 - GRID1(I,J) = DUCMASS(I,J) * 1.E-9 + IF(DUCMASS(I,J)0 ) THEN + GRID1=SPVAL !$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM !GRID1(I,J) = DUCMASS25(I,J) * 1.E-6 - GRID1(I,J) = DUCMASS25(I,J) * 1.E-9 + IF(DUCMASS25(I,J)0 ) THEN + GRID1=SPVAL !$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM - GRID1(I,J) = DUSTCB(I,J) * 1.E-9 + IF(DUSTCB(I,J)0 ) THEN + GRID1=SPVAL !$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM - GRID1(I,J) = SSCB(I,J) * 1.E-9 + IF(SSCB(I,J)0 ) THEN + GRID1=SPVAL !$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM - GRID1(I,J) = BCCB(I,J) * 1.E-9 + IF(BCCB(I,J)0 ) THEN + GRID1=SPVAL !$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM - GRID1(I,J) = OCCB(I,J) * 1.E-9 + IF(OCCB(I,J)0 ) THEN + GRID1=SPVAL !$omp parallel do private(i,j) DO J = JSTA,JEND DO I = 1,IM - GRID1(I,J) = SULFCB(I,J) * 1.E-9 + IF(SULFCB(I,J)SMALL) & + IF(ABS(ALBEDO(I,J)-SPVAL)>SMALL) THEN GRID1(I,J)=ALBEDO(I,J) + ELSE + GRID1(I,J) = SPVAL + ENDIF ENDDO ENDDO ! CALL E2OUT(150,000,GRID1,GRID2,GRID1,GRID2,IM,JM) @@ -212,8 +216,11 @@ SUBROUTINE FIXED !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - IF(ABS(AVGALBEDO(I,J)-SPVAL)>SMALL) & + IF(ABS(AVGALBEDO(I,J)-SPVAL)>SMALL) THEN GRID1(I,J) = AVGALBEDO(I,J)*100. + ELSE + GRID1(I,J) = SPVAL + ENDIF ENDDO ENDDO @@ -261,6 +268,8 @@ SUBROUTINE FIXED & (abs(SICE(I,J)-1.) < 1.0E-5) ) THEN MXSNAL(I,J)=0.60 ENDIF + ELSE + MXSNAL(I,J)=SPVAL ENDIF ENDDO ENDDO @@ -287,11 +296,13 @@ SUBROUTINE FIXED !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + GRID1(I,J) = SPVAL IF (MODELNAME == 'NMM') THEN IF( (abs(SM(I,J)-1.) < 1.0E-5) ) THEN GRID1(I,J) = SST(I,J) ELSE - GRID1(I,J) = THS(I,J)*(PINT(I,J,LM+1)/P1000)**CAPA + IF(THS(I,J)0) ) THEN DO J=JSTA,JEND DO I=1,IM + IF(QAGL(I,J) SMALL) & GRID1(I,J) = CFRSL(I,J)*H100 @@ -1621,7 +1627,9 @@ SUBROUTINE MDL2P(iostatusD3D) !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(FSL(I,J) LMH(I,J)) ... ENDDO !-- End DO I loop ENDDO @@ -630,6 +640,7 @@ SUBROUTINE MDLFLD DBZC(I,J,L)=CUREFL(I,J) ENDIF !-- End IF (CUREFL_S(I,J) > 0.) + IF(T(I,J,L) 1.0E-3) & & DENS = PMID(I,J,L)/(RD*T(I,J,L)*(Q(I,J,L)*D608+1.0)) ! DENSITY @@ -695,6 +706,12 @@ SUBROUTINE MDLFLD DBZI(I,J,L) = MAX(DBZmin, DBZI(I,J,L)) DBZC(I,J,L) = MAX(DBZmin, DBZC(I,J,L)) END IF + ELSE + DBZ(I,J,L) = DBZmin + DBZR(I,J,L) = DBZmin + DBZI(I,J,L) = DBZmin + DBZC(I,J,L) = DBZmin + ENDIF !(T(I,J,L) 1.0E-3) & RHOD=PMID(I,J,LL)/ & @@ -821,7 +839,11 @@ SUBROUTINE MDLFLD DBZ(i,j,ll) = ze_sum DBZR(i,j,ll) = ze_r*1.E18 DBZI(i,j,ll) = (ze_s+ze_g)*1.E18 - + ELSE + DBZ(i,j,ll) = DBZmin + DBZR(i,j,ll) = DBZmin + DBZI(i,j,ll) = DBZmin + ENDIF !T(I,J,LL) 0) then @@ -1579,7 +1615,11 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(P1D(I,J)0 .AND. LLL>0)THEN @@ -1791,7 +1840,11 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(EGRID3(I,J)ug/m3 + ELSE + GRID1(I,J) = spval + ENDIF ENDDO ENDDO if(grib=="grib2") then @@ -2179,8 +2248,12 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(DUST(I,J,LL,2)ug/m3 + ELSE + GRID1(I,J) = spval + ENDIF ENDDO ENDDO if(grib=="grib2") then @@ -2205,9 +2278,13 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(DUST(I,J,LL,3)ug/m3 - ENDDO + ELSE + GRID1(I,J) = spval + ENDIF + ENDDO ENDDO if(grib=="grib2") then cfld=cfld+1 @@ -2231,8 +2308,12 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(DUST(I,J,LL,4)ug/m3 + ELSE + GRID1(I,J) = spval + ENDIF ENDDO ENDDO if(grib=="grib2") then @@ -2257,8 +2338,12 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(DUST(I,J,LL,5)ug/m3 + ELSE + GRID1(I,J) = spval + ENDIF ENDDO ENDDO if(grib=="grib2") then @@ -2283,7 +2368,11 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(SALT(I,J,LL,1)ug/m3 + ELSE + GRID1(I,J) = spval + ENDIF ENDDO ENDDO if(grib=="grib2") then @@ -2308,7 +2397,11 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(SALT(I,J,LL,2)ug/m3 + ELSE + GRID1(I,J) = spval + ENDIF ENDDO ENDDO if(grib=="grib2") then @@ -2333,7 +2426,11 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(SALT(I,J,LL,3)ug/m3 + ELSE + GRID1(I,J) = spval + ENDIF ENDDO ENDDO if(grib=="grib2") then @@ -2358,7 +2455,11 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(SALT(I,J,LL,4)ug/m3 + ELSE + GRID1(I,J) = spval + ENDIF ENDDO ENDDO if(grib=="grib2") then @@ -2383,7 +2484,11 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(SALT(I,J,LL,5)ug/m3 + ELSE + GRID1(I,J) = spval + ENDIF ENDDO ENDDO if(grib=="grib2") then @@ -2408,8 +2513,12 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(SUSO(I,J,LL,1)ug/m3 + ELSE + GRID1(I,J) = spval + ENDIF ENDDO ENDDO if(grib=="grib2") then @@ -2434,8 +2543,12 @@ SUBROUTINE MDLFLD !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(WASO(I,J,LL,1)24135.1)print*,'bad visbility' & , i,j,Q1D(i,j),QW1(i,j),QR1(i,j),QI1(i,j) & , QS1(i,j),T1D(i,j),P1D(i,j),vis(i,j) - GRID1(I,J)=VIS(I,J) + IF(Q1D(I,J)0)THEN + IF (IGET(350)>0)THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J)=RH1D(I,J)*100. + IF(RH1D(I,J) < spval) GRID1(I,J)=RH1D(I,J)*100. ENDDO ENDDO CALL BOUND (GRID1,H1,H100) @@ -1562,10 +1564,11 @@ SUBROUTINE MISCLN ! HIGHEST -10C ISOTHERM RELATIVE HUMIDITY IF (IGET(777)>0)THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J)=RH1D(I,J)*100. + IF(RH1D(I,J) < spval) GRID1(I,J)=RH1D(I,J)*100. ENDDO ENDDO CALL BOUND (GRID1,H1,H100) @@ -1634,10 +1637,11 @@ SUBROUTINE MISCLN ! HIGHEST -20C ISOTHERM RELATIVE HUMIDITY IF (IGET(780)>0)THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J)=RH1D(I,J)*100. + IF(RH1D(I,J) < spval) GRID1(I,J)=RH1D(I,J)*100. ENDDO ENDDO CALL BOUND (GRID1,H1,H100) @@ -2111,6 +2115,7 @@ SUBROUTINE MISCLN !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF (EGRID1(I,J) > EGRID2(I,J)) THEN EGRID2(I,J) = EGRID1(I,J) LB2(I,J) = LVLBND(I,J,LBND) @@ -2212,10 +2217,11 @@ SUBROUTINE MISCLN CALL CALLCL(PBND(1,jsta,1),TBND(1,jsta,1), & QBND(1,jsta,1),EGRID1,EGRID2) IF (IGET(109)>0) THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = EGRID2(I,J) + IF(TBND(I,J,1) < spval) GRID1(I,J) = EGRID2(I,J) ENDDO ENDDO if(grib=='grib2') then @@ -2231,10 +2237,11 @@ SUBROUTINE MISCLN endif ENDIF IF (IGET(110)>0) THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = EGRID1(I,J) + IF(TBND(I,J,1) < spval) GRID1(I,J) = EGRID1(I,J) ENDDO ENDDO if(grib=='grib2') then @@ -2368,10 +2375,11 @@ SUBROUTINE MISCLN ! ! SIGMA 0.89671 TEMPERATURE IF (IGET(097) > 0) THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = T89671(I,J) + IF(T(I,J,LM) < spval) GRID1(I,J) = T89671(I,J) ! IF(T89671(I,J)>350.)PRINT*,'LARGE T89671 ', & ! I,J,T89671(I,J) ENDDO @@ -2392,10 +2400,11 @@ SUBROUTINE MISCLN ! ! SIGMA 0.78483 TEMPERATURE IF (IGET(098)>0) THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = T78483(I,J) + IF(T(I,J,LM) < spval) GRID1(I,J) = T78483(I,J) ENDDO ENDDO if(grib=='grib2') then @@ -2785,10 +2794,11 @@ SUBROUTINE MISCLN ! SIGMA 0.85000-1.00000 MOISTURE CONVERGENCE. IF (IGET(103)>0) THEN ! CONVERT TO DIVERGENCE FOR GRIB + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = -1.0*QM8510(I,J) + IF(QM8510(I,J) < spval) GRID1(I,J) = -1.0*QM8510(I,J) ENDDO ENDDO if(grib=='grib2') then @@ -2817,10 +2827,11 @@ SUBROUTINE MISCLN ! ! SIGMA 0.44-1.00 MEAN RELATIVE HUMIIDITY. IF (IGET(318)>0) THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = RH4410(I,J)*100. + IF(RH4410(I,J) < spval) GRID1(I,J) = RH4410(I,J)*100. ENDDO ENDDO CALL BOUND(GRID1,D00,H100) @@ -2840,10 +2851,11 @@ SUBROUTINE MISCLN ! ! SIGMA 0.72-0.94 MEAN RELATIVE HUMIIDITY. IF (IGET(319)>0) THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = RH7294(I,J)*100. + IF(RH7294(I,J) < spval) GRID1(I,J) = RH7294(I,J)*100. ENDDO ENDDO CALL BOUND(GRID1,D00,H100) @@ -2863,10 +2875,11 @@ SUBROUTINE MISCLN ! ! SIGMA 0.44-0.72 MEAN RELATIVE HUMIIDITY. IF (IGET(320)>0) THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J)=RH4472(I,J)*100. + IF(RH4472(I,J) < spval) GRID1(I,J)=RH4472(I,J)*100. ENDDO ENDDO CALL BOUND(GRID1,D00,H100) @@ -2910,9 +2923,11 @@ SUBROUTINE MISCLN END DO ! Temperature IF (IGET(321)>0) THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(T(I,J,LM)0) THEN + GRID2=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(T(I,J,LM)0) THEN + GRID1=spval !$omp parallel do private(i,j,es1,qs1,rh1,es2,qs2,rh2) DO J=JSTA,JEND DO I=1,IM + IF(PMID(I,J,LM)0) THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(UH(I,J,LM)0) THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(VH(I,J,LM)0) THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(OMGA(I,J,LM)0).OR.(IGET(110)>0) ) THEN CALL CALLCL(P1D,T1D,Q1D,EGRID1,EGRID2) IF (IGET(109)>0) THEN + GRID1=spval DO J=JSTA,JEND DO I=1,IM - GRID1(I,J)=EGRID2(I,J) + IF(T1D(I,J) < spval) GRID1(I,J)=EGRID2(I,J) IF (SUBMODELNAME == 'RTMA') MLLCL(I,J) = GRID1(I,J) ENDDO ENDDO @@ -3294,10 +3322,11 @@ SUBROUTINE MISCLN ! EQUILLIBRIUM HEIGHT IF (IGET(443)>0) THEN + GRID1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = EGRID4(I,J) + IF(T1D(I,J) < spval) GRID1(I,J) = EGRID4(I,J) ENDDO ENDDO if(grib=='grib2') then @@ -3339,10 +3368,11 @@ SUBROUTINE MISCLN ! PRESSURE OF LEVEL FROM WHICH 300 MB MOST UNSTABLE CAPE ! PARCEL WAS LIFTED (eq. PRESSURE OF LEVEL OF HIGHEST THETA-E) IF (IGET(246)>0) THEN + GRID1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = EGRID3(I,J) + IF(T1D(I,J) < spval) GRID1(I,J) = EGRID3(I,J) ENDDO ENDDO CALL BOUND(GRID1,D00,H99999) @@ -3364,14 +3394,17 @@ SUBROUTINE MISCLN ! GENERAL THUNDER PARAMETER ??? 458 ??? IF (IGET(444)>0) THEN + GRID1 = spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(CPRATE(I,J) < spval) THEN IF (CPRATE(I,J) > PTHRESH) THEN GRID1(I,J) = EGRID5(I,J) ELSE GRID1(I,J) = 0 ENDIF + ENDIF ENDDO ENDDO CALL BOUND(GRID1,D00,H99999) @@ -3505,10 +3538,11 @@ SUBROUTINE MISCLN ! LFC HEIGHT IF (IGET(952)>0) THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = EGRID3(I,J) + IF(T1D(I,J) < spval) GRID1(I,J) = EGRID3(I,J) ENDDO ENDDO CALL BOUND(GRID1,D00,H99999) @@ -3641,8 +3675,10 @@ SUBROUTINE MISCLN !Height of effbot IF (IGET(979)>0) THEN + GRID1=spval DO J=JSTA,JEND DO I=1,IM + IF(ZINT(I,J,LLOW(I,J))0) THEN + GRID1=spval DO J=JSTA,JEND DO I=1,IM + IF(ZINT(I,J,LUPP(I,J))0) THEN + GRID1=spval DO J=JSTA,JEND DO I=1,IM + IF(LLOW(I,J)0) THEN + GRID1=spval DO J=JSTA,JEND DO I=1,IM + IF(LLOW(I,J)0) THEN + GRID1=spval DO J=JSTA,JEND DO I=1,IM + IF(UVECT(I,J)0) THEN + GRID1=spval DO J=JSTA,JEND DO I=1,IM + IF(LLOW(I,J)0) THEN + GRID1=spval DO J=JSTA,JEND DO I=1,IM + IF(LLOW(I,J)0) THEN + GRID1=spval DO J=JSTA,JEND DO I=1,IM + IF(LLOW(I,J)0) THEN GRID1(I,J)=STP ELSE GRID1(I,J)=D00 ENDIF + ENDIF ENDDO ENDDO if(grib=='grib2') then @@ -3923,11 +3981,14 @@ SUBROUTINE MISCLN ENDIF STP=(EGRID1(I,J)/D1500)*SLCLtmp*(HELI(I,J,2)/150.)*& FSHRtmp*SCINtmp + GRID1(I,J) = spval + IF(T1D(I,J) < spval) THEN IF (STP>0) THEN GRID1(I,J)=STP ELSE GRID1(I,J)=D00 ENDIF + ENDIF ENDDO ENDDO if(grib=='grib2') then @@ -3962,11 +4023,14 @@ SUBROUTINE MISCLN ENDIF STP=(MUCAPE(I,J)/D1000)*(ESRH(I,J)/50.)*& ESHRtmp*MUCINtmp + GRID1(I,J) = spval + IF(T1D(I,J) < spval) THEN IF (STP>0) THEN GRID1(I,J)=STP ELSE GRID1(I,J)=D00 ENDIF + ENDIF ENDDO ENDDO if(grib=='grib2') then @@ -4013,10 +4077,10 @@ SUBROUTINE MISCLN CALL CALCAPE2(ITYPE,DPBND,P1D,T1D,Q1D,LB2, & EGRID1,EGRID2,EGRID3,EGRID4,EGRID5, & EGRID6,EGRID7,EGRID8) - + GRID1=spval DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = EGRID3(I,J) + IF(T1D(I,J) < spval) GRID1(I,J) = EGRID3(I,J) ENDDO ENDDO CALL BOUND(GRID1,D00,H99999) @@ -4059,8 +4123,12 @@ SUBROUTINE MISCLN !Hail parameter IF (IGET(993)>0) THEN + GRID1=spval DO J=JSTA,JEND DO I=1,IM + IF(T700(I,J) < spval .and. T500(I,J) < spval .and.& + Z700(I,J) < spval .and. Z500(I,J) < spval .and.& + MUCAPE(I,J) < spval .and. MUQ1D(I,J) < spval .and. FSHR(I,J) < spval) THEN LAPSE=-((T700(I,J)-T500(I,J))/((Z700(I,J)-Z500(I,J)))) SHIP=(MUCAPE(I,J)*D1000*MUQ1D(I,J)*LAPSE*(T500(I,J)-K2C)*FSHR(I,J))/HCONST IF (MUCAPE(I,J)<1300.)THEN @@ -4073,6 +4141,7 @@ SUBROUTINE MISCLN SHIP=SHIP*(FREEZELVL(I,J)/2400.) ENDIF GRID1(I,J)=SHIP + ENDIF ENDDO ENDDO if(grib=='grib2') then @@ -4095,10 +4164,11 @@ SUBROUTINE MISCLN ! Critical Angle IF (IGET(957)>0) THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = CANGLE(I,J) + IF(T1D(I,J) < spval ) GRID1(I,J) = CANGLE(I,J) ! IF(EGRID1(I,J)<100. .OR. EGRID2(I,J)>-250.) THEN ! GRID1(I,J) = 0. ! ENDIF @@ -4121,10 +4191,11 @@ SUBROUTINE MISCLN ! Dendritic Layer Depth, -17C < T < -12C IF (IGET(955)>0) THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = EGRID7(I,J) + IF(T1D(I,J) < spval ) GRID1(I,J) = EGRID7(I,J) ENDDO ENDDO CALL BOUND(GRID1,D00,H99999) @@ -4145,10 +4216,11 @@ SUBROUTINE MISCLN ! Enhanced Stretching Potential IF (IGET(956)>0) THEN + GRID1=spval !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = EGRID8(I,J) + IF(T1D(I,J) < spval ) GRID1(I,J) = EGRID8(I,J) ENDDO ENDDO CALL BOUND(GRID1,D00,H99999) diff --git a/sorc/ncep_post.fd/SURFCE.f b/sorc/ncep_post.fd/SURFCE.f index 73d125375..3af081583 100644 --- a/sorc/ncep_post.fd/SURFCE.f +++ b/sorc/ncep_post.fd/SURFCE.f @@ -37,6 +37,7 @@ !! - 20-05-20 J MENG - CALRH unification with NAM scheme !! - 20-11-10 J MENG - USE UPP_PHYSICS MODULE !! - 21-03-11 B Cui - change local arrays to dimension (im,jsta:jend) +!! - 21-04-01 J MENG - COMPUTATION ON DEFINED POINTS ONLY !! !! USAGE: CALL SURFCE !! INPUT ARGUMENT LIST: @@ -1252,7 +1253,7 @@ SUBROUTINE SURFCE ! ! SHELTER LEVEL TEMPERATURE IF (IGET(106)>0) THEN -! GRID1=spval + GRID1=SPVAL DO J=JSTA,JEND DO I=1,IM ! GRID1(I,J)=TSHLTR(I,J) @@ -1395,14 +1396,18 @@ SUBROUTINE SURFCE ! IF ((IGET(547)>0).OR.(IGET(548)>0)) THEN + GRID1=SPVAL + GRID2=SPVAL DO J=JSTA,JEND DO I=1,IM + if(TSHLTR(I,J)/=spval.and.PSHLTR(I,J)/=spval.and.QSHLTR(I,J)/=spval) then ! DEWPOINT DEPRESSION in GRID1 GRID1(i,j)=max(0.,TSHLTR(I,J)*(PSHLTR(I,J)*1.E-5)**CAPA-EGRID1(i,j)) ! SURFACE EQIV POT TEMP in GRID2 APE=(H10E5/PSHLTR(I,J))**CAPA GRID2(I,J)=TSHLTR(I,J)*EXP(ELOCP*QSHLTR(I,J)*APE/TSHLTR(I,J)) + endif ENDDO ENDDO ! print *,' MAX/MIN --> DEWPOINT DEPRESSION',maxval(grid1(1:im,jsta:jend)),& @@ -1478,9 +1483,11 @@ SUBROUTINE SURFCE ENDIF IF(IGET(808)>0)THEN + GRID2=SPVAL !$omp parallel do private(i,j,dum1,dum2,dum3,dum216,dum1s,dum3s) DO J=JSTA,JEND DO I=1,IM + if(T1D(I,J)/=spval.and.U10H(I,J)/=spval.and.V10H(I,J)0) THEN + GRID1=SPVAL DO J=JSTA,JEND DO I=1,IM - GRID1(I,J)=MAXRHSHLTR(I,J)*100. + if(MAXRHSHLTR(I,J)/=spval) GRID1(I,J)=MAXRHSHLTR(I,J)*100. ENDDO ENDDO ID(1:25) = 0 @@ -1698,9 +1707,10 @@ SUBROUTINE SURFCE ! ! SHELTER LEVEL MIN RH. IF (IGET(348)>0) THEN + GRID1=SPVAL DO J=JSTA,JEND DO I=1,IM - GRID1(I,J)=MINRHSHLTR(I,J)*100. + if(MINRHSHLTR(I,J)/=spval) GRID1(I,J)=MINRHSHLTR(I,J)*100. ENDDO ENDDO ID(1:25) = 0 @@ -1827,8 +1837,10 @@ SUBROUTINE SURFCE ! E. James - 12 Sep 2018: SMOKE from WRF-CHEM on lowest model level ! IF (IGET(739)>0) THEN + GRID1=SPVAL DO J=JSTA,JEND DO I=1,IM + if(T(I,J,LM)/=spval.and.PMID(I,J,LM)/=spval.and.SMOKE(I,J,LM,1)/=spval)& GRID1(I,J) = (1./RD)*(PMID(I,J,LM)/T(I,J,LM))*SMOKE(I,J,LM,1) ENDDO ENDDO @@ -2265,10 +2277,11 @@ SUBROUTINE SURFCE IF (IGET(249)>0) THEN RDTPHS=1000./DTQ2 !--- 1000 kg/m**3, density of liquid water ! RDTPHS=1000./(TRDLW*3600.) + GRID1=SPVAL !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = CPRATE(I,J)*RDTPHS + if(CPRATE(I,J)/=spval) GRID1(I,J) = CPRATE(I,J)*RDTPHS ! GRID1(I,J) = CUPPT(I,J)*RDTPHS ENDDO ENDDO @@ -2290,14 +2303,17 @@ SUBROUTINE SURFCE !MEB need to get physics DT RDTPHS=1./(DTQ2) !MEB need to get physics DT + GRID1=SPVAL !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + if(PREC(I,J)/=spval) then IF(MODELNAME /= 'RSM') THEN GRID1(I,J) = PREC(I,J)*RDTPHS*1000. ELSE !Add by Binbin GRID1(I,J) = PREC(I,J) END IF + endif ENDDO ENDDO if(grib=='grib2') then @@ -2316,9 +2332,10 @@ SUBROUTINE SURFCE ! MAXIMUM INSTANTANEOUS PRECIPITATION RATE. IF (IGET(508)>0) THEN !-- PRATE_MAX in units of mm/h from NMMB history files + GRID1=SPVAL DO J=JSTA,JEND DO I=1,IM - GRID1(I,J)=PRATE_MAX(I,J)*SEC2HR + if(PRATE_MAX(I,J)/=spval) GRID1(I,J)=PRATE_MAX(I,J)*SEC2HR ENDDO ENDDO if(grib=='grib2') then @@ -2344,9 +2361,10 @@ SUBROUTINE SURFCE ! MAXIMUM INSTANTANEOUS *FROZEN* PRECIPITATION RATE. IF (IGET(509)>0) THEN !-- FPRATE_MAX in units of mm/h from NMMB history files + GRID1=SPVAL DO J=JSTA,JEND DO I=1,IM - GRID1(I,J)=FPRATE_MAX(I,J)*SEC2HR + if(FPRATE_MAX(I,J)/=spval) GRID1(I,J)=FPRATE_MAX(I,J)*SEC2HR ENDDO ENDDO if(grib=='grib2') then @@ -2526,7 +2544,11 @@ SUBROUTINE SURFCE !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(ACPREC(I,J) < SPVAL)THEN GRID1(I,J) = ACPREC(I,J)*1000. + ELSE + GRID1(I,J) = SPVAL + ENDIF ENDDO ENDDO END IF @@ -2672,7 +2694,11 @@ SUBROUTINE SURFCE !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM + IF(CUPREC(I,J) < SPVAL)THEN GRID1(I,J) = CUPREC(I,J)*1000. + ELSE + GRID1(I,J) = SPVAL + ENDIF ENDDO ENDDO END IF @@ -2902,13 +2928,14 @@ SUBROUTINE SURFCE ! ! ACCUMULATED LAND SURFACE PRECIPITATION. IF (IGET(256)>0) THEN + GRID1=SPVAL !$omp parallel do private(i,j) DO J=JSTA,JEND DO I=1,IM IF(LSPA(I,J)<=-1.0E-6)THEN - GRID1(I,J) = ACPREC(I,J)*1000 + if(ACPREC(I,J)/=spval) GRID1(I,J) = ACPREC(I,J)*1000 ELSE - GRID1(I,J) = LSPA(I,J)*1000. + if(LSPA(I,J)/=spval) GRID1(I,J) = LSPA(I,J)*1000. END IF ENDDO ENDDO @@ -4735,9 +4762,10 @@ SUBROUTINE SURFCE ELSE RRNUM=0. ENDIF + GRID1=SPVAL DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = SUBSHX(I,J)*RRNUM + if(SUBSHX(I,J)/=spval) GRID1(I,J) = SUBSHX(I,J)*RRNUM ENDDO ENDDO ID(1:25) = 0 @@ -4784,9 +4812,10 @@ SUBROUTINE SURFCE ELSE RRNUM=0. ENDIF + GRID1=SPVAL DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = SNOPCX(I,J)*RRNUM + if(SNOPCX(I,J)/=spval) GRID1(I,J) = SNOPCX(I,J)*RRNUM ENDDO ENDDO ID(1:25) = 0 @@ -4886,9 +4915,10 @@ SUBROUTINE SURFCE ELSE RRNUM=0. ENDIF + GRID1=SPVAL DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = SFCUX(I,J)*RRNUM + if(SFCUX(I,J)/=spval) GRID1(I,J) = SFCUX(I,J)*RRNUM ENDDO ENDDO ID(1:25) = 0 @@ -4935,9 +4965,10 @@ SUBROUTINE SURFCE ELSE RRNUM=0. ENDIF + GRID1=SPVAL DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = SFCVX(I,J)*RRNUM + if(SFCVX(I,J)/=spval) GRID1(I,J) = SFCVX(I,J)*RRNUM ENDDO ENDDO ID(1:25) = 0 @@ -4974,9 +5005,10 @@ SUBROUTINE SURFCE ! ! ACCUMULATED SURFACE EVAPORATION IF (IGET(047)>0) THEN + GRID1=SPVAL DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = SFCEVP(I,J)*1000. + if(SFCEVP(I,J)/=spval) GRID1(I,J) = SFCEVP(I,J)*1000. ENDDO ENDDO ID(1:25) = 0 @@ -5016,9 +5048,10 @@ SUBROUTINE SURFCE ! ! ACCUMULATED POTENTIAL EVAPORATION IF (IGET(137)>0) THEN + GRID1=SPVAL DO J=JSTA,JEND DO I=1,IM - GRID1(I,J) = POTEVP(I,J)*1000. + if(POTEVP(I,J)/=spval) GRID1(I,J) = POTEVP(I,J)*1000. ENDDO ENDDO ID(1:25) = 0 @@ -5351,9 +5384,10 @@ SUBROUTINE SURFCE ! ! GREEN VEG FRACTION IF (IGET(170)>0) THEN + GRID1=SPVAL DO J=JSTA,JEND DO I=1,IM - GRID1(I,J)=VEGFRC(I,J)*100. + if(VEGFRC(I,J)/=spval) GRID1(I,J)=VEGFRC(I,J)*100. ENDDO ENDDO if(grib=='grib2') then @@ -5366,9 +5400,10 @@ SUBROUTINE SURFCE ! ! MIN GREEN VEG FRACTION IF (IGET(726)>0) THEN + GRID1=SPVAL DO J=JSTA,JEND DO I=1,IM - GRID1(I,J)=shdmin(I,J)*100. + if(shdmin(I,J)/=spval) GRID1(I,J)=shdmin(I,J)*100. ENDDO ENDDO if(grib=='grib2') then @@ -5380,9 +5415,10 @@ SUBROUTINE SURFCE ! ! MAX GREEN VEG FRACTION IF (IGET(729)>0) THEN + GRID1=SPVAL DO J=JSTA,JEND DO I=1,IM - GRID1(I,J)=shdmax(I,J)*100. + if(shdmax(I,J)/=spval) GRID1(I,J)=shdmax(I,J)*100. ENDDO ENDDO if(grib=='grib2') then diff --git a/sorc/ncep_post.fd/UPP_PHYSICS.f b/sorc/ncep_post.fd/UPP_PHYSICS.f index fc0a9c22d..b9ca9995d 100644 --- a/sorc/ncep_post.fd/UPP_PHYSICS.f +++ b/sorc/ncep_post.fd/UPP_PHYSICS.f @@ -284,7 +284,7 @@ SUBROUTINE CALRH_GSD(P1,T1,Q1,RHB) !------------------------------------------------------------------ ! - use ctlblk_mod, only: jsta, jend, im + use ctlblk_mod, only: jsta, jend, im, spval implicit none @@ -295,7 +295,7 @@ SUBROUTINE CALRH_GSD(P1,T1,Q1,RHB) DO J=JSTA,JEND DO I=1,IM - + IF (T1(I,J) < SPVAL .AND. P1(I,J) < SPVAL .AND. Q1(I,J) < SPVAL) THEN ! - compute relative humidity Tx=T1(I,J)-273.15 POL = 0.99999683 + TX*(-0.90826951E-02 + & @@ -308,7 +308,9 @@ SUBROUTINE CALRH_GSD(P1,T1,Q1,RHB) ES = esx E = P1(I,J)/100.*Q1(I,J)/(0.62197+Q1(I,J)*0.37803) RHB(I,J) = MIN(1.,E/ES) - + ELSE + RHB(I,J) = SPVAL + ENDIF ENDDO ENDDO @@ -324,7 +326,7 @@ SUBROUTINE CALRH_PW(RHPW) use vrbls3d, only: q, pmid, t use params_mod, only: g - use ctlblk_mod, only: lm, jsta, jend, lm, im + use ctlblk_mod, only: lm, jsta, jend, lm, im, spval !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none @@ -342,6 +344,7 @@ SUBROUTINE CALRH_PW(RHPW) k=lm-l+1 DO J=JSTA,JEND DO I=1,IM + if(t(i,j,k)