The TELEMAC-MASCARET system  trunk
vc00ff.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vc00ff
3 ! *****************
4 !
5  &(xmul,x,y,z,ikle1,ikle2,ikle3,ikle4,nbor,neleb,nelebx,w1,w2,w3,w4,
6  & nelbor,nulone,nelmax)
7 !
8 !***********************************************************************
9 ! BIEF V6P3 21/08/2010
10 !***********************************************************************
11 !
12 !brief COMPUTES THE FOLLOWING VECTOR IN FINITE ELEMENTS:
13 !code
14 !+ /
15 !+ VEC(I) = XMUL / PSI(I) D(OMEGA)
16 !+ /OMEGA
17 !+
18 !+ PSI(I) IS A BASE OF TYPE P1 SEGMENT
19 !+
20 !+ F IS A VECTOR OF TYPE IELMF
21 !
22 !warning THE JACOBIAN MUST BE POSITIVE
23 !warning THE RESULT IS IN W IN NOT ASSEMBLED FORM
24 !
25 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
26 !+ 05/02/91
27 !+ V5P4
28 !+
29 !
30 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
31 !+ 13/07/2010
32 !+ V6P0
33 !+ Translation of French comments within the FORTRAN sources into
34 !+ English comments
35 !
36 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
37 !+ 21/08/2010
38 !+ V6P0
39 !+ Creation of DOXYGEN tags for automated documentation and
40 !+ cross-referencing of the FORTRAN sources
41 !
42 !history J-M HERVOUET (EDF R&D, LNHE)
43 !+ 11/012013
44 !+ V6P3
45 !+ Last 3 arguments added, use of XEL, YEL instead of XPT,YPT.
46 !
47 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
48 !| IKLE1 |-->| FIRST POINT OF QUADRILATERAL
49 !| IKLE2 |-->| SECOND POINT OF QUADRILATERAL
50 !| IKLE3 |-->| THIRD POINT OF QUADRILATERAL
51 !| IKLE4 |-->| FOURTH POINT OF QUADRILATERAL
52 !| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINTS
53 !| NELBOR |-->| ADJACENT ELEMENT NUMBER
54 !| NELEM |-->| NUMBER OF ELEMENTS
55 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
56 !| NULONE |-->| LOCAL NUMBERING OF BOUNDARY ELEMENT IN ADJACENT
57 !| | | ELEMENT.
58 !| W1 |<--| RESULT IN NON ASSEMBLED FORM
59 !| W2 |<--| RESULT IN NON ASSEMBLED FORM
60 !| W3 |<--| RESULT IN NON ASSEMBLED FORM
61 !| W4 |<--| RESULT IN NON ASSEMBLED FORM
62 !| X |-->| ABSCISSAE OF POINTS IN THE MESH, PER ELEMENT
63 !| XMUL |-->| MULTIPLICATION COEFFICIENT
64 !| Y |-->| ORDINATES OF POINTS IN THE MESH, PER ELEMENT
65 !| Z |-->| ELEVATIONS OF POINTS IN THE MESH, PER POINT !!
66 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67 !
69  IMPLICIT NONE
70 !
71 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
72 !
73  INTEGER, INTENT(IN) :: NELEB,NELEBX,NELMAX
74  INTEGER, INTENT(IN) :: NELBOR(nelebx),NULONE(nelebx,4),NBOR(*)
75  INTEGER, INTENT(IN) :: IKLE1(nelebx),IKLE2(nelebx)
76  INTEGER, INTENT(IN) :: IKLE3(nelebx),IKLE4(nelebx)
77 !
78  DOUBLE PRECISION, INTENT(IN) :: X(nelmax,6),Y(nelmax,6),Z(*)
79  DOUBLE PRECISION, INTENT(INOUT) :: W1(nelebx),W2(nelebx)
80  DOUBLE PRECISION, INTENT(INOUT) :: W3(nelebx),W4(nelebx)
81  DOUBLE PRECISION, INTENT(IN) :: XMUL
82 !
83 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
84 !
85  INTEGER IELEM,I1,I2,I3,I4,IEL,J1,J2
86  DOUBLE PRECISION XSUR24,H1,H2,AL
87 !
88  INTRINSIC sqrt
89 !
90 !***********************************************************************
91 !
92 ! NOTE ON PARALLELISM : IN PARALLEL MODE NELEM MAY BE WRONG AS BOUNDARY
93 ! ELEMENTS MAY BE IN ANOTHER SUB-DOMAIN. IN THIS
94 ! CASE WE HAVE I1=I2 AND THUS AL=0.D0, SO WRONG
95 ! ELEMENTS DO NOT CONTRIBUTE.
96 !
97 !***********************************************************************
98 !
99  xsur24 = xmul/24.d0
100 !
101 ! LOOP ON THE BOUNDARY SIDES
102 !
103  DO ielem = 1,neleb
104 !
105  iel=nelbor(ielem)
106 !
107  IF(iel.GT.0) THEN
108 !
109 ! ELEMENT IN THE DOMAIN
110 !
111 ! GLOBAL NUMBERING OF THE SIDE NODES
112 !
113  i1 = ikle1(ielem)
114  i2 = ikle2(ielem)
115  i3 = ikle3(ielem)
116  i4 = ikle4(ielem)
117 !
118  j1=nulone(ielem,1)
119  j2=nulone(ielem,2)
120  al = sqrt((x(iel,j2)-x(iel,j1))**2
121  & +(y(iel,j2)-y(iel,j1))**2) * xsur24
122 !
123  h1 = z(nbor(i4)) - z(nbor(i1))
124  h2 = z(nbor(i3)) - z(nbor(i2))
125 !
126  w1(ielem) = (3.d0*h1+h2)*al
127  w2(ielem) = (3.d0*h2+h1)*al
128  w3(ielem) = (3.d0*h2+h1)*al
129  w4(ielem) = (3.d0*h1+h2)*al
130 !
131  ELSE
132 !
133 ! ELEMENT NOT IN THE DOMAIN (PARALLELISM)
134 !
135  w1(ielem) = 0.d0
136  w2(ielem) = 0.d0
137  w3(ielem) = 0.d0
138  w4(ielem) = 0.d0
139 !
140  ENDIF
141 !
142  ENDDO ! IELEM
143 !
144 !-----------------------------------------------------------------------
145 !
146  RETURN
147  END
subroutine vc00ff(XMUL, X, Y, Z, IKLE1, IKLE2, IKLE3, IKLE4, NBOR, NELEB, NELEBX, W1, W2, W3, W4, NELBOR, NULONE, NELMAX)
Definition: vc00ff.f:8