The TELEMAC-MASCARET system  trunk
vc01tt.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vc01tt
3 ! *****************
4 !
5  &( xmul,sf,f,x,y,z,
6  & ikle1,ikle2,ikle3,ikle4,nelem,nelmax,w1,w2,w3,w4)
7 !
8 !***********************************************************************
9 ! BIEF V6P1 21/08/2010
10 !***********************************************************************
11 !
12 !brief COMPUTES THE FOLLOWING VECTOR IN FINITE ELEMENTS:
13 !code
14 !+ /
15 !+ VEC(I) = XMUL / PSI(I) * F D(OMEGA)
16 !+ /OMEGA
17 !+
18 !+ PSI(I) IS A BASE OF TYPE P1 TETRAHEDRON
19 !+
20 !+ F IS A VECTOR OF TYPE IELMF
21 !
22 !warning THE JACOBIAN MUST BE POSITIVE
23 !warning THE RESULT IS IN W IN NOT ASSEMBLED FORM - REAL MESH
24 !
25 !history J-M HERVOUET (LNH)
26 !+ 22/03/02
27 !+ V5P3
28 !+
29 !
30 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
31 !+ 13/07/2010
32 !+ V6P0
33 !+ Translation of French comments within the FORTRAN sources into
34 !+ English comments
35 !
36 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
37 !+ 21/08/2010
38 !+ V6P0
39 !+ Creation of DOXYGEN tags for automated documentation and
40 !+ cross-referencing of the FORTRAN sources
41 !
42 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43 !| F |-->| FUNCTION USED IN THE VECTOR FORMULA
44 !| IKLE1 |-->| FIRST POINT OF TETRAHEDRA
45 !| IKLE2 |-->| SECOND POINT OF TETRAHEDRA
46 !| IKLE3 |-->| THIRD POINT OF TETRAHEDRA
47 !| IKLE4 |-->| FOURTH POINT OF TETRAHEDRA
48 !| NELEM |-->| NUMBER OF ELEMENTS
49 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
50 !| SF |-->| BIEF_OBJ STRUCTURE OF F
51 !| SURFAC |-->| AREA OF TRIANGLES
52 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
53 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
54 !| W3 |<--| RESULT IN NON ASSEMBLED FORM
55 !| W4 |<--| RESULT IN NON ASSEMBLED FORM
56 !| X |-->| ABSCISSAE OF POINTS IN THE MESH
57 !| XMUL |-->| MULTIPLICATION COEFFICIENT
58 !| Y |-->| ORDINATES OF POINTS IN THE MESH
59 !| Z |-->| ELEVATIONS OF POINTS IN THE MESH
60 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
61 !
62  USE bief, ex_vc01tt => vc01tt
63 !
65  IMPLICIT NONE
66 !
67 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
68 !
69  INTEGER, INTENT(IN) :: NELEM,NELMAX
70  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax)
71  INTEGER, INTENT(IN) :: IKLE3(nelmax),IKLE4(nelmax)
72 !
73  DOUBLE PRECISION, INTENT(IN) :: X(*),Y(*),Z(*)
74  DOUBLE PRECISION, INTENT(INOUT) :: W1(nelmax),W2(nelmax)
75  DOUBLE PRECISION, INTENT(INOUT) :: W3(nelmax),W4(nelmax)
76  DOUBLE PRECISION, INTENT(IN) :: XMUL
77 !
78 ! STRUCTURE OF F AND REAL DATA
79 !
80  TYPE(bief_obj), INTENT(IN) :: SF
81  DOUBLE PRECISION, INTENT(IN) :: F(*)
82 !
83 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
84 !
85  DOUBLE PRECISION XSUR120,COEF,F1234,X2,X3,X4,Y2,Y3,Y4,Z2,Z3,Z4
86  DOUBLE PRECISION F1,F2,F3,F4
87  INTEGER I1,I2,I3,I4,IELEM,IELMF
88 !
89 !***********************************************************************
90 !
91  ielmf=sf%ELM
92 !
93 !-----------------------------------------------------------------------
94 !
95 ! F IS LINEAR
96 !
97  IF(ielmf.EQ.31.OR.ielmf.EQ.51) THEN
98 !
99  xsur120 = xmul / 120.d0
100 !
101  DO ielem = 1 , nelem
102 !
103  i1 = ikle1(ielem)
104  i2 = ikle2(ielem)
105  i3 = ikle3(ielem)
106  i4 = ikle4(ielem)
107 !
108  x2 = x(i2)-x(i1)
109  x3 = x(i3)-x(i1)
110  x4 = x(i4)-x(i1)
111 !
112  y2 = y(i2)-y(i1)
113  y3 = y(i3)-y(i1)
114  y4 = y(i4)-y(i1)
115 !
116  z2 = z(i2)-z(i1)
117  z3 = z(i3)-z(i1)
118  z4 = z(i4)-z(i1)
119 !
120  coef = xsur120*
121  & (x2*y3*z4-x2*y4*z3-y2*x3*z4+y2*x4*z3+z2*x3*y4-z2*x4*y3)
122 !
123  f1 = f(ikle1(ielem))
124  f2 = f(ikle2(ielem))
125  f3 = f(ikle3(ielem))
126  f4 = f(ikle4(ielem))
127 !
128  f1234 = f1+f2+f3+f4
129  w1(ielem) = coef * (f1234+f1)
130  w2(ielem) = coef * (f1234+f2)
131  w3(ielem) = coef * (f1234+f3)
132  w4(ielem) = coef * (f1234+f4)
133 !
134  ENDDO ! IELEM
135 !
136 !-----------------------------------------------------------------------
137 !
138 ! F IS CONSTANT BY ELEMENT
139 !
140 ! SAME METHOD BUT F HAS THE SAME VALUE
141 ! FOR THE 4 POINTS OF THE TETRAHEDRON
142 !
143  ELSE IF(ielmf.EQ.30.OR.ielmf.EQ.50) THEN
144 !
145  xsur120 = xmul / 120.d0
146 !
147  DO ielem = 1 , nelem
148 !
149  i1 = ikle1(ielem)
150  i2 = ikle2(ielem)
151  i3 = ikle3(ielem)
152  i4 = ikle4(ielem)
153 !
154  x2 = x(i2)-x(i1)
155  x3 = x(i3)-x(i1)
156  x4 = x(i4)-x(i1)
157 !
158  y2 = y(i2)-y(i1)
159  y3 = y(i3)-y(i1)
160  y4 = y(i4)-y(i1)
161 !
162  z2 = z(i2)-z(i1)
163  z3 = z(i3)-z(i1)
164  z4 = z(i4)-z(i1)
165 !
166  coef = xsur120*
167  & (x2*y3*z4-x2*y4*z3-y2*x3*z4+y2*x4*z3+z2*x3*y4-z2*x4*y3)
168 !
169 ! COULD BE SIMPLIFIED BUT IS NICE TO KEEP
170 ! THE SAME FORM AS ABOVE
171 !
172  f1 = f(ielem)
173  f2 = f1
174  f3 = f1
175  f4 = f1
176 !
177  f1234 = f1+f2+f3+f4
178  w1(ielem) = coef * (f1234+f1)
179  w2(ielem) = coef * (f1234+f2)
180  w3(ielem) = coef * (f1234+f3)
181  w4(ielem) = coef * (f1234+f4)
182 !
183  ENDDO ! IELEM
184 !
185 !-----------------------------------------------------------------------
186  ELSE
187 !
188  WRITE(lu,102) ielmf,sf%NAME
189 102 FORMAT(1x,'VC01TT (BIEF):',/,
190  & 1x,'DISCRETISATION OF F : ',1i6,' NOT IMPLEMENTED',/,
191  & 1x,'REAL NAME OF F: ',a6)
192  CALL plante(1)
193  stop
194 !
195  ENDIF
196 !
197 !-----------------------------------------------------------------------
198 !
199  RETURN
200  END SUBROUTINE vc01tt
subroutine vc01tt(XMUL, SF, F, X, Y, Z, IKLE1, IKLE2, IKLE3, IKLE4, NELEM, NELMAX, W1, W2, W3, W4)
Definition: vc01tt.f:8
Definition: bief.f:3