The TELEMAC-MASCARET system  trunk
vc03aa.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vc03aa
3 ! *****************
4 !
5  &(xmul,sf,sg,sh,su,sv,f,g,h,u,v,xel,yel,surfac,
6  & ikle1,ikle2,ikle3,nelem,nelmax,w1,w2,w3 )
7 !
8 !***********************************************************************
9 ! BIEF V6P1 21/08/2010
10 !***********************************************************************
11 !
12 !brief COMPUTES THE FOLLOWING VECTOR IN FINITE ELEMENTS:
13 !code
14 !+ / DF DF
15 !+ V = XMUL / K GRAD(PSII) * ( U -- + V -- ) D(OMEGA)
16 !+ I /OMEGA DX DY
17 !+
18 !+ PSI(I) IS A BASE OF TYPE P1 TRIANGLE
19 !+
20 !+ F, U AND V ARE VECTORS
21 !+ K IS A VECTOR WITH COMPONENTS G AND H
22 !
23 !warning THE JACOBIAN MUST BE POSITIVE
24 !warning THE RESULT IS IN W IN NOT ASSEMBLED FORM
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 !| G |-->| FUNCTION USED IN THE VECTOR FORMULA
46 !| H |-->| FUNCTION USED IN THE VECTOR FORMULA
47 !| IKLE1 |-->| FIRST POINT OF TRIANGLES
48 !| IKLE2 |-->| SECOND POINT OF TRIANGLES
49 !| IKLE3 |-->| THIRD POINT OF TRIANGLES
50 !| NELEM |-->| NUMBER OF ELEMENTS
51 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
52 !| SF |-->| BIEF_OBJ STRUCTURE OF F
53 !| SG |-->| BIEF_OBJ STRUCTURE OF G
54 !| SH |-->| BIEF_OBJ STRUCTURE OF H
55 !| SU |-->| BIEF_OBJ STRUCTURE OF U
56 !| SV |-->| BIEF_OBJ STRUCTURE OF V
57 !| SURFAC |-->| AREA OF TRIANGLES
58 !| U |-->| FUNCTION USED IN THE VECTOR FORMULA
59 !| V |-->| FUNCTION USED IN THE VECTOR FORMULA
60 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
61 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
62 !| W3 |<--| RESULT IN NON ASSEMBLED FORM
63 !| XEL |-->| ABSCISSAE OF POINTS IN THE MESH, PER ELEMENT
64 !| XMUL |-->| MULTIPLICATION COEFFICIENT
65 !| YEL |-->| ORDINATES OF POINTS IN THE MESH, PER ELEMENT
66 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67 !
68  USE bief, ex_vc03aa => vc03aa
69 !
71  IMPLICIT NONE
72 !
73 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
74 !
75  INTEGER, INTENT(IN) :: NELEM,NELMAX
76  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax),IKLE3(nelmax)
77 !
78  DOUBLE PRECISION, INTENT(IN) :: XEL(nelmax,*),YEL(nelmax,*)
79  DOUBLE PRECISION, INTENT(INOUT):: W1(nelmax),W2(nelmax),W3(nelmax)
80  DOUBLE PRECISION, INTENT(IN) :: SURFAC(nelmax)
81  DOUBLE PRECISION, INTENT(IN) :: XMUL
82 !
83 ! STRUCTURES OF F, G, H, U, V AND REAL DATA
84 !
85  TYPE(bief_obj), INTENT(IN) :: SF,SG,SH,SU,SV
86  DOUBLE PRECISION, INTENT(IN) :: F(*),G(*),H(*),U(*),V(*)
87 !
88 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
89 !
90  INTEGER IELEM,IELMF,IELMG,IELMU,IELMV,IELMH
91  DOUBLE PRECISION X2,Y2,X3,Y3,F1,F2,F3,U123,V123
92  DOUBLE PRECISION WX1,WX2,WX3,WY1,WY2,WY3,XSUR12,COEF
93 !
94 !-----------------------------------------------------------------------
95 !
96  xsur12 = xmul / 12.d0
97 !
98 !-----------------------------------------------------------------------
99 !
100  ielmf=sf%ELM
101  ielmg=sg%ELM
102  ielmu=su%ELM
103  ielmv=sv%ELM
104  ielmh=sh%ELM
105 !
106 !-----------------------------------------------------------------------
107 !
108 ! F IS LINEAR; G AND H P0; AND U, V LINEAR
109 !
110  IF( ielmf.EQ.11
111  & .AND.ielmg.EQ.10
112  & .AND.ielmh.EQ.10
113  & .AND.ielmu.EQ.11
114  & .AND.ielmv.EQ.11 ) THEN
115 !
116  DO ielem = 1 , nelem
117 !
118  x2 = xel(ielem,2)
119  x3 = xel(ielem,3)
120  y2 = yel(ielem,2)
121  y3 = yel(ielem,3)
122 !
123  f1 = f(ikle1(ielem))
124  f2 = f(ikle2(ielem)) - f1
125  f3 = f(ikle3(ielem)) - f1
126 !
127 ! F1 NOW =0 (ONLY THE GRADIENT OF F IS USED)
128 !
129  u123 = u(ikle1(ielem)) + u(ikle2(ielem)) + u(ikle3(ielem))
130  v123 = v(ikle1(ielem)) + v(ikle2(ielem)) + v(ikle3(ielem))
131 !
132  wx1 = ( - f2*x3*y2 + f2*x3*y3 + f3*x2*y2 - f3*x2*y3 ) * v123
133  & + ( + f2*y2*y3 - f2*y3*y3 - f3*y2*y2 + f3*y2*y3 ) * u123
134 !
135  wy1 = ( f2*x2*x3 - f3*x2*x2 - f2*x3*x3 + f3*x2*x3 ) * v123
136  & + ( - f2*x2*y3 + f2*x3*y3 + f3*x2*y2 - f3*x3*y2 ) * u123
137 !
138  wx2 = y3 * ( (f3*x2-f2*x3) * v123 + (f2*y3-f3*y2) * u123 )
139 !
140  wy2 = x3 * ( (f2*x3-f3*x2) * v123 + (f3*y2-f2*y3) * u123 )
141 !
142  wx3 = y2 * ( (f2*x3-f3*x2) * v123 + (f3*y2-f2*y3) * u123 )
143 !
144  wy3 = x2 * ( (f3*x2-f2*x3) * v123 + (f2*y3-f3*y2) * u123 )
145 !
146  coef = xsur12 / surfac(ielem)
147 !
148  w1(ielem) = ( wx1*g(ielem) + wy1*h(ielem) ) * coef
149  w2(ielem) = ( wx2*g(ielem) + wy2*h(ielem) ) * coef
150  w3(ielem) = ( wx3*g(ielem) + wy3*h(ielem) ) * coef
151 !
152  ENDDO ! IELEM
153 !
154 !-----------------------------------------------------------------------
155 !
156  ELSE
157 !
158 !-----------------------------------------------------------------------
159 !
160  WRITE(lu,101) ielmf,sf%NAME
161  WRITE(lu,111) ielmg,sg%NAME
162  WRITE(lu,201) ielmu,su%NAME
163  WRITE(lu,301)
164 101 FORMAT(1x,'VC03AA (BIEF) :',/,
165  & 1x,'DISCRETIZATION OF F:',1i6,
166  & 1x,'REAL NAME: ',a6)
167 111 FORMAT(1x,'DISCRETIZATION OF G:',1i6,
168  & 1x,'REAL NAME: ',a6)
169 201 FORMAT(1x,'DISCRETIZATION OF U:',1i6,
170  & 1x,'REAL NAME: ',a6)
171 301 FORMAT(1x,'CASE NOT IMPLEMENTED')
172  CALL plante(0)
173  stop
174 !
175  ENDIF
176 !
177 !-----------------------------------------------------------------------
178 !
179  RETURN
180  END
subroutine vc03aa(XMUL, SF, SG, SH, SU, SV, F, G, H, U, V, XEL, YEL, SURFAC, IKLE1, IKLE2, IKLE3, NELEM, NELMAX, W1, W2, W3)
Definition: vc03aa.f:8
Definition: bief.f:3