The TELEMAC-MASCARET system  trunk
vc05oo.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vc05oo
3 ! *****************
4 !
5  &(xmul,su,sv,u,v,xnor,ynor,lgseg,ikle,nbor,nelem,nelmax,w1,w2 )
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief COMPUTES THE FOLLOWING VECTOR IN FINITE ELEMENTS:
12 !code
13 !+ / -> ->
14 !+ VEC(I) = XMUL / PSI(I) * U . N D(OMEGA)
15 !+ /OMEGA
16 !+
17 !+ PSI(I) IS A BASE OF TYPE P1 SEGMENT
18 !+ ->
19 !+ U IS A VECTOR WITH COMPONENTS U AND V
20 !+ ->
21 !+ N IS THE OUTGOING NORMAL VECTOR TO THE ELEMENT
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)
27 !+ 29/05/08
28 !+ V5P9
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 !| IKLE |-->| CONNECTIVITY TABLE
45 !| LGSEG |-->| LENGTH OF SEGMENTS
46 !| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINTS
47 !| NELEM |-->| NUMBER OF ELEMENTS
48 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
49 !| SU |-->| BIEF_OBJ STRUCTURE OF U
50 !| SV |-->| BIEF_OBJ STRUCTURE OF V
51 !| U |-->| FUNCTION USED IN THE VECTOR FORMULA
52 !| V |-->| FUNCTION USED IN THE VECTOR FORMULA
53 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
54 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
55 !| XMUL |-->| MULTIPLICATION COEFFICIENT
56 !| XNOR |-->| FIRST COMPONENT OF NORMAL TO ELEMENT
57 !| YNOR |-->| SECOND COMPONENT OF NORMAL TO ELEMENT
58 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
59 !
60  USE bief, ex_vc05oo => vc05oo
61 !
63  IMPLICIT NONE
64 !
65 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
66 !
67  INTEGER, INTENT(IN) :: NELEM,NELMAX
68  INTEGER, INTENT(IN) :: IKLE(nelmax,*)
69  INTEGER, INTENT(IN) :: NBOR(*)
70 !
71  DOUBLE PRECISION, INTENT(IN) :: XNOR(nelmax),YNOR(nelmax)
72  DOUBLE PRECISION, INTENT(INOUT) :: W1(nelmax),W2(nelmax)
73  DOUBLE PRECISION, INTENT(IN) :: LGSEG(*)
74  DOUBLE PRECISION, INTENT(IN) :: XMUL
75 !
76 ! STRUCTURES OF U, V AND REAL DATA
77 !
78  TYPE(bief_obj) , INTENT(IN) :: SU,SV
79  DOUBLE PRECISION, INTENT(IN) :: U(*),V(*)
80 !
81 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
82 !
83  INTEGER N1,N2,NG1,NG2,IELEM,IELMU,IELMV
84  DOUBLE PRECISION XSUR06,U1,U2,V1,V2,VX1,VY1,VX2,VY2
85 !
86 !-----------------------------------------------------------------------
87 !
88  xsur06 = xmul/6.d0
89 !
90 !-----------------------------------------------------------------------
91 !
92  ielmu=su%ELM
93  ielmv=sv%ELM
94 !
95 !-----------------------------------------------------------------------
96 ! ->
97 ! F AND U LINEAR FUNCTIONS ON TRIANGLES OR QUADRILATERALS
98 !
99  IF( (ielmu.EQ.11.OR.ielmu.EQ.12.OR.ielmu.EQ.21) .AND.
100  & (ielmv.EQ.11.OR.ielmv.EQ.12.OR.ielmv.EQ.21) ) THEN
101 !
102  DO ielem =1,nelem
103 !
104 ! NUMBERING OF THE BOUNDARY NODES
105 !
106 ! GLOBAL NUMBERING
107 !
108  ng1= nbor(ikle(ielem,1))
109  ng2= nbor(ikle(ielem,2))
110 !
111  u1 = u(ng1)
112  u2 = u(ng2)
113  v1 = v(ng1)
114  v2 = v(ng2)
115 !
116 ! DETERMINES THE BASE FUNCTIONS AT THE BOUNDARY:
117 !
118  vx1 = xsur06 * ( u2 + u1 + u1 )
119  vy1 = xsur06 * ( v2 + v1 + v1 )
120  vx2 = xsur06 * ( u1 + u2 + u2 )
121  vy2 = xsur06 * ( v1 + v2 + v2 )
122 !
123  w1(ielem) = lgseg(ielem) * ( vx1*xnor(ielem) + vy1*ynor(ielem) )
124  w2(ielem) = lgseg(ielem) * ( vx2*xnor(ielem) + vy2*ynor(ielem) )
125 !
126  ENDDO
127 !
128 !-----------------------------------------------------------------------
129 ! ->
130 ! U LINEAR FUNCTIONS ON SEGMENTS
131 !
132  ELSEIF(ielmu.EQ.1.AND.ielmv.EQ.1) THEN
133 !
134  DO ielem =1,nelem
135 !
136 ! NUMBERING OF THE BOUNDARY NODES
137 !
138  n1 = ikle(ielem,1)
139  n2 = ikle(ielem,2)
140 !
141 ! GLOBAL NUMBERING
142 !
143  ng1= nbor(n1)
144  ng2= nbor(n2)
145 !
146  u1 = u(n1)
147  u2 = u(n2)
148  v1 = v(n1)
149  v2 = v(n2)
150 !
151 ! DETERMINES THE BASE FUNCTIONS AT THE BOUNDARY:
152 !
153  vx1 = xsur06 * ( u2 + u1 + u1 )
154  vy1 = xsur06 * ( v2 + v1 + v1 )
155  vx2 = xsur06 * ( u1 + u2 + u2 )
156  vy2 = xsur06 * ( v1 + v2 + v2 )
157 !
158  w1(ielem) = lgseg(ielem) * ( vx1*xnor(ielem) + vy1*ynor(ielem) )
159  w2(ielem) = lgseg(ielem) * ( vx2*xnor(ielem) + vy2*ynor(ielem) )
160 !
161  ENDDO
162 !
163 !-----------------------------------------------------------------------
164 !
165  ELSE
166 !
167 !-----------------------------------------------------------------------
168 !
169  WRITE(lu,110)
170  WRITE(lu,112) ielmu,su%NAME
171  WRITE(lu,113) ielmv,sv%NAME
172  WRITE(lu,114)
173 110 FORMAT(1x,'VC05OO (BIEF):')
174 112 FORMAT(1x,'DISCRETIZATION OF U:',1i6,
175  & 1x,'REAL NAME: ',a6)
176 113 FORMAT(1x,'DISCRETIZATION OF V:',1i6,
177  & 1x,'REAL NAME: ',a6)
178 114 FORMAT(1x,'CASE NOT IMPLEMENTED')
179  CALL plante(1)
180  stop
181 !
182  ENDIF
183 !
184 !-----------------------------------------------------------------------
185 !
186  RETURN
187  END
subroutine vc05oo(XMUL, SU, SV, U, V, XNOR, YNOR, LGSEG, IKLE, NBOR, NELEM, NELMAX, W1, W2)
Definition: vc05oo.f:7
Definition: bief.f:3