The TELEMAC-MASCARET system  trunk
mt01pp.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE mt01pp
3 ! *****************
4 !
5  &( t,xm,xmul,z,surfac,ikle,nelem,nelmax)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief BUILDS THE MASS MATRIX FOR P1 PRISMS.
12 !code
13 !+ COMPUTES THE COEFFICIENTS OF THE FOLLOWING MATRIX:
14 !+
15 !+ /
16 !+ A = XMUL / (P *P )*J(X,Y) DXDY
17 !+ I J /S I J
18 !+
19 !+ BY ELEMENTARY CELL (REAL MESH)
20 !+
21 !+ J(X,Y) : JACOBIAN OF THE ISOPARAMETRIC TRANSFORMATION
22 !
23 !warning THE JACOBIAN MUST BE POSITIVE
24 !
25 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
26 !+ 21/05/2010
27 !+ V6P0
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 U.H.MErkel
43 !+ 18/07/2012
44 !+ V6P2
45 !+ Replaced EPSILON with CHOUIA due to nag compiler problems
46 !
47 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
48 !| IKLE |-->| CONNECTIVITY TABLE.
49 !| NELEM |-->| NUMBER OF ELEMENTS
50 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
51 !| SURFAC |-->| AREA OF TRIANGLES
52 !| T |<--| NON ASSEMBLED DIAGONAL
53 !| XM |<--| NON ASSEMBLED OFF-DIAGONAL TERMS
54 !| XMUL |-->| MULTIPLICATION FACTOR
55 !| Z |-->| ELEVATIONS OF POINTS IN THE MESH
56 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
57 !
58  USE bief, ex_mt01pp => mt01pp
59 !
61  IMPLICIT NONE
62 !
63 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
64 !
65  INTEGER, INTENT(IN) :: NELEM,NELMAX
66  INTEGER, INTENT(IN) :: IKLE(nelmax,6)
67  DOUBLE PRECISION, INTENT(INOUT) :: T(nelmax,6),XM(nelmax,30)
68  DOUBLE PRECISION, INTENT(IN) :: XMUL,Z(*),SURFAC(nelmax)
69 !
70 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
71 !
72 ! DECLARATIONS SPECIFIC TO THIS SUBROUTINE
73 !
74  INTEGER IELEM
75  DOUBLE PRECISION SUR360,COEF,H1,H2,H3,HT
76 !
77  DOUBLE PRECISION, PARAMETER :: CHOUIA = 1.d-3
78 !
79 !-----------------------------------------------------------------------
80 !
81  sur360 = xmul / 360.d0
82 !
83 ! LOOP ON THE ELEMENTS
84 !
85  DO ielem = 1,nelem
86 !
87  coef = surfac(ielem) * sur360
88 !
89 ! TREATS HERE THE DRY ZONES
90 !
91  h1 = max(z(ikle(ielem,4)) - z(ikle(ielem,1)),chouia) * coef
92  h2 = max(z(ikle(ielem,5)) - z(ikle(ielem,2)),chouia) * coef
93  h3 = max(z(ikle(ielem,6)) - z(ikle(ielem,3)),chouia) * coef
94  ht = h1 + h2 + h3
95 !
96 !-----------------------------------------------------------------------
97 !
98 ! EXTRA-DIAGONAL TERMS
99 !
100  xm(ielem,4) = h1 + h2 + ht
101  xm(ielem,5) = h1 + h3 + ht
102  xm(ielem,9) = h2 + h3 + ht
103  xm(ielem,7) = xm(ielem,4)
104  xm(ielem,10) = xm(ielem,5)
105  xm(ielem,11) = xm(ielem,9)
106 !
107  xm(ielem,3) = 4*h1 + ht + ht
108  xm(ielem,8) = 4*h2 + ht + ht
109  xm(ielem,12) = 4*h3 + ht + ht
110 !
111  xm(ielem,1) = xm(ielem,4) + xm(ielem,4)
112  xm(ielem,2) = xm(ielem,5) + xm(ielem,5)
113  xm(ielem,6) = xm(ielem,9) + xm(ielem,9)
114  xm(ielem,13) = xm(ielem,1)
115  xm(ielem,14) = xm(ielem,2)
116  xm(ielem,15) = xm(ielem,6)
117 !
118 ! DIAGONAL TERMS
119 !
120  t(ielem,1) = xm(ielem,3) + xm(ielem,3)
121  t(ielem,2) = xm(ielem,8) + xm(ielem,8)
122  t(ielem,3) = xm(ielem,12) + xm(ielem,12)
123  t(ielem,4) = t(ielem,1)
124  t(ielem,5) = t(ielem,2)
125  t(ielem,6) = t(ielem,3)
126 !
127 ! END OF THE LOOP ON THE ELEMENTS
128 !
129  ENDDO ! IELEM
130 !
131 !-----------------------------------------------------------------------
132 !
133  RETURN
134  END
subroutine mt01pp(T, XM, XMUL, Z, SURFAC, IKLE, NELEM, NELMAX)
Definition: mt01pp.f:7
Definition: bief.f:3