c

c     file name    gxnepat.htm             031104
C**** SUBROUTINE GXNEPA is called from group 13 of GREX3, and is
C     entered when the patch name begins with character 'NE', which
C     stands for "neighbour".
C     The third character of the name (P, M, O, N, S, E, W, H or L)
C     also has significance, as has also the entry (GRNDx, where x
C     is one of 1, 2, 3, 4, 5, 6, 7, or 8).
C     These significances are explained in annotations to the coding
C     below.
C
C.... The library cases 118, 790-801 make the use of it;
C     also the CLDA (conservative low-dispersion algorithm), and the
C     PLANT case z110.
C
      SUBROUTINE GXNEPA(NPAT)
      INCLUDE 'farray'
      INCLUDE 'grdloc'
      INCLUDE 'satgrd'
      COMMON /IGE/IXF,IXL,IYF,IYL,IREG,NZSTEP,IGR,ISC,IRUN,IZSTEP,ITHYD,
     1       ISWEEP,ISTEP,INDVAR,VAL,CO,NDIREC,WALDIS,PATGEO,IGES20(6)
      INTEGER VAL,CO,WALDIS,PATGEO
      COMMON /NAMFN/NAMFUN,NAMSUB
      COMMON/ASLP/IND
      CHARACTER*6 NAMFUN,NAMSUB
      CHARACTER*1 NP3,NP4
C
      NAMSUB = 'GXNEPA'
      NP3=NPAT(3:3)
      NP4=NPAT(4:4)
      IF(NP3.EQ.'P') THEN
C.... Neighbour has a higher value of INDVAR
        IF(NP4.EQ.'5') THEN
          IND=INDVAR+5
        ELSEIF(NP4.EQ.'4') THEN
          IND=INDVAR+4
        ELSEIF(NP4.EQ.'3') THEN
          IND=INDVAR+3
        ELSEIF(NP4.EQ.'2') THEN
          IND=INDVAR+2
        ELSE
          IND=INDVAR+1
        ENDIF
      ELSEIF(NP3.EQ.'M') THEN
C.... Neighbour has a lower value of INDVAR
        IF(NP4.EQ.'5') THEN
          IND=INDVAR-5
        ELSEIF(NP4.EQ.'4') THEN
          IND=INDVAR-4
        ELSEIF(NP4.EQ.'3') THEN
          IND=INDVAR-3
        ELSEIF(NP4.EQ.'2') THEN
          IND=INDVAR-2
        ELSE
          IND=INDVAR-1
        ENDIF
      ELSEIF(NP3.EQ.'O') THEN
        IF(NP4.EQ.'2') THEN
          IND=OLD(INDVAR+2)
        ELSEIF(NP4.EQ.'1') THEN
          IND=OLD(INDVAR+1)
        ELSE
          IND=OLD(INDVAR)
        ENDIF
C.... Neighour is the variable itself, one cell away
      ELSEIF(NP3.EQ.'N') THEN
        IND=NORTH(INDVAR)
      ELSEIF(NP3.EQ.'S') THEN
        IND=SOUTH(INDVAR)
      ELSEIF(NP3.EQ.'E') THEN
        IND=EAST(INDVAR)
      ELSEIF(NP3.EQ.'W') THEN
        IND=WEST(INDVAR)
      ELSEIF(NP3.EQ.'H') THEN
        IND=HIGH(INDVAR)
      ELSEIF(NP3.EQ.'L') THEN
        IND=LOW(INDVAR)
      ELSE
        IND=OLD(INDVAR-2)
      ENDIF
C.... If VAL = GRND1, GRND2, GRND3, GRND4, GRND5, GRND6, GRND7, GRND8,
c           or OLDNE, NORNE, SOUNE, EASNE, WESNE, HIGNE, LOWNE, LOCNE
C     then ISC= 13,    14,    15,    16,    17,    18,    19,    20
C.... Neighbour has a different INDVAR and a different location
      IF(ISC.EQ.13) THEN
        IND=OLD(IND)
      ELSEIF(ISC.EQ.14) THEN
        IND=NORTH(IND)
      ELSEIF(ISC.EQ.15) THEN
        IND=SOUTH(IND)
      ELSEIF(ISC.EQ.16) THEN
        IND=EAST(IND)
      ELSEIF(ISC.EQ.17) THEN
        IND=WEST(IND)
      ELSEIF(ISC.EQ.18) THEN
        IND=HIGH(IND)
      ELSEIF(ISC.EQ.19) THEN
        IND=LOW(IND)
      ELSEIF(ISC.EQ.20) THEN
        IND=IND
      ENDIF
      IF(ISC.EQ.10 .OR. ISC-12.EQ.9) RETURN
      CALL FN0(VAL,IND)
      NAMSUB = 'gxnepa'
      END
c