The TELEMAC-MASCARET system  trunk
mt08pp.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE mt08pp
3 ! *****************
4 !
5  &( t,xm,xmul,sf,f,surfac,ikle,nelem,nelmax)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief COMPUTES THE COEFFICIENTS OF THE FOLLOWING MATRIX:
12 !code
13 !+
14 !+ / D
15 !+ A(I,J)=-XMUL / PSI2(J) * F * --( PSI1(I) ) D(OMEGA)
16 !+ /OMEGA DX
17 !+
18 !+ BEWARE THE MINUS SIGN !!
19 !+
20 !+ PSI1 AND PSI2: BASES OF TYPE P1 PRISM
21 !
22 !warning THE JACOBIAN MUST BE POSITIVE
23 !warning NEED TO CHECK THE SIGN; SEE USE IN DIFF3D!!!!!!!!!!!!!!!!
24 !
25 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
26 !+ 28/11/94
27 !+ V5P9
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 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43 !| F |-->| FUNCTION USED IN THE FORMULA
44 !| FORMUL |-->| FORMULA DESCRIBING THE RESULTING MATRIX
45 !| IKLE |-->| CONNECTIVITY TABLE.
46 !| NELEM |-->| NUMBER OF ELEMENTS
47 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
48 !| SF |-->| STRUCTURE OF FUNCTIONS F
49 !| SURFAC |-->| AREA OF 2D ELEMENTS
50 !| T |<->| WORK ARRAY FOR ELEMENT BY ELEMENT DIAGONAL
51 !| Z |-->| ELEVATIONS OF POINTS
52 !| XM |<->| OFF-DIAGONAL TERMS
53 !| XMUL |-->| COEFFICIENT FOR MULTIPLICATION
54 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
55 !
56  USE bief, ex_mt08pp => mt08pp
57 !
59  IMPLICIT NONE
60 !
61 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
62 !
63  INTEGER, INTENT(IN) :: NELEM,NELMAX
64  INTEGER, INTENT(IN) :: IKLE(nelmax,6)
65 !
66  DOUBLE PRECISION, INTENT(INOUT) :: T(nelmax,6),XM(nelmax,30)
67 !
68  DOUBLE PRECISION, INTENT(IN) :: XMUL
69  DOUBLE PRECISION, INTENT(IN) :: F(*)
70 !
71 ! STRUCTURE OF F
72 !
73  TYPE(bief_obj), INTENT(IN) :: SF
74 !
75  DOUBLE PRECISION, INTENT(IN) :: SURFAC(nelmax)
76 !
77 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
78 !
79 ! DECLARATIONS SPECIFIC TO THIS SUBROUTINE
80 !
81  DOUBLE PRECISION PZ1,XSU360
82  DOUBLE PRECISION Q1,Q2,Q3,Q4,Q5,Q6
83  DOUBLE PRECISION W14,W41,W25,W52,W63,W36
84 !
85  INTEGER I1,I2,I3,I4,I5,I6,IELEM
86 !
87 !**********************************************************************
88 !
89  xsu360 = xmul/360.d0
90 !
91  IF(sf%ELM.NE.41) THEN
92  WRITE(lu,1001) sf%ELM
93 1001 FORMAT(1x,'MT08PP (BIEF) : TYPE OF F NOT IMPLEMENTED: ',i6)
94  CALL plante(1)
95  stop
96  ENDIF
97 !
98 ! LOOP ON THE ELEMENTS
99 !
100  DO ielem=1,nelem
101 !
102  i1 = ikle(ielem,1)
103  i2 = ikle(ielem,2)
104  i3 = ikle(ielem,3)
105  i4 = ikle(ielem,4)
106  i5 = ikle(ielem,5)
107  i6 = ikle(ielem,6)
108 !
109  q1 = f(i1)
110  q2 = f(i2)
111  q3 = f(i3)
112  q4 = f(i4)
113  q5 = f(i5)
114  q6 = f(i6)
115 !
116 ! INTERMEDIATE COMPUTATIONS
117 !
118  pz1=-xsu360*surfac(ielem)
119 !
120  w14 = q1+2*q4
121  w41 = q4+2*q1
122  w25 = q2+2*q5
123  w52 = q5+2*q2
124  w63 = q6+2*q3
125  w36 = q3+2*q6
126 !
127  t(ielem,1)=pz1*2*(3*w41+w52+w63)
128  xm(ielem,18)=-t(ielem,1)
129  xm(ielem,16)=pz1*(2*(w41+w52)+w63)
130  xm(ielem,19)=-xm(ielem,16)
131  xm(ielem,1) = xm(ielem,16)
132  xm(ielem,22)=-xm(ielem,16)
133  xm(ielem,2)=pz1*(2*(w41+w63)+w52)
134  xm(ielem,20)=-xm(ielem,2)
135  xm(ielem,17)= xm(ielem,2)
136  xm(ielem,25)=-xm(ielem,2)
137  t(ielem,2)=pz1*2*(w41+3*w52+w63)
138  xm(ielem,23)= -t(ielem,2)
139  xm(ielem,21)=pz1*(2*(w52+w63)+w41)
140  xm(ielem,24)=-xm(ielem,21)
141  xm(ielem,6) = xm(ielem,21)
142  xm(ielem,26)=-xm(ielem,21)
143  t(ielem,3)=pz1*2*(w41+w52+3*w63)
144  xm(ielem,27)=-t(ielem,3)
145  xm(ielem,3)=pz1*2*(3*w14+w25+w36)
146  t(ielem,4)=-xm(ielem,3)
147  xm(ielem,7)=pz1*(2*(w14+w25)+w36)
148  xm(ielem,28)=-xm(ielem,7)
149  xm(ielem,4) = xm(ielem,7)
150  xm(ielem,13)=-xm(ielem,7)
151  xm(ielem,10)=pz1*(2*(w14+w36)+w25)
152  xm(ielem,29)=-xm(ielem,10)
153  xm(ielem,5) = xm(ielem,10)
154  xm(ielem,14)=-xm(ielem,10)
155  xm(ielem,8)=pz1*2*(w14+3*w25+w36)
156  t(ielem,5)=-xm(ielem,8)
157  xm(ielem,11)=pz1*(2*(w25+w36)+w14)
158  xm(ielem,30)=-xm(ielem,11)
159  xm(ielem,9) = xm(ielem,11)
160  xm(ielem,15)=-xm(ielem,11)
161  xm(ielem,12)=pz1*2*(w14+w25+3*w36)
162  t(ielem,6)=-xm(ielem,12)
163 !
164  ENDDO
165 !
166 !-----------------------------------------------------------------------
167 !
168  RETURN
169  END
subroutine mt08pp(T, XM, XMUL, SF, F, SURFAC, IKLE, NELEM, NELMAX)
Definition: mt08pp.f:7
Definition: bief.f:3