C ********************************************************************* SUBROUTINE WINDS(WIND,DIR,SPEED,GUST,TYPE_NAME,CALL) C$$$ SUBPROGRAM DOCUMENTATION BLOCK C C SUBPROGRAM: WINDS.F PREPARES WIND DIRECTION, SPEED AND GUSTS C PRGMMR: K. HUGHES ORG: W/OSD211 DATE: 96-11-21 C C ABSTRACT: THIS SUBROUTINE RETURNS THE WIND DIRECTION IN WHOLE C DEGREES, THE WIND SPEED IN KTS, AND THE WIND GUSTS IN KTS. C C PROGRAM HISTORY LOG: C 96-11-21 K. HUGHES C 97-10-20 K. HUGHES ADDED SOME DOCUMENTATION C 06-10-30 K. HUGHES MODIFIED WIND SPEEDS TO BE 125 INSTEAD OF 75 KTS C 09-10-08 J. IM BLOCKED OUT VARIABLE WIND FOR MESONET WIND C 10-07-15 D. RUDACK ADDED ENVIRONMENTAL VARIABLE "TYPE_NAME" TO CALL C FOR SPECIAL CASE OF MESONET WIND. C 20-09-19 J. GHIRARDELLI CHANGED LOGIC SO THAT CODE CANNOT TRY TO C WRITE AN INTEGER THAT IS TOO LARGE INTO A C SMALLER C CHARACTER FIELD C C USAGE: C C SEE BELOW FOR MDL STANDARDS C C PROGRAM NAME C C DATE KATHRYN HUGHES MDL CRAY4 C C PURPOSE C THIS SUBROUTINE RETURNS THE WIND DIRECTION IN WHOLE C DEGREES, THE WIND SPEED IN KTS, AND THE WIND GUSTS IN KTS. C C DATA SET USE C INTERNAL C C VARIABLES C CALL = CALL LETTERS C DIR = WIND DIRECTION CONVERTED TO CHARACTER C GUST = WIND GUST AFTER BEING ROUNDED TO AN INTEGER C AND THEN CONVERTED TO CHARACTER FOR PRINTING C SPEED = WIND SPEED AFTER BEING ROUNDED TO AN INTEGER C AND THEN CONVERTED TO CHARACTER FOR PRINTING C WIND = ARRAY CONTAINING WIND DIRECTION, SPEED, AND C GUSTS FROM BUFR C WDIR = WIND DIRECTION INTEGER WORK VARIABLE C WSPD = WIND SPEED INTEGER WORK VARIABLE C WGST = WIND GUST INTEGER WORK VARIABLE C TYPE_NAME = CLASS OF REPORTING STATION (E.G., MESONET) C C PROGRAM STOPS C NONE C C REMARKS C THIS SUBROUTINE DOES SOME QUALITY CONTROL ON THE WIND DATE. C THE VALUE OF 125 KNOTS USED TO CHECK WIND SPEED AND THE VALUE C OF 200 KNOTS USED TO CHECK FOR WIND GUSTS SEEMED AGREEABLE C TO MDL AT THE TIME THIS CODE WAS BEING WRITTEN. VARIABLE C WIND DIRECTION IS STORED IN THE TABLE AS -9 C C C ATTRIBUTES: C LANGUAGE: FORTRAN90 C MACHINE: CRAY4 C$$$ IMPLICIT NONE C SUBROUTINE WIND REAL,INTENT(IN) :: WIND(3,255) INTEGER :: WDIR,WSPD,WGST CHARACTER(LEN=3) :: DIR,SPEED,GUST CHARACTER(LEN=4) :: TYPE_NAME CHARACTER(LEN=8) :: CALL(51) C C CONVERT WINDS FROM METRIC (M/SEC) REAL VALUES, TO INTEGER C VALUES IN KNOTS WDIR=NINT(WIND(1,1)) WSPD=NINT(WIND(2,1)*1.9425) WGST=NINT(WIND(3,1)*1.9425) C USE INTERNAL WRITE STATEMENTS TO WRITE THE INTEGER VALUES C INTO CHARACTER VARIABLES. C IF(WDIR.GE.999) THEN DIR=" " ELSE WRITE(DIR,100) WDIR END IF C IF(WSPD.GE.999) THEN SPEED=" " ELSE WRITE(SPEED,100) WSPD END IF C IF(WGST.GE.999) THEN GUST=" " ELSE WRITE(GUST,100) WGST END IF C 100 FORMAT(I3) IF((WDIR.GT.360).AND.(WDIR.LT.999)) THEN PRINT *,"BAD WIND DIRECTION ",WDIR," AT STATION ",CALL(1) DIR=" " END IF C WIND SPEEDS GREATER THAN 125 KNOTS ARE CHANGED TO MISSING IF((WSPD.GT.125).AND.(WSPD.LT.999)) THEN PRINT *,"BAD WIND SPEED ",WSPD," AT STATION ",CALL(1) SPEED=" " END IF C WIND GUSTS GREATER THAN 200 KNOTS ARE CHANGED TO MISSING IF((WGST.GT.200).AND.(WGST.LT.999)) THEN PRINT *,"BAD WIND GUST ",WGST," AT STATION ",CALL(1) GUST=" " END IF C CHECK FOR VARIABLE WINDS, BUFR CHANGES VRB TO 0. C IF THE SPEED DOES NOT INDICATE CALM THEM WE HAVE C TO ASSUME IT IS VARIABLE. CALM IS INDICATED WITH C A SPEED AND DIRECTION OF 0. C C BLOCKED OUT VARIABLE WIND FOR MESONET WIND (AS OF 10/08/2009) C IF(TYPE_NAME.NE.'MESO') THEN IF(WDIR.EQ.0) THEN IF((WSPD.GT.0).AND.(WSPD.LT.999)) THEN DIR=" -9" ENDIF ENDIF ENDIF C END SUBROUTINE WINDS C ********************************************************************* C * C BOTTOM OF PROGRAM HRLYTBL.F * C * C ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ * END