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