*IF DEF,W06_1A VAGDIRT.2 ! VAGDIRT.3 ! Description: VAGDIRT.4 ! This subroutine is part of the wavetrain diagnostic output code VAGDIRT.5 ! developed by Anne Guillaume at MeteoFrance and ECMWF. VAGDIRT.6 ! Introduced into the unified wave moel at UM4.1 VAGDIRT.7 ! VAGDIRT.8 ! Method: VAGDIRT.9 ! VAGDIRT.10 ! VAGDIRT.11 ! VAGDIRT.12 ! Current Code Owner: Martin Holt VAGDIRT.13 ! VAGDIRT.14 ! History: VAGDIRT.15 ! Version Date Comment VAGDIRT.16 ! ------- ---- ------- VAGDIRT.17 ! UM4.1 June 1996 Code introduced to UM. M Holt VAGDIRT.18 ! VAGDIRT.19 ! Code Description: VAGDIRT.20 ! Language: FORTRAN 77 + common extensions. VAGDIRT.21 ! VAGDIRT.22 !- End of header VAGDIRT.23 VAGDIRT.24SUBROUTINE VAGDIRT(PSPEC,KBLO,KJS,KJL,KANG,KFRE,PFREQ,PFBIN, 1VAGDIRT.25 % PTHETA,PMISS,PTHETM,df) VAGDIRT.26 C VAGDIRT.27 C**** *VAGDIRT* - ROUTINE TO COMPUTE MEAN WAVE DIRECTION. VAGDIRT.28 C VAGDIRT.29 C A.GUILLAUME ECMWF 13/3/92. VAGDIRT.30 C VAGDIRT.31 C VAGDIRT.32 C PURPOSE. VAGDIRT.33 C -------- VAGDIRT.34 C *VAGDIRT* CACULATES THE MEAN DIRECTIONS OF WAVE FIELD. VAGDIRT.35 C DIRECTIONS ARE GIVEN IN RADIAN. VAGDIRT.36 C VAGDIRT.37 C** INTERFACE. VAGDIRT.38 C ---------- VAGDIRT.39 C *CALL* *VAGDIRT(PSPEC,KBLO,KJS,KJL,KANG,KFRE,PFREQ,PFBIN, VAGDIRT.40 C PTHETA,PMISS,PTHETM)* VAGDIRT.41 C VAGDIRT.42 C I/ *PSPEC* - SPECTRUM. VAGDIRT.43 C I/ *KBLO* - DIMENSION OF ONE BLOCK. VAGDIRT.44 C I/ *KJS* - INDEX OF FIRST POINT OF BLOCK TO USE. VAGDIRT.45 C I/ *KJL* - INDEX OF LAST POINT OF BLOCK TO USE. VAGDIRT.46 C I/ *KANG* - NUMBER OF DIRECTIONS. VAGDIRT.47 C I/ *KFRE* - NUMBER OF FREQUENCIES. VAGDIRT.48 C I/ *PFREQ* - FREQUENCY ARRAY. VAGDIRT.49 C I/ *PFBIN* - PFREQ(IF+1)=PFREQ(IF)*(1+PFBIN) VAGDIRT.50 C I/ *PTHETA - DIRECTIONS ARRAY. VAGDIRT.51 C I/ *PMISS - MISSING VALUE WHEN PTHETM CANNOT BE COMPUTED. VAGDIRT.52 C /O *PTHETM* - MEAN WAVE DIRECTIONS. VAGDIRT.53 C VAGDIRT.54 C METHOD. VAGDIRT.55 C ------- VAGDIRT.56 C VAGDIRT.57 C EXTERNALS. VAGDIRT.58 C ---------- VAGDIRT.59 C VAGDIRT.60 C REFERENCES. VAGDIRT.61 C ----------- VAGDIRT.62 C VAGDIRT.63 DIMENSION PSPEC(KBLO,KANG,KFRE),PTHETM(KBLO) VAGDIRT.64 DIMENSION PFREQ(KFRE), PTHETA(KANG),df(kfre) VAGDIRT.65 C WORKING ARRAYS VAGDIRT.66 DIMENSION ZXX(KBLO),ZYY(KBLO),ZZZ(KBLO) VAGDIRT.67 C* *PARAMETER* OF GLOBAL CONSTANTS. VAGDIRT.68 C VAGDIRT.69 CCC PARAMETER (G = 9.806, PI = 3.14159265358978, CIRC = 40000000., VAGDIRT.70 CCc 1 ZPI = 2.*PI, RAD = PI/180., DEG = 180./PI, VAGDIRT.71 CCC 2 R = CIRC/ZPI) VAGDIRT.72 VAGDIRT.73 *CALL C_G
VAGDIRT.74 *CALL C_PI
VAGDIRT.75 VAGDIRT.76 ZPI=2.*PI VAGDIRT.77 RAD=PI_OVER_180 VAGDIRT.78 DEG=RECIP_PI_OVER_180 VAGDIRT.79 VAGDIRT.80 DO 1 J=KJS,KJL VAGDIRT.81 ZXX(J)=0. VAGDIRT.82 ZYY(J)=0. VAGDIRT.83 PTHETM(J)=PMISS VAGDIRT.84 1 CONTINUE VAGDIRT.85 DO 2 JANG=1,KANG VAGDIRT.86 DO 3 J=KJS,KJL VAGDIRT.87 ZZZ(J)=0. VAGDIRT.88 3 CONTINUE VAGDIRT.89 DO 4 JFRE=1,KFRE VAGDIRT.90 DO 4 J=KJS,KJL VAGDIRT.91 VAGDIRT.92 CCC ZZZ(J)=ZZZ(J)+PSPEC(J,JANG,JFRE) VAGDIRT.93 CCC % *PFREQ(JFRE)*(1.+1./(1.+PFBIN)) VAGDIRT.94 zzz(j)=zzz(j)+pspec(j,jang,jfre)*df(jfre) VAGDIRT.95 4 CONTINUE VAGDIRT.96 DO 6 J=KJS,KJL VAGDIRT.97 ZXX(J)=ZXX(J)+ZZZ(J)*COS(PTHETA(JANG)) VAGDIRT.98 ZYY(J)=ZYY(J)+ZZZ(J)*SIN(PTHETA(JANG)) VAGDIRT.99 6 CONTINUE VAGDIRT.100 2 CONTINUE VAGDIRT.101 DO 7 J=KJS,KJL VAGDIRT.102 ZZZ(J)=SQRT(AMAX1(ZXX(J)*ZXX(J)+ZYY(J)*ZYY(J),0.)) VAGDIRT.103 7 CONTINUE VAGDIRT.104 DO 8 J=KJS,KJL VAGDIRT.105 IF(ZZZ(J).EQ.0.) GO TO 8 VAGDIRT.106 PTHETM(J)=ACOS(AMIN1(1.,(AMAX1(-1.,ZXX(J)/ZZZ(J))))) VAGDIRT.107 C IN COMMENT, NON VECTORIALISED CODE OF THE NEXT TWO LINES. VAGDIRT.108 C IF(ZYY.LE.0.) PTHETM(IGR)=-PTHETM(IGR)+2*PI VAGDIRT.109 ZXX(J)=AMAX1(0.,SIGN(1.,ZYY(J))) VAGDIRT.110 PTHETM(J)=PTHETM(J)*ZXX(J)+(-PTHETM(J)+2*PI)*(1-ZXX(J)) VAGDIRT.111 8 CONTINUE VAGDIRT.112 RETURN VAGDIRT.113 END VAGDIRT.114 *ENDIF VAGDIRT.115