diff --git a/sorc/ncep_post.fd/SURFCE.f b/sorc/ncep_post.fd/SURFCE.f index 94b1d6463..eae3dd529 100644 --- a/sorc/ncep_post.fd/SURFCE.f +++ b/sorc/ncep_post.fd/SURFCE.f @@ -1224,7 +1224,7 @@ SUBROUTINE SURFCE IF ( IGET(996)>0 )THEN if(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(994)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(996)) !$omp parallel do private(i,j,jj) do j=1,jend-jsta+1 jj = jsta+j-1 @@ -1238,7 +1238,7 @@ SUBROUTINE SURFCE IF ( IGET(997)>0 )THEN if(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(995)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(997)) !$omp parallel do private(i,j,jj) do j=1,jend-jsta+1 jj = jsta+j-1 @@ -1252,7 +1252,7 @@ SUBROUTINE SURFCE IF ( IGET(998)>0 )THEN if(grib=='grib2') then cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(996)) + fld_info(cfld)%ifld=IAVBLFLD(IGET(998)) !$omp parallel do private(i,j,jj) do j=1,jend-jsta+1 jj = jsta+j-1 @@ -1264,61 +1264,186 @@ SUBROUTINE SURFCE ENDIF IF ( IGET(999)>0 )THEN - if(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(997)) +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J) = TECAN(I,J) + ENDDO + ENDDO + ID(1:25) = 0 + ITPREC = NINT(TPREC) +!mp + if (ITPREC /= 0) then + IFINCR = MOD(IFHR,ITPREC) + IF(IFMIN >= 1)IFINCR= MOD(IFHR*60+IFMIN,ITPREC*60) + else + IFINCR = 0 + endif +!mp + ID(18) = 0 + ID(19) = IFHR + IF(IFMIN >= 1)ID(19)=IFHR*60+IFMIN + ID(20) = 4 + IF (IFINCR==0) THEN + ID(18) = IFHR-ITPREC + ELSE + ID(18) = IFHR-IFINCR + IF(IFMIN >= 1)ID(18)=IFHR*60+IFMIN-IFINCR + ENDIF + IF (ID(18)<0) ID(18) = 0 + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(999)) + fld_info(cfld)%ntrange=1 + fld_info(cfld)%tinvstat=IFHR-ID(18) !$omp parallel do private(i,j,jj) do j=1,jend-jsta+1 jj = jsta+j-1 do i=1,im - datapd(i,j,cfld) = TECAN(i,jj) + datapd(i,j,cfld) = GRID1(i,jj) enddo enddo endif ENDIF IF ( IGET(1000)>0 )THEN - if(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(998)) +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J) = TETRAN(I,J) + ENDDO + ENDDO + ID(1:25) = 0 + ITPREC = NINT(TPREC) +!mp + if (ITPREC /= 0) then + IFINCR = MOD(IFHR,ITPREC) + IF(IFMIN >= 1)IFINCR= MOD(IFHR*60+IFMIN,ITPREC*60) + else + IFINCR = 0 + endif +!mp + ID(18) = 0 + ID(19) = IFHR + IF(IFMIN >= 1)ID(19)=IFHR*60+IFMIN + ID(20) = 4 + IF (IFINCR==0) THEN + ID(18) = IFHR-ITPREC + ELSE + ID(18) = IFHR-IFINCR + IF(IFMIN >= 1)ID(18)=IFHR*60+IFMIN-IFINCR + ENDIF + IF (ID(18)<0) ID(18) = 0 + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(1000)) + fld_info(cfld)%ntrange=1 + fld_info(cfld)%tinvstat=IFHR-ID(18) !$omp parallel do private(i,j,jj) - do j=1,jend-jsta+1 - jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = TETRAN(i,jj) - enddo - enddo - endif - ENDIF - + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,im + datapd(i,j,cfld) = GRID1(i,jj) + enddo + enddo + endif + ENDIF +! IF ( IGET(1001)>0 )THEN - if(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(999)) +!$omp parallel do private(i,j) + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J) = TEDIR(I,J) + ENDDO + ENDDO + ID(1:25) = 0 + ITPREC = NINT(TPREC) +!mp + if (ITPREC /= 0) then + IFINCR = MOD(IFHR,ITPREC) + IF(IFMIN >= 1)IFINCR= MOD(IFHR*60+IFMIN,ITPREC*60) + else + IFINCR = 0 + endif +!mp + ID(18) = 0 + ID(19) = IFHR + IF(IFMIN >= 1)ID(19)=IFHR*60+IFMIN + ID(20) = 4 + IF (IFINCR==0) THEN + ID(18) = IFHR-ITPREC + ELSE + ID(18) = IFHR-IFINCR + IF(IFMIN >= 1)ID(18)=IFHR*60+IFMIN-IFINCR + ENDIF + IF (ID(18)<0) ID(18) = 0 + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(1001)) + fld_info(cfld)%ntrange=1 + fld_info(cfld)%tinvstat=IFHR-ID(18) !$omp parallel do private(i,j,jj) - do j=1,jend-jsta+1 - jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = TEDIR(i,jj) - enddo - enddo - endif - ENDIF + do j=1,jend-jsta+1 + jj = jsta+j-1 + do i=1,im + datapd(i,j,cfld) = GRID1(i,jj) + enddo + enddo + endif + ENDIF +! - IF ( IGET(1002)>0 )THEN - if(grib=='grib2') then - cfld=cfld+1 - fld_info(cfld)%ifld=IAVBLFLD(IGET(1000)) -!$omp parallel do private(i,j,jj) - do j=1,jend-jsta+1 - jj = jsta+j-1 - do i=1,im - datapd(i,j,cfld) = PAHA(i,jj) - enddo - enddo + IF (IGET(1002)>0) THEN + IF(MODELNAME == 'NCAR'.OR.MODELNAME=='RSM' .OR. & + MODELNAME=='RAPR')THEN + GRID1=SPVAL + ID(1:25)=0 + ELSE + IF(ASRFC>0.)THEN + RRNUM=1./ASRFC + ELSE + RRNUM=0. + ENDIF + DO J=JSTA,JEND + DO I=1,IM + IF(PAHA(I,J)/=SPVAL)THEN + GRID1(I,J)=-1.*PAHA(I,J)*RRNUM !change the sign to conform with Grib + ELSE + GRID1(I,J)=PAHA(I,J) + END IF + ENDDO + ENDDO + ID(1:25) = 0 + ITSRFC = NINT(TSRFC) + IF(ITSRFC /= 0) then + IFINCR = MOD(IFHR,ITSRFC) + IF(IFMIN >= 1)IFINCR= MOD(IFHR*60+IFMIN,ITSRFC*60) + ELSE + IFINCR = 0 endif - ENDIF - + ID(19) = IFHR + IF(IFMIN >= 1)ID(19)=IFHR*60+IFMIN + ID(20) = 3 + IF (IFINCR==0) THEN + ID(18) = IFHR-ITSRFC + ELSE + ID(18) = IFHR-IFINCR + IF(IFMIN >= 1)ID(18)=IFHR*60+IFMIN-IFINCR + ENDIF + IF (ID(18)<0) ID(18) = 0 + if(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(1002)) + if(ITSRFC>0) then + fld_info(cfld)%ntrange=1 + else + fld_info(cfld)%ntrange=0 + endif + fld_info(cfld)%tinvstat=IFHR-ID(18) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + endif + END IF + ENDIF ! ! !