SUBROUTINE VISFRQ(KFILDO,XDATA,NSTA,ISTOP,IER)
C
C        MARCH     2011   GLAHN   MDL   MOS-2000
C                                 CODE FROM VISMBO
C        DECENBER  2014   GLAHN   ACCOUNTED FOR MISSING DATA
C        FEBRUARY  2015   GLAHN   DEFINED VISMAX; CAPPED VIS AT MAXVIS
C        FEBRUARY  2015   GLAHN   REDEFINED VISMAX 10. VICE 10.01 
C        NOVEMBER  2018   HUANG   CHANGED MAXIMUM VISIBILITY FROM 
C                                 10. to 10.08 FOR IMAGE PRODUCTION
C                                 PURPOSES.
C        
C
C        PURPOSE
C            TO CAP THE VISIBILITIES AT VISMAX, SET = 10.01, AND
C            TO COMPUTE THE FREQUENCIES OF VISIBILITY OBSERVATIONS.
C            THIS IS TO ALLOW COMPARISON OF FORECAST FREQUENCIES
C            WITH ACTUAL FREQUENCIES.
C
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            XDATA(K) = VISIBILITIES IN MILES. (K=1,NSTA). (INPUT)
C                NSTA = NUMBER OF VALUES BEIN PROCESSED. THE NUMBER 
C                       OF VALUES IN XDATA( ).  (INPUT)
C               ISTOP = INCREMENTED BY ONE ON ERROR.  (INPUT/OUTPUT)
C                 IER = ERROR CODE. 
C                       0 = GOOD RETURN.
C                       (OUTPUT)
C              VISMAX = SET AT 10 MILES.  (INTERNAL)
C        1         2         3         4         5         6         7 X
C 
C        NONSYSTEM SUBROUTINES USED 
C            NONE
      DIMENSION XDATA(NSTA)
      DIMENSION FREQ(15),IFREQ(15),RFREQ(15)
      DATA FREQ/ .5,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11,12.,15.,999./
      DATA VISMAX/10.08/
C
D     CALL TIMPR(KFILDO,KFILDO,'START VISFRQ        ')
      IER=0
C
      DO 200 J=1,15
      IFREQ(J)=0
 200  CONTINUE
C
      TOTAL=0.
C         
      DO 220 K=1,NSTA
C
      IF(XDATA(K).GT.9998.)THEN
         GO TO 220
      ELSE
         XDATA(K)=MIN(XDATA(K),VISMAX)
C
         DO 218 J=1,15
C
         IF(XDATA(K).LE.FREQ(J))THEN
            IFREQ(J)=IFREQ(J)+1
            GO TO 219
         ENDIF
C
 218     CONTINUE
C
 219     TOTAL=TOTAL+1
      ENDIF
C
 220  CONTINUE
C
      IF(TOTAL.EQ.0.)THEN
         WRITE(KFILDO,225)
 225     FORMAT(/' ERROR IN VISFRQ.  TOTAL = 0.')
         ISTOP=ISTOP+1
         GO TO 240
      ENDIF
C
      DO 230 J=1,15
      RFREQ(J)=IFREQ(J)/TOTAL
 230  CONTINUE
C
      WRITE(KFILDO,232)(FREQ(J),J=1,15)
 232  FORMAT(/' LE MILES   ',15F7.2,'    TOTAL')
      WRITE(KFILDO,233)(IFREQ(J),J=1,15),NINT(TOTAL)
 233  FORMAT(' FREQUENCIES',15I7,I9)
      WRITE(KFILDO,234)(RFREQ(J),J=1,15)
 234  FORMAT(' REL FREQ   ',15F7.2)
      ITOTAL=NINT(TOTAL)
      WRITE(KFILDO,235)(NSTA-ITOTAL)
 235  FORMAT(100X,' MISSING VALUES = ',I8)
C
 240  RETURN
      END