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