The TELEMAC-MASCARET system  trunk
vc13pp2.f
Go to the documentation of this file.
1 ! ******************
2  SUBROUTINE vc13pp2
3 ! ******************
4 !
5  &(xmul,sf,f,x,y,z,
6  & ikle1,ikle2,ikle3,ikle4,ikle5,ikle6,nelem,nelmax,
7  & w1,w2,w3,w4,w5,w6,icoord)
8 !
9 !***********************************************************************
10 ! BIEF V6P3 21/08/2010
11 !***********************************************************************
12 !
13 !brief COMPUTES THE FOLLOWING VECTOR IN FINITE ELEMENTS:
14 !code
15 !+ (EXAMPLE OF THE X COMPONENT, WHICH CORRESPONDS TO ICOORD=1)
16 !+
17 !+ / DF
18 !+ VEC(I) = XMUL / ( P *( -- )) D(OMEGA)
19 !+ /OMEGA I DX
20 !+
21 !+ P IS A LINEAR BASE
22 !+ I
23 !+
24 !+ F IS A VECTOR OF TYPE P1 OR OTHER
25 !+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26 !+ HERE F IS A FUNCTION OF X AND Y (NOT OF Z)
27 !+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
28 !
29 !note IMPORTANT : IF F IS OF TYPE P0, THE RESULT IS 0.
30 !+ HERE, IF F IS P0, IT REALLY MEANS THAT F IS
31 !+ P1, BUT GIVEN BY ELEMENTS.
32 !+ THE SIZE OF F SHOULD THEN BE : F(NELMAX,3).
33 !
34 !warning THE JACOBIAN MUST BE POSITIVE
35 !warning THE RESULT IS IN W IN NOT ASSEMBLED FORM
36 !
37 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
38 !+ 09/12/94
39 !+ V5P1
40 !+
41 !
42 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
43 !+ 13/07/2010
44 !+ V6P0
45 !+ Translation of French comments within the FORTRAN sources into
46 !+ English comments
47 !
48 !history N.DURAND (HRW), S.E. BOURBAN (HRW)
49 !+ 21/08/2010
50 !+ V6P0
51 !+ Creation of DOXYGEN tags for automated documentation and
52 !+ cross-referencing of the FORTRAN sources
53 !
54 !history J-M HERVOUET (EDF R&D LNHE)
55 !+ 07/01/2013
56 !+ V6P3
57 !+ X and Y are now given per element.
58 !
59 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60 !| F |-->| FUNCTION USED IN THE VECTOR FORMULA
61 !| FORMUL |-->| SEE AT THE END OF THE SUBROUTINE
62 !| ICOORD |-->| 1: DERIVATIVE ALONG X, 2: ALONG Y
63 !| IKLE1 |-->| FIRST POINT OF PRISMS
64 !| IKLE2 |-->| SECOND POINT OF PRISMS
65 !| IKLE3 |-->| THIRD POINT OF PRISMS
66 !| IKLE4 |-->| FOURTH POINT OF PRISMS
67 !| IKLE5 |-->| FIFTH POINT OF PRISMS
68 !| IKLE6 |-->| SIXTH POINT OF PRISMS
69 !| NELEM |-->| NUMBER OF ELEMENTS
70 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
71 !| SF |-->| BIEF_OBJ STRUCTURE OF F
72 !| SURFAC |-->| AREA OF TRIANGLES
73 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
74 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
75 !| W3 |<--| RESULT IN NON ASSEMBLED FORM
76 !| W4 |<--| RESULT IN NON ASSEMBLED FORM
77 !| W5 |<--| RESULT IN NON ASSEMBLED FORM
78 !| W6 |<--| RESULT IN NON ASSEMBLED FORM
79 !| X |-->| ABSCISSAE OF POINTS IN THE MESH, PER ELEMENT
80 !| XMUL |-->| MULTIPLICATION COEFFICIENT
81 !| Y |-->| ORDINATES OF POINTS IN THE MESH, PER ELEMENT
82 !| Z |-->| Z-COORDINATES OF POINTS IN THE MESH, PER POINT !
83 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
84 !
85  USE bief, ex_vc13pp2 => vc13pp2
86 !
88  IMPLICIT NONE
89 !
90 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
91 !
92  INTEGER, INTENT(IN) :: NELEM,NELMAX,ICOORD
93  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax),IKLE3(nelmax)
94  INTEGER, INTENT(IN) :: IKLE4(nelmax),IKLE5(nelmax),IKLE6(nelmax)
95 !
96  DOUBLE PRECISION, INTENT(IN) :: X(nelmax,6),Y(nelmax,6),Z(*)
97  DOUBLE PRECISION, INTENT(INOUT) ::W1(nelmax),W2(nelmax),W3(nelmax)
98  DOUBLE PRECISION, INTENT(INOUT) ::W4(nelmax),W5(nelmax),W6(nelmax)
99  DOUBLE PRECISION, INTENT(IN) :: XMUL
100 !
101 ! STRUCTURE OF F AND REAL DATA
102 !
103  TYPE(bief_obj), INTENT(IN) :: SF
104  DOUBLE PRECISION, INTENT(IN) :: F(*)
105 !
106 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
107 !
108  DOUBLE PRECISION XSUR48,F1,F2,F3
109  DOUBLE PRECISION X2,X3,Y2,Y3,H1,H2,H3,H123,FX6,FY6
110  INTEGER I1,I2,I3,I4,I5,I6,IELEM,IELMF
111 !
112 !-----------------------------------------------------------------------
113 !
114  xsur48 = xmul/48.d0
115 !
116 !-----------------------------------------------------------------------
117 !
118  ielmf=sf%ELM
119 !
120 !=======================================================================
121 !
122 ! F IS LINEAR
123 !
124  IF(ielmf.EQ.41) THEN
125 !
126  IF(icoord.EQ.1) THEN
127 !
128 !-----------------------------------------------------------------------
129 !
130 ! DERIVATIVE WRT X
131 !
132  DO ielem = 1 , nelem
133 !
134  i1 = ikle1(ielem)
135  i2 = ikle2(ielem)
136  i3 = ikle3(ielem)
137  i4 = ikle4(ielem)
138  i5 = ikle5(ielem)
139  i6 = ikle6(ielem)
140 !
141  f1 = f(i1)
142  f2 = f(i2)
143  f3 = f(i3)
144 !
145 ! REAL COORDINATES OF THE POINTS OF THE ELEMENT (ORIGIN IN 1)
146 !
147  y2 = y(ielem,2)
148  y3 = y(ielem,3)
149 !
150  fx6 = y2*(f1-f3) + y3*(f2-f1)
151 !
152  h1 = z(i4) - z(i1)
153  h2 = z(i5) - z(i2)
154  h3 = z(i6) - z(i3)
155  h123 = h1 + h2 + h3
156 !
157  w1(ielem) = xsur48 * (h123+h1) * fx6
158  w2(ielem) = xsur48 * (h123+h2) * fx6
159  w3(ielem) = xsur48 * (h123+h3) * fx6
160 !
161  w4(ielem) = w1(ielem)
162  w5(ielem) = w2(ielem)
163  w6(ielem) = w3(ielem)
164 !
165  ENDDO ! IELEM
166 !
167  ELSEIF(icoord.EQ.2) THEN
168 !
169 !-----------------------------------------------------------------------
170 !
171 ! DERIVATIVE WRT Y
172 !
173  DO ielem = 1 , nelem
174 !
175  i1 = ikle1(ielem)
176  i2 = ikle2(ielem)
177  i3 = ikle3(ielem)
178  i4 = ikle4(ielem)
179  i5 = ikle5(ielem)
180  i6 = ikle6(ielem)
181 !
182  f1 = f(i1)
183  f2 = f(i2)
184  f3 = f(i3)
185 !
186 ! REAL COORDINATES OF THE POINTS OF THE ELEMENT (ORIGIN IN 1)
187 !
188  x2 = x(ielem,2)
189  x3 = x(ielem,3)
190 !
191  fy6 = x2*(f3-f1) + x3*(f1-f2)
192 !
193  h1 = z(i4) - z(i1)
194  h2 = z(i5) - z(i2)
195  h3 = z(i6) - z(i3)
196  h123 = h1 + h2 + h3
197 !
198  w1(ielem) = xsur48 * (h123+h1) * fy6
199  w2(ielem) = xsur48 * (h123+h2) * fy6
200  w3(ielem) = xsur48 * (h123+h3) * fy6
201 !
202  w4(ielem) = w1(ielem)
203  w5(ielem) = w2(ielem)
204  w6(ielem) = w3(ielem)
205 !
206  ENDDO
207 !
208  ELSE
209 !
210 !-----------------------------------------------------------------------
211 !
212  WRITE(lu,201) icoord
213 201 FORMAT(1x,'VC13PP2 (BIEF) : IMPOSSIBLE COMPONENT ',
214  & 1i6,' CHECK ICOORD')
215  CALL plante(1)
216  stop
217 !
218  ENDIF
219 !
220 !=======================================================================
221 !
222  ELSE
223 !
224 !=======================================================================
225 !
226  WRITE(lu,102) ielmf,sf%NAME
227 102 FORMAT(1x,'VC13PP2 (BIEF) :',/,
228  & 1x,'DISCRETISATION OF F : ',1i6,' NOT IMPLEMENTED',/,
229  & 1x,'REAL NAME OF F: ',a6)
230  CALL plante(1)
231  stop
232 !
233  ENDIF
234 !
235 !=======================================================================
236 !
237  RETURN
238  END
subroutine vc13pp2(XMUL, SF, F, X, Y, Z, IKLE1, IKLE2, IKLE3, IKLE4, IKLE5, IKLE6, NELEM, NELMAX, W1, W2, W3, W4, W5, W6, ICOORD)
Definition: vc13pp2.f:9
Definition: bief.f:3