PROGRAM windtest REAL*8 WDIR(31), WSPD(31) CHARACTER*2 RWD CHARACTER*5 RWS WDIR(1) = 150 WSPD(1) = 24 WDIR(2) = 150 WSPD(2) = 17 WDIR(3) = 160 WSPD(3) = 8 WDIR(4) = 150 WSPD(4) = 10 WDIR(5) = 150 WSPD(5) = 9 WDIR(6) = 160 WSPD(6) = 8 WDIR(7) = 200 WSPD(7) = 9 WDIR(8) = 270 WSPD(8) = 14 WDIR(9) = 290 WSPD(9) = 14 WDIR(10) = 310 WSPD(10) = 30 WDIR(11) = 290 WSPD(11) = 34 WDIR(12) = 320 WSPD(12) = 33 WDIR(13) = 310 WSPD(13) = 30 WDIR(14) = 330 WSPD(14) = 24 WDIR(15) = 310 WSPD(15) = 33 WDIR(16) = 310 WSPD(16) = 20 WDIR(17) = 320 WSPD(17) = 17 WDIR(18) = 320 WSPD(18) = 17 WDIR(19) = 330 WSPD(19) = 16 WDIR(20) = 310 WSPD(20) = 8 WDIR(21) = 310 WSPD(21) = 6 WDIR(22) = 220 WSPD(22) = 5 WDIR(23) = 280 WSPD(23) = 6 WDIR(24) = 260 WSPD(24) = 6 DO i = 1, 24 WDIR(i) = (WDIR(i) + 180) * (3.14156/180) ! Dir converted to radians END DO CALL R_WIND(24, WDIR, WSPD, RWD, RWS) WRITE (*,*) 'RWD = ', RWD WRITE (*,*) 'RWS = ', RWS STOP END cRRDD(BI) = (WR1+180)*(3.14156/180) ! Dir converted to radians c************************************************************************ c**** ROUTINE TO CALCULATE RESULTANT WIND DIR, AND SPEED C**** N_RWD = NO OF RWIND OBS C**** RRDD = ARRAY OF RWIND DIRECTION C**** RWND = ARRAY OF RWIND SPEEDS C**** RWDIR = RW DIRECTION C**** RWSPD = RWIND SPEED c*********************************************************************** SUBROUTINE R_WIND (N_RWD, RRDD, RWND, RWDIR, RWSPD) IMPLICIT NONE REAL*8 RRDD(31), RWND(31), R_DIR, R_SPD, TOTRX, TOTRY INTEGER X, WI1, WI2, N_RWD CHARACTER*2 RWDIR CHARACTER*5 RWSPD, WC1 TOTRX = 0.0 TOTRY = 0.0 IF (N_RWD .GT. 15) THEN X = 1 DO WHILE (X .LE. N_RWD) TOTRX = (RWND(X)*(DSIN(RRDD(X)))) + TOTRX ! TOT X & Y COOR. TOTRY = (RWND(X)*(DCOS(RRDD(X)))) + TOTRY X = X + 1 END DO R_DIR = DATAN(TOTRX/TOTRY) ! AVG R_WIND DIR R_DIR = R_DIR / (3.14156/180) ! convert radians back to degrees IF ((TOTRX*TOTRY) .LT. 0) THEN IF (TOTRX .LT. 0) THEN R_DIR = 180 + R_DIR ELSE R_DIR = 360 + R_DIR END IF ELSE IF (TOTRX .GT. 0) R_DIR = 180 + R_DIR END IF R_SPD = (((TOTRX**2) + (TOTRY**2)) / N_RWD**2)**.5 IF (R_DIR .EQ. 0 .AND. R_SPD .NE. 0) R_DIR = 360 IF (R_SPD .EQ. 0) R_DIR = 0 WRITE (WC1, FMT='(F4.0)') R_DIR READ (WC1, 10) WI1, WI2 10 FORMAT (I2, I1) IF (WI2 .GT. 4) THEN WI1 = WI1 + 1 END IF WRITE (RWDIR, FMT='(I2)') WI1 WRITE (RWSPD, FMT='(F5.1)') R_SPD END IF RETURN END