The TELEMAC-MASCARET system  trunk
qtria2.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE qtria2
3 ! *****************
4 !
5  &( f , xk , nf , ndire , npoin2, tstot )
6 !
7 !***********************************************************************
8 ! TOMAWAC V6P1 27/06/2011
9 !***********************************************************************
10 !
11 !brief COMPUTES THE CONTRIBUTION OF THE NON-LINEAR
12 !+ INTERACTIONS SOURCE TERM (FREQUENCY TRIADS).
13 !+<BR> (INSPIRED FROM THE BOUSSINESQ EQUATIONS)
14 !
15 !history EDF/DER/LNH
16 !+ 11/06/98
17 !+ V5P0
18 !+
19 !
20 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
21 !+ 13/07/2010
22 !+ V6P0
23 !+ Translation of French comments within the FORTRAN sources into
24 !+ English comments
25 !
26 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
27 !+ 21/08/2010
28 !+ V6P0
29 !+ Creation of DOXYGEN tags for automated documentation and
30 !+ cross-referencing of the FORTRAN sources
31 !
32 !history G.MATTAROLO (EDF - LNHE)
33 !+ 27/06/2011
34 !+ V6P1
35 !+ Translation of French names of the variables in argument
36 !
37 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
38 !| F |-->| DIRECTIONAL SPECTRUM
39 !| NF |-->| NUMBER OF FREQUENCIES
40 !| NDIRE |-->| NUMBER OF DIRECTIONS
41 !| NPOIN2 |-->| NUMBER OF POINTS IN 2D MESH
42 !| TSTOT |<->| TOTAL PART OF THE SOURCE TERM CONTRIBUTION
43 !| XK |-->| DISCRETIZED WAVE NUMBER
44 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
45 !
46  USE declarations_tomawac, ONLY : deupi,gravit, freq , dfreq ,
47  & depth , teta , sintet, costet , raisf,
48  & qindi,bdispb,bdsspb, kspb, nbd
49 !
51  USE interface_tomawac, ex_qtria2 => qtria2
52  IMPLICIT NONE
53 !
54 !
55 !.....VARIABLES IN ARGUMENT
56 ! """"""""""""""""""""
57  INTEGER, INTENT(IN) :: NF, NDIRE, NPOIN2
58  DOUBLE PRECISION, INTENT(IN) :: F(npoin2,ndire,nf)
59  DOUBLE PRECISION, INTENT(IN) :: XK(npoin2,nf)
60  DOUBLE PRECISION, INTENT(INOUT) :: TSTOT(npoin2,ndire,nf)
61 !.....VARIABLES FROM MODULE TOMAWAC
62 ! """""""""""""""""""""""""""""
63 ! QINDI CONFIGURATION INDEX
64 ! NBD NUMBER OF TRIAD CONFIGURATIONS
65 ! BDISPB LOWER DIRECTIONAL BOUND. OF SPB TRIAD MODEL
66 ! BDSSPB UPPER DIRECTIONAL BOUND. OF SPB TRIAD MODEL
67 ! KSPB COEFFICIENT K OF SPB TRIAD INTERACTION MODEL
68 ! RAISF FREQUENTIAL RATIO
69 !
70 !.....LOCAL VARIABLES
71 ! """""""""""""""""
72  INTEGER IFF, JFF, IPL, JPL , IPO
73  INTEGER IFR, IPP, IPM
74  DOUBLE PRECISION DTETA, FR1 , AP2 , XK1 , XK3 , DEP
75  DOUBLE PRECISION TETA2, XK2 , K2NL , NRJ2
76  DOUBLE PRECISION FREQ0, FREQ1, FREQ2, FREQ3, LRAISF, RAISM1
77  DOUBLE PRECISION VR1 , VR2 , VR3 , TK1 , TK2 , TK3
78  DOUBLE PRECISION BK1 , BK3 , DEP2
79  DOUBLE PRECISION FILT , BISP, DEUPI2
80  DOUBLE PRECISION VAR1 , XC1 , XC2 , XC3
81  DOUBLE PRECISION BMS , BMSP
82 !
83  INTEGER IP1, IP3
84 !
85 !
86 !.....EXTERNAL FUNCTIONS
87 ! """""""""""""""""""
88 ! DOUBLE PRECISION KERBOU
89 ! EXTERNAL KERBOU
90 !
91 ! """"""""""""""""""""""""""""""""""""""""""""""""""""""""""
92 !
93  dteta = teta(2)-teta(1)
94  bms = 1.d0/15.d0
95  bmsp = bms + 1.d0/3.d0
96  deupi2 = deupi**2
97  freq0 = freq(1)
98  lraisf = log(raisf)
99  raism1 = raisf-1.d0
100 !
101  DO iff = 1,nf
102  freq3 = freq(iff)
103  DO jff = 1,iff-1
104  freq1 = freq(jff)
105  freq2 = freq3-freq1
106  IF(freq2.LE.freq0) THEN
107  cycle
108  ENDIF
109  fr1 = 1.d0 + log(freq2/freq0)/lraisf
110  ifr = int(fr1)
111  fr1 = fr1 - dble(ifr)
112  fr1 = (raisf**fr1-1.d0)/raism1
113  DO ip3 = 1,nbd
114  ipl = qindi(ip3)
115  DO ip1 = 1,nbd
116  jpl = qindi(ip1)
117  DO ipo = 1,npoin2
118 ! COMPUTES K2
119 ! --------------------
120  dep = depth(ipo)
121  xk1 = xk(ipo,jff)
122  xk3 = xk(ipo,iff)
123  k2nl = sqrt((xk3*costet(ipl)-xk1*costet(jpl))**2
124  & +(xk3*sintet(ipl)-xk1*sintet(jpl))**2)
125  xk2 = (1.d0-fr1)*xk(ipo,ifr) + fr1*xk(ipo,ifr+1)
126 !
127  teta2=atan2(xk3*sintet(ipl)-xk1*sintet(jpl)
128  & ,xk3*costet(ipl)-xk1*costet(jpl))
129  IF(teta2.LT.0.d0) teta2 = deupi + teta2
130 !
131  IF(teta2.LT.bdispb .OR. teta2.GT.bdsspb) THEN
132 ! INTERACTIONS BETWEEN COMPONENTS WHICH DIRECTIONS ARE NOT
133 ! WITHIN THE ANGULAR SECTOR DEFINED BY THE USER (VARIABLES
134 ! BDISPB AND BDSSPB) ARE NOT TAKEN INTO ACCOUNT
135  cycle
136  ENDIF
137 !
138  ap2 = (teta2-teta(1))/dteta
139  ipm = nint(ap2)
140  ipp = ipm + 1
141  IF(ipm.EQ.0) ipm=ndire
142  IF(ipp.EQ.ndire+1) ipp = 1
143 !
144 !.........COMPUTES COUPLING COEFFICIENTS
145 ! """"""""""""""""""""""""""""""""""""
146 ! R(P-M,M)
147  vr1 = kerbou(xk1,xk2,freq1,freq2,dep,teta(jpl),teta2)
148 ! R(M-P,P)
149  vr2 = kerbou(-xk1,xk3,-freq1,freq3,dep,teta(jpl),
150  & teta(ipl))
151 ! R(-M,P)
152  vr3 = kerbou(-xk2,xk3,-freq2,freq3,dep,teta2,teta(ipl))
153 !
154  filt = kspb/((xk2-k2nl)**2+kspb*kspb)
155  filt = -0.5d0*filt/xk2
156 !
157  dep2 = dep**2
158  var1 = 2.d0*bms*dep2
159  xc1 = var1*xk3*xk3
160  xc2 = var1*xk2*xk2
161  xc3 = var1*xk1*xk1
162  var1 = bmsp*deupi2*dep2
163  tk1 = (gravit*dep*(1.d0+xc1)-var1*freq3*freq3)
164  tk2 = (gravit*dep*(1.d0+xc2)-var1*freq2*freq2)
165  tk3 = (gravit*dep*(1.d0+xc3)-var1*freq1*freq1)
166 !
167  bk1 = deupi*freq3*(1.d0+3.d0*xc1)
168  bk3 = deupi*freq1*(1.d0+3.d0*xc3)
169 !
170 !
171 !.........TAKES THE SOURCE TERM INTO ACCOUNT
172 ! """"""""""""""""""""""""""""""""
173 !
174  nrj2 = (1.d0-ap2)*((1.d0-fr1)*f(ipo,ipm,ifr)+fr1*
175  & f(ipo,ipm,ifr+1))
176  & + ap2*((1.d0-fr1)*f(ipo,ipp,ifr)
177  & +fr1*f(ipo,ipp,ifr+1))
178 !
179  bisp = filt*
180  & ((vr2/tk2)*f(ipo,ipl,iff)*f(ipo,jpl,jff)
181  & +(vr3/tk3)*f(ipo,ipl,iff)*nrj2
182  & -(vr1/tk1)*f(ipo,jpl,jff)*nrj2)
183 !
184 ! D12 = FILT*((VR2/TK2)*F(IPO,JPL,JFF)
185 ! & +(VR3/TK3)*NRJ2)
186 ! D21 = FILT*((VR2/TK2)*F(IPO,IPL,IFF)
187 ! & -(VR1/TK1)*NRJ2)
188  vr1 = dfreq(jff)*dteta*vr1/bk1
189  vr3 = 2.d0*dfreq(iff)*dteta*vr3/bk3
190 !
191  tstot(ipo,ipl,iff) = tstot(ipo,ipl,iff) + vr1*bisp
192  tstot(ipo,jpl,jff) = tstot(ipo,jpl,jff) - vr3*bisp
193 !
194  ENDDO ! IPO
195  ENDDO ! IP1
196  ENDDO ! IP3
197  ENDDO ! JFF
198  ENDDO ! IFF
199 !
200  RETURN
201  END
double precision, dimension(:), pointer freq
double precision, dimension(:), pointer dfreq
subroutine qtria2(F, XK, NF, NDIRE, NPOIN2, TSTOT)
Definition: qtria2.f:7
double precision function kerbou(XK1, XK2, FREQ1, FREQ2, DEPTH, TETA1, TETA2)
Definition: kerbou.f:7