SUBROUTINE ORSMTW(KFILDO,KFILOG,IP16,
     1                  CCALL,XP,YP,LNDSEA,NOPTN,LTAG,LTAGPT,NSTA,
     2                  ID,IDPARS,P,MESH,C,Q,NX,NY,
     3                  TELEV,SEALND,CPNDFD,NXE,NYE,MESHE,
     4                  IPACK,DATA,IWORK,ND5,
     5                  MODNO,NDATE,
     6                  ALATL,ALONL,NPROJ,ORIENT,XLAT,ISCALD,
     7                  IOCINC,DPOWER,RAY,MAXDST,CSTSM,
     8                  IS0,IS1,IS2,IS4,ND7,
     9                  JTOTBY,JTOTRC,PLAINT,IPLANT,
     A                  L3264B,L3264W,MINPK,ISTOP,IER)
C
C        JUNE      2011   GLAHN   MDL   MOS-2000
C                                 ADAPTED FROM ORSMTH AND SPOTRM
C        JULY      2011   GLAHN   ADDED FACTOR ON DIAGONALS;
C                                 ADDED LTAGBS
C        JULY      2011   GLAHN   INSERTED SMOOTHING BEFORE RAY
C        JULY      2011   GLAHN   REMOVED MAXRAY
C        AUGUST    2011   GLAHN   ADDED CSTSM FOR LAND/WATER
C                                 BOUNDARY SMOOTHING
C        AUGUST    2011   GLAHN   CHANGED LTAGBS( ) TO LATGPT( )
C        AUGUST    2011   GLAHN   ADDED NOPTN TO CALL AND TO 
C                                 CALL TO SPOTWT
C        SEPTEMBER 2011   GLAHN   CORRECTED ERROR IN DEFINITION 
C                                 OF FACNE AND FACNNE
C        FEBRUARY  2012   GLAHN   3RD PARAGRAPH PURPOSE CORRECTED
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            THE DIFFERENCE BETWEEN ORSMTW AND ORSMTH IS THAT
C            ORSMTW COMPUTES THE RADIUS OVER WHICH TO SMOOTH
C            AND WEIGHTS TO USE SIMILAR TO SPOTRM.  ORSMTW CALLS
C            SPOTWT TO COMPUTE THE RADII AND WEIGHTS.
C
C            ORSMTW AND ORSMTH DO NOT DISTINGUISH BETWEEN LAKE AND
C            OCEAN.  ORSMTW TREATS EACH WATER BODY SEPARATELY BECAUSE
C            THE RAY STOPS WHEN LAND IS ENCOUNTERED.
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            FINALLY, CSTSM (WHEN NOT ZERO) IS USED TO SMOOTH THE
C            LAND/WATER BOUNDARY.  WHEN THE FOUR POINTS AROUND THE
C            POINT POTENTIALLY BEING SMOOTHED ARE NOT ALL WATER
C            OR LAND, CSTSM IS USED TO SMOOTH IT.
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            KFILOG    - UNIT NUMBER FOR DISPOSABLE TDLPACK GRIDPOINT
C                        OUTPUT.  (OUTPUT)
C            KFILRA(J) - HOLDS THE UNIT NUMBERS FOR ACCESSING THE
C                        MOS-2000 EXTERNAL RANDOM ACCESS FILES (J=1,6).
C                        (INPUT)
C            IP16      - UNIT NUMBER FOR INDICATING WHEN A RECORD IS
C                        WRITTEN TO THE SEQUENTIAL FILE.  (OUTPUT)
C
C        VARIABLES
C              KFILDO = UNIT NUMBER FOR OUTPUT (PRINT) FILE.  (INPUT)
C              KFILOG = UNIT NUMBER FOR DISPOSABLE TDLPACK GRIDPOINT
C                       OUTPUT.  THIS IS FOR DIFFERENT PASSES OF THE
C                       ANALYSES AND THEIR SMOOTHINGS.  USED HERE
C                       FOR DISTANCE MAP.  (INPUT)
C                IP16 = INDICATES WHETHER (>0) OR NOT (=0) 
C                       A STATEMENT WILL BE OUTPUT TO IP(16)
C                       WHEN A SEQUENTIAL FILE IS WRITTEN THROUGH
C                       PAWGTS.  (INPUT))
C            CCALL(J) = STATION CALL LETTERS (J=1,NSTA).  (CHARACTER*8)
C                       (INPUT)
C               XP(K) = THE X POSITION FOR STATION K (K=1,NSTA) ON 
C                       THE ANALYSIS GRID AREA AT THE CURRENT GRID MESH 
C                       LENGTH MESH.  (INPUT)
C               YP(K) = THE Y POSITION FOR STATION K (K=1,NSTA) ON 
C                       THE ANALYSIS GRID AREA AT THE CURRENT GRID MESH 
C                       LENGTH MESH.  (INPUT)
C           LNDSEA(K) = LAND/SEA INFLUENCE FLAG FOR EACH STATION
C                       (K=1,NSTA).
C                       0 = WILL BE USED FOR ONLY OCEAN WATER (=0)
C                           GRIDPOINTS.
C                       3 = WILL BE USED FOR ONLY INLAND WATER (=3)
C                           GRIDPOINTS.
C                       6 = WILL BE USED FOR BOTH INLAND WATER (=3)
C                           AND LAND (=9) GRIDPOINTS.
C                       9 = WILL BE USED FOR ONLY LAND (=9) GRIDPOINTS.
C                       (INPUT)
C               NOPTN = INDICATES OPTION FOR WHICH DATA TO SMOOTH OUT.
C                       COMES FROM U405A.CN IN CALL TO SPOTRM CONST( ).
C                       1 = SMOTH OUT BOGUS ONLY
C                       2 = SMOTH OUT BOGUS AND 2ND LEVEL AUGMENTATION.
C                       3 = SMOTH OUT BOGUS AND ALL AUGMENTATION
C                       4 = KEEP ALL.
C                       (INPUT)
C             LTAG(K) = DENOTES USE OF DATA CORRESPONDING TO CCALL(K)
C                       (K=1,NSTA).
C                       +2 = STATION LOCATION UNKNOWN.  NOT USED FOR ANY
C                            PURPOSE.
C                       +1 = STATION OUTSIDE RADIUS OF INFLUENCE FOR
C                            AREA BEING ANALYZED OR MISSING DATUM.
C                            PERMANENTLY DISCARDED.
C                        0 = USE ON CURRENT PASS THROUGH DATA IN BCD.
C                       -1 = ON RETURN FROM BCD, THE DATUM WAS NOT 
C                            USED ON THE LAST PASS.
C                       -3 = ACCEPT THIS STATION ON EVERY PASS IN BCD.
C                            (NOT IMPLEMENTED IN U405A)
C                       (INPUT)
C           LTAGPT(K) = FOR STATION K (K=1NSTA),
C                       1 = AUGMENTED DATA (FIRST PASS)
C                       2 = AUGMENTED DATA (2ND PASS)
C                       3 = BOGUS DATA
C                       0 = EVERYTHING ELSE
C                       (INPUT)
C                NSTA = NUMBER OF STATIONS IN CCALL( ).  (INPUT)
C               ID(J) = 4 WORD ID OF VARIABLE BEING ANALYZED.  (INPUT)
C           IDPARS(J) = THE PARSED, INDIVIDUAL COMPONENTS OF THE
C                       PREDICTOR ID'S CORRESPONDING TO ID( ,N)
C                       (J=1,15), (N=1,ND4).
C                       J=1--CCC (CLASS OF VARIABLE),
C                       J=2--FFF (SUBCLASS OF VARIABLE),
C                       J=3--B (BINARY INDICATOR),
C                       J=4--DD (DATA SOURCE, MODEL NUMBER),
C                       J=5--V (VERTICAL APPLICATION),
C                       J=6--LBLBLBLB (BOTTOM OF LAYER, 0 IF ONLY 
C                            1 LAYER),
C                       J=7--LTLTLTLT (TOP OF LAYER),
C                       J=8--T (TRANSFORMATION),
C                       J=9--RR (RUN TIME OFFSET, ALWAYS + AND BACK 
C                            IN TIME),
C                       J=10--OT (TIME APPLICATION),
C                       J=11--OH (TIME PERIOD IN HOURS),
C                       J=12--TAU (PROJECTION IN HOURS),
C                       J=13--I (INTERPOLATION TYPE),
C                       J=14--S (SMOOTHING INDICATOR), AND
C                       J=15--G (GRID INDICATOR).
C                       (INPUT)
C            P(IX,JY) = HOLDS A FIELD TO BE SMOOTHED (INPUT) AND
C                       THE SMOOTHED GRID (OUTPUT) (IX=1,NX)
C                       (JY=1,NY).  (INPUT/OUTPUT)
C                MESH = NOMINAL MESH LENGTH OF GRID IN P( , ).
C                       (INPUT)
C            C(IX,JY) = SCRATCH ARRAY (IX=1,NX) (JY=1,NY).  (INTERNAL)
C                  NX = SIZE OF P( , ) IN X DIRECTION.  (INPUT)
C                  NY = SIZE OF P( , ) IN Y DIRECTION.  (INPUT)
C        TELEV(IX,JY) = THE TERRAIN ELEVATION (IX=1,NX) (JY=1,NY) AT
C                       NOMINAL MESHLENGTH MESHE.  (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       CPNDFD(IX,JY) = THE NDFD MASK (IX=1,NX) (JY=1,NY) AT
C                       NOMINAL MESHLENGTH MESHE.  A "1" MEANS THE
C                       GRIDPOINT IS WITHIN THE AREA; A "0" MEANS IT
C                       IS OUTSIDE THE AREA.  (INPUT)
C                 NXE = X-EXTENT OF TELEV( , ), SEALND( , ), AND
C                       CPNDFD( , ) AT MESH LENGTH MESHE.  (INPUT)
C                 NYE = Y-EXTENT OF TELEV( , ), SEALND( , ), AND
C                       CPNDFD( , ) AT MESH LENGTH MESHE.  (INPUT)
C               MESHE = NOMINAL MESH LENGTH OF GRID IN SEALND( , ),
C                       TELEV( , ), AND CPNDFD( , ).  (INPUT)
C            IPACK(J) = WORK ARRAY (J=1,ND5).  (INTERNAL)
C             DATA(J) = WORK ARRAY (J=1,ND5).  (INTERNAL)
C            IWORK(J) = WORK ARRAY (J=1,ND5).  (INTERNAL)
C                 ND5 = DIMENSION OF IPACK( ), IWORK( ), AND DATA( ).
C                       (INPUT)
C               MODNO = OUTPUT MODEL NUMBER.  (INPUT)
C               NDATE = DATE/TIME, YYYYMMDDHH.  THIS IS THE ANALYSIS
C                       RUN TIME, INCLUDING HH.  (INPUT)
C               ALATL = NORTH LATITUDE OF LOWER LEFT CORNER POINT
C                       OF A GRID OF THE SIZE  NXL, NYL.  TRUNCATED
C                       TO TEN THOUSANDTHS OF DEGREES.  NOTE THAT THE
C                       MOS-2000 ARCHIVE IS ONLY TO THOUSANDTHS OF
C                       DEGREES.  (INPUT)
C               ALONL = WEST LONGITUDE OF LOWER LEFT CORNER POINT
C                       OF A  GRID OF THE SIZE  NXL, NYL.  TRUNCATED
C                       TO TEN THOUSANDTHS OF DEGREES.  NOTE THAT THE
C                       MOS-2000 ARCHIVE IS ONLY TO THOUSANDTHS OF
C                       DEGREES.  (INPUT)
C               NPROJ = NUMBER OF MAP PROJECTION TO WHICH THIS GRID
C                       APPLIES.
C                       3 = LAMBERT.
C                       5 = POLAR STEREOGRAPHIC.
C                       7 = MERCATOR.
C                       (INPUT)
C              ORIENT = ORIENTATION OF GRID IN WEST LONGITUDE.  (INPUT)
C                XLAT = NORTH LATITUDE AT WHICH GRIDLENGTH IS SPECIFIED
C                       IN DEGREES.  (INPUT)
C              ISCALD = DECIMAL SCALING FOR TDLPACKING.  (INPUT)
C              IOCINC = THE INCREMENT TO USE IN SUMMING ALONG A RAY.
C                       (INPUT)
C              DPOWER = THE POWER OF THE DISTANCE TO USE IN WEIGHTING.
C                       WT(IX,JY)=1/DIST(IX,JY)**POWER.  (INPUT)
C                 RAY = THE MULTIPLIER OF THE DISTANCE TO THE CLOSEST
C                       STATION TO USE AS THE RADIUS OF THE SMOOTHING
C                       CIRCLE (OR MAJOR AXIS OF ELLIPSE).  (INPUT)
C              MAXDST = MAXIMUM RADIUS OF CIRCLE OVER WHICH TO COMPUTE
C                       THE DISTANCES IN SPOTWT.  TAKEN FROM THE
C                       U405A.CN FILE.  (INPUT)
C               CSTSM = THE SMOOTHING PARAMETER IF ANY POINT HAS WATER 
C                       BUT NOT ALL ARE WATER.  USE INSTEAD OF BQ.
C                       (CSTSM = 4 WEIGHTS THE AVERAGE OF THE  4
C                       NEIGHBORING POINTS EQUAL TO THE CENTER
C                       POINT--THE USUAL SITUATION FOR SMOOTHING.  WHEN
C                       CSTSM = .4, THE SUM OF THE SURROUNDING POINTS
C                       IS .1 AS MUCH AS THE CENTER VALUE.)
C                       (INPUT)
C              IS0(J) = MOS-2000 GRIB SECTION 0 ID'S (J=1,4).
C                       (INTERNAL)
C              IS1(J) = MOS-2000 GRIB SECTION 1 ID'S (J=1,21+).
C                       (INTERNAL)
C              IS2(J) = MOS-2000 GRIB SECTION 2 ID'S (J=1,12).
C                       (INTERNAL)
C              IS4(J) = MOS-2000 GRIB SECTION 4 ID'S (J=1,4).
C                       (INTERNAL)
C                 ND7 = DIMENSION OF IS0( ), IS1( ), IS2( ), AND
C                       IS4( ).  (INPUT)
C              JTOTBY = THE TOTAL NUMBER OF BYTES ON THE FILE ASSOCIATED
C                       WITH UNIT NO. KFILOG.  (INPUT/OUTPUT)
C              JTOTRC = THE TOTAL NUMBER OF RECORDS IN THE FILE ON UNIT
C                       NUMBER KFILOG.  (INPUT/OUTPUT)
C              PLAINT = THE PLAIN LANGUAGE DESCRIPTION TO FURNISH TO
C                       GTHRES. EQUIVALENCED TO IPLANT IN CALLING
C                       ROUTINE.  (INPUT)
C         IPLANT(I,J) = EQUIVALENCED TO PLAINT IN CALLING ROUTINE
C                       (I=1,L3264W) (J=1,4).  (INPUT)
C              L3264B = INTEGER WORD LENGTH IN BITS OF MACHINE BEING
C                       USED (EITHER 32 OR 64).  (INPUT).
C              L3264W = NUMBER OF WORDS IN 64 BITS (EITHER 1 OR 2).
C                       (INPUT)
C               MINPK = MINIMUM GROUP SIZE WHEN PACKING THE DATA.
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 = ANY ERROR IS RETURNED WITH A 777, BUT
C                             CALLING PROGRAM WILL PROBABLY IGNORE IT.
C                       (OUTPUT)
C         DIST(IX,JY) = THE FIELD OF DISTANCES TO THE NEAREST
C                       STATION (IX=1,NX) (JY=1,NY).
C                       (INTERNAL)  (ALLOCATABLE)
C           WT(IX,JY) = WEIGHTS FOR SMOOTHING (IX=1,NS) (JY=1,NY).
C                       (INTERNAL)  (ALLOCATABLE)
C              IOCEXT = THE NUMBER OF GRIDPOINTS PLUS AND MINUS 
C                       OF THE POINT P(IX,JY) TO SMOOTH.  IT IS 
C                       A FUNCTION OF RAY*DIST(IX,JY).   (INTERNAL)
C         ITABLE(J,L) = CORRESPONDENCE BETWEEN NOMINAL MESH LENGTH
C                       (L=1) AND VALUE FOR X IN 408CX0000 (L=2),
C                       (J=1,7).
C              IPRTEL = 1 TO WRITE THE RETRIEVED DISTANCE GRID TO THE
C                       OUTPUT FILE VIA GTHRES.  (INTERNAL)
C      NXSAVE, NYSAVE = SAVED VALUES OF NX AND NY TO MAKE SURE THE
C                       ALLOCATED ARRAYS ARE OF CORRECT SIZE.
C                      (INTERNAL)
C              IFIRST = CONTROLS THE ALLOCATION OF ARRAYS.  (INTERNAL)
C              JFIRST = CONTROLS THE WRITING OF THE DISTANCE GRID.  IT
C                       IS WRITTEN ONLY ONCE.  (INTERNAL)
C               ODIST = DISTANCE IN GRID UNITS OUTSIDE THE GRID A 
C                       STATION IS USED FOR THIS PURPOSE.  SET BY
C                       DATA STATEMENT TO 1.  (INTERNAL)
C         HOLD(IX,JY) = SCRATCH ARRAY USED IN COMPUTING THE SMOOTHED
C                       FIELD (IX=1,NX) (JY=1,NY).  (AUTOMATIC)
C                       (INTERNAL)
C        1         2         3         4         5         6         7 X
C
      CHARACTER*6 RACESS(6)
      CHARACTER*8 CCALL(NSTA)
      CHARACTER*32 PLAINT
C
      DIMENSION ID(4),LD(4),IDPARS(15)
      DIMENSION XP(NSTA),YP(NSTA),LNDSEA(NSTA),LTAG(NSTA),LTAGPT(NSTA)
      DIMENSION P(NX,NY),C(NX,NY),Q(NX,NY)
      DIMENSION HOLD(NX,NY)
C        HOLD( , ) IS AN AUTOMATIC ARRAY.
      DIMENSION TELEV(NXE,NYE),SEALND(NXE,NYE),CPNDFD(NXE,NYE)
      DIMENSION IPLANT(L3264W,4)
C        EQUIVALENCED TO PLAINT IN DRIVER.
      DIMENSION IPACK(ND5),IWORK(ND5),DATA(ND5)
      DIMENSION IS0(ND7),IS1(ND7),IS2(ND7),IS4(ND7)
      DIMENSION ITABLE(7,2),IDSAVE(4)
C
      DATA IFIRST/0/
C
      ALLOCATABLE WT(:,:),DIST(:,:)
      SAVE WT,DIST
      SAVE NXSAVE,NYSAVE,IDSAVE,NDTSAV
C
      CALL TIMPR(KFILDO,KFILDO,'START ORSMTW        ')
C
D     WRITE(KFILDO,103)ID,NX,NY,NXE,NYE,MESH,MESHE,IOCINC
D103  FORMAT(/' IN ORSMTW--ID,NX,NY,NXE,NYE,MESH,MESHE,IOCINC',
D    1        4I12,8I8)
D     WRITE(KFILDO,104)IOCINC,DPOWER,RAY,MAXDST
D104  FORMAT(/' IN ORSMTW--IOCINC,DPOWER,RAY,MAXDST',
D    1        I8,2F8.2,2I8)
C
C        INITIALIZE SOME VARIABLES FOR LAND/WATER BOUNDARY SMOOTHING.
C
      BQW=CSTSM/4.
      BPW=CSTSM+1.
      NXM1=NX-1
      NYM1=NY-1
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 ORSMTW.  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 ORSMTW.  CONTINUING.')
         ISTOP=ISTOP+1
         IER=777
         GO TO 400
      ENDIF
C
C        CHECK WHETHER OCINC IS GT 0.
C
      IF(IOCINC.LE.0)THEN
         WRITE(KFILDO,108)IOCINC
 108     FORMAT(/' ****IOCINC =',I4,' IS NOT GREATER THAN 0',
     1           '.  OCEAN IS NOT SMOOTHED IN ORSMTW.')
         ISTOP=ISTOP+1
         IER=777
         GO TO 400
      ENDIF
C
C        CALCULATE THE RADII AND WEIGHTS IN SPOTWT.
C
 115  IF(IFIRST.EQ.0)THEN
C           ALLOCATE THE ARRAYS DIST( , ) AND WT( , ).
C
         ALLOCATE (DIST(NX,NY),WT(NX,NY),STAT=IOS)
C
         IF(IOS.EQ.1)THEN
            WRITE(KFILDO,116)
 116        FORMAT(/' ****ALLOCATION OF DIST( , ) AND WT( , ) FAILED',
     1              ' IN SPOTWT AT 116.  ARRAY ALREADY ALLOCATED.')
            ISTOP=ISTOP+1
            IER=777
            GO TO 400
C
         ELSEIF(IOS.EQ.2)THEN
            WRITE(KFILDO,117)
 117        FORMAT(/' ****ALLOCATION OF DIST( , ) AND WT( , ) FAILED',
     1              ' IN SPOTWT AT 117.  ARRAY NOT ALLOCATED.')
            ISTOP=ISTOP+1
            IER=777
            GO TO 400
         ENDIF
C
         IFIRST=1
         NXSAVE=NX
         NYSAVE=NY
      ELSE
C
         IF(NX.NE.NXSAVE.OR.NY.NE.NYSAVE)THEN
C              IT IS NOT EXPECTED THAT THIS WILL HAPPEN.
C              IF IT DOES, IT IS PROBABLY AN ERROR OF SOME KIND.
            WRITE(KFILDO,118)NX,NY,NXSAVE,NYSAVE
 118        FORMAT(/' ****GRID SIZE NX =',I5,' NY =',I5,
     1              ' IN SPOTWT NOT THE SAME AS FOR',
     2              ' THE PREVIOUS ENTRY NX =',I5,' NY =',I5,'.',/,
     3              '     REALLOCATING THE ARRAYS WT( , ) AND',
     4              ' DIST( , ) AND RECALCULATING THE DISTANCES.')
C
            DEALLOCATE(DIST,WT,STAT=IOS)
            IFIRST=0
            GO TO 115
         ENDIF
C
      ENDIF
C
      CALL SPOTWT(KFILDO,KFILOG,IP16,
     1            CCALL,XP,YP,LNDSEA,NOPTN,LTAG,LTAGPT,NSTA,
     2            ID,IDPARS,DIST,WT,MESH,NX,NY,
     3            SEALND,NXE,NYE,MESHE,
     4            IPACK,DATA,IWORK,ND5,
     5            MODNO,NDATE,
     6            ALATL,ALONL,NPROJ,ORIENT,XLAT,ISCALD,
     7            DPOWER,MAXDST,
     8            IS0,IS1,IS2,IS4,ND7,
     9            JTOTBY,JTOTRC,PLAINT,IPLANT,
     A            L3264B,L3264W,MINPK,ISTOP,IER)
C
      IF(IER.NE.0)THEN
         WRITE(KFILDO,119)IER
 119     FORMAT(/' ****ERROR IN SPOTWT.  SMOOTHING IS NOT DONE.')
         GO TO 400
      ENDIF
C
CCCCC        SMOOTH OUT THE BOGUS SPOTS OVER WATER BEFORE THE RAY
CCCCC        SMOOTHING WITH A 25-POINT SQUARE.
CCCCC
CCCC      DO 1195 JY=1,NY
CCCC      DO 1194 IX=1,NX
CCCC      HOLD(IX,JY)=P(IX,JY)
CCCC 1194 CONTINUE
CCCC 1195 CONTINUE
CCCCC
CCCC      DO 122 K=1,NSTA
CCCCC
CCCC      IF(XP(K).LT.9998..AND.YP(K).LT.9998.)THEN
CCCCC
CCCC         IF(LNDSEA(K).LT.3.5.AND.LTAGPT(K).NE.0)THEN
CCCCC              THIS IS A BOGUS OR AUGMENTED OCEAN STATION.
CCCC            SUM=0.
CCCC            NCOUNT=0
CCCCC
CCCC            DO 121 JY=MAX(1,NINT(YP(K))-2),MIN(NY,NINT(YP(K))+2)
CCCC            DO 120 IX=MAX(1,NINT(XP(K))-2),MIN(NX,NINT(XP(K))+2)
CCCCC 
CCCC            IF(P(IX,JY).LT.9998..AND.SEALND(IX,JY).LT.3.5)THEN
CCCC               SUM=SUM+P(IX,JY)
CCCC               NCOUNT=NCOUNT+1
CCCC            ENDIF
CCCCC
CCCC 120        CONTINUE
CCCC 121        CONTINUE
CCCCC
CCCC            IF(NCOUNT.GT.0)THEN
CCCC               HOLD(IX,JY)=SUM/NCOUNT
CCCC            ENDIF
CCCCC
CCCC         ENDIF
CCCCC
CCCC      ENDIF
CCCCC
CCCC 122  CONTINUE
CCCCC
CCCC      DO 1225 JY=1,NY
CCCC      DO 1224 IX=1,NX
CCCC      P(IX,JY)=HOLD(IX,JY)
CCCC 1224 CONTINUE
CCCC 1225 CONTINUE
C
C        THE NUMBER OF POINTS AVERAGED ALONG AN X OR Y LINE IS
C        INT(IOCEXT/IOCINC).  HOWEVER, BECAUSE THE POINTS HAVE TO
C        BE PICKED AT GRIDPOINTS (ON INTEGER VALUES FROM THE 
C        ORIGIN) THERE ARE LESS POINTS ON A DIAGONAL.  TO 
C        ACCOUNT FOR THIS, A FACTOR IS USED ON THE DIAGONALS
C        TO GIVE THE DIAGONALS AS MUCH WEIGHT AS THE STRAIGHT
C        E-W OR N-S LINES.  THE FACTORS FOR THE DIAGONAL
C        (FACNE = FACTOR NORTHEAST) AND THE NEAR DIAGONAL
C        (FACNNE = FACTOR NORTH-NORTHEASTS) ARE CALCULATED
C        HERE.  THE VALUES .707 (1/SQUARE ROOT OF 2) AND
C        .447 (1/SQUARE ROOT OF 5) ARE THE SAME AS USED BELOW
C        IN LIMITING THE LENGTH OF THE DIAGONAL.
C
      FACNE=1./.707
      FACNNE=1./.447
C
C        SMOOTH THE POINTS.
C
!$OMP PARALLEL DO DEFAULT(SHARED)
!$OMP&            PRIVATE(IX,JY,SUM,COUNT,IXS,JYS,IS)
CCC!$OMP&   SCHEDULE(DYNAMIC)
C
      DO 300 JY=1,NY
C
      DO 299 IX=1,NX
C
CCCC      IF(IX.GT.620.AND.IX.LT.636.AND.JY.GE.170.AND.JY.LE.182)THEN
CCCC      WRITE(KFILDO,1226)IX,JY,SEALND(IX,JY),P(IX,JY),DIST(IX,JY),
CCCC     1                 WT(IX,JY)
CCCC 1226 FORMAT(/' ORSMTW--IX,JY,SEALND(IX,JY),P(IX,JY),DIST(IX,JY)',
CCCC     1        'WT(IX,JY)',2I8,4F10.3)
CCCC      ENDIF
C
      IF(SEALND(IX,JY).LE.3.5.AND.P(IX,JY).LT.9998.9.AND.
     1                            DIST(IX,JY).LT.9998.9)THEN
C           THIS IS AN OCEAN OR INLAND WATER POINT THAT IS
C           NOT MISSING AND HAS A NON MISSING DISTANCE.
C           WHEN THE DISTANCE IS GOOD, THE WEIGHT WILL BE ALSO.
C
         SUM=P(IX,JY)*WT(IX,JY)
C           P(IX,JY) IS THE CENTER POINT.  IT IS COUNTED ONLY ONCE.
         COUNT=WT(IX,JY)
         IOCEXT=NINT(DIST(IX,JY)*RAY)
C           RAY IS THE MULITILYING FACTOR FOR DIST( , ) FOR RAY
C           LENGTH.
C
C           SUM VALUES ON X-AXIS TO THE RIGHT.
C
         DO 124 IXS=MIN(NX,IX+1),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)*WT(IXS,JY)
         COUNT=COUNT+WT(IXS,JY)
