SUBROUTINE CIGFT(KFILDO,XDATA,NVAL,TLO,SETLO,THI,SETHI, 1 CONST,NSCAL,EX1,EX2,IER) C C MARCH 2008 GLAHN TDL MOS-2000 C DECEMBER 2009 GLAHN CHANGED ALGORITHM C MAY 2010 GLAHN CORRECTED COMMENTS C C PURPOSE C TO POSTPROCESS A CEILING HEIGHT CATEGORY INTO A C CONTINUOUS VARIABLE FT. 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 C TO SETHI. EX1 AND EX2 ARE FOR POSSIBLE FUTURE USE. C THE VARIABLE IS THEN SCALED BY FACTOR=CONST*10.**NSCAL. C THE HIGHEST CATEGORY (NOCAT=8) MEANS GT 12,000 FT C OR UNLIMITED; IT IS SET TO 888. 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 A VALUE IN XDATA( )IS C LT TLO, IT IS SET TO SETLO, THEN CONST C AND NSCAL APPLIED. (INPUT) C SETLO = SEE TLO. (INPUT) C THI = HIGH THRESHOLD. WHEN A A VALUE IN XDATA( )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 WTIH NSCAL C FOR SCALING THE OUPTUT IN XDATA( ) BEFORE C RETURN. IT IS EXPECTED THIS WILL BE 0.01 SO C THE RETURN WILL BE IN HUNDREDS OF FT (SEE C NSCAL). (INPUT) C NSCAL = SCALING CONSTANT TO USE WTIH CONST C FOR SCALING THE OUPTUT IN XDATA( ) BEFORE C RETURN. IT IS EXPECTED THIS WILL BE 0 SO C THE RETURN WILL BE IN HUNDREDS OF FT (SEE C CONST). (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 CEILING HEIGHT C (M=1,NOCAT), (J=1,2). (INTERNAL) C NOCAT = THE NUMBER OF CEILING HEIGHT CATEGORIES FORECAST C BY LAMP. (INTERNAL) C 1 2 3 4 5 6 7 X C C NONSYSTEM SUBROUTINES USED C NONE C PARAMETER(NOCAT=8) C DIMENSION XDATA(NVAL) DIMENSION TABLE(2,NOCAT) C DATA TABLE/ 0, 200, 2 200, 500, 3 500, 1000, 4 1000, 2000, 5 2000, 3000, 6 3000, 6500, 7 6500, 12000, 8 12000, 99999/ C D CALL TIMPR(KFILDO,KFILDO,'START CIGFT ') IER=0 C D WRITE(KFILDO,102)TLO,SETLO,THI,SETHI,CONST,NSCAL,EX1,EX2 D102 FORMAT(/' AT 102 IN CIGFT--TLO,SETLO,THI,SETHI,CONST,NSCAL,', D 1 'EX1,EX2',5F10.4,I4,2F10.4) C CCCCCD WRITE(KFILDO,105)(XDATA(K),K=1,NVAL) CCCCCD105 FORMAT(/,' IN CIGFT 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 HEIGHTS IN FEET. C IT IS EXPECTED THAT THE INCOMING "CONST" WILL BE 0.01 C AND THAT "NSCAL" WILL BE ZERO SO THAT THE OUTPUT WILL C BE IN HUNDREDS OF FEET. C 125 DO 160 K=1,NVAL C IF(XDATA(K).GT.9998.5)GO TO 160 C MISSINGS HAVE BEEN INSERTED WITH CLIPPING FOR THE C ARCHIVE. FOR THE DISPOSABLE, THE BORDERS ARE FIRST C GUESS. C J=XDATA(K) C THIS TRUNCATES TO THE CATEGORY NUMBER J. A VALUE OF C 1.0 TO 1.99 SHOULD GO INTO CATEGORY 1. C NOTE THAT J CAN GO OUTSIDE THE RANGE 1 TO NOCAT FOR C ANAYZED VALUES. C IF(J.GE.NOCAT)THEN XDATA(K)=888. C THE LAST CATEGORY IS GT 120 OR UNLIMITED. C SET TO 888. ELSEIF(J.LT.1)THEN XDATA(K)=0. C ANY ANALYZED CATEGORICAL VALUE LT 1, SET HEIGHT TO C ZERO FT. 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 CIGFT--J,TABLE(1,J),TABLE(2,J),', D 1 'XDATA(K),R',I4,4F10.5) C XDATA(K)=(XDATA(K)-J)*R+TABLE(1,J) C D WRITE(KFILDO,136)J,XDATA(K),R D136 FORMAT(' AT 136 IN CIGFT--J,XDATA(K),R',I4,2F10.5) C XDATA(K)=XDATA(K)*FACTOR c D WRITE(KFILDO,137)XDATA(K) D137 FORMAT(' AT 137 IN CIGFT--XDATA(K)',F10.5) ENDIF C 160 CONTINUE C CCCCCD WRITE(KFILDO,165)(XDATA(K),K=1,NVAL) CCCCCD165 FORMAT(/,' IN CIGFT AT 165--XDATA(K)',/,(15F8.2)) C RETURN END