The TELEMAC-MASCARET system  trunk
vc16aa.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vc16aa
3 ! *****************
4 !
5  &( xmul,sf,sg,su,sv,f,g,u,v,
6  & xel,yel,surfac,
7  & ikle1,ikle2,ikle3,nelem,nelmax,
8  & w1,w2,w3 )
9 !
10 !***********************************************************************
11 ! BIEF V6P1 21/08/2010
12 !***********************************************************************
13 !
14 !brief COMPUTES THE FOLLOWING VECTOR IN FINITE ELEMENTS:
15 !code
16 !+ / -> --> ->
17 !+ V = XMUL / K GRAD(PSII) * DIV( U ) D(OMEGA)
18 !+ I /OMEGA
19 !+
20 !+
21 !+ PSI(I) IS A BASE OF TYPE P1 TRIANGLE
22 !+ ->
23 !+ U IS A VECTOR WITH COORDINATES U AND V
24 !+ ->
25 !+ K IS A VECTOR WITH COMPONENTS F AND G
26 !
27 !warning THE JACOBIAN MUST BE POSITIVE
28 !warning THE RESULT IS IN W IN NOT ASSEMBLED FORM
29 !
30 !history J-M HERVOUET (LNH)
31 !+ 09/12/94
32 !+ V5P1
33 !+
34 !
35 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
36 !+ 13/07/2010
37 !+ V6P0
38 !+ Translation of French comments within the FORTRAN sources into
39 !+ English comments
40 !
41 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
42 !+ 21/08/2010
43 !+ V6P0
44 !+ Creation of DOXYGEN tags for automated documentation and
45 !+ cross-referencing of the FORTRAN sources
46 !
47 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
48 !| F |-->| FUNCTION USED IN THE VECTOR FORMULA
49 !| G |-->| FUNCTION USED IN THE VECTOR FORMULA
50 !| IKLE1 |-->| FIRST POINT OF TRIANGLES
51 !| IKLE2 |-->| SECOND POINT OF TRIANGLES
52 !| IKLE3 |-->| THIRD POINT OF TRIANGLES
53 !| NELEM |-->| NUMBER OF ELEMENTS
54 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
55 !| SF |-->| BIEF_OBJ STRUCTURE OF F
56 !| SG |-->| BIEF_OBJ STRUCTURE OF G
57 !| SU |-->| BIEF_OBJ STRUCTURE OF U
58 !| SV |-->| BIEF_OBJ STRUCTURE OF V
59 !| SURFAC |-->| AREA OF TRIANGLES
60 !| U |-->| FUNCTION USED IN THE VECTOR FORMULA
61 !| V |-->| FUNCTION USED IN THE VECTOR FORMULA
62 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
63 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
64 !| W3 |<--| RESULT IN NON ASSEMBLED FORM
65 !| XEL |-->| ABSCISSAE OF POINTS IN THE MESH, PER ELEMENT
66 !| XMUL |-->| MULTIPLICATION COEFFICIENT
67 !| YEL |-->| ORDINATES OF POINTS IN THE MESH, PER ELEMENT
68 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
69 !
70  USE bief, ex_vc16aa => vc16aa
71 !
73  IMPLICIT NONE
74 !
75 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
76 !
77  INTEGER, INTENT(IN) :: NELEM,NELMAX
78  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax),IKLE3(nelmax)
79 !
80  DOUBLE PRECISION, INTENT(IN) :: XEL(nelmax,*),YEL(nelmax,*)
81  DOUBLE PRECISION, INTENT(INOUT)::W1(nelmax),W2(nelmax),W3(nelmax)
82  DOUBLE PRECISION, INTENT(IN) :: SURFAC(nelmax)
83  DOUBLE PRECISION, INTENT(IN) :: XMUL
84 !
85 ! STRUCTURES OF F, G, H, U, V, W AND REAL DATA
86 !
87  TYPE(bief_obj), INTENT(IN) :: SF,SG,SU,SV
88  DOUBLE PRECISION, INTENT(IN) :: F(*),G(*),U(*),V(*)
89 !
90 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
91 !
92  INTEGER IELEM,IELMF,IELMU,IELMG,IELMV
93  DOUBLE PRECISION X2,Y2,X3,Y3,U1,U2,U3,V1,V2,V3,FF,GG
94  DOUBLE PRECISION XSUR04,COEF
95 !
96 !-----------------------------------------------------------------------
97 !
98  xsur04 = xmul / 12.d0
99 !
100 !-----------------------------------------------------------------------
101 !
102  ielmf=sf%ELM
103  ielmu=su%ELM
104  ielmg=sg%ELM
105  ielmv=sv%ELM
106 !
107 !-----------------------------------------------------------------------
108 !
109 ! F AND G (NOT CHECKED) ARE P0; U AND V (NOT CHECKED) ARE LINEAR
110 !
111  IF( ielmf.EQ.10.AND.ielmg.EQ.11.
112  & and.ielmu.EQ.11.AND.ielmv.EQ.11 ) THEN
113 !
114  DO ielem = 1 , nelem
115 !
116  x2 = xel(ielem,2)
117  x3 = xel(ielem,3)
118  y2 = yel(ielem,2)
119  y3 = yel(ielem,3)
120 !
121  u1 = u(ikle1(ielem))
122  u2 = u(ikle2(ielem)) - u1
123  u3 = u(ikle3(ielem)) - u1
124  v1 = v(ikle1(ielem))
125  v2 = v(ikle2(ielem)) - v1
126  v3 = v(ikle3(ielem)) - v1
127 !
128 ! U1 AND V1 NOW =0 (ONLY THE GRADIENT OF U IS USED)
129 !
130  coef = (x2*v3-x3*v2-u3*y2+u2*y3) * xsur04 / surfac(ielem)
131 !
132  ff = f(ielem)
133  gg = g(ielem)
134 !
135  w1(ielem) =-( (x2-x3)*gg+(y3-y2)*ff ) * coef
136  w2(ielem) = (-gg*x3+ff*y3) * coef
137  w3(ielem) = -(ff*y2-gg*x2) * coef
138 !
139  ENDDO ! IELEM
140 !
141 !-----------------------------------------------------------------------
142 !
143  ELSE
144 !
145 !-----------------------------------------------------------------------
146 !
147  WRITE(lu,101) ielmf,sf%NAME
148  WRITE(lu,201) ielmu,su%NAME
149  WRITE(lu,301)
150 101 FORMAT(1x,'VC16AA (BIEF) :',/,
151  & 1x,'DISCRETIZATION OF F:',1i6,
152  & 1x,'REAL NAME: ',a6)
153 201 FORMAT(1x,'DISCRETIZATION OF U:',1i6,
154  & 1x,'REAL NAME: ',a6)
155 301 FORMAT(1x,'CASE NOT IMPLEMENTED')
156  CALL plante(0)
157  stop
158 !
159  ENDIF
160 !
161 !-----------------------------------------------------------------------
162 !
163  RETURN
164  END
subroutine vc16aa(XMUL, SF, SG, SU, SV, F, G, U, V, XEL, YEL, SURFAC, IKLE1, IKLE2, IKLE3, NELEM, NELMAX, W1, W2, W3)
Definition: vc16aa.f:10
Definition: bief.f:3