C
D        IF(IX.GE.572.AND.IX.LE.578.AND.JY.EQ.468)THEN
D           WRITE(KFILDO,123)IX,JY,IXS,WT(IXS,JY),IOCEXT,
D    1                       COUNT,P(IXS,JY),SUM
D123        FORMAT(' AT 123--IX,JY,IXS,WT(IXS,JY),IOCEXT,',
D    1             'COUNT,P(IXS,JY),SUM',3I8,F10.2,I6,3F10.2)
D        ENDIF
C
 124     CONTINUE
C
C           SUM VALUES ON X-AXIS TO THE LEFT.
C
 125     DO 134 IXS=MAX(1,IX-1),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)*WT(IXS,JY)
         COUNT=COUNT+WT(IXS,JY)
C
D        IF(IX.GE.578.AND.IX.LT.582.AND.JY.EQ.468)THEN
D           WRITE(KFILDO,133)IX,JY,IXS,WT(IXS,JY),IOCEXT,
D    1                       COUNT,P(IXS,JY),SUM
D133        FORMAT(' AT 133--IX,JY,IXS,WT(IXS,JY),IOCEXT,',
D    1             'COUNT,P(IXS,JY),SUM',3I8,F10.2,I6,3F10.2)
D        ENDIF
C
 134     CONTINUE
