29 1 JLT ,IEDGE ,CAND_S,CAND_M,
31 3 XXS1 ,XXS2 ,XYS1 ,XYS2 ,
32 4 XZS1 ,XZS2 ,XXM1 ,XXM2 ,XYM1 ,
33 5 XYM2 ,XZM1 ,XZM2 ,GAPVE ,PENE ,
34 6 EX ,EY ,EZ ,FX ,FY ,
35 7 FZ ,LEDGE ,IRECT ,X ,ITAB ,
36 8 E2S_NOD_NORMAL,ADMSR)
40#include "implicit_f.inc"
50 INTEGER CAND_S(*), CAND_M(*), IRECT(4,*), LEDGE(NLEDGE,*), ITAB(*),
51 . N1(MVSIZ),N2(MVSIZ),M1(4,MVSIZ),M2(4,MVSIZ), ADMSR(4,*)
53 . XXS1(*), XXS2(*), XYS1(*), XYS2(*), XZS1(*) , XZS2(*),
54 . XXM1(4,*), (4,*) , XYM1(4,*), XYM2(4,*), XZM1(4,*), XZM2(4,*),
55 . GAPVE(*), (4,*), X(3,*),
56 . EX(4,MVSIZ), EY(4,MVSIZ), EZ(4,MVSIZ),
57 . fx(mvsiz), fy(mvsiz) , fz(mvsiz)
58 real*4 e2s_nod_normal(3,*)
62 INTEGER I, IA, JA, IB, , SOL_EDGE, SH_EDGE, K, NJNDX, N4A,
63 . EJ, I1, I2, I3, I4, I0, IT,IAM,IAS,JAS,ISENS,
64 . IX1(MVSIZ), IX2(MVSIZ), IX3(MVSIZ), IX4(MVSIZ),
65 . JNDX(MVSIZ), I4A(MVSIZ)
67 . h1s(4,mvsiz),h2s(4,mvsiz),h1m(4,mvsiz),h2m(4,mvsiz),
68 . nx(4,mvsiz),ny(4,mvsiz),nz(4,mvsiz),nn(4,mvsiz),
69 . xs12(4,mvsiz),ys12(4,mvsiz),zs12(4,mvsiz),xm12(4,mvsiz),
70 . ym12(4,mvsiz),zm12(4,mvsiz),xaa,xbb,xs2(4,mvsiz),xm2(4,mvsiz),
71 . xsm,xs2m2,ys2,ym2,ysm,ys2m2,zs2,zm2,zsm,zs2m2,
72 . xx,yy,zz,als,alm,det,aaa,bbb,p1,p2
74 . xa0(mvsiz),xa1(mvsiz),xa2(mvsiz),xa3(mvsiz),xa4(mvsiz),
75 . ya0(mvsiz),ya1(mvsiz),ya2(mvsiz),ya3(mvsiz),ya4(mvsiz),
76 . za0(mvsiz),za1(mvsiz),za2(mvsiz),za3(mvsiz),za4(mvsiz),
77 . xa(5,mvsiz),ya(5,mvsiz),za(5,mvsiz)
79 . x0a(mvsiz,4),y0a(mvsiz,4
80 . xna(mvsiz,4), yna(mvsiz,4), zna(mvsiz,4), xnb(mvsiz,4), ynb(mvsiz,4), znb(mvsiz,4), ps,
81 . xs, ys, zs, xm, ym, zm, da, db, cnvx, da1, db1, da2, db2,
82 . rzero, run, rdix, rem30, rep30,
84 . xi0,yi0,zi0,xi1,yi1,zi1,xi2,yi2,zi2,
85 . sx1,sy1,sz1,sx2,sy2,sz2,
86 . lba(mvsiz,4),lca(mvsiz,4),
87 . nncx,nncy,nncz,nncp,dist,nnnn,pedg,nedg,
89 real*4 nnm11(3),nnm22(3),nns11(3),nns22(3)
91 DATA NTRIA/1,2,4,2,4,1,0,0,0,4,1,2/
144 IF(ej==3.AND.m1(ej,i)==m2(ej,i))
THEN
149 xm12(ej,i) = xxm2(ej,i)-xxm1(ej,i)
150 ym12(ej,i) = xym2(ej,i)-xym1(ej,i)
151 zm12(ej,i) = xzm2(ej,i)-xzm1(ej,i)
152 xm2(ej,i) = xm12(ej,i)*xm12(ej,i) + ym12(ej,i)*ym12(ej,i) + zm12(ej,i)*zm12(ej,i)
154 xs12(ej,i) = xxs2(i)-xxs1(i)
155 ys12(ej,i) = xys2(i)-xys1(i)
156 zs12(ej,i) = xzs2(i)-xzs1(i)
157 xs2(ej,i) = xs12(ej,i)*xs12(ej,i) + ys12(ej,i)*ys12(ej,i) + zs12(ej,i
158 xsm = - (xs12(ej,i)*xm12(ej,i) + ys12(ej,i)*ym12(ej,i) + zs12(ej,i)*zm12(ej,i))
159 xs2m2 = xxm2(ej,i)-xxs2(i)
160 ys2m2 = xym2(ej,i)-xys2(i)
161 zs2m2 = xzm2(ej,i)-xzs2(i)
163 xaa = xs12(ej,i)*xs2m2 + ys12(ej,i)*ys2m2 + zs12(ej,i)*zs2m2
164 xbb = -xm12(ej,i)*xs2m2 - ym12(ej,i)*ys2m2 - zm12(ej,i)*zs2m2
165 det = xm2(ej,i)*xs2(ej,i) - xsm*xsm
168 h1m(ej,i) = (xaa*xsm-xbb*xs2(ej,i)) / det
169 IF(h1m(ej,i) < -em03 .OR. h1m(ej,i) > onep03)
THEN
174 xs2(ej,i) =
max(xs2(ej,i),em20)
175 xm2(ej,i) =
max(xm2(ej,i),em20)
176 h1m(ej,i)=
min(one,
max(zero,h1m(ej,i)))
177 h1s(ej,i) = -(xaa + h1m(ej,i)*xsm) / xs2(ej,i)
178 IF(h1s(ej,i) < -em03 .OR. h1s(ej,i) > onep03)
THEN
183 h1s(ej,i)=
min(one,
max(zero,h1s(ej,i)))
184 h1m(ej,i) = -(xbb + h1s(ej,i)*xsm) / xm2(ej,i)
185 h1m(ej,i)=
min(one,
max(zero,h1m(ej,i)))
187 h2s(ej,i) = one -h1s(ej,i)
188 h2m(ej,i) = one -h1m(ej,i)
192 nx(ej,i) = h1s(ej,i)*xxs1(i) + h2s(ej,i)*xxs2(i)
193 . - h1m(ej,i)*xxm1(ej,i) - h2m(ej,i)*xxm2(ej,i)
194 ny(ej,i) = h1s(ej,i)*xys1(i) + h2s(ej,i)*xys2(i)
195 . - h1m(ej,i)*xym1(ej,i) - h2m(ej,i)*xym2(ej,i)
196 nz(ej,i) = h1s(ej,i)*xzs1(i) + h2s(ej,i)*xzs2(i)
197 . - h1m(ej,i)*xzm1(ej,i) - h2m(ej,i)*xzm2(ej,i)
199 nn(ej,i) = sqrt(nx(ej,i)**2 + ny(ej,i)**2 + nz(ej,i)**2)
204 pene(ej,i) = nn(ej,i)
210 sh_edge =iedge-10*sol_edge
237 IF(pene(1,i)+pene(2,i)+pene(3,i)+pene(4,i)==zero) cycle
239 IF(iabs(ledge(7,cand_s(i)))/=1)cycle
246 ia=ledge(1,cand_s(i))
247 ja=ledge(2,cand_s(i))
248 ib=ledge(3,cand_s(i))
249 jb=ledge(4,cand_s(i))
250 IF(ia==0 .OR. ib==0)
THEN
251 print *,
' internal error - i25dst3e'
257 IF(pene(ej,i)==zero) cycle
268 pedg = xm12(ej,i) *xs12(ej,i) + ym12(ej,i) *ys12(ej,i) + zm12(ej,i) *zs12(ej,i)
269 nedg = sqrt(xm2(ej,i)) * sqrt(xs2(ej,i))
270 IF(abs(pedg)>zep999*nedg)
THEN
275 nncx = ys12(ej,i)*zm12(ej,i)- zs12(ej,i)*ym12(ej,i)
276 nncy = zs12(ej,i)*xm12(ej,i)- zm12(ej,i)*xs12(ej,i)
277 nncz = xs12(ej,i)*ym12(ej,i)- ys12(ej,i)*xm12(ej,i)
279 nncp = sqrt(nncx*nncx+nncy*nncy+nncz*nncz)
282 nncx = nncx /
max(em30,nncp)
283 nncy = nncy /
max(em30,nncp)
284 nncz = nncz /
max(em30,nncp)
286 dist = nncx*nx(ej,i)+nncy*ny(ej,i)+nncz*nz(ej,i)
288 nx(ej,i) = nncx * dist
289 ny(ej,i) = nncy * dist
290 nz(ej,i) = nncz * dist
292 nn(ej,i)=sqrt(nx(ej,i)**2 + ny(ej,i)**2 + nz(ej,i)**2)
293 pene(ej,i) = nn(ej,i)
298 ias=ledge(1,cand_s(i))
299 jas=ledge(2,cand_s(i))
302 nnm11(1:3) = e2s_nod_normal(1:3,admsr(ej,iam))
303 nnm22(1:3) = e2s_nod_normal(1:3,admsr(mod(ej,4)+1,iam))
307 IF(irect(jas,ias)==n1(i).AND.irect(mod(jas,4)+1,ias)==n2(i))
THEN
309 ELSEIF(irect(jas,ias)==n2(i).AND.irect(mod(jas,4)+1,ias)==n1(i))
THEN
314 nns11(1:3) = e2s_nod_normal(1:3,admsr(jas,ias))
315 nns22(1:3) = e2s_nod_normal(1:3,admsr(mod(jas,4)+1,ias))
317 nns22(1:3) = e2s_nod_normal(1:3,admsr(jas,ias))
318 nns11(1:3) = e2s_nod_normal(1:3,admsr(mod(jas,4)+1,ias))
321 nm(1:3)=h1m(ej,i)*nnm11(1:3)+h2m(ej,i)*nnm22(1:3)
322 ns(1:3)=h1s(ej,i)*nns11(1:3)+h2s(ej,i)*nns22(1:3)
325 p1=-(nx(ej,i)*nm(1)+ny(ej,i)*nm(2)+nz(ej,i)*nm(3))
326 p2= nx(ej,i)*ns(1)+ny(ej,i)*ns(2)+nz(ej,i)*ns(3)
347 lba(1:jlt,1:4) = -one
348 lca(1:jlt,1:4) = zero
380 IF(ix3(i)/=ix4(i))
THEN
381 xa(5,i) = fourth*(xa(1,i)+xa(2,i)+xa(3,i)+xa(4,i))
382 ya(5,i) = fourth*(ya(1,i)+ya(2,i)+ya(3,i)+ya(4,i))
383 za(5,i) = fourth*(za(1,i)+za(2,i)+za(3,i)+za(4,i))
396 x0a(i,1) = xa(1,i) - xa(5,i)
397 y0a(i,1) = ya(1,i) - ya(5,i)
398 z0a(i,1) = za(1,i) - za(5,i)
400 x0a(i,2) = xa(2,i) - xa(5,i)
401 y0a(i,2) = ya(2,i) - ya(5,i)
402 z0a(i,2) = za(2,i) - za(5,i)
404 x0a(i,3) = xa(3,i) - xa(5,i)
405 y0a(i,3) = ya(3,i) - ya(5,i)
406 z0a(i,3) = za(3,i) - za(5,i)
408 x0a(i,4) = xa(4,i) - xa(5,i)
409 y0a(i,4) = ya(4,i) - ya(5,i)
410 z0a(i,4) = za(4,i) - za(5,i)
412 xna(i,1) = -(y0a(i,1)*z0a(i,2) - z0a(i,1)*y0a(i,2))
413 yna(i,1) = -(z0a(i,1)*x0a(i,2) - x0a(i,1)*z0a(i,2))
414 zna(i,1) = -(x0a(i,1)*y0a(i,2) - y0a(i,1)*x0a(i,2))
416 IF(ix3(i)/=ix4(i))
THEN
418 xna(i,2) = -(y0a(i,2)*z0a(i,3) - z0a(i,2)*y0a(i,3))
419 yna(i,2) = -(z0a(i,2)*x0a(i,3) - x0a(i,2)*z0a(i,3))
420 zna(i,2) = -(x0a(i,2)*y0a(i,3) - y0a(i,2)*x0a(i,3))
422 xna(i,3) = -(y0a(i,3)*z0a(i,4) - z0a(i,3)*y0a(i,4))
423 yna(i,3) = -(z0a(i,3)*x0a(i,4) - x0a(i,3)*z0a(i,4))
424 zna(i,3) = -(x0a(i,3)*y0a(i,4) - y0a(i,3)*x0a(i,4))
426 xna(i,4) = -(y0a(i,4)*z0a(i,1) - z0a(i,4)*y0a(i,1))
427 yna(i,4) = -(z0a(i,4)*x0a(i,1) - x0a(i,4)*z0a(i,1))
428 zna(i,4) = -(x0a(i,4)*y0a(i,1) - y0a(i,4)*x0a(i,1))
453 IF(iabs(ledge(7,cand_s(i)))==1)cycle
457 IF(pene(ej,i)==zero) cycle
459 IF(ix3(i)==ix4(i))
THEN
479 ps=xna(i,ej)*ex(ej,i)+yna(i,ej)*ey(ej,i)+zna(i,ej)*ez(ej,i)
480 xnb(i,ej) = -xna(i,ej)+two*ps*ex(ej,i)
481 ynb(i,ej) = -yna(i,ej)+two*ps*ey(ej,i)
482 znb(i,ej) = -zna(i,ej)+two*ps*ez(ej,i)
484 xs = h1s(ej,i)*xxs1(i) + h2s(ej,i)*xxs2(i)
485 ys = h1s(ej,i)*xys1(i) + h2s(ej,i)*xys2(i)
486 zs = h1s(ej,i)*xzs1(i) + h2s(ej
487 xm = h1m(ej,i)*xxm1(ej,i) + h2m(ej,i)*xxm2(ej,i)
488 ym = h1m(ej,i)*xym1(ej,i) + h2m(ej,i)*xym2(ej,i)
489 zm = h1m(ej,i)*xzm1(ej,i) + h2m(ej,i)*xzm2(ej,i)
490 da = (xs-xm)*xna(i,ej)+(ys-ym)*yna(i,ej)+(zs-zm)*zna(i,ej)
491 db = (xs-xm)*xnb(i,ej)+(ys-ym)*ynb(i,ej)+(zs-zm)*znb(i,ej)
493 cnvx= (xa(i0,i)-xa(i1,i))*xnb(i,ej)
494 . +(ya(i0,i)-ya(i1,i))*ynb(i,ej)
495 . +(za(i0,i)-za(i1,i))*znb(i,ej)
497 IF(da <= zero .OR. db <= zero)
THEN
501 IF(da <= zero .AND. db <= zero) pene(ej,i)=zero
519 IF(ix3(i)/=ix4(i))
THEN
555#include "vectorize.inc"
564 da1 = (xxs1(i)-xa(5,i))*xna(i,1)+(xys1(i)-ya(5,i))*yna(i,1)+(xzs1(i)-za(5,i))*zna(i,1)
565 da2 = (xxs2(i)-xa(5,i))*xna(i,1)+(xys2(i)-ya(5,i))*yna(i,1)+(xzs2(i)-za(5,i))*zna(i,1)
569 IF(da1*da2 <= zero)
THEN
570 alp=-da2/sign(
max(em20,abs(da1-da2)),da1-da2)
571 xxs=alp*xxs1(i)+(one-alp)*xxs2(i)
572 xys=alp*xys1(i)+(one-alp)*xys2(i)
573 xzs=alp*xzs1(i)+(one-alp)*xzs2(i)
587 sx1 = yi0*zi1 - zi0*yi1
588 sy1 = zi0*xi1 - xi0*zi1
589 sz1 = xi0*yi1 - yi0*xi1
591 sx2 = yi0*zi2 - zi0*yi2
592 sy2 = zi0*xi2 - xi0*zi2
593 sz2 = xi0*yi2 - yi0*xi2
595 aaa=one/
max(em30,xna(i,1)*xna(i,1)+yna(i,1)*yna(i,1)+zna(i,1)*zna(i,1))
596 lba(i,1) = -(-(xna(i,1)*sx2 + yna(i,1)*sy2 + zna(i,1)*sz2))*aaa
597 lca(i,1) = -( (xna(i,1)*sx1 + yna(i,1)*sy1 + zna(i,1)*sz1))*aaa
606#include
"vectorize.inc"
610 da1 = (xxs1(i)-xa(5,i))*xna(i,2)+(xys1(i)-ya(5,i))*yna(i
611 da2 = (xxs2(i)-xa(5,i))*xna(i,2)+(xys2(i)-ya(5,i))*yna(i,2)+(xzs2(i)-za(5,i))*zna(i,2)
615 IF(da1*da2 <= zero)
THEN
616 alp=-da2/sign(
max(em20,abs(da1-da2)),da1-da2)
617 xxs=alp*xxs1(i)+(one-alp)*xxs2(i)
618 xys=alp*xys1(i)+(one-alp)*xys2(i)
619 xzs=alp*xzs1(i)+(one-alp)*xzs2(i)
633 sx1 = yi0*zi1 - zi0*yi1
634 sy1 = zi0*xi1 - xi0*zi1
635 sz1 = xi0*yi1 - yi0*xi1
637 sx2 = yi0*zi2 - zi0*yi2
638 sy2 = zi0*xi2 - xi0*zi2
639 sz2 = xi0*yi2 - yi0*xi2
641 aaa=one/
max(em30,xna(i,2)*xna(i,2)+yna(i,2)*yna(i,2)+zna(i,2)*zna(i,2))
642 lba(i,2) = -(-(xna(i,2)*sx2 + yna(i,2)*sy2 + zna(i,2)*sz2))*aaa
643 lca(i,2) = -( (xna(i,2)*sx1 + yna(i,2)*sy1 + zna(i,2)*sz1))*aaa
652#include "vectorize.inc"
656 da1 = (xxs1(i)-xa(5,i))*xna(i,3)+(xys1(i)-ya(5,i))*yna(i,3)+(xzs1(i)-za(5,i))*zna(i,3)
657 da2 = (xxs2(i)-xa(5,i))*xna(i,3)+(xys2(i)-ya(5,i))*yna(i,3)+(xzs2(i)-za(5,i))*zna(i,3)
661 IF(da1*da2 <= zero)
THEN
662 alp=-da2/sign(
max(em20,abs(da1-da2)),da1-da2)
663 xxs=alp*xxs1(i)+(one-alp)*xxs2(i)
664 xys=alp*xys1(i)+(one-alp)*xys2(i)
665 xzs=alp*xzs1(i)+(one-alp)*xzs2(i)
679 sx1 = yi0*zi1 - zi0*yi1
680 sy1 = zi0*xi1 - xi0*zi1
681 sz1 = xi0*yi1 - yi0*xi1
683 sx2 = yi0*zi2 - zi0*yi2
684 sy2 = zi0*xi2 - xi0*zi2
685 sz2 = xi0*yi2 - yi0*xi2
687 aaa=one/
max(em30,xna(i,3)*xna(i,3)+yna(i,3)*yna(i,3)+zna(i,3)*zna(i,3))
688 lba(i,3) = -(-(xna(i,3)*sx2 + yna(i,3)*sy2 + zna(i,3)*sz2))*aaa
689 lca(i,3) = -( (xna(i,3)*sx1 + yna(i,3)*sy1 + zna(i,3)*sz1))*aaa
698#include "vectorize.inc"
702 da1 = (xxs1(i)-xa(5,i))*xna(i,4)+(xys1(i)-ya(5,i))*yna(i,4)+(xzs1(i)-za(5,i))*zna(i,4)
703 da2 = (xxs2(i)-xa(5,i))*xna(i,4)+(xys2(i)-ya(5,i))*yna(i,4)+(xzs2(i)-za(5,i))*zna(i,4)
707 IF(da1*da2 <= zero)
THEN
708 alp=-da2/sign(
max(em20,abs(da1-da2)),da1-da2)
709 xxs=alp*xxs1(i)+(one-alp)*xxs2(i)
710 xys=alp*xys1(i)+(one-alp)*xys2(i)
711 xzs=alp*xzs1(i)+(one-alp)*xzs2(i)
725 sx1 = yi0*zi1 - zi0*yi1
726 sy1 = zi0*xi1 - xi0*zi1
727 sz1 = xi0*yi1 - yi0*xi1
729 sx2 = yi0*zi2 - zi0*yi2
730 sy2 = zi0*xi2 - xi0*zi2
731 sz2 = xi0*yi2 - yi0*xi2
733 aaa=one/
max(em30,xna(i,4)*xna(i,4)+yna(i,4)*yna(i,4)+zna(i,4)*zna(i,4))
734 lba(i,4) = -(-(xna(i,4)*sx2 + yna(i,4)*sy2 + zna(i,4)*sz2))*aaa
735 lca(i,4) = -( (xna(i,4)*sx1 + yna(i,4)*sy1 + zna(i,4)*sz1))*aaa
745#include "vectorize.inc"
753 IF(lba(i,1) < -em01 .OR. lca(i,1) < -em01 .OR. lba(i,1)+lca(i,1) > onep01)
755 IF(lba(i,2) < -em01 .OR. lca(i,2) < -em01 .OR. lba(i,2)+lca(i,2) > onep01)
757 IF(lba(i,3) < -em01 .OR. lca(i,3) < -em01 .OR. lba(i,3)+lca(i,3) > onep01)
759 IF(lba(i,4) < -em01 .OR. lca(i,4) < -em01 .OR. lba(i,4)+lca(i,4) > onep01)