The TELEMAC-MASCARET system  trunk
vc08pp.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vc08pp
3 ! *****************
4 !
5  &( xmul,sf,su,sv,sw,f,u,v,w,x,y,z,
6  & ikle1,ikle2,ikle3,ikle4,ikle5,ikle6,nelem,nelmax,
7  & w1,w2,w3,w4,w5,w6 )
8 !
9 !***********************************************************************
10 ! BIEF V6P3 21/08/2010
11 !***********************************************************************
12 !
13 !brief COMPUTES THE FOLLOWING VECTOR IN FINITE ELEMENTS:
14 !code
15 !+ / DF DF
16 !+ V = XMUL / PSII * ( U -- + V -- ) D(OMEGA)
17 !+ I /OMEGA DX DY
18 !+
19 !+ PSI(I) IS A BASE OF TYPE P1 PRISM
20 !
21 !warning THE JACOBIAN MUST BE POSITIVE
22 !warning THE RESULT IS IN W IN NOT ASSEMBLED FORM - REAL MESH
23 !
24 !history J-M HERVOUET (LNH)
25 !+ 23/02/96
26 !+ V5P1
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 !history J-M HERVOUET (EDF R&D LNHE)
42 !+ 07/01/2013
43 !+ V6P3
44 !+ X and Y are now given per element.
45 !
46 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
47 !| F |-->| FUNCTION USED IN THE VECTOR FORMULA
48 !| IKLE1 |-->| FIRST POINT OF PRISMS
49 !| IKLE2 |-->| SECOND POINT OF PRISMS
50 !| IKLE3 |-->| THIRD POINT OF PRISMS
51 !| IKLE4 |-->| FOURTH POINT OF PRISMS
52 !| IKLE5 |-->| FIFTH POINT OF PRISMS
53 !| IKLE6 |-->| SIXTH POINT OF PRISMS
54 !| NELEM |-->| NUMBER OF ELEMENTS
55 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
56 !| SF |-->| BIEF_OBJ STRUCTURE OF F
57 !| SU |-->| BIEF_OBJ STRUCTURE OF U
58 !| SV |-->| BIEF_OBJ STRUCTURE OF V
59 !| SW |-->| BIEF_OBJ STRUCTURE OF W
60 !| U |-->| FUNCTION USED IN THE VECTOR FORMULA
61 !| V |-->| FUNCTION USED IN THE VECTOR FORMULA
62 !| W |-->| FUNCTION USED IN THE VECTOR FORMULA
63 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
64 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
65 !| W3 |<--| RESULT IN NON ASSEMBLED FORM
66 !| W4 |<--| RESULT IN NON ASSEMBLED FORM
67 !| W5 |<--| RESULT IN NON ASSEMBLED FORM
68 !| W6 |<--| RESULT IN NON ASSEMBLED FORM
69 !| X |-->| ABSCISSAE OF POINTS IN THE MESH, PER ELEMENT
70 !| Y |-->| ORDINATES OF POINTS IN THE MESH, PER ELEMENT
71 !| XMUL |-->| MULTIPLICATION COEFFICIENT
72 !| Z |-->| ELEVATIONS OF POINTS ,PER POINT !!!
73 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
74 !
75  USE bief, ex_vc08pp => vc08pp
76 !
78  IMPLICIT NONE
79 !
80 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
81 !
82  INTEGER, INTENT(IN) :: NELEM,NELMAX
83  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax),IKLE3(nelmax)
84  INTEGER, INTENT(IN) :: IKLE4(nelmax),IKLE5(nelmax),IKLE6(nelmax)
85 !
86  DOUBLE PRECISION, INTENT(IN) :: X(nelmax,6),Y(nelmax,6),Z(*)
87  DOUBLE PRECISION, INTENT(IN) :: XMUL
88  DOUBLE PRECISION, INTENT(INOUT)::W1(nelmax),W2(nelmax),W3(nelmax)
89  DOUBLE PRECISION, INTENT(INOUT)::W4(nelmax),W5(nelmax),W6(nelmax)
90 !
91 ! STRUCTURES OF F, U, V AND REAL DATA
92 !
93  TYPE(bief_obj), INTENT(IN) :: SF,SU,SV,SW
94  DOUBLE PRECISION, INTENT(IN) ::F(*),U(*),V(*),W(*)
95 !
96 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
97 !
98  DOUBLE PRECISION X2,X3,Y2,Y3,DEN
99  DOUBLE PRECISION PZ1,PX1,PX2,PX3,PY1,PY2,PY3
100  DOUBLE PRECISION PXFI,PXFS,PYFI,PYFS
101  DOUBLE PRECISION U1,U2,U3,U4,U5,U6,V1,V2,V3,V4,V5,V6
102  DOUBLE PRECISION Q1,Q2,Q3,Q4,Q5,Q6,H1,H2,H3,HT
103  DOUBLE PRECISION F1,F2,F3,F4,F5,F6
104  DOUBLE PRECISION INT1,INT2,INT3,INT4,INT5,INT6
105  DOUBLE PRECISION SUS,SUI,SHUI,SHUS
106  DOUBLE PRECISION SHUI1,SHUS1,SHUI2,SHUS2,SHUI3,SHUS3
107  DOUBLE PRECISION HU1S3I,HU1I3S,HU1SI,HU2S3I,HU2I3S,HU2SI
108  DOUBLE PRECISION HU3S3I,HU3I3S,HU3SI
109  DOUBLE PRECISION SVS,SVI,SHVI,SHVS
110  DOUBLE PRECISION SHVI1,SHVS1,SHVI2,SHVS2,SHVI3,SHVS3
111  DOUBLE PRECISION HV1S3I,HV1I3S,HV1SI,HV2S3I,HV2I3S,HV2SI
112  DOUBLE PRECISION HV3S3I,HV3I3S,HV3SI
113  DOUBLE PRECISION W14,W41,W25,W52,W63,W36
114 !
115  INTEGER I1,I2,I3,I4,I5,I6,IELEM,IELMF,IELMU,IELMV,IELMW
116 !
117 !**********************************************************************
118 !
119  den = xmul/1440.d0
120 !
121  ielmf=sf%ELM
122  ielmu=su%ELM
123  ielmv=sv%ELM
124  ielmw=sw%ELM
125 !
126 !-----------------------------------------------------------------------
127 !
128 ! FUNCTION F AND VECTOR U ARE LINEAR
129 !
130  IF(ielmu.EQ.41.AND.ielmv.EQ.41.AND.ielmw.EQ.41
131  & .AND.ielmf.EQ.41) THEN
132 !
133 ! LOOP ON THE ELEMENTS
134 !
135  DO ielem = 1,nelem
136 !
137  i1 = ikle1(ielem)
138  i2 = ikle2(ielem)
139  i3 = ikle3(ielem)
140  i4 = ikle4(ielem)
141  i5 = ikle5(ielem)
142  i6 = ikle6(ielem)
143 !
144 ! X2 = X(I2) - X(I1)
145 ! X3 = X(I3) - X(I1)
146 ! Y2 = Y(I2) - Y(I1)
147 ! Y3 = Y(I3) - Y(I1)
148 !
149  x2 = x(ielem,2)
150  x3 = x(ielem,3)
151  y2 = y(ielem,2)
152  y3 = y(ielem,3)
153 !
154  u1 = u(i1)
155  u2 = u(i2)
156  u3 = u(i3)
157  u4 = u(i4)
158  u5 = u(i5)
159  u6 = u(i6)
160  v1 = v(i1)
161  v2 = v(i2)
162  v3 = v(i3)
163  v4 = v(i4)
164  v5 = v(i5)
165  v6 = v(i6)
166  q1 = w(i1)
167  q2 = w(i2)
168  q3 = w(i3)
169  q4 = w(i4)
170  q5 = w(i5)
171  q6 = w(i6)
172  f1 = f(i1)
173  f2 = f(i2)
174  f3 = f(i3)
175  f4 = f(i4)
176  f5 = f(i5)
177  f6 = f(i6)
178 !
179  h1 = z(i4)-z(i1)
180  h2 = z(i5)-z(i2)
181  h3 = z(i6)-z(i3)
182 !
183 ! INTERMEDIATE COMPUTATIONS
184 !
185  px2=y3*den
186  px3=-y2*den
187  px1=-px2-px3
188  py2=-x3*den
189  py3=x2*den
190  py1=-py3-py2
191  pz1=-den*(x2*y3-y2*x3)*2
192 !
193  ht = h1+h2+h3
194  sus = u6+u5+u4
195  sui = u3+u2+u1
196  shui = h3*u3+h2*u2+h1*u1
197  shus = h3*u6+h2*u5+h1*u4
198  shus1 = (ht+h1)*(sus+u4)+shus+u4*h1
199  shui1 = (ht+h1)*(sui+u1)+shui+u1*h1
200  shus2 = (ht+h2)*(sus+u5)+shus+u5*h2
201  shui2 = (ht+h2)*(sui+u2)+shui+u2*h2
202  shus3 = (ht+h3)*(sus+u6)+shus+u6*h3
203  shui3 = (ht+h3)*(sui+u3)+shui+u3*h3
204  hu1s3i = shus1+3*shui1
205  hu1i3s = shui1+3*shus1
206  hu1si = shus1+shui1
207  hu2s3i = shus2+3*shui2
208  hu2i3s = shui2+3*shus2
209  hu2si = shus2+shui2
210  hu3s3i = shus3+3*shui3
211  hu3i3s = shui3+3*shus3
212  hu3si = shus3+shui3
213 !
214  svs = v6+v5+v4
215  svi = v3+v2+v1
216  shvi = h3*v3+h2*v2+h1*v1
217  shvs = h3*v6+h2*v5+h1*v4
218  shvs1 = (ht+h1)*(svs+v4)+shvs+v4*h1
219  shvi1 = (ht+h1)*(svi+v1)+shvi+v1*h1
220  shvs2 = (ht+h2)*(svs+v5)+shvs+v5*h2
221  shvi2 = (ht+h2)*(svi+v2)+shvi+v2*h2
222  shvs3 = (ht+h3)*(svs+v6)+shvs+v6*h3
223  shvi3 = (ht+h3)*(svi+v3)+shvi+v3*h3
224  hv1s3i = shvs1+3*shvi1
225  hv1i3s = shvi1+3*shvs1
226  hv1si = shvs1+shvi1
227  hv2s3i = shvs2+3*shvi2
228  hv2i3s = shvi2+3*shvs2
229  hv2si = shvs2+shvi2
230  hv3s3i = shvs3+3*shvi3
231  hv3i3s = shvi3+3*shvs3
232  hv3si = shvs3+shvi3
233 !
234  w14 = q1+2*q4
235  w41 = q4+2*q1
236  w25 = q2+2*q5
237  w52 = q5+2*q2
238  w63 = q6+2*q3
239  w36 = q3+2*q6
240 !
241  int1=2*(3*w41+w52+w63)
242  int2=2*(w41+w52)+w63
243  int3=2*(w41+w63)+w52
244  int4=2*(w41+3*w52+w63)
245  int5=2*(w52+w63)+w41
246  int6=2*(w41+w52+3*w63)
247  w1(ielem)=pz1*((f1-f4)*int1+(f2-f5)*int2+(f3-f6)*int3)
248  w2(ielem)=pz1*((f1-f4)*int2+(f2-f5)*int4+(f3-f6)*int5)
249  w3(ielem)=pz1*((f1-f4)*int3+(f2-f4)*int5+(f3-f6)*int6)
250 !
251  int1=2*(3*w14+w25+w36)
252  int2=2*(w14+w25)+w36
253  int3=2*(w14+w36)+w25
254  int4=2*(w14+3*w25+w36)
255  int5=2*(w25+w36)+w14
256  int6=2*(w14+w25+3*w36)
257  w4(ielem)=pz1*((f1-f4)*int1+(f2-f5)*int2+(f3-f6)*int3)
258  w5(ielem)=pz1*((f1-f4)*int2+(f2-f5)*int4+(f3-f6)*int5)
259  w6(ielem)=pz1*((f1-f4)*int3+(f2-f4)*int5+(f3-f6)*int6)
260 !
261  pxfi=px1*f1+px2*f2+px3*f3
262  pxfs=px1*f4+px2*f5+px3*f6
263  pyfi=py1*f1+py2*f2+py3*f3
264  pyfs=py1*f4+py2*f5+py3*f6
265 !
266  w1(ielem)=w1(ielem)+pxfi*hu1s3i+pyfi*hv1s3i
267  & +pxfs* hu1si+pyfs* hv1si
268  w2(ielem)=w2(ielem)+pxfi*hu2s3i+pyfi*hv2s3i
269  & +pxfs* hu2si+pyfs* hv2si
270  w3(ielem)=w3(ielem)+pxfi*hu3s3i+pyfi*hv3s3i
271  & +pxfs* hu3si+pyfs* hv3si
272  w4(ielem)=w4(ielem)+pxfi* hu1si+pyfi* hv1si
273  & +pxfs*hu1i3s+pyfs*hv1i3s
274  w5(ielem)=w5(ielem)+pxfi* hu2si+pyfi* hv2si
275  & +pxfs*hu2i3s+pyfs*hv2i3s
276  w6(ielem)=w6(ielem)+pxfi* hu3si+pyfi* hv3si
277  & +pxfs*hu3i3s+pyfs*hv3i3s
278 !
279  ENDDO ! IELEM
280 !
281 !-----------------------------------------------------------------------
282 !
283  ELSE
284 !
285 !-----------------------------------------------------------------------
286 !
287  WRITE(lu,101) ielmf,sf%NAME
288  WRITE(lu,201) ielmu,su%NAME
289  WRITE(lu,301)
290 101 FORMAT(1x,'VC08PP (BIEF) :',/,
291  & 1x,'DISCRETIZATION OF F:',1i6,
292  & 1x,'REAL NAME: ',a6)
293 201 FORMAT(1x,'DISCRETIZATION OF U:',1i6,
294  & 1x,'REAL NAME: ',a6)
295 301 FORMAT(1x,'CASE NOT IMPLEMENTED')
296  CALL plante(1)
297  stop
298 !
299  ENDIF
300 !
301 !-----------------------------------------------------------------------
302 !
303  RETURN
304  END
subroutine vc08pp(XMUL, SF, SU, SV, SW, F, U, V, W, X, Y, Z, IKLE1, IKLE2, IKLE3, IKLE4, IKLE5, IKLE6, NELEM, NELMAX, W1, W2, W3, W4, W5, W6)
Definition: vc08pp.f:9
Definition: bief.f:3