38
39
40
42
43
44
45#include "implicit_f.inc"
46
47
48
49#include "units_c.inc"
50
51
52
53 INTEGER IFORM, ILVOUT, NNO, NEL, IBUF(*), ELEM(3,*)
54 my_real x(3,*), af(*), normal(3,*), mfle(nel,*), rho
55
56
57
58 INTEGER IN, JN, KN, N1, N2, N3, NN1, NN2, NN3, NNJ, IEL, , ERR
59 my_real x1, y1, z1, x2, y2, z2, x3, y3, z3, xq, yq, zq, r2,
60 . xp, yp, zp, x12, y12, z12, x13, y13, z13,
61 . nrx, nry, nrz, d2,
area, rval, rvlh, rvlg
63 my_real,
DIMENSION(:,:),
ALLOCATABLE :: bbem, cbem, ebem
64 INTEGER :: AERR
65
66
67
68 IF (ilvout>=1) WRITE(istdo,'(A)') ' .. FLUID MASS MATRIX : ASSEMBLY OF INTEGRAL OPERATORS'
69
70 ALLOCATE(bbem(nel,nel), stat = aerr)
71 IF (aerr /= 0) THEN
72 CALL ancmsg(msgid = 1710, anmode=aninfo, msgtype = msgerror)
73 ENDIF
74 ALLOCATE(cbem(nel,nel), stat = aerr)
75 IF (aerr /= 0) THEN
76 CALL ancmsg(msgid = 1710, anmode=aninfo, msgtype = msgerror)
77 ENDIF
78 DO in=1,nel
79 DO jn=1,nel
80 bbem(in,jn)=zero
81 cbem(in,jn)=zero
82 ENDDO
83 ENDDO
84 IF(iform == 1) THEN
85
86 DO iel=1,nel
87
88 n1=elem(1,iel)
89 n2=elem(2,iel)
90 n3=elem(3,iel)
91 nn1=ibuf(n1)
92 nn2=ibuf(n2)
93 nn3=ibuf(n3)
94 x1=x(1,nn1)
95 x2=x(1,nn2)
96 x3=x(1,nn3)
97 y1=x(2,nn1)
98 y2=x(2,nn2)
99 y3=x(2,nn3)
100 z1=x(3,nn1)
101 z2=x(3,nn2)
102 z3=x(3,nn3)
103
104 xp=third*(x1+x2+x3)
105 yp=third*(y1+y2+y3)
106 zp=third*
107 d2=
min((xp-x1)**2+(yp-y1)**2+(zp-z1)**2,
108 . (xp-x2)**2+(yp-y2)**2+(zp-z2)**2,
109 . (xp-x3)**2+(yp-y3)**2+(zp-z3)**2)
110
111 nrx=normal(1,iel)
112 nry=normal(2,iel)
113 nrz=normal(3,iel)
114 DO jel=1,nel
115 IF(iel == jel) THEN
116 bbem(iel,jel)=two*sqrt(pi*af(jel))
117 cbem(iel,jel)=two*pi
118 ELSE
119 n1=elem(1,jel)
120 n2=elem(2,jel)
121 n3=elem(3,jel)
122 nn1=ibuf(n1)
123 nn2=ibuf(n2)
124 nn3=ibuf(n3)
125 x1=x(1,nn1)
126 x2=x(1,nn2)
127 x3=x(1,nn3)
128 y1=x(2,nn1)
129 y2=x(2,nn2)
130 y3=x(2,nn3)
131 z1=x(3,nn1)
132 z2=x(3,nn2)
133 z3=x(3,nn3)
135
136 xq=third*(x1+x2+x3)
137 yq=third*(y1+y2+y3)
138 zq=third*(z1+z2+z3)
139 CALL inthtg(x1 , y1, z1, x2, y2, z2,
140 . x3, y3, z3, xp, yp, zp,
141 . nrx,nry, nrz, d2,
area,
142 . xq, yq, zq, rval )
143 cbem(iel,jel)=rval
144 CALL intgtg(x1 , y1, z1, x2, y2, z2,
145 . x3, y3, z3, xp, yp, zp,
147 . xq, yq, zq, rval )
148 bbem(iel,jel)=rval
149 ENDIF
150 ENDDO
151 ENDDO
152
153 ELSEIF(iform == 2) THEN
154
155 DO iel=1,nel
156
157 n1=elem(1,iel)
158 n2=elem(2,iel)
159 n3=elem(3,iel)
160 nn1=ibuf(n1)
161 nn2=ibuf(n2)
162 nn3=ibuf(n3)
163 x1=x(1,nn1)
164 x2=x(1,nn2)
165 x3=x(1,nn3)
166 y1=x(2,nn1)
167 y2=x(2,nn2)
168 y3=x(2,nn3)
169 z1=x(3,nn1)
170 z2=x(3,nn2)
171 z3=x(3,nn3)
172 xp=third*(x1+x2+x3)
173 yp=third*(y1+y2+y3)
174 zp=third*(z1+z2+z3)
175 DO jel=1,nel
176 n1=elem(1,jel)
177 n2=elem(2,jel)
178 n3=elem(3,jel)
179 nn1=ibuf(n1)
180 nn2=ibuf(n2)
181 nn3=ibuf(n3)
182 x1=x(1,nn1)
183 x2=x(1,nn2)
184 x3=x(1,nn3)
185 y1=x(2,nn1)
186 y2=x(2,nn2)
187 y3=x(2,nn3)
188 z1=x(3,nn1)
189 z2=x(3,nn2)
190 z3=x(3,nn3)
191 nrx=normal(1,jel)
192 nry=normal(2,jel)
193 nrz=normal(3,jel)
195
197 . x3, y3, z3, xp, yp, zp,
198 . nrx, nry, nrz,
199 .
area, rvlh, rvlg, iel, jel )
200 IF(iel == jel) THEN
201 cbem(iel,jel)=two*pi
202 ELSE
203 cbem(iel,jel)=rvlh
204 ENDIF
205
206 bbem(iel,jel)=rvlg
207 ENDDO
208 ENDDO
209 ENDIF
210
211 IF(ilvout>=3) THEN
212 WRITE (*,'(//,A)') ' BBEM MATRIX'
213 IF(nel < 11) THEN
214 DO in = 1,nel
215 WRITE (*,'(10E13.5)') (bbem(in,jn),jn=1,nel)
216 ENDDO
217 ELSE
218 DO in = 1,10
219 WRITE (*,'(10E13.5)') (bbem(in,jn),jn=1,10)
220 ENDDO
221 WRITE (*,'(//,A)') ' BBEM MATRIX B1J'
222 WRITE (*,'(10E13.5)') (bbem(1,jn),jn=1,nel)
223 ENDIF
224
225 WRITE (*,'(//,A)') ' CBEM MATRIX'
226 IF(nel < 11) THEN
227 DO in = 1,nel
228 WRITE (*,'(10E13.5)') (cbem(in,jn),jn=1,nel)
229 ENDDO
230 ELSE
231 DO in = 1,10
232 WRITE (*,'(10E13.5)') (cbem(in,jn),jn=1,10)
233 ENDDO
234 WRITE (*,'(//,A)') ' CBEM MATRIX C1J'
235 WRITE (*,'(10E13.5)') (cbem(1,jn),jn=1,nel)
236 ENDIF
237 ENDIF
238
239
240
241 IF (ilvout>=1) WRITE(istdo,'(A)') ' .. FLUID MASS MATRIX'
242 ALLOCATE(ebem(nel,nel), stat = aerr)
243 IF (aerr /= 0) THEN
244 CALL ancmsg(msgid = 1710, anmode=aninfo, msgtype = msgerror)
245 ENDIF
246 CALL invert(cbem,ebem,nel,err)
247
248
249
250
251 DO in=1,nel
252 DO jn=1,nel
253 mfle(in,jn)=zero
254 cbem(in,jn)=zero
255 ENDDO
256 ENDDO
257 DO in=1,nel
258 DO jn=1,nel
259 DO kn=1,nel
260 cbem(in,jn)=cbem(in,jn)+bbem(in,kn)*ebem(kn,jn)
261 ENDDO
262 ENDDO
263 ENDDO
264 IF(ilvout>=3) THEN
265 WRITE (*,'(//,A)') ' EBEM MATRIX = BBEM*CBEM-1'
266 IF(nel < 11) THEN
267 DO in = 1,nel
268 WRITE (*,'(10E13.5)') (cbem(in,jn),jn=1,nel)
269 ENDDO
270 ELSE
271 DO in = 1,10
272 WRITE (*,'(10E13.5)') (cbem(in,jn),jn=1,10)
273 ENDDO
274 WRITE (*,'(//,A)') ' EBEM MATRIX E1I'
275 WRITE (*,'(10E13.5)') (cbem(1,jn),jn=1,nel)
276 ENDIF
277 ENDIF
278
279 DO in=1,nel
280 DO jn=1,nel
281 mfle(in,jn)=half*rho*af(in)*(cbem(in,jn)+cbem(jn,in))
282 bbem(in,jn)=mfle(in,jn)
283 ENDDO
284 ENDDO
285
286 IF(ilvout>=3) THEN
287 WRITE (*,'(//,A)') ' FLUID MASS MATRIX'
288 IF(nel < 11) THEN
289 DO in = 1,nel
290 WRITE (*,'(10E13.5)') (mfle(in,jn),jn=1,nel)
291 END DO
292 ELSE
293 DO in = 1,10
294 WRITE (*,'(10E13.5)') (mfle(in,jn),jn=1,10)
295 END DO
296 WRITE (*,'(//,A)') ' FLUID MASS MATRIX M1I'
297 WRITE (*,'(10E13.5)') (mfle(1,jn),jn=1,nel)
298 ENDIF
299 ENDIF
300
301
302
303 massx=zero
304 massy=zero
305 massz=zero
306 DO in=1,nel
307 DO jn=1,nel
308 massx=massx+normal(1,in)*mfle(in,jn)*normal(1,jn)
309 massy=massy+normal(2,in)*mfle(in,jn)*normal(2,jn)
310 massz=massz+normal(3,in)*mfle(in,jn)*normal(3,jn)
311 ENDDO
312 ENDDO
313 WRITE (iout,'(/7X,A,E13.5)') 'DAA : RIGID BODY FLUID MASS XX', massx
314 WRITE (iout,'( 7X,A,E13.5)') 'DAA : RIGID BODY FLUID MASS YY', massy
315 WRITE (iout,'( 7X,A,E13.5)') 'DAA : RIGID BODY FLUID MASS ZZ', massz
316
317
318
319 DO in=1,nel
320 DO jn=1,nel
321 ebem(in,jn)=zero
322 ENDDO
323 ENDDO
324 CALL invert(bbem,ebem,nel,err)
325
326 IF(ilvout>=3) THEN
327 WRITE (*,'(//,A)') ' INVERSE FLUID MASS MATRIX'
328 IF(nel < 11) THEN
329 DO in = 1,nel
330 WRITE (*,'(10E13.5)') (ebem(in,jn),jn=1,nel)
331 END DO
332 ELSE
333 DO in = 1,10
334 WRITE (*,'(10E13.5)') (ebem(in,jn),jn=1,10)
335 END DO
336 WRITE (*,'(//,A)') ' INVERSE FLUID MASS MATRIX M1I'
337 WRITE (*,'(10E13.5)') (ebem(1,jn),jn=1,nel)
338 ENDIF
339 ENDIF
340
341
342 DO in=1,nel
343 DO jn=1,nel
344 mfle(in,jn)=ebem(in,jn)
345 ENDDO
346 ENDDO
347
348 IF (ALLOCATED(bbem)) DEALLOCATE(bbem)
349 IF (ALLOCATED(ebem)) DEALLOCATE(ebem)
350 IF (ALLOCATED(cbem)) DEALLOCATE(cbem)
351
352 RETURN
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
subroutine area(d1, x, x2, y, y2, eint, stif0)
subroutine invert(matrix, inverse, n, errorflag)
subroutine intanl_tg(x1, y1, z1, x2, y2, z2, x3, y3, z3, xp, yp, zp, nrx, nry, nrz, area, rvlh, rvlg, jel, iel)
subroutine intgtg(x1, y1, z1, x2, y2, z2, x3, y3, z3, xp, yp, zp, d2, jac, xs, ys, zs, rval)
subroutine inthtg(x1, y1, z1, x2, y2, z2, x3, y3, z3, xp, yp, zp, nrx, nry, nrz, d2, jac, xs, ys, zs, rval)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)