SUBROUTINE SETGPT(KFILDO,CCALL,NAME,LTAG,LTAGPT,LNDSEA, 1 XP,YP,NSTA, 2 NAREA,NEAR,NX,NY,MESH,SEALND,NXE,NYE,MESHE, 3 ISETG,IER) C C FEBRUARY 2019 GLAHN MDL MOS-2000 C MODIFIED FROM SETPNT C APRIL 2019 GLAHN REPLACED GO TO 110 WITH GO TO 109 C IN 'IF(J.LT.1.OR.J.GT.NY)GO TO 110' C C PURPOSE C FOR EVERY USABLE DATA POINT, WHOSE POSITION ON C A GRID NEAR( , ) IS REPRESENTED BY XP( ) AND YP( ), SET C THE VALUE OF THE CLOSEST GRIDPOINT IN NEAR( , ) TO 1 C (ISETG = 1) OR THE CLOSEST 4 GRIDPOINTS IN NEAR( , ) C (ISETG = 2)TO 1. OTHERWISE THE GRIDPIONT IS SET TO 0, C PROVIDED: C (1) THE DATA POINT IS WITHIN THE GRID. C (2) THE DATA POINT IS NOT AN AUGMENTED OR BOGUS VALUE. C (3) THE DATA POINT WAS NOT TOSSED ON THE LAST ANALYSIS C PASS. c IN ADDITION, POINTS IN SIBERIA ARE SET TO 1 TO INDICATE C NO SMOOTHING THERE. C C THIS PLACEMENT IS COMPATIBLE WITH THE GRIDPOINT VALUE C RETURNED BY INTRPL. A PLACEMENT IS MADE IF THE STATION C IS OUTSIDE THE GRID BUT WITHIN 1/2 (SOMETIMES .707) C GRIDLENGTHS OF THE NEAREST GRIDPOINT. C C FATAL ERRORS, IER: C NONE. 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 CCALL(K) = STATION CALL LETTERS (K=1,NSTA) (INPUT) C NAME(K) = STATION NAMES (K=1,NSTA) (INPUT) (NOT REALLY C USED.) C LTAG(K) = DENOTES USE OF DATA CORRESPONDING TO CCALL(K). C +4 = TOSSED IN A PREVIOUS OBS RUN AND C MAINTAINED DOWNSTREAM. C +3 = TOSSED IN A PREVIOUS LAMP RUN, AND C MAINTAINED DOWNSTREAM. C +2 = NOT USED FOR ANY PURPOSE. C +1 = PERMANENTLY DISCARDED FOR THE VARIABLE C BEING ANALYZED. INCLUDES DATA FAR C OUTSIDE THE GRID, AS DEFINED BY RMAX C 0 = GOOD DATA, USE IT. C -1 = DO NOT USE ON THIS PASS. C -3 = ACCEPT THIS STATION ON EVERY PASS. THIS C FEATURE MAY OR MAY NOT BE IMPLEMENTED IN C THE CALLING PROGRAM. 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 LNDSEA(K) = LAND/SEA INFLUENCE FLAG FOR EACH STATION C (K=1,ND1). 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) (NOT ACTUALLY USED.) C XP(K) = THE X POSITION FOR STATION K (K=1,NSTA) ON C THE GRID P( , ). (INPUT) C YP(K) = THE Y POSITION FOR STATION K (K=1,NSTA) ON C THE GRID P( , ). (INPUT) C NSTA = THE NUMBER OF DATA VALUES IN DATA( ), LTAG( ), C XP( ), AND YP( ). (INPUT) C NEAR(IX,JY) = GRID (IX=1,NX) (JY=1,NY). (OUTPUT) C NX = NUMBER OF GRIDPOINTS IN THE XI (LEFT TO RIGHT) C DIRECTION IN P( , ). (INPUT) C NY = NUMBER OF GRIDPOINTS IN THE JY (BOTTOM TO TOP) C DIRECTION IN P( , ). (INPUT) C MESH = THE NOMINAL MESH LENGTH OF THE CURRENT GRID. 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) (NOT ACTUALLY USED.) C NXE = X-EXTENT OF SEALND( , ), AT MESH LENGTH C MESHE. (INPUT) C NYE = Y-EXTENT OF SEALND( , ), AT MESH LENGTH C MESHE. (INPUT) C MESHE = THE NOMINAL MESH LENGTH OF SEALND( , ) GRID. C (INPUT) C ISETG = INDICATES WHAT GRIDPOINTS TO SET TO 1, WITH C RESPECT TO THE STATION. C 0 = NONE C 1 = THE CLOSEST GRIDPOINT TO THE STATION. C 2 = ALL 4 POINTS SURROUNDING THE STATION. C (THIS COMES IN THROUGH SPOTRM CONST( ) = C NOPTN*100.) C (INPUT) C IER = ERROR RETURN. C 0 = GOOD RETURN. C 777 = WHEN ISETG NE 0, 1, OR 2. C (OUTPUT) C 1 2 3 4 5 6 7 X C CHARACTER*8 CCALL(NSTA) CHARACTER*20 NAME(NSTA) C DIMENSION XP(NSTA),YP(NSTA),LTAG(NSTA),LTAGPT(NSTA), 1 LNDSEA(NSTA) DIMENSION NEAR(NX,NY) DIMENSION SEALND(NXE,NYE) DIMENSION KOUNT(9) C CALL TIMPR(KFILDO,KFILDO,'START SETGPT ') IER=0 C CCCC WRITE(KFILDO,101)ISETG,NX,NY CCCC 101 FORMAT(/' IN SETGPT--ISETG,NX,NY',3I6 C C ASSURE MESH = MESHE. C IF(MESH.NE.MESHE)THEN WRITE(KFILDO,1035)MESHE,MESH 1035 FORMAT(/' ****MESHE IS NOT EQUAL TO MESH IN SETGPT.', 1 ' ABORTED SETGPT.') IER=777 GO TO 200 ENDIF C C INITIALIZE NEAR( , ) TO 0. . C DO 105 JY=1,NY DO 104 IX=1,NX NEAR(IX,JY)=0 104 CONTINUE 105 CONTINUE C IF(ISETG.EQ.1)THEN C C ************************************************* C C THIS BRANCH FOR ISETG = 1. C C ************************************************** C WRITE(KFILDO,106) 106 FORMAT(' CLOSEST GRIDPOINT TO STATION IS SET = 1.', 1 ' WHEN STATION IS NOT BOGUS, AUGMENTED, OR TOSSED.') C DO 120 K=1,NSTA C IF((LTAG(K).EQ.0.AND.LTAGPT(K).EQ.0))THEN DX=999999. IX=XP(K) JY=YP(K) C IX,JY IS THE LL CORNER OF THE BOX BOUNDING THE POINT. C LOOK AT ALL FOUR CORNERS AROUND THE POINT. C DO 110 I=IX,IX+1 C IF(I.LT.1.OR.I.GT.NX)GO TO 110 C THE DATA POINT IS NOT WITHIN THE GRID. C DO 109 J=JY,JY+1 C IF(J.LT.1.OR.J.GT.NY)GO TO 109 C THE DATA POINT IS NOT WITHIN THE GRID. D=(XP(K)-I)**2+(YP(K)-J)**2 C IF(D.LT.DX)THEN DX=D IXX=I JYY=J ENDIF C 109 CONTINUE C 110 CONTINUE C IF(DX.EQ.999999.)THEN WRITE(KFILDO,111)CCALL(K),LNDSEA(K),XP(K),YP(K) 111 FORMAT(' STATION ',2X,A8,' OF TYPE',I4, 1 ' HAS NO CLOSE GRIDPOINT IN THE GRID.', 2 ' XP(K) AND YP(K) ARE:',2F8.2) GO TO 120 ELSE NEAR(IXX,JYY)=1 ENDIF C ENDIF C 120 CONTINUE C ELSEIF(ISETG.EQ.2)THEN C C ************************************************* C C THIS BRANCH FOR ISETG = 2. C C ************************************************** C WRITE(KFILDO,130) 130 FORMAT(' ALL 4 GRIDPOINTS SURROUNDING STATION SET TO 1', 1 ' WHEN STATION IS NOT BOGUS, AUGMENTED OR TOSSED.') C DO 140 K=1,NSTA C IF((LTAG(K).EQ.0.AND.LTAGPT(K).EQ.0))THEN C THIS IS A DATA POINT TO USE. IT WASN'T TOSSED AND IT C IS NOT AUGMENTED OR BOGUS. DX=999999. IX=XP(K) JY=YP(K) C IX,JY IS THE LL CORNER OF THE BOX BOUNDING THE POINT. C SET ALL FOUR CORNERS AROUND DATA( ). C IF(IX.GE.1.AND.IX.LE.NX-1.AND. 1 JY.GE.1.AND.JY.LE.NY-1)THEN NEAR(IX,JY)=1 NEAR(IX+1,JY)=1 NEAR(IX,JY+1)=1 NEAR(IX+1,JY+1)=1 ELSE WRITE(KFILDO,135)CCALL(K),LNDSEA(K),XP(K),YP(K) 135 FORMAT(' STATION ',2X,A8,' OF TYPE',I4, 1 ' DOES NOT HAVE 4 GRIDPOINTS WITHIN THE GRID.', 2 ' XP(K) AND YP(K) ARE:',2F8.2) ENDIF C ENDIF C 140 CONTINUE C ELSEIF(ISETG.EQ.0)THEN C WHEN ISETG = 0, THE GRID IN NEAR( , ) IS LEFT = 0 EVERYWHERE. WRITE(KFILDO,145) 145 FORMAT(' SMOOTHING AT DATA POINTS WILL BE ALLOWED IN SMOTHG.', 1 ' NEAR( , ) SET = ZERO IN SETGPT.') ELSE WRITE(KFILDO,150)ISETG 150 FORMAT(/' ISETG =',I4,' IS NOT 0, 1, OR 2 IN SETGPT.', 1 ' ABORTED SETGPT.') IER=777 GO TO 200 ENDIF C C C ************************************************* C C THIS BRANCH TO TAKE CARE OF SIBERIA ON NBM 3-KM GRID. C C ************************************************** C IF(NAREA.EQ.2)THEN C DO 160 JY=757,NY DO 159 IX=1,609 C IF(SEALND(IX,JY).GT.8.5)THEN NEAR(IX,JY)=1 ENDIF C 159 CONTINUE 160 CONTINUE C ENDIF C CALL TIMPR(KFILDO,KFILDO,'END SETGPT ') 200 RETURN END