The TELEMAC-MASCARET system  trunk
kspg11.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE kspg11
3 ! *****************
4 !
5  &(kx,ky,xel,yel,u,v,ikle,nelem,nelmax,xmul)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief COMPUTES A VECTOR, USED BY THE METHOD:
12 !+ STREAMLINE UPWIND PETROV GALERKIN (SUPG)
13 !+ WITH AN OFF-CENTERING OF 1.
14 !code
15 !+ DX U
16 !+ KX = -----------
17 !+ 2 NORM(U)
18 !+
19 !+ DY V
20 !+ KY = -----------
21 !+ 2 NORM(U)
22 !
23 !code
24 !+ MEANING OF IELM :
25 !+
26 !+ TYPE OF ELEMENT NUMBER OF POINTS CODED IN THIS SUBROUTINE
27 !+
28 !+ 11 : P1 TRIANGLE 3 YES
29 !+ 12 : P2 TRIANGLE 6
30 !+ 21 : Q1 QUADRILATERAL 4 YES
31 !+ 41 : TELEMAC-3D PRISMS 6
32 !
33 !history J-M HERVOUET (LNH)
34 !+ 08/12/94
35 !+ V5P1
36 !+
37 !
38 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
39 !+ 13/07/2010
40 !+ V6P0
41 !+ Translation of French comments within the FORTRAN sources into
42 !+ English comments
43 !
44 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
45 !+ 21/08/2010
46 !+ V6P0
47 !+ Creation of DOXYGEN tags for automated documentation and
48 !+ cross-referencing of the FORTRAN sources
49 !
50 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
51 !| IKLE |-->| CONNECTIVITY TABLE.
52 !| KX |-->| FIRST COMPONENT OF RESULTING VECTOR
53 !| KY |-->| SECOND COMPONENT OF RESULTING VECTOR
54 !| NELEM |-->| NUMBER OF ELEMENTS
55 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
56 !| U |-->| FIRST COMPONENT OF VELOCITY
57 !| V |-->| SECOND COMPONENT OF VELOCITY
58 !| XMUL |-->| MULTIPLICATION COEFICIENT
59 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60 !
62  IMPLICIT NONE
63 !
64 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
65 !
66  INTEGER, INTENT(IN) :: NELEM,NELMAX
67  INTEGER, INTENT(IN) :: IKLE(nelmax,*)
68  DOUBLE PRECISION, INTENT(INOUT) :: KX(nelem),KY(nelem)
69  DOUBLE PRECISION, INTENT(IN) :: U(*),V(*),XMUL
70  DOUBLE PRECISION, INTENT(IN) :: XEL(nelmax,*),YEL(nelmax,*)
71 !
72 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
73 !
74  INTEGER IELEM,I1,I2,I3
75 !
76  DOUBLE PRECISION UMOY,VMOY,H,SUNORM,X2,X3,Y2,Y3
77  DOUBLE PRECISION SURFAC,GP1X,GP1Y,GP2X,GP2Y,GP3X,GP3Y
78  DOUBLE PRECISION A1,A2,A3,H1,H2,H3,C1,C2,C3,UNORM,VNORM
79 !
80  INTRINSIC max,sqrt
81 !
82 !-----------------------------------------------------------------------
83 !
84  DO ielem = 1 , nelem
85 !
86  i1 = ikle(ielem,1)
87  i2 = ikle(ielem,2)
88  i3 = ikle(ielem,3)
89 !
90  x2 = xel(ielem,2)
91  x3 = xel(ielem,3)
92  y2 = yel(ielem,2)
93  y3 = yel(ielem,3)
94 !
95  gp1x = y2-y3
96  gp1y = x3-x2
97  sunorm = 1.d0 / sqrt(gp1x**2+gp1y**2)
98  gp1x = gp1x * sunorm
99  gp1y = gp1y * sunorm
100 !
101  gp2x = y3
102  gp2y = -x3
103  sunorm = 1.d0 / sqrt(gp2x**2+gp2y**2)
104  gp2x = gp2x * sunorm
105  gp2y = gp2y * sunorm
106 !
107  gp3x = -y2
108  gp3y = x2
109  sunorm = 1.d0 / sqrt(gp3x**2+gp3y**2)
110  gp3x = gp3x * sunorm
111  gp3y = gp3y * sunorm
112 !
113  c3 = sqrt( x2**2 + y2**2 )
114  c1 = sqrt( (x3-x2)**2 + (y3-y2)**2 )
115  c2 = sqrt( x3**2 + y3**2 )
116 !
117  surfac = 0.5d0 * (x2*y3 - x3*y2)
118 !
119  h1 = 2*surfac/c1
120  h2 = 2*surfac/c2
121  h3 = 2*surfac/c3
122 !
123  h = max(h1,h2,h3)
124 !
125  umoy = u(i1) + u(i2) + u(i3)
126  vmoy = v(i1) + v(i2) + v(i3)
127 !
128  sunorm = 1.d0 / max( sqrt(umoy**2+vmoy**2) , 1.d-10 )
129 !
130  unorm = umoy * sunorm
131  vnorm = vmoy * sunorm
132 !
133  a1 = gp1x * unorm + gp1y * vnorm
134  a2 = gp2x * unorm + gp2y * vnorm
135  a3 = gp3x * unorm + gp3y * vnorm
136 !
137  IF(a1*h.GT.h1) h = h1
138  IF(a2*h.GT.h2) h = h2
139  IF(a3*h.GT.h3) h = h3
140 !
141  kx(ielem) = 0.33333333d0 * xmul * h * unorm
142  ky(ielem) = 0.33333333d0 * xmul * h * vnorm
143 !
144  ENDDO ! IELEM
145 !
146 !-----------------------------------------------------------------------
147 !
148  RETURN
149  END
subroutine kspg11(KX, KY, XEL, YEL, U, V, IKLE, NELEM, NELMAX, XMUL)
Definition: kspg11.f:7