35 SUBROUTINE bemsolv(L_ASSEMB, ILVOUT, IFORM, NN , NEL ,
36 . HBEM , GBEM , IBUF , TBEMTG, TELNOR ,
37 . X , Q , PHI , IPIV , PHI_INF)
41#include "implicit_f.inc"
49 INTEGER ILVOUT, IFORM, NN, NEL, IBUF(*), TBEMTG(3,*), IPIV(*)
51 . hbem(nn,*), gbem(nn,*), telnor(3,*), x(3,*), q(*), phi(*),
57 INTEGER IN, JN, IQ, N1, N2, N3, NN1, NN2, NN3, , INFO, IEL
59 . x1, y1, z1, x2, y2, z2, x3, y3, z3, x0, y0, z0, d2,
60 . nrx, nry, nrz, area2, rval(3), rsum, s(nn)
64#if defined(MYREAL8) && !defined(WITHOUT_LINALG)
66 IF (ilvout>=1)
WRITE(istdo,
'(A)')
67 .
' ** BEMSOLV : ASSEMBLY OF INTEGRAL OPERATORS'
99 d2=
min((x0-x1)**2+(y0-y1)**2+(z0-z1)**2,
100 . (x0-x2)**2+(y0-y2)**2+(z0-z2)**2,
101 . (x0-x3)**2+(y0-y3)**2+(z0-z3)**2)
105 area2=sqrt(nrx**2+nry**2+nrz**2)
108 CALL inthtg(nnj, x1 , y1, z1, x2,
109 . y2, z2, x3, y3, z3,
110 . x0, y0, z0, d2, area2,
111 . nrx, nry, nrz, rval, nn1,
113 hbem(jn,n1)=hbem(jn,n1)+rval(1)
114 hbem(jn,n2)=hbem(jn,n2)+rval(2)
115 hbem(jn,n3)=hbem(jn,n3)+rval(3)
116 CALL intgtg(nnj, x1 , y1, z1, x2,
117 . y2, z2, x3, y3, z3,
118 . x0, y0, z0, d2, area2,
121 gbem(jn,iel)=gbem(jn,iel)+rval(1)
122 gbem(jn,nel+1)=gbem(jn,nel+1)+rval(1)
128 IF (in/=jn) rsum=rsum+hbem(in,jn)
132 ELSEIF (iform==2)
THEN
166 area2=sqrt(nrx**2+nry**2+nrz**2)
167 CALL glbem(x1 , y1 , z1 , x2 , y2 ,
168 . z2 , x3 , y3 , z3 , x0 ,
169 . y0 , z0 , telnor, hbem , gbem,
170 . tbemtg, ibuf, x , n1 , n2 ,
171 . n3 , iel , nn , area2, nel )
176 hbem(in,nn)=-gbem(in,nel+1)
179 CALL dgetrf(nn, nn, hbem, nn, ipiv,
185 IF (ilvout>=1)
WRITE(istdo,
'(A)')
186 .
' ** BEMSOLV : LINEAR SYSTEM SOLUTION'
187 CALL dgemv(
'N', nn, nel+1, one, gbem,
193 s(in)=s(in)-phi_inf(in)
195 ELSEIF (iform==2)
THEN
203 area2=sqrt(nrx**2+nry**2+nrz**2)
204 CALL glsinf(n1, n2, n3, area2, s,
209 CALL dgetrs(
'N', nn, 1, hbem, nn, ipiv,
313 . Y2, Z2, X3, Y3, Z3,
314 . X0, Y0, Z0, D2, JAC,
315 . NRX, NRY, NRZ, RVAL, NN1,
320#include "implicit_f.inc"
324 INTEGER NNJ, NN1, NN2, NN3
326 . X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3,
327 . X0, Y0, Z0, D2, JAC, NRX, NRY, NRZ, RVAL(*), X(3,*)
331 INTEGER NPG, IAD, IAD2, IP, IHG
334 . val1, val2, val3, w, xg, yg, zg, valphi,
338 . .33333333,.33333333,
339 . .60000000,.20000000,
340 . .20000000,.60000000,
341 . .20000000,.20000000,
342 . .33333333,.33333333,
343 . .79742699,.10128651,
344 . .10128651,.79742699,
345 . .10128651,.10128651,
346 . .05971587,.47014206,
347 . .47014206,.05971587,
348 . .47014206,.47014206,
349 . .06513010,.06513010,
350 . .86973979,.06513010,
351 . .06513010,.86973979
353 . .63844419,.31286550,
354 . .04869031,.63844419,
355 . .63844419,.04869031,
356 . .31286550,.63844419,
357 . .04869031,.31286550,
358 . .26034597,.26034597,
359 . .47930807,.26034597,
360 . .26034597,.47930807,
361 . .33333333,.33333333/
362 DATA wpg /1.00000000,
363 . -.56250000,.52083333,
364 . .52083333,.52083333,
365 . .22500000,.12593918,
366 . .12593918,.12593918,
367 . .13239415,.13239415,
369 . .05334724,.05334724,
370 . .05334724,.07711376,
371 . .07711376,.07711376,
372 . .07711376,.07711376,
373 . .07711376,.17561526,
374 . .17561526,.17561526,
381 r2=(x0-xs)**2+(y0-ys)**2+(z0-zs)**2
383 IF (r2>hundred*d2)
THEN
386 ELSEIF (r2>twenty5*d2)
THEN
389 ELSEIF (r2>four*d2)
THEN
414 xg=val1*x1+val2*x2+val3*x3
415 yg=val1*y1+val2*y2+val3*y3
416 zg=val1*z1+val2*z2+val3*z3
417 r2=(xg-xs)**2+(yg-ys)**2+(zg-zs)**2
419 valphi=-fourth/pi/(r2**three_half)
420 . *(nrx*(xg-xs)+nry*(yg-ys)+nrz*(zg-zs))
421 rval(1)=rval(1)+half*w*val1*valphi
422 rval(2)=rval(2)+half*w*val2*valphi
423 rval(3)=rval(3)+half*w*val3*valphi
439 . Y2, Z2, X3, Y3, Z3,
440 . X0, Y0, Z0, D2, JAC,
441 . NRX, NRY, NRZ, RVAL, NN1,
446#include "implicit_f.inc"
450 INTEGER NNJ, NN1, NN2, NN3
452 . X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3,
453 . X0, Y0, Z0, D2, JAC, NRX, NRY, NRZ, RVAL(*),
458 INTEGER NPG, IAD, IAD2, IP, NNS, IHG
460 . PG(50), WPG(25), XS, YS, ZS, ,
461 . val, val1, val2, val3, w, xg, yg, zg, valphi,
462 . eta1, eta2, pg4(32), wpg4(16), jjac, ksi1, ksi2
464 DATA pg /.33333333,.33333333,
465 . .33333333,.33333333,
466 . .60000000,.20000000,
467 . .20000000,.60000000,
468 . .20000000,.20000000,
469 . .33333333,.33333333,
470 . .79742699,.10128651,
471 . .10128651,.79742699,
472 . .10128651,.10128651,
473 . .05971587,.47014206,
474 . .47014206,.05971587,
475 . .47014206,.47014206,
476 . .06513010,.06513010,
477 . .86973979,.06513010,
478 . .06513010,.86973979,
479 . .31286550,.04869031,
480 . .63844419,.31286550,
481 . .04869031,.63844419,
482 . .63844419,.04869031,
483 . .31286550,.63844419,
484 . .04869031,.31286550,
485 . .26034597,.26034597,
486 . .47930807,.26034597,
487 . .26034597,.47930807,
488 . .33333333,.33333333/
489 DATA wpg /1.00000000,
490 . -.56250000,.52083333,
491 . .52083333,.52083333,
492 . .22500000,.12593918,
493 . .12593918,.12593918,
494 . .13239415,.13239415,
496 . .05334724,.05334724,
497 . .05334724,.07711376,
498 . .07711376,.07711376,
499 . .07711376,.07711376,
500 . .07711376,.17561526,
501 . .17561526,.17561526,
503 DATA pg4 /-.861136311594053,-.861136311594053,
504 . -.861136311594053,-.339981034584856,
505 . -.861136311594053, .339981034584856,
506 . -.861136311594053, .861136311594053,
507 . -.339981034584856,-.861136311594053,
508 . -.339981034584856,-.339981034584856,
509 . -.339981034584856, .339981034584856,
510 . -.339981034584856, .861136311594053,
511 . .339981034584856,-.861136311594053,
512 . .339981034584856,-.339981034584856,
513 . .339981034584856, .339981034584856,
514 . .339981034584856, .861136311594053,
515 . .861136311594053,-.861136311594053,
516 . .861136311594053,-.339981034584856,
517 . .861136311594053, .339981034584856,
518 . .861136311594053, .861136311594053/
520 wpg4(1) =.652145154862546 * .652145154862546
521 wpg4(2) =.652145154862546 * .347854845137454
522 wpg4(3) =.652145154862546 * .347854845137454
523 wpg4(4) =.652145154862546 * .652145154862546
524 wpg4(5) =.347854845137454 * .652145154862546
525 wpg4(6) =.347854845137454 * .347854845137454
526 wpg4(7) =.347854845137454 * .347854845137454
527 wpg4(8) =.347854845137454 *
528 wpg4(9) =.347854845137454 * .652145154862546
529 wpg4(10)=.347854845137454 * .347854845137454
530 wpg4(11)=.347854845137454 * .347854845137454
531 wpg4(12)=.347854845137454 * .652145154862546
532 wpg4(13)=.652145154862546 * .652145154862546
533 wpg4(14)=.652145154862546 * .347854845137454
534 wpg4(15)=.652145154862546 * .347854845137454
535 wpg4(16)=.652145154862546 * .652145154862546
540 r2=(x0-xs)**2+(y0-ys)**2+(z0-zs)**2
542 IF (r2>hundred*d2)
THEN
545 ELSEIF (r2>twenty5*d2)
THEN
548 ELSEIF (r2>four*d2)
THEN
567 xg=val1*x1+val2*x2+val3*x3
568 yg=val1*y1+val2*y2+val3*y3
569 zg=val1*z1+val2*z2+val3*z3
570 r2=(xg-xs)**2+(yg-ys)**2+(zg-zs)**2
572 valphi=fourth/pi/sqrt(r2)
573 rval(1)=rval(1)+half*w*valphi*jac
586 SUBROUTINE glbem(X1 , Y1 , Z1 , X2 , Y2 ,
587 . Z2 , X3 , Y3 , Z3 , X0 ,
588 . Y0 , Z0 , TELNOR, HBEM, GBEM,
589 . TBEMTG, IBUF, X , N1 , N2 ,
590 . N3 , IELS, NN , JAC , NEL )
594#include "implicit_f.inc"
598 INTEGER TBEMTG(3,*), IBUF(*), N1, N2, N3, IELS, NN, NEL
600 . X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, X0, Y0, Z0,
601 . telnor(3,*), x(3,*), jac, hbem(nn,*), gbem(nn,*)
605 INTEGER NPG, IAD, JBID, NBID, IDEG, IAD2, IP, IEL, NN1, NN2, NN3
607 . PG(50), WPG(25), W, KSIP, ETAP, VAL1, VAL2, VAL3, XP,
608 . YP, ZP, CP, XX1, YY1, ZZ1, XX2, YY2, ZZ2, XX3, YY3, ZZ3,
609 . XX4, YY4, ZZ4, , YY5, ZZ5, XX6, YY6, ZZ6, XX0, YY0,
610 . ZZ0, NRX, NRY, NRZ, D2, RVL(6), RVLH(3), RVLG
613 DATA pg /.33333333,.33333333,
614 . .33333333,.33333333,
615 . .60000000,.20000000,
616 . .20000000,.60000000,
617 . .20000000,.20000000,
618 . .33333333,.33333333,
619 . .79742699,.10128651,
620 . .10128651,.79742699,
621 . .10128651,.10128651,
622 . .05971587,.47014206,
623 . .47014206,.05971587,
624 . .47014206,.47014206,
625 . .06513010,.06513010,
627 . .06513010,.86973979,
628 . .31286550,.04869031,
629 . .63844419,.31286550,
630 . .04869031,.63844419,
631 . .63844419,.04869031,
632 . .31286550,.63844419,
633 . .04869031,.31286550,
634 . .26034597,.26034597,
635 . .47930807,.26034597,
636 . .26034597,.47930807,
637 . .33333333,.33333333/
638 DATA wpg /1.00000000,
639 . -.56250000,.52083333,
640 . .52083333,.52083333,
641 . .22500000,.12593918,
642 . .12593918,.12593918,
643 . .13239415,.13239415,
645 . .05334724,.05334724,
646 . .05334724,.07711376,
647 . .07711376,.07711376,
648 . .07711376,.07711376,
649 . .07711376,.17561526,
650 . .17561526,.17561526,
667 xp=val1*x1+val2*x2+val3*x3
668 yp=val1*y1+val2*y2+val3*y3
669 zp=val1*z1+val2*z2+val3*z3
688 CALL intanl(xx1 , yy1 , zz1, xx2, yy2,
689 . zz2 , xx3 , yy3, zz3, xp ,
690 . yp , zp , nrx, nry, nrz,
692 hbem(n1,nn1)=hbem(n1,nn1)+w*val1*rvlh(1)*jac
693 hbem(n1,nn2)=hbem(n1,nn2)+w*val1*rvlh(2)*jac
694 hbem(n1,nn3)=hbem(n1,nn3)+w*val1*rvlh(3)*jac
695 hbem(n2,nn1)=hbem(n2,nn1)+w*val2*rvlh(1)*jac
696 hbem(n2,nn2)=hbem(n2,nn2)+w*val2*rvlh(2)*jac
697 hbem(n2,nn3)=hbem(n2,nn3)+w*val2*rvlh(3)*jac
698 hbem(n3,nn1)=hbem(n3,nn1)+w*val3*rvlh(1)*jac
699 hbem(n3,nn2)=hbem(n3,nn2)+w*val3*rvlh(2)*jac
700 hbem(n3,nn3)=hbem(n3,nn3)+w*val3*rvlh(3)*jac
701 cp=cp-rvlh(1)-rvlh(2)-rvlh(3)
703 gbem(n1,iel)=gbem(n1,iel)+w*val1*rvlg*jac
704 gbem(n2,iel)=gbem(n2,iel)+w*val2*rvlg*jac
705 gbem(n3,iel)=gbem(n3,iel)+w*val3*rvlg*jac
706 gbem(n1,nel+1)=gbem(n1,nel+1)+w*val1*rvlg*jac
707 gbem(n2,nel+1)=gbem(n2,nel+1)+w*val2*rvlg*jac
708 gbem(n3,nel+1)=gbem(n3,nel+1)+w*val3*rvlg*jac
710 hbem(n1,n1)=hbem(n1,n1)+w*cp*val1*val1*jac
711 hbem(n1,n2)=hbem(n1,n2)+w*cp*val1*val2*jac
712 hbem(n1,n3)=hbem(n1,n3)+w*cp*val1*val3*jac
713 hbem(n2,n1)=hbem(n2,n1)+w*cp*val2*val1*jac
714 hbem(n2,n2)=hbem(n2,n2)+w*cp*val2*val2*jac
715 hbem(n2,n3)=hbem(n2,n3)+w*cp*val2*val3*jac
716 hbem(n3,n1)=hbem(n3,n1)+w*cp*val3*val1*jac
717 hbem(n3,n2)=hbem(n3,n2)+w*cp*val3*val2*jac
718 hbem(n3,n3)=hbem(n3,n3)+w*cp*val3*val3*jac
729 SUBROUTINE intanl(X1 , Y1 , Z1 , X2 , Y2 ,
730 . Z2 , X3 , Y3 , Z3 , XS ,
731 . YS , ZS , NRX, NRY, NRZ,
736#include "implicit_f.inc"
741 . x1, y1, z1, x2, y2, z2, x3, y3, z3, xs, ys, zs,
742 . nrx, nry, nrz, rvlh(*), rvlg
748 . vx1, vy1, vz1, vx2, vy2, vz2, s1, s12, s2, nr1, nr2,
749 . x0, y0, z0, ksi(4), eta(4), dksi(3), deta(3), r(4),
750 . xls, yls, zls, xc, yc, s(3), v, fln, arg, i1, i2, i3,
751 . ss11, ss12, ss22, delta, alpha1, beta1, gama1,
alpha2,
752 . beta2, gama2, nx, ny, nz, area2, d2, l12, l22, l32,
753 . rx, ry, rz, rr, lm2
755 area2=sqrt(nrx**2+nry**2+nrz**2)
765 d2=(x0-xs)**2+(y0-ys)**2+(z0-zs)**2
766 l12=(x2-x1)**2+(y2-y1)**2+(z2-z1)**2
767 l22=(x3-x2)**2+(y3-y2)**2+(z3-z2)**2
768 l32=(x1-x3)**2+(y1-y3)**2+(z1-z3)**2
779 s1=vx1*vx1+vy1*vy1+vz1*vz1
780 s12=vx1*vx2+vy1*vy2+vz1*vz2
787 s2=vx2*vx2+vy2*vy2+vz2*vz2
796 xls=(xs-x0)*vx1+(ys-y0)*vy1+(zs-z0)*vz1
797 yls=(xs-x0)*vx2+(ys-y0)*vy2+(zs-z0
798 zls=(xs-x0)*nx+(ys-y0)*ny+(zs-z0)*nz
799 ksi(1)=(x1-x0)*vx1+(y1-y0)*vy1+(z1-z0)*vz1
801 ksi(2)=(x2-x0)*vx1+(y2-y0)*vy1+(z2-z0)*vz1
802 eta(2)=(x2-x0)*vx2+(y2-y0)*vy2+(z2-z0)*vz2
803 ksi(3)=(x3-x0)*vx1+(y3-y0)*vy1+(z3-z0)*vz1
804 eta(3)=(x3-x0)*vx2+(y3-y0)*vy2+(z3-z0)*vz2
807 dksi(1)=ksi(2)-ksi(1)
808 dksi(2)=ksi(3)-ksi(2)
809 dksi(3)=ksi(1)-ksi(3)
810 deta(1)=eta(2)-eta(1)
811 deta(2)=eta(3)-eta(2)
812 deta(3)=eta(1)-eta(3)
813 r(1)=sqrt((xs-x1)**2+(ys-y1)**2+(zs-z1)**2)
814 r(2)=sqrt((xs-x2)**2+(ys-y2)**2+(zs-z2)**2)
815 r(3)=sqrt((xs-x3)**2+(ys-y3)**2+(zs-z3)**2)
828 . +atan((deta(i)*((xls-ksi(i))**2+zls**2)
829 . -dksi(i)*(xls-ksi(i))*(yls-eta(i)))/(r(i)*zls*dksi(i)))
830 . -atan((deta(i)*((xls-ksi(i+1))**2+zls**2)
831 . -dksi(i)*(xls-ksi(i+1))*(yls-eta(i+1)))/(r(i+1)*zls*dksi(i)))
840 v=xc*deta(i)/s(i)-yc*dksi(i)/s(i)
841 arg=(r(i)+r(i+1)-s(i))/(r(i)+r(i+1)+s(i))
856 arg=(r(i)+r(i+1)-s(i))/(r(i)+r(i+1)+s(i))
859 i2=i2+zls*fln*deta(i)/s(i)
860 i3=i3-zls*fln*dksi(i)/s(i)
865 .(ksi(2)-ksi(1))*(ksi(2)-ksi(1))+(eta(2)-eta(1))*(eta(2)-eta(1))
867 .(ksi(3)-ksi(1))*(ksi(3)-ksi(1))+(eta(3)-eta(1))*(eta(3)-eta(1))
869 .(ksi(2)-ksi(1))*(ksi(3)-ksi(1))+(eta(2)-eta(1))*(eta(3)-eta(1))
870 delta=ss11*ss22-ss12*ss12
871 alpha1=(ss22*(ksi(2)-ksi(1))-ss12*(ksi(3)-ksi(1)))/delta
872 beta1=(ss22*(eta(2)-eta(1))-ss12*(eta(3)-eta(1)))/delta
873 gama1=(ss12*(ksi(1)*(ksi(3)-ksi(1))+eta(1)*(eta(3)-eta(1)))
874 . -ss22*(ksi(1)*(ksi(2)-ksi(1))+eta(1)*(eta(2)-eta(1))))
876 alpha2=(ss11*(ksi(3)-ksi(1))-ss12*(ksi(2)-ksi(1)))/delta
877 beta2=(ss11*(eta(3)-eta(1))-ss12*(eta(2)-eta(1)))/delta
878 gama2=(ss12*(ksi(1)*(ksi(2)-ksi(1))+eta(1)*(eta(2)-eta(1)))
879 . -ss11*(ksi(1)*(ksi(3)-ksi
881 rvlh(1)=(1.d0-gama1-gama2)*i1-(alpha1+
alpha2)*i2
883 rvlh(2)=alpha1*i2+beta1*i3+gama1*i1
884 rvlh(3)=
alpha2*i2+beta2*i3+gama2*i1
885 rvlh(1)=-rvlh(1)*fourth/pi
886 rvlh(2)=-rvlh(2)*fourth/pi
887 rvlh(3)=-rvlh(3)*fourth/pi
subroutine glbem(x1, y1, z1, x2, y2, z2, x3, y3, z3, x0, y0, z0, telnor, hbem, gbem, tbemtg, ibuf, x, n1, n2, n3, iels, nn, jac, nel)