The TELEMAC-MASCARET system  trunk
stress.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE stress
3 ! *****************
4 !
5  &( tauwav, tstot , f , usnew , twnew , z0new ,
6  & npoin2, ndire , nf , xtauw , ytauw , tauhf )
7 !
8 !***********************************************************************
9 ! TOMAWAC V6P1 28/06/2011
10 !***********************************************************************
11 !
12 !brief COMPUTES THE WAVE STRESSES FOR ALL THE NODES
13 !+ IN THE MESH.
14 !
15 !note THIS SUBROUTINE COMPUTES TAUHF DIRECTLY FROM USTAR AND
16 !+ ALFA. (THIS WAS DONE VIA A CALL TO 'TAUWHF' PREVIOUSLY).
17 !
18 !history M. BENOIT (EDF/DER/LNH)
19 !+ 03/05/95
20 !+ V1P0
21 !+
22 !
23 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
24 !+ 13/07/2010
25 !+ V6P0
26 !+ Translation of French comments within the FORTRAN sources into
27 !+ English comments
28 !
29 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
30 !+ 21/08/2010
31 !+ V6P0
32 !+ Creation of DOXYGEN tags for automated documentation and
33 !+ cross-referencing of the FORTRAN sources
34 !
35 !history G.MATTAROLO (EDF - LNHE)
36 !+ 28/06/2011
37 !+ V6P1
38 !+ Translation of French names of the variables in argument
39 !
40 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
41 !| COSTET |-->| COSINE OF TETA ANGLE
42 !| DFREQ |-->| FREQUENCY STEPS BETWEEN DISCRETIZED FREQUENCIES
43 !| F |-->| DIRECTIONAL SPECTRUM
44 !| FREQ |-->| DISCRETIZED FREQUENCIES
45 !| NF |-->| NUMBER OF FREQUENCIES
46 !| NDIRE |-->| NUMBER OF DIRECTIONS
47 !| NPOIN2 |-->| NUMBER OF POINTS IN 2D MESH
48 !| SINTET |-->| SINE OF TETA ANGLE
49 !| TAUHF |<->| WORK TABLE
50 !| TAUWAV |<--| STRESS DUE TO THE WAVES
51 !| TETA |-->| DISCRETIZED DIRECTIONS
52 !| TSTOT |-->| TOTAL PART OF THE SOURCE TERM CONTRIBUTION
53 !| TWNEW |-->| WIND DIRECTION
54 !| USNEW |-->| FRICTION VELOCITY
55 !| XKAPPA |-->| VON KARMAN CONSTANT
56 !| XTAUW |<->| WORK TABLE
57 !| YTAUW |<->| WORK TABLE
58 !| Z0NEW |-->| SURFACE ROUGHNESS LENGTH
59 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60 !
62  & freq, dfreq, teta, sintet, costet,
63  & decal,xkappa, betam
64 !
65  USE interface_tomawac, ex_stress => stress
66  IMPLICIT NONE
67 !
68 !.....VARIABLES IN ARGUMENT
69 ! """"""""""""""""""""
70  INTEGER, INTENT(IN) :: NPOIN2, NDIRE , NF
71  DOUBLE PRECISION, INTENT(IN) :: USNEW(npoin2), TWNEW(npoin2)
72  DOUBLE PRECISION, INTENT(IN) :: Z0NEW(npoin2)
73  DOUBLE PRECISION, INTENT(IN) :: TSTOT(npoin2,ndire,nf)
74  DOUBLE PRECISION, INTENT(IN) :: F(npoin2,ndire,nf)
75  DOUBLE PRECISION, INTENT(INOUT) :: TAUWAV(npoin2), TAUHF(npoin2)
76  DOUBLE PRECISION, INTENT(INOUT) :: XTAUW(npoin2) , YTAUW(npoin2)
77 !.....VARIABLES FROM MODULE TOMAWAC
78 ! """"""""""""""""""""
79 ! DECAL SHIFT GROWING CURVE DUE TO WIND
80 ! XKAPPA VON KARMAN CONSTANT
81 ! BETAM WIND GENERATION COEFFICIENT
82 !
83 !.....LOCAL VARIABLES
84 ! """""""""""""""""
85  INTEGER IP , JP , JF , JTOT , J
86  DOUBLE PRECISION DTETAR, FRMAX , COEF1 , COEF2 , TTAUHF
87  DOUBLE PRECISION USTAR , ALFA , COSTMP, C1 , C2 , DIREC
88  DOUBLE PRECISION Y , OMEGA , CM , ZX , ZARG , ZMU
89  DOUBLE PRECISION ZLOG , ZBETA , UST , Z0 , UST2 , ALF2
90  DOUBLE PRECISION CONST1, OMEGAM, X0 , YC , DELY , AUX
91 !
92 !
93  dtetar= deupi/dble(ndire)
94  frmax = freq(nf)
95  coef1 = dtetar*deupi**4*frmax**5/gravit**2
96  coef2 = deupi*roeau/roair*dtetar
97 !
98  DO ip=1,npoin2
99  xtauw(ip)=0.d0
100  ytauw(ip)=0.d0
101  ENDDO ! IP
102 !
103 !.....INTEGRATES THE SOURCE TERM OVER FREQUENCIES AND DIRECTIONS
104 ! """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
105  DO jf=1,nf
106  aux=coef2*freq(jf)*dfreq(jf)
107  DO jp=1,ndire
108  c1=aux*sintet(jp)
109  c2=aux*costet(jp)
110  DO ip=1,npoin2
111  xtauw(ip)=xtauw(ip)+tstot(ip,jp,jf)*c1
112  ytauw(ip)=ytauw(ip)+tstot(ip,jp,jf)*c2
113  ENDDO ! IP
114  ENDDO ! JP
115  ENDDO ! JF
116 !
117 !.....COMPUTES THE PARAMETERISED HIGH FREQUENCY PART
118 ! """""""""""""""""""""""""""""""""""""""""""""""""""
119  DO ip=1,npoin2
120  tauhf(ip)=0.d0
121  ENDDO ! IP
122 !
123  DO jp=1,ndire
124  direc=teta(jp)
125  DO ip=1,npoin2
126  costmp=max(cos(direc-twnew(ip)),0.d0)
127  tauhf(ip)=tauhf(ip)+f(ip,jp,nf)*costmp**3
128  ENDDO ! IP
129  ENDDO ! JP
130 !
131  jtot = 50
132  const1= betam/xkappa**2
133  omegam= deupi*frmax
134  x0 = 0.05d0
135 !
136  DO ip=1,npoin2
137  ustar=usnew(ip)
138  alfa =z0new(ip)*gravit/ustar**2
139 !
140 !----------------------------------------------OLD SUBROUTINE TAUWHF
141 !C CALL TAUWHF
142 !C *( TAUHF , USTAR , ALFA , BETAM , XKAPPA , DECAL , FRMAX , GRAVIT)
143 !----------------------------------------------
144 !
145 !MB.....LIMITING FACTORS TO REPRODUCE WAM4 (SUBROUTINE TAUHF OF PREPROC)
146 !.......(THIS LIMITATION IS NOT JUSTIFIED A PRIORI. IT IS AN ARTEFACT
147 !.......OF TAUHF BEING DISCRETISED ON A GRID)
148  ust2 = min(ustar,5.d0)
149  alf2 = min(alfa,0.11d0)
150 !MB.....END OF LIMITATION
151 !
152  ust = max(ust2,0.000001d0)
153  z0 = alf2*ust**2/gravit
154 !
155  yc = max(omegam,x0*gravit/ust)*sqrt(z0/gravit)
156  dely = max((1.d0-yc)/float(jtot),0.d0)
157  ttauhf = 0.d0
158  DO j=1,jtot
159  y = yc+dble(j-1)*dely
160  omega = y*sqrt(gravit/z0)
161  cm = gravit/omega
162  zx = ust/cm +decal
163  zarg = min(xkappa/zx,20.d0)
164  zmu = min(gravit*z0/cm**2*exp(zarg),1.d0)
165  zlog = min(log(zmu),0.d0)
166  zbeta = const1*zmu*zlog**4
167  ttauhf= ttauhf+zbeta/y*dely
168  ENDDO ! J
169 !----------------------------------------------ANCIENNE SUB TAUWHF
170 !
171  tauhf(ip) = ttauhf*coef1*ustar**2*tauhf(ip)
172  ENDDO ! IP
173 !
174 !.....TAKES THE PARAMETERISED HIGH FREQUENCY PART INTO ACCOUNT
175 ! """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
176 !
177  DO ip=1,npoin2
178  xtauw(ip) = xtauw(ip) + tauhf(ip)*sin(twnew(ip))
179  ytauw(ip) = ytauw(ip) + tauhf(ip)*cos(twnew(ip))
180  tauwav(ip)= sqrt(xtauw(ip)**2+ytauw(ip)**2)
181  ENDDO ! IP
182 !
183  RETURN
184  END
subroutine stress(TAUWAV, TSTOT, F, USNEW, TWNEW, Z0NEW, NPOIN2, NDIRE, NF, XTAUW, YTAUW, TAUHF)
Definition: stress.f:8