C
C           SUM VALUES ON Y-AXIS UPWARD.
C
 135     DO 144 JYS=MIN(NY,JY+1),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)*WT(IX,JYS)
         COUNT=COUNT+WT(IX,JYS)
C
D        IF(IX.EQ.578.AND.JY.GE.462.AND.JY.LE.468)THEN
D           WRITE(KFILDO,140)IX,JY,JYS,WT(IX,JYS),IOCEXT,
D    1                       COUNT,P(IX,JYS),SUM
D140        FORMAT(' AT 140--IX,JY,JYS,WT(IX,JYS),IOCEXT,',
D    1             'COUNT,P(IX,JYS),SUM',3I8,F10.2,I6,3F10.2)
D        ENDIF
C
 144     CONTINUE
C
C           SUM VALUES ON Y-AXIS DOWNWARD.
C
 145     DO 154 JYS=MAX(1,JY-1),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)*WT(IX,JYS)
         COUNT=COUNT+WT(IX,JYS)
C
D        IF(IX.EQ.578.AND.JY.GE.468.AND.JY.LE.474)THEN
D           WRITE(KFILDO,150)IX,JY,JYS,WT(IX,JYS),IOCEXT,
D    1                       COUNT,P(IX,JYS),SUM
D150        FORMAT(' AT 150--IX,JY,JYS,WT(IX,JYS),IOCEXT,',
D    1             'COUNT,P(IX,JYS),SUM',3I8,F10.2,I6,3F10.2)
D        ENDIF
C
 154     CONTINUE
