The TELEMAC-MASCARET system  trunk
mt02aa.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE mt02aa
3 ! *****************
4 !
5  &( a11 , a12 , a13 ,
6  & a22 , a23 ,
7  & a33 ,
8  & xmul,su,u,sv,v,
9  & xel,yel,surfac,ikle1,ikle2,ikle3,nelem,nelmax,formul)
10 !
11 !***********************************************************************
12 ! BIEF V6P1 21/08/2010
13 !***********************************************************************
14 !
15 !brief BUILDS THE DIFFUSION MATRIX FOR P1 TRIANGLES.
16 !+
17 !+ VISCOSITY CAN BE ISOTROPIC IF U IS A VECTOR WITH 1
18 !+ DIMENSION. IT CAN BE ALSO TENSORIAL IF U IS A VECTOR
19 !+ WITH 3 DIMENSIONS, THEN REPRESENTING NUXX, NUYY, NUXY.
20 !
21 !warning THE JACOBIAN MUST BE POSITIVE
22 !
23 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
24 !+ 16/07/07
25 !+ V5P8
26 !+
27 !
28 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
29 !+ 13/07/2010
30 !+ V6P0
31 !+ Translation of French comments within the FORTRAN sources into
32 !+ English comments
33 !
34 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
35 !+ 21/08/2010
36 !+ V6P0
37 !+ Creation of DOXYGEN tags for automated documentation and
38 !+ cross-referencing of the FORTRAN sources
39 !
40 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
41 !| A11 |<--| ELEMENTS OF MATRIX
42 !| A12 |<--| ELEMENTS OF MATRIX
43 !| A13 |<--| ELEMENTS OF MATRIX
44 !| A22 |<--| ELEMENTS OF MATRIX
45 !| A23 |<--| ELEMENTS OF MATRIX
46 !| A33 |<--| ELEMENTS OF MATRIX
47 !| FORMUL |-->| FORMULA DESCRIBING THE MATRIX
48 !| IKLE1 |-->| FIRST POINTS OF TRIANGLES
49 !| IKLE2 |-->| SECOND POINTS OF TRIANGLES
50 !| IKLE3 |-->| THIRD POINTS OF TRIANGLES
51 !| NELEM |-->| NUMBER OF ELEMENTS
52 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
53 !| SU |-->| BIEF_OBJ STRUCTURE OF U
54 !| SURFAC |-->| AREA OF TRIANGLES
55 !| SV |-->| BIEF_OBJ STRUCTURE OF V
56 !| U |-->| FUNCTION U USED IN THE FORMULA
57 !| V |-->| FUNCTION V USED IN THE FORMULA
58 !| XEL |-->| ABSCISSAE OF POINTS IN THE MESH, PER ELEMENT
59 !| YEL |-->| ORDINATES OF POINTS IN THE MESH, PER ELEMENT
60 !| XMUL |-->| MULTIPLICATION FACTOR
61 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62 !
63  USE bief, ex_mt02aa => mt02aa
64 !
66  IMPLICIT NONE
67 !
68 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
69 !
70  INTEGER, INTENT(IN) :: NELEM,NELMAX
71  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax),IKLE3(nelmax)
72 !
73  DOUBLE PRECISION, INTENT(INOUT) :: A11(*),A12(*),A13(*)
74  DOUBLE PRECISION, INTENT(INOUT) :: A22(*),A23(*)
75  DOUBLE PRECISION, INTENT(INOUT) :: A33(*)
76  DOUBLE PRECISION, INTENT(IN) :: XMUL
77  DOUBLE PRECISION, INTENT(IN) :: U(*),V(*)
78 ! STRUCTURE OF U
79  TYPE(bief_obj), INTENT(IN) :: SU,SV
80  DOUBLE PRECISION, INTENT(IN) :: XEL(nelmax,3),YEL(nelmax,3)
81  DOUBLE PRECISION, INTENT(IN) :: SURFAC(nelmax)
82  CHARACTER(LEN=16), INTENT(IN) :: FORMUL
83 !
84 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
85 !
86 ! DECLARATIONS SPECIFIC TO THIS SUBROUTINE
87 !
88  INTEGER IELMNU,IELMNV,IELEM,ISO,IAD2,IAD3,I1,I2,I3
89 !
90  DOUBLE PRECISION X2,X3,Y2,Y3,S2D,VISC1,VISC2,VISC3,BPE,CPF,APD
91  DOUBLE PRECISION AUX,X2X3,Y2Y3,X2AUX,Y2AUX,X3AUX,Y3AUX,X2MX3,Y2MY3
92  DOUBLE PRECISION SOMVX,SOMVY,SOMVZ,XSUR12,XSUR48
93  DOUBLE PRECISION G1,G2,G3,COEF1,COEF2,G123
94 !
95 !=======================================================================
96 !
97  xsur12 = xmul / 12.d0
98  xsur48 = xmul / 48.d0
99 !
100 ! EXTRACTS THE TYPE OF ELEMENT FOR VISCOSITY
101 !
102  ielmnu=su%ELM
103  ielmnv=sv%ELM
104  iso = su%DIM2
105 !
106  IF(ielmnu.EQ.10.AND.iso.EQ.1) THEN
107 !
108 !-----------------------------------------------------------------------
109 !
110 ! P0 DISCRETISATION FOR ISOTROPIC VISCOSITY:
111 !
112  DO ielem = 1 , nelem
113 !
114 ! INITIALISES THE GEOMETRICAL VARIABLES
115 !
116  x2 = xel(ielem,2)
117  x3 = xel(ielem,3)
118 !
119  y2 = yel(ielem,2)
120  y3 = yel(ielem,3)
121 !
122 ! INITIALISES THE INTERMEDIATE VARIABLES
123 !
124  s2d = xmul*0.25d0/surfac(ielem)
125  visc1 = u(ielem)*s2d
126  bpe = visc1*(y3**2 + x3**2)
127  cpf = visc1*(y2*y3 + x2*x3)
128  apd = visc1*(y2**2 + x2**2)
129 !
130 ! DIAGONAL TERMS
131 !
132  a11(ielem)= apd+bpe-2*cpf
133  a22(ielem)= bpe
134  a33(ielem)= apd
135 !
136 ! EXTRADIAGONAL TERMS
137 !
138  a12(ielem)= cpf-bpe
139  a13(ielem)= cpf-apd
140  a23(ielem)=-cpf
141 !
142 ! END OF THE LOOP ON THE ELEMENTS
143 !
144  ENDDO ! IELEM
145 !
146 !-----------------------------------------------------------------------
147 !
148 ! P0 DISCRETISATIO FOR NONISOTROPIC VISCOSITY
149 !
150  ELSEIF(ielmnu.EQ.10.AND.iso.EQ.3) THEN
151 !
152 !-----------------------------------------------------------------------
153 !
154 ! P0 DISCRETISATION FOR ISOTROPIC VISCOSITY:
155 !
156  DO ielem = 1 , nelem
157 !
158 ! INITIALISES THE GEOMETRICAL VARIABLES
159 !
160  x2 = xel(ielem,2)
161  x3 = xel(ielem,3)
162 !
163  y2 = yel(ielem,2)
164  y3 = yel(ielem,3)
165 !
166 ! INITIALISES THE INTERMEDIATE VARIABLES
167 !
168  s2d = xmul*0.25d0/surfac(ielem)
169  visc1 = u( ielem)*s2d
170  visc2 = u( nelmax+ielem)*s2d
171  visc3 = u(2*nelmax+ielem)*s2d
172  bpe = visc1*y3**2 + visc2*x3**2
173  cpf = visc1*y2*y3 + visc2*x2*x3
174  apd = visc1*y2**2 + visc2*x2**2
175  x2mx3 = x2-x3
176  y2my3 = y2-y3
177 !
178 ! EXTRADIAGONAL TERMS
179 !
180  a12(ielem)= cpf-bpe - ( y2my3*x3 + x2mx3*y3 ) * visc3
181  a13(ielem)= cpf-apd + ( y2my3*x2 + x2mx3*y2 ) * visc3
182  a23(ielem)= -cpf + ( x2*y3 + x3*y2 ) * visc3
183 !
184 ! DIAGONAL TERMS
185 !
186  a11(ielem) = - a12(ielem) - a13(ielem)
187  a22(ielem) = - a12(ielem) - a23(ielem)
188  a33(ielem) = - a13(ielem) - a23(ielem)
189 !
190 ! END OF THE LOOP ON THE ELEMENTS
191 !
192  ENDDO ! IELEM
193 !
194 !-----------------------------------------------------------------------
195 !
196  ELSEIF(ielmnu.EQ.11.AND.iso.EQ.1) THEN
197 !
198 !-----------------------------------------------------------------------
199 !
200  IF(formul(7:8).EQ.'UV'.AND.
201  & ielmnu.EQ.11.AND.ielmnv.EQ.11) THEN
202 !
203 !-----------------------------------------------------------------------
204 !
205  DO ielem = 1 , nelem
206 !
207 ! INITIALISES THE GEOMETRICAL VARIABLES
208 !
209  x2 = xel(ielem,2)
210  x3 = xel(ielem,3)
211 !
212  y2 = yel(ielem,2)
213  y3 = yel(ielem,3)
214 !
215 ! INITIALISES THE INTERMEDIATE VARIABLES
216 !
217  i1=ikle1(ielem)
218  i2=ikle2(ielem)
219  i3=ikle3(ielem)
220 !
221  g1=v(i1)
222  g2=v(i2)
223  g3=v(i3)
224 !
225  coef1=xsur48/surfac(ielem)
226  g123=g1+g2+g3
227  coef2=u(i1)*(g1+g123)+u(i2)*(g2+g123)+u(i3)*(g3+g123)
228 !
229 ! EXTRADIAGONAL TERMS
230 !
231  a12(ielem)= (y3*(y2-y3)+x3*(x2-x3))*coef2*coef1
232  a13(ielem)=-(y2*(y2-y3)+x2*(x2-x3))*coef2*coef1
233  a23(ielem)=-(y2* y3 +x2* x3 )*coef2*coef1
234 !
235 ! DIAGONAL TERMS
236 !
237  a11(ielem) = - a12(ielem) - a13(ielem)
238  a22(ielem) = - a12(ielem) - a23(ielem)
239  a33(ielem) = - a13(ielem) - a23(ielem)
240 !
241  ENDDO
242 !
243 ! END OF THE LOOP ON THE ELEMENTS
244 !
245  ELSE
246 !
247 ! P1 DISCRETISATION FOR VISCOSITY:
248 !
249  DO ielem = 1 , nelem
250 !
251 ! INITIALISES THE GEOMETRICAL VARIABLES
252 !
253  x2 = xel(ielem,2)
254  x3 = xel(ielem,3)
255 !
256  y2 = yel(ielem,2)
257  y3 = yel(ielem,3)
258 !
259 ! INITIALISES THE INTERMEDIATE VARIABLES
260 !
261  somvx = ( u(ikle1(ielem))
262  & +u(ikle2(ielem))
263  & +u(ikle3(ielem)) ) * xsur12 / surfac(ielem)
264  x2x3 = x2 * x3 + y2 * y3
265  x2aux = x2*(-x2+x3)+y2*(-y2+y3)
266  x3aux = x3*(-x2+x3)+y3*(-y2+y3)
267 !
268 ! EXTRADIAGONAL TERMS
269 !
270  a12(ielem) = - somvx * x3aux
271  a13(ielem) = somvx * x2aux
272  a23(ielem) = - somvx * x2x3
273 !
274 ! DIAGONAL TERMS
275 !
276  a11(ielem) = - a12(ielem) - a13(ielem)
277  a22(ielem) = - a12(ielem) - a23(ielem)
278  a33(ielem) = - a13(ielem) - a23(ielem)
279 !
280  ENDDO ! IELEM
281 !
282  ENDIF
283 !
284 !-----------------------------------------------------------------------
285 !
286 ! LINEAR DISCRETISATION FOR NONISOTROPIC VISCOSITY
287 !
288  ELSEIF(ielmnu.EQ.11.AND.iso.EQ.3) THEN
289 !
290 !-----------------------------------------------------------------------
291 !
292 ! P1 DISCRETISATION FOR VISCOSITY:
293 !
294  iad2 = su%MAXDIM1
295  iad3 = 2*iad2
296 !
297  DO ielem = 1 , nelem
298 !
299 ! INITIALISES THE GEOMETRICAL VARIABLES
300 !
301  x2 = xel(ielem,2)
302  x3 = xel(ielem,3)
303 !
304  y2 = yel(ielem,2)
305  y3 = yel(ielem,3)
306 !
307 ! INITIALISES THE INTERMEDIATE VARIABLES
308 !
309  somvx = u(ikle1(ielem) )
310  & + u(ikle2(ielem) )
311  & + u(ikle3(ielem) )
312  somvy = u(ikle1(ielem)+iad2)
313  & + u(ikle2(ielem)+iad2)
314  & + u(ikle3(ielem)+iad2)
315  somvz = u(ikle1(ielem)+iad3)
316  & + u(ikle2(ielem)+iad3)
317  & + u(ikle3(ielem)+iad3)
318 !
319 ! INITIALISES THE INTERMEDIATE VARIABLES
320 !
321  aux = xsur12 / surfac(ielem)
322  x2x3 = x2 * x3
323  y2y3 = y2 * y3
324  x2aux = x2*(-x2+x3)
325  y2aux = y2*(-y2+y3)
326  x3aux = x3*(-x2+x3)
327  y3aux = y3*(-y2+y3)
328  x2mx3 = x2-x3
329  y2my3 = y2-y3
330 !
331 ! EXTRADIAGONAL TERMS
332 !
333  a12(ielem) = ( - somvx * y3aux
334  & - somvy * x3aux
335  & - y2my3*x3*somvz
336  & - x2mx3*y3*somvz ) * aux
337 !
338  a13(ielem) = ( somvx * y2aux
339  & + somvy * x2aux
340  & + y2my3*x2*somvz
341  & + x2mx3*y2*somvz ) * aux
342 !
343  a23(ielem) = ( - somvx * y2y3
344  & - somvy * x2x3
345  & + somvz*x3*y2+somvz*x2*y3 ) * aux
346 !
347 ! DIAGONAL TERMS
348 !
349  a11(ielem) = - a12(ielem) - a13(ielem)
350  a22(ielem) = - a12(ielem) - a23(ielem)
351  a33(ielem) = - a13(ielem) - a23(ielem)
352 !
353  ENDDO ! IELEM
354 !
355 !-----------------------------------------------------------------------
356 !
357  ELSE
358 !
359  WRITE(lu,11) ielmnu,iso
360 11 FORMAT(1x,
361  & 'MT02AA (BIEF) : TYPE OF VISCOSITY NOT AVAILABLE : ',2i6)
362  CALL plante(1)
363  stop
364 !
365  ENDIF
366 !
367 !-----------------------------------------------------------------------
368 !
369  IF(formul(14:16).EQ.'MON') THEN
370  IF(xmul.GT.0.d0) THEN
371  DO ielem=1,nelem
372  a12(ielem)=min(a12(ielem),0.d0)
373  a13(ielem)=min(a13(ielem),0.d0)
374  a23(ielem)=min(a23(ielem),0.d0)
375 ! DIAGONAL TERMS REDONE
376  a11(ielem) = - a12(ielem) - a13(ielem)
377  a22(ielem) = - a12(ielem) - a23(ielem)
378  a33(ielem) = - a13(ielem) - a23(ielem)
379  ENDDO
380  ELSE
381  DO ielem=1,nelem
382  a12(ielem)=max(a12(ielem),0.d0)
383  a13(ielem)=max(a13(ielem),0.d0)
384  a23(ielem)=max(a23(ielem),0.d0)
385 ! DIAGONAL TERMS REDONE
386  a11(ielem) = - a12(ielem) - a13(ielem)
387  a22(ielem) = - a12(ielem) - a23(ielem)
388  a33(ielem) = - a13(ielem) - a23(ielem)
389  ENDDO
390  ENDIF
391  ENDIF
392 !
393 !-----------------------------------------------------------------------
394 !
395  RETURN
396  END
subroutine mt02aa(A11, A12, A13, A22, A23, A33, XMUL, SU, U, SV, V, XEL, YEL, SURFAC, IKLE1, IKLE2, IKLE3, NELEM, NELMAX, FORMUL)
Definition: mt02aa.f:11
Definition: bief.f:3