The TELEMAC-MASCARET system  trunk
mt06oc.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE mt06oc
3 ! *****************
4 !
5  &(a11,a12,a13,a22,a23,a33,
6  & xmul,sf,f,lgseg,ikle1,ikle2,ikle3,nbor,nelem,nelmax)
7 !
8 !***********************************************************************
9 ! BIEF V6P1 21/08/2010
10 !***********************************************************************
11 !
12 !brief COMPUTES THE COEFFICIENTS OF THE FOLLOWING MATRIX:
13 !code
14 !+ /
15 !+ A = / F (P *P )*J(X,Y) DX
16 !+ I J /L I J
17 !+
18 !+ BY ELEMENTARY CELL; THE ELEMENT IS THE P2 SEGMENT
19 !+
20 !+ J(X,Y): JACOBIAN OF THE ISOPARAMETRIC TRANSFORMATION
21 !
22 !warning THE JACOBIAN MUST BE POSITIVE
23 !
24 !history A FROEHLY (MATMECA)
25 !+ 01/07/08
26 !+ V5P9
27 !+
28 !
29 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
30 !+ 13/07/2010
31 !+ V6P0
32 !+ Translation of French comments within the FORTRAN sources into
33 !+ English comments
34 !
35 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
36 !+ 21/08/2010
37 !+ V6P0
38 !+ Creation of DOXYGEN tags for automated documentation and
39 !+ cross-referencing of the FORTRAN sources
40 !
41 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42 !| A11 |<--| ELEMENTS OF MATRIX
43 !| A12 |<--| ELEMENTS OF MATRIX
44 !| A13 |<--| ELEMENTS OF MATRIX
45 !| A22 |<--| ELEMENTS OF MATRIX
46 !| A23 |<--| ELEMENTS OF MATRIX
47 !| A33 |<--| ELEMENTS OF MATRIX
48 !| F |-->| FUNCTION F USED IN THE FORMULA
49 !| IKLE1 |-->| FIRST POINTS OF SEGMENTS
50 !| IKLE2 |-->| SECOND POINTS OF SEGMENTS
51 !| IKLE3 |-->| THIRD POINTS OF SEGMENTS (QUADRATIC)
52 !| LGSEG |-->| LENGTH OF SEGMENTS
53 !| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINTS
54 !| NELEM |-->| NUMBER OF ELEMENTS
55 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
56 !| SF |-->| BIEF_OBJ STRUCTURE OF F
57 !| SURFAC |-->| AREA OF TRIANGLES
58 !| XMUL |-->| MULTIPLICATION FACTOR
59 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60 !
61  USE bief!, EX_MT06OC => MT06OC
62 !
64  IMPLICIT NONE
65 !
66 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
67 !
68  INTEGER, INTENT(IN) :: NELEM,NELMAX,NBOR(nelmax,*)
69  INTEGER, INTENT(IN) :: IKLE1(*),IKLE2(*),IKLE3(*)
70 !
71  DOUBLE PRECISION, INTENT(IN) :: XMUL
72 !
73  DOUBLE PRECISION, INTENT(IN) :: F(*)
74 !
75 ! STRUCTURE OF F
76  TYPE(bief_obj), INTENT(IN) :: SF
77 !
78  DOUBLE PRECISION, INTENT(IN) :: LGSEG(nelmax)
79  DOUBLE PRECISION, INTENT(INOUT) :: A11(nelmax),A12(nelmax)
80  DOUBLE PRECISION, INTENT(INOUT) :: A13(nelmax),A22(nelmax)
81  DOUBLE PRECISION, INTENT(INOUT) :: A23(nelmax),A33(nelmax)
82 !
83 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
84 !
85  INTEGER IELEM,IELMF
86  DOUBLE PRECISION SUR30,SUR60,SUR420,DET1,F1,F2,F3
87 !
88 !-----------------------------------------------------------------------
89 !
90  sur30 = xmul/30.d0
91  sur60 = xmul/60.d0
92  sur420 = xmul/420.d0
93 !
94 !-----------------------------------------------------------------------
95 !
96  ielmf = sf%ELM
97 !
98 ! F CONSTANT BY SEGMENT, IN A BOUNDARY ARRAY
99 !
100  IF(ielmf.EQ.0) THEN
101 !
102  DO ielem = 1 , nelem
103  f1 = f(ielem)
104  det1 = lgseg(ielem) * sur30
105 !
106  a11(ielem) = det1 * (4.d0*f1)
107  a12(ielem) = det1 * (-f1)
108  a13(ielem) = det1 * (2.d0*f1)
109  a22(ielem) = a11(ielem)
110  a23(ielem) = a13(ielem)
111  a33(ielem) = det1 * (16.d0*f1)
112 !
113  ENDDO ! IELEM
114 !
115 ! F LINEAR BY SEGMENT, IN A BOUNDARY ARRAY
116 ! NOTE: IKLE IS HERE A BOUNDARY IKLE
117 !
118  ELSEIF(ielmf.EQ.1) THEN
119 !
120  DO ielem = 1 , nelem
121 !
122  f1 = f(ikle1(ielem))
123  f2 = f(ikle2(ielem))
124 !
125  det1 = lgseg(ielem) * sur60
126 !
127  a11(ielem) = det1 * (7.d0*f1+f2)
128  a12(ielem) = det1 * (-f1-f2)
129  a13(ielem) = det1 * (4.d0*f1)
130  a22(ielem) = det1 * (f1+7.d0*f2)
131  a23(ielem) = det1 * (4.d0*f2)
132  a33(ielem) = det1 * 16.d0 * (f1+f2)
133 !
134  ENDDO ! IELEM
135 !
136 ! F LINEAR, IN AN ARRAY DEFINED ON THE DOMAIN
137 !
138  ELSEIF(ielmf.EQ.11.OR.ielmf.EQ.21) THEN
139 !
140  DO ielem = 1 , nelem
141 !
142  f1 = f(nbor(ielem,1))
143  f2 = f(nbor(ielem,2))
144 !
145  det1 = lgseg(ielem) * sur60
146 !
147  a11(ielem) = det1 * (7.d0*f1+f2)
148  a12(ielem) = det1 * (-f1-f2)
149  a13(ielem) = det1 * (4.d0*f1)
150  a22(ielem) = det1 * (f1+7.d0*f2)
151  a23(ielem) = det1 * (4.d0*f2)
152  a33(ielem) = det1 * 16.d0 * (f1+f2)
153 !
154  ENDDO ! IELEM
155 !
156 ! F QUADRATIC BY SEGMENT, IN A BOUNDARY ARRAY
157 ! NOTE: IKLE IS HERE A BOUNDARY IKLE
158 !
159  ELSEIF(ielmf.EQ.2) THEN
160 !
161  DO ielem = 1 , nelem
162 !
163  f1 = f(ikle1(ielem))
164  f2 = f(ikle2(ielem))
165  f3 = f(ikle3(ielem))
166  det1 = lgseg(ielem) * sur420
167 !
168  a11(ielem) = det1 * (39.d0*f1-3.d0*f2+20.d0*f3)
169  a12(ielem) = det1 * (-3.d0*f1-3.d0*f2-8.d0*f3)
170  a13(ielem) = det1 * (20.d0*f1-8.d0*f2+16.d0*f3)
171  a22(ielem) = det1 * (-3.d0*f1+39.d0*f2+20.d0*f3)
172  a23(ielem) = det1 * (-8.d0*f1+20.d0*f2+16.d0*f3)
173  a33(ielem) = det1 * 16.d0 * (f1+f2+12.d0*f3)
174 !
175  ENDDO ! IELEM
176 !
177 ! F QUADRATIC, IN AN ARRAY DEFINED ON THE DOMAIN
178 !
179  ELSEIF(ielmf.EQ.13) THEN
180 !
181  DO ielem = 1 , nelem
182 !
183  f1 = f(nbor(ielem,1))
184  f2 = f(nbor(ielem,2))
185  f3 = f(nbor(ielem,3))
186 !
187  det1 = lgseg(ielem) * sur420
188 !
189  a11(ielem) = det1 * (39.d0*f1-3.d0*f2+20.d0*f3)
190  a12(ielem) = det1 * (-3.d0*f1-3.d0*f2-8.d0*f3)
191  a13(ielem) = det1 * (20.d0*f1-8.d0*f2+16.d0*f3)
192  a22(ielem) = det1 * (-3.d0*f1+39.d0*f2+20.d0*f3)
193  a23(ielem) = det1 * (-8.d0*f1+20.d0*f2+16.d0*f3)
194  a33(ielem) = det1 * 16.d0 * (f1+f2+12.d0*f3)
195 !
196  ENDDO ! IELEM
197 !
198 ! OTHER TYPES OF DISCRETISATION OF F
199 !
200  ELSE
201 !
202  WRITE(lu,101) ielmf,sf%NAME
203 101 FORMAT(1x,'MT06OC (BIEF) :',/,
204  & 1x,'DISCRETIZATION OF F NOT AVAILABLE:',1i6,
205  & 1x,'REAL NAME: ',a6)
206  CALL plante(1)
207  stop
208 !
209  ENDIF
210 !
211 !-----------------------------------------------------------------------
212 !
213  RETURN
214  END
subroutine mt06oc(A11, A12, A13, A22, A23, A33, XMUL, SF, F, LGSEG, IKLE1, IKLE2, IKLE3, NBOR, NELEM, NELMAX)
Definition: mt06oc.f:8
Definition: bief.f:3