C
C           SUM VALUES DIAGONALLY IN THE PLUS X AND PLUS Y DIRECTION.
C
 155     DO 164 IS=1,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.  THE RAY IS ON
C           THE DIAGONAL OF THE SQUARE.
         SUM=SUM+P(IX+IS,JY+IS)*WT(IX+IS,JY+IS)*FACNE
         COUNT=COUNT+WT(IX+IS,JY+IS)*FACNE
C
D        IF(IX.GE.575.AND.IX.LE.578.AND.JY.GE.465.AND.JY.LE.468)THEN
D           WRITE(KFILDO,160)IX,JY,IS,WT(IX+IS,JY+IS),IOCEXT,
D    1                       COUNT,P(IX+IS,JY+IS),SUM
D160        FORMAT(' AT 160--IX,JY,IS,WT(IX+IS,JY+IS),IOCEXT,',
D    1             'COUNT,P(IX+IS,JY+IS),SUM',3I8,F10.2,I6,3F10.2)
D        ENDIF
C
 164     CONTINUE
C
C           SUM VALUES DIAGONALLY IN THE PLUS X AND MINUS Y DIRECTION.
C
 165     DO 174 IS=1,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)*WT(IX+IS,JY-IS)*FACNE
         COUNT=COUNT+WT(IX+IS,JY-IS)*FACNE
