The TELEMAC-MASCARET system  trunk
vc01aa.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vc01aa
3 ! *****************
4 !
5  &( xmul,sf,f,surfac,
6  & ikle1,ikle2,ikle3,nelem,nelmax,
7  & w1,w2,w3 )
8 !
9 !***********************************************************************
10 ! BIEF V7P0 21/08/2010
11 !***********************************************************************
12 !
13 !brief COMPUTES THE FOLLOWING VECTOR IN FINITE ELEMENTS:
14 !code
15 !+ /
16 !+ VEC(I) = XMUL / PSI(I) * F D(OMEGA)
17 !+ /OMEGA
18 !+
19 !+ PSI(I) IS A BASE OF TYPE P1 TRIANGLE
20 !+
21 !+ F IS A VECTOR OF DISCRETISATION P0, P1 OR DISCONTINUOUS P1
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 !+ 29/10/99
28 !+ V5P1
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 !history J-M HERVOUET (EDF LAB, LNHE)
44 !+ 12/05/2014
45 !+ V7P0
46 !+ Discontinuous elements better treated: new types 15, 16 and 17 for
47 !+ discontinuous linear, quasi-bubble, and quadratic, rather than
48 !+ using component DIMDISC=11, 12 or 13.
49 !
50 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
51 !| F |-->| FUNCTION USED IN THE VECTOR FORMULA
52 !| IKLE1 |-->| FIRST POINT OF TRIANGLES
53 !| IKLE2 |-->| SECOND POINT OF TRIANGLES
54 !| IKLE3 |-->| THIRD POINT OF TRIANGLES
55 !| NELEM |-->| NUMBER OF ELEMENTS
56 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
57 !| SF |-->| BIEF_OBJ STRUCTURE OF F
58 !| SURFAC |-->| AREA OF TRIANGLES
59 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
60 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
61 !| W3 |<--| RESULT IN NON ASSEMBLED FORM
62 !| XMUL |-->| MULTIPLICATION COEFFICIENT
63 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
64 !
65  USE bief, ex_vc01aa => vc01aa
66 !
68  IMPLICIT NONE
69 !
70 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
71 !
72  INTEGER, INTENT(IN) :: NELEM,NELMAX
73  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax),IKLE3(nelmax)
74 !
75  DOUBLE PRECISION, INTENT(INOUT) :: W1(nelmax)
76  DOUBLE PRECISION, INTENT(INOUT) :: W2(nelmax)
77  DOUBLE PRECISION, INTENT(INOUT) :: W3(nelmax)
78  DOUBLE PRECISION, INTENT(IN) :: SURFAC(nelmax)
79  DOUBLE PRECISION, INTENT(IN) :: XMUL
80 !
81 ! STRUCTURE OF F AND REAL DATA
82 !
83  TYPE(bief_obj), INTENT(IN) :: SF
84  DOUBLE PRECISION, INTENT(IN) :: F(*)
85 !
86 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
87 !
88  INTEGER IELEM,IELMF
89  DOUBLE PRECISION XSUR03,XSUR12,F1,F2,F3,F123,COEF
90 !
91 !-----------------------------------------------------------------------
92 !
93  ielmf=sf%ELM
94 !
95 !-----------------------------------------------------------------------
96 !
97 ! F IS LINEAR
98 !
99  IF(ielmf.EQ.11) THEN
100 !
101  xsur12 = xmul / 12.d0
102 !
103  DO ielem = 1 , nelem
104 !
105  f1 = f(ikle1(ielem))
106  f2 = f(ikle2(ielem))
107  f3 = f(ikle3(ielem))
108  f123 = f1 + f2 + f3
109 !
110  coef = xsur12 * surfac(ielem)
111 !
112  w1(ielem) = coef * ( f123 + f1 )
113  w2(ielem) = coef * ( f123 + f2 )
114  w3(ielem) = coef * ( f123 + f3 )
115 !
116  ENDDO
117 !
118 !-----------------------------------------------------------------------
119 !
120 ! F IS CONSTANT BY ELEMENT
121 !
122  ELSEIF(ielmf.EQ.10.AND.sf%DIM2.EQ.1) THEN
123 !
124  xsur03 = xmul / 3.d0
125 !
126  DO ielem = 1 , nelem
127 !
128  w1(ielem) = xsur03 * surfac(ielem) * f(ielem)
129  w2(ielem) = w1(ielem)
130  w3(ielem) = w1(ielem)
131 !
132  ENDDO
133 !
134 !-----------------------------------------------------------------------
135 !
136 ! F IS DISCONTINUOUS P1
137 !
138  ELSEIF(ielmf.EQ.15) THEN
139 !
140  xsur12 = xmul / 12.d0
141 !
142  DO ielem = 1 , nelem
143 !
144  f1 = f(ielem)
145  f2 = f(ielem+nelem)
146  f3 = f(ielem+2*nelem)
147  f123 = f1 + f2 + f3
148 !
149  coef = xsur12 * surfac(ielem)
150 !
151  w1(ielem) = coef * ( f123 + f1 )
152  w2(ielem) = coef * ( f123 + f2 )
153  w3(ielem) = coef * ( f123 + f3 )
154 !
155  ENDDO
156 !
157 !-----------------------------------------------------------------------
158 !
159  ELSE
160 !
161 !-----------------------------------------------------------------------
162 !
163  WRITE(lu,101) ielmf,sf%NAME
164 101 FORMAT(1x,'VC01AA (BIEF) :',/,
165  & 1x,'DISCRETIZATION OF F NOT AVAILABLE:',1i6,
166  & 1x,'REAL NAME: ',a6)
167  CALL plante(1)
168  stop
169 !
170  ENDIF
171 !
172 !-----------------------------------------------------------------------
173 !
174  RETURN
175  END
subroutine vc01aa(XMUL, SF, F, SURFAC, IKLE1, IKLE2, IKLE3, NELEM, NELMAX, W1, W2, W3)
Definition: vc01aa.f:9
Definition: bief.f:3