The TELEMAC-MASCARET system  trunk
qwind2.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE qwind2
3 ! *****************
4 !
5  &( tstot , tsder , f , xk , usold , usnew , twold , twnew ,
6  & nf , ndire , npoin2, usn , uso )
7 !
8 !***********************************************************************
9 ! TOMAWAC V6P3 27/06/2011
10 !***********************************************************************
11 !
12 !brief COMPUTES THE CONTRIBUTION OF THE WAVE GENERATION
13 !+ (BY WIND) SOURCE TERM BASED ON SNYDER ET AL. (1981),
14 !+ MODIFIED BY KOMEN ET AL. (1984) TO MAKE USE OF THE
15 !+ FRICTION VELOCITY U* INSTEAD OF THE U5 VELOCITY
16 !+ (MEASURED 5 METERS ABOVE) FOR THE WIND.
17 !+
18 !+ THIS GENERATION THEORY IS IDENTICAL TO THAT IN WAM-CYCLE 3.
19 !
20 !reference SNYDER ET AL. (1981) :
21 !+ "ARRAY MEASUREMENTS OF ATMOSPHERIC PRESSURE
22 !+ FLUCTUATIONS ABOVE SURFACE GRAVITY WAVES".
23 !+ JOURNAL OF FLUID MECH., VOL 102., PP 1-59.
24 !reference KOMEN ET AL. (1984) :
25 !+ "ON THE EXISTENCE OF A FULLY DEVELOPED
26 !+ WINDSEA SPECTRUM". JPO, VOL 14, PP 1271-1285.
27 !
28 !history M. BENOIT (EDF/DER/LNH)
29 !+ 26/03/96
30 !+ V1P1
31 !+
32 !
33 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
34 !+ 13/07/2010
35 !+ V6P0
36 !+ Translation of French comments within the FORTRAN sources into
37 !+ English comments
38 !
39 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
40 !+ 21/08/2010
41 !+ V6P0
42 !+ Creation of DOXYGEN tags for automated documentation and
43 !+ cross-referencing of the FORTRAN sources
44 !
45 !history G.MATTAROLO (EDF - LNHE)
46 !+ 27/06/2011
47 !+ V6P1
48 !+ Translation of French names of the variables in argument
49 !
50 !history J-M HERVOUET (EDF/LNHE)
51 !+ 23/12/2012
52 !+ V6P3
53 !+ A first optimisation.
54 !
55 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
56 !| F |-->| DIRECTIONAL SPECTRUM
57 !| NF |-->| NUMBER OF FREQUENCIES
58 !| NDIRE |-->| NUMBER OF DIRECTIONS
59 !| NPOIN2 |-->| NUMBER OF POINTS IN 2D MESH
60 !| TSDER |<->| DERIVED PART OF THE SOURCE TERM CONTRIBUTION
61 !| TSTOT |<->| TOTAL PART OF THE SOURCE TERM CONTRIBUTION
62 !| TWNEW |-->| WIND DIRECTION AT TIME N+1
63 !| TWOLD |-->| WIND DIRECTION AT TIME N
64 !| USN |<--| WORK TABLE
65 !| USNEW |-->| FRICTION VELOCITY AT TIME N+1
66 !| USO |<--| WORK TABLE
67 !| USOLD |-->| FRICTION VELOCITY AT TIME N
68 !| XK |-->| DISCRETIZED WAVE NUMBER
69 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
70 !
72  & teta, freq
73 !FROM TOMAWAC MODULE
74 ! CIMPLI IMPLICITATION COEFFICIENT FOR SOURCE TERMS
75  USE interface_tomawac, ex_qwind2 => qwind2
76  IMPLICIT NONE
77 !
78 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
79 !
80  INTEGER, INTENT(IN) :: NF,NDIRE,NPOIN2
81  DOUBLE PRECISION, INTENT(IN) :: TWOLD(npoin2),TWNEW(npoin2)
82  DOUBLE PRECISION, INTENT(IN) :: USNEW(npoin2),USOLD(npoin2)
83  DOUBLE PRECISION, INTENT(INOUT):: USO(npoin2,ndire)
84  DOUBLE PRECISION, INTENT(INOUT):: USN(npoin2,ndire)
85  DOUBLE PRECISION, INTENT(INOUT):: TSTOT(npoin2,ndire,nf)
86  DOUBLE PRECISION, INTENT(INOUT):: TSDER(npoin2,ndire,nf)
87  DOUBLE PRECISION, INTENT(IN) :: F(npoin2,ndire,nf),XK(npoin2,nf)
88 !
89 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
90 !
91  INTEGER JP,JF,IP
92  DOUBLE PRECISION C1,DIREC,CONST,COEPHAS,SURDEUPIFREQ,BETAO,BETAN
93 !
94 !-----------------------------------------------------------------------
95 !
96  c1 = 0.25d0 * (roair/roeau) * deupi
97 !
98 ! ARRAYS DEPENDING ONLY ON POINTS AND DIRECTION
99 ! COULD BE OPTIMISED MORE BY DECOMPOSING THE COS...
100 !
101  DO jp=1,ndire
102  direc=teta(jp)
103  DO ip=1,npoin2
104  uso(ip,jp)=28.d0*usold(ip)*cos(direc-twold(ip))
105  usn(ip,jp)=28.d0*usnew(ip)*cos(direc-twnew(ip))
106  ENDDO
107  ENDDO
108 !
109 ! LOOP ON THE DISCRETISED DIRECTIONS
110 !
111  DO jf=1,nf
112  const=c1*freq(jf)
113  surdeupifreq=usdpi/freq(jf)
114  DO jp=1,ndire
115 !
116 ! COMPUTES THE PROPORTIONALITY FACTORS BETA
117 ! AND TAKES THE SOURCE TERM INTO ACCOUNT
118 !
119  DO ip=1,npoin2
120  coephas = xk(ip,jf)*surdeupifreq
121  betao=max(uso(ip,jp)*coephas-1.d0,0.d0)*const
122  betan=max(usn(ip,jp)*coephas-1.d0,0.d0)*const
123  tstot(ip,jp,jf) = tstot(ip,jp,jf)
124  & + (betao+cimpli*(betan-betao))*f(ip,jp,jf)
125  tsder(ip,jp,jf)=tsder(ip,jp,jf)+betan
126  ENDDO
127 !
128  ENDDO
129 !
130  ENDDO
131 !
132 !-----------------------------------------------------------------------
133 !
134  RETURN
135  END
subroutine qwind2(TSTOT, TSDER, F, XK, USOLD, USNEW, TWOLD, TWNEW, NF, NDIRE, NPOIN2, USN, USO)
Definition: qwind2.f:8