C
D        IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN
D           WRITE(KFILDO,170)IX,JY,IS,WT(IX+IS,JY-IS),IOCEXT,
D    1                       COUNT,P(IX+IS,JY-IS),SUM
D170        FORMAT(' AT 170--IX,JY,IS,COUNT,P(IX+IS,JY-IS),SUM',
D    1              3I8,F10.2,I6,3F10.2)
D        ENDIF
C
 174     CONTINUE
C
C           SUM VALUES DIAGONALLY IN THE MINUS X AND PLUS Y DIRECTION.
C
 175     DO 184 IS=1,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)*WT(IX-IS,JY+IS)*FACNE
         COUNT=COUNT+WT(IX-IS,JY+IS)*FACNE
C
D        IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN
D           WRITE(KFILDO,180)IX,JY,IS,COUNT,P(IX-IS,JY+IS),SUM
D180        FORMAT(' AT 180--IX,JY,IS,COUNT,P(IX-IS,JY+IS),SUM',
D    1              3I8,F10.2,I6,3F10.2)
D        ENDIF
C
 184     CONTINUE
C
C           SUM VALUES DIAGONALLY IN THE MINUS X AND MINUS Y DIRECTION.
C
 185     DO 194 IS=1,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)*WT(IX-IS,JY-IS)*FACNE
         COUNT=COUNT+WT(IX-IS,JY-IS)*FACNE
