SUBROUTINE BLEND2(KFILDO,P,NX,NY,MESH,
     1                  SEALND,NXE,NYE,MESHE,GUESS,NBLEND,
     2                  NPROJ,ORIENT,XLAT,
     3                  ALATL,ALONL,ISTOP,IER)
C
C        SEPTEMBER 2016   GLAHN   MDL   MOS-2000
C                                 REVISED FROM BLEND
C        NOVEMBER  2016   GLAHN   REVISED TO KEEP FG FOR BC ISLAND
C                                 ALAT, ALON PULLED FROM CALL
C
C        PURPOSE
C            TO REPLACE A FIRST GUESS IN P( , ) WITH A CONSTANT
C            GUESS OVER LAND POINTS SIGNIFIED BY EQ 9 IN SEALND( , )
C            WHEN APPROXIMATELY NORTH OF SAN DIEGO (KSAN) ANE EAST
C            OF CWRO ON BC ISLAND.  THIS USES MODEL OVER ALL WATER
C            AND LAND IN MEXICO AND THE CARRIBEAN AND THE NW BC
C            ISLAND.  MESHE MUST = MESH, NXE = NX, AND NYE = NY.
C
C            SPECIFICALLY, THE CONSTANT IS PLACED AT ALL GRID POINTS
C            WITH JY GT THE GRID ROW THROUGH ALAT1 = 32.73 AND
C            ALON1 = 117.17, ALL GRIDPOINTS WITH IX GT THE GRID COLUMN
C            THROUGH ALAT2 = 54.17 AND ALON2 = 131.60.
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 FIRST GUESS FIELD (IX=1,NX) (JY=1,NY), 
C                       WHERE NX AND NY ARE THE SIZE OF THE GRID.
C                       COMES IN AS DMO, AND A PORTION OF THE GRID
C                       IS REPLACED WITH A CONSTANT.)  (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(J) = THE LAND/SEA MASK (J=1,NXE*NYE).
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               GUESS = CONSTANT TO USE TO REPLACE P( , ) WHEN SEALND( , )
C                       EQ 9.  (INPUT)
C              NBLEND = DEFINES HOW INPUT GRID FOR IFSTGS = 2 OR 3 IS
C                       POSSIBLY BLENDED WITH A CONSTANT
C                       0 = DISABLE.  DO NOT MODIFY P( , ).
C                       1 = WHEN IGUESS = 2 OR 3, USE THAT GRID ONLY
C                           OVER WATER AS DEFINED BY THE LAND/SEA MASK
C                           SEALND( , ) = 0, AND USE THE AVERAGE OF THE
C                           DATA TO BE ANALYZED OVER LAND.
C                       2 = THE SAME AS 1, EXCEPT THE MODEL IS USED
C                           OVER LAND ONLY SOUTH OF LAT/LON = ALAT1/ALON1,
C                           (WHICH IS EXPECTED TO BE THE LAT/LON OF
C                           SAN DIEGO) AND WEST OF LAT/LON = ALAT2/ALON2
C                           (WHICH IS EXPECTED TO BE BETWEEN MAINLAND
C                           CANADA AND THE LARTE ISLAND TO THE NORTH
C                           AND WEST).
C                       (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 W LONGITUDE, PARALLEL TO GRID
C                       COLUMNS, IN DEGREES.  (INPUT)
C                XLAT = N LATITUDE AT WHICH THE MESH LENGTH APPLIES.
C                       (INPUT)
C               ALATL = LATITUDE OF LL CORNER OF GRID IN P( , ).
C                       (INPUT)
C               ALONL = LONGITUDE OF LL CORNER OF GRID IN P( , ).
C                       (INPUT)
C               ISTOP = INCREMENTED WHEN THERE IS AN ERROR.
C                       (INPUT/OUTPUT)
C                 IER = RETURN CODE.
C                         0 = GOOD RETURN.
C                       777 = ERROR.  DIAGNOSTIC PRINTED, ISTOP
C                             INCREMENTED.  NO CHANGE MADE TO P( , ).
C                       (OUTPUT)
C               ALAT1 = LATITUDE IN DEGREES OF THE POINT BELOW WHICH
C                       THE MODEL FG IS USED OVER LAND.  (INPUT)
C               ALON1 = LONGITUDE (WEST) IN DEGREES OF THE POINT BELOW
C                       WHICH THE MODEL FG IS USED OVER LAND.  (INPUT)
C               ALAT2 = LATITUDE IN DEGREES OF THE POINT WEST OF WHICH
C                       THE MODEL FG IS USED OVER LAND.  (INPUT)
C               ALON2 = LONGITUDE (WEST) IN DEGREES OF THE POINT WEST OF
C                       WHICH THE MODEL FG IS USED OVER LAND.  (INPUT)
C        1         2         3         4         5         6         7 X
C
      DIMENSION P(NX,NY)
      DIMENSION SEALND(NXE,NYE)
C
      DATA ALAT1/ 32.73/,
     1     ALON1/117.17/,
     2     ALAT2/ 54.17/,
     3     ALON2/131.60/
C
      CALL TIMPR(KFILDO,KFILDO,'START BLEND2        ')
C
      IF(MESHE.EQ.MESH.AND.NXE.EQ.NX.AND.NYE.EQ.NY)THEN
C
         IF(NBLEND.EQ.2)THEN
C
            IF(NPROJ.EQ.3.OR.NPROJ.EQ.5.OR.NPROJ.EQ.7)THEN
C                 DUPLICATE CHECKING NPROJ HERE TO ELIMINATE A BECKY.
C
C                 COMPUTE ACTUAL MESH LENGTH XMESH FROM NOMINAL 
C                 MESH LENGTH MESH.     
C
               CALL ACTUAL(KFILDO,MESH,TRASH,XMESH,NPROJ,IER)
C
CCCC               WRITE(KFILDO,103)NX,NY,NXE,NYE,MESH,MESHE,GUESS,
CCCC     1                          ALATL,ALONL,XMESH,ORIENT,XLAT
CCCC 103           FORMAT(/' IN BLEND2--NX,NY,NXE,NYE,MESH,MESHE,GUESS',
CCCC     1                 'ALATL,ALONL,XMESH,ORIENT,XLAT',/,
CCCC     2                 6I8,6F12.4)
C
               IF(IER.NE.0)THEN
                  WRITE(KFILDO,104)
 104              FORMAT(/'    FATAL ERROR IN BLEND2 AT 104')
                  CALL W3TAGE('BLEND2')
                  STOP 104
               ENDIF
C
C                 FIND THE XI1,YJ1 POSITION OF LAT/LON = ALAT1/ALON1
C                 AND  THE XI2,YJ2 POSITION OF LAT/LON = ALAT2/ALON2.
C
               IF(NPROJ.EQ.3)THEN
                  CALL LMLLIJ(KFILDO,ALAT1,ALON1,XMESH*1000.,ORIENT,
     1                        XLAT,ALATL,ALONL,XI1,YJ1)
                  CALL LMLLIJ(KFILDO,ALAT2,ALON2,XMESH*1000.,ORIENT,
     1                        XLAT,ALATL,ALONL,XI2,YJ2)
               ELSEIF(NPROJ.EQ.5)THEN
                  CALL PSLLIJ(KFILDO,ALAT1,ALON1,XMESH*1000.,ORIENT,
     1                        XLAT,ALATL,ALONL,XI1,YJ1)
                  CALL PSLLIJ(KFILDO,ALAT2,ALON2,XMESH*1000.,ORIENT,
     1                        XLAT,ALATL,ALONL,XI2,YJ2)
               ELSEIF(NPROJ.EQ.7)THEN
                  CALL MCLLIJ(KFILDO,ALAT1,ALON1,XMESH*1000.,XLAT,
     1                        ALATL,ALONL,XI1,YJ1)
                  CALL MCLLIJ(KFILDO,ALAT2,ALON2,XMESH*1000.,XLAT,
     1                        ALATL,ALONL,XI2,YJ2)
C
               ENDIF
C
               WRITE(KFILDO,105)NINT(YJ1),NINT(XI2),GUESS
 105           FORMAT(/' FIRST GUESS IS A BLEND OF A GRID OVER ALL',
     1                 ' WATER AND OVER LAND SOUTH OF JY =',I4,
     2                 ' OR WEST OF IX = ',I4,
     3                 ' AND A CONSTANT OTHERWISE =',F7.2)
C
               DO 114 JY=1,NY
               DO 113 IX=1,NX
C
               IF((SEALND(IX,JY).GT.8.5).AND.
     1                        (JY.GT.NINT(YJ1).AND.IX.GT.NINT(XI2)))THEN
C
C                    THIS IS A LAND POINT AND NORTH OF 
C                    ALAT1 AND EAST OF ALON2.
C
                  IF(P(IX,JY).NE.9999.)THEN
C                      FIRST GUESS MAY HAVE MISSING VALUES IN LAND AREAS.
C                       IF SO, LEAVE THEM MISSING.
                     P(IX,JY)=GUESS
                  ENDIF
C
C                 NO CHANGE IS MADE TO P( , ) FOR A WATER POINT OR LAND
C                 POINT SOUTH OF LAT/LON = ALAT1,ALON1. OR WEST OF
C                 LAT/LON = ALAT2/ALON2.
               ENDIF
C
 113           CONTINUE
 114           CONTINUE
C
            ELSE
               WRITE(KFILDO,116)NPROJ
 116           FORMAT(/' ****MAP PROJECTION NUMBER NPROJ =',I3,
     1                 ' NOT 3, 5, OR 7.',
     2                 ' FATAL ERROR IN BLEND2 AT 116.')
               CALL W3TAGE('BLEND2')
               STOP 116
            ENDIF
C
         ELSE
C           
C              THIS ROUTINE WAS ENTERED MISTAKENLY.  NBLEND NE 2.
C
            WRITE(KFILDO,120)NBLEND
 120        FORMAT(' ****NBLEND =',I4,' NE 2 IN BLEND2',
     1             ' FATAL ERROR IN BLEND2 AT 120.')
               CALL W3TAGE('BLEND2')
               STOP 120
         ENDIF
C
      ELSE
C
C           MESH AND SIZE OF GRID IN P( , ) AND LAND/WATER MASK DO
C           NOT AGREE.
C
         WRITE(KFILDO,130)MESH,MESHE,NX,NXE,NY,NYE
 130     FORMAT(' ****GRID IN P( , ) DOES NOT MATCH LAND/WATER',
     1          ' MASK.'/
     2          '     MESH =',I6,'    MESHE =',I6/
     3          '     NX   =',I6,'    NXE   =',I6/  
     4          '     NY   =',I6,'    NYE   =',I6/,
     5          '     FATAL ERROR IN BLEND2 AT 130.')
         CALL W3TAGE('BLEND2')
         STOP 130
      ENDIF
C
      RETURN
      END