The TELEMAC-MASCARET system  trunk
qmout2.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE qmout2
3 ! *****************
4 !
5  &( tstot, tsder, f , xk , enrj , fmoy , xkmoy , usold,
6  & usnew, nf , ndire, npoin2, taux1, f_int, betoto, betotn)
7 !
8 !**********************************************************************
9 ! TOMAWAC V6P3 23/06/2011
10 !**********************************************************************
11 !
12 !brief COMPUTES THE CONTRIBUTION OF THE WHITECAPPING SINK TERM USING
13 !+ THE PARAMETRISATION of VAN DER WESTHUYSEN (2007).
14 !
15 !reference VAN DER WESTHUYSEN (2007): ADVANCES IN THE SPECTRAL
16 !+ MODELLING OF WIND WAVES IN THE NEARSHORE, PHD THESID,
17 !+ DELFT UNIVERSITY OF TECHNOLOGY
18 !
19 !history E. GAGNAIRE-RENOU (EDF/LNHE)
20 !+ 09/2010
21 !+ V6P0
22 !+
23 !
24 !history G.MATTAROLO (EDF - LNHE)
25 !+ 23/06/2011
26 !+ V6P1
27 !+ Translation of French names of the variables in argument
28 !
29 !history J-M HERVOUET (EDF/LNHE)
30 !+ 23/12/2012
31 !+ V6P3
32 !+ A first optimisation + limitation of SINH argument
33 !
34 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
35 !| BETA |<->| WORK TABLE
36 !| BETOTN |<->| WORK TABLE
37 !| BETOTO |<->| WORK TABLE
38 !| ENRJ |-->| SPECTRUM VARIANCE
39 !| F |-->| DIRECTIONAL SPECTRUM
40 !| FMOY |-->| MEAN SPECTRAL FRQUENCY FMOY
41 !| XK |-->| DISCRETIZED WAVE NUMBER
42 !| XKMOY |-->| AVERAGE WAVE NUMBER
43 !| NF |-->| NUMBER OF FREQUENCIES
44 !| NDIRE |-->| NUMBER OF DIRECTIONS
45 !| NPOIN2 |-->| NUMBER OF POINTS IN 2D MESH
46 !| TAUX1 |<->| WORK TABLE
47 !| TSDER |<->| DERIVED PART OF THE SOURCE TERM CONTRIBUTION
48 !| TSTOT |-->| TOTAL PART OF THE SOURCE TERM CONTRIBUTION
49 !| USNEW |-->| FRICTION VELOCITY AT TIME N+1
50 !| USOLD |<->| FRICTION VELOCITY AT TIME N
51 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!
52 ! APPELS : - PROGRAMME(S) APPELANT : SEMIMP
53 ! ******** - PROGRAMME(S) APPELE(S) : -
54 !
55 ! REMARKS:
56 ! ********
57 !
58 ! - THE CONSTANT CMOUT3 (Cdis,break) UTILISED IN WESTHUYSEN (2007)
59 ! IS EQUAL TO 5.0*10^(-5)
60 ! - THE CONSTANT CMOUT4 (Br) UTILISED IN WESTHUYSEN (2007)
61 ! IS EQUAL TO 1.75*10^(-3)
62 ! - THE CONSTANT CMOUT5 (Cdis,non-break) UTILISED IN WESTHUYSEN
63 ! (2007) IS EQUAL TO 3.29
64 ! - THE CONSTANT CMOUT6 (Delta) UTILISED IN WESTHUYSEN (2007)
65 ! IS EQUAL TO 0
66 !
68  & cmout5, cmout6, cimpli, proinf, depth, freq
69 ! Variables in TOMAWAC MODULE
70 ! CMOUT3 WESTHUYSEN WHITE CAPPING DISSIPATION COEFFICIENT
71 ! CMOUT4 WESTHUYSEN SATURATION THRES. FOR THE DISSIPATION
72 ! CMOUT5 WESTHUYSEN WHITE CAPPING DISSIPATION COEFFICIENT
73 ! CMOUT6 WESTHUYSEN WHITE CAPPING WEIGHTING COEFFICIENT
74 ! CIMPLI IMPLICITATION COEFFICIENT FOR SOURCE TERM INTEG.
75 !
77  USE interface_tomawac, ex_qmout2 => qmout2
78  IMPLICIT NONE
79 !
80 !
81 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
82 !
83  INTEGER, INTENT(IN) :: NF,NDIRE,NPOIN2
84  DOUBLE PRECISION, INTENT(IN) :: USNEW(npoin2),USOLD(npoin2)
85  DOUBLE PRECISION, INTENT(IN) :: FMOY(npoin2),XK(npoin2,nf)
86  DOUBLE PRECISION, INTENT(IN) :: ENRJ(npoin2),XKMOY(npoin2)
87  DOUBLE PRECISION, INTENT(INOUT) :: F_INT(npoin2),TAUX1(npoin2)
88  DOUBLE PRECISION, INTENT(INOUT) :: BETOTO(npoin2),BETOTN(npoin2)
89  DOUBLE PRECISION, INTENT(INOUT) :: TSTOT(npoin2,ndire,nf)
90  DOUBLE PRECISION, INTENT(INOUT) :: TSDER(npoin2,ndire,nf)
91  DOUBLE PRECISION, INTENT(INOUT) :: F(npoin2,ndire,nf)
92 !
93 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
94 !
95  INTEGER JP,IFF,IP
96  DOUBLE PRECISION PO,AUX,C1,C2,C3,P0O,P0N,W,SURDEUPIFREQ,B,DTETAR
97  DOUBLE PRECISION BETAO,BETAN,CPHAS,CG1,SQBSCMOUT4,BETA,DEUKD,KD
98  DOUBLE PRECISION SURCMOUT4
99 !
100 !-----------------------------------------------------------------------
101 !
102 ! DTETAR = DEUPI/DBLE(NDIRE)
103 ! F_INT WAS DIVIDED BY DEUPI AFTER IN FORMULAS, DIVISION REMOVED
104  dtetar = 1.d0/dble(ndire)
105  c1 = - cmout5*deupi**9/gravit**4
106  c2 = - cmout5*deupi
107  w = 25.d0
108  surcmout4 = 1.d0/cmout4
109 !
110  IF(proinf) THEN
111 ! DEEP WATER CASE, ARRAY DEPENDING ONLY ON THE SPATIAL MESH NODE
112  DO ip = 1,npoin2
113  taux1(ip) = c1 * enrj(ip)**2 * fmoy(ip)**9
114  ENDDO
115  ELSE
116 ! FINITE DEPTH CASE
117  DO ip=1,npoin2
118  taux1(ip) = c2 * enrj(ip)**2 * fmoy(ip) * xkmoy(ip)**4
119  ENDDO
120  ENDIF
121 !
122 ! LOOP ON THE DISCRETISED FREQUENCIES
123 !
124  DO iff=1,nf
125 !
126  surdeupifreq=1.d0/(deupi*freq(iff))
127 !
128  DO ip=1,npoin2
129  f_int(ip)=f(ip,1,iff)
130  ENDDO
131  DO jp=2,ndire
132  DO ip=1,npoin2
133  f_int(ip)=f_int(ip)+f(ip,jp,iff)
134  ENDDO
135  ENDDO
136  DO ip=1,npoin2
137  f_int(ip)=f_int(ip)*dtetar
138  ENDDO
139 !
140  IF(proinf) THEN
141 !
142  DO ip = 1,npoin2
143 !
144  cphas = xk(ip,iff)*surdeupifreq
145  p0o=3.d0+tanh(w*(usold(ip)*cphas-0.1d0))
146  p0n=3.d0+tanh(w*(usnew(ip)*cphas-0.1d0))
147  cg1 = 0.5d0*gravit*surdeupifreq
148  b = cg1*f_int(ip)*xk(ip,iff)**3
149  sqbscmout4=sqrt(b*surcmout4)
150 ! COMPUTES THE BREAK/NON-BREAK TRANSITION
151  po = 0.5d0*(1.d0+tanh(10.d0*(sqbscmout4-1.d0)))
152 ! COMPUTES THE BREAK BETA
153  c3=-cmout3*sqrt(gravit*xk(ip,iff))
154  betao=c3*sqbscmout4**p0o
155  betan=c3*sqbscmout4**p0n
156 ! COMPUTES THE NON-BREAK BETA
157  aux = (freq(iff)/fmoy(ip))**2
158  beta=taux1(ip)*aux*(1.d0-cmout6+cmout6*aux)
159 ! COMPUTES THE TOTAL BETA
160  betoto(ip)=beta+po*(betao-beta)
161  betotn(ip)=beta+po*(betan-beta)
162 !
163  ENDDO
164 !
165  ELSE
166 !
167  DO ip = 1,npoin2
168 !
169  cphas = xk(ip,iff)*surdeupifreq
170  kd=min(xk(ip,iff)*depth(ip),350.d0)
171  deukd=kd+kd
172  cg1=( 0.5d0+xk(ip,iff)*depth(ip)/sinh(deukd) )/cphas
173  b = cg1*f_int(ip)*xk(ip,iff)**3
174  sqbscmout4=sqrt(b*surcmout4)
175 ! COMPUTES THE BREAK BETA
176  c3=-cmout3*sqrt(gravit*xk(ip,iff))
177  aux=tanh(kd)
178  p0o=3.d0+tanh(w*(usold(ip)*cphas-0.1d0))
179  p0n=3.d0+tanh(w*(usnew(ip)*cphas-0.1d0))
180  betao=c3*sqbscmout4**p0o*aux**((2.d0-p0o)*0.25d0)
181  betan=c3*sqbscmout4**p0n*aux**((2.d0-p0n)*0.25d0)
182 ! COMPUTES THE NON-BREAK BETA
183  aux = xk(ip,iff) / xkmoy(ip)
184 ! COMPUTES THE TOTAL BETA
185  beta=taux1(ip)*aux*(1.d0-cmout6+cmout6*aux)
186 ! COMPUTES THE BREAK/NON-BREAK TRANSITION
187  po = 0.5d0*(1.d0+tanh(10.d0*(sqbscmout4-1.d0)))
188  betoto(ip)=beta+po*(betao-beta)
189  betotn(ip)=beta+po*(betan-beta)
190 !
191  ENDDO
192 !
193  ENDIF
194 !
195 ! TAKES THE SOURCE TERM INTO ACCOUNT
196 !
197  DO jp = 1,ndire
198  DO ip = 1,npoin2
199  tstot(ip,jp,iff)=tstot(ip,jp,iff)
200  & +(betoto(ip)+cimpli*(betotn(ip)-betoto(ip)))*f(ip,jp,iff)
201  tsder(ip,jp,iff)=tsder(ip,jp,iff) + betotn(ip)
202  ENDDO
203  ENDDO
204 !
205  ENDDO
206 !
207 !-----------------------------------------------------------------------
208 !
209  RETURN
210  END
subroutine qmout2(TSTOT, TSDER, F, XK, ENRJ, FMOY, XKMOY, USOLD, USNEW, NF, NDIRE, NPOIN2, TAUX1, F_INT, BETOTO, BETOTN)
Definition: qmout2.f:8