The TELEMAC-MASCARET system  trunk
mt06bb.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE mt06bb
3 ! *****************
4 !
5  &( a11 , a12 , a13 , a14 ,
6  & a22 , a23 , a24 ,
7  & a33 , a34 ,
8  & a44 ,
9  & xmul,sf,f,surfac,ikle1,ikle2,ikle3,ikle4,nelem,nelmax)
10 !
11 !***********************************************************************
12 ! BIEF V6P1 21/08/2010
13 !***********************************************************************
14 !
15 !brief BUILDS THE FOLLOWING MATRIX:
16 !code
17 !+ SUM(F*PSII*PSIJ)
18 !+
19 !+ WITH: P1 QUASI-BUBBLE
20 !+ P2 QUASI-BUBBLE
21 !+ F P1 OR QUASI-BUBBLE
22 !
23 !warning THE JACOBIAN MUST BE POSITIVE
24 !
25 !history J-M HERVOUET (LNH) ; C MOULIN (LNH)
26 !+ 10/01/95
27 !+ V5P1
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 !| A11 |<--| ELEMENTS OF MATRIX
44 !| A12 |<--| ELEMENTS OF MATRIX
45 !| A13 |<--| ELEMENTS OF MATRIX
46 !| A14 |<--| ELEMENTS OF MATRIX
47 !| A22 |<--| ELEMENTS OF MATRIX
48 !| A23 |<--| ELEMENTS OF MATRIX
49 !| A24 |<--| ELEMENTS OF MATRIX
50 !| A33 |<--| ELEMENTS OF MATRIX
51 !| A34 |<--| ELEMENTS OF MATRIX
52 !| A44 |<--| ELEMENTS OF MATRIX
53 !| F |-->| FUNCTION F USED IN THE FORMULA
54 !| IKLE1 |-->| FIRST POINTS OF TRIANGLES
55 !| IKLE2 |-->| SECOND POINTS OF TRIANGLES
56 !| IKLE3 |-->| THIRD POINTS OF TRIANGLES
57 !| IKLE4 |-->| QUASI-BUBBLE POINT
58 !| NELEM |-->| NUMBER OF ELEMENTS
59 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
60 !| SF |-->| BIEF_OBJ STRUCTURE OF F
61 !| SURFAC |-->| AREA OF TRIANGLES
62 !| XMUL |-->| MULTIPLICATION FACTOR
63 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
64 !
65  USE bief, ex_mt06bb => mt06bb
66 !
68  IMPLICIT NONE
69 !
70 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
71 !
72  INTEGER, INTENT(IN) :: NELEM,NELMAX
73  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax)
74  INTEGER, INTENT(IN) :: IKLE3(nelmax),IKLE4(nelmax)
75 !
76  DOUBLE PRECISION, INTENT(INOUT) :: A11(*),A12(*),A13(*),A14(*)
77  DOUBLE PRECISION, INTENT(INOUT) :: A22(*),A23(*),A24(*)
78  DOUBLE PRECISION, INTENT(INOUT) :: A33(*),A34(*)
79  DOUBLE PRECISION, INTENT(INOUT) :: A44(*)
80 !
81  DOUBLE PRECISION, INTENT(IN) :: XMUL
82  DOUBLE PRECISION, INTENT(IN) :: F(*)
83 !
84 ! STRUCTURE OF F
85  TYPE(bief_obj), INTENT(IN) :: SF
86 !
87  DOUBLE PRECISION, INTENT(IN) :: SURFAC(nelmax)
88 !
89 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
90 !
91 ! DECLARATIONS SPECIFIC TO THIS SUBROUTINE
92 !
93  DOUBLE PRECISION F1,F2,F3,F4,XMS090,XMS180,XMS540
94  DOUBLE PRECISION XMS018,XMS054,XMS006,XMS009,XMS036
95  INTEGER IELMF,IELEM
96 !
97 !=======================================================================
98 !
99 ! EXTRACTS THE TYPE OF ELEMENT FOR F
100 !
101  ielmf = sf%ELM
102 !
103 ! CASE WHERE F IS P0
104 !
105  IF(ielmf.EQ.10) THEN
106 !
107  xms009 = xmul / 9.d0
108  xms006 = xmul / 6.d0
109  xms018 = xmul / 18.d0
110  xms036 = xmul / 36.d0
111 !
112  DO ielem = 1 , nelem
113 !
114 ! INITIALISES THE GEOMETRICAL VARIABLES
115 !
116  f1 = f(ielem) * surfac(ielem)
117 !
118 ! DIAGONAL TERMS
119 !
120  a11(ielem) = f1*xms009
121  a22(ielem) = f1*xms009
122  a33(ielem) = f1*xms009
123  a44(ielem) = f1*xms006
124 !
125 ! EXTRADIAGONAL TERMS
126 !
127  a12(ielem) = f1*xms036
128  a13(ielem) = f1*xms036
129  a14(ielem) = f1*xms018
130  a23(ielem) = f1*xms036
131  a24(ielem) = f1*xms018
132  a34(ielem) = f1*xms018
133 !
134  ENDDO ! IELEM
135 !
136 !
137 !-----------------------------------------------------------------------
138 !
139 ! CASE WHERE F IS LINEAR
140 !
141  ELSEIF(ielmf.EQ.11) THEN
142 !
143  xms054 = xmul / 54.d0
144  xms018 = xmul / 18.d0
145  xms540 = xmul / 540.d0
146 !
147  DO ielem = 1 , nelem
148 !
149 ! INITIALISES THE GEOMETRICAL VARIABLES
150 !
151  f1 = f(ikle1(ielem))
152  f2 = f(ikle2(ielem))
153  f3 = f(ikle3(ielem))
154 !
155 ! INITIALISES THE INTERMEDIATE VARIABLES
156 !
157 !
158 ! DIAGONAL TERMS
159 !
160  a11(ielem) = (surfac(ielem)*(f3+f2+4*f1))*xms054
161  a22(ielem) = (surfac(ielem)*(f3+4*f2+f1))*xms054
162  a33(ielem) = (surfac(ielem)*(4*f3+f2+f1))*xms054
163  a44(ielem) = (surfac(ielem)*(f3+f2+f1)) *xms018
164 !
165 ! EXTRADIAGONAL TERMS
166 !
167  a12(ielem) = (surfac(ielem)*( f3+ 7*f2+ 7*f1))*xms540
168  a13(ielem) = (surfac(ielem)*( 7*f3+ f2+ 7*f1))*xms540
169  a14(ielem) = (surfac(ielem)*( 7*f3+ 7*f2+16*f1))*xms540
170  a23(ielem) = (surfac(ielem)*( 7*f3+ 7*f2+ f1))*xms540
171  a24(ielem) = (surfac(ielem)*( 7*f3+16*f2+ 7*f1))*xms540
172  a34(ielem) = (surfac(ielem)*(16*f3+ 7*f2+ 7*f1))*xms540
173 !
174  ENDDO ! IELEM
175 !
176 !-----------------------------------------------------------------------
177 !
178  ELSEIF(ielmf.EQ.12) THEN
179 !
180 !-----------------------------------------------------------------------
181 !
182 ! QUASI-BUBBLE DISCRETISATION OF F:
183 !
184 !
185  xms090 = xmul / 90.d0
186  xms180 = xmul / 180.d0
187 !
188  DO ielem = 1 , nelem
189 !
190 ! INITIALISES THE GEOMETRICAL VARIABLES
191 !
192  f1 = f(ikle1(ielem))
193  f2 = f(ikle2(ielem))
194  f3 = f(ikle3(ielem))
195  f4 = f(ikle4(ielem))
196 !
197 ! DIAGONAL TERMS
198 !
199  a11(ielem) = (surfac(ielem)*( f3+2*f4+ f2+6*f1))*xms090
200  a22(ielem) = (surfac(ielem)*( f3+2*f4+6*f2+ f1))*xms090
201  a33(ielem) = (surfac(ielem)*(6*f3+2*f4+ f2+ f1))*xms090
202  a44(ielem) = (surfac(ielem)*(2*f3+9*f4+2*f2+2*f1))*xms090
203 !
204 ! EXTRADIAGONAL TERMS
205 !
206  a12(ielem) = (surfac(ielem)*(f4+2*f2+2*f1))*xms180
207  a13(ielem) = (surfac(ielem)*(2*f3+f4+2*f1))*xms180
208  a14(ielem) = (surfac(ielem)*(f3+4*f4+f2+4*f1))*xms180
209  a23(ielem) = (surfac(ielem)*(2*f3+f4+2*f2))*xms180
210  a24(ielem) = (surfac(ielem)*(f3+4*f4+4*f2+f1))*xms180
211  a34(ielem) = (surfac(ielem)*(4*f3+4*f4+f2+f1))*xms180
212 !
213  ENDDO ! IELEM
214 !
215 !-----------------------------------------------------------------------
216 !
217 ! ANOTHER DISCRETISATION
218 ! ELSEIF(IELMF.EQ.XX) THEN
219 !
220 !-----------------------------------------------------------------------
221 !
222  ELSE
223 !
224  WRITE(lu,101) ielmf,sf%NAME
225 101 FORMAT(1x,'MT06BB (BIEF) :',/,
226  & 1x,'DISCRETIZATION OF F NOT AVAILABLE:',1i6,
227  & 1x,'REAL NAME: ',a6)
228  CALL plante(1)
229  stop
230 !
231  ENDIF
232 !
233 !-----------------------------------------------------------------------
234 !
235  RETURN
236  END
subroutine mt06bb(A11, A12, A13, A14, A22, A23, A24, A33, A34, A44, XMUL, SF, F, SURFAC, IKLE1, IKLE2, IKLE3, IKLE4, NELEM, NELMAX)
Definition: mt06bb.f:11
Definition: bief.f:3