The TELEMAC-MASCARET system  trunk
mt08tt.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE mt08tt
3 ! *****************
4 !
5  &( t,xm,xmul,x,y,sf,f,ikle,nelem,nelmax)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief COMPUTES THE COEFFICIENTS OF THE FOLLOWING MATRIX:
12 !code
13 !+
14 !+ /
15 !+ A = XMUL / P F . GRAD(P ) * J(X,Y) DXDY
16 !+ I J /S J I
17 !+
18 !+ BY ELEMENTARY CELL; THE ELEMENT IS THE P1 TRIANGLE
19 !+
20 !+ J(X,Y): JACOBIAN OF THE ISOPARAMETRIC TRANSFORMATION
21 !
22 !note ONLY THE Z COMPONENT IS TREATED HERE !!
23 !
24 !warning THE JACOBIAN MUST BE POSITIVE
25 !
26 !history J-M HERVOUET (LNH)
27 !+ 21/03/02
28 !+ V5P3
29 !+
30 !
31 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
32 !+ 13/07/2010
33 !+ V6P0
34 !+ Translation of French comments within the FORTRAN sources into
35 !+ English comments
36 !
37 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
38 !+ 21/08/2010
39 !+ V6P0
40 !+ Creation of DOXYGEN tags for automated documentation and
41 !+ cross-referencing of the FORTRAN sources
42 !
43 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
44 !| F |-->| FUNCTION USED IN THE FORMULA
45 !| FORMUL |-->| FORMULA DESCRIBING THE RESULTING MATRIX
46 !| IKLE |-->| CONNECTIVITY TABLE.
47 !| NELEM |-->| NUMBER OF ELEMENTS
48 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
49 !| SF |-->| STRUCTURE OF FUNCTIONS F
50 !| SURFAC |-->| AREA OF 2D ELEMENTS
51 !| T |<->| WORK ARRAY FOR ELEMENT BY ELEMENT DIAGONAL
52 !| XM |<->| OFF-DIAGONAL TERMS
53 !| XMUL |-->| COEFFICIENT FOR MULTIPLICATION
54 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
55 !
56  USE bief, ex_mt08tt => mt08tt
57 !
59  IMPLICIT NONE
60 !
61 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
62 !
63  INTEGER,INTENT(IN) :: NELEM,NELMAX
64  INTEGER,INTENT(IN) :: IKLE(nelmax,4)
65 !
66  DOUBLE PRECISION,INTENT(INOUT) :: T(nelmax,4),XM(nelmax,12)
67 !
68  DOUBLE PRECISION,INTENT(IN) :: XMUL
69  DOUBLE PRECISION,INTENT(IN) :: F(*),X(*),Y(*)
70 !
71 ! STRUCTURE OF F
72 !
73  TYPE(bief_obj),INTENT(IN) :: SF
74 !
75 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
76 !
77 ! DECLARATIONS SPECIFIC TO THIS SUBROUTINE
78 !
79  DOUBLE PRECISION X2,X3,X4,Y2,Y3,Y4,F1,F2,F3,F4,XSUR120
80 !
81  INTEGER I1,I2,I3,I4,IELEM
82 !
83 !**********************************************************************
84 !
85  xsur120 = xmul/120.d0
86 !
87  IF(sf%ELM.NE.31.AND.sf%ELM.NE.51) THEN
88  WRITE(lu,1001) sf%ELM
89 1001 FORMAT(1x,'MT08TT (BIEF): TYPE OF F NOT IMPLEMENTED: ',i6)
90  CALL plante(1)
91  stop
92  ENDIF
93 !
94 ! LOOP ON THE ELEMENTS
95 !
96  DO ielem=1,nelem
97 !
98  i1 = ikle(ielem,1)
99  i2 = ikle(ielem,2)
100  i3 = ikle(ielem,3)
101  i4 = ikle(ielem,4)
102 !
103  x2 = x(i2)-x(i1)
104  x3 = x(i3)-x(i1)
105  x4 = x(i4)-x(i1)
106 !
107  y2 = y(i2)-y(i1)
108  y3 = y(i3)-y(i1)
109  y4 = y(i4)-y(i1)
110 !
111  f1 = f(i1)
112  f2 = f(i2)
113  f3 = f(i3)
114  f4 = f(i4)
115 !
116  t(ielem,1)=(
117  & x2*y4*f3-x3*y4*f3+x4*y3*f2-y2*x4*f2+x2*y4*f2+2*y2*x3*f1
118  &-2*x3*y4*f1+y2*x3*f2+y2*x3*f3+2*x4*y3*f1+2*x2*y4*f1-2*y2*x4*f1
119  &-2*x2*y3*f1-y2*x4*f3-x2*y3*f2-x2*y3*f3+x4*y3*f3-x3*y4*f4
120  &+x2*y4*f4-y2*x4*f4-x2*y3*f4+y2*x3*f4+x4*y3*f4-x3*y4*f2 )*xsur120
121 !
122  t(ielem,2)=(
123  & x3*y4*f3-2*x4*y3*f2+x3*y4*f1-x4*y3*f1-x4*y3*f3+x3*y4*f4
124  &-x4*y3*f4+2*x3*y4*f2 )*xsur120
125 !
126  t(ielem,3)=(-x2*y4+y2*x4)*(f1+2*f3+f2+f4) *xsur120
127 !
128  t(ielem,4)=(
129  & -y2*x3*f1-y2*x3*f2-y2*x3*f3+x2*y3*f1+x2*y3*f2+x2*y3*f3+
130  &2*x2*y3*f4-2*y2*x3*f4 )*xsur120
131 !
132  xm(ielem,01)=(
133  & x2*y4*f3-x3*y4*f3+2*x4*y3*f2-2*y2*x4*f2+2*x2*y4*f2+y2*x3*f1
134  &-x3*y4*f1+2*y2*x3*f2+y2*x3*f3+x4*y3*f1+x2*y4*f1-y2*x4*f1-x2*y3
135  &*f1-y2*x4*f3-2*x2*y3*f2-x2*y3*f3+x4*y3*f3
136  &-x3*y4*f4+x2*y4*f4-y2*x4*f4
137  &-x2*y3*f4+y2*x3*f4+x4*y3*f4-2*x3*y4*f2 )*xsur120
138 !
139  xm(ielem,02)=(
140  &-x3*y4+x4*y3+x2*y4-y2*x4-x2*y3+y2*x3)*(f1+2*f3+f2+f4)*xsur120
141 !
142  xm(ielem,03)=(
143  & x2*y4*f3-x3*y4*f3+x4*y3*f2-y2*x4*f2+x2*y4*f2+y2*x3*f1-x3*y4*f1
144  &+y2*x3*f2+y2*x3*f3+x4*y3*f1+x2*y4*f1-y2*x4*f1-x2*y3*f1-y2*x4*f3
145  &-x2*y3*f2-x2*y3*f3+x4*y3*f3-2*x3*y4*f4+2*x2*y4*f4-2*y2*x4*f4-2
146  &*x2*y3*f4+2*y2*x3*f4+2*x4*y3*f4-x3*y4*f2)*xsur120
147 !
148  xm(ielem,04)= -(-x3*y4+x4*y3)*(f1+2*f3+f2+f4)*xsur120
149 !
150  xm(ielem,05)=( x3*y4*f3-x4*y3*f2+x3*y4*f1-x4*y3*f1-x4*y3*f3
151  & +2*x3*y4*f4-2*x4*y3*f4+x3*y4*f2)*xsur120
152 !
153  xm(ielem,06)=( -x2*y4*f3+y2*x4*f2-x2*y4*f2-x2*y4*f1+y2*x4*f1
154  & +y2*x4*f3-2*x2*y4*f4+2*y2*x4*f4)*xsur120
155 !
156  xm(ielem,07)=( x3*y4*f3-x4*y3*f2+2*x3*y4*f1-2*x4*y3*f1
157  & -x4*y3*f3+x3*y4*f4-x4*y3*f4+x3*y4*f2)*xsur120
158 !
159  xm(ielem,08)=( -x2*y4*f3+y2*x4*f2-x2*y4*f2-2*x2*y4*f1
160  & +2*y2*x4*f1+y2*x4*f3-x2*y4*f4+y2*x4*f4)*xsur120
161 !
162  xm(ielem,09)=( -x2*y4*f3+2*y2*x4*f2-2*x2*y4*f2-x2*y4*f1
163  & +y2*x4*f1+y2*x4*f3-x2*y4*f4+y2*x4*f4 )*xsur120
164 !
165  xm(ielem,10)=( -2*y2*x3*f1-y2*x3*f2-y2*x3*f3+2*x2*y3*f1
166  & +x2*y3*f2+x2*y3*f3+x2*y3*f4-y2*x3*f4)*xsur120
167 !
168  xm(ielem,11)=(-y2*x3*f1-2*y2*x3*f2-y2*x3*f3+x2*y3*f1
169  & +2*x2*y3*f2+x2*y3*f3+x2*y3*f4-y2*x3*f4)*xsur120
170 !
171  xm(ielem,12)= -(-x2*y3+y2*x3)*(f1+2*f3+f2+f4)*xsur120
172 !
173  ENDDO ! IELEM
174 !
175 !-----------------------------------------------------------------------
176 !
177  RETURN
178  END
subroutine mt08tt(T, XM, XMUL, X, Y, SF, F, IKLE, NELEM, NELMAX)
Definition: mt08tt.f:7
Definition: bief.f:3