The TELEMAC-MASCARET system  trunk
vc00pp.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vc00pp
3 ! *****************
4 !
5  &(xmul,z,surfac,ikle1,ikle2,ikle3,ikle4,ikle5,ikle6,nelem,nelmax,
6  & w1,w2,w3,w4,w5,w6,formul)
7 !
8 !***********************************************************************
9 ! BIEF V6P2 21/08/2010
10 !***********************************************************************
11 !
12 !brief COMPUTES THE FOLLOWING VECTOR IN FINITE ELEMENTS:
13 !code
14 !+ /
15 !+ VEC(I) = XMUL / PSI(I) D(OMEGA)
16 !+ /OMEGA
17 !+
18 !+ PSI(I) IS A BASE OF TYPE P1 PRISM
19 !
20 !warning THE JACOBIAN MUST BE POSITIVE
21 !warning THE RESULT IS IN W IN NOT ASSEMBLED FORM
22 !
23 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
24 !+ 09/12/94
25 !+ V5P1
26 !+
27 !
28 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
29 !+ 13/07/2010
30 !+ V6P0
31 !+ Translation of French comments within the FORTRAN sources into
32 !+ English comments
33 !
34 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
35 !+ 21/08/2010
36 !+ V6P0
37 !+ Creation of DOXYGEN tags for automated documentation and
38 !+ cross-referencing of the FORTRAN sources
39 !
40 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
41 !| FORMUL |-->| STRING WITH THE FORMULA DESCRIBING THE VECTOR
42 !| IKLE1 |-->| FIRST POINT OF PRISMS
43 !| IKLE2 |-->| SECOND POINT OF PRISMS
44 !| IKLE3 |-->| THIRD POINT OF PRISMS
45 !| IKLE4 |-->| FOURTH POINT OF PRISMS
46 !| IKLE5 |-->| FIFTH POINT OF PRISMS
47 !| IKLE6 |-->| SIXTH POINT OF PRISMS
48 !| NELEM |-->| NUMBER OF ELEMENTS
49 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
50 !| SURFAC |-->| AREA OF TRIANGLES
51 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
52 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
53 !| W3 |<--| RESULT IN NON ASSEMBLED FORM
54 !| W4 |<--| RESULT IN NON ASSEMBLED FORM
55 !| W5 |<--| RESULT IN NON ASSEMBLED FORM
56 !| W6 |<--| RESULT IN NON ASSEMBLED FORM
57 !| XMUL |-->| MULTIPLICATION COEFFICIENT
58 !| Z |-->| ELEVATIONS OF POINTS
59 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60 !
62  IMPLICIT NONE
63 !
64 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
65 !
66  INTEGER, INTENT(IN) :: NELEM,NELMAX
67  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax),IKLE3(nelmax)
68  INTEGER, INTENT(IN) :: IKLE4(nelmax),IKLE5(nelmax),IKLE6(nelmax)
69 !
70  DOUBLE PRECISION, INTENT(IN) :: Z(*)
71  DOUBLE PRECISION, INTENT(IN) :: SURFAC(nelmax)
72  DOUBLE PRECISION, INTENT(INOUT) :: W1(nelmax)
73  DOUBLE PRECISION, INTENT(INOUT) :: W2(nelmax)
74  DOUBLE PRECISION, INTENT(INOUT) :: W3(nelmax)
75  DOUBLE PRECISION, INTENT(INOUT) :: W4(nelmax)
76  DOUBLE PRECISION, INTENT(INOUT) :: W5(nelmax)
77  DOUBLE PRECISION, INTENT(INOUT) :: W6(nelmax)
78  DOUBLE PRECISION, INTENT(IN) :: XMUL
79 !
80  CHARACTER(LEN=16), INTENT(IN) :: FORMUL
81 !
82 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
83 !
84  INTEGER IELEM
85 !
86  DOUBLE PRECISION XSUR24,XSUR6,H1,H2,H3,SHT,COEF
87 !
88 !-----------------------------------------------------------------------
89 !
90  xsur24 = xmul/24.d0
91  xsur6 = xmul/6.d0
92 !
93 !-----------------------------------------------------------------------
94 !
95  IF(formul(1:7).EQ.'MASBAS ') THEN
96 !
97 ! STANDARD FORMULA
98 !
99 ! LOOP ON THE ELEMENTS
100 !
101  DO ielem = 1 , nelem
102 !
103  h1 = z(ikle4(ielem)) - z(ikle1(ielem))
104  h2 = z(ikle5(ielem)) - z(ikle2(ielem))
105  h3 = z(ikle6(ielem)) - z(ikle3(ielem))
106  sht = h1 + h2 + h3
107 !
108  coef = xsur24 * surfac(ielem)
109 !
110  w1(ielem) = coef * (sht+h1)
111  w2(ielem) = coef * (sht+h2)
112  w3(ielem) = coef * (sht+h3)
113  w4(ielem) = w1(ielem)
114  w5(ielem) = w2(ielem)
115  w6(ielem) = w3(ielem)
116 !
117  ENDDO
118 !
119 !-----------------------------------------------------------------------
120 !
121  ELSEIF(formul(1:7).EQ.'MASBAS2') THEN
122 !
123 ! FORMULA WITH MASS-LUMPING
124 !
125 ! LOOP ON THE ELEMENTS
126 !
127  DO ielem = 1 , nelem
128 !
129  h1 = z(ikle4(ielem)) - z(ikle1(ielem))
130  h2 = z(ikle5(ielem)) - z(ikle2(ielem))
131  h3 = z(ikle6(ielem)) - z(ikle3(ielem))
132 !
133  coef = xsur6 * surfac(ielem)
134 !
135  w1(ielem) = coef * h1
136  w2(ielem) = coef * h2
137  w3(ielem) = coef * h3
138  w4(ielem) = w1(ielem)
139  w5(ielem) = w2(ielem)
140  w6(ielem) = w3(ielem)
141 !
142  ENDDO
143 !
144 !-----------------------------------------------------------------------
145 !
146  ELSE
147 !
148  WRITE(lu,*) ' '
149  WRITE(lu,*) 'UNKNOWN FORMULA IN VC00PP:',formul
150  CALL plante(1)
151  stop
152 !
153  ENDIF
154 !
155 !-----------------------------------------------------------------------
156 !
157  RETURN
158  END
subroutine vc00pp(XMUL, Z, SURFAC, IKLE1, IKLE2, IKLE3, IKLE4, IKLE5, IKLE6, NELEM, NELMAX, W1, W2, W3, W4, W5, W6, FORMUL)
Definition: vc00pp.f:8