The TELEMAC-MASCARET system  trunk
vc01ff.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vc01ff
3 ! *****************
4 !
5  &(xmul,sf,f,x,y,z,
6  & ikle1,ikle2,ikle3,ikle4,nbor,neleb,nelebx,w1,w2,w3,w4,
7  & nelbor,nulone,nelmax)
8 !
9 !***********************************************************************
10 ! BIEF V6P3 21/08/2010
11 !***********************************************************************
12 !
13 !brief COMPUTES THE FOLLOWING VECTOR IN FINITE ELEMENTS:
14 !code
15 !+ /
16 !+ VEC(I) = XMUL / PSI(I) * F D(OMEGA)
17 !+ /OMEGA
18 !+
19 !+ PSI(I) IS A BASE OF TYPE P1 SEGMENT
20 !+
21 !+ F IS A VECTOR OF TYPE IELMF
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 !+ 05/02/91
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 !history J-M HERVOUET (EDF R&D, LNHE)
44 !+ 11/012013
45 !+ V6P3
46 !+ Last 3 arguments added, use of XEL, YEL instead of XPT,YPT.
47 !
48 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
49 !| F |-->| FUNCTION USED IN THE VECTOR FORMULA
50 !| IKLE1 |-->| FIRST POINT OF QUADRILATERAL
51 !| IKLE2 |-->| SECOND POINT OF QUADRILATERAL
52 !| IKLE3 |-->| THIRD POINT OF QUADRILATERAL
53 !| IKLE4 |-->| FOURTH POINT OF QUADRILATERAL
54 !| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINTS
55 !| NELBOR |-->| ADJACENT ELEMENT NUMBER
56 !| NELEM |-->| NUMBER OF ELEMENTS
57 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
58 !| NULONE |-->| LOCAL NUMBERING OF BOUNDARY ELEMENT IN ADJACENT
59 !| | | ELEMENT.
60 !| SF |-->| BIEF_OBJ STRUCTURE OF F
61 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
62 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
63 !| W3 |<--| RESULT IN NON ASSEMBLED FORM
64 !| W4 |<--| RESULT IN NON ASSEMBLED FORM
65 !| X |-->| ABSCISSAE OF POINTS IN THE MESH
66 !| XMUL |-->| MULTIPLICATION COEFFICIENT
67 !| Y |-->| ORDINATES OF POINTS IN THE MESH
68 !| Z |-->| ELEVATIONS OF POINTS IN THE MESH
69 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
70 !
71  USE bief, ex_vc01ff => vc01ff
72 !
74  IMPLICIT NONE
75 !
76 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
77 !
78  INTEGER, INTENT(IN) :: NELEB,NELEBX,NELMAX
79  INTEGER, INTENT(IN) :: NELBOR(nelebx),NULONE(nelebx,4),NBOR(*)
80  INTEGER, INTENT(IN) :: IKLE1(nelebx),IKLE2(nelebx)
81  INTEGER, INTENT(IN) :: IKLE3(nelebx),IKLE4(nelebx)
82 !
83  DOUBLE PRECISION, INTENT(IN) :: X(nelmax,6),Y(nelmax,6),Z(*)
84  DOUBLE PRECISION, INTENT(INOUT) :: W1(nelebx),W2(nelebx)
85  DOUBLE PRECISION, INTENT(INOUT) :: W3(nelebx),W4(nelebx)
86 !
87 ! STRUCTURE OF F AND REAL DATA
88 !
89  TYPE(bief_obj), INTENT(IN) :: SF
90  DOUBLE PRECISION, INTENT(IN) :: F(*)
91  DOUBLE PRECISION, INTENT(IN) :: XMUL
92 !
93 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
94 !
95  INTEGER IELEM,IELMF,I1,I2,I3,I4,IEL,J1,J2
96  DOUBLE PRECISION XSUR72,H1,H2,HT,AL,F1,F2,F3,F4
97 !
98  INTRINSIC sqrt
99 !
100 !***********************************************************************
101 !
102  ielmf=sf%ELM
103 !
104  xsur72 = xmul/72.d0
105 !
106 !-----------------------------------------------------------------------
107 !
108 ! F IS LINEAR BY BOUNDARY SIDE
109 !
110  IF(ielmf.EQ.71) THEN
111 !
112  DO ielem = 1,neleb
113 !
114  iel=nelbor(ielem)
115 !
116  IF(iel.GT.0) THEN
117 !
118 ! ELEMENT IN THE DOMAIN
119 !
120 ! LOOP ON THE BOUNDARY SIDES
121 !
122 ! GLOBAL NUMBERING OF THE SIDE NODES
123 !
124  i1 = ikle1(ielem)
125  i2 = ikle2(ielem)
126  i3 = ikle3(ielem)
127  i4 = ikle4(ielem)
128 !
129  j1=nulone(ielem,1)
130  j2=nulone(ielem,2)
131  al = sqrt((x(iel,j2)-x(iel,j1))**2
132  & +(y(iel,j2)-y(iel,j1))**2) * xsur72
133 !
134  h1 = z(nbor(i4)) - z(nbor(i1))
135  h2 = z(nbor(i3)) - z(nbor(i2))
136  ht = h1 + h2
137  h1 = h1 + h1 + ht
138  h2 = h2 + h2 + ht
139 !
140  f1 = f(i1) + f(i1) + f(i4)
141  f2 = f(i2) + f(i2) + f(i3)
142  f3 = f(i2) + f(i3) + f(i3)
143  f4 = f(i1) + f(i4) + f(i4)
144 !
145  w1(ielem) = (f1*h1+f2*ht)*al
146  w2(ielem) = (f1*ht+f2*h2)*al
147  w3(ielem) = (f4*ht+f3*h2)*al
148  w4(ielem) = (f4*h1+f3*ht)*al
149 !
150  ELSE
151 !
152 ! ELEMENT NOT IN THE DOMAIN (PARALLELISM)
153 !
154  w1(ielem) = 0.d0
155  w2(ielem) = 0.d0
156  w3(ielem) = 0.d0
157  w4(ielem) = 0.d0
158 !
159  ENDIF
160 !
161  ENDDO ! IELEM
162 !
163 !-----------------------------------------------------------------------
164 !
165  ELSE
166 !
167 !-----------------------------------------------------------------------
168 !
169  WRITE(lu,101) ielmf,sf%NAME
170 101 FORMAT(1x,'VC01FF (BIEF) :',/,
171  & 1x,'DISCRETIZATION OF F NOT AVAILABLE:',1i6,
172  & 1x,'REAL NAME: ',a6)
173  CALL plante(1)
174  stop
175 !
176  ENDIF
177 !
178 !-----------------------------------------------------------------------
179 !
180  RETURN
181  END
subroutine vc01ff(XMUL, SF, F, X, Y, Z, IKLE1, IKLE2, IKLE3, IKLE4, NBOR, NELEB, NELEBX, W1, W2, W3, W4, NELBOR, NULONE, NELMAX)
Definition: vc01ff.f:9
Definition: bief.f:3