The TELEMAC-MASCARET system  trunk
vc01ft.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vc01ft
3 ! *****************
4 !
5  &( xmul,sf,f,x,y,z,
6  & ikle1,ikle2,ikle3,nbor,nelem,nelmax,w1,w2,w3)
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 SEGMENT BUT ON A MESH WITH
19 !+ VERTICAL TRIANGLES IN THE X,Y,Z SPACE
20 !+
21 !+ F IS A VECTOR OF TYPE IELMF
22 !
23 !warning THE JACOBIAN MUST BE POSITIVE
24 !warning THE RESULT IS IN W IN NOT ASSEMBLED FORM
25 !
26 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
27 !+ 26/04/04
28 !+ V5P5
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 VECTOR FORMULA
45 !| IKLE1 |-->| FIRST POINT OF TRIANGLES
46 !| IKLE2 |-->| SECOND POINT OF TRIANGLES
47 !| IKLE3 |-->| THIRD POINT OF TRIANGLES
48 !| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINTS
49 !| NELEM |-->| NUMBER OF ELEMENTS
50 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
51 !| SF |-->| BIEF_OBJ STRUCTURE OF F
52 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
53 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
54 !| W3 |<--| RESULT IN NON ASSEMBLED FORM
55 !| X |-->| ABSCISSAE OF POINTS IN THE MESH
56 !| XMUL |-->| MULTIPLICATION COEFFICIENT
57 !| Y |-->| ORDINATES OF POINTS IN THE MESH
58 !| Z |-->| ELEVATIONS OF POINTS IN THE MESH
59 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60 !
61  USE bief, ex_vc01ft => vc01ft
62 !
64  IMPLICIT NONE
65 !
66 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
67 !
68  INTEGER, INTENT(IN) :: NELEM,NELMAX
69  INTEGER, INTENT(IN) :: NBOR(*)
70  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax),IKLE3(nelmax)
71 !
72  DOUBLE PRECISION, INTENT(IN) :: X(*),Y(*),Z(*)
73  DOUBLE PRECISION, INTENT(INOUT) ::W1(nelmax),W2(nelmax),W3(nelmax)
74  DOUBLE PRECISION, INTENT(IN) :: XMUL
75 !
76 ! STRUCTURE OF F AND REAL DATA
77 !
78  TYPE(bief_obj), INTENT(IN) :: SF
79  DOUBLE PRECISION, INTENT(IN) :: F(*)
80 !
81 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
82 !
83  INTEGER IELEM,IELMF,I1,I2,I3
84  DOUBLE PRECISION XSUR12,COEF,F123,F1,F2,F3,X1,X2,X3,Y1,Y2
85  DOUBLE PRECISION Y3,Z1,Z2,Z3,S
86 !
87  INTRINSIC sqrt
88 !
89 !***********************************************************************
90 !
91  ielmf=sf%ELM
92 !
93 !-----------------------------------------------------------------------
94 !
95 ! F IS LINEAR BY BOUNDARY SIDE
96 !
97  IF(ielmf.EQ.61.OR.ielmf.EQ.81) THEN
98 !
99  xsur12 = xmul/12.d0
100 !
101 ! LOOP ON THE BOUNDARY SIDES
102 !
103  DO ielem = 1,nelem
104 !
105 ! GLOBAL NUMBERING OF THE SIDE NODES
106 !
107  i1 = nbor(ikle1(ielem))
108  i2 = nbor(ikle2(ielem))
109  i3 = nbor(ikle3(ielem))
110 !
111  x1 = x(i1)
112  y1 = y(i1)
113  z1 = z(i1)
114 !
115  x2 = x(i2)-x1
116  x3 = x(i3)-x1
117  y2 = y(i2)-y1
118  y3 = y(i3)-y1
119  z2 = z(i2)-z1
120  z3 = z(i3)-z1
121 !
122  f1 = f(ikle1(ielem))
123  f2 = f(ikle2(ielem))
124  f3 = f(ikle3(ielem))
125  f123 = f1 + f2 + f3
126 !
127 ! COMPUTES THE AREA OF THE TRIANGLE (BY VECTOR PRODUCT)
128 !
129  s=0.5d0*sqrt( (y2*z3-y3*z2)**2
130  & +(x3*z2-x2*z3)**2
131  & +(x2*y3-x3*y2)**2 )
132 !
133  coef=xsur12*s
134 !
135  w1(ielem) = coef * ( f123 + f1 )
136  w2(ielem) = coef * ( f123 + f2 )
137  w3(ielem) = coef * ( f123 + f3 )
138 !
139  ENDDO ! IELEM
140 !
141 !-----------------------------------------------------------------------
142 !
143  ELSE
144 !
145 !-----------------------------------------------------------------------
146 !
147  WRITE(lu,101) ielmf,sf%NAME
148 101 FORMAT(1x,'VC01FT (BIEF) :',/,
149  & 1x,'DISCRETIZATION OF F NOT AVAILABLE:',1i6,
150  & 1x,'REAL NAME: ',a6)
151  CALL plante(1)
152  stop
153 !
154  ENDIF
155 !
156 !-----------------------------------------------------------------------
157 !
158 ! NOTE: FOR A PLANE TRIANGLE (VC01AA):
159 !
160 ! XSUR12 = XMUL / 12.D0
161 !
162 ! DO IELEM = 1 , NELEM
163 !
164 ! F1 = F(IKLE1(IELEM))
165 ! F2 = F(IKLE2(IELEM))
166 ! F3 = F(IKLE3(IELEM))
167 ! F123 = F1 + F2 + F3
168 !
169 ! COEF = XSUR12 * SURFAC(IELEM)
170 !
171 ! W1(IELEM) = COEF * ( F123 + F1 )
172 ! W2(IELEM) = COEF * ( F123 + F2 )
173 ! W3(IELEM) = COEF * ( F123 + F3 )
174 !
175 ! ENDDO ! IELEM
176 !
177 !-----------------------------------------------------------------------
178 !
179  RETURN
180  END
subroutine vc01ft(XMUL, SF, F, X, Y, Z, IKLE1, IKLE2, IKLE3, NBOR, NELEM, NELMAX, W1, W2, W3)
Definition: vc01ft.f:8
Definition: bief.f:3