40 . NORMAL, AF, MFLE, CBEM, RHO,IRESP)
48#include "implicit_f.inc"
56 INTEGER NNO, NEL, IFLOW(*), IBUF(*), (5,*)
57 my_real x(3,*), af(*), normal(3,*), mfle(nel,*), cbem(nel,*), rho
58 INTEGER,
INTENT(IN):: IRESP
62 INTEGER IFORM, KFORM, ILVOUT, NELMAX
63 INTEGER IN, JN, KN, N1, N2, N3, N4, , NN1, NN2, NN3, NN4, NNJ, IEL, JEL, ERR
64 my_real x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4, xq, yq, zq, r2,
65 . xp, yp, zp, x13, y13, z13, x24, y24, z24,
66 . nrx, nry, nrz,
area, d2, rval, rvlh, rvlg
67 my_real massx, massy, massz, wi(4,2), sum
68 my_real,
DIMENSION(:,:),
ALLOCATABLE :: bbem, ebem
79 WRITE(istdo,
'(A)')
' .. FLUID MASS MATRIX:
80 . ASSEMBLY OF INTEGRAL OPERATORS'
91 ALLOCATE(bbem(nel,nel), stat = aerr)
93 CALL ancmsg(msgid = 1710, anmode=aninfo, msgtype = msgerror)
128 xp=wi(1,n5)*x1+wi(2,n5)*x2+wi(3,n5)*x3+wi(4,n5)*x4
129 yp=wi(1,n5)*y1+wi(2,n5)*y2+wi(3,n5)*y3+wi(4,n5)*y4
130 zp=wi(1,n5)*z1+wi(2,n5)*z2+wi(3,n5)*z3+wi(4,n5)*z4
131 d2=
min((xp-x1)**2+(yp-y1)**2+(zp-z1)**2,
132 . (xp-x2)**2+(yp-y2)**2+(zp-z2)**2,
133 . (xp-x3)**2+(yp-y3)**2+(zp-z3)**2,
134 . (xp-x4)**2+(yp-y4)**2+(zp-z4)**2)
141 bbem(iel,jel)=two*sqrt(pi*af(jel))
167 xq=wi(1,jn)*x1+wi(2,jn)*x2+wi(3,jn)*x3+wi(4,jn)*x4
168 yq=wi(1,jn)*y1+wi(2,jn)*y2+wi(3,jn)*y3+wi(4,jn)*y4
169 zq=wi(1,jn)*z1+wi(2,jn)*z2+wi(3,jn)*z3+wi(4,jn)*z4
172 CALL inthqd(x1 , y1, z1, x2, y2, z2,
175 . nrx, nry, nrz, d2,
area, rval)
177 CALL intgqd(x1 , y1, z1, x2, y2, z2,
178 . x3, y3, z3, x4, y4, z4,
179 . xp, yp, zp, xq, yq, zq,
183 CALL inthtg(x1 , y1, z1, x2, y2, z2,
184 . x3, y3, z3, xp, yp, zp,
185 . nrx,nry, nrz, d2,
area,
188 CALL intgtg(x1, y1, z1, x2, y2, z2,
189 . x3, y3, z3, xp, yp, zp,
198 ELSEIF(iform == 2)
THEN
224 xp=wi(1,in)*x1+wi(2,in)*x2+wi(3,in)*x3+wi(4,in)*x4
225 yp=wi(1,in)*y1+wi(2,in)*y2+wi(3,in)*y3+wi(4,in)*y4
226 zp=wi(1,in)*z1+wi(2,in)*z2+wi(3,in)*z3+wi(4,in)*z4
254 CALL intanl_qd(x1, y1, z1, x2, y2, z2, x3, y3, z3,
255 . x4, y4, z4, xp, yp, zp, nrx,nry,nrz,
256 .
area, rvlh, rvlg, iel, jel )
259 CALL intanl_tg(x1, y1, z1, x2, y2, z2, x3, y3, z3,
260 . xp, yp, zp, nrx,nry,nrz,
261 .
area, rvlh, rvlg, iel, jel )
276 WRITE (*,
'(//,A)')
' BBEM MATRIX'
279 WRITE (*,
'(10E13.5)') (bbem(in,jn),jn=1,nel)
283 WRITE (*,
'(10E13.5)') (bbem(in,jn),jn=1,10)
285 WRITE (*,
'(//,A)')
' BBEM MATRIX B1I'
286 WRITE (*,
'(10E13.5)') (bbem(1,jn),jn=1,nel)
289 WRITE (*,
'(//,A)')
' CBEM MATRIX'
292 WRITE (*,
'(10E13.5)') (cbem(in,jn),jn=1,nel)
296 WRITE (*,'(10e13.5)
') (CBEM(IN,JN),JN=1,10)
298 WRITE (*,'(//,a)
') ' cbem matrix c1i
'
299 WRITE (*,'(10e13.5)
') (CBEM(1,JN),JN=1,NEL)
305.AND.
IF(KFORM == 1 NEL >= NELMAX) THEN
322 ! Double Precision version : use either Lapack / MKP or ARMPL
326 CALL DGEMM('t
','n
',NEL,NEL,NEL,ALPHA,CBEM,NEL,BBEM,NEL,BETA,MFLE,NEL)
329 CALL DGEMM('n
','t
',NEL,NEL,NEL,ALPHA,BBEM,NEL,CBEM,NEL,BETA,MFLE,NEL)
331 ! Single Precision version / Bad performance
336 SUM=SUM+BBEM(KN,IN)*CBEM(KN,JN)+CBEM(KN,IN)*BBEM(KN,JN)
347 IF (ILVOUT>=1) WRITE(ISTDO,'(a)
') ' .. fluid mass matrix
'
348 ALLOCATE(EBEM(NEL,NEL), STAT = AERR)
350 CALL ANCMSG(MSGID = 1710, ANMODE=ANINFO, MSGTYPE = MSGERROR)
352 CALL INVERT(CBEM,EBEM,NEL,ERR)
355 WRITE (*,'(//,a)
') ' cbem-1 matrix
'
358 WRITE (*,'(10e13.5)
') (EBEM(IN,JN),JN=1,NEL)
362 WRITE (*,'(10e13.5)
') (EBEM(IN,JN),JN=1,10)
364 WRITE (*,'(//,a)
') ' cbem-1 matrix c1i
'
365 WRITE (*,'(10e13.5)
') (EBEM(1,JN),JN=1,NEL)
375 CBEM(1:NEL, 1:NEL) = MATMUL(BBEM(1:NEL, 1:NEL), EBEM(1:NEL, 1:NEL))
385 WRITE (*,'(//,a)
') ' ebem matrix = bbem*cbem-1
'
388 WRITE (*,'(10e13.5)
') (CBEM(IN,JN),JN=1,NEL)
392 WRITE (*,'(10e13.5)
') (CBEM(IN,JN),JN=1,10)
394 WRITE (*,'(//,a)
') ' ebem matrix e1i
'
395 WRITE (*,'(10e13.5)
') (CBEM(1,JN),JN=1,NEL)
401 MFLE(IN,JN)=HALF*RHO*AF(IN)*(CBEM(IN,JN)+CBEM(JN,IN))
402 BBEM(IN,JN)=MFLE(IN,JN)
407 WRITE (*,'(//,a)
') ' fluid mass matrix
'
410 WRITE (*,'(10e13.5)
') (MFLE(IN,JN),JN=1,NEL)
414 WRITE (*,'(10e13.5)
') (MFLE(IN,JN),JN=1,10)
416 WRITE (*,'(//,a)
') ' fluid mass matrix m1i
'
417 WRITE (*,'(10e13.5)
') (MFLE(1,JN),JN=1,NEL)
428 MASSX=MASSX+NORMAL(1,IN)*MFLE(IN,JN)*NORMAL(1,JN)
429 MASSY=MASSY+NORMAL(2,IN)*MFLE(IN,JN)*NORMAL(2,JN)
430 MASSZ=MASSZ+NORMAL(3,IN)*MFLE(IN,JN)*NORMAL(3,JN)
433 WRITE (IOUT,'(/7x,a,e13.5)
') 'daa : rigid body fluid mass xx
', MASSX
434 WRITE (IOUT,'( 7x,a,e13.5)
') 'daa : rigid body fluid mass yy
', MASSY
435 WRITE (IOUT,'( 7x,a,e13.5)
') 'daa : rigid body fluid mass zz
', MASSZ
446 CALL INVERT(BBEM,EBEM,NEL,ERR)
450 WRITE (*,'(//,a)
') ' inverse fluid mass matrix
'
453 WRITE (*,'(10e13.5)
') (EBEM(IN,JN),JN=1,NEL)
457 WRITE (*,'(10e13.5)
') (EBEM(IN,JN),JN=1,10)
459 WRITE (*,'(//,a)
') ' inverse fluid mass matrix mii
'
460 WRITE (*,'(10e13.5)
') (EBEM(JN,JN),JN=1,NEL)
466 MFLE(IN,JN)=EBEM(IN,JN)
470 IF (ALLOCATED(BBEM)) DEALLOCATE(BBEM)
471 IF (ALLOCATED(EBEM))DEALLOCATE(EBEM)
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)