SUBROUTINE ORSMTH(KFILDO,P,NX,NY,MESH, 1 SEALND,NXE,NYE,MESHE, 2 IOCEXT,IOCINC,ISTOP,IER) C C NOVEMBER 2007 GLAHN MDL MOS-2000 C DECEMBER 2007 GLAHN ADDED 8 DIAGNONALS C OCTOBER 2008 GLAHN CORRECTED OUT OF GRID BOUNDS ON C DIAGONALS C JUNE 2009 GLAHN CHANGED 'GT.3' TO 'GT.3.5' IN C MANY PLACES C JULY 2010 GLAHN OPEN MP STATEMENTS PUT IN IN C TWO PLACES; SPELL CHECK C JULY 2014 HUANG ADDED "C"S IN FRONT OF "D" STATEMENTS C FOR OPERATIONS C C PURPOSE C TO SMOOTH WATER POINTS ON A GRID OVER A CIRCLE C BY TRACING A RAY IN 16 DIRECTIONS FROM THE CENTER. C ONCE A LAND POINT OR A MISSING VALUE IS ENCOUNTERED, C THE RAY STOPS. THE RAYS WILL BE OF LENGTH IOCEXT C GRID LENGTHS AT INCREMENTS OF IOCINC. P(NX,JY) AND C SEALND(NXE,NYE) MUST COVER THE SAME AREA AND BE OF C THE SAME MESH LENGTH. THE GRID SIZES AND MESH LENGTHS C ARE CHECKED. A MISSING POINT IS KEPT AS MISSING. C C AFTER THE RAY SMOOTHING, A SIMPLE 9-POINT SMOOTHER C IS USED TWICE; WITHOUT IT, THERE IS CHATTER IN THE GRID. C C OPEN MP STOP AND IER ARE NOT DECLARED PRIVATE IN OPEN MP. C THEY ARE NOT INVOLVED IN THE OPEN MP LOOPS. C C DATA SET USE C KFILDO - UNIT NUMBER FOR OUTPUT (PRINT) FILE. (OUTPUT) C C VARIABLES C KFILDO = UNIT NUMBER FOR OUTPUT (PRINT) FILE. (INPUT) C P(IX,JY) = HOLDS A FIELD TO BE SMOOTHED C (IX=1,NX) (JY=1,NY), WHERE NX AND NY ARE THE C SIZE OF THE GRID. (INPUT/OUTPUT) C NX = SIZE OF P( , ) IN X DIRECTION. (INPUT) C NY = SIZE OF P( , ) IN Y DIRECTION. (INPUT) C MESH = NOMINAL MESH LENGTH OF GRID IN P( , ) . C (INPUT) C SEALND(IX,JY) = THE LAND/SEA MASK (IX=1,NX) (JY=1,NY). C 0 = OCEAN WATER GRIDPOINTS; C 3 = INLAND WATER GRIDPOINTS. C 9 = LAND GRIDPOINTS. C (INPUT) C NXE = SIZE OF SEALND( , ) IN X DIRECTION. (INPUT) C NYE = SIZE OF SEALND( , ) IN Y DIRECTION. (INPUT) C MESHE = NOMINAL MESH LENGTH OF GRID IN SEALND( , ). C (INPUT) C IOCEXT = THE NUMBER OF GRIDPOINTS PLUS AND MINUS TO C SMOOTH. THIS IS ALSO THE NUMBER OF GRID C LENGTHS TO SMOOTH IN EACH DIRECTION. (INPUT) C IOCINC = THE INCREMENT TO USE IN SMOOTHING. IT MAY BE C NOT ALL POINTS ALONG THE RAY NEED BE USED TO C GET A GOOD RESULT. IF SO, THE COMPUTATION C SHOULD BE CONSIDERABLY FASTER. NOTE THAT C IOCEXT SHOULD BE EVENLY DIVISIBLE BY IOCINC. C (INPUT) C ISTOP = INCREMENTED BY 1 IF THERE IS AN ERROR. C (INPUT/OUTPUT) C IER = RETURN CODE. C 0 = GOOD RETURN. C 777 = MESHE NE MESH OR ARRAY SIZES NOT THE SAME. C (OUTPUT) C 1 2 3 4 5 6 7 X C DIMENSION P(NX,NY) DIMENSION HOLD(NX,NY) C HOLD( , ) IS AN AUTOMATIC ARRAY. DIMENSION SEALND(NXE,NYE) C CALL TIMPR(KFILDO,KFILDO,'START ORSMTH ') C CCC WRITE(KFILDO,103)NX,NY,NXE,NYE,MESH,MESHE,IOCEXT,IOCINC CCC 103 FORMAT(/' IN ORSMTH--NX,NY,NXE,NYE,MESH,MESHE,IOCEXT,IOCINC', CCC 1 8I8) C C CHECK THE SIZE OF P( , ) AND SEALND( , ). C IF(NX.NE.NXE.OR.NY.NE.NYE)THEN WRITE(KFILDO,105)NX,NY,NXE,NYE 105 FORMAT(/' ****THE GRID P( , ) OF SIZE', I6,' X ',I6, 1 ' IS NOT THE SAME SIZE OF SEALND', I6,' X ',I6, 2 '. OCEAN IS NOT SMOOTHED.',/, 3 ' NOT COUNTED AS FATAL. IN ORSMTH. CONTINUING.') ISTOP=ISTOP+1 IER=777 GO TO 400 ENDIF C C CHECK THE MESH LENGTHS OF P( , ) AND SEALND( , ). C IF(MESH.NE.MESHE)THEN WRITE(KFILDO,107)MESH,MESHE 107 FORMAT(/' ****THE GRID P( , ) HAS A DIFFERENT NOMINAL', 1 ' MESH LENGTH =',I4,' THAN THAT OF SEALND( , ) =',I4,/, 2 '. OCEAN IS NOT SMOOTHED.',/, 3 ' NOT COUNTED AS FATAL. IN ORSMTH. CONTINUING.') ISTOP=ISTOP+1 IER=777 GO TO 400 ENDIF C C CHECK WHETHER IOCEXT AND IOCINC ARE BOTH GE 0. C IF(IOCEXT.LE.0.OR.IOCINC.LE.0)THEN WRITE(KFILDO,108)IOCEXT,IOCINC 108 FORMAT(/' ****IOCEXT =',I4,' AND IOCINC =',I4, 1 ' ARE NOT BOTH GREATER THAN 0',/, 2 '. OCEAN IS NOT SMOOTHED.',/, 3 ' NOT COUNTED AS FATAL. IN ORSMTH. CONTINUING.') ISTOP=ISTOP+1 IER=777 GO TO 400 ENDIF C C CHECK WHETHER IOCEXT IS EVENLY DIVISIBLE BY IOCINC. C IF(MOD(IOCEXT,IOCINC).NE.0.OR.IOCINC.GT.IOCEXT)THEN WRITE(KFILDO,109)IOCEXT,IOCINC 109 FORMAT(/' ****IOCEXT =',I4,' AND IOCINC =',I4, 1 ' ARE NOT COMPATIBLE',/, 2 '. OCEAN IS NOT SMOOTHED.',/, 3 ' NOT COUNTED AS FATAL. IN ORSMTH. CONTINUING.') ISTOP=ISTOP+1 IER=777 GO TO 400 ENDIF C SMOOTH THE POINTS. C !$OMP PARALLEL DO DEFAULT(SHARED) !$OMP& PRIVATE(IX,JY,SUM,NCOUNT,IXS,JYS,IS) C DO 300 JY=1,NY DO 299 IX=1,NX C IF(SEALND(IX,JY).LE.3.5.AND.P(IX,JY).LT.9998.9)THEN C THIS IS AN OCEAN OR INLAND WATER POINT THAT IS NOT MISSING. C SUM=P(IX,JY) C P(IX,JY) IS THE CENTER POINT. IT IS COUNTED ONLY ONCE. NCOUNT=1 C C SUM VALUES ON X-AXIS TO THE RIGHT. C DO 124 IXS=IX+IOCINC,MIN(NX,IX+IOCEXT),+IOCINC IF(P(IXS,JY).GT.9998.9.OR.SEALND(IXS,JY).GT.3.5)GO TO 125 C A MISSING OR LAND STOPS THE RAY. SUM=SUM+P(IXS,JY) NCOUNT=NCOUNT+1 C CD IF(IX.EQ.200.AND.JY.EQ.200)THEN CD WRITE(KFILDO,120)IX,JY,IXS,NCOUNT,P(IXS,JY),SUM CD120 FORMAT(' AT 120--IX,JY,IXS,NCOUNT,P(IXS,JY),SUM',4I8,2F10.2) CD ENDIF C 124 CONTINUE C C SUM VALUES ON X-AXIS TO THE LEFT. C 125 DO 134 IXS=IX-IOCINC,MAX(1,IX-IOCEXT),-IOCINC IF(P(IXS,JY).GT.9998.9.OR.SEALND(IXS,JY).GT.3.5)GO TO 135 C A MISSING OR LAND STOPS THE RAY. SUM=SUM+P(IXS,JY) NCOUNT=NCOUNT+1 C CD IF(IX.EQ.200.AND.JY.EQ.200)THEN CD WRITE(KFILDO,130)IX,JY,IXS,NCOUNT,P(IXS,JY),SUM CD130 FORMAT(' AT 130--IX,JY,IXS,NCOUNT,P(IXS,JY),SUM',4I8,2F10.2) CD ENDIF C 134 CONTINUE C C SUM VALUES ON Y-AXIS UPWARD. C 135 DO 144 JYS=JY+IOCINC,MIN(NY,JY+IOCEXT),+IOCINC IF(P(IX,JYS).GT.9998.9.OR.SEALND(IX,JYS).GT.3.5)GO TO 145 C A MISSING OR LAND STOPS THE RAY. SUM=SUM+P(IX,JYS) NCOUNT=NCOUNT+1 C CD IF(IX.EQ.200.AND.JY.EQ.200)THEN CD WRITE(KFILDO,140)IX,JY,JYS,NCOUNT,P(IX,JYS),SUM CD140 FORMAT(' AT 140--IX,JY,JYS,NCOUNT,P(IX,JYS),SUM',4I8,2F10.2) CD ENDIF C 144 CONTINUE C C SUM VALUES ON Y-AXIS DOWNWARD. C 145 DO 154 JYS=JY-IOCINC,MAX(1,JY-IOCEXT),-IOCINC IF(P(IX,JYS).GT.9998.9.OR.SEALND(IX,JYS).GT.3.5)GO TO 155 C A MISSING OR LAND STOPS THE RAY. SUM=SUM+P(IX,JYS) NCOUNT=NCOUNT+1 C CD IF(IX.EQ.200.AND.JY.EQ.200)THEN CD WRITE(KFILDO,150)IX,JY,JYS,NCOUNT,P(IX,JYS),SUM CD150 FORMAT(' AT 150--IX,JY,JYS,NCOUNT,P(IX,JYS),SUM',4I8,2F10.2) CD ENDIF C 154 CONTINUE C C SUM VALUES DIAGONALLY IN THE PLUS X AND PLUS Y DIRECTION. C 155 DO 164 IS=IOCINC,IOCEXT,+IOCINC IF(IX+IS.GT.NX)GO TO 164 IF(JY+IS.GT.NY)GO TO 164 IF(P(IX+IS,JY+IS).GT.9998.9.OR.SEALND(IX+IS,JY+IS).GT.3.5) 1 GO TO 165 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..707*IOCEXT)GO TO 165 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX+IS,JY+IS) NCOUNT=NCOUNT+1 C CD IF(IX.EQ.200.AND.JY.EQ.200)THEN CD WRITE(KFILDO,160)IX,JY,IS,NCOUNT,P(IX+IS,JY+IS),SUM CD160 FORMAT(' AT 160--IX,JY,IS,NCOUNT,P(IX+IS,JY+IS),SUM', CD 1 4I8,2F10.2) CD ENDIF C 164 CONTINUE C C SUM VALUES DIAGONALLY IN THE PLUS X AND MINUS Y DIRECTION. C 165 DO 174 IS=IOCINC,IOCEXT,+IOCINC IF(IX+IS.GT.NX)GO TO 174 IF(JY-IS.LT.1)GO TO 174 IF(P(IX+IS,JY-IS).GT.9998.9.OR.SEALND(IX+IS,JY-IS).GT.3.5) 1 GO TO 175 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..707*IOCEXT)GO TO 175 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX+IS,JY-IS) NCOUNT=NCOUNT+1 C CD IF(IX.EQ.200.AND.JY.EQ.200)THEN CD WRITE(KFILDO,170)IX,JY,IS,NCOUNT,P(IX+IS,JY-IS),SUM CD170 FORMAT(' AT 170--IX,JY,IS,NCOUNT,P(IX+IS,JY-IS),SUM', CD 1 4I8,2F10.2) CD ENDIF C 174 CONTINUE C C SUM VALUES DIAGONALLY IN THE MINUS X AND PLUS Y DIRECTION. C 175 DO 184 IS=IOCINC,IOCEXT,+IOCINC IF(IX-IS.LT.1)GO TO 184 IF(JY+IS.GT.NY)GO TO 184 IF(P(IX-IS,JY+IS).GT.9998.9.OR.SEALND(IX-IS,JY+IS).GT.3.5) 1 GO TO 185 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..707*IOCEXT)GO TO 185 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX-IS,JY+IS) NCOUNT=NCOUNT+1 C CD IF(IX.EQ.200.AND.JY.EQ.200)THEN CD WRITE(KFILDO,180)IX,JY,IS,NCOUNT,P(IX-IS,JY+IS),SUM CD180 FORMAT(' AT 180--IX,JY,IS,NCOUNT,P(IX-IS,JY+IS),SUM', CD 1 4I8,2F10.2) CD ENDIF C 184 CONTINUE C C SUM VALUES DIAGONALLY IN THE MINUS X AND MINUS Y DIRECTION. C 185 DO 194 IS=IOCINC,IOCEXT,+IOCINC IF(IX-IS.LT.1)GO TO 194 IF(JY-IS.LT.1)GO TO 194 IF(P(IX-IS,JY-IS).GT.9998.9.OR.SEALND(IX-IS,JY-IS).GT.3.5) 1 GO TO 195 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..707*IOCEXT)GO TO 195 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX-IS,JY-IS) NCOUNT=NCOUNT+1 C CD IF(IX.EQ.200.AND.JY.EQ.200)THEN CD WRITE(KFILDO,190)IX,JY,IS,NCOUNT,P(IX-IS,JY-IS),SUM CD190 FORMAT(' AT 190--IX,JY,IS,NCOUNT,P(IX-IS,JY-IS),SUM', CD 1 4I8,2F10.2) CD ENDIF C 194 CONTINUE C C SUM VALUES DIAGONALLY IN THE +X+Y DIRECTION BETWEEN C THE 45 DEGREE LINE AND THE VERTICAL. C 195 DO 204 IS=IOCINC,IOCEXT,+IOCINC IF(IX+IS.GT.NX)GO TO 204 IF(JY+2*IS.GT.NY)GO TO 204 IF(P(IX+IS,JY+2*IS).GT.9998.9.OR.SEALND(IX+IS,JY+2*IS).GT.3.5) 1 GO TO 205 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..447*IOCEXT)GO TO 205 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX+IS,JY+2*IS) NCOUNT=NCOUNT+1 C CD IF(IX.EQ.200.AND.JY.EQ.200)THEN CD WRITE(KFILDO,200)IX,JY,IS,NCOUNT,P(IX+IS,JY+2*IS),SUM CD200 FORMAT(' AT 200--IX,JY,IS,NCOUNT,P(IX+IS,JY+2*IS),SUM', CD 1 4I8,2F10.2) CD ENDIF C 204 CONTINUE C C SUM VALUES DIAGONALLY IN THE +X+Y DIRECTION BETWEEN C THE 45 DEGREE LINE AND THE HORIZONTAL. C 205 DO 214 IS=IOCINC,IOCEXT,+IOCINC IF(IX+2*IS.GT.NX)GO TO 214 IF(JY+IS.GT.NY)GO TO 214 IF(P(IX+2*IS,JY+IS).GT.9998.9.OR.SEALND(IX+2*IS,JY+IS).GT.3.5) 1 GO TO 215 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..447*IOCEXT)GO TO 215 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX+2*IS,JY+IS) NCOUNT=NCOUNT+1 C CD IF(IX.EQ.200.AND.JY.EQ.200)THEN CD WRITE(KFILDO,210)IX,JY,IS,NCOUNT,P(IX+2*IS,JY+IS),SUM CD210 FORMAT(' AT 210--IX,JY,IS,NCOUNT,P(IX+2*IS,JY+IS),SUM', CD 1 4I8,2F10.2) CD ENDIF C 214 CONTINUE C C SUM VALUES DIAGONALLY IN THE +X-Y DIRECTION BETWEEN C THE 45 DEGREE LINE AND THE HORIZONTAL. C 215 DO 224 IS=IOCINC,IOCEXT,+IOCINC IF(IX+2*IS.GT.NX)GO TO 224 IF(JY-IS.LT.1)GO TO 224 IF(P(IX+2*IS,JY-IS).GT.9998.9.OR.SEALND(IX+2*IS,JY-IS).GT.3.5) 1 GO TO 225 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..447*IOCEXT)GO TO 225 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX+2*IS,JY-IS) NCOUNT=NCOUNT+1 C CD IF(IX.EQ.200.AND.JY.EQ.200)THEN CD WRITE(KFILDO,220)IX,JY,IS,NCOUNT,P(IX+2*IS,JY-IS),SUM CD220 FORMAT(' AT 220--IX,JY,IS,NCOUNT,P(IX+2*IS,JY-IS),SUM', CD 1 4I8,2F10.2) CD ENDIF C 224 CONTINUE C C SUM VALUES DIAGONALLY IN THE +X-Y DIRECTION BETWEEN C THE 45 DEGREE LINE AND THE VERTICAL. C 225 DO 234 IS=IOCINC,IOCEXT,+IOCINC IF(IX+IS.GT.NX)GO TO 234 IF(JY-2*IS.LT.1)GO TO 234 IF(P(IX+IS,JY-2*IS).GT.9998.9.OR.SEALND(IX+IS,JY-2*IS).GT.3.5) 1 GO TO 235 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..447*IOCEXT)GO TO 235 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX+IS,JY-2*IS) NCOUNT=NCOUNT+1 C CD IF(IX.EQ.200.AND.JY.EQ.200)THEN CD WRITE(KFILDO,230)IX,JY,IS,NCOUNT,P(IX+IS,JY-2*IS),SUM CD230 FORMAT(' AT 230--IX,JY,IS,NCOUNT,P(IX+IS,JY-2*IS),SUM', CD 1 4I8,2F10.2) CD ENDIF C 234 CONTINUE C C SUM VALUES DIAGONALLY IN THE -X-Y DIRECTION BETWEEN C THE 45 DEGREE LINE AND THE VERTICAL. C 235 DO 244 IS=IOCINC,IOCEXT,+IOCINC IF(IX-IS.LT.1)GO TO 244 IF(JY-2*IS.LT.1)GO TO 244 IF(P(IX-IS,JY-2*IS).GT.9998.9.OR.SEALND(IX-IS,JY-2*IS).GT.3.5) 1 GO TO 245 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..447*IOCEXT)GO TO 245 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX-IS,JY-2*IS) NCOUNT=NCOUNT+1 C CD IF(IX.EQ.200.AND.JY.EQ.200)THEN CD WRITE(KFILDO,240)IX,JY,IS,NCOUNT,P(IX-IS,JY-2*IS),SUM CD240 FORMAT(' AT 240--IX,JY,IS,NCOUNT,P(IX-IS,JY-2*IS),SUM', CD 1 4I8,2F10.2) CD ENDIF C 244 CONTINUE C C SUM VALUES DIAGONALLY IN THE -X-Y DIRECTION BETWEEN C THE 45 DEGREE LINE AND THE HORIZONTAL. C 245 DO 254 IS=IOCINC,IOCEXT,+IOCINC IF(IX-2*IS.LT.1)GO TO 254 IF(JY-IS.LT.1)GO TO 254 IF(P(IX-2*IS,JY-IS).GT.9998.9.OR.SEALND(IX-2*IS,JY-IS).GT.3.5) 1 GO TO 255 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..447*IOCEXT)GO TO 255 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX-2*IS,JY-IS) NCOUNT=NCOUNT+1 C CD IF(IX.EQ.200.AND.JY.EQ.200)THEN CD WRITE(KFILDO,250)IX,JY,IS,NCOUNT,P(IX-2*IS,JY-IS),SUM CD250 FORMAT(' AT 250--IX,JY,IS,NCOUNT,P(IX-2*IS,JY-IS),SUM', CD 1 4I8,2F10.2) CD ENDIF C 254 CONTINUE C C SUM VALUES DIAGONALLY IN THE -X+Y DIRECTION BETWEEN C THE 45 DEGREE LINE AND THE HORIZONTAL. C 255 DO 264 IS=IOCINC,IOCEXT,+IOCINC IF(IX-2*IS.LT.1)GO TO 264 IF(JY+IS.GT.NY)GO TO 264 IF(P(IX-2*IS,JY+IS).GT.9998.9.OR.SEALND(IX-2*IS,JY+IS).GT.3.5) 1 GO TO 265 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..447*IOCEXT)GO TO 265 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX-2*IS,JY+IS) NCOUNT=NCOUNT+1 C CD IF(IX.EQ.200.AND.JY.EQ.200)THEN CD WRITE(KFILDO,260)IX,JY,IS,NCOUNT,P(IX-2*IS,JY+IS),SUM CD260 FORMAT(' AT 260--IX,JY,IS,NCOUNT,P(IX-2*IS,JY+IS),SUM', CD 1 4I8,2F10.2) CD ENDIF C 264 CONTINUE C C SUM VALUES DIAGONALLY IN THE -X+Y DIRECTION BETWEEN C THE 45 DEGREE LINE AND THE VERTICAL. C 265 DO 274 IS=IOCINC,IOCEXT,+IOCINC IF(IX-IS.LT.1)GO TO 274 IF(JY+2*IS.GT.NY)GO TO 274 IF(P(IX-IS,JY+2*IS).GT.9998.9.OR.SEALND(IX-IS,JY+2*IS).GT.3.5) 1 GO TO 275 C A MISSING OR LAND STOPS THE RAY. IF(IS.GT..447*IOCEXT)GO TO 275 C THIS LIMITS THE SMOOTHING TO A CIRCLE. SUM=SUM+P(IX-IS,JY+2*IS) NCOUNT=NCOUNT+1 C CD IF(IX.EQ.200.AND.JY.EQ.200)THEN CD WRITE(KFILDO,270)IX,JY,IS,NCOUNT,P(IX-IS,JY+2*IS),SUM CD270 FORMAT(' AT 270--IX,JY,IS,NCOUNT,P(IX-IS,JY+2*IS),SUM', CD 1 4I8,2F10.2) CD ENDIF C 274 CONTINUE C 275 HOLD(IX,JY)=SUM/NCOUNT C ELSE HOLD(IX,JY)=P(IX,JY) C WHEN NOT SMOOTHED, THE POINT IS MISSING OR LAND AND IS C PUT INTO HOLD( , ). ENDIF C C IF(HOLD(IX,JY).NE.P(IX,JY))THEN C WRITE(KFILDO,298)IX,JY,P(IX,JY),HOLD(IX,JY) C298 FORMAT(' AT 298 IN ORSMTH--IX,JY,P(IX,JY),HOLD(IX,JY)', C 1 2I8,2F10.5) C ENDIF C 299 CONTINUE C 300 CONTINUE C !$OMP END PARALLEL DO C C REPLACE P( , ) WITH HOLD( , ). C DO 310 JY=1,NY DO 309 IX=1,NX P(IX,JY)=HOLD(IX,JY) 309 CONTINUE 310 CONTINUE C CCC WRITE(KFILDO,312) CCC 312 FORMAT(' RAY SMOOTHED WITHOUT 9-PT SMOOTHING') C C SMOOTH OVER 9 POINTS ONCE. C WRITE(KFILDO,312) 312 FORMAT(' WATER RAY SMOOTHED, FOLLOWED BY TWO 9-PT SMOOTHINGS') C DO 390 L=1,2 C !$OMP PARALLEL DO DEFAULT(SHARED) !$OMP& PRIVATE(IX,JY,SUM,NCOUNT,IXS,JYS) C DO 370 JY=1,NY DO 369 IX=1,NX C IF(SEALND(IX,JY).LE.3.5.AND.P(IX,JY).LT.9998.9)THEN C THIS IS AN OCEAN OR INLAND WATER POINT THAT IS NOT MISSING. C SUM=0. NCOUNT=0 C DO 360 JYS=MAX(1,JY-1),MIN(NY,JY+1) DO 359 IXS=MAX(1,IX-1),MIN(NX,IX+1) CCCC DO 360 JYS=MAX(1,JY-4),MIN(NY,JY+4) CCCC DO 359 IXS=MAX(1,IX-4),MIN(NX,IX+4) C IF(P(IXS,JYS).GT.9998.9.OR.SEALND(IXS,JYS).GT.3.5)GO TO 359 C SUM=SUM+P(IXS,JYS) NCOUNT=NCOUNT+1 359 CONTINUE 360 CONTINUE C IF(NCOUNT.GT.0)THEN HOLD(IX,JY)=SUM/NCOUNT ELSE HOLD(IX,JY)=P(IX,JY) ENDIF C ELSE HOLD(IX,JY)=P(IX,JY) C WHEN NOT SMOOTHED, THE POINT IS MISSING OR LAND AND IS C PUT INTO HOLD( , ). ENDIF C 369 CONTINUE 370 CONTINUE C !$OMP END PARALLEL DO C C REPLACE P( , ) WITH HOLD( , ). C DO 380 JY=1,NY DO 379 IX=1,NX P(IX,JY)=HOLD(IX,JY) 379 CONTINUE 380 CONTINUE C 390 CONTINUE C CALL TIMPR(KFILDO,KFILDO,'END ORSMTH ') 400 RETURN END