The TELEMAC-MASCARET system  trunk
radia1.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE radia1
3 ! *****************
4 !
5  &(lishho)
6 !
7 !***********************************************************************
8 ! ARTEMIS V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief COMPUTES THE RADIATION STRESSES AND DRIVING FORCES.
12 !
13 !reference M.W. DINGEMANS, A.C. RADDER AND H.J. DE VRIEND
14 !+ COMPUTATION OF THE DRIVING FORCES OF WACE-INDUCED
15 !+ CURRENTS. COASTAL ENGINEERING, 11 (1987) PP 539-563.
16 !
17 !history J-M HERVOUET (LNH)
18 !+
19 !+
20 !+ LINKED TO BIEF 5.0
21 !
22 !history D. AELBRECHT (LNH) ; F. BECQ (LNH)
23 !+ 04/06/1999
24 !+ V5P1
25 !+
26 !
27 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
28 !+ 13/07/2010
29 !+ V6P0
30 !+ Translation of French comments within the FORTRAN sources into
31 !+ English comments
32 !
33 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
34 !+ 21/08/2010
35 !+ V6P0
36 !+ Creation of DOXYGEN tags for automated documentation and
37 !+ cross-referencing of the FORTRAN sources
38 !
39 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
40 !| LISHHO |<--| SMOOTHING FOR THE WAVE HEIGTH
41 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42 !
43  USE bief
46  USE interface_artemis, ex_radia1 => radia1
47 !
49  IMPLICIT NONE
50 !
51 !
52  INTEGER I
53  INTEGER LISHHO
54 !
55 ! INTERNAL VARIABLES FOR RADIA1
56 !
57  DOUBLE PRECISION COE , COCO, COSI, SISI
58  DOUBLE PRECISION OMEG2
59  INTEGER IRADIA , LISRAD
60 !
61  LOGICAL MAS
62 !
63  INTRINSIC cos, sin
64 !
65 !-----------------------------------------------------------------------
66 !
67 ! HARD-CODES THE METHOD OF COMPUTATION OF THE RADIATION
68 ! STRESSES FOLLOWING TESTS : METHOD 2
69 !
70  iradia = 2
71 !
72 !-----------------------------------------------------------------------
73 !
74 ! FOR MEMORY, AND EVEN THOUGH IT IS NOT USED HERE,
75 ! THE FOLLOWING GIVES METHOD 1
76 !
77 !=======================================================================
78 ! RADIATION STRESSES........METHOD 1
79 !=======================================================================
80 !
81  IF(iradia.EQ.1) THEN
82 !
83  CALL os('X=YZ ' , x=t3, y=phii, z=phii)
84  CALL os('X=X+YZ ' , x=t3, y=phir, z=phir)
85  CALL vector(t2 , '=' , 'GRADF X' , ielm ,
86  & 1.d0 , t3 , t1 , t1 , t1 , t1 , t1 ,
87  & mesh , msk , maskel)
88  CALL vector(t2 , '=' , 'GRADF X' , ielm ,
89  & 1.d0 , t2 , t1 , t1 , t1 , t1 , t1 ,
90  & mesh , msk , maskel)
91  CALL vector(t4 , '=' , 'GRADF Y' , ielm ,
92  & 1.d0 , t3 , t1 , t1 , t1 , t1 , t1 ,
93  & mesh , msk , maskel)
94  CALL vector(t4 , '=' , 'GRADF Y' , ielm ,
95  & 1.d0 , t4 , t1 , t1 , t1 , t1 , t1 ,
96  & mesh , msk , maskel)
97 !
98  CALL vector(t1 , '=' , 'MASBAS ' , ielm ,
99  & 1.d0 , t3 , t3 , t3 , t3 , t3 , t3 ,
100  & mesh , msk , maskel)
101 !
102  CALL os('X=Y+Z ', x=t4, y=t2 , z=t4)
103  CALL os('X=Y/Z ', x=t4, y=t4 , z=t1)
104  CALL os('X=Y/Z ', x=t4, y=t4 , z=t1)
105 !
106  CALL os('X=CY/Z ', x=t2, y=cg , z=c, c=2.d0 )
107  CALL os('X=X+C ', x=t2, c=-1.d0 )
108  omeg2 = omega*omega
109  CALL os('X=CX ' , x=t2 , c=omeg2 )
110 !
111  coe = 1.d0/(8.d0*grav)
112 !
113 !=======================================================================
114 ! RADIATION STRESSES........METHOD 2 (IDENTICAL TO THAT USED IN TOMAWAC)
115 !=======================================================================
116 !
117  ELSE
118 !
119  CALL os('X=Y ',x=t3,y=hho)
120 !
121 ! -------------------------------------------------------------
122 ! SMOOTHES THE WAVE HEIGHT TO ELIMINATE PARASITIC
123 ! OSCILLATIONS
124 ! -------------------------------------------------------------
125 !
126  IF(lishho.GT.0) THEN
127  mas = .true.
128  CALL filter(t3,mas,t1,t2,am1,'MATMAS ',
129  & 1.d0,sbid,sbid,sbid,sbid,sbid,sbid,
130  & mesh,msk,maskel,lishho)
131  ENDIF
132 !
133  CALL os('X=Y ',x=hho,y=t3)
134 !
135 ! -------------------------------------------------------------
136 ! COMPUTES STRESSES SXX, SXY AND SYY
137 ! -------------------------------------------------------------
138 !
139  CALL os('X=Y/Z ' , x=t1 , y=cg , z=c)
140  DO i=1,npoin
141  coco=cos(inci%R(i))*cos(inci%R(i))
142  cosi=cos(inci%R(i))*sin(inci%R(i))
143  sisi=sin(inci%R(i))*sin(inci%R(i))
144  coe=grav*hho%R(i)*hho%R(i)/8.d0
145 !
146 ! THE COEFFICIENT 1/8 ABOVE STEMS FROM HHO REPRESENTING THE WAVE
147 ! HEIGHT (ENERGY) IN REGULAR SEAS
148 !
149  sxx%R(i)= sxx%R(i) + (t1%R(i)*(1.d0+coco)-0.5d0)*coe
150  sxy%R(i)= sxy%R(i) + (t1%R(i)*cosi)*coe
151  syy%R(i)= syy%R(i) + (t1%R(i)*(1.d0+sisi)-0.5d0)*coe
152  END DO
153  END IF
154 !
155 !
156 !=======================================================================
157 ! SPACIAL GRADIENTS OF RADIATION STRESSES
158 !=======================================================================
159 !
160 ! -----------------------------------------------
161 ! OPTIONAL SMOOTHING(S) OF THE RADIATION STRESSES
162 ! -----------------------------------------------
163 !
164  lisrad = 3
165 !
166  CALL os('X=Y ',x=t3,y=sxx)
167  IF(lisrad.GT.0) THEN
168  mas = .true.
169  CALL filter(t3,mas,t1,t2,am1,'MATMAS ',
170  & 1.d0,sbid,sbid,sbid,sbid,sbid,sbid,
171  & mesh,msk,maskel,lisrad)
172  ENDIF
173  CALL os('X=Y ',x=sxx,y=t3)
174 !
175  CALL os('X=Y ',x=t3,y=sxy)
176  IF(lisrad.GT.0) THEN
177  mas = .true.
178  CALL filter(t3,mas,t1,t2,am1,'MATMAS ',
179  & 1.d0,sbid,sbid,sbid,sbid,sbid,sbid,
180  & mesh,msk,maskel,lisrad)
181  ENDIF
182  CALL os('X=Y ',x=sxy,y=t3)
183 !
184  CALL os('X=Y ',x=t3,y=syy)
185  IF(lisrad.GT.0) THEN
186  mas = .true.
187  CALL filter(t3,mas,t1,t2,am1,'MATMAS ',
188  & 1.d0,sbid,sbid,sbid,sbid,sbid,sbid,
189  & mesh,msk,maskel,lisrad)
190  ENDIF
191  CALL os('X=Y ',x=syy,y=t3)
192 
193 ! END OF RADIATION STRESS SMOOTHING(S)
194 ! -------------------------------------------------------
195 !
196 !=======================================================================
197 ! DRIVING FORCES FX AND FY FOR WAVE-INDUCED CURRENTS
198 !=======================================================================
199 !
200  CALL vector(t1 , '=' , 'MASBAS ' , ielm ,
201  & 1.d0 , t3 , t3 , t3 , t3 , t3 , t3 ,
202  & mesh , msk , maskel )
203 !
204  CALL vector(t2 , '=' , 'GRADF X' , ielm ,
205  & 1.d0 , sxx, t4 , t4 , t4 , t4 , t4 ,
206  & mesh , msk , maskel )
207  CALL os('X=Y/Z ',x=t2,y=t2,z=t1)
208 !
209  CALL vector
210  & (t3,'=','GRADF Y',ielm,1.d0,sxy,t4,t4,t4,t4,t4,
211  & mesh , msk , maskel )
212  CALL os('X=Y/Z ',x=t3,y=t3,z=t1)
213 ! ----------------------------------
214 ! FORCE FX = - (DSXX/DX + DSXY/DY) / H
215 ! ----------------------------------
216  CALL os('X=Y+Z ',x=fx,y=t2,z=t3)
217  CALL os('X=CY/Z ',x=fx,y=fx,z=h,c=-1.d0)
218 !
219 ! ----------------------------------
220 !
221  CALL vector(t1 , '=' , 'MASBAS ' , ielm ,
222  & 1.d0 , t3 , t3 , t3 , t3 , t3 , t3 ,
223  & mesh , msk , maskel )
224 !
225  CALL vector
226  & (t2,'=','GRADF X',ielm,1.d0,sxy,t4,t4,t4,t4,t4,
227  & mesh , msk , maskel )
228  CALL os('X=Y/Z ',x=t2,y=t2,z=t1)
229 !
230  CALL vector
231  & (t3,'=','GRADF Y',ielm,1.d0,syy,t4,t4,t4,t4,t4,
232  & mesh , msk , maskel )
233  CALL os('X=Y/Z ',x=t3,y=t3,z=t1)
234 !
235 ! ----------------------------------
236 ! FORCE FY = - (DSXY/DX + DSYY/DY) / H
237 ! ----------------------------------
238  CALL os('X=Y+Z ',x=fy,y=t2,z=t3)
239  CALL os('X=CY/Z ',x=fy,y=fy,z=h,c=-1.d0)
240 !
241 !=======================================================================
242 !
243  RETURN
244  END
type(bief_obj), target am1
type(bief_obj), target h
subroutine filter(VEC, BLDMAT, T1, T2, A, FORMUL, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL, N)
Definition: filter.f:10
type(bief_obj), target maskel
double precision, dimension(:), pointer y
type(bief_obj), target hho
type(bief_obj), target phii
type(bief_obj), pointer t2
type(bief_mesh), target mesh
type(bief_obj), target fy
type(bief_obj), target inci
type(bief_obj), pointer t4
subroutine radia1(LISHHO)
Definition: radia1.f:7
type(bief_obj), target phir
double precision, dimension(:), pointer x
type(bief_obj), target sbid
subroutine vector(VEC, OP, FORMUL, IELM1, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL, LEGO, ASSPAR)
Definition: vector.f:7
type(bief_obj), target cg
type(bief_obj), pointer t3
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
Definition: os.f:7
type(bief_obj), pointer t1
type(bief_obj), target c
type(bief_obj), target sxx
type(bief_obj), target sxy
type(bief_obj), target syy
type(bief_obj), target fx
Definition: bief.f:3