The TELEMAC-MASCARET system  trunk
vc01pp.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vc01pp
3 ! *****************
4 !
5  &( xmul,sf,f,z,surfac,
6  & ikle1,ikle2,ikle3,ikle4,ikle5,ikle6,nelem,nelmax,
7  & w1,w2,w3,w4,w5,w6)
8 !
9 !***********************************************************************
10 ! BIEF V6P1 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 PRISM
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 - REAL MESH
25 !
26 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
27 !+ 09/12/94
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 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
44 !| F |-->| FUNCTION USED IN THE VECTOR FORMULA
45 !| IKLE1 |-->| FIRST POINT OF PRISMS
46 !| IKLE2 |-->| SECOND POINT OF PRISMS
47 !| IKLE3 |-->| THIRD POINT OF PRISMS
48 !| IKLE4 |-->| FOURTH POINT OF PRISMS
49 !| IKLE5 |-->| FIFTH POINT OF PRISMS
50 !| IKLE6 |-->| SIXTH POINT OF PRISMS
51 !| NELEM |-->| NUMBER OF ELEMENTS
52 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
53 !| SF |-->| BIEF_OBJ STRUCTURE OF F
54 !| SURFAC |-->| AREA OF TRIANGLES
55 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
56 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
57 !| W3 |<--| RESULT IN NON ASSEMBLED FORM
58 !| W4 |<--| RESULT IN NON ASSEMBLED FORM
59 !| W5 |<--| RESULT IN NON ASSEMBLED FORM
60 !| W6 |<--| RESULT IN NON ASSEMBLED FORM
61 !| XMUL |-->| MULTIPLICATION COEFFICIENT
62 !| Z |-->| ELEVATIONS OF POINTS
63 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
64 !
65  USE bief, ex_vc01pp => vc01pp
66 !
68  IMPLICIT NONE
69 !
70 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
71 !
72  INTEGER, INTENT(IN) :: NELEM,NELMAX
73  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax),IKLE3(nelmax)
74  INTEGER, INTENT(IN) :: IKLE4(nelmax),IKLE5(nelmax),IKLE6(nelmax)
75 !
76  DOUBLE PRECISION, INTENT(IN) :: Z(*)
77  DOUBLE PRECISION, INTENT(IN) :: SURFAC(nelmax)
78  DOUBLE PRECISION,INTENT(INOUT)::W1(nelmax),W2(nelmax),W3(nelmax)
79  DOUBLE PRECISION,INTENT(INOUT)::W4(nelmax),W5(nelmax),W6(nelmax)
80  DOUBLE PRECISION, INTENT(IN) :: XMUL
81 !
82 ! STRUCTURE OF F AND REAL DATA
83 !
84  TYPE(bief_obj), INTENT(IN) :: SF
85  DOUBLE PRECISION, INTENT(IN) :: F(*)
86 !
87 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
88 !
89  INTEGER IELEM,IELMF
90  DOUBLE PRECISION SUR360,COEF,H1,H2,H3,SHT,SH1,SH2,SH3
91  DOUBLE PRECISION F1,F2,F3,F4,F5,F6,SFI,SFS,SF1,SF2,SF3,SF4,SF5,SF6
92  DOUBLE PRECISION HF1,HF2,HF3,HF4,HF5,HF6,SHFI,SHFS
93  DOUBLE PRECISION SHF1,SHF2,SHF3,SHF4,SHF5,SHF6
94 !
95 !***********************************************************************
96 !
97  ielmf=sf%ELM
98 !
99 !-----------------------------------------------------------------------
100 !
101 ! F IS LINEAR
102 !
103  IF(ielmf.EQ.41) THEN
104 !
105  sur360 = xmul / 360.d0
106 !
107  DO ielem = 1 , nelem
108 !
109  coef = sur360 * surfac(ielem)
110 !
111  h1 = coef * (z(ikle4(ielem)) - z(ikle1(ielem)))
112  h2 = coef * (z(ikle5(ielem)) - z(ikle2(ielem)))
113  h3 = coef * (z(ikle6(ielem)) - z(ikle3(ielem)))
114  sht = h1 + h2 + h3
115  sh1 = h1 + sht
116  sh2 = h2 + sht
117  sh3 = h3 + sht
118 !
119  f1 = f(ikle1(ielem))
120  f2 = f(ikle2(ielem))
121  f3 = f(ikle3(ielem))
122  f4 = f(ikle4(ielem))
123  f5 = f(ikle5(ielem))
124  f6 = f(ikle6(ielem))
125  sfi = f1 + f2 + f3
126  sfs = f4 + f5 + f6
127  sf1 = f1 + sfi
128  sf2 = f2 + sfi
129  sf3 = f3 + sfi
130  sf4 = f4 + sfs
131  sf5 = f5 + sfs
132  sf6 = f6 + sfs
133 !
134  hf1 = h1 * f1
135  hf2 = h2 * f2
136  hf3 = h3 * f3
137  hf4 = h1 * f4
138  hf5 = h2 * f5
139  hf6 = h3 * f6
140  shfi = hf1 + hf2 + hf3
141  shfs = hf4 + hf5 + hf6
142  shf1 = hf1 + shfi
143  shf2 = hf2 + shfi
144  shf3 = hf3 + shfi
145  shf4 = hf4 + shfs
146  shf5 = hf5 + shfs
147  shf6 = hf6 + shfs
148 !
149  w1(ielem) = sh1 * (sf1+sf1+sf4) + shf1 + shf1 + shf4
150  w2(ielem) = sh2 * (sf2+sf2+sf5) + shf2 + shf2 + shf5
151  w3(ielem) = sh3 * (sf3+sf3+sf6) + shf3 + shf3 + shf6
152  w4(ielem) = sh1 * (sf1+sf4+sf4) + shf1 + shf4 + shf4
153  w5(ielem) = sh2 * (sf2+sf5+sf5) + shf2 + shf5 + shf5
154  w6(ielem) = sh3 * (sf3+sf6+sf6) + shf3 + shf6 + shf6
155 !
156  ENDDO ! IELEM
157 !
158 !-----------------------------------------------------------------------
159 !
160  ELSE
161 !
162  WRITE(lu,102) ielmf,sf%NAME
163 102 FORMAT(1x,'VC01PP (BIEF) :',/,
164  & 1x,'DISCRETISATION OF F : ',1i6,' NOT IMPLEMENTED',/,
165  & 1x,'REAL NAME OF F: ',a6)
166  CALL plante(1)
167  stop
168 !
169  ENDIF
170 !
171 !-----------------------------------------------------------------------
172 !
173  RETURN
174  END
subroutine vc01pp(XMUL, SF, F, Z, SURFAC, IKLE1, IKLE2, IKLE3, IKLE4, IKLE5, IKLE6, NELEM, NELMAX, W1, W2, W3, W4, W5, W6)
Definition: vc01pp.f:9
Definition: bief.f:3