SUBROUTINE SKYOBP(KFILDO,XDATA,NVAL,IER) C C DECEMBER 2019 GLAHN MDL MOS-2000 C ADAPTED FROM SKYOBC C FEBRYART 2020 GLAHN FEW CHANGED FROM 12 TO 15 C BROKEN CHANGED FROM 81 TO 75 C C PURPOSE C TO REPROCESS METAR SKY COVER OBSERVATIONS TO C PERCENT FOR ANALYSIS. PREVIOUSLY, SKY WAS ANALYZED C IN 5 CATEGORIES AND CONVERTED AT THE END TO PERCENT C FOR OUTPUT. NOW THAT A MODEL IS USED OVER WATER C (PREVIOUSLY THE GRID WAS CLIPPED AND WATER WAS C UNIMPORTANT) AND IT IS IN PERCENT, SKY IS ANALYZED C IN PERCENT. C C THE 5 CATEGORIES AND PERCENTS ARE DEFINED: C C CATEGORY OBSERVATION PERCENT DEFINITION C 1 0 CLEAR (ASOS) 0 C 1 1 CLEAR (MANUAL) 0 C 2 2 FEW 15 (>0, <= 2/8) C 3 3 SCATTERED 44 (3/8 - 4/8) C 4 6 BROKEN 75 (5/8 - <8/8) C 5 8 OVERCAST 100 C 5 9 PARTIALLY OBSCURED 100 C 5 10 OBSCURATION 100 C THE ABOVE ARE CONSISTENT WITH SKYLMP FOR FORECASTS. 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 SKY OBSERVATIONS TO TRANSFORM TO PERCENT C (K=1,NVAL). (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) = HOLDS THE UPPER CATEGORY VALUES FOR THE C NOCAT CATEGORIES OF SKY (J=1,NOCAT). (INTERNAL) C NOCAT = THE NUMBER OF SKY CATEGORIES. (INTERNAL) C KER = 1 WHEN AN ERROR OCCURS, THEN IER SET = 666 FOR C RETURN. (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(NOCAT),STABLE(NOCAT) C DATA TABLE/ 1.1, 2.1, 3.1, 6.1, 10.1/ DATA STABLE/ 0., 15., 44., 75., 100./ CCCC DATA STABLE/ 0., 2.289, 3.530, 4.327, 4.642/ C STABLE ARE CUBE ROOTS OF PERCENTAGES C CALL TIMPR(KFILDO,KFILDO,'START SKYOBP ') IER=0 KER=0 C D WRITE(KFILDO,105)(K,XDATA(K),K=1,NVAL) D105 FORMAT(/,' IN SKYOBP AT 105',/,(8(I7,F8.2))) C DO 160 K=1,NVAL C IF(XDATA(K).LT.9998.9)THEN C DO_150: DO 150 J=1,NOCAT C IF(NINT(XDATA(K)).LE.TABLE(J))THEN C D SAVEX=XDATA(K) C XDATA(K)=STABLE(J) C D WRITE(KFILDO,144)K,J,SAVEX,XDATA(K),TABLE(J) D144 FORMAT(' IN SKYOBP--K,J,SAVEX,XDATA(K),TABLE(J)--', D 1 2I6,F8.1,F12.5,F8.2) EXIT DO_150 C ELSEIF(J.EQ.NOCAT)THEN C A NON-MISSING VALUE GT TABLE(NOCAT) SHOULD NOT OCCUR. C (THIS EXTRA IF TEST AND WEIRD CODING IS THE RESULT OF c BEING ENCOURAGED TO NOT USE GOTO'S.) D WRITE(KFILDO,155)XDATA(K) D155 FORMAT(/' ****ERROR IN SKYOBP, OBSERVED VALUE =',F10.1, D 1 ' GT 10., VALUE SET TO MISSING.') C XDATA(K)=9999. KER=KER+1 ENDIF C 150 END DO DO_150 C C A MISSING VALUE IS LEFT AS SUCH. C ENDIF C 160 CONTINUE C IF(KER.GE.1)THEN WRITE(KFILDO,161)KER 161 FORMAT(/' ****SKY > 10',I7,' TIMES IN SKYOBP.') IER=666 ENDIF C RETURN END