The TELEMAC-MASCARET system  trunk
vc08tt.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vc08tt
3 ! *****************
4 !
5  &(xmul,sf,su,sv,sw,f,u,v,w,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 !+ / DF DF
15 !+ V = XMUL / PSII * ( U -- + V -- ) D(OMEGA)
16 !+ I /OMEGA DX DY
17 !+
18 !+ PSI(I) IS A BASE OF TYPE P1 TETRAHEDRON
19 !
20 !warning THE JACOBIAN MUST BE POSITIVE
21 !warning THE RESULT IS IN W IN NOT ASSEMBLED FORM - REAL MESH
22 !
23 !history J-M HERVOUET (LNH)
24 !+ 22/03/02
25 !+ V5P3
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 !| F |-->| FUNCTION USED IN THE VECTOR FORMULA
42 !| IKLE1 |-->| FIRST POINT OF TETRAHEDRA
43 !| IKLE2 |-->| SECOND POINT OF TETRAHEDRA
44 !| IKLE3 |-->| THIRD POINT OF TETRAHEDRA
45 !| IKLE4 |-->| FOURTH POINT OF TETRAHEDRA
46 !| NELEM |-->| NUMBER OF ELEMENTS
47 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
48 !| SF |-->| BIEF_OBJ STRUCTURE OF F
49 !| SU |-->| BIEF_OBJ STRUCTURE OF U
50 !| SV |-->| BIEF_OBJ STRUCTURE OF V
51 !| SW |-->| BIEF_OBJ STRUCTURE OF W
52 !| U |-->| FUNCTION USED IN THE VECTOR FORMULA
53 !| V |-->| FUNCTION USED IN THE VECTOR FORMULA
54 !| W |-->| FUNCTION USED IN THE VECTOR FORMULA
55 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
56 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
57 !| W3 |<--| RESULT IN NON ASSEMBLED FORM
58 !| W4 |<--| RESULT IN NON ASSEMBLED FORM
59 !| X |-->| ABSCISSAE OF POINTS IN THE MESH
60 !| Y |-->| ORDINATES OF POINTS IN THE MESH
61 !| XMUL |-->| MULTIPLICATION COEFFICIENT
62 !| Z |-->| ELEVATIONS OF POINTS
63 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
64 !
65  USE bief, ex_vc08tt => vc08tt
66 !
68  IMPLICIT NONE
69 !
70 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
71 !
72  INTEGER, INTENT(IN) :: NELEM,NELMAX
73  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax)
74  INTEGER, INTENT(IN) :: IKLE3(nelmax),IKLE4(nelmax)
75 !
76  DOUBLE PRECISION, INTENT(IN) :: X(*),Y(*),Z(*),XMUL
77  DOUBLE PRECISION, INTENT(INOUT) :: W1(nelmax),W2(nelmax)
78  DOUBLE PRECISION, INTENT(INOUT) :: W3(nelmax),W4(nelmax)
79 !
80 ! STRUCTURES OF F, U, V AND REAL DATA
81 !
82  TYPE(bief_obj), INTENT(IN) :: SF,SU,SV,SW
83  DOUBLE PRECISION, INTENT(IN) :: F(*),U(*),V(*),W(*)
84 !
85 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
86 !
87  DOUBLE PRECISION X2,X3,X4,Y2,Y3,Y4,Z2,Z3,Z4
88  DOUBLE PRECISION U1,U2,U3,U4,V1,V2,V3,V4,Q1,Q2,Q3,Q4
89  DOUBLE PRECISION F1MF2,F1MF3,F1MF4,HELP1,HELP2,HELP3
90  DOUBLE PRECISION U1234,V1234,W1234,XSUR120
91 !
92  INTEGER I1,I2,I3,I4,IELEM,IELMF,IELMU,IELMV,IELMW
93 !
94 !**********************************************************************
95 !
96  xsur120 = xmul / 120.d0
97 !
98  ielmf=sf%ELM
99  ielmu=su%ELM
100  ielmv=sv%ELM
101  ielmw=sw%ELM
102 !
103 !-----------------------------------------------------------------------
104 !
105 ! FUNCTION F AND VECTOR U ARE LINEAR
106 !
107  IF( (ielmu.EQ.31.AND.ielmv.EQ.31.AND.ielmw.EQ.31.AND.ielmf.EQ.31)
108  & .OR.
109  & (ielmu.EQ.51.AND.ielmv.EQ.51.AND.ielmw.EQ.51.AND.ielmf.EQ.51)
110  & ) THEN
111 !
112 ! LOOP ON THE ELEMENTS
113 !
114  DO ielem = 1,nelem
115 !
116  i1 = ikle1(ielem)
117  i2 = ikle2(ielem)
118  i3 = ikle3(ielem)
119  i4 = ikle4(ielem)
120 !
121  x2 = x(i2) - x(i1)
122  x3 = x(i3) - x(i1)
123  x4 = x(i4) - x(i1)
124  y2 = y(i2) - y(i1)
125  y3 = y(i3) - y(i1)
126  y4 = y(i4) - y(i1)
127  z2 = z(i2) - z(i1)
128  z3 = z(i3) - z(i1)
129  z4 = z(i4) - z(i1)
130 !
131  u1 = u(i1)
132  u2 = u(i2)
133  u3 = u(i3)
134  u4 = u(i4)
135 !
136  v1 = v(i1)
137  v2 = v(i2)
138  v3 = v(i3)
139  v4 = v(i4)
140 !
141  q1 = w(i1)
142  q2 = w(i2)
143  q3 = w(i3)
144  q4 = w(i4)
145 !
146  u1234 = u1 + u2 + u3 + u4
147  v1234 = v1 + v2 + v3 + v4
148  w1234 = q1 + q2 + q3 + q4
149 !
150  f1mf2 = f(i1) - f(i2)
151  f1mf3 = f(i1) - f(i3)
152  f1mf4 = f(i1) - f(i4)
153 !
154  help1 = ( (y4*z3-y3*z4)*f1mf2
155  & +(y2*z4-y4*z2)*f1mf3
156  & +(y3*z2-y2*z3)*f1mf4 ) * xsur120
157 !
158  help2 = ( (x3*z4-x4*z3)*f1mf2
159  & +(x4*z2-x2*z4)*f1mf3
160  & +(x2*z3-x3*z2)*f1mf4 ) * xsur120
161 !
162  help3 = ( (x4*y3-x3*y4)*f1mf2
163  & +(x2*y4-x4*y2)*f1mf3
164  & +(x3*y2-x2*y3)*f1mf4 ) * xsur120
165 !
166  w1(ielem) = ( u1234 + u1 ) * help1
167  & + ( v1234 + v1 ) * help2
168  & + ( w1234 + q1 ) * help3
169  w2(ielem) = ( u1234 + u2 ) * help1
170  & + ( v1234 + v2 ) * help2
171  & + ( w1234 + q2 ) * help3
172  w3(ielem) = ( u1234 + u3 ) * help1
173  & + ( v1234 + v3 ) * help2
174  & + ( w1234 + q3 ) * help3
175  w4(ielem) = ( u1234 + u4 ) * help1
176  & + ( v1234 + v4 ) * help2
177  & + ( w1234 + q4 ) * help3
178 !
179  ENDDO ! IELEM
180 !
181 !-----------------------------------------------------------------------
182 !
183  ELSE
184 !
185 !-----------------------------------------------------------------------
186 !
187  WRITE(lu,101) ielmf,sf%NAME
188  WRITE(lu,201) ielmu,su%NAME
189  WRITE(lu,301)
190 101 FORMAT(1x,'VC08TT (BIEF) :',/,
191  & 1x,'DISCRETIZATION OF F:',1i6,
192  & 1x,'REAL NAME: ',a6)
193 201 FORMAT(1x,'DISCRETIZATION OF U:',1i6,
194  & 1x,'REAL NAME: ',a6)
195 301 FORMAT(1x,'CASE NOT IMPLEMENTED')
196  CALL plante(1)
197  stop
198 !
199  ENDIF
200 !
201 !-----------------------------------------------------------------------
202 !
203  RETURN
204  END
subroutine vc08tt(XMUL, SF, SU, SV, SW, F, U, V, W, X, Y, Z, IKLE1, IKLE2, IKLE3, IKLE4, NELEM, NELMAX, W1, W2, W3, W4)
Definition: vc08tt.f:8
Definition: bief.f:3