The TELEMAC-MASCARET system  trunk
vc18pp.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vc18pp
3 ! *****************
4 !
5  &(xmul,sf,su,sv,f,u,v,x,y,
6  & ikle1,ikle2,ikle3,ikle4,ikle5,ikle6,nelem,nelmax,w1,w2,w3)
7 !
8 !***********************************************************************
9 ! BIEF V6P3 21/08/2010
10 !***********************************************************************
11 !
12 !brief COMPUTES THE FOLLOWING VECTOR:
13 !code
14 !+ / 1 DF DF
15 !+ V = XMUL / --- PSI(IH) * ( U -- + V -- ) D(OMEGA)
16 !+ IH,P* /P* DZ* DX DY
17 !+
18 !+
19 !+ PSI(I) IS A 2D P1 BASE ON THE BASE TRIANGLE OF THE PRISM!
20 !+
21 !+ F AND U ARE 3D LINEAR BY PRISM
22 !
23 !warning THE JACOBIAN MUST BE POSITIVE
24 !warning THE RESULT IS IN W IN NOT ASSEMBLED FORM
25 !warning COMPUTATION IN THE TRANSFORMED MESH !
26 !
27 !history A. DECOENE (INRIA-LNHE)
28 !+ 15/11/04
29 !+ V5P5
30 !+
31 !
32 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
33 !+ 13/07/2010
34 !+ V6P0
35 !+ Translation of French comments within the FORTRAN sources into
36 !+ English comments
37 !
38 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
39 !+ 21/08/2010
40 !+ V6P0
41 !+ Creation of DOXYGEN tags for automated documentation and
42 !+ cross-referencing of the FORTRAN sources
43 !
44 !history J-M HERVOUET (EDF R&D LNHE)
45 !+ 07/01/2013
46 !+ V6P3
47 !+ X and Y are now given per element.
48 !
49 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
50 !| F |-->| FUNCTION USED IN THE VECTOR FORMULA
51 !| IKLE1 |-->| FIRST POINT OF PRISMS
52 !| IKLE2 |-->| SECOND POINT OF PRISMS
53 !| IKLE3 |-->| THIRD POINT OF PRISMS
54 !| IKLE4 |-->| FOURTH POINT OF PRISMS
55 !| IKLE5 |-->| FIFTH POINT OF PRISMS
56 !| IKLE6 |-->| SIXTH POINT OF PRISMS
57 !| NELEM |-->| NUMBER OF ELEMENTS
58 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
59 !| SF |-->| BIEF_OBJ STRUCTURE OF F
60 !| SU |-->| BIEF_OBJ STRUCTURE OF U
61 !| SV |-->| BIEF_OBJ STRUCTURE OF V
62 !| SURFAC |-->| AREA OF TRIANGLES
63 !| U |-->| FUNCTION USED IN THE VECTOR FORMULA
64 !| V |-->| FUNCTION USED IN THE VECTOR FORMULA
65 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
66 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
67 !| W3 |<--| RESULT IN NON ASSEMBLED FORM
68 !| X |-->| ABSCISSAE OF POINTS IN THE MESH, PER ELEMENT
69 !| Y |-->| ORDINATES OF POINTS IN THE MESH, PER ELEMENT
70 !| XMUL |-->| MULTIPLICATION COEFFICIENT
71 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
72 !
73  USE bief, ex_vc18pp => vc18pp
74 !
76  IMPLICIT NONE
77 !
78 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
79 !
80  INTEGER, INTENT(IN) :: NELEM,NELMAX
81  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax),IKLE3(nelmax)
82  INTEGER, INTENT(IN) :: IKLE4(nelmax),IKLE5(nelmax),IKLE6(nelmax)
83 !
84  DOUBLE PRECISION, INTENT(IN) :: X(nelmax,6),Y(nelmax,6),XMUL
85  DOUBLE PRECISION, INTENT(INOUT) ::W1(nelmax),W2(nelmax),W3(nelmax)
86 !
87 ! STRUCTURES OF F, U, V AND REAL DATA
88 !
89  TYPE(bief_obj), INTENT(IN) :: SF,SU,SV
90  DOUBLE PRECISION, INTENT(IN) :: F(*),U(*),V(*)
91 !
92 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
93 !
94  INTEGER IELEM,IELMF,IELMU,IELMV
95  DOUBLE PRECISION X2,X3,Y2,Y3,DEN
96  DOUBLE PRECISION PX1,PX2,PX3,PY1,PY2,PY3
97  DOUBLE PRECISION PXFI,PXFS,PYFI,PYFS
98  DOUBLE PRECISION U1,U2,U3,U4,U5,U6,V1,V2,V3,V4,V5,V6
99  DOUBLE PRECISION F1,F2,F3,F4,F5,F6
100  DOUBLE PRECISION SUS,SUI
101  DOUBLE PRECISION SHUI1,SHUS1,SHUI2,SHUS2,SHUI3,SHUS3
102  DOUBLE PRECISION HU1S3I,HU1I3S,HU1SI,HU2S3I,HU2I3S,HU2SI
103  DOUBLE PRECISION HU3S3I,HU3I3S,HU3SI
104  DOUBLE PRECISION SVS,SVI
105  DOUBLE PRECISION SHVI1,SHVS1,SHVI2,SHVS2,SHVI3,SHVS3
106  DOUBLE PRECISION HV1S3I,HV1I3S,HV1SI,HV2S3I,HV2I3S,HV2SI
107  DOUBLE PRECISION HV3S3I,HV3I3S,HV3SI
108 !
109  INTEGER I1,I2,I3,I4,I5,I6
110 !
111 !**********************************************************************
112 !
113  den = xmul/1440.d0
114 !
115  ielmf=sf%ELM
116  ielmu=su%ELM
117  ielmv=sv%ELM
118 !
119 !-----------------------------------------------------------------------
120 !
121 ! FUNCTION F AND VECTOR U ARE LINEAR
122 !
123  IF(ielmu.EQ.41.AND.ielmv.EQ.41.AND.ielmf.EQ.41) THEN
124 !
125 ! LOOP ON THE ELEMENTS
126 !
127  DO ielem = 1,nelem
128 !
129  i1 = ikle1(ielem)
130  i2 = ikle2(ielem)
131  i3 = ikle3(ielem)
132  i4 = ikle4(ielem)
133  i5 = ikle5(ielem)
134  i6 = ikle6(ielem)
135 !
136 ! X2 = X(I2) - X(I1)
137 ! X3 = X(I3) - X(I1)
138 ! Y2 = Y(I2) - Y(I1)
139 ! Y3 = Y(I3) - Y(I1)
140 !
141  x2 = x(ielem,2)
142  x3 = x(ielem,3)
143  y2 = y(ielem,2)
144  y3 = y(ielem,3)
145 !
146  u1 = u(i1)
147  u2 = u(i2)
148  u3 = u(i3)
149  u4 = u(i4)
150  u5 = u(i5)
151  u6 = u(i6)
152  v1 = v(i1)
153  v2 = v(i2)
154  v3 = v(i3)
155  v4 = v(i4)
156  v5 = v(i5)
157  v6 = v(i6)
158  f1 = f(i1)
159  f2 = f(i2)
160  f3 = f(i3)
161  f4 = f(i4)
162  f5 = f(i5)
163  f6 = f(i6)
164 !
165 ! INTERMEDIATE COMPUTATIONS
166 !
167  px2=y3*den
168  px3=-y2*den
169  px1=-px2-px3
170  py2=-x3*den
171  py3=x2*den
172  py1=-py3-py2
173 !
174  sus = u6+u5+u4
175  sui = u3+u2+u1
176  shus1 = 5 * (sus+u4)
177  shui1 = 5 * (sui+u1)
178  shus2 = 5 * (sus+u5)
179  shui2 = 5 * (sui+u2)
180  shus3 = 5 * (sus+u6)
181  shui3 = 5 * (sui+u3)
182  hu1s3i = shus1 + 3*shui1
183  hu1i3s = shui1 + 3*shus1
184  hu1si = shus1 + shui1
185  hu2s3i = shus2 + 3*shui2
186  hu2i3s = shui2 + 3*shus2
187  hu2si = shus2 + shui2
188  hu3s3i = shus3 + 3*shui3
189  hu3i3s = shui3 + 3*shus3
190  hu3si = shus3 + shui3
191 !
192  svs = v6+v5+v4
193  svi = v3+v2+v1
194  shvs1 = 5 * (svs+v4)
195  shvi1 = 5 * (svi+v1)
196  shvs2 = 5 * (svs+v5)
197  shvi2 = 5 * (svi+v2)
198  shvs3 = 5 * (svs+v6)
199  shvi3 = 5 * (svi+v3)
200  hv1s3i = shvs1 + 3*shvi1
201  hv1i3s = shvi1 + 3*shvs1
202  hv1si = shvs1 + shvi1
203  hv2s3i = shvs2 + 3*shvi2
204  hv2i3s = shvi2 + 3*shvs2
205  hv2si = shvs2 + shvi2
206  hv3s3i = shvs3 + 3*shvi3
207  hv3i3s = shvi3 + 3*shvs3
208  hv3si = shvs3 + shvi3
209 !
210  pxfi=px1*f1+px2*f2+px3*f3
211  pxfs=px1*f4+px2*f5+px3*f6
212  pyfi=py1*f1+py2*f2+py3*f3
213  pyfs=py1*f4+py2*f5+py3*f6
214 !
215  w1(ielem)= pxfi * (hu1s3i+hu1si)
216  & + pyfi * (hv1s3i+hv1si)
217  & + pxfs * (hu1si+hu1i3s)
218  & + pyfs * (hv1si+hv1i3s)
219 !
220  w2(ielem)= pxfi * (hu2s3i+hu2si)
221  & + pyfi * (hv2s3i+hv2si)
222  & + pxfs * (hu2si+hu2i3s)
223  & + pyfs * (hv2si+hv2i3s)
224 !
225  w3(ielem)= pxfi * (hu3s3i+hu3si)
226  & + pyfi * (hv3s3i+hv3si)
227  & + pxfs * (hu3si+hu3i3s)
228  & + pyfs * (hv3si+hv3i3s)
229 !
230  ENDDO ! IELEM
231 !
232 !-----------------------------------------------------------------------
233 !
234  ELSE
235 !
236 !-----------------------------------------------------------------------
237 !
238  WRITE(lu,101) ielmf,sf%NAME
239  WRITE(lu,201) ielmu,su%NAME
240  WRITE(lu,301)
241 101 FORMAT(1x,'VC18PP (BIEF) :',/,
242  & 1x,'DISCRETIZATION OF F:',1i6,
243  & 1x,'REAL NAME: ',a6)
244 201 FORMAT(1x,'DISCRETIZATION OF U:',1i6,
245  & 1x,'REAL NAME: ',a6)
246 301 FORMAT(1x,'CASE NOT IMPLEMENTED')
247  CALL plante(1)
248  stop
249 !
250  ENDIF
251 !
252 !-----------------------------------------------------------------------
253 !
254  RETURN
255  END
subroutine vc18pp(XMUL, SF, SU, SV, F, U, V, X, Y, IKLE1, IKLE2, IKLE3, IKLE4, IKLE5, IKLE6, NELEM, NELMAX, W1, W2, W3)
Definition: vc18pp.f:8
Definition: bief.f:3