The TELEMAC-MASCARET system  trunk
vc01oo.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vc01oo
3 ! *****************
4 !
5  &(xmul,sf,f,lgseg,ikle1,ikle2,nbor,nelem,nelmax,w1,w2)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief COMPUTES THE FOLLOWING VECTOR IN FINITE ELEMENTS:
12 !code
13 !+ /
14 !+ VEC(I) = XMUL / PSI(I) * F D(OMEGA)
15 !+ /OMEGA
16 !+
17 !+ PSI(I) IS A BASE OF TYPE P1 SEGMENT
18 !+
19 !+ F IS A VECTOR OF TYPE IELMF
20 !
21 !warning THE JACOBIAN MUST BE POSITIVE
22 !warning THE RESULT IS IN W IN NOT ASSEMBLED FORM
23 !
24 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
25 !+ 20/03/08
26 !+ V5P9
27 !+
28 !
29 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
30 !+ 13/07/2010
31 !+ V6P0
32 !+ Translation of French comments within the FORTRAN sources into
33 !+ English comments
34 !
35 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
36 !+ 21/08/2010
37 !+ V6P0
38 !+ Creation of DOXYGEN tags for automated documentation and
39 !+ cross-referencing of the FORTRAN sources
40 !
41 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42 !| F |-->| FUNCTION USED IN THE VECTOR FORMULA
43 !| IKLE1 |-->| FIRST POINT OF SEGMENTS
44 !| IKLE2 |-->| SECOND POINT OF SEGMENTS
45 !| LGSEG |-->| LENGTH OF SEGMENTS
46 !| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINTS
47 !| NELEM |-->| NUMBER OF ELEMENTS
48 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
49 !| SF |-->| BIEF_OBJ STRUCTURE OF F
50 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
51 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
52 !| XMUL |-->| MULTIPLICATION COEFFICIENT
53 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
54 !
55  USE bief, ex_vc01oo => vc01oo
56 !
58  IMPLICIT NONE
59 !
60 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
61 !
62  INTEGER, INTENT(IN) :: NELEM,NELMAX
63  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax)
64  INTEGER, INTENT(IN) :: NBOR(*)
65 !
66  DOUBLE PRECISION, INTENT(INOUT) :: W1(nelmax),W2(nelmax)
67  DOUBLE PRECISION, INTENT(IN) :: LGSEG(*)
68  DOUBLE PRECISION, INTENT(IN) :: XMUL
69 !
70 ! STRUCTURE OF F AND REAL DATA
71 !
72  TYPE(bief_obj), INTENT(IN) :: SF
73  DOUBLE PRECISION, INTENT(IN) :: F(*)
74 !
75 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
76 !
77  INTEGER IELEM,IELMF
78  DOUBLE PRECISION XSUR3,XSUR6,F1,F2,V1,V2
79 !
80 !-----------------------------------------------------------------------
81 !
82  ielmf=sf%ELM
83 !
84 !-----------------------------------------------------------------------
85 !
86 ! F IS CONSTANT BY SEGMENTS
87 !
88  IF(ielmf.EQ.0) THEN
89 !
90  DO ielem = 1,nelem
91  w1(ielem) = 0.5d0*xmul*f(ielem)*lgseg(ielem)
92  w2(ielem) = w1(ielem)
93  ENDDO
94 !
95 !-----------------------------------------------------------------------
96 !
97 ! F IS LINEAR BY SEGMENTS
98 !
99  ELSEIF(ielmf.EQ.1) THEN
100 !
101  xsur3 = xmul/3.d0
102  xsur6 = xmul/6.d0
103 !
104  DO ielem = 1,nelem
105  f1 = f(ikle1(ielem))
106  f2 = f(ikle2(ielem))
107  v1 = ( f1*xsur3 + f2*xsur6 )
108  v2 = ( f2*xsur3 + f1*xsur6 )
109  w1(ielem) = v1 * lgseg(ielem)
110  w2(ielem) = v2 * lgseg(ielem)
111  ENDDO
112 !
113 !-----------------------------------------------------------------------
114 !
115 ! F IS LINEAR BY TRIANGLES OR QUADRILATERALS OR QUASI-BUBBLE
116 !
117  ELSEIF(ielmf.EQ.11.OR.ielmf.EQ.12.OR.ielmf.EQ.21) THEN
118 !
119  xsur3 = xmul/3.d0
120  xsur6 = xmul/6.d0
121 !
122  DO ielem = 1,nelem
123  f1 = f(nbor(ikle1(ielem)))
124  f2 = f(nbor(ikle2(ielem)))
125  v1 = ( f1*xsur3 + f2*xsur6 )
126  v2 = ( f2*xsur3 + f1*xsur6 )
127  w1(ielem) = v1 * lgseg(ielem)
128  w2(ielem) = v2 * lgseg(ielem)
129  ENDDO
130 !
131 !-----------------------------------------------------------------------
132 !
133  ELSE
134 !
135 !-----------------------------------------------------------------------
136 !
137  WRITE(lu,101) ielmf,sf%NAME
138 101 FORMAT(1x,'VC01OO (BIEF) :',/,
139  & 1x,'DISCRETIZATION OF F NOT AVAILABLE:',1i6,
140  & 1x,'REAL NAME: ',a6)
141  CALL plante(1)
142  stop
143 !
144  ENDIF
145 !
146 !-----------------------------------------------------------------------
147 !
148  RETURN
149  END
subroutine vc01oo(XMUL, SF, F, LGSEG, IKLE1, IKLE2, NBOR, NELEM, NELMAX, W1, W2)
Definition: vc01oo.f:7
Definition: bief.f:3