SUBROUTINE CNVTGRD(WRKIN,NX,NY,FD3,NX2,NY2,ISWITCH) C C APRIL 2015 CHARBA MDL MOS-2000 C JUNE 2015 CHARBA IMPROVED DOC AND CORRECTED COORDS OF C 2X2 WINDOW PTS (5KM GRID) FOR CORRECTED C 10KM GRID. C JUNE 2015 CHARBA IN THIS VERSION OF ROUTINE OUTPUT VAR- C IABLE IS SET TO MISSING WHEN ALL 2X2 C WINDOW PTS ARE OUTSIDE 5KM GRID OR ALL C VALUES IN 2X2 WINDOW ARE MISSING. C OCTOBER 2015 CHARBA MODIFIED TO ACCT FOR SWITCH FROM C 599X447 TO 601X449 GRID. ALSO IMPROVED C DOC. C NOVEMBER 2015 CHARBA MODIFIED MAX VALUE OPTION SUCH THAT THE C ABSOLUTE MAX INSTEAD OF THE (POSITIVE) C MAX IS RETURNED. C C PURPOSE C COMPUTE AND RETURN EITHER THE MAX VALUE OR SUM OF GRID- C POINT VALUES IN A 2X2 SUBGRID. WHEN 5KM INPUT GRIDBOX IS C POSITIONED WRT TO LOWER-LEFT CORNER, 10KM OUTPUT GRIDBOX IS C CENTERED. C C VARIABLES C NX = NUMBER OF POINTS IN X-DIRECTION OF INPUT 5KM C GRID. (INPUT) C NY = NUMBER OF POINTS IN Y-DIRECTION OF INPUT 5KM C GRID. (INPUT) C WRKIN(I,J) = INPUT 5-KM GRID (I=1,NX,J=1,NY). (INPUT) C NX2 = NUMBER OF POINTS IN X-DIRECTION OF OUTPUT 10KM C GRID. (INPUT) C NY2 = NUMBER OF POINTS IN Y-DIRECTION OF OUTPUT 10KM C GRID. (INPUT) C FD3(I,J) = OUTPUT 10-KM GRID (I=1,NX2,J=1,NY2). (OUTPUT) C ISWITCH = 0 FOR MAX VALUE; = 1 FOR SUM OVER 2X2 SUBGRID. C (INPUT) C********************************************************************** DIMENSION WRKIN(NX,NY),FD3(NX2,NY2) C DO JY=1,NY2 ! LOOPING OVER 10KM GRID DO IX=1,NX2 C C INITIALIZE FD3( , ) TO -9999. WHEN ISWITCH=0 (FOR MAX CREF) C OR TO 0.0 WHEN ISWITCH=1 (FOR TL SUMMATION). C IF(ISWITCH.EQ.0) THEN c FD3(IX,JY)=-9999. ! for pos max FD3(IX,JY)=0.0 ! for abs max ELSE FD3(IX,JY)=0.0 ENDIF C ICNTIN=0 ! ICNTIN IS COUNT OF "INSIDE-GRID" PTS IN WINDOW ICNTMIS=0 ! ICNTMIS IS COUNT OF MISSING VALUES IN WINDOW DO JYSG=-1,0 ! LOOPING OVER 2X2 SUBGRID JJ=(JY-1)*2+1+JYSG ! APPLIES TO 601X449 10KM GRID c JJ=JY*2+1+JYSG ! APPLIES TO 599X447 10KM GRID C BYPASS 5KM GRIDPOINT IF IT FALLS OUTSIDE GRID. IF(JJ.LT.1.OR.JJ.GT.NY) CYCLE DO IXSG=-1,0 II=(IX-1)*2+1+IXSG ! APPLIES TO 601X449 10KM GRID c II=IX*2+1+IXSG ! APPLIES TO 599X447 10KM GRID C BYPASS 5KM GRIDPOINT IF IT FALLS OUTSIDE GRID. IF(II.LT.1.OR.II.GT.NX) CYCLE C C INCREMENT ICNTIN SINCE (II,JJ) INSIDE 5KM GRID ICNTIN=ICNTIN+1 C C IF WRKIN(II,JJ) GT 9999.5, VALUE MUST BE AN EXTREME C TL COUNT ...REPLACE THIS VALUE WITH 9998. TO AVOID C MIS-INTERPRETATION BELOW. IF(WRKIN(II,JJ).GT.9999.5) WRKIN(II,JJ)=9998. C C IF WRKIN(II,JJ) MISSING SUM NUMBER OF MISSING VALUES C IN SUBGRID AND CYCLE. IF(WRKIN(II,JJ).GT.9998.5) THEN ICNTMIS=ICNTMIS+1 CYCLE ENDIF C IF(ISWITCH.EQ.0) THEN ! OBTAIN MAX CREF C IF WRKIN( , ) GT FD3( , ) REPL LATTER WITH FORMER c IF(WRKIN(II,JJ).GT.FD3(IX,JY)) FD3(IX,JY)=WRKIN(II,JJ) IF(ABS(WRKIN(II,JJ)).GT.ABS(FD3(IX,JY))) 1 FD3(IX,JY)=WRKIN(II,JJ) ! absolute max ELSE ! OBTAIN TL SUM C ADD WRKIN( , ) TO FD3( , ) FD3(IX,JY)=FD3(IX,JY)+WRKIN(II,JJ) ENDIF C ENDDO ENDDO ! END OF LOOP FOR 2X2 SUBGRID C C SET FD3( , ) TO MISSING IF ICNTIN=0 OR ICNTMIS EQ 4 IF(ICNTIN.EQ.0.OR.ICNTMIS.EQ.4) FD3(IX,JY)=9999. C ENDDO ENDDO ! END OF LOOP FOR 10-KM GRID C RETURN END