The TELEMAC-MASCARET system  trunk
mt08ab.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE mt08ab
3 ! *****************
4 !
5  &( a11 , a12 , a13 , a14 ,
6  & a21 , a22 , a23 , a24 ,
7  & a31 , a32 , a33 , a34 ,
8  & xmul,sf,f,xel,yel,ikle1,ikle2,ikle3,ikle4,
9  & nelem,nelmax,icoord)
10 !
11 !***********************************************************************
12 ! BIEF V6P1 21/08/2010
13 !***********************************************************************
14 !
15 !brief COMPUTES THE COEFFICIENTS OF THE FOLLOWING MATRIX:
16 !code
17 !+ EXAMPLE WITH ICOORD = 1
18 !+
19 !+ / D
20 !+ A(I,J)= -XMUL / PSI2(J) * F * --( PSI1(I) ) D(OMEGA)
21 !+ /OMEGA DX
22 !+
23 !+ BEWARE THE MINUS SIGN !!
24 !+
25 !+ PSI1: BASES OF TYPE P1 TRIANGLE
26 !+ PSI2: BASES OF TYPE QUASI-BUBBLE TRIANGLE
27 !+
28 !+ IT WOULD BE A DERIVATIVE WRT Y WITH ICOORD=2
29 !
30 !warning THE JACOBIAN MUST BE POSITIVE
31 !
32 !history J-M HERVOUET (LNH) ; C MOULIN (LNH)
33 !+ 09/12/94
34 !+ V5P1
35 !+
36 !
37 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
38 !+ 13/07/2010
39 !+ V6P0
40 !+ Translation of French comments within the FORTRAN sources into
41 !+ English comments
42 !
43 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
44 !+ 21/08/2010
45 !+ V6P0
46 !+ Creation of DOXYGEN tags for automated documentation and
47 !+ cross-referencing of the FORTRAN sources
48 !
49 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
50 !| A11 |<--| ELEMENTS OF MATRIX
51 !| A12 |<--| ELEMENTS OF MATRIX
52 !| A13 |<--| ELEMENTS OF MATRIX
53 !| A14 |<--| ELEMENTS OF MATRIX
54 !| A21 |<--| ELEMENTS OF MATRIX
55 !| A22 |<--| ELEMENTS OF MATRIX
56 !| A23 |<--| ELEMENTS OF MATRIX
57 !| A24 |<--| ELEMENTS OF MATRIX
58 !| A31 |<--| ELEMENTS OF MATRIX
59 !| A32 |<--| ELEMENTS OF MATRIX
60 !| A33 |<--| ELEMENTS OF MATRIX
61 !| A34 |<--| ELEMENTS OF MATRIX
62 !| F |-->| FUNCTION USED IN THE FORMULA
63 !| ICOORD |-->| 1: DERIVATIVE ALONG X, 2: ALONG Y
64 !| IKLE1 |-->| FIRST POINTS OF TRIANGLES
65 !| IKLE2 |-->| SECOND POINTS OF TRIANGLES
66 !| IKLE3 |-->| THIRD POINTS OF TRIANGLES
67 !| NELEM |-->| NUMBER OF ELEMENTS
68 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
69 !| SF |-->| STRUCTURE OF FUNCTIONS F
70 !| XEL |-->| ABSCISSAE OF POINTS IN THE MESH, PER ELEMENT
71 !| YEL |-->| ORDINATES OF POINTS IN THE MESH, PER ELEMENT
72 !| XMUL |-->| MULTIPLICATION FACTOR
73 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
74 !
75  USE bief, ex_mt08ab => mt08ab
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(INOUT) :: A11(*),A12(*),A13(*),A14(*)
87  DOUBLE PRECISION, INTENT(INOUT) :: A21(*),A22(*),A23(*),A24(*)
88  DOUBLE PRECISION, INTENT(INOUT) :: A31(*),A32(*),A33(*),A34(*)
89 !
90  DOUBLE PRECISION, INTENT(IN) :: XMUL
91  DOUBLE PRECISION, INTENT(IN) :: F(*)
92 !
93 ! STRUCTURE OF F
94  TYPE(bief_obj), INTENT(IN) :: SF
95 !
96  DOUBLE PRECISION, INTENT(IN) :: XEL(nelmax,3),YEL(nelmax,3)
97 !
98 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
99 !
100  INTEGER IELEM,IELMF
101  DOUBLE PRECISION X2,X3,Y2,Y3,F1,F2,F3,F4
102 !
103 !-----------------------------------------------------------------------
104 !
105  ielmf=sf%ELM
106 !
107 !-----------------------------------------------------------------------
108 ! CASE WHERE F IS OF P1 DISCRETISATION
109 !-----------------------------------------------------------------------
110 !
111  IF(ielmf.EQ.11) THEN
112 !
113 !================================
114 ! CASE OF DERIVATIVE WRT X =
115 !================================
116 !
117  IF(icoord.EQ.1) THEN
118 !
119 ! LOOP ON THE ELEMENTS
120 !
121  DO ielem = 1 , nelem
122 !
123 ! INITIALISES THE GEOMETRICAL VARIABLES
124 !
125  y2 = yel(ielem,2)
126  y3 = yel(ielem,3)
127 !
128  f1 = f(ikle1(ielem))
129  f2 = f(ikle2(ielem))
130  f3 = f(ikle3(ielem))
131 !
132 ! EXTRADIAGONAL TERMS
133 !
134  a12(ielem) = (y3-y2)*(5*f3+14*f2+5*f1)*xmul/216
135  a13(ielem) = (y3-y2)*(14*f3+5*f2+5*f1)*xmul/216
136  a14(ielem) = (y3-y2)*(f3+f2+f1)*xmul/18
137  a21(ielem) = -y3*(5*f3+5*f2+14*f1)*xmul/216
138  a23(ielem) = -y3*(14*f3+5*f2+5*f1)*xmul/216
139  a24(ielem) = -y3*(f3+f2+f1)*xmul/18
140  a31(ielem) = y2*(5*f3+5*f2+14*f1)*xmul/216
141  a32(ielem) = y2*(5*f3+14*f2+5*f1)*xmul/216
142  a34(ielem) = y2*(f3+f2+f1)*xmul/18
143 !
144 ! DIAGONAL TERMS
145 ! (SUM OF EACH LINE IN THE MATRIX IS 0)
146 !
147  a11(ielem) = - a21(ielem) - a31(ielem)
148  a22(ielem) = - a12(ielem) - a32(ielem)
149  a33(ielem) = - a13(ielem) - a23(ielem)
150 !
151  ENDDO ! IELEM
152 !
153  ELSEIF(icoord.EQ.2) THEN
154 !
155 !================================
156 ! CASE OF DERIVATIVE WRT Y =
157 !================================
158 !
159  DO ielem = 1 , nelem
160 !
161 ! INITIALISES THE GEOMETRICAL VARIABLES
162 !
163  x2 = xel(ielem,2)
164  x3 = xel(ielem,3)
165 !
166  f1 = f(ikle1(ielem))
167  f2 = f(ikle2(ielem))
168  f3 = f(ikle3(ielem))
169 !
170 ! EXTRADIAGONAL TERMS
171 !
172  a12(ielem) = (x2-x3)*(5*f3+14*f2+5*f1)*xmul/216
173  a13(ielem) = (x2-x3)*(14*f3+5*f2+5*f1)*xmul/216
174  a14(ielem) = (x2-x3)*(f3+f2+f1)*xmul/18
175  a21(ielem) = x3*(5*f3+5*f2+14*f1)*xmul/216
176  a23(ielem) = x3*(14*f3+5*f2+5*f1)*xmul/216
177  a24(ielem) = x3*(f3+f2+f1)*xmul/18
178  a31(ielem) = -x2*(5*f3+5*f2+14*f1)*xmul/216
179  a32(ielem) = -x2*(5*f3+14*f2+5*f1)*xmul/216
180  a34(ielem) = -x2*(f3+f2+f1)*xmul/18
181 !
182 ! DIAGONAL TERMS
183 ! (SUM OF EACH LINE IN THE MATRIX IS 0)
184 !
185  a11(ielem) = - a21(ielem) - a31(ielem)
186  a22(ielem) = - a12(ielem) - a32(ielem)
187  a33(ielem) = - a13(ielem) - a23(ielem)
188 !
189  ENDDO ! IELEM
190 !
191  ELSE
192 !
193  WRITE(lu,201) icoord
194  CALL plante(0)
195  stop
196  ENDIF
197 !
198 !
199 !-----------------------------------------------------------------------
200 ! CASE WHERE F IS OF QUASI-BUBBLE DISCRETISATION
201 !-----------------------------------------------------------------------
202 !
203  ELSEIF(ielmf.EQ.12) THEN
204 !
205 !================================
206 ! CASE OF DERIVATIVE WRT X =
207 !================================
208 !
209  IF(icoord.EQ.1) THEN
210 !
211 ! LOOP ON THE ELEMENTS
212 !
213  DO ielem = 1 , nelem
214 !
215 ! INITIALISES THE GEOMETRICAL VARIABLES
216 !
217  y2 = yel(ielem,2)
218  y3 = yel(ielem,3)
219 !
220  f1 = f(ikle1(ielem))
221  f2 = f(ikle2(ielem))
222  f3 = f(ikle3(ielem))
223  f4 = f(ikle4(ielem))
224 !
225 ! EXTRADIAGONAL TERMS
226 !
227  a12(ielem) = (f3+2*f4+4*f2+f1)*(y3-y2)*xmul/72
228  a13(ielem) = (4*f3+2*f4+f2+f1)*(y3-y2)*xmul/72
229  a14(ielem) = (f3+3*f4+f2+f1)*(y3-y2)*xmul/36
230  a21(ielem) = -y3*(f3+2*f4+f2+4*f1)*xmul/72
231  a23(ielem) = -y3*(4*f3+2*f4+f2+f1)*xmul/72
232  a24(ielem) = -y3*(f3+3*f4+f2+f1)*xmul/36
233  a31(ielem) = y2*(f3+2*f4+f2+4*f1)*xmul/72
234  a32(ielem) = y2*(f3+2*f4+4*f2+f1)*xmul/72
235  a34(ielem) = y2*(f3+3*f4+f2+f1)*xmul/36
236 !
237 ! DIAGONAL TERMS
238 ! (SUM OF EACH LINE IN THE MATRIX IS 0)
239 !
240  a11(ielem) = - a21(ielem) - a31(ielem)
241  a22(ielem) = - a12(ielem) - a32(ielem)
242  a33(ielem) = - a13(ielem) - a23(ielem)
243 !
244  ENDDO ! IELEM
245 !
246  ELSEIF(icoord.EQ.2) THEN
247 !
248 !================================
249 ! CASE OF DERIVATIVE WRT Y =
250 !================================
251 !
252  DO ielem = 1 , nelem
253 !
254 ! INITIALISES THE GEOMETRICAL VARIABLES
255 !
256  x2 = xel(ielem,2)
257  x3 = xel(ielem,3)
258 !
259  f1 = f(ikle1(ielem))
260  f2 = f(ikle2(ielem))
261  f3 = f(ikle3(ielem))
262  f4 = f(ikle4(ielem))
263 !
264 ! EXTRADIAGONAL TERMS
265 !
266  a12(ielem) = (x2-x3)*(f3+2*f4+4*f2+f1)*xmul/72
267  a13(ielem) = (x2-x3)*(4*f3+2*f4+f2+f1)*xmul/72
268  a14(ielem) = (x2-x3)*(f3+3*f4+f2+f1)*xmul/36
269  a21(ielem) = x3*(f3+2*f4+f2+4*f1)*xmul/72
270  a23(ielem) = x3*(4*f3+2*f4+f2+f1)*xmul/72
271  a24(ielem) = x3*(f3+3*f4+f2+f1)*xmul/36
272  a31(ielem) = -x2*(f3+2*f4+f2+4*f1)*xmul/72
273  a32(ielem) = -x2*(f3+2*f4+4*f2+f1)*xmul/72
274  a34(ielem) = -x2*(f3+3*f4+f2+f1)*xmul/36
275 !
276 ! DIAGONAL TERMS
277 ! (SUM OF EACH LINE IN THE MATRIX IS 0)
278 !
279  a11(ielem) = - a21(ielem) - a31(ielem)
280  a22(ielem) = - a12(ielem) - a32(ielem)
281  a33(ielem) = - a13(ielem) - a23(ielem)
282 !
283  ENDDO ! IELEM
284 !
285  ELSE
286 !
287  WRITE(lu,201) icoord
288  CALL plante(1)
289  stop
290  ENDIF
291 !
292 !-----------------------------------------------------------------------
293 !
294  ELSE
295  WRITE(lu,101) ielmf
296 101 FORMAT(1x,'MT08AB (BIEF) :',/,
297  & 1x,'DISCRETIZATION OF F : ',1i6,' NOT AVAILABLE')
298  CALL plante(1)
299  stop
300  ENDIF
301 !
302 201 FORMAT(1x,'MT08AB (BIEF) : IMPOSSIBLE COMPONENT ',
303  & 1i6,' CHECK ICOORD')
304 !
305 !-----------------------------------------------------------------------
306 !
307  RETURN
308  END
subroutine mt08ab(A11, A12, A13, A14, A21, A22, A23, A24, A31, A32, A33, A34, XMUL, SF, F, XEL, YEL, IKLE1, IKLE2, IKLE3, IKLE4, NELEM, NELMAX, ICOORD)
Definition: mt08ab.f:11
Definition: bief.f:3