C
D        IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN
D           WRITE(KFILDO,190)IX,JY,IS,COUNT,P(IX-IS,JY-IS),SUM
D190        FORMAT(' AT 190--IX,JY,IS,COUNT,P(IX-IS,JY-IS),SUM',
D    1              3I8,F10.2,I6,3F10.2)
D        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=1,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)*WT(IX+IS,JY+2*IS)*FACNNE
         COUNT=COUNT+WT(IX+IS,JY+2*IS)*FACNNE
C
D        IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN
D           WRITE(KFILDO,200)IX,JY,IS,COUNT,P(IX+IS,JY+2*IS),SUM
D200        FORMAT(' AT 200--IX,JY,IS,COUNT,P(IX+IS,JY+2*IS),SUM',
D    1              3I8,F10.2,I6,3F10.2)
D        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=1,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)*WT(IX+2*IS,JY+IS)*FACNNE
         COUNT=COUNT+WT(IX+2*IS,JY+IS)*FACNNE
C
D        IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN
D           WRITE(KFILDO,210)IX,JY,IS,COUNT,P(IX+2*IS,JY+IS),SUM
D210        FORMAT(' AT 210--IX,JY,IS,COUNT,P(IX+2*IS,JY+IS),SUM',
D    1              3I8,F10.2,I6,3F10.2)
D        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=1,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)*WT(IX+2*IS,JY-IS)*FACNNE
         COUNT=COUNT+WT(IX+2*IS,JY-IS)*FACNNE
