SUBROUTINE PIX(KFILDO,DATA,TELEV,HOLD,NX,NY,MTIMES,DIFFV, 1 DIFFA,LVRBL,IER) C C MAY 2015 GLAHN MDL MOS-2000 c MAY 2015 GLAHN ADDED GRID INDEX1( , ) AND C INDEX2( , ) C JUNE 2015 GLAHN CHANGED 120.0 TO 120.5 IN C TABLE( , ) C JUNE 2015 GLAHN ADDED CODE TO REMOVE SMALL SPOTS C BETWEEN TWO DIFFERENT VALUES C JUNE 2015 GLAHN THE 120.5 IN ITABLE(ICAT,1) SHOULD C BE 119.5. THE 120.5 WAS THE WAY C THE SUMMER MELD WAS DEVELOPED; C BECAUSE THE HRRR HAS CONTINUOUS C VALUES, IT WON'T MATTER MUCH AS C LONG AS THE STEPS ARE CONSISTENT. C FOR A NEW DEVELOPMENT, A FEW OTHER C SMALL CHANGES TO SABLE( ,1) COULD C BE MADE. C JUNE 2015 GLAHN ALTERNATED DIRECTION OVER ROWS AND C COLUMNS C JUNE 2015 GLAHN ADDITIONAL ACHECKING ON ELEVATION C DIFFERENCE C NOVEMBER 2018 HUANG CHANGED MAXIMUM VISIBILITY FROM C 10.01 to 10.08 FOR IMAGE PRODUCTION C PURPOSES. C C PURPOSE C TO REMOVE ISOLATED PIXELS (SPOTS LE 4 IN SIZE) FROM A C HRRR GRID. THIS REMOVAL IS NOT EXACT NOR COMPLETE, BUT c DOES AN ACCEPTABLE JOB. THIS WORKS FOR U201 WHERE C INTERPOLATED VALUES ARE NEEDED AND FOR 202 WHERE THE GRID C IS NEEDED. C C DATA SET USE C KFILDO - DEFAULT UNIT NUMBER FOR OUTPUT (PRINT) FILE. C (OUTPUT) C C VARIABLES C KFILDO = DEFAULT UNIT NUMBER FOR OUTPUT (PRINT) FILE. C (INPUT) C DATA(IX,JY) = ARRAY TO OPERATE ON AND RETURN (IX=1,NX) C (JY=1,NY). (INPUT/OUTPUT) C TELEV(IX,JY) = GRIDPOINT ELEVATIONS ARRAY (IX=1,NY) (JY=1,NY). C (INTERNAL) C HOLD(IX,JY) = WORK ARRAY (IX=1,NX) (JY=1,NY). (INTERNAL) C NX,NY = DIMENSIONS IN X AND Y DIRECTIONS OF DATA( , ), C TELEV( , ), AND HOLD( , ). (INPUT) C MTIMES = NUMBER OF PASSES OVER THE DATA TO MAKE. C (INPUT) C DIFFV = REMOVAL IS DONE WHEN TWO END POINTS DIFFER BY C LT DIFFV. (INPUT) C DIFFA = THE ELEVATION DIFFERENCE IF EXCEEDED, REMOVAL C IS NOT DONE. (INPUT) C LVRBL = 1 FOR CEILING, C = 2 FOR VISIBILITY C (INPUT) C IER = STATUS RETURN. C 0 = GOOD RETURN. C (OUTPUT) C NCAT = THE NUMBER OF CATEGORIES OF THE VARIABLE BEING C PROCESSED. (INTERNAL) C INDEX1(IX,JY) = A GRID OF CATEGORIES (IX=1,NX) (JY=1,NY). C (INTERNAL) C INDEX2(IX,JY) = A GRID OF CATEGORIES (IX=1,NX) (JY=1,NY). C SAVES THE VALUES OF INDEX1( , ) WHILE CHANGES C ARE BEING MADE. (INTERNAL) C 1 2 3 4 5 6 7 X C C NONSYSTEM SUBROUTINES USED C NONE c PARAMETER (ICAT=24) C DIMENSION DATA(NX,NY),TELEV(NX,NY),HOLD(NX,NY) DIMENSION INDEX1(NX,NY),INDEX2(NX,NY) C INDEX1( , ) AND INDEX2( , ) ARE AUTOMATIC ARRAYS. DIMENSION TABLE(ICAT+1,2),SABLE(ICAT+1,2),NCAT(2) C DATA TABLE/.0095, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 1 8.5, 9.5, 11.5, 14.4, 16.5, 19.5, 24.5, 30.3, 2 40.5, 49.5, 65.5, 80.5, 90.5, 100.5, 110.5, 120.5, 3 .0, C 1 .005, .245, .495, .745, .995, 1.495, 1.995, 2.495, 2 2.995, 3.005, 4.005, 5.005, 6.005, 7.005, 8.005, 9.995, 3 0, 0, 0, 0, 0, 0, 0, 0, 4 0/ C DATA SABLE/ 0., 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 1 8.0, 9.0, 11.0, 13., 15.5, 18.0, 22.0, 27.5, 2 35.5, 45.5, 58.0, 73., 85.5, 95.5, 100.5, 110.0, 3 121.0, C 1 0.0, .125, .40, .70, .95, 1.20, 1.60, 2.2, 2 2.6, 2.8, 3.6, 4.6, 5.6, 6.6, 7.6, 9.0, 3 10.08, 0., 0., 0., 0., 0., 0., 0., 4 0/ C CCCC DATA SABLE/24*0, 0, CCCC 1 0., .125, .25, .5, .75, 1.12, 1.62, 2., CCCC 2 2.5, 3.0, 4.0, 5., 6., 7., 8., 9., CCCC 3 0, 0., 0., 0., 0., 0., 0., 0./ DATA NCAT/24,16/ C 24 CATEGORIES FOR CEILING AND 16 FOR VISIBILITY. DATA KCOUNT/0/ C KCOUNT ALLOWS ONE MATRIX OF VALUES TO BE PRINTED C FOR EACH ITERATION THE FIRST TIME PIX IS ENTERED. SAVE KCOUNT,ICOUNT,JCOUNT C IER=0 C D WRITE(KFILDO,101)NX,NY,MTIMES,DIFFV,DIFFA,LVRBL D101 FORMAT(/' IN PIX AT 101--NX,NY,MTIMES,DIFFV,DIFFA,LVRBL', D 1 3I6,2F10.2,I3) C C PUT VALUES IN DATA IN DISCRETE CATEGORIES. THESE CATEGORIES C ARE EXACTLY THOSE USED IN THE MELD, COORDINATED WITH THE C U602 DEVELOPMENT. VALUES IN TABLE( , ) ARE THOSE IN U602 C PREDICTOR LIST; VALUES IN SABLE( , ) ARE THOSE IN MELD, C MODIFIED TO GET A COLOR TABLE MATCH FOR CHECKOUT. C DO 108 JY=1,NY DO 107 IX=1,NX C DO 105 L=1,NCAT(LVRBL) C CCCC WRITE(KFILDO,104)L,IX,JY,DATA(IX,JY),TABLE(L,LVRBL), CCCC 1 SABLE(L,LVRBL) CCCC 104 FORMAT(' PIX--L,IX,JY,DATA(IX,JY),TABLE(L,LVRBL),', CCCC 1 'SABLE(L,LVRBL)',3I6,3F10.3) C IF(DATA(IX,JY).LT.TABLE(L,LVRBL))THEN DATA(IX,JY)=SABLE(L,LVRBL) INDEX1(IX,JY)=L C CCCCC WRITE(KFILDO,104)L,IX,JY,DATA(IX,JY),TABLE(L,LVRBL), CCCCC 1 SABLE(L,LVRBL) C GO TO 107 ENDIF C 105 CONTINUE C IF(DATA(IX,JY).LT.9998.)THEN DATA(IX,JY)=SABLE(NCAT(LVRBL)+1,LVRBL) INDEX1(IX,JY)=NCAT(LVRBL)+1 C THIS IS FOR WHEN NO THRESHOLD IS TRIPPED. ELSE INDEX1(IX,JY)=9999 ENDIF C CCCCC WRITE(KFILDO,106)IX,JY,DATA(IX,JY) CCCCC 106 FORMAT(' PIX--IX,JY,DATA(IX,JY)',2I6,F10.3) C 107 CONTINUE 108 CONTINUE C C DO THE REMOVAL. C 109 DO 280 L=1,MTIMES C D WRITE(KFILDO,110)L,MTIMES,DIFFV,DIFFA D110 FORMAT(/' PASS',I4,' OF',I4,' IN PIX, DIFFV =',F10.2, D 1 ' DIFFA =',F10.2)) C DO 120 JY=1,NY DO 119 IX=1,NX HOLD(IX,JY)=DATA(IX,JY) INDEX2(IX,JY)=INDEX1(IX,JY) 119 CONTINUE 120 CONTINUE C C ELIMINATE SPOTS NO LARGER THAN 3 PIXELS ACROSS. MUCH C CHATTER IS INTRODUCED BY HRRR WHICH IS NOT FORECASTABLE. C THIS REMOVAL IS NOT EXACT NOR COMPLETE, BUT DOES AN C ACCEPTABLE JOB. C C INITIALIZE ICOUNT AND JCOUNT ONLY ON THE FIRST ENTRY C TO PIX. C IF(KCOUNT.EQ.0)THEN ICOUNT=0 JCOUNT=0 ENDIF C C ARRANGE TO REVERSE MARCHING THROUGH ROWS AND COLUMNS C EVERY 2ND TIME L. MTIMES SHOULD BE BE EVENLY DIVISIBLE C BY 4 FOR COMPLETE SYMMETRY. C IF(MOD((L+1)/2,2).EQ.0)THEN J1=3 J2=NY-2 J3=1 I1=3 I2=NX-2 I3=1 ELSE J1=NY-2 J2=3 J3=-1 I1=NX-2 I2=3 I3=-1 ENDIF DO 200 JY=J1,J2,J3 DO 199 IX=I1,I2,I3 C CCC DO 200 JY=3,NY-2 CCC DO 199 IX=3,NX-2 C IF(DATA(IX,JY).LT.9998.)THEN C THIS IS A NON MISSING POINT. C IF(MOD(L,2).NE.0)THEN C ON ODD ITERATIONS, WORK ON EAST-WEST ELIMINATION. C IF(ICOUNT.EQ.0)THEN WRITE(KFILDO,139)L 139 FORMAT(/' START OF ITERATION ',I3,' IN PIX.') C DO 145 JYY=530,540 WRITE(KFILDO,140)(DATA(IXX,JYY),IXX=1560,1570), 1 (INDEX1(IXX,JYY),IXX=1560,1570) 140 FORMAT(/(11F10.2/11I10)) 145 CONTINUE C ENDIF C ICOUNT=1 C IF(INDEX1(IX-2,JY).EQ.INDEX1(IX+2,JY))THEN C THIS WILL SMOOTH ONLY WHEN THE END POINTS ARE C OF THE SAME CATEGORY. C IF(ABS(TELEV(IX-2,JY)-TELEV(IX+2,JY)).LT.DIFFA)THEN C THE ELEVATION DISTANCE BETWEEN THE END POINTS C IS LT DIFFA METERS. C IF((ABS(TELEV(IX-2,JY)-TELEV(IX,JY)) .LT.DIFFA).AND. 1 (ABS(TELEV(IX-2,JY)-TELEV(IX-1,JY)).LT.DIFFA).AND. 2 (ABS(TELEV(IX+2,JY)-TELEV(IX,JY)) .LT.DIFFA).AND. 3 (ABS(TELEV(IX+2,JY)-TELEV(IX+1,JY)).LT.DIFFA))THEN C EACH END POINT DIFFERS FROM THE TWO CLOSEST C POINTS TO IT BY LT DIFFA M IN ELEVATION. C IF(INDEX1(IX-2,JY).NE.9999.AND. 1 INDEX1(IX+2,JY).NE.9999)THEN C BOTH END POINTS HAVE THE SAME VALUE AND C ARE NOT MISSING. HOLD(IX,JY)=DATA(IX-2,JY) HOLD(IX-1,JY)=DATA(IX-2,JY) HOLD(IX+1,JY)=DATA(IX-2,JY) INDEX2(IX,JY)=INDEX1(IX-2,JY) INDEX2(IX-1,JY)=INDEX1(IX-2,JY) INDEX2(IX+1,JY)=INDEX1(IX+2,JY) C ENDIF C ENDIF C ENDIF C ELSEIF(INDEX1(IX-2,JY).GT.INDEX1(IX+2,JY))THEN C THIS SECTION KEEPS THE MIDDLE POINTS WITHIN BOUNDS C OF THE END POINTS. C IF(ABS(TELEV(IX-2,JY)-TELEV(IX+2,JY)).LT.DIFFA)THEN C THE ELEVATION DISTANCE BETWEEN THE END POINTS C IS LT DIFFA M. C IF((ABS(TELEV(IX-2,JY)-TELEV(IX,JY)) .LT.DIFFA).AND. 1 (ABS(TELEV(IX-2,JY)-TELEV(IX-1,JY)).LT.DIFFA).AND. 2 (ABS(TELEV(IX+2,JY)-TELEV(IX,JY)) .LT.DIFFA).AND. 3 (ABS(TELEV(IX+2,JY)-TELEV(IX+1,JY)).LT.DIFFA))THEN C EACH END POINT DIFFERS FROM THE TWO CLOSEST C POINTS TO IT BY LT DIFFA M IN ELEVATION. C IF(INDEX1(IX-2,JY).NE.9999.AND. 1 INDEX1(IX+2,JY).NE.9999)THEN C IF(INDEX1(IX-1,JY).GT.INDEX1(IX-2,JY))THEN INDEX2(IX-1,JY)=INDEX1(IX-2,JY) HOLD(IX-1,JY)=DATA(IX-2,JY) ELSEIF(INDEX1(IX-1,JY).LT.INDEX1(IX+2,JY))THEN INDEX2(IX-1,JY)=INDEX1(IX+2,JY) HOLD(IX-1,JY)=DATA(IX+2,JY) ENDIF C IF(INDEX1(IX,JY).LT.INDEX1(IX+2,JY))THEN INDEX2(IX,JY)=INDEX1(IX+2,JY) HOLD(IX,JY)=DATA(IX+2,JY) ELSEIF(INDEX1(IX,JY).GT.INDEX1(IX-2,JY))THEN INDEX2(IX,JY)=INDEX1(IX-2,JY) HOLD(IX,JY)=DATA(IX-2,JY) ENDIF C IF(INDEX1(IX+1,JY).GT.INDEX1(IX-2,JY))THEN INDEX2(IX+1,JY)=INDEX1(IX-2,JY) HOLD(IX+1,JY)=DATA(IX-2,JY) ELSEIF(INDEX1(IX+1,JY).LT.INDEX1(IX+2,JY))THEN INDEX2(IX+1,JY)=INDEX1(IX+2,JY) HOLD(IX+1,JY)=DATA(IX+2,JY) ENDIF C ENDIF C ENDIF C ENDIF C ELSEIF(INDEX1(IX-2,JY).LT.INDEX1(IX+2,JY))THEN C THIS SECTION KEEPS THE MIDDLE POINTS WITHIN BOUNDS C OF THE END POINTS. C IF(ABS(TELEV(IX-2,JY)-TELEV(IX+2,JY)).LT.DIFFA)THEN C THE ELEVATION DISTANCE BETWEEN THE END POINTS C IS LT DIFFA M. C IF((ABS(TELEV(IX-2,JY)-TELEV(IX,JY)) .LT.DIFFA).AND. 1 (ABS(TELEV(IX-2,JY)-TELEV(IX-1,JY)).LT.DIFFA).AND. 2 (ABS(TELEV(IX+2,JY)-TELEV(IX,JY)) .LT.DIFFA).AND. 3 (ABS(TELEV(IX+2,JY)-TELEV(IX+1,JY)).LT.DIFFA))THEN C EACH END POINT DIFFERS FROM THE TWO CLOSEST C POINTS TO IT BY LT DIFFA M IN ELEVATION. C IF(INDEX1(IX-2,JY).NE.9999.AND. 1 INDEX1(IX+2,JY).NE.9999)THEN C IF(INDEX1(IX-1,JY).LT.INDEX1(IX-2,JY))THEN INDEX2(IX-1,JY)=INDEX1(IX-2,JY) HOLD(IX-1,JY)=DATA(IX-2,JY) ELSEIF(INDEX1(IX-1,JY).GT.INDEX1(IX+2,JY))THEN INDEX2(IX-1,JY)=INDEX1(IX+2,JY) HOLD(IX-1,JY)=DATA(IX+2,JY) ENDIF C IF(INDEX1(IX,JY).LT.INDEX1(IX-2,JY))THEN INDEX2(IX,JY)=INDEX1(IX-2,JY) HOLD(IX,JY)=DATA(IX-2,JY) ELSEIF(INDEX1(IX,JY).GT.INDEX1(IX+2,JY))THEN INDEX2(IX,JY)=INDEX1(IX+2,JY) HOLD(IX,JY)=DATA(IX+2,JY) ENDIF C IF(INDEX1(IX+1,JY).GT.INDEX1(IX+2,JY))THEN INDEX2(IX+1,JY)=INDEX1(IX+2,JY) HOLD(IX+1,JY)=DATA(IX+2,JY) ELSEIF(INDEX1(IX+1,JY).LT.INDEX1(IX-2,JY))THEN INDEX2(IX+1,JY)=INDEX1(IX-2,JY) HOLD(IX+1,JY)=DATA(IX-2,JY) ENDIF C ENDIF C ENDIF C ENDIF C ENDIF C ELSE C ON EVEN ITERATIONS, WORK ON NORTH=SOUTH ELIMINATION. C IF(JCOUNT.EQ.0)THEN WRITE(KFILDO,139)L C DO 155 JYY=530,540 WRITE(KFILDO,140)(DATA(IXX,JYY),IXX=1560,1570), 1 (INDEX1(IXX,JYY),IXX=1560,1570) 155 CONTINUE C ENDIF C JCOUNT=1 C IF(INDEX1(IX,JY-2).EQ.INDEX1(IX,JY+2))THEN C THIS WILL SMOOTH ONLY WHEN THE END POINTS ARE C OF THE SAME CATEGORY. C IF(ABS(TELEV(IX,JY-2)-TELEV(IX,JY+2)).LT.DIFFA)THEN C THE ELEVATION DISTANCE BETWEEN THE END POINTS C IS LT DIFFA METERS. C IF((ABS(TELEV(IX,JY-2)-TELEV(IX,JY)) .LT.DIFFA).AND. 1 (ABS(TELEV(IX,JY-2)-TELEV(IX,JY-1)).LT.DIFFA).AND. 2 (ABS(TELEV(IX,JY+2)-TELEV(IX,JY)) .LT.DIFFA).AND. 3 (ABS(TELEV(IX,JY+2)-TELEV(IX,JY+1)).LT.DIFFA))THEN C EACH END POINT DIFFERS FROM THE TWO CLOSEST C POINTS TO IT BY LT DIFFA M IN ELEVATION. C IF(INDEX1(IX,JY-2).NE.9999.AND. 1 INDEX1(IX,JY+2).NE.9999)THEN C BOTH END POINTS HAVE THE SAME VALUE AND C ARE NOT MISSING. HOLD(IX,JY)=DATA(IX,JY-2) HOLD(IX,JY-1)=DATA(IX,JY-2) HOLD(IX,JY+1)=DATA(IX,JY-2) INDEX2(IX,JY)=INDEX1(IX,JY-2) INDEX2(IX,JY-1)=INDEX1(IX,JY-2) INDEX2(IX,JY+1)=INDEX1(IX,JY-2) C ENDIF C ENDIF C ENDIF C ELSEIF(INDEX1(IX,JY-2).GT.INDEX1(IX,JY+2))THEN C THIS SECTION KEEPS THE MIDDLE POINTS WITHIN BOUNDS C OF THE END POINTS. C IF(ABS(TELEV(IX,JY-2)-TELEV(IX,JY+2)).LT.DIFFA)THEN C THE ELEVATION DISTANCE BETWEEN THE END POINTS C IS LT DIFFA M. C IF((ABS(TELEV(IX,JY-2)-TELEV(IX,JY)) .LT.DIFFA).AND. 1 (ABS(TELEV(IX,JY-2)-TELEV(IX,JY-1)).LT.DIFFA).AND. 2 (ABS(TELEV(IX,JY+2)-TELEV(IX,JY)) .LT.DIFFA).AND. 3 (ABS(TELEV(IX,JY+2)-TELEV(IX,JY+1)).LT.DIFFA))THEN C EACH END POINT DIFFERS FROM THE TWO CLOSEST C POINTS TO IT BY LT DIFFA M IN ELEVATION. C IF(INDEX1(IX,JY-2).NE.9999.AND. 1 INDEX1(IX,JY+2).NE.9999)THEN C CCC IF(L.EQ.MTIMES)THEN CCC WRITE(KFILDO,188)IX,JY, CCC 1 INDEX1(IX,JY-2),INDEX1(IX,JY-1), CCC 2 INDEX1(IX,JY),INDEX1(IX,JY+1), CCC 3 INDEX1(IX,JY+2) CCC 188 FORMAT('AT 188',2I7,5I5) CCC ENDIF C IF(INDEX1(IX,JY-1).GT.INDEX1(IX,JY-2))THEN INDEX2(IX,JY-1)=INDEX1(IX,JY-2) HOLD(IX,JY-1)=DATA(IX,JY-2) ELSEIF(INDEX1(IX,JY-1).LT.INDEX1(IX,JY+2))THEN INDEX2(IX,JY-1)=INDEX1(IX,JY+2) HOLD(IX,JY-1)=DATA(IX,JY+2) ENDIF C IF(INDEX1(IX,JY).LT.INDEX1(IX,JY+2))THEN INDEX2(IX,JY)=INDEX1(IX,JY+2) HOLD(IX,JY)=DATA(IX,JY+2) ELSEIF(INDEX1(IX,JY).GT.INDEX1(IX,JY-2))THEN INDEX2(IX,JY)=INDEX1(IX,JY-2) HOLD(IX,JY)=DATA(IX,JY-2) ENDIF C IF(INDEX1(IX,JY+1).GT.INDEX1(IX,JY-2))THEN INDEX2(IX,JY+1)=INDEX1(IX,JY-2) HOLD(IX,JY+1)=DATA(IX,JY-2) ELSEIF(INDEX1(IX,JY+1).LT.INDEX1(IX,JY+2))THEN INDEX2(IX,JY+1)=INDEX1(IX,JY+2) HOLD(IX,JY+1)=DATA(IX,JY+2) ENDIF C ENDIF C ENDIF C ENDIF C ELSEIF(INDEX1(IX,JY-2).LT.INDEX1(IX,JY+2))THEN C THIS SECTION KEEPS THE MIDDLE POINTS WITHIN BOUNDS C OF THE END POINTS. C IF(ABS(TELEV(IX,JY-2)-TELEV(IX,JY+2)).LT.DIFFA)THEN C THE ELEVATION DISTANCE BETWEEN THE END POINTS C IS LT DIFFA M. C IF((ABS(TELEV(IX,JY-2)-TELEV(IX,JY)) .LT.DIFFA).AND. 1 (ABS(TELEV(IX,JY-2)-TELEV(IX,JY-1)).LT.DIFFA).AND. 2 (ABS(TELEV(IX,JY+2)-TELEV(IX,JY)) .LT.DIFFA).AND. 3 (ABS(TELEV(IX,JY+2)-TELEV(IX,JY+1)).LT.DIFFA))THEN C EACH END POINT DIFFERS FROM THE TWO CLOSEST C POINTS TO IT BY LT DIFFA M IN ELEVATION. C IF(INDEX1(IX,JY-2).NE.9999.AND. 1 INDEX1(IX,JY+2).NE.9999)THEN C IF(INDEX1(IX,JY-1).LT.INDEX1(IX,JY-2))THEN INDEX2(IX,JY-1)=INDEX1(IX,JY-2) HOLD(IX,JY-1)=DATA(IX,JY-2) ELSEIF(INDEX1(IX,JY-1).GT.INDEX1(IX,JY+2))THEN INDEX2(IX,JY-1)=INDEX1(IX,JY+2) HOLD(IX,JY-1)=DATA(IX,JY+2) ENDIF C IF(INDEX1(IX,JY).LT.INDEX1(IX,JY-2))THEN INDEX2(IX,JY)=INDEX1(IX,JY-2) HOLD(IX,JY)=DATA(IX,JY-2) ELSEIF(INDEX1(IX,JY).GT.INDEX1(IX,JY+2))THEN INDEX2(IX,JY)=INDEX1(IX,JY+2) HOLD(IX,JY)=DATA(IX,JY+2) ENDIF C IF(INDEX1(IX,JY+1).GT.INDEX1(IX,JY+2))THEN INDEX2(IX,JY+1)=INDEX1(IX,JY+2) HOLD(IX,JY+1)=DATA(IX,JY+2) ELSEIF(INDEX1(IX,JY+1).LT.INDEX1(IX,JY-2))THEN INDEX2(IX,JY+1)=INDEX1(IX,JY-2) HOLD(IX,JY+1)=DATA(IX,JY-2) ENDIF C ENDIF C ENDIF C ENDIF C ENDIF C ENDIF C ENDIF C 199 CONTINUE 200 CONTINUE C DO 250 JY=1,NY DO 249 IX=1,NX DATA(IX,JY)=HOLD(IX,JY) INDEX1(IX,JY)=INDEX2(IX,JY) 249 CONTINUE 250 CONTINUE C 280 CONTINUE C KCOUNT=1 RETURN END