36 . ELEM , NORM , X , NNRP , CR_LOC_GLOB,
37 . CR_GLOB_LOC , NNCP , CC_LOC_GLOB, CC_GLOB_LOC, NCEIP ,
38 . CCEI_LOC_GLOB, NEP , CE_LOC_GLOB, CE_GLOB_LOC, NREIP ,
39 . CREI_LOC_GLOB, NNO , NEL , HBEM , GBEM ,
40 . Q , PHI , IFORM , L_ASSEMB , NPROW ,
41 . NPCOL , NBLOC, IPIV , NERP , ILVOUT ,
46#include "implicit_f.inc"
55 INTEGER ELEM(3,*), NNRP, CR_LOC_GLOB(*), CR_GLOB_LOC(*), NNCP,
56 . CC_GLOB_LOC(*), CC_LOC_GLOB(*), NCEIP, CCEI_LOC_GLOB(*),
57 . NEP, CE_LOC_GLOB(*), CE_GLOB_LOC(*), NNO, NEL, IFORM,
58 . NREIP, CREI_LOC_GLOB(*), NPROW, NPCOL, NBLOC
67 INTEGER IEL, N1, N2, N3, NL1, NL2, NL3, I, J, JN, IR, IC, JJ,
68 . ICTXT, DESC_H(9), DESC_G(9), DESC_Q(9), DESC_P(9),
69 . INFO, IBID, NC1, NC2, NC3, OFFNR(3), OFFNC(3)
71 . x1, y1, z1, x2, y2, z2, x3, y3, z3, x0, y0, z0, d2,
72 . nrx, nry, nrz, area2, rval(3), lsum(nno), lsumt(nno)
73#
if defined(mpi) && defined(myreal8) &&
78 CALL sl_init(ictxt, nprow, npcol)
108 desc_q(9)=
max(1,nerp)
118 desc_p(9)=
max(1,nnrp)
123 IF (ilvout>=1.AND.ispmd==0)
WRITE(istdo,
'(A)')
' ** BEMSOLV : ASSEMBLY OF INTEGRAL OPERATORS'
156 d2=
min((x0-x1)**2+(y0-y1)**2+(z0-z1)**2,
157 . (x0-x2)**2+(y0-y2)**2+(z0-z2)**2,
158 . (x0-x3)**2+(y0-y3)**2+(z0-z3)**2)
162 area2=sqrt(nrx**2+nry**2+nrz**2)
165 CALL inthtg(jn, x1 , y1, z1, x2,
166 . y2, z2, x3, y3, z3,
167 . x0, y0, z0, d2, area2,
168 . nrx, nry, nrz, rval, n1,
170 IF (nl1/=0) hbem(j,nl1)=hbem(j,nl1)+rval(1)
171 IF (nl2/=0) hbem(j,nl2)=hbem(j,nl2)+rval(2)
172 IF (nl3/=0) hbem(j,nl3)=hbem(j,nl3)+rval(3)
178 .
CALL progcondp_c(nceip+i,nceip+nep, ispmd+1, ibid)
198 d2=
min((x0-x1)**2+(y0-y1)**2+(z0-z1)**2,
199 . (x0-x2)**2+(y0-y2)**2+(z0-z2)**2,
200 . (x0-x3)**2+(y0-y3)**2+(z0-z3)**2)
204 area2=sqrt(nrx**2+nry**2+nrz**2)
207 CALL intgtg(jn, x1 , y1, z1, x2,
208 . y2, z2, x3, y3, z3,
210 . nrx, nry, nrz, rval, n1,
212 gbem(j,i)=gbem(j,i)+rval(1)
222 lsum(jj)=lsum(jj)+hbem(j,i)
229 IF (ir>0.AND.ic>0) hbem(ir,ic)=-lsumt(i)
232 ELSEIF (iform==2)
THEN
284 area2=sqrt(nrx**2+nry**2+nrz**2)
285 CALL glbemp(x1, y1, z1, x2, y2,
286 . z2, x3, y3, z3, x0,
287 . y0, z0, norm, hbem, gbem,
288 . elem, x, nl1, nl2, nl3,
289 . nnrp, nel, area2, cc_glob_loc,
290 . ce_glob_loc, nc1, nc2, nc3 ,
301 lsum(jj)=lsum(jj)+gbem(j,i)
309 IF (ir>0) hbem(ir,ic)=-lsumt(i)
313 CALL pdgetrf(nno, nno, hbem, 1, 1,
314 . desc_h, ipiv, info)
319 IF (ilvout>=1.AND.ispmd==0)
THEN
321 WRITE(istdo,
'(A)')
' ** BEMSOLV : PARALLEL LINEAR SYSTEM SOLUTION'
323 CALL pdgemv(
'N', nno, nel, one, gbem,
324 . 1, 1, desc_g, q, 1,
325 . 1, desc_q, 1, zero, phi,
333 phi(i)=phi(i)-phi_inf(ir)
336 ELSEIF (iform==2)
THEN
358 area2=sqrt(nrx**2+nry**2+nrz**2)
359 CALL glsinfp(n1, n2, n3, area2, phi,
360 . phi_inf, nl1, nl2, nl3 , offnr)
365 CALL pdgetrs(
'N', nno, 1, hbem, 1,
366 . 1, desc_h, ipiv, phi, 1,
381 SUBROUTINE glbemp(X1 , Y1 , Z1 , X2 , Y2 ,
382 . Z2 , X3 , Y3 , Z3 , X0 ,
383 . Y0 , Z0 , TELNOR, HBEM, GBEM ,
384 . TBEMTG, X , N1 , N2 , N3 ,
385 . NNRP , NEL , JAC , CC_GLOB_LOC,
386 . CE_GLOB_LOC , NC1 , NC2 , NC3 ,
391#include "implicit_f.inc"
395 INTEGER TBEMTG(3,*), N1, N2, N3, NEL, NNRP, CC_GLOB_LOC(*),
396 . CE_GLOB_LOC(*), NC1, NC2, NC3, OFFNR(*), OFFNC(*)
398 . X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, X0, Y0, Z0,
399 . TELNOR(3,*), X(3,*), JAC, HBEM(NNRP,*), GBEM(NNRP,*)
403 INTEGER NPG, IAD, JBID, NBID, IDEG, IAD2, IP, IEL, NN1, NN2, NN3,
404 . NL1, NL2, NL3, IELL, OFFNR2(3), OFFEL
406 . PG(50), WPG(25), W, KSIP, ETAP, VAL1, VAL2, VAL3, XP,
407 . YP, ZP, CP, XX1, YY1, ZZ1, XX2, YY2, ZZ2, XX3, YY3, ZZ3,
408 . xx4, yy4, zz4, xx5, yy5, zz5, xx6, yy6, zz6, xx0, yy0,
409 . zz0, nrx, nry, nrz, d2, rvl(6), rvlh(3), rvlg
412 DATA pg /.33333333,.33333333,
413 . .33333333,.33333333,
414 . .60000000,.20000000,
415 . .20000000,.60000000,
416 . .20000000,.20000000,
417 . .33333333,.33333333,
418 . .79742699,.10128651,
419 . .10128651,.79742699,
420 . .10128651,.10128651,
421 . .05971587,.47014206,
422 . .47014206,.05971587,
423 . .47014206,.47014206,
424 . .06513010,.06513010,
425 . .86973979,.06513010,
426 . .06513010,.86973979,
427 . .31286550,.04869031,
428 . .63844419,.31286550,
429 . .04869031,.63844419,
430 . .63844419,.04869031,
431 . .31286550,.63844419,
432 . .04869031,.31286550,
433 . .26034597,.26034597,
434 . .47930807,.26034597,
435 . .26034597,.47930807,
436 . .33333333,.33333333/
437 DATA wpg /1.00000000,
438 . -.56250000,.52083333,
439 . .52083333,.52083333,
440 . .22500000,.12593918,
441 . .12593918,.12593918,
442 . .13239415,.13239415,
444 . .05334724,.05334724,
445 . .05334724,.07711376,
446 . .07711376,.07711376,
447 . .07711376,.07711376,
448 . .07711376,.17561526,
449 . .17561526,.17561526,
465 xp=val1*x1+val2*x2+val3*x3
466 yp=val1*y1+val2*y2+val3*y3
467 zp=val1*z1+val2*z2+val3*z3
470 iell=ce_glob_loc(iel)
499 CALL intanl(xx1 , yy1 , zz1, xx2, yy2,
500 . zz2 , xx3 , yy3, zz3, xp ,
501 . yp , zp , nrx, nry, nrz,
504 hbem(n1,nl1)=hbem(n1,nl1)
505 . +offnr(1)*offnr2(1)*w*val1*rvlh(1)*jac
506 hbem(n1,nl2)=hbem(n1,nl2)
507 . +offnr(1)*offnr2(2)*w*val1*rvlh(2)*jac
508 hbem(n1,nl3)=hbem(n1,nl3)
509 . +offnr(1)*offnr2(3)*w*val1*rvlh(3)*jac
510 hbem(n2,nl1)=hbem(n2,nl1)
511 . +offnr(2)*offnr2(1)*w*val2*rvlh(1)*jac
512 hbem(n2,nl2)=hbem(n2,nl2)
513 . +offnr(2)*offnr2(2)*w*val2*rvlh(2)*jac
514 hbem(n2,nl3)=hbem(n2,nl3)
515 . +offnr(2)*offnr2(3)*w*val2*rvlh(3)*jac
516 hbem(n3,nl1)=hbem(n3,nl1)
517 . +offnr(3)*offnr2(1)*w*val3*rvlh(1)*jac
518 hbem(n3,nl2)=hbem(n3,nl2)
519 . +offnr(3)*offnr2(2)*w*val3*rvlh(2)*jac
520 hbem(n3,nl3)=hbem(n3,nl3)
521 . +offnr(3)*offnr2(3)*w*val3*rvlh(3)*jac
522 cp=cp-rvlh(1)-rvlh(2)-rvlh(3)
524 gbem(n1,iell)=gbem(n1,iell)+offnr(1)*offel*w*val1*rvlg*jac
525 gbem(n2,iell)=gbem(n2,iell)+offnr(2)*offel*w*val2*rvlg*jac
526 gbem(n3,iell)=gbem(n3,iell)+offnr(3)*offel*w*val3*rvlg*jac
528 hbem(n1,nc1)=hbem(n1,nc1)+offnr(1)*offnc(1)*w*cp*val1*val1*jac
529 hbem(n1,nc2)=hbem(n1,nc2)+offnr(1)*offnc(2)*w*cp*val1*val2*jac
530 hbem(n1,nc3)=hbem(n1,nc3)+offnr(1)*offnc(3)*w*cp*val1*val3*jac
531 hbem(n2,nc1)=hbem(n2,nc1)+offnr(2)*offnc(1)*w*cp*val2*val1*jac
532 hbem(n2,nc2)=hbem(n2,nc2)+offnr(2)*offnc(2)*w*cp*val2*val2*jac
533 hbem(n2,nc3)=hbem(n2,nc3)+offnr(2)*offnc(3)*w*cp*val2*val3*jac
534 hbem(n3,nc1)=hbem(n3,nc1)+offnr(3)*offnc(1)*w*cp*val3*val1*jac
535 hbem(n3,nc2)=hbem(n3,nc2)+offnr(3)*offnc(2)*w*cp*val3*val2*jac
536 hbem(n3,nc3)=hbem(n3,nc3)+offnr(3)*offnc(3)*w*cp*val3*val3*jac
subroutine glbemp(x1, y1, z1, x2, y2, z2, x3, y3, z3, x0, y0, z0, telnor, hbem, gbem, tbemtg, x, n1, n2, n3, nnrp, nel, jac, cc_glob_loc, ce_glob_loc, nc1, nc2, nc3, offnr, offnc)
subroutine bemsolvp(elem, norm, x, nnrp, cr_loc_glob, cr_glob_loc, nncp, cc_loc_glob, cc_glob_loc, nceip, ccei_loc_glob, nep, ce_loc_glob, ce_glob_loc, nreip, crei_loc_glob, nno, nel, hbem, gbem, q, phi, iform, l_assemb, nprow, npcol, nbloc, ipiv, nerp, ilvout, phi_inf)