SUBROUTINE VISMI(KFILDO,XDATA,NVAL,TLO,SETLO,THI,SETHI, 1 CONST,NSCAL,EX1,EX2,IER) C C MARCH 2008 GLAHN TDL MOS-2000 C APRIL 2010 GLAHN REVISED, COMPATIBLE WITH CIGFT C SEPTEMBER 2010 GLAHN CHANGED TABLE(1,1) TO 0. VICE -.5 C FEBRUARY 2011 GLAHN COMPUTES FREQUENCIES ABOVE 7 MI C C PURPOSE C TO POSTPROCESS A VISIBILITY CATEGORY INTO A C CONTINUOUS VARIABLE MILES. THE VARIABLE IN XDATA( ) C IS FIRST TRUNCATED TO VALUES SUCH THAT ALL VALUES LT TLO C ARE SET TO SETLO AND ALL VALUES GT THI ARE SET TO SETHI. C EX1 AND EX2 ARE FOR POSSIBLE FUTURE USE. THE VARIABLE IS C THEN SCALED BY FACTOR=CONST*10.**NSCAL. CATEGORY 6 C DEFINES VISIBILITY TO BE BETWEEN > 5 AND < OR = 6 MILES. C CATEGORY 7 DURING DEVELOPMENT INCLUDES ALL VALUES C GREATER THAN 6. IT IS BELIEVED THE PROBABILITY OF C CATEGORY 6 CONTAINS SUFFICIENT INFORMATION TO SCALE C THAT CATEGORY UP TO 30 MILES. THE SCALED VALUES ARE C THEN TRUNCATED AT 20, AND THOSE VALUES PUT INTO THE GRID. C THIS PROCESS IS CONTROLLED BY THE VALUE IN TABLE(2,NOCAT) C AND VISMAX. WHILE CURRENT OBSERVATIONAL PRACTICES MAY C NOT USUALLY INCLUDE VISIBILITIES OVER 10 MILES, THERE CAN C BE CONSIDERABLE VARIABILITY IN VISIBILITY ABOVE 10, AND C LAMP CAN FURNISH GUIDANCE. A VALUE OF 20 INDICATES VERY C GOOD VISIBILITY, WHILE A VALUE OF 7 INDICATES MUCH LESS C SO. C C DATA SET USE C KFILDO - UNIT NUMBER OF OUTPUT (PRINT) FILE. (OUTPUT) C C VARIABLES C KFILDO = UNIT NUMBER OF OUTPUT (PRINT) FILE. (INPUT) C XDATA(K) = THE DATA TO SCALE (K=1,NVAL). (INPUT-OUTPUT) C NVAL = THE NUMBER OF VALUES IN XDATA( ) BEING DEALT C WITH. (INPUT) C TLO = LOW THRESHOLD. WHEN A LAST PASS GRIDPOINT IS C LT TLOD, IT IS SET TO SETLOD, THEN CONST C AND NSCAL APPLIED. (INPUT) C SETLO = SEE TLOD. (INPUT) C THI = HIGH THRESHOLD. WHEN A LAST PASS GRIDPOINT IS C GT THI, IT IS SET TO SETHI, THEN CONST C AND NSCAL APPLIED. (INPUT) C SETHI = SEE THI. (INPUT) C CONST = MULTIPLICATIVE CONSTANT TO USE WITH NSCAL C FOR SCALING THE OUTPUT IN XDATA( ) BEFORE C RETURN. IT IS EXPECTED THIS WILL BE 01.0 SO C THE RETURN WILL BE IN MILES (SEE NSCAL). C (INPUT) C NSCAL = SCALING CONSTANT TO USE WITH CONST C FOR SCALING THE OUTPUT IN XDATA( ) BEFORE C RETURN. IT IS EXPECTED THIS WILL BE 0 SO C THE RETURN WILL BE IN MILES (SEE CONST). C (INPUT) C EX1 = EXTRA PARAMETER NOT YET USED. (INPUT) C EX2 = EXTRA PARAMETER NOT YET USED. (INPUT) C IER = ERROR RETURN. C 0 = GOOD RETURN. C (OUTPUT) C TABLE(J,M) = HOLDS THE LOWER AND UPPER CATEGORY BREAKPOINTS C FOR THE NOCAT CATEGORIES OF VISIBILITY C (M=1,NOCAT), (J=1,2). (INTERNAL) C NOCAT = THE NUMBER OF VISIBILITY CATEGORIES FORECAST C BY LAMP. (INTERNAL) C VISMAX = THE MAXIMUM VISIBILITY IN MILES TO PUT ON THE C GRID. (INTERNAL) SET BY DATA STATEMENT. C 1 2 3 4 5 6 7 X C C NONSYSTEM SUBROUTINES USED C NONE C PARAMETER(NOCAT=7) C DIMENSION XDATA(NVAL) DIMENSION TABLE(2,NOCAT) DIMENSION FREQ(28),IFREQ(28) DATA FREQ/ 7.0, 7.5, 8.0, 8.5, 9.0, 9.5,10.0,10.5,11.0,11.5, 1 12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5, 2 17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5/ C DATA TABLE/.0 , .495, 2 .495, .95, 3 .95, 1.95, 4 1.95, 2.95, 5 2.95, 5.05, 6 5.05, 6.05, 7 6.05, 30.0/ C THESE TABLED VALUES BEING OFF-DIGIT BY .05 MAY SLIGHTLY C OFFSET VALUES IN MI IN THE HUNDREDTHS PLACE. ROUNDED C TO TENTHS IS OK. THIS IS CLOSE ENOUGH. C DATA VISMAX/20./ C CATEGORY 7 VISIBILITY IS SCALED UP TO 30, THEN TRUNCATED C TO VISMAX. THESE TWO VALUES (30 IN THE TABLE( , ) ABOVE C AND VISMAX CAN CONTROL THE VALUES AND THE MAP COLORS. C D CALL TIMPR(KFILDO,KFILDO,'START VISMI ') IER=0 C D WRITE(KFILDO,102)TLO,SETLO,THI,SETHI,CONST,NSCAL,EX1,EX2 D102 FORMAT(/' AT 102 IN VISMI--TLO,SETLO,THI,SETHI,CONST,NSCAL,', D 1 'EX1,EX2',5F10.4,I4,2F10.4) C CCCD WRITE(KFILDO,105)(XDATA(K),K=1,NVAL) CCCD105 FORMAT(/,' IN VISMI AT 105--XDATA(K)',/,(15F8.2)) C FACTOR=CONST*10.**NSCAL C IF(TLO.LE.-99999.5.AND. 1 THI.GE.+99998.5)GO TO 125 C C TRUNCATE AT HIGH AND/OR LOW ENDS. C DO 120 K=1,NVAL C IF(NINT(XDATA(K)).NE.9999)THEN C IF(XDATA(K).LT.TLO)THEN XDATA(K)=SETLO ELSEIF(XDATA(K).GT.THI)THEN XDATA(K)=SETHI ENDIF C ENDIF C 120 CONTINUE C C TRUNCATION HAS BEEN DONE, IF NEEDED. NOW TURN C ANALYZED CATEGORICAL VALUES INTO ACTUAL VISIBILITIES IN MI. C IT IS EXPECTED THAT THE INCOMING "CONST" WILL BE 1.0 C AND THAT "NSCAL" WILL BE ZERO SO THAT THE OUTPUT WILL C BE IN MILES. C 125 DO 160 K=1,NVAL C IF(XDATA(K).GT.9998.5)GO TO 160 C MISSINGS HAVE BEEN INSERTED FOR THE BORDERS WITH CLIPPING C FOR THE ARCHIVE, BUT NOT FOR THE DISPOSABLE. C J=XDATA(K) C THIS TRUNCATES TO THE CATEGORY NUMBER J. A VALUE OF C 2.0 TO 2.99 SHOULD GO INTO CATEGORY 2. C NOTE THAT J CAN GO OUTSIDE THE RANGE 1 TO NOCAT FOR C ANALYZED VALUES. C IF(J.GT.NOCAT)THEN XDATA(K)=VISMAX C ANY ANALYZED CATEGORICAL VALUE GT NOCAT, SET VISIBILITY C TO = VISMAX. ELSEIF(J.LT.1)THEN XDATA(K)=0. C ANY ANALYZED CATEGORICAL VALUE LT 1, SET VISIBILITY TO C ZERO MI. ELSE R=TABLE(2,J)-TABLE(1,J) C D WRITE(KFILDO,135)J,TABLE(1,J),TABLE(2,J),XDATA(K),R D135 FORMAT(' AT 135 IN VISMI--J,TABLE(1,J),TABLE(2,J),', D 1 'XDATA(K),R',I4,4F10.3) C XDATA(K)=(XDATA(K)-J)*R+TABLE(1,J) C D WRITE(KFILDO,136)J,XDATA(K),R D136 FORMAT(' AT 136 IN VISMI--J,XDATA(K),R',I4,2F10.3) C XDATA(K)=MIN(XDATA(K)*FACTOR,VISMAX) C NOTE THAT VISMAX ASSUMES MILES AFTER FACTOR IS USED, C WHICH SHOULD BE 1. ENDIF C 160 CONTINUE C CCCD WRITE(KFILDO,165)(XDATA(K),K=1,NVAL) CCCD165 FORMAT(/,' IN VISMI AT 165--XDATA(K)',/,(15F8.2)) C C DO 220 K=1,NVAL DO 219 J=1,30 IF(XDATA(K).LT.FREQ(J))THEN IFREQ(J)=IFREQ(J)+1 GO TO 220 ENDIF 219 CONTINUE 220 CONTINUE C WRITE(KFILDO,222)(FREQ(J),J=1,30) 222 FORMAT(/' FREQUENCIES',30F9.2) WRITE(KFILDO,223)(IFREQ(J),J=1,30) 223 FORMAT(' ',30I9) RETURN END