SUBROUTINE CIGHTC(KFILDO,XDATA,NVAL,IER) C C NOVEMBER 2009 GLAHN TDL MOS-2000 C DECEMBER 2009 GLAHN CORRECTED C DECEMBER 2009 GLAHN SCALED WITHIN CATEGORY 8 C C PURPOSE C TO PREPROCESS A SREF CEILING HEIGHT IN HUNDREDS OF FT C TO A CATEGORICAL VALUE MATCHING THE CEILING HEIGHT C CATEGORIES USED IN MOS. THE CATEGORY IS GIVEN C AS A SCALED CONTINUOUS VALUE REPRESENTING THE ACTUAL C HEIGHT. FOR INSTANCE, ANY VALUE IN FT THAT IS C LE TABLE(2,1) (200 FT) WIL BE GIVEN A VALUE FROM C 1. TO < 2, INDICATING THE NEARNESS TO THE END C POINTS 0. AND 200. C C THE UPPER CATEGORY, NOCAT+1, (HERE, 8) IS SCALED UP C TO 8.99 DEPENDING ON HOW MUCH ABOVE TABLE(2,NOCAT) THE C SREF VALUE IS, THE MAXIMUM BEING COMPUTED IN SREFMX. C C NOTE: IF THE SREF VALUES HAVE BEEN ROUNDED OR C TRUNCATED TO HUNDREDS OF FT, THEN ONLY TWO C VALUES WILL BE POSSIBLE FOR CATEGORY 1: 1 AND 1.5. C ALSO, ONLY 3 VALUES WILL BE POSSIBLE FOR CATEGORY 2: C 2. 2.33, AND 2.66. IT WOULD BE BETTER IF THE C SRFF VALUES WERE NOT TO WHOLE HUNDREDS. LEAVE C AS CONTINUOUS AND PACK TO TENTHS. THEN FOR C CATEGORY 1, A VALUE OF 1.95 WOULD BE POSSIBLE. C TO WHOLE INTEGERS, A SREF VALUE OF 1.51 COULD C BE PUT INTO CATEGORY 2 RATHER THAN 1. 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 TRANSFORM TO CATEGORIES (K=1,NVAL). C IT IS ASSUMED INCOMING DATA ARE IN METERS. C (INPUT-OUTPUT) C NVAL = THE NUMBER OF VALUES IN XDATA( ) BEING DEALT C WITH. (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 CEILING HEIGHT C (M=1,NOCAT), (J=1,2). (INTERNAL) C NOCAT = THE NUMBER OF CEILING HEIGHT CATEGORIES FORECAST C BY LAMP. A VALUE NOT LE TABLE(2,NOCAT) IS PUT C INTO A CATEGORY 8, MEANING UNLIMITED. C (INTERNAL) 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) C DATA TABLE/ 0., 2., 2 2., 5., 3 5., 10., 4 10., 20., 5 20., 30., 6 30., 65., 7 65., 120./ C D CALL TIMPR(KFILDO,KFILDO,'START CIGHTC ') IER=0 C D WRITE(KFILDO,105)(K,XDATA(K),K=1,NVAL) D105 FORMAT(/,' IN CIGHTC AT 105',/,(8(I7,F8.2))) C C FIND THE LARGEST VALUE. C SREFMX=0. C DO 110 K=1,NVAL C IF(XDATA(K).LT.9998.9)THEN C IF(XDATA(K).GT.SREFMX)THEN SREFMX=XDATA(K) ENDIF C ENDIF C 110 CONTINUE C IF(SREFMX.GT.656.)THEN WRITE(KFILDO,112)SREFMX 112 FORMAT(/' ****EXPECTED MAX VALUE OF SREF EXCEEDED.', 1 ' MAX VALUE =',F8.1,'. CONTINUING.') ENDIF C DO 120 K=1,NVAL C IF(XDATA(K).LT.9998.9)THEN C DO 115 L=1,NOCAT C IF(XDATA(K).GE.TABLE(2,NOCAT))THEN XDATA(K)=MIN(NOCAT+1+(XDATA(K)-TABLE(2,NOCAT))/ 1 (SREFMX-TABLE(2,NOCAT)),NOCAT+1+.99) C THIS KEEPS THE MAXIMUM VALUE = 8.99 WHEN NOCAT = 7. GO TO 120 C ELSEIF(XDATA(K).LT.TABLE(2,L))THEN XDATA(K)=L+(XDATA(K)-TABLE(1,L))/(TABLE(2,L)-TABLE(1,L)) GO TO 120 C ENDIF C 115 CONTINUE C ENDIF C 120 CONTINUE C C D WRITE(KFILDO,125)(K,XDATA(K),K=1,NVAL) D125 FORMAT(/,' IN CIGHTC AT 125',/,(8(I7,F8.2))) C C RETURN END