The TELEMAC-MASCARET system  trunk
vc13aa.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vc13aa
3 ! *****************
4 !
5  &( xmul,sf,f,xel,yel,
6  & ikle1,ikle2,ikle3,ikle4,nelem,nelmax,w1,w2,w3 , icoord )
7 !
8 !***********************************************************************
9 ! BIEF V7P0 21/08/2010
10 !***********************************************************************
11 !
12 !brief COMPUTES THE FOLLOWING VECTOR IN FINITE ELEMENTS:
13 !code
14 !+ (EXAMPLE OF THE X COMPONENT, WHICH CORRESPONDS TO ICOORD=1)
15 !+
16 !+ / DF
17 !+ VEC(I) = XMUL / ( P *( -- )) D(OMEGA)
18 !+ /OMEGA I DX
19 !+
20 !+ P IS A LINEAR BASE
21 !+ I
22 !+
23 !+ F IS A VECTOR OF TYPE P1 OR OTHER
24 !
25 !note IMPORTANT : IF F IS OF TYPE P0, THE RESULT IS 0.
26 !+ HERE, IF F IS P0, IT REALLY MEANS THAT F IS
27 !+ P1, BUT GIVEN BY ELEMENTS.
28 !+ THE SIZE OF F SHOULD THEN BE : F(NELMAX,3).
29 !
30 !warning THE JACOBIAN MUST BE POSITIVE
31 !warning THE RESULT IS IN W IN NOT ASSEMBLED FORM
32 !
33 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
34 !+ 09/12/94
35 !+ V5P1
36 !+
37 !
38 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
39 !+ 13/07/2010
40 !+ V6P0
41 !+ Translation of French comments within the FORTRAN sources into
42 !+ English comments
43 !
44 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
45 !+ 21/08/2010
46 !+ V6P0
47 !+ Creation of DOXYGEN tags for automated documentation and
48 !+ cross-referencing of the FORTRAN sources
49 !
50 !history J-M HERVOUET (EDF LAB, LNHE)
51 !+ 12/05/2014
52 !+ V7P0
53 !+ Discontinuous elements better treated: new types 15, 16 and 17 for
54 !+ discontinuous linear, quasi-bubble, and quadratic, rather than
55 !+ using component DIMDISC=11, 12 or 13.
56 !
57 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
58 !| F |-->| FUNCTION USED IN THE VECTOR FORMULA
59 !| ICOORD |-->| 1: DERIVATIVE ALONG X, 2: ALONG Y
60 !| IKLE1 |-->| FIRST POINT OF TRIANGLES
61 !| IKLE2 |-->| SECOND POINT OF TRIANGLES
62 !| IKLE3 |-->| THIRD POINT OF TRIANGLES
63 !| NELEM |-->| NUMBER OF ELEMENTS
64 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
65 !| SF |-->| BIEF_OBJ STRUCTURE OF F
66 !| SURFAC |-->| AREA OF TRIANGLES
67 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
68 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
69 !| W3 |<--| RESULT IN NON ASSEMBLED FORM
70 !| XEL |-->| ABSCISSAE OF POINTS IN THE MESH, PER ELEMENT
71 !| XMUL |-->| MULTIPLICATION COEFFICIENT
72 !| YEL |-->| ORDINATES OF POINTS IN THE MESH, PER ELEMENT
73 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
74 !
75  USE bief, ex_vc13aa => vc13aa
76 !
78  IMPLICIT NONE
79 !
80 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
81 !
82  INTEGER, INTENT(IN) :: NELEM,NELMAX,ICOORD
83  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax)
84  INTEGER, INTENT(IN) :: IKLE3(nelmax),IKLE4(nelmax)
85 !
86  DOUBLE PRECISION, INTENT(IN) :: XEL(nelmax,*),YEL(nelmax,*)
87  DOUBLE PRECISION, INTENT(INOUT) ::W1(nelmax),W2(nelmax),W3(nelmax)
88  DOUBLE PRECISION, INTENT(IN) :: XMUL
89 !
90 ! STRUCTURE OF F AND REAL DATA
91 !
92  TYPE(bief_obj), INTENT(IN) :: SF
93  DOUBLE PRECISION, INTENT(IN) :: F(*)
94 !
95 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
96 !
97  INTEGER IELEM,IELMF
98  DOUBLE PRECISION XSUR6,XSUR18,F1,F2,F3,F4,X2,X3,Y2,Y3
99 !
100 !-----------------------------------------------------------------------
101 !
102  xsur6 = xmul / 6.d0
103  xsur18= xmul /18.d0
104 !
105 !-----------------------------------------------------------------------
106 !
107  ielmf=sf%ELM
108 !
109 !-----------------------------------------------------------------------
110 !
111 ! F IS LINEAR
112 !
113  IF(ielmf.EQ.11) THEN
114 !
115 ! X COORDINATE
116 !
117  IF(icoord.EQ.1) THEN
118 !
119  DO ielem = 1 , nelem
120 !
121  w1(ielem) = ( yel(ielem,2) *
122  & (f(ikle1(ielem))-f(ikle3(ielem)))
123  & + yel(ielem,3) *
124  & (f(ikle2(ielem))-f(ikle1(ielem))) ) * xsur6
125  w2(ielem) = w1(ielem)
126  w3(ielem) = w1(ielem)
127 !
128  ENDDO
129 !
130  ELSEIF(icoord.EQ.2) THEN
131 !
132 ! Y COORDINATE
133 !
134  DO ielem = 1 , nelem
135 !
136  w1(ielem) = ( xel(ielem,2) *
137  & (f(ikle3(ielem))-f(ikle1(ielem)))
138  & + xel(ielem,3) *
139  & (f(ikle1(ielem))-f(ikle2(ielem))) ) * xsur6
140  w2(ielem) = w1(ielem)
141  w3(ielem) = w1(ielem)
142 !
143  ENDDO
144 !
145  ELSE
146 !
147  WRITE(lu,201) icoord
148 201 FORMAT(1x,'VC13AA (BIEF) : IMPOSSIBLE COMPONENT ',
149  & 1i6,' CHECK ICOORD')
150  CALL plante(0)
151  stop
152 !
153  ENDIF
154 !
155 !-----------------------------------------------------------------------
156 !
157 ! F IS QUASI-BUBBLE
158 !
159  ELSEIF(ielmf.EQ.12) THEN
160 !
161 ! X COORDINATE
162 !
163  IF(icoord.EQ.1) THEN
164 !
165  DO ielem = 1 , nelem
166 !
167  y2 = yel(ielem,2)
168  y3 = yel(ielem,3)
169 !
170  f1 = f(ikle1(ielem))
171  f2 = f(ikle2(ielem)) - f1
172  f3 = f(ikle3(ielem)) - f1
173  f4 = f(ikle4(ielem)) - f1
174 !
175  w1(ielem)=(y2*(-3*f4-2*f3+f2)+y3*(3*f4-f3+2*f2)) * xsur18
176  w2(ielem)=(-3*y2*f3+y3*(-3*f4+f3+4*f2)) * xsur18
177  w3(ielem)=(y2*(3*f4-4*f3-f2)+3*y3*f2) * xsur18
178 !
179  ENDDO
180 !
181  ELSEIF(icoord.EQ.2) THEN
182 !
183 ! Y COORDINATE
184 !
185  DO ielem = 1 , nelem
186 !
187  x2 = xel(ielem,2)
188  x3 = xel(ielem,3)
189 !
190  f1 = f(ikle1(ielem))
191  f2 = f(ikle2(ielem)) - f1
192  f3 = f(ikle3(ielem)) - f1
193  f4 = f(ikle4(ielem)) - f1
194 !
195  w1(ielem)=(x2*(3*f4+2*f3-f2)+x3*(-3*f4+f3-2*f2)) * xsur18
196  w2(ielem)=(3*x2*f3+x3*(3*f4-f3-4*f2)) * xsur18
197  w3(ielem)=(x2*(-3*f4+4*f3+f2)-3*x3*f2) * xsur18
198 !
199  ENDDO
200 !
201  ELSE
202 !
203  WRITE(lu,201) icoord
204  CALL plante(1)
205  stop
206 !
207  ENDIF
208 !
209 !-----------------------------------------------------------------------
210 !
211 ! BEWARE: HERE F IS QUASI-BUBBLE BUT DISCONTINUOUS BETWEEN THE ELEMENTS
212 !
213  ELSEIF(ielmf.EQ.16) THEN
214 !
215 ! X COORDINATE
216 !
217  IF(icoord.EQ.1) THEN
218 !
219  DO ielem = 1 , nelem
220 !
221  y2 = yel(ielem,2)
222  y3 = yel(ielem,3)
223 !
224  f1 = f(ielem)
225  f2 = f(ielem+ nelmax)-f1
226  f3 = f(ielem+2*nelmax)-f1
227  f4 = f(ielem+3*nelmax)-f1
228 !
229  w1(ielem)=(y2*(-3*f4-2*f3+f2)+y3*(3*f4-f3+2*f2)) * xsur18
230  w2(ielem)=(-3*y2*f3+y3*(-3*f4+f3+4*f2)) * xsur18
231  w3(ielem)=(y2*(3*f4-4*f3-f2)+3*y3*f2) * xsur18
232 !
233  ENDDO
234 !
235  ELSEIF(icoord.EQ.2) THEN
236 !
237 ! Y COORDINATE
238 !
239  DO ielem = 1 , nelem
240 !
241  x2 = xel(ielem,2)
242  x3 = xel(ielem,3)
243 !
244  f1 = f(ielem)
245  f2 = f(ielem+ nelmax)-f1
246  f3 = f(ielem+2*nelmax)-f1
247  f4 = f(ielem+3*nelmax)-f1
248 !
249  w1(ielem)=(x2*(3*f4+2*f3-f2)+x3*(-3*f4+f3-2*f2)) * xsur18
250  w2(ielem)=(3*x2*f3+x3*(3*f4-f3-4*f2)) * xsur18
251  w3(ielem)=(x2*(-3*f4+4*f3+f2)-3*x3*f2) * xsur18
252 !
253  ENDDO
254 !
255  ELSE
256 !
257  WRITE(lu,201) icoord
258  CALL plante(1)
259  stop
260 !
261  ENDIF
262 !
263 !-----------------------------------------------------------------------
264 !
265  ELSEIF(ielmf.EQ.15) THEN
266 !
267 ! BEWARE: HERE F IS LINEAR BUT DISCONTINUOUS BETWEEN THE ELEMENTS
268 !
269 ! X COORDINATE
270 !
271  IF(icoord.EQ.1) THEN
272 !
273  DO ielem = 1 , nelem
274 !
275  w1(ielem) = ( yel(ielem,2) * (f(ielem)-f(ielem+2*nelmax))
276  & + yel(ielem,3) * (f(ielem+nelmax)-f(ielem)))* xsur6
277  w2(ielem) = w1(ielem)
278  w3(ielem) = w1(ielem)
279 !
280  ENDDO
281 !
282  ELSEIF(icoord.EQ.2) THEN
283 !
284 ! Y COORDINATE
285 !
286  DO ielem = 1 , nelem
287 !
288  w1(ielem) = ( xel(ielem,2) * (f(ielem+2*nelmax)-f(ielem))
289  & + xel(ielem,3) * (f(ielem)-f(ielem+nelmax)))*xsur6
290  w2(ielem) = w1(ielem)
291  w3(ielem) = w1(ielem)
292 !
293  ENDDO
294 !
295  ELSE
296 !
297  WRITE(lu,201) icoord
298  CALL plante(1)
299  stop
300 !
301  ENDIF
302 !
303 !-----------------------------------------------------------------------
304 !
305  ELSE
306 !
307 !-----------------------------------------------------------------------
308 !
309  WRITE(lu,102) ielmf,sf%NAME
310 102 FORMAT(1x,'VC13AA (BIEF) :',/,
311  & 1x,'DISCRETISATION OF F : ',1i6,' NOT IMPLEMENTED',/,
312  & 1x,'REAL NAME OF F: ',a6)
313  CALL plante(1)
314  stop
315 !
316  ENDIF
317 !
318 !-----------------------------------------------------------------------
319 !
320  RETURN
321  END
subroutine vc13aa(XMUL, SF, F, XEL, YEL, IKLE1, IKLE2, IKLE3, IKLE4, NELEM, NELMAX, W1, W2, W3, ICOORD)
Definition: vc13aa.f:8
Definition: bief.f:3