The TELEMAC-MASCARET system  trunk
mt12aa.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE mt12aa
3 ! *****************
4 !
5  &( a11 , a12 , a13 ,
6  & a21 , a22 , a23 ,
7  & a31 , a32 , a33 ,
8  & xmul,sf,su,sv,f,u,v,
9  & xel,yel,surdet,
10  & ikle1,ikle2,ikle3,
11  & nelem,nelmax,icoord)
12 !
13 !***********************************************************************
14 ! BIEF V6P2 21/08/2010
15 !***********************************************************************
16 !
17 !brief COMPUTES THE COEFFICIENTS OF THE FOLLOWING MATRIX:
18 !code
19 !+ EXAMPLE WITH ICOORD=1
20 !+
21 !+ / --> --->
22 !+ A(I,J) = XMUL / PSIJ GRAD(F) U .GRAD(PSII) D(OMEGA)
23 !+ /OMEGA
24 !+ -->
25 !+ F VECTOR U VECTOR WITH COMPONENTS U,V,W
26 !+
27 !+
28 !+ BEWARE THE MINUS SIGN !!
29 !+
30 !+ PSI1: LINEAR
31 !+ PSI2: LINEAR
32 !+
33 !+ IT WOULD BE A DERIVATIVE WRT Y WITH ICOORD=2
34 !+ IT WOULD BE A DERIVATIVE WRT Z WITH ICOORD=3
35 !
36 !warning THE JACOBIAN MUST BE POSITIVE
37 !
38 !history J-M HERVOUET (LNH) ; C MOULIN (LNH)
39 !+ 09/12/94
40 !+ V5P1
41 !+
42 !
43 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
44 !+ 13/07/2010
45 !+ V6P0
46 !+ Translation of French comments within the FORTRAN sources into
47 !+ English comments
48 !
49 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
50 !+ 21/08/2010
51 !+ V6P0
52 !+ Creation of DOXYGEN tags for automated documentation and
53 !+ cross-referencing of the FORTRAN sources
54 !
55 !history J-M HERVOUET (LNHE)
56 !+ 15/06/2012
57 !+ V6P2
58 !+ SURFAC changed into SURDET and formulas changed accordingly
59 !+ This is just optimisation.
60 !
61 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62 !| A11 |<--| ELEMENTS OF MATRIX
63 !| A12 |<--| ELEMENTS OF MATRIX
64 !| A13 |<--| ELEMENTS OF MATRIX
65 !| A21 |<--| ELEMENTS OF MATRIX
66 !| A22 |<--| ELEMENTS OF MATRIX
67 !| A23 |<--| ELEMENTS OF MATRIX
68 !| A31 |<--| ELEMENTS OF MATRIX
69 !| A32 |<--| ELEMENTS OF MATRIX
70 !| A33 |<--| ELEMENTS OF MATRIX
71 !| F |-->| FUNCTION USED IN THE FORMULA
72 !| ICOORD |-->| 1: DERIVATIVE ALONG X, 2: ALONG Y
73 !| IKLE1 |-->| FIRST POINTS OF TRIANGLES
74 !| IKLE2 |-->| SECOND POINTS OF TRIANGLES
75 !| IKLE3 |-->| THIRD POINTS OF TRIANGLES
76 !| IKLE4 |-->| QUASI-BUBBLE POINT
77 !| NELEM |-->| NUMBER OF ELEMENTS
78 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
79 !| SF |-->| STRUCTURE OF FUNCTIONS F
80 !| SU |-->| BIEF_OBJ STRUCTURE OF U
81 !| SURDET |-->| HERE = 1/(2*SURFAC)
82 !| SV |-->| BIEF_OBJ STRUCTURE OF V
83 !| U |-->| FUNCTION U USED IN THE FORMULA
84 !| V |-->| FUNCTION V USED IN THE FORMULA
85 !| XEL |-->| ABSCISSAE OF POINTS IN THE MESH, PER ELEMENT
86 !| YEL |-->| ORDINATES OF POINTS IN THE MESH, PER ELEMENT
87 !| XMUL |-->| MULTIPLICATION FACTOR
88 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
89 !
90  USE bief, ex_mt12aa => mt12aa
91 !
93  IMPLICIT NONE
94 !
95 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
96 !
97  INTEGER, INTENT(IN) :: NELEM,NELMAX,ICOORD
98  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax),IKLE3(nelmax)
99 !
100  DOUBLE PRECISION, INTENT(INOUT) :: A11(*),A12(*),A13(*)
101  DOUBLE PRECISION, INTENT(INOUT) :: A21(*),A22(*),A23(*)
102  DOUBLE PRECISION, INTENT(INOUT) :: A31(*),A32(*),A33(*)
103 !
104  DOUBLE PRECISION, INTENT(IN) :: XMUL
105  DOUBLE PRECISION, INTENT(IN) :: F(*),U(*),V(*)
106 !
107 ! STRUCTURES OF F, U, V
108  TYPE(bief_obj), INTENT(IN) :: SF,SU,SV
109 !
110  DOUBLE PRECISION, INTENT(IN) :: XEL(nelmax,3),YEL(nelmax,3)
111  DOUBLE PRECISION, INTENT(IN) :: SURDET(nelmax)
112 !
113 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
114 !
115  INTEGER IELEM,IELMF,IELMU,IELMV
116  DOUBLE PRECISION X2,X3,Y2,Y3,F1,F2,F3,DEN
117  DOUBLE PRECISION U1,U2,U3,V1,V2,V3,U123,V123,XSUR06,XSUR24
118 !
119 !-----------------------------------------------------------------------
120 !
121  xsur06 = xmul/06.d0
122  xsur24 = xmul/24.d0
123 !
124 !-----------------------------------------------------------------------
125 !
126  ielmf=sf%ELM
127  ielmu=su%ELM
128  ielmv=sv%ELM
129 !
130 ! CASE WHERE F IS OF TYPE P1 AND U P0
131 !
132  IF(ielmf.EQ.11.AND.ielmu.EQ.10.AND.ielmv.EQ.10) THEN
133 !
134 !================================
135 ! DERIVATIVE WRT X =
136 !================================
137 !
138  IF(icoord.EQ.1) THEN
139 !
140 ! LOOP ON THE ELEMENTS
141 !
142  DO ielem = 1 , nelem
143 !
144 ! INITIALISES THE GEOMETRICAL VARIABLES
145 !
146  x2 = xel(ielem,2)
147  x3 = xel(ielem,3)
148  y2 = yel(ielem,2)
149  y3 = yel(ielem,3)
150 !
151  f1 = f(ikle1(ielem))
152  f2 = f(ikle2(ielem)) - f1
153  f3 = f(ikle3(ielem)) - f1
154 !
155  den = (f3*y2 - f2*y3) * xsur06 * surdet(ielem)
156 !
157 ! EXTRADIAGONAL TERMS
158 !
159  a23(ielem) = ( x3 *v(ielem) - y3 *u(ielem) )*den
160  a31(ielem) =-( x2 *v(ielem) - y2 *u(ielem) )*den
161 !
162  a12(ielem) = - a23(ielem) - a31(ielem)
163  a13(ielem) = a12(ielem)
164  a21(ielem) = a23(ielem)
165  a32(ielem) = a31(ielem)
166 !
167 ! DIAGONAL TERMS (THE SUM OF EACH COLUMN IS 0)
168 !
169  a11(ielem) = - a21(ielem) - a31(ielem)
170  a22(ielem) = - a12(ielem) - a32(ielem)
171  a33(ielem) = - a13(ielem) - a23(ielem)
172 !
173  ENDDO ! IELEM
174 !
175  ELSEIF(icoord.EQ.2) THEN
176 !
177 !================================
178 ! DERIVATIVE WRT Y =
179 !================================
180 !
181  DO ielem = 1 , nelem
182 !
183 ! INITIALISES THE GEOMETRICAL VARIABLES
184 !
185  x2 = xel(ielem,2)
186  x3 = xel(ielem,3)
187  y2 = yel(ielem,2)
188  y3 = yel(ielem,3)
189 !
190  f1 = f(ikle1(ielem))
191  f2 = f(ikle2(ielem)) - f1
192  f3 = f(ikle3(ielem)) - f1
193 !
194  den = (f3*x2 - f2*x3) * xsur06 * surdet(ielem)
195 !
196 ! EXTRADIAGONAL TERMS
197 !
198  a23(ielem) = -( x3*v(ielem) - y3*u(ielem) ) * den
199  a31(ielem) = ( x2*v(ielem) - y2*u(ielem) ) * den
200 !
201  a12(ielem) = - a23(ielem) - a31(ielem)
202  a13(ielem) = a12(ielem)
203  a21(ielem) = a23(ielem)
204  a32(ielem) = a31(ielem)
205 !
206 ! DIAGONAL TERMS (THE SUM OF EACH COLUMN IS 0)
207 !
208  a11(ielem) = - a21(ielem) - a31(ielem)
209  a22(ielem) = - a12(ielem) - a32(ielem)
210  a33(ielem) = - a13(ielem) - a23(ielem)
211 !
212  ENDDO ! IELEM
213 !
214  ELSE
215 !
216  WRITE(lu,201) icoord
217 201 FORMAT(1x,'MT12AA (BIEF) : IMPOSSIBLE COMPONENT ',
218  & 1i6,' CHECK ICOORD')
219  CALL plante(0)
220  stop
221 !
222  ENDIF
223 !
224 !-----------------------------------------------------------------------
225 !
226  ELSEIF(ielmf.EQ.11.AND.ielmu.EQ.11) THEN
227 !
228 !================================
229 ! DERIVATIVE WRT X =
230 !================================
231 !
232  IF(icoord.EQ.1) THEN
233 !
234 ! LOOP ON THE ELEMENTS
235 !
236  DO ielem = 1 , nelem
237 !
238 ! INITIALISES THE GEOMETRICAL VARIABLES
239 !
240  x2 = xel(ielem,2)
241  x3 = xel(ielem,3)
242  y2 = yel(ielem,2)
243  y3 = yel(ielem,3)
244 !
245  f1 = f(ikle1(ielem))
246  f2 = f(ikle2(ielem)) - f1
247  f3 = f(ikle3(ielem)) - f1
248 !
249  u1 = u(ikle1(ielem))
250  u2 = u(ikle2(ielem))
251  u3 = u(ikle3(ielem))
252 !
253  v1 = v(ikle1(ielem))
254  v2 = v(ikle2(ielem))
255  v3 = v(ikle3(ielem))
256 !
257  u123 = u1 + u2 + u3
258  v123 = v1 + v2 + v3
259 !
260  den = (f3*y2 - f2*y3) * xsur24 * surdet(ielem)
261 !
262 ! EXTRADIAGONAL TERMS
263 !
264  a12(ielem) = ( (x2-x3)*(v123+v2) + (y3-y2)*(u123+u2) )*den
265 !
266  a13(ielem) = ( (x2-x3)*(v123+v3) + (y3-y2)*(u123+u3) )*den
267 !
268  a23(ielem) = ( x3*(v123+v3) - y3*(u123+u3) )*den
269 !
270  a21(ielem) = ( x3*(v123+v1) - y3*(u123+u1) )*den
271 !
272  a31(ielem) =-( x2*(v123+v1) - y2*(u123+u1) )*den
273 !
274  a32(ielem) =-( x2*(v123+v2) - y2*(u123+u2) )*den
275 !
276 ! DIAGONAL TERMS (THE SUM OF EACH COLUMN IS 0)
277 !
278  a11(ielem) = - a21(ielem) - a31(ielem)
279  a22(ielem) = - a12(ielem) - a32(ielem)
280  a33(ielem) = - a13(ielem) - a23(ielem)
281 !
282  ENDDO ! IELEM
283 !
284  ELSEIF(icoord.EQ.2) THEN
285 !
286 !================================
287 ! DERIVATIVE WRT Y =
288 !================================
289 !
290  DO ielem = 1 , nelem
291 !
292 ! INITIALISES THE GEOMETRICAL VARIABLES
293 !
294  x2 = xel(ielem,2)
295  x3 = xel(ielem,3)
296  y2 = yel(ielem,2)
297  y3 = yel(ielem,3)
298 !
299  f1 = f(ikle1(ielem))
300  f2 = f(ikle2(ielem)) - f1
301  f3 = f(ikle3(ielem)) - f1
302 !
303  u1 = u(ikle1(ielem))
304  u2 = u(ikle2(ielem))
305  u3 = u(ikle3(ielem))
306 !
307  v1 = v(ikle1(ielem))
308  v2 = v(ikle2(ielem))
309  v3 = v(ikle3(ielem))
310 !
311  u123 = u1 + u2 + u3
312  v123 = v1 + v2 + v3
313 !
314  den = (f3*x2 - f2*x3) * xsur24 * surdet(ielem)
315 !
316 ! EXTRADIAGONAL TERMS
317 !
318  a12(ielem) =-( (x2-x3)*(v123+v2) + (y3-y2)*(u123+u2) )*den
319 !
320  a13(ielem) =-( (x2-x3)*(v123+v3) + (y3-y2)*(u123+u3) )*den
321 !
322  a23(ielem) =-( x3*(v123+v3) - y3*(u123+u3) )*den
323 !
324  a21(ielem) =-( x3*(v123+v1) - y3*(u123+u1) )*den
325 !
326  a31(ielem) = ( x2*(v123+v1) - y2*(u123+u1) )*den
327 !
328  a32(ielem) = ( x2*(v123+v2) - y2*(u123+u2) )*den
329 !
330 ! DIAGONAL TERMS (THE SUM OF EACH COLUMN IS 0)
331 !
332  a11(ielem) = - a21(ielem) - a31(ielem)
333  a22(ielem) = - a12(ielem) - a32(ielem)
334  a33(ielem) = - a13(ielem) - a23(ielem)
335 !
336  ENDDO ! IELEM
337 !
338  ELSE
339  WRITE(lu,201) icoord
340  CALL plante(0)
341  stop
342  ENDIF
343 !
344 ! OTHER TYPES OF F FUNCTIONS
345 !
346 !-----------------------------------------------------------------------
347 !
348  ELSE
349  WRITE(lu,101) ielmf,ielmu
350 101 FORMAT(1x,'MT12AA (BIEF) :',/,
351  & 1x,'COMBINATION OF F AND U: ',1i6,2x,1i6,' NOT AVAILABLE')
352  CALL plante(0)
353  stop
354  ENDIF
355 !
356 !-----------------------------------------------------------------------
357 !
358  RETURN
359  END
subroutine mt12aa(A11, A12, A13, A21, A22, A23, A31, A32, A33, XMUL, SF, SU, SV, F, U, V, XEL, YEL, SURDET, IKLE1, IKLE2, IKLE3, NELEM, NELMAX, ICOORD)
Definition: mt12aa.f:13
Definition: bief.f:3