C
D        IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN
D           WRITE(KFILDO,220)IX,JY,IS,COUNT,P(IX+2*IS,JY-IS),SUM
D220        FORMAT(' AT 220--IX,JY,IS,COUNT,P(IX+2*IS,JY-IS),SUM',
D    1              3I8,F10.2,I6,3F10.2)
D        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=1,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)*WT(IX+IS,JY-2*IS)*FACNNE
         COUNT=COUNT+WT(IX+IS,JY-2*IS)*FACNNE
C
D        IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN
D           WRITE(KFILDO,230)IX,JY,IS,COUNT,P(IX+IS,JY-2*IS),SUM
D230        FORMAT(' AT 230--IX,JY,IS,COUNT,P(IX+IS,JY-2*IS),SUM',
D    1              3I8,F10.2,I6,3F10.2)
D        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=1,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)*WT(IX-IS,JY-2*IS)*FACNNE
         COUNT=COUNT+WT(IX-IS,JY-2*IS)*FACNNE
C
D        IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN
D           WRITE(KFILDO,240)IX,JY,IS,COUNT,P(IX-IS,JY-2*IS),SUM
D240        FORMAT(' AT 240--IX,JY,IS,COUNT,P(IX-IS,JY-2*IS),SUM',
D    1              3I8,F10.2,I6,3F10.2)
D        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=1,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)*WT(IX-2*IS,JY-IS)*FACNNE
         COUNT=COUNT+WT(IX-2*IS,JY-IS)*FACNNE
C
D        IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN
D           WRITE(KFILDO,250)IX,JY,IS,COUNT,P(IX-2*IS,JY-IS),SUM
D250        FORMAT(' AT 250--IX,JY,IS,COUNT,P(IX-2*IS,JY-IS),SUM',
D    1              3I8,F10.2,I6,3F10.2)
D        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=1,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)*WT(IX-2*IS,JY+IS)*FACNNE
         COUNT=COUNT+WT(IX-2*IS,JY+IS)*FACNNE
C
D        IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN
D           WRITE(KFILDO,260)IX,JY,IS,COUNT,P(IX-2*IS,JY+IS),SUM
D260        FORMAT(' AT 260--IX,JY,IS,COUNT,P(IX-2*IS,JY+IS),SUM',
D    1              3I8,F10.2,I6,3F10.2)
D        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=1,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)*WT(IX-IS,JY+2*IS)*FACNNE
         COUNT=COUNT+WT(IX-IS,JY+2*IS)*FACNNE
C
D        IF(IX.GT.570.AND.IX.LT.590.AND.JY.GE.460.AND.JY.LE.475)THEN
D           WRITE(KFILDO,270)IX,JY,IS,COUNT,P(IX-IS,JY+2*IS),SUM
D270        FORMAT(' AT 270--IX,JY,IS,COUNT,P(IX-IS,JY+2*IS),SUM',
D    1              3I8,F10.2,I6,3F10.2)
D        ENDIF
C
 274     CONTINUE
C
 275     HOLD(IX,JY)=SUM/COUNT
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
CCC      IF(IX.GT.624.AND.IX.LT.632.AND.JY.GE.173.AND.JY.LE.178)THEN
CCC         WRITE(KFILDO,297)IX,JY,HOLD(IX,JY),COUNT
CCC 297     FORMAT(/' AT 297--IX,JY,HOLD(IX,JY),COUNT',2I6,2F8.2)
CCC      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.
C
      WRITE(KFILDO,312)
 312  FORMAT(' WATER RAY SMOOTHED, FOLLOWED BY FIVE 25-PT SMOOTHINGS,',
     1       ' EXCEPT DATA POINT IS MAINTAINED INTACT.')
