28 SUBROUTINE horiedge(IPOLY , RPOLY , NX , NY , NZ ,
29 . NBNEDGE, INEDGE, RNEDGE, X0 , Y0 ,
30 . Z0 , INZ , NNS3 , NREF, AREF,
35#include "implicit_f.inc"
39 INTEGER IPOLY(*), NBNEDGE, INEDGE(6,*), INZ, NNS3, NREF(2,*), NNSP
41 . RPOLY(*), NX, NY, NZ, RNEDGE(6,*), X0, Y0, Z0, AREF(4,*)
47 . X1, Y1, Z1, X2, Y2, Z2, ZL1, ZL2, TOLE, DD
62 x2=rpoly(4+3*(ii-1)+1)
63 y2=rpoly(4+3*(ii-1)+2)
64 z2=rpoly(4+3*(ii-1)+3)
65 dd=(x1-x2)**2+(y1-y2)**2+(z1-z2)**2
66 zl1=(x1-x0)*nx+(y1-y0)*ny+(z1-z0)*nz
67 zl2=(x2-x0)*nx+(y2-y0)*ny+(z2-z0)*nz
68 IF (zl1==zero.AND.zl2==zero.AND.dd>=tole)
THEN
72 nref(1,nnsp)=ipoly(6+i)
73 nref(2,nnsp)=ipoly(6+ii)
79 nref(1,nnsp)=ipoly(6+i)
80 nref(2,nnsp)=ipoly(6+ii)
86 inedge(1,nbnedge)=ipoly(1)
87 inedge(2,nbnedge)=nns3+nnsp-1
88 inedge(3,nbnedge)=nns3+nnsp
89 inedge(4,nbnedge)=ipoly(3)
90 inedge(5,nbnedge)=ipoly(4)
93 rnedge(1,nbnedge)=rpoly(4+3*(i-1)+1)
94 rnedge(2,nbnedge)=rpoly(4+3*(i-1)+2)
95 rnedge(3,nbnedge)=rpoly(4+3*(i-1)+3)
96 rnedge(4,nbnedge)=rpoly(4+3*(ii-1)+1)
97 rnedge(5,nbnedge)=rpoly(4+3*(ii-1)+2)
98 rnedge(6,nbnedge)=rpoly(4+3*(ii-1)+3)
109 SUBROUTINE horipoly(INEDGE, RNEDGE, LEDGE , NEDGE, IPOLY,
110 . RPOLY , IZ , IELNOD, NPOLY, NX ,
111 . NY , NZ , INZ , IBRIC, NEL ,
116#include "implicit_f.inc"
120 INTEGER INEDGE(6,*), LEDGE(*), NEDGE, IPOLY(6+2*NEDGE+1+NEDGE,*),
121 . IZ(3,*), (NEDGE,*), NPOLY, INZ, IBRIC, NEL,
124 . RNEDGE(6,*), RPOLY(4+6*NEDGE+3*NEDGE,*), NX, NY, NZ
128 INTEGER NN, I, II, TNOD(2*NEDGE), TSEG(3,NEDGE), NN_OLD, JFOUND,
129 . j, jj, redir1(2*nedge), redir2(2*nedge), itag(2*nedge),
130 . itagseg(nedge+1), istop, iclose, n1, n2, in, nnp,
131 . poly(2*nedge,nedge), iseg, lenpoly(nedge), ifound,
132 . iadhol(nedge), nhol, k, kk, ipout, m, mm, nsec, ksmin,
133 . nedge_old, tseg_old(3,nedge), redir(nedge), jseg,
134 . jtagseg(nedge), jtag(2*nedge)
136 . tole, xnod(3,2*nedge), xx1, yy1, zz1, xx2, yy2, zz2,
137 . dd, xloc(2,nedge), xsec(nedge), phol(3,nedge),
alpha,
138 . x1, y1, z1, vx1, vy1, vz1, vx2, vy2, vz2, nr1, nr2,
139 . ss, vvx, vvy, vvz, ss1, x2, y2, z2, ylmin, ylmax, xsmin1,
140 . xsmin2, xx, yy, zz, ylsec, xs, ys, lmax, ll
155 tnod(nn)=inedge(2,ii)
156 xnod(1,nn)=rnedge(1,ii)
157 xnod(2,nn)=rnedge(2,ii)
158 xnod(3,nn)=rnedge(3,ii)
161 tnod(nn)=inedge(3,ii)
162 xnod(1,nn)=rnedge(4,ii)
163 xnod(2,nn)=rnedge(5,ii)
164 xnod(3,nn)=rnedge(6,ii)
166 tseg(3,i)=inedge(1,ii)
168 IF(inedge(1,ii)==1 .AND. tagela(jj) > nel)
THEN
171 ll=(rnedge(1,ii)-rnedge(4,ii))**2+
172 . (rnedge(2,ii)-rnedge(5,ii))**2+
173 . (rnedge(3,ii)-rnedge(6,ii))**2
194 dd=sqrt((xx1-xx2)**2+(yy1-yy2)**2+(zz1-zz2)**2)
195 IF (dd<=tole) jfound=j
216 tseg_old(1,i)=tseg(1,i)
217 tseg_old(2,i)=tseg(2,i)
218 tseg_old(3,i)=tseg(3,i)
221 IF (tseg_old(1,i)/=tseg_old(2,i))
THEN
223 tseg(1,nedge)=tseg_old(1,i)
224 tseg(2,nedge)=tseg_old(2,i)
225 tseg(3,nedge)=tseg_old(3,i)
231 IF(tseg(3,i) /= 3) cycle
236 IF(tseg(3,i) == 3) cycle
249 IF(tseg(3,j)==3) jtagseg(i)=2
252 jtag(n1)=jtag(n1)+jtagseg(i)
253 jtag(n2)=jtag(n2)+jtagseg(i)
260 DO WHILE (itagseg(i)==1.AND.i<=nedge)
278 poly(1,npoly)=redir1(n1)
284 IF (itagseg(i) == 1) cycle
290 IF (itag(n2) == 1) iclose=1
294 poly(nnp,npoly)=redir1(n1)
298 IF (itag(n1) == 1) iclose=1
302 poly(nnp,npoly)=redir1(n2)
313 jtagseg(i)=jtagseg(i)-itagseg(i)
317 IF(jtagseg(i) <= 0) itagseg(i)=1
320 jtag(i)=jtag(i)-2*itag(i)
324 IF(jtag(i) <= 0) itag(i)=1
332 ipoly(2,i)=lenpoly(i)
343 ipoly(6+j,i)=-tnod(jj)
344 rpoly(4+3*(j-1)+1,i)=xnod(1,jj)
345 rpoly(4+3*(j-1)+2,i)=xnod(2,jj)
346 rpoly(4+3*(j-1)+3,i)=xnod(3,jj)
349 ipoly(6+lenpoly(i)+1,i)=0
373 IF (k==lenpoly(i)) kk=1
374 xx1=rpoly(4+3*(k-1)+1,i)
375 yy1=rpoly(4+3*(k-1)+2,i)
376 zz1=rpoly(4+3*(k-1)+3,i)
377 xx2=rpoly(4+3*(kk-1)+1,i)
378 yy2=rpoly(4+3*(kk-1)+2,i)
379 zz2=rpoly(4+3*(kk-1)+3,i)
386 nr1=sqrt(vx1**2+vy1**2+vz1**2)
402 ss=vx1*vx2+vy1*vy2+vz1*vz2
406 ss1=nx*vvx+ny*vvy+nz*vvz
407 IF(ss < -one) ss=-one
416 IF (abs(
alpha)>=two*pi)
THEN
423 x2=rpoly(4+3*(k-1)+1,j)
424 y2=rpoly(4+3*(k-1)+2,j)
425 z2=rpoly(4+3*(k-1)+3,j)
429 IF (m==lenpoly(i)) mm=1
430 xx1=rpoly(4+3*(m-1)+1,i)
431 yy1=rpoly(4+3*(m-1)+2,i)
432 zz1=rpoly(4+3*(m-1)+3,i)
433 xx2=rpoly(4+3*(mm-1)+1,i)
434 yy2=rpoly(4+3*(mm-1)+2,i)
435 zz2=rpoly(4+3*(mm-1)+3,i)
442 nr1=sqrt(vx1**2+vy1**2+vz1**2)
443 nr2=sqrt(vx2**2+vy2**2+vz2**2)
458 ss=vx1*vx2+vy1*vy2+vz1*vz2
462 ss1=nx*vvx+ny*vvy+nz*vvz
463 IF(ss < -one) ss=-one
471 IF (abs(
alpha)<two*pi) ipout=1
480 iadhol(nhol)=lenpoly(i)
482 ipoly(6+iadhol(nhol)+k,i)=ipoly(6+k,j)
483 ielnod(iadhol(nhol)+k,i)=ielnod(k,j)
484 rpoly(4+3*iadhol(nhol)+3*(k-1)+1,i)=
485 . rpoly(4+3*(k-1)+1,j)
486 rpoly(4+3*iadhol(nhol)+3*(k-1)+2,i)=
487 . rpoly(4+3*(k-1)+2,j)
488 rpoly(4+3*iadhol(nhol)+3*(k-1)+3,i)=
489 . rpoly(4+3*(k-1)+3,j)
491 lenpoly(i)=lenpoly(i)+lenpoly(j)
493 vx1=rpoly(5,j)-rpoly(8,j)
494 vy1=rpoly(6,j)-rpoly(9,j)
495 vz1=rpoly(7,j)-rpoly(10,j)
496 ss=sqrt(vx1**2+vy1**2+vz1**2)
511 xx=rpoly(4+3*(k-1)+1,j)
512 yy=rpoly(4+3*(k-1)+2,j)
513 zz=rpoly(4+3*(k-1)+3,j)
517 xloc(1,k)=vvx*vx1+vvy*vy1+vvz*vz1
518 xloc(2,k)=vvx*vx2+vvy*vy2+vvz*vz2
519 IF (xloc(2,k)<ylmin) ylmin=xloc(2,k)
520 IF (xloc(2,k)>ylmax) ylmax=xloc(2,k)
522 ylsec=half*(ylmin+ylmax)
527 IF (k==lenpoly(j)) kk=1
532 IF (y1-y2/=zero)
THEN
533 alpha=(ylsec-y2)/(y1-y2)
550 IF (xsec(k)<xsmin1)
THEN
558 IF (xsec(k)<xsmin2) xsmin2=xsec(k)
561 xs=half*(xsmin1+xsmin2)
563 phol(1,nhol)=rpoly(5,j)+xs*vx1+ys*vx2
564 phol(2,nhol)=rpoly(6,j)+xs*vy1+ys*vy2
565 phol(3,nhol)=rpoly(7,j)+xs*vz1+ys*vz2
569 ipoly(2,i)=lenpoly(i)
570 ipoly(6+lenpoly(i)+1,i)=nhol
572 ipoly(6+lenpoly(i)+1+j,i)=iadhol(j)
573 rpoly(4+3*lenpoly(i)+3*(j-1)+1,i)=phol(1,j)
574 rpoly(4+3*lenpoly(i)+3*(j-1)+2,i)=phol(2,j)
575 rpoly(4+3*lenpoly(i)+3*(j-1)+3,i)=phol(3,j)