SUBROUTINE SKYAMT(KFILDO,XDATA,NVAL,TLO,SETLO,THI,SETHI, 1 CONST,NSCAL,EX1,EX2,IER) C C MARCH 2008 GLAHN MDL MOS-2000 C SEPTEMBER 2010 GLAHN CHANGED TRUNCATION TO AFTER C SCALING TO PERCENTAGE COVER; C CHANGED TABLE FROM TENTHS TO PERCENT C JULY 2014 HUANG ADDED "C"S IN FRONT OF "D" STATEMENTS C FOR OPERATIONS C C PURPOSE C TO POSTPROCESS A SKY COVER CATEGORY INTO A CONTINUOUS C VARIABLE PERCENT OF COVER. EX1 AND EX2 ARE FOR POSSIBLE C FUTURE USE. THE VARIABLE IN XDATA( ) IS SCALED C *CONST*10**NSCAL BEFORE RETURNING. ALL VALUES IN XDATA( ) C LT TLO ARE SET TO SETLO AND ALL VALUES GT THI TO SETHI C AFTER THE SCALING. C C THERE ARE 5 SKY CATEGORIES. THESE MEAN: C CAT. OCTAS PERCENT PLAIN LANGUAGE C 1 0 0 CLEAR C 2 2 LE 25 FEW C 3 4 LE 50 SCATTERED C 4 7 LT 100 BROKEN C 5 8 100 OVERCAST C USE TLO = 1.5, SETLO = 0. C THI = 87., SETHI = 100. C THESE VALUES CAN BE ADJUSTED FOR DESIRABLE DISTRIBUTION. C THE 87. VALUE CAME FROM SCLSKY USED FOR DISCRETE MOS C CATEGORIES ANALYZED WITH PROBABILITIES. THIS IS C UP TO 7 OCTAS FOR BROKEN. 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, VALUES 1-5 (K=1,NVAL). C SCALED VALUES ON OUTPUT. (INPUT-OUTPUT) C NVAL = THE NUMBER OF VALUES IN XDATA( ) BEING DEALT C WITH. (INPUT) C TLO = LOW THRESHOLD. WHEN A VALUE IN XDATA( ) C AFTER SCALING IS LT TLOD, IT IS SET TO C SETLOD. (INPUT) C SETLO = SEE TLOD. (INPUT) C THI = HIGH THRESHOLD. WHEN A VALUE IN XDATA( ) C AFTER SCALING IS GT THID, IT IS SET TO C SETHID. (INPUT) C SETHI = SEE THID. (INPUT) C CONST = CONSTANT TO FURNISH TO IN SCALING (SEE C NSCAL BELOW). THIS IS PROBABLY 1. (INPUT) C NSCAL = SCALING CONSTANT. THIS IS PROBABLY 1. C SCALING OF XDATA( ) IS C XDATA( ) = XDATA( )*CONST*10**NSCAL. (INPUT) C EX1 = EXTRA PARAMETER NOT YET USED IN SKYAMT. C (INPUT) C EX2 = EXTRA PARAMETER NOT YET USED IN SKYAMT. C (INPUT) C IER = ERROR RETURN. C 0 = GOOD RETURN. C (OUTPUT) C TABLE(J,M) = HOLDS THE LOWER AND UPPER PERCENT BREAKPOINTS C FOR THE NOCAT CATEGORIES OF SKY COVER C (M=1,NOCAT), (J=1,2). (INTERNAL) C NOCAT = THE NUMBER OF SKY COVER 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=5) C DIMENSION XDATA(NVAL) DIMENSION TABLE(2,NOCAT) C DATA TABLE/ 0., 0., 2 0., 25., 3 25., 50., 4 50., 87., 5 87., 100./ C THE CATEGORY BREAKPOINTS ARE IN TERMS OF PERCENT OF COVER. C CD CALL TIMPR(KFILDO,KFILDO,'START SKYAMT ') IER=0 C CD WRITE(KFILDO,102)TLO,SETLO,THI,SETHI,CONST,NSCAL,EX1,EX2 CD102 FORMAT(/' AT 102 IN SKYAMT--TLO,SETLO,THI,SETHI,CONST,NSCAL,', CD 1 'EX1,EX2',5F10.4,I4,2F10.4) C CCCCD WRITE(KFILDO,105)(XDATA(K),K=1,NVAL) CCCCD105 FORMAT(/,' IN SKYAMT AT 105--XDATA(K)',/,(15F8.2)) C FACTOR=CONST*10.**NSCAL 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 = 0. C J=XDATA(K)+.499 C THIS TRUNCATES TO THE CATEGORY NUMBER J. A VALUE OF C 2.5 TO 3.5 SHOULD GO INTO CATEGORY 3. C NOTE THAT J CAN GO OUTSIDE THE RANGE 1 TO NOCAT FOR C ANALYZED VALUES. C IF(J.GE.NOCAT)THEN XDATA(K)=100. C THE LAST CATEGORY IS UP TO 100 PERCENT OF COVER. C NOTE THAT IT DOESN'T GET MULTIPLIED BY FACTOR BELOW. ELSEIF(J.LT.1)THEN XDATA(K)=0. C ANY ANALYZED CATEGORICAL VALUE LT 1, SET COVERAGE TO C ZERO PERCENT. ELSE R=TABLE(2,J)-TABLE(1,J) C CD WRITE(KFILDO,135)J,TABLE(1,J),TABLE(2,J),XDATA(K),R CD135 FORMAT(' AT 135 IN SKYAMT--J,TABLE(1,J),TABLE(2,J),', CD 1 'XDATA(K),R',I4,4F10.3) C XDATA(K)=(XDATA(K)-(J-.5))*R+TABLE(1,J) IF(XDATA(K).GT.100.)XDATA(K)=100. C THE CAP IS AT 100 PERCENT. C CD WRITE(KFILDO,136)J,XDATA(K),R CD136 FORMAT(' AT 136 IN SKYAMT--J,XDATA(K),R',I4,2F10.3) C XDATA(K)=XDATA(K)*FACTOR ENDIF C 160 CONTINUE C C TRUNCATE IF NECESSARY. C IF(TLO.LE.-99998.5.AND. 1 THI.GE.+99998.5)GO TO 180 C C TRUNCATE AT HIGH AND/OR LOW ENDS. C DO 170 K=1,NVAL C IF(XDATA(K).LT.9998.5)THEN C IF(XDATA(K).LT.TLO)THEN XDATA(K)=SETLO ELSEIF(XDATA(K).GT.THI)THEN XDATA(K)=SETHI ENDIF C ENDIF C 170 CONTINUE C CCCCD WRITE(KFILDO,165)(XDATA(K),K=1,NVAL) CCCCD165 FORMAT(/,' IN SKYAMT AT 165--XDATA(K)',/,(15F8.2)) C 180 RETURN END