C
C        THE RAY SMOOTHER LEAVES STREAKS PRIMARILY BECAUSE OF THE
C        CUTOFF WHEN LAND IS HIT.  THIS CAN LEAVE A "LAND SHADOW."
C        THESE SMOOTHINGS TRY TO SMOOTH THEM OUT.  THE RAY
C        SMOOTHER WORKS WELL TO KEEP VALUES IN BAYS SEPARATE FROM
C        THE OCEAN, BUT IS PROBABLY A DETRIMENT IN THE OPEN OCEAN.
C
CCCC      DO 316 JY=255,235,-1
CCCC      WRITE(KFILDO,313)(DIST(IX,JY),IX=881,900)
CCCC 313  FORMAT(/,20F6.1)
CCCC      WRITE(KFILDO,314)(SEALND(IX,JY),IX=881,900)
CCCC 314  FORMAT(20F6.1)
CCCC      WRITE(KFILDO,314)(P(IX,JY),IX=881,900)
CCCC 316  CONTINUE
C
      DO 390 L=1,5
C
!$OMP PARALLEL DO DEFAULT(SHARED)
!$OMP&            PRIVATE(IX,JY,SUM,NCOUNT,IXS,JYS)
!$OMP&   SCHEDULE(DYNAMIC)
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.AND.
     1                            DIST(IX,JY).GT.4.5)THEN
C           THIS IS AN OCEAN OR INLAND WATER POINT THAT IS NOT MISSING,
C           AND IS ALSO MORE THAN 4.5 GRIDLENGTHS FROM THE CLOSEST
C           STATION.  THIS WILL, THEN, NOT SMOOTH OUT THE STATION
C           VALUE FOR INTERPOLATION OR FOR THE CLOSEST STATION.
C           A STATION WITHIN A SQUARE WILL BE LT 1.414 GRIDLENGTHS
C           OF ALL GRIDPOINTS OF THE SQUARE.  THIS SEEMS TO NOT
C           BE SENSITIVE TO THE EXACT VALUE OF 4.5.
C
         SUM=0.
         NCOUNT=0
C
         DO 360 JYS=MAX(1,JY-2),MIN(NY,JY+2)
         DO 359 IXS=MAX(1,IX-2),MIN(NX,IX+2)
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   
C        NOW SMOOTH WITHIN ONE GRIDPOINT ALONG THE OCEAN OR LAKE 
C        COASTS WITH CSTSM ON LAST PASS ONLY.
C
      IF(CSTSM.NE.0.)THEN
C
C           TRANSFER POINTS IN Q( , ) INTO C( , ), BECAUSE Q( , )
C           HAS ALREADY BEEN MODIFIED.  CANNOT SMOOTH INTO THE SAME
C           ARRAY.
C
         DO 425 JY=1,NY
         DO 424 IX=1,NX
         C(IX,JY)=Q(IX,JY)
 424     CONTINUE
 425     CONTINUE
C
!$OMP PARALLEL DO DEFAULT(SHARED)
!$OMP&            PRIVATE(IX,JY,IXE,JYE)
!$OMP& SCHEDULE(DYNAMIC,10)
C   
         DO 430  JY=2,NYM1
         DO 429  IX=2,NXM1
C
         IF(NINT(RMESH).EQ.1)THEN
C              THIS TEST FOR EFFICIENCY.  USUALLY RMESH = 1.
            IXE=IX
            JYE=JY
         ELSE
            IXE=NINT((IX-1)*RMESH)+1
C              IXE IS THE IX POSITION ON THE TERRAIN GRID.
            JYE=NINT((JY-1)*RMESH)+1
C              JYE IS THE JY POSITION ON THE TERRAIN GRID.
         ENDIF
C
         IF(SEALND(IXE,JYE).LT.3.5)THEN
C              THIS IS A WATER POINT.  TEST ON 3.5 TO AVOID NINT.
C
            IF(SEALND(IXE+1,JYE).GT.3.5.OR.
     1         SEALND(IXE-1,JYE).GT.3.5.OR.
     2         SEALND(IXE,JYE+1).GT.3.5.OR.
     3         SEALND(IXE,JYE-1).GT.3.5)THEN
C                 ONE OF THE SURROUNDING POINTS IS LAND.
               Q(IX,JY)=(C(IX,JY)
     1           +BQW*(C(IX-1,JY)+C(IX+1,JY)+C(IX,JY-1)+C(IX,JY+1)))/BPW
            ENDIF
C
         ELSE
C              THIS IS A LAND POINT.
C
            IF(SEALND(IXE+1,JYE).LT.3.5.OR.
     1         SEALND(IXE-1,JYE).LT.3.5.OR.
     2         SEALND(IXE,JYE+1).LT.3.5.OR.
     3         SEALND(IXE,JYE-1).LT.3.5)THEN
C                 ONE OF THE SURROUNDING POINTS IS WATER.
               Q(IX,JY)=(C(IX,JY)
     1           +BQW*(C(IX-1,JY)+C(IX+1,JY)+C(IX,JY-1)+C(IX,JY+1)))/BPW
            ENDIF
C
         ENDIF
C
 429     CONTINUE
 430     CONTINUE
C
!$OMP END PARALLEL DO
C
      ENDIF
C
      CALL TIMPR(KFILDO,KFILDO,'END ORSMTW          ')
C
 400  CONTINUE
      RETURN
      END