SUBROUTINE DDRAD2(KFILDO,CCALL,XP,YP,LTAG,LTAGPT,
     1                  LNDSEA,XDATA,NSTA,ND1,R,IQUAL,
     2                  NPASS,NPASRR,LAUGBO,MIXWL,MIXAB,VRAD,IER)
C
C        FEBRUARY  2019   GLAHN   MDL
C                                 COPIED FROM DDRAD
C        APRIL     2019   GLAHN   CHANGED NPASR TO NPASRR
C        DECEMBER  2019   GLAHN   CHANGED CALCULATION FOR LAND,
C                                 LIMITS RADIUS TO VRAD( ,NPASS)
C        FEBRUARY  2020   GLAHN   ADDED MIXWL AND MIXAB TO CALL;
C                                 ELIMINATED DISTANCE CHECKS BASED
C                                 ON R AND ON LTAG( )
C
C        PURPOSE 
C
C            TO ADJUST THE LAST PASS RADIUS OF EACH STATION TO 1
C            GRIDLENGTH LESS THAN THE DISTANCE TO THE CLOSEST STATION,
C            BUT NOT LESS THAN 1.8 AND NOT MORE THAN THE ORIGINAL
C            LAST PASS RADIUS.  THIS ALLOWS ALL 4 POINTS SURROUNDING
C            A STATION TO BE CORRECTED.  THIS IS NEEDED, BECAUSE
C            ITRPSX DOES NOT NECESSARILY RETURN THE GRIDPOINT VALUE
C            CLOSEST TO THE STATION BUT RATHER THE VALUE OF THE
C            GRIDPOINT WITH THE CLOSEST ELEVATION TO THE STATION.
C
C            TWO CLOSEST STATIONS ARE FOUND IN CASE THE 2ND
C            CLOSEST IS NEEDED FOR SOME PURPOSE.
C
C            DDRAD2 IS CALLED BEFORE BCD5, SO LTAG( ) IS NOT RELEVANT.
C
C            ADAPTED FROM DDRAD.
C
C            THE SEARCH ALGORITHM IS PATTERNED AFTER CLOS2.
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) = CALL LETTERS OF STATIONS (K=1,NSTA).
C                       (CHARACTER*8)  (INPUT)
C               XP(J) = X-POSITION OF STATION J ON GRID (J=1,NSTA).
C                       (INPUT)
C               YP(J) = Y-POSITION OF STATION J ON GRID (J=1,NSTA).
C                       (INPUT)
C             LTAG(J) = DON'T USE THIS STATION IF LTAG( ) GT 0
C                       (J=1,NSTA).  (THIS HAS NOT BEEN SET YET;
C                       DON'T USE IT.  (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           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)
C            XDATA(J) = THE DATUM FOR EACH STATION (J=1,ND1).  (INPUT)
C                NSTA = NUMBER OF STATIONS IN LIST.  THIS DOES NOT
C                       INCLUDE ANY TYPE 4 BOGUS.  (INPUT)
C                 ND1 = MAXIMUM NUMBER OF STATIONS THAT CAN BE DEALT
C                       WITH.  (INPUT)
C                R(J) = (R(J) J=1,6)= RADIUS READ FROM U405A.CN FILE.
C                       THE DEFAULT RADIUS OF INFLUENCE.  (INPUT)
C          IQUAL(K,I) = THE QUALITY VALUES FROM THE STATION DICTIONARY
C                       FOR FIVE POSSIBLE DATA TYPES (K=1,ND1) (I=1,5).
C                       (INPUT)
C               NPASS = NUMBER OF ANALYSIS PASSES.  (INPUT)
C              NPASRR = NUMBER OF THE PASS TO START MODIFICATION
C                       OF RADII.  (INPUT) 
C              LAUGBO = INDICATOR OF WHICH DATA TO USE IN CALCULATING
C                       RADII.  VALUES CORRESPOND TO LATGPT( ).
C                       0 = USE ONLY BASE DATA
C                       1 = USE 1ST PASS AUGMENTED DATA
C                       2 = USE ALL AUGMENTED DATA
C                       3 = USE ALL DATA, AUGMENTED AND BOGUS
C                       (INPUT)
C               MIXWL = GOVERNS HOW LAND WATER TYPES OF DATA ARE USED
C                       IN COMPUTING CLOSEST STATION:
C                       1 = KEEP TYPES SEPARATE.  THIS WOULD PROBABLY
C                           BE APPROPRIATE IF THERE WAS NO BLEEDING
C                           ACROSS TYPES IN THE ANALYSIS.
C                       0 = USE ALL TYPES (0, 3, 6, AND 9) TOGETHER IN
C                           COMPUTING NEAREST STATION.  THIS IS THE
C                           MOST SAFE AND SHOULD WORK EVEN IF THERE IS
C                           NO BLEEDING ACROSS WATER AND LAND TYPES.
C                       (INPUT)
C               MIXAB = GOVERNS HOW THE DIFFERENT TYPES OF DATA 
C                       (BASE, AUGMENTED, BOGUS) ARE USED:
C                       1 = KEEP TYPES SEPARATE.
C                       0 = USE BASE, AUGMENTED, BOGUS DATA TOGETHER
C                           WHEN FINDING CLOSEST STATION.  THIS IS
C                           THE MOST SAFE.
C                       (INPUT)
C           VRAD(K,J) = ((VRAD(K,J), J=1,6), K=1,NSTA) HOLDS THE
C                       VARIABLE RADII (INPUT) THEN MODIFIED.
C                       (INPUT/OUTPUT)
C                 IER = STATUS RETURN
C                         0 = GOOD.
C                SAV1 = DISTANCE SQUARED TO CLOSEST STATION.  (INTERNAL)
C                SAV2 = DISTANCE SQUARED TO 2ND CLOSEST STATION.
C                       (INTERNAL)
C              DISTSQ = DISTANCE (IN GRID UNITS) SQUARED BETWEEN TWO
C                       STATIONS.  (INTERNAL)
C           CCSTA1(K) = CALL LETTERS OF CLOSEST STATION.  (CHARACTER)
C                       (INTERNAL)
C           CCSTA2(K) = CALL LETTERS OF 2ND CLOSEST STATION.
C                       (CHARACTER) (INTERNAL)
C            NSTA1(K) = THE NUMBER IN THE LIST OF THE CLOSEST STATION.
C                       (INTERNAL)
C            NSTA2(K) = THE NUMBER IN THE LIST OF THE 2ND CLOSEST
C                       STATION.  (INTERNAL)
C        1         2         3         4         5         6         7 X
C
C        NONSYSTEM SUBROUTINES CALLED
C            NONE.
C
      CHARACTER*8 CCALL(ND1),CCSTA1,CCSTA2
C
      DIMENSION XP(ND1),YP(ND1),LTAG(ND1),LNDSEA(ND1),XDATA(ND1),
     1          LTAGPT(ND1),IQUAL(ND1,5)
      DIMENSION CCSTA1(ND1),CCSTA2(ND1)
C        CCSTA1( ) AND CCSTA2( ) ARE AUTOMATIC ARRAYS.
      DIMENSION NSTA1(ND1),NSTA2(ND1)
C        NSTA1( ) AND NSTA2( ) ARE AUTOMATIC ARRAYS.
      DIMENSION VRAD(ND1,6)
      DIMENSION R(6)
C
      CALL TIMPR(KFILDO,KFILDO,'START DDRAD2        ')
C
      IER=0
C
D     WRITE(KFILDO,105)NSTA,NPASS,NPASRR,LAUGBO,MIXWL,MIXAB,
D    1                 (R(J),J=1,6)
D105  FORMAT(/' IN DDRAD2--NSTA,NPASS,NPASRR,LAUGBO,MIXWL,MIXAB,',
D    1        '(R(J),J=1,6)',6I6,6F6.2)
C
D     DO 1051 K=1,NSTA
D     WRITE(KFILDO,1050)CCALL(K),XP(K),YP(K),(IQUAL(K,J),J=1,5)
D1050 FORMAT(' STATIONS, POSITIONS, AND QUALITY FLAGS',/,
D    1        (5X,A8,2X,2F8.2,5I4))
D1051  CONTINUE
C
      DO 150 K=1,NSTA
 106  NCOUNT=0
C        NCOUNT COUNTS THE NUMBER OF SEARCHES PER STATION.
C        UPDATED IF RADIUS HAS TO BE INCREASED.
      IF(XDATA(K).GT.9998.5)GO TO 150
C        DO NOT USE STATION WITH MISSING DATA.
      RR=R(1)
C        RR = SEARCH RADIUS.
C        TEMPORARY VALUE OF R(1) IN CASE IT NEEDS TO BE INCREASED.
      RSQ=RR*RR+.01
C        THE SMALL CONSTANT IS ADDED TO ASSURE A POINT IS NOT 
C        MISSED BECAUSE OF ROUNDOFF.
 110  SAV1=999999.
      SAV2=999999.
      CCSTA1(K)='        '
      CCSTA2(K)='        '
      NSTA1(K)=1
      NSTA2(K)=1
C        NSTA1( ) AND NSTA2( ) ARE SET TO 1 FOR SAFETY, AS THEY
C        ARE USED AS INDICES.
C
 120  DO 140 L=1,NSTA
      IF(XDATA(L).GT.9998.5)GO TO 140
C        DO NOT USE STATION WITH MISSING DATA.
      IF(L.EQ.K)GO TO 140
C        THIS STATEMENT WON'T SCREEN OUT BUT ONE.
C
      IF(MIXWL.EQ.1)THEN
C
         IF(LNDSEA(K).EQ.9.AND.LNDSEA(L).LE.3)GO TO 140
C           TYPE 9 USES TYPES 9 AND 6.
C
         IF(LNDSEA(K).EQ.3.AND.LNDSEA(L).NE.3)GO TO 140
C           ONLY TYPE 3 IS USED WITH ONLY TYPE 3, NOT TYPE 6.
C           THIS CHANGE MADE NOON 10/28/13.
C           (THIS STATEMENT HAD "C" AND WAS REMOVED 11/17/13.  THIS WOULD
C           HAVE HAD THE EFFECT OF USING ALL STATIONS FOR TYPE 3.)
C
         IF(LNDSEA(K).EQ.6.AND.LNDSEA(L).EQ.0)GO TO 140
C           TYPE 6 STATION WILL ACCEPT TYPES 3,6 AND 9.
C
         IF(LNDSEA(K).EQ.0.AND.LNDSEA(L).GT.0)GO TO 140
C           TYPE 0 ONLY USES TYPE 0.
      ENDIF
C
C        MAKE SURE ONLY STATIONS DESIGNATED BY LAUGBO ARE USED FOR 
C        NEIGHBORS.  EACH TYPE OF STATION IS TREATED THE SAME
C        FOR GETTING A NEIGHBOR.  IT IS THE POTENTIAL NEIGHBOR THAT
C        LAUGBO PERTAINS TO.
C
      IF(MIXAB.EQ.1)THEN
C
         IF(LAUGBO.EQ.0)THEN
            IF(LTAGPT(L).GT.0)GO TO 140
         ELSEIF(LAUGBO.EQ.1)THEN
            IF(LTAGPT(L).GT.1)GO TO 140
         ELSEIF(LAUGBO.EQ.2)THEN
            IF(LTAGPT(L).GT.2)GO TO 140
         ENDIF
C
      ENDIF
C
      DISTSQ=(XP(K)-XP(L))**2+(YP(K)-YP(L))**2
C
      IF(DISTSQ.LT.RSQ)THEN
         IF(SAV2.LE.DISTSQ)GO TO 140
         IF(SAV1.GT.DISTSQ)GO TO 130 
         SAV2=DISTSQ
         CCSTA2(K)=CCALL(L)
         NSTA2(K)=L
         GO TO 140
C
 130     SAV2=SAV1
         CCSTA2(K)=CCSTA1(K)
         NSTA2(K)=NSTA1(K)
         SAV1=DISTSQ
         CCSTA1(K)=CCALL(L)
         NSTA1(K)=L
      ENDIF
C
 140  CONTINUE
C
      IF(SAV2.GT.999998.5)THEN
C
D        WRITE(KFILDO,142)CCALL(K)
D142     FORMAT(/,' ###CANNOT FIND TWO CLOSEST STATIONS TO  =',A8,
D    1            ' IN DDRAD2.')
         NCOUNT=NCOUNT+1
C
         IF(NCOUNT.LT.5)THEN
            RR=RR*2.
            RSQ=RR*RR+.01
C
D           WRITE(KFILDO,143)RR
D143        FORMAT('     INCREASE RADIUS OF SEARCH TO ',F7.1,
D    1             ' GRIDLENGTHS.')
C
            GO TO 110
         ELSE
            WRITE(KFILDO,144)
 144        FORMAT('     CHANGE RADIUS TO 1.5 FOR THIS STATION.')
C              THIS SHOULD NEVER HAPPEN.
            DIST1=.8
            DIST2=.8
         ENDIF
C
      ELSE
         DIST1=SQRT(SAV1)
         DIST2=SQRT(SAV2)
      ENDIF
C 
      M=NPASS
C
C        THE VARIABLE RADIUS IS A FUNCTION OF THE DISTANCE TO
C        THE CLOSEST STATION.

C        THIS IS FOR THE LAST PASS.  A LAND/WATER DIFFERENCE IS
C        ALLOWED FOR BELOW, BUT IS THE SAME FOR NOW.
C
      IF(LNDSEA(K).EQ.9)THEN
         VRADSV=VRAD(K,M)
         VRAD(K,M)=MIN(MAX(DIST1-1.,1.5),VRAD(K,M))
      ELSE
         VRADSV=VRAD(K,M)
         VRAD(K,M)=MIN(MAX(DIST1-1.,1.5),VRAD(K,M))
      ENDIF
C
CCCCD     IF(CCALL(K).EQ.'PAMO    '.OR.CCALL(K).EQ.'PASM    ')THEN
D        WRITE(KFILDO,1450)K,CCALL(K),CCSTA1(K),CCSTA2(K),LNDSEA(K),
D    1                     DIST1,DIST2,
D    1                    (VRAD(K,J),J=1,6),VRADSV

D1450    FORMAT(' AT 1450--K,CCALL(K),CCSTA1(K),CCSTA2(K),LNDSEA(K),',
D    1         'DIST1,DIST2,',
D    1         '(VRAD(K,J),J=1,6),VRADSV',/,
D    2          I6,2X,A8,2X,A8,2X,A8,I2,9F7.1)
CCCCD     ENDIF
C
 150  CONTINUE
C
D     WRITE(KFILDO,159)(K,CCALL(K),XDATA(K),LTAG(K),LTAGPT(K),
D    1                 (VRAD(K,M),M=1,6),K=1,NSTA)
D159  FORMAT(/' AT 159 IN DDRAD2--K,CCALL(K),XDATA(K),LTAG(K),',
D    1        'LTAGPT(K),',
D    2        '(VRAD(K,M),M=1,6)',/,(I6,2X,A8,F8.1,2I4,6F8.2))
C
      CALL TIMPR(KFILDO,KFILDO,'END   DDRAD2        ')
      RETURN
      END