The TELEMAC-MASCARET system  trunk
vc01ft2.f
Go to the documentation of this file.
1 ! ******************
2  SUBROUTINE vc01ft2
3 ! ******************
4 !
5  &( xmul,sf,f,sg,g,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 * G * 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 !+ G IS A VECTOR OF TYPE IELMG
23 !
24 !warning THE JACOBIAN MUST BE POSITIVE
25 !warning THE RESULT IS IN W IN NOT ASSEMBLED FORM
26 !
27 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
28 !+ 26/04/04
29 !+ V5P9
30 !+
31 !
32 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
33 !+ 13/07/2010
34 !+ V6P0
35 !+ Translation of French comments within the FORTRAN sources into
36 !+ English comments
37 !
38 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
39 !+ 21/08/2010
40 !+ V6P0
41 !+ Creation of DOXYGEN tags for automated documentation and
42 !+ cross-referencing of the FORTRAN sources
43 !
44 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
45 !| F |-->| FUNCTION USED IN THE VECTOR FORMULA
46 !| G |-->| FUNCTION USED IN THE VECTOR FORMULA
47 !| IKLE1 |-->| FIRST POINT OF TRIANGLES
48 !| IKLE2 |-->| SECOND POINT OF TRIANGLES
49 !| IKLE3 |-->| THIRD POINT OF TRIANGLES
50 !| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINTS
51 !| NELEM |-->| NUMBER OF ELEMENTS
52 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
53 !| SF |-->| BIEF_OBJ STRUCTURE OF F
54 !| SG |-->| BIEF_OBJ STRUCTURE OF G
55 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
56 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
57 !| W3 |<--| RESULT IN NON ASSEMBLED FORM
58 !| X |-->| ABSCISSAE OF POINTS IN THE MESH
59 !| XMUL |-->| MULTIPLICATION COEFFICIENT
60 !| Y |-->| ORDINATES OF POINTS IN THE MESH
61 !| Z |-->| ELEVATIONS OF POINTS IN THE MESH
62 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
63 !
64  USE bief, ex_vc01ft2 => vc01ft2
65 !
67  IMPLICIT NONE
68 !
69 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
70 !
71  INTEGER, INTENT(IN) :: NELEM,NELMAX
72  INTEGER, INTENT(IN) :: NBOR(*)
73  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax),IKLE3(nelmax)
74 !
75  DOUBLE PRECISION, INTENT(IN) :: X(*),Y(*),Z(*)
76  DOUBLE PRECISION, INTENT(INOUT) ::W1(nelmax),W2(nelmax),W3(nelmax)
77  DOUBLE PRECISION, INTENT(IN) :: XMUL
78 !
79 ! STRUCTURE OF F AND REAL DATA
80 !
81  TYPE(bief_obj), INTENT(IN) :: SF,SG
82  DOUBLE PRECISION, INTENT(IN) :: F(*),G(*)
83 !
84 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
85 !
86  INTEGER IELEM,IELMF,IELMG,I1,I2,I3
87  DOUBLE PRECISION XSUR12,COEF,F123,F1,F2,F3,X1,X2,X3,Y1,Y2
88  DOUBLE PRECISION Y3,Z1,Z2,Z3,S
89 !
90  INTRINSIC sqrt
91 !
92 !***********************************************************************
93 !
94  ielmf=sf%ELM
95  ielmg=sg%ELM
96 !
97 !-----------------------------------------------------------------------
98 !
99 ! F IS LINEAR AND CONSTANT BY BOUNDARY SIDE
100 !
101  IF( (ielmf.EQ.61.OR.ielmf.EQ.81) .AND. ielmg.EQ.80 ) THEN
102 !
103  xsur12 = xmul/12.d0
104 !
105 ! LOOP ON THE BOUNDARY SIDES
106 !
107  DO ielem = 1,nelem
108 !
109 ! GLOBAL NUMBERING OF THE SIDE NODES
110 !
111  i1 = nbor(ikle1(ielem))
112  i2 = nbor(ikle2(ielem))
113  i3 = nbor(ikle3(ielem))
114 !
115  x1 = x(i1)
116  y1 = y(i1)
117  z1 = z(i1)
118 !
119  x2 = x(i2)-x1
120  x3 = x(i3)-x1
121  y2 = y(i2)-y1
122  y3 = y(i3)-y1
123  z2 = z(i2)-z1
124  z3 = z(i3)-z1
125 !
126  f1 = f(ikle1(ielem))*g(ielem)
127  f2 = f(ikle2(ielem))*g(ielem)
128  f3 = f(ikle3(ielem))*g(ielem)
129  f123 = (f1 + f2 + f3)
130 !
131 !
132 ! COMPUTES THE AREA OF THE TRIANGLE (BY VECTOR PRODUCT)
133 !
134  s=0.5d0*sqrt( (y2*z3-y3*z2)**2
135  & +(x3*z2-x2*z3)**2
136  & +(x2*y3-x3*y2)**2 )
137 !
138  coef=xsur12*s
139 !
140  w1(ielem) = coef * ( f123 + f1 )
141  w2(ielem) = coef * ( f123 + f2 )
142  w3(ielem) = coef * ( f123 + f3 )
143 !
144  ENDDO ! IELEM
145 !
146 !-----------------------------------------------------------------------
147 !
148  ELSE
149 !
150 !-----------------------------------------------------------------------
151 !
152  WRITE(lu,101) ielmf,sf%NAME
153 101 FORMAT(1x,'VC01FT2 (BIEF) :',/,
154  & 1x,'DISCRETIZATION OF F NOT AVAILABLE:',1i6,
155  & 1x,'REAL NAME: ',a6)
156  CALL plante(1)
157  stop
158 !
159  ENDIF
160 !
161 !-----------------------------------------------------------------------
162 !
163 !-----------------------------------------------------------------------
164 !
165  RETURN
166  END
subroutine vc01ft2(XMUL, SF, F, SG, G, X, Y, Z, IKLE1, IKLE2, IKLE3, NBOR, NELEM, NELMAX, W1, W2, W3)
Definition: vc01ft2.f:8
Definition: bief.f:3