SUBROUTINE CLIP(KFILDO,P,NX,NY,MESH,CPNDFD,NXE,NYE,MESHE,IER)
C
C        JUNE     2006   GLAHN   TDL   MOS-2000
C                                ADAPTED FROM THINER FOR LAMP
C        MARCH    2007   GLAHN   CHANGED EQ.0 TO LT..5
C        AUGUST   2008   GLAHN   CORRECTED FORMAT 105
C        OCTOBER  2008   COSGROVE   ADDED COMMA FOR IBM COMPILE
C
C        PURPOSE
C           TO SET VALUES IN P( , ) TO 9999 WHEN THEY CORRESPOND TO
C           GRIDPOINTS IN CPNDFD( , ) EQUAL TO ZERO.  THE SIZE OF
C           THE GRIDS IN P( , ) AND CPNDFD( , ) NEED NOT BE THE SAME
C           SIZE OR GRIDLENGTH.  HOWEVER, THE RULES FOR GRIDS USED
C           IN U155 MUST APPLY.  NORMALLY, FOR CLIP TO BE ENTERED,
C           THE GRIDS WOULD NOT BE AT THE SAME GRID LENGTH.  THE
C           CLIPPING GRID MUST HAVE A GRIDLENGTH LESS THAN (OR EQUAL
C           TO) THE  GRIDLENGTH OF THE GRID TO CLIP.
C           
C        DATA SET USE
C            KFILDO    - UNIT NUMBER OF OUTPUT (PRINT) FILE.  (OUTPUT)
C
C        VARIABLES 
C
C              KFILDO = UNIT NUMBER OF OUTPUT (PRINT) FILE.  (INPUT)
C            P(IX,JY) = THE INPUT AND OUTPUT GRID (IX=1,NX) (JY=1,NY).
C                       (INPUT/OUTPUT)
C                  NX = THE SIZE OF P( , ) IN THE IX DIRECTION.
C                       (INPUT)
C                  NY = THE SIZE OF P( , ) IN THE JY DIRECTION.
C                       (INPUT)
C                MESH = MESH LENGTH OF P( , ).  (INPUT)
C       CPNDFD(IX,JY) = THE GRID HOLDING THE MASK (IX=1,NXE) (JY=1,NYE).
C                       (INPUT)
C                 NXE = THE SIZE OF CPNDFD( , ) IN THE IX DIRECTION.
C                       (INPUT)
C                 NYE = THE SIZE OF CPNDFD( , ) IN THE JY DIRECTION.
C                       (INPUT)
C               MESHE = MESH LENGTH OF CPNDFD( , ).  (INPUT)
C                 IER = RETURN CODE.
C                         0 = GOOD RETURN.
C                       777 = ERROR. IN MESH OR GRID SIZES.
C        1         2         3         4         5         6         7 X
C
C        NONSYSTEM SUBROUTINES USED 
C            NONE
C            
      DIMENSION P(NX,NY)
      DIMENSION CPNDFD(NXE,NYE)
C
      IER=0
CD     CALL TIMPR(KFILDO,KFILDO,'START CLIP          ')
C
      IF(MESHE.GT.MESH)THEN
         WRITE(KFILDO,105)MESHE,MESH
 105     FORMAT(/' ****MESHE =',I5,' IS GREATER THAN MESH IN CLIP =',I5,
     1           '.  THE MESH LENGTH OF THE CLIPPING GRID MUST NOT BE',
     2           ' GREATER THAN THE GRID TO CLIP.',/,
     3           '  CLIPPING NOT DONE.  PROCEEDING.')
         IER=777
         GO TO 130
      ENDIF
C
      NRATIO=MESH/MESHE
CD     WRITE(KFILDO,107)NRATIO
CD107  FORMAT(/' IN CLIP AT 107--NRATIO',I6)
C
C        CHECK FOR ODD DIMENSIONS OF THE INPUT GRID.
C
      IF(MOD(NX,2).EQ.0.OR.
     1   MOD(NY,2).EQ.0)THEN
         WRITE(KFILDO,110)NX,NY
 110     FORMAT(/' ****NX =',I6,' OR NY =',I6,' IN CLIP IS NOT',
     1           ' ODD.  CLIPPING NOT DONE; THE SAME GRID IS RETURNED.')
         IER=777
         GO TO 130
      ENDIF
C
C        DO THE CLIPPING.
C
      DO 120 JY=1,NY  
      JYE=(JY-1)*NRATIO+1
C
      DO 119 IX=1,NX
      IXE=(IX-1)*NRATIO+1
C
      IF(CPNDFD(IXE,JYE).LT..5)THEN
         P(IX,JY)=9999.
      ENDIF
C          
 119  CONTINUE
C
 120  CONTINUE
C
 130  RETURN
      END