The TELEMAC-MASCARET system  trunk
vc11tt0.f
Go to the documentation of this file.
1 ! ******************
2  SUBROUTINE vc11tt0
3 ! ******************
4 !
5  &( xmul,sf,sg,f,g,x,y,z,ikle1,ikle2,ikle3,ikle4,nelem,npoin,
6  & w,icoord)
7 !
8 !***********************************************************************
9 ! BIEF V6P1 21/08/2010
10 !***********************************************************************
11 !
12 !brief COMPUTES THE FOLLOWING VECTOR IN FINITE ELEMENTS:
13 !code
14 !+ (EXAMPLE OF THE X COMPONENT, WHICH CORRESPONDS TO ICOORD=1)
15 !+
16 !+ / DF
17 !+ VEC(I) = XMUL / ( G P *( -- )) D(OMEGA)
18 !+ /OMEGA I DX
19 !+
20 !+
21 !+ P IS A LINEAR BASE
22 !+ I
23 !+
24 !+ F IS A VECTOR OF TYPE P1
25 !+ W IS A VECTOR OF TYPE P0
26 !+ G IS ALSO A VECTOR OF TYPE P0
27 !+ IT IS THEREFORE NOT REQUIRED TO ASSEMBLE THE RESULT VECTOR
28 !+ THE RESULT IS DIRECTLY IN W
29 !
30 !warning THE JACOBIAN MUST BE POSITIVE
31 !
32 !history J-M HERVOUET (LNH)
33 !+ **/06/04
34 !+ V5P5
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 !| F |-->| FUNCTION USED IN THE VECTOR FORMULA
51 !| G |-->| FUNCTION USED IN THE VECTOR FORMULA
52 !| ICOORD |-->| 1: DERIVATIVE ALONG X, 2: ALONG Y
53 !| IKLE1 |-->| FIRST POINT OF TETRAHEDRA
54 !| IKLE2 |-->| SECOND POINT OF TETRAHEDRA
55 !| IKLE3 |-->| THIRD POINT OF TETRAHEDRA
56 !| IKLE4 |-->| FOURTH POINT OF TETRAHEDRA
57 !| NELEM |-->| NUMBER OF ELEMENTS
58 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
59 !| SF |-->| BIEF_OBJ STRUCTURE OF F
60 !| SG |-->| BIEF_OBJ STRUCTURE OF G
61 !| SURFAC |-->| AREA OF TRIANGLES
62 !| W |<--| RESULT IN NON ASSEMBLED FORM
63 !| XEL |-->| ABSCISSAE OF POINTS IN THE MESH, PER ELEMENT
64 !| XMUL |-->| MULTIPLICATION COEFFICIENT
65 !| YEL |-->| ORDINATES OF POINTS IN THE MESH, PER ELEMENT
66 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67 !
68  USE bief
69 !
71  IMPLICIT NONE
72 !
73 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
74 !
75  INTEGER, INTENT(IN) :: NELEM ! NUMBER OF ELEMENTS
76  INTEGER, INTENT(IN) :: NPOIN ! NUMBER OF POINTS
77  INTEGER, INTENT(IN) :: ICOORD ! DIRECTION OF GRAD :
78  ! 1 - X
79  ! 2 - Y
80  ! 3 - Z
81 !
82  INTEGER, INTENT(IN) :: IKLE1(nelem) ! NODE NUMBER 1 OF ELEMENTS
83  INTEGER, INTENT(IN) :: IKLE2(nelem) ! NODE NUMBER 2 OF ELEMENTS
84  INTEGER, INTENT(IN) :: IKLE3(nelem) ! NODE NUMBER 3 OF ELEMENTS
85  INTEGER, INTENT(IN) :: IKLE4(nelem) ! NODE NUMBER 4 OF ELEMENTS
86 !
87  DOUBLE PRECISION, DIMENSION(NPOIN), TARGET, INTENT(IN) :: X,Y,Z
88  DOUBLE PRECISION, INTENT(IN) :: XMUL ! CONSTANT FACTOR
89  DOUBLE PRECISION, INTENT(OUT) :: W(nelem) ! RESULT
90 !
91 ! STRUCTURES OF F, G, H, U, V, W AND REAL DATA
92 !
93  TYPE(bief_obj) , INTENT(IN) :: SF,SG !
94  DOUBLE PRECISION, INTENT(IN) :: G(*) ! VECTOR TO MULTIPLY BY
95  DOUBLE PRECISION, INTENT(IN) :: F(*) ! VECTOR WE COMPUTE THE
96  ! GRAD OF
97 !
98 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
99 !
100 ! LOCAL VARIABLES
101 !
102  INTEGER :: IELEM,IELMF,IELMG ! ELEMENT TYPES
103  DOUBLE PRECISION :: F1,F2,F3,F4 ! THE 4 VALUES OF F AT THE
104  ! NODES OF AN ELEMENT
105  DOUBLE PRECISION :: X2,X3,X4,Y2,Y3,Y4 ! DELTA_X, DELTA_Y
106  DOUBLE PRECISION :: X1, Y1 ! COORD OF THE FIRST NODE
107  INTEGER :: I1,I2,I3,I4 ! THE NUMBERS OF THE NODES
108  ! OF AN ELEMENT
109 !
110  DOUBLE PRECISION, DIMENSION(:), POINTER :: PX, PY ! POINTER TO
111  ! THE COORD
112  DOUBLE PRECISION :: XSUR24
113  DOUBLE PRECISION :: F2MF1,F3MF1,F4MF1
114  DOUBLE PRECISION :: DET ! JACOBIAN
115 !
116 !-----------------------------------------------------------------------
117 ! INITIALISES
118 !
119  xsur24 = xmul/24.d0
120 !
121  ielmf = sf%ELM
122  ielmg = sg%ELM
123 !
124 !-----------------------------------------------------------------------
125 ! TEST ON THE COMPONENT TO DIFFERENTIATE :
126 ! 1 FOR X, 2 FOR Y, 3 FOR Z. OTHER VALUES ARE NOT ALLOWED.
127 ! THE POINTER POINTS TO THE ARRAYS OF THE COORDINATES THAT
128 ! WILL BE USED.
129  SELECT CASE (icoord )
130  CASE ( 1 )
131  px => y
132  py => z
133  CASE ( 2 )
134  px => z
135  py => x
136  CASE ( 3 )
137  px => x
138  py => y
139  CASE DEFAULT
140  WRITE(lu,203) icoord
141  203 FORMAT(1x,'VC11TT0 (BIEF) : IMPOSSIBLE COMPONENT ',
142  & 1i6,' CHECK ICOORD')
143  CALL plante(1)
144  END SELECT
145 !
146  IF(ielmf.EQ.31.AND.ielmg.EQ.30) THEN
147 !
148 ! LOOP ON THE ELEMENTS
149  DO ielem = 1 , nelem
150 ! GETS THE ID OF THE FOUR NODES OF THE ELEMENT
151  i1 = ikle1(ielem)
152  i2 = ikle2(ielem)
153  i3 = ikle3(ielem)
154  i4 = ikle4(ielem)
155 ! GETS THE FOUR NODAL VALUES OF THE VECTOR TO DIFFERENTIATE
156  f1 = f(i1)
157  f2 = f(i2)
158  f3 = f(i3)
159  f4 = f(i4)
160 ! DIFFERENCES OF THE NODAL VALUES OF F
161  f2mf1 = f2-f1
162  f3mf1 = f3-f1
163  f4mf1 = f4-f1
164 !
165 ! REAL COORDINATES OF THE POINTS OF THE ELEMENT (ORIGIN IN 1)
166 !
167  x1 = px(i1)
168  x2 = px(i2) - x1
169  x3 = px(i3) - x1
170  x4 = px(i4) - x1
171  y1 = py(i1)
172  y2 = py(i2) - y1
173  y3 = py(i3) - y1
174  y4 = py(i4) - y1
175  det = (x3*y4-x4*y3)*f2mf1 + (y2*x4-x2*y4)*f3mf1+
176  & (x2*y3-y2*x3)*f4mf1
177 ! RESULT
178  w(ielem) = det* g(ielem) * xsur24
179  ENDDO
180 !
181 !
182 !=======================================================================
183 ! ERROR ON THE ELEMENT TYPES
184 !
185  ELSE
186 !-----------------------------------------------------------------------
187 !
188  WRITE(lu,1101) ielmf,sf%NAME
189  WRITE(lu,1201) ielmg,sg%NAME
190  WRITE(lu,1301)
191  CALL plante(1)
192  stop
193  1101 FORMAT(1x,'VC11TT0 (BIEF) :',/,
194  & 1x,'DISCRETIZATION OF F:',1i6,
195  & 1x,'REAL NAME: ',a6)
196  1201 FORMAT(1x,'DISCRETIZATION OF G:',1i6,
197  & 1x,'REAL NAME: ',a6)
198  1301 FORMAT(1x,'CASE NOT IMPLEMENTED')
199 !
200  ENDIF
201 !
202 !-----------------------------------------------------------------------
203 !
204  RETURN
205  END SUBROUTINE vc11tt0
subroutine vc11tt0(XMUL, SF, SG, F, G, X, Y, Z, IKLE1, IKLE2, IKLE3, IKLE4, NELEM, NPOIN, W, ICOORD)
Definition: vc11tt0.f:8
Definition: bief.f:3