The TELEMAC-MASCARET system  trunk
qdscur.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE qdscur
3 ! *****************
4 !
5  &( tstot , tsder , f , cf , xk , usold , usnew ,
6  & nf , ndire , npoin2, f_int , betoto, betotn)
7 !
8 !**********************************************************************
9 ! TOMAWAC V7P0 30/07/2014
10 !**********************************************************************
11 !
12 !brief COMPUTES THE CONTRIBUTION OF THE WAVE BLOCKING SINK TERM USING
13 !+ THE PARAMETRISATION OF VAN DER WESTHUYSEN (2012).
14 !
15 !reference VAN DER WESTHUYSEN (2012): SPECTRAL
16 !+ MODELLING OF WAVES DISSIPATION ON NEGATIVE
17 !+ CURRENT GRADIENTS
18 !
19 !history E. GAGNAIRE-RENOU (EDF/LNHE)
20 !+ 09/2014
21 !+ V7P0
22 !+ NEW SUBROUTINE CREATED / IMPLEMENTED
23 !
24 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25 !| BETOTN |<->| WORK TABLE
26 !| BETOTO |<->| WORK TABLE
27 !| F_INT |<->| WORK TABLE
28 !| CF |-->| ADVECTION FIELD ALONG FREQUENCY
29 !| F |-->| DIRECTIONAL SPECTRUM
30 !| XK |-->| DISCRETIZED WAVE NUMBER
31 !| NF |-->| NUMBER OF FREQUENCIES
32 !| NDIRE |-->| NUMBER OF DIRECTIONS
33 !| NPOIN2 |-->| NUMBER OF POINTS IN 2D MESH
34 !| TSDER |<->| DERIVED PART OF THE SOURCE TERM CONTRIBUTION
35 !| TSTOT |-->| TOTAL PART OF THE SOURCE TERM CONTRIBUTION
36 !| USNEW |-->| FRICTION VELOCITY AT TIME N+1
37 !| USOLD |<->| FRICTION VELOCITY AT TIME N
38 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
39 !
40 ! REMARKS:
41 ! ********
42 !
43 ! - THE CONSTANT CDSCUR (C"dis,break) UTILISED IN WESTHUYSEN (2012)
44 ! IS EQUAL TO 0.65 BY DEFAULT
45 ! CDSCUR COEFFICIENT OF DISSIPATION BY STRONG CURRENT
46 ! - THE CONSTANT CMOUT4 (Br) UTILISED IN WESTHUYSEN (2007)
47 ! IS EQUAL TO 1.75*10^(-3)
48 !
50  & cimpli, freq, depth, proinf
51 ! FROM TOMAWAC MODULE
52 ! CIMPLI IMPLICITATION COEFFICIENT FOR SOURCE TERM INTEG.
53 !
55  USE interface_tomawac, ex_qdscur => qdscur
56  IMPLICIT NONE
57 !
58 !
59 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
60 !
61  INTEGER, INTENT(IN) :: NF,NDIRE,NPOIN2
62  DOUBLE PRECISION, INTENT(IN) :: USNEW(npoin2),USOLD(npoin2)
63  DOUBLE PRECISION, INTENT(IN) :: XK(npoin2,nf)
64  DOUBLE PRECISION, INTENT(INOUT) :: F_INT(npoin2)
65  DOUBLE PRECISION, INTENT(INOUT) :: BETOTO(npoin2,ndire)
66  DOUBLE PRECISION, INTENT(INOUT) :: BETOTN(npoin2,ndire)
67  DOUBLE PRECISION, INTENT(INOUT) :: TSTOT(npoin2,ndire,nf)
68  DOUBLE PRECISION, INTENT(INOUT) :: TSDER(npoin2,ndire,nf)
69  DOUBLE PRECISION, INTENT(INOUT) :: F(npoin2,ndire,nf)
70  DOUBLE PRECISION, INTENT(IN) :: CF(npoin2,ndire,nf)
71 !
72 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
73 !
74  INTEGER JP,IFF,IP
75  DOUBLE PRECISION P0O,P0N,W,SURDEUPIFREQ,B,DTETAR
76  DOUBLE PRECISION CPHAS,CG1,SQBSCMOUT4,DEUKD,KD,SURCMOUT4
77  DOUBLE PRECISION AA,BB,CC
78 !
79 !-----------------------------------------------------------------------
80 !
81  dtetar=1.d0/dble(ndire)
82  w=25.d0
83  surcmout4=1.d0/cmout4
84 !
85 ! LOOP ON THE DISCRETISED FREQUENCIES
86 !
87  DO iff=1,nf
88 !
89  surdeupifreq=1.d0/(deupi*freq(iff))
90 !
91  DO ip=1,npoin2
92  f_int(ip)=f(ip,1,iff)
93  ENDDO
94  DO jp=2,ndire
95  DO ip=1,npoin2
96  f_int(ip)=f_int(ip)+f(ip,jp,iff)
97  ENDDO
98  ENDDO
99  DO ip=1,npoin2
100  f_int(ip)=f_int(ip)*dtetar
101  ENDDO
102 !
103  IF(proinf) THEN
104 !
105  DO ip=1,npoin2
106 !
107  cphas=xk(ip,iff)*surdeupifreq
108  p0o=3.d0+tanh(w*(usold(ip)*cphas-0.1d0))
109  p0n=3.d0+tanh(w*(usnew(ip)*cphas-0.1d0))
110  cg1=0.5d0*gravit*surdeupifreq
111  b=cg1*f_int(ip)*xk(ip,iff)**3
112  sqbscmout4=sqrt(b*surcmout4)
113  aa=-cdscur*sqbscmout4**(p0o/2)
114  bb=-cdscur*sqbscmout4**(p0n/2)
115  DO jp=1,ndire
116  cc=max(cf(ip,jp,iff)/freq(iff),0.d0)
117  betoto(ip,jp)=aa*cc
118  betotn(ip,jp)=bb*cc
119  ENDDO
120 !
121  ENDDO
122 !
123  ELSE
124 !
125  DO ip=1,npoin2
126 !
127  cphas=xk(ip,iff)*surdeupifreq
128  p0o=3.d0+tanh(w*(usold(ip)*cphas-0.1d0))
129  p0n=3.d0+tanh(w*(usnew(ip)*cphas-0.1d0))
130  kd=min(xk(ip,iff)*depth(ip),350.d0)
131  deukd=kd+kd
132  cg1=( 0.5d0+xk(ip,iff)*depth(ip)/sinh(deukd) )/cphas
133  b=cg1*f_int(ip)*xk(ip,iff)**3
134  sqbscmout4=sqrt(b*surcmout4)
135  aa=-cdscur*sqbscmout4**(p0o/2)
136  bb=-cdscur*sqbscmout4**(p0n/2)
137  DO jp=1,ndire
138  cc=max(cf(ip,jp,iff)/freq(iff),0.d0)
139  betoto(ip,jp)=aa*cc
140  betotn(ip,jp)=bb*cc
141  ENDDO
142 !
143  ENDDO
144 !
145  ENDIF
146 !
147 ! TAKES THE SOURCE TERM INTO ACCOUNT
148 !
149  DO jp=1,ndire
150  DO ip=1,npoin2
151  tstot(ip,jp,iff)=tstot(ip,jp,iff)
152  & +(betoto(ip,jp)+cimpli*(betotn(ip,jp)-betoto(ip,jp)))
153  & *f(ip,jp,iff)
154  tsder(ip,jp,iff)=tsder(ip,jp,iff)+betotn(ip,jp)
155  ENDDO
156  ENDDO
157 !
158  ENDDO
159 !
160 !-----------------------------------------------------------------------
161 !
162  RETURN
163  END
subroutine qdscur(TSTOT, TSDER, F, CF, XK, USOLD, USNEW, NF, NDIRE, NPOIN2, F_INT, BETOTO, BETOTN)
Definition: qdscur.f:8