34 SUBROUTINE i20dst3(IGAP,GAP_SH,CAND_E,CAND_N,GAPV,
35 2 GAP ,GAP_S ,GAP_M ,GAPMAX,GAPMIN,
36 3 IRECT ,NLN ,NLG ,SOLIDN_NORMAL,NSV,
37 4 NBINFLG,TAG ,IX3 ,IX4 ,X1 ,
38 5 X2, X3, X4 ,Y1 ,Y2 ,
39 6 Y3, Y4, Z1 ,Z2 ,Z3 ,
40 7 Z4, XI, YI ,ZI ,X0 ,
41 8 Y0, Z0, NX1,NY1,NZ1,
42 9 NX2,NY2, NZ2,NX3,NY3,
43 1 NZ3,NX4, NY4,NZ4,P1 ,
44 2 P2 ,P3 ,P4 ,LB1,LB2,
45 3 LB3,LB4,LC1 ,LC2,LC3,
50#include "implicit_f.inc"
58 INTEGER IGAP,CAND_N(*),CAND_E(*),IRECT(4,*),NLN,NLG(NLN),NSV(*),
61 . GAP,GAP_SH(*),GAPV(MVSIZ),GAP_S(*),GAP_M(*),GAPMAX,GAPMIN,
63 INTEGER,
DIMENSION(MVSIZ),
INTENT(IN) :: IX3,IX4
64 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: X1,X2,X3,X4
65 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: Y1,Y2,Y3,Y4
66 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: Z1,Z2,Z3,Z4
67 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: XI,YI,ZI
68 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: X0,Y0,Z0
69 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: NX1,NY1,NZ1
70 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: nx2,ny2,nz2
71 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: nx3,ny3,nz3
72 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: nx4,ny4,nz4
73 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: p1,p2,p3,p4
74 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: lb1,lb2,lb3,lb4
75 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: lc1,lc2,lc3,lc4
79#include "vect07_c.inc"
83 INTEGER I,I1,I2,I3,I4,IG,IM,IS,IB1,IB2,IB3,IB4
86 . al1(mvsiz), al2(mvsiz), al3(mvsiz), al4(mvsiz),
87 . x01(mvsiz), x02(mvsiz), x03(mvsiz), x04(mvsiz),
88 . y01(mvsiz), y02(mvsiz), y03(mvsiz), y04(mvsiz),
89 . z01(mvsiz), z02(mvsiz), z03(mvsiz), z04(mvsiz),
90 . xi1(mvsiz), xi2(mvsiz), xi3(mvsiz), xi4(mvsiz),
91 . yi1(mvsiz), yi2(mvsiz), yi3(mvsiz), yi4(mvsiz),
92 . zi1(mvsiz), zi2(mvsiz), zi3(mvsiz), zi4(mvsiz),
93 . hlb1(mvsiz), hlc1(mvsiz), hlb2(mvsiz),hlc2(mvsiz),
94 . hlb3(mvsiz), hlc3(mvsiz), hlb4(mvsiz),hlc4(mvsiz)
96 . s2,a1,a2,a3,a4,d1,d2,d3,d4,
97 . x12,x23,x34,x41,xi0,sx1,sx2,sx3,sx4,sx0,sxi,
99 . z12,z23,z34,z41,zi0,sz1,sz2,sz3,sz4,sz0,szi,
100 . x10,y10,z10,x20,y20,z20,x30,y30,z30,x40,y40,z40,
101 . la, hla, aaa, unssqr3
103 INTEGER ,BITGET,BITSET
104 EXTERNAL BITUNSET,BITGET,BITSET
156 gapv(i) = gap_s(is) + gap_m(im)
157 gapv(i) =
min(gapv(i),gapmax)
158 gapv(i) = gapv(i) + gap_sh(im)*(one-em5)
159 gapv(i) =
max(gapmin,gapv(i))
169 ib1 = bitget(nbinflg(tag(i1)),7)
170 ib2 = bitget(nbinflg(tag(i2)),7)
171 ib3 = bitget(nbinflg(tag(i3)),7)
172 ib4 = bitget(nbinflg(tag(i4)),7)
174 IF(ib1+ib2+ib3+ib4 == 0)
THEN
175 IF(gap_sh(im)/= zero)
THEN
177 sx0=(y3(i)-y1(i))*(z4(i)-z2(i))-(z3(i)-z1(i))*(y4(i)-y2(i))
178 sy0=(z3(i)-z1(i))*(x4(i)-x2(i))-(x3(i)-x1(i))*(z4(i)-z2(i))
179 sz0=(x3(i)-x1(i))*(y4(i)-y2(i))-(y3(i)-y1(i))*(x4(i)-x2(i))
180 aaa = one / sqrt(
max(em20,sx0*sx0+sy0*sy0+sz0*sz0))
184 sxi = solidn_normal(1,ig)
185 syi = solidn_normal(2,ig)
186 szi = solidn_normal(3,ig)
187 aaa = sxi*sx0+syi*sy0+szi*sz0
194 sx1 = solidn_normal(1,i1)-sxi
195 sy1 = solidn_normal(2,i1)-syi
196 sz1 = solidn_normal(3,i1)-szi
197 aaa = one / sqrt(
max(em20,sx1*sx1+sy1*sy1+sz1*sz1))
201 aaa = sx0*sx1 + sy0*sy1 + sz0*sz1
202 IF(aaa > unssqr3)
THEN
209 aaa = gap_sh(im)*sqr3
214 sx2 = solidn_normal(1,i2)-sxi
215 sy2 = solidn_normal(2,i2)-syi
216 sz2 = solidn_normal(3,i2)-szi
217 aaa = one / sqrt(
max(em20,sx2*sx2+sy2*sy2+sz2*sz2))
221 aaa = sx0*sx2 + sy0*sy2 + sz0*sz2
222 IF(aaa > unssqr3)
THEN
229 aaa = gap_sh(im)*sqr3
234 sx3 = solidn_normal(1,i3)-sxi
235 sy3 = solidn_normal(2,i3)-syi
236 sz3 = solidn_normal(3,i3)-szi
237 aaa = one / sqrt(
max(em20,sx3*sx3+sy3*sy3+sz3*sz3))
241 aaa = sx0*sx3 + sy0*sy3 + sz0*sz3
242 IF(aaa > unssqr3)
THEN
249 aaa = gap_sh(im)*sqr3
254 sx4 = solidn_normal(1,i4)-sxi
255 sy4 = solidn_normal(2,i4)-syi
256 sz4 = solidn_normal(3,i4)-szi
257 aaa = one / sqrt(
max(em20,sx4*sx4+sy4*sy4+sz4*sz4))
261 aaa = sx0*sx4 + sy0*sy4 + sz0*sz4
262 IF(aaa > unssqr3)
THEN
269 aaa = gap_sh(im)*sqr3
298 IF(ib1 == 1 .and. ib2 == 1)
THEN
299 CALL i20cgap0(x10,y10,z10,x20,y20,z20,
300 . x30,y30,z30,x30,y30,z30,
301 . x1(i),y1(i),z1(i),x2(i),y2(i),z2(i),
302 . x3(i),y3(i),z3(i),x3(i),y3(i),z3(i),
305 IF(ib2 == 1 .and. ib3 == 1)
THEN
306 CALL i20cgap0(x20,y20,z20,x30,y30,z30,
307 . x10,y10,z10,x10,y10,z10,
308 . x2(i),y2(i),z2(i),x3(i),y3(i),z3(i),
309 . x1(i),y1(i),z1(i),x1(i),y1(i),z1(i),
312 IF(ib3 == 1 .and. ib1 == 1)
THEN
313 CALL i20cgap0(x30,y30,z30,x10,y10,z10,
314 . x20,y20,z20,x20,y20,z20,
315 . x3(i),y3(i),z3(i),x1(i),y1(i),z1(i),
316 . x2(i),y2(i),z2(i),x2(i),y2(i),z2(i),
319 IF(ib1 == 1 .and. ib2+ib3 == 0)
THEN
320 CALL i20cgap1(x10,y10,z10,x20,y20,z20,
322 . x1(i),y1(i),z1(i),x2(i),y2(i),z2(i),
323 . x3(i),y3(i),z3(i),gap_m(im))
325 IF(ib2 == 1 .and. ib3+ib1 == 0)
THEN
328 . x2(i),y2(i),z2(i),x3(i),y3(i),z3(i),
329 . x1(i),y1(i),z1(i),gap_m(im))
331 IF(ib3 == 1 .and. ib1+ib2 == 0)
THEN
332 CALL i20cgap1(x30,y30,z30,x10,y10,z10,
334 . x3(i),y3(i),z3(i),x1(i),y1(i
335 . x2(i),y2(i),z2(i),gap_m(im))
354 IF(ib1 == 1 .and. ib2 == 1)
THEN
355 CALL i20cgap0(x10,y10,z10,x20,y20,z20,
356 . x30,y30,z30,x40,y40,z40,
357 . x1(i),y1(i),z1(i),x2(i),y2(i),z2(i),
358 . x3(i),y3(i),z3(i),x4(i),y4(i),z4(i),
361 IF(ib2 == 1 .and. ib3 == 1)
THEN
362 CALL i20cgap0(x20,y20,z20,x30,y30,z30,
363 . x40,y40,z40,x10,y10,z10,
364 . x2(i),y2(i),z2(i),x3(i),y3(i),z3(i),
365 . x4(i),y4(i),z4(i),x1(i),y1(i),z1(i),
368 IF(ib3 == 1 .and. ib4 == 1)
THEN
369 CALL i20cgap0(x30,y30,z30,x40,y40,z40,
370 . x10,y10,z10,x20,y20,z20,
371 . x3(i),y3(i),z3(i),x4(i),y4(i),z4(i),
372 . x1(i),y1(i),z1(i),x2(i),y2(i),z2(i),
375 IF(ib4 == 1 .and. ib1 == 1)
THEN
376 CALL i20cgap0(x40,y40,z40,x10,y10,z10,
377 . x20,y20,z20,x30,y30,z30,
378 . x4(i),y4(i),z4(i),x1(i),y1(i),z1(i),
379 . x2(i),y2(i),z2(i),x3(i),y3(i),z3(i),
382 IF(ib1 == 1 .and. ib2+ib4 == 0)
THEN
383 CALL i20cgap1(x10,y10,z10,x20,y20,z20,
385 . x1(i),y1(i),z1(i),x2(i),y2(i),z2(i),
386 . x4(i),y4(i),z4(i),gap_m(im))
388 IF(ib2 == 1 .and. ib3+ib1 == 0)
THEN
389 CALL i20cgap1(x20,y20,z20,x30,y30,z30,
391 . x2(i),y2(i),z2(i),x3(i),y3(i),z3(i),
392 . x1(i),y1(i),z1(i),gap_m(im))
394 IF(ib3 == 1 .and. ib4+ib2 == 0)
THEN
395 CALL i20cgap1(x30,y30,z30,x40,y40,z40,
397 . x3(i),y3(i),z3(i),x4(i),y4(i),z4(i),
398 . x2(i),y2(i),z2(i),gap_m(im))
400 IF(ib4 == 1 .and. ib1+ib3 == 0)
THEN
401 CALL i20cgap1(x40,y40,z40,x10,y10,z10,
404 . x3(i),y3(i),z3(i),gap_m(im))
411 x0(i) = fourth*(x1(i)+x2(i)+x3(i)+x4(i))
412 y0(i) = fourth*(y1(i)+y2(i)+y3(i)+y4(i))
413 z0(i) = fourth*(z1(i)+z2(i)+z3(i)+z4(i))
417 IF(ix3(i)==ix4(i))
THEN
426 x01(i) = x1(i) - x0(i)
427 y01(i) = y1(i) - y0(i)
428 z01(i) = z1(i) - z0(i)
430 x02(i) = x2(i) - x0(i)
431 y02(i) = y2(i) - y0(i)
432 z02(i) = z2(i) - z0(i)
434 x03(i) = x3(i) - x0(i)
435 y03(i) = y3(i) - y0(i)
436 z03(i) = z3(i) - z0(i)
438 x04(i) = x4(i) - x0(i)
439 y04(i) = y4(i) - y0(i)
440 z04(i) = z4(i) - z0(i)
446 xi1(i) = x1(i) - xi(i)
447 yi1(i) = y1(i) - yi(i)
448 zi1(i) = z1(i) - zi(i)
450 xi2(i) = x2(i) - xi(i)
451 yi2(i) = y2(i) - yi(i)
452 zi2(i) = z2(i) - zi(i)
454 xi3(i) = x3(i) - xi(i)
455 yi3(i) = y3(i) - yi(i)
456 zi3(i) = z3(i) - zi(i)
458 xi4(i) = x4(i) - xi(i)
459 yi4(i) = y4(i) - yi(i)
460 zi4(i) = z4(i) - zi(i)
462 sx1 = yi0*zi1(i) - zi0*yi1(i)
463 sy1 = zi0*xi1(i) - xi0*zi1(i)
464 sz1 = xi0*yi1(i) - yi0*xi1(i)
466 sx2 = yi0*zi2(i) - zi0*yi2(i)
467 sy2 = zi0*xi2(i) - xi0*zi2(i)
468 sz2 = xi0*yi2(i) - yi0*xi2(i)
470 sx0 = y01(i)*z02(i) - z01(i)*y02(i)
471 sy0 = z01(i)*x02(i) - x01(i)*z02(i)
472 sz0 = x01(i)*y02(i) - y01(i)*x02(i)
473 s2 = one/
max(em30,sx0*sx0 + sy0*sy0 + sz0*sz0)
475 lb1(i) = -(sx0*sx2 + sy0*sy2 + sz0*sz2) * s2
476 lc1(i) = (sx0*sx1 + sy0*sy1 + sz0*sz1) * s2
478 sx3 = yi0*zi3(i) - zi0*yi3(i)
479 sy3 = zi0*xi3(i) - xi0*zi3(i)
480 sz3 = xi0*yi3(i) - yi0*xi3(i)
482 sx0 = y02(i)*z03(i) - z02(i)*y03(i)
483 sy0 = z02(i)*x03(i) - x02(i)*z03(i)
484 sz0 = x02(i)*y03(i) - y02(i)*x03(i)
485 s2 = one/
max(em30,sx0*sx0 + sy0*sy0 + sz0*sz0)
487 lb2(i) = -(sx0*sx3 + sy0*sy3 + sz0*sz3) * s2
488 lc2(i) = (sx0*sx2 + sy0*sy2 + sz0*sz2) * s2
490 sx4 = yi0*zi4(i) - zi0*yi4(i)
491 sy4 = zi0*xi4(i) - xi0*zi4(i)
492 sz4 = xi0*yi4(i) - yi0*xi4(i)
494 sx0 = y03(i)*z04(i) - z03(i)*y04(i)
495 sy0 = z03(i)*x04(i) - x03(i)*z04(i)
496 sz0 = x03(i)*y04(i) - y03(i)*x04(i)
497 s2 = one/
max(em30,sx0*sx0 + sy0*sy0 + sz0*sz0)
499 lb3(i) = -(sx0*sx4 + sy0*sy4 + sz0*sz4) * s2
500 lc3(i) = (sx0*sx3 + sy0*sy3 + sz0*sz3) * s2
502 sx0 = y04(i)*z01(i) - z04(i)*y01(i)
503 sy0 = z04(i)*x01(i) - x04(i)*z01(i)
504 sz0 = x04(i)*y01(i) - y04(i)*x01(i)
505 s2 = one/
max(em30,sx0*sx0 + sy0*sy0 + sz0*sz0)
507 lb4(i) = -(sx0*sx1 + sy0*sy1 + sz0*sz1) * s2
508 lc4(i) = (sx0*sx4 + sy0*sy4 + sz0*sz4) * s2
510 aaa = one/
max(em30,x01(i)*x01(i)+y01(i)*y01(i)+z01(i)*z01(i))
511 hlc1(i)= lc1(i)*abs(lc1(i))*aaa
512 hlb4(i)= lb4(i)*abs(lb4(i))*aaa
513 al1(i) = -(xi0*x01(i)+yi0*y01(i)+zi0*z01(i))*aaa
514 al1(i) =
max(zero,
min(one,al1(i)))
515 aaa = one/
max(em30,x02(i)*x02(i)+y02(i)*y02(i)+z02(i)*z02(i))
516 hlc2(i)= lc2(i)*abs(lc2(i))*aaa
517 hlb1(i)= lb1(i)*abs(lb1(i))*aaa
518 al2(i) = -(xi0*x02(i)+yi0*y02(i)+zi0*z02(i))*aaa
519 al2(i) =
max(zero,
min(one,al2(i)))
520 aaa = one/
max(em30,x03(i)*x03(i)+y03(i)*y03(i)+z03(i)*z03(i))
521 hlc3(i)= lc3(i)*abs(lc3(i))*aaa
522 hlb2(i)= lb2(i)*abs(lb2(i))*aaa
523 al3(i) = -(xi0*x03(i)+yi0*y03(i)+zi0*z03(i))*aaa
524 al3(i) =
max(zero,
min(one,al3(i)))
525 aaa = one/
max(em30,x04(i)*x04(i)+y04(i)*y04(i)+z04(i)*z04(i))
526 hlc4(i)= lc4(i)*abs(lc4(i))*aaa
527 hlb3(i)= lb3(i)*abs(lb3(i))*aaa
528 al4(i) = -(xi0*x04(i)+yi0*y04(i)+zi0*z04(i))*aaa
529 al4(i) =
max(zero,
min(one,al4(i)))
537 la = one - lb1(i) - lc1(i)
539 aaa = one /
max(em20,x12*x12+y12*y12+z12*z12)
540 hla= la*abs(la) * aaa
542 + hla<=hlb1(i).AND.hla<=hlc1(i))
THEN
543 lb1(i) = (xi2(i)*x12+yi2(i)*y12+zi2(i)*z12) * aaa
544 lb1(i) =
max(zero,
min(one,lb1(i)))
545 lc1(i) = one - lb1(i)
546 ELSEIF(lb1(i)<zero.AND.
547 + hlb1(i)<=hlc1(i).AND.hlb1(i)<=hla)
THEN
550 ELSEIF(lc1(i)<zero.AND.
551 + hlc1(i)<=hla.AND.hlc1(i)<=hlb1(i))
THEN
561 la = one - lb2(i) - lc2(i)
563 aaa = one /
max(em20,x23*x23+y23*y23+z23*z23)
564 hla= la*abs(la) * aaa
566 + hla<=hlb2(i).AND.hla<=hlc2(i))
THEN
567 lb2(i) = (xi3(i)*x23+yi3(i)*y23+zi3(i)*z23)*aaa
568 lb2(i) =
max(zero,
min(one,lb2(i)))
569 lc2(i) = one - lb2(i)
570 ELSEIF(lb2(i)<zero.AND.
571 + hlb2(i)<=hlc2(i).AND.hlb2(i)<=hla)
THEN
574 ELSEIF(lc2(i)<zero.AND.
575 + hlc2(i)<=hla.AND.hlc2(i)<=hlb2(i))
THEN
585 la = one - lb3(i) - lc3(i)
587 aaa = one /
max(em20,x34*x34+y34*y34+z34*z34)
588 hla= la*abs(la) * aaa
590 + hla<=hlb3(i).AND.hla<=hlc3(i))
THEN
591 lb3(i) = (xi4(i)*x34+yi4(i)*y34+zi4(i)*z34)*aaa
592 lb3(i) =
max(zero,
min(one,lb3(i)))
593 lc3(i) = one - lb3(i)
594 ELSEIF(lb3(i)<zero.AND.
595 + hlb3(i)<=hlc3(i).AND.hlb3(i)<=hla)
THEN
598 ELSEIF(lc3(i)<zero.AND.
599 + hlc3(i)<=hla.AND.hlc3(i)<=hlb3(i))
THEN
609 la = one - lb4(i) - lc4(i)
611 aaa = one /
max(em20,x41*x41+y41*y41+z41*z41)
612 hla= la*abs(la) * aaa
614 + hla<=hlb4(i).AND.hla<=hlc4(i))
THEN
615 lb4(i) = (xi1(i)*x41+yi1(i)*y41+zi1(i)*z41)*aaa
616 lb4(i) =
max(zero,
min(one,lb4(i)))
617 lc4(i) = one - lb4(i)
618 ELSEIF(lb4(i)<zero.AND.
619 + hlb4(i)<=hlc4(i).AND.hlb4(i)<=hla)
THEN
622 ELSEIF(lc4(i)<zero.AND.
623 + hlc4(i)<=hla.AND.hlc4(i)<=hlb4(i))
THEN
631 nx1(i) = xi(i)-(x0(i) + lb1(i)*x01(i) + lc1(i)*x02(i))
632 ny1(i) = yi(i)-(y0(i) + lb1(i)*y01(i) + lc1(i)*y02(i))
633 nz1(i) = zi(i)-(z0(i) + lb1(i)*z01(i) + lc1(i)*z02(i))
634 p1(i) = nx1(i)*nx1(i) + ny1(i)*ny1(i) +nz1(i)*nz1(i)
636 nx2(i) = xi(i)-(x0(i) + lb2(i)*x02(i) + lc2(i
637 ny2(i) = yi(i)-(y0(i) + lb2(i)*y02(i) + lc2(i)*y03(i))
638 nz2(i) = zi(i)-(z0(i) + lb2(i)*z02(i) + lc2(i)*z03(i))
639 p2(i) = nx2(i)*nx2(i) + ny2(i)*ny2(i) +nz2(i)*nz2(i)
641 nx3(i) = xi(i)-(x0(i) + lb3(i)*x03(i) + lc3(i)*x04(i))
642 ny3(i) = yi(i)-(y0(i) + lb3(i)*y03(i) + lc3(i)*y04(i))
643 nz3(i) = zi(i)-(z0(i) + lb3(i)*z03(i) + lc3(i)*z04(i))
644 p3(i) = nx3(i)*nx3(i) + ny3(i)*ny3(i) +nz3(i)*nz3(i)
646 nx4(i) = xi(i)-(x0(i) + lb4(i)*x04(i) + lc4(i)*x01(i))
647 ny4(i) = yi(i)-(y0(i) + lb4(i)*y04(i) + lc4(i)*y01(i))
648 nz4(i) = zi(i)-(z0(i) + lb4(i)*z04(i) + lc4(i)*z01(i))
649 p4(i) = nx4(i)*nx4(i) + ny4(i)*ny4(i) +nz4(i)*nz4(i)
844 SUBROUTINE i20norm(NRTM,IRECT,NUMNOD,X,SOLIDN_NORMAL,
845 . NMN ,MSR ,NLN,NLG,GAP_SH)
849#include "implicit_f.inc"
853 INTEGER NRTM,NUMNOD,IRECT(4,NRTM),NMN,MSR(*),NLN,NLG(NLN)
856 . x(3,numnod), solidn_normal(3,numnod),gap_sh(*)
860 INTEGER I ,J ,N1,N2,N3,N4
862 . SURFX,SURFY,SURFZ,X12,Y12,Z12,X23,Y23,Z23,
863 . X34,Y34,Z34,X41,Y41,Z41,AAA,SI,CO
869 solidn_normal(1,n1) = zero
870 solidn_normal(2,n1) = zero
871 solidn_normal(3,n1) = zero
876 IF(gap_sh(i)/=zero)
THEN
886 x41 = x(1,n1) - x(1,n4)
887 y41 = x(2,n1) - x(2,n4)
888 z41 = x(3,n1) - x(3,n4)
894 x12 = x(1,n2) - x(1,n1)
895 y12 = x(2,n2) - x(2,n1)
896 z12 = x(3,n2) - x(3,n1)
902 x23 = x(1,n3) - x(1,n2)
903 y23 = x(2,n3) - x(2,n2)
904 z23 = x(3,n3) - x(3,n2)
910 surfx = y41*z12 - z41*y12
911 surfy = z41*x12 - x41*z12
912 surfz = x41*y12 - y41*x12
914 co = x41*x12 + y41*y12 + z41*z12
915 si = sqrt(surfx*surfx+surfy*surfy+surfz*surfz)
916 aaa = atan2(si,-co)*two/pi/
max(em30,si)
917 solidn_normal(1,n1) = solidn_normal(1,n1) + surfx*aaa
918 solidn_normal(2,n1) = solidn_normal(2,n1) + surfy*aaa
919 solidn_normal(3,n1) = solidn_normal(3,n1) + surfz*aaa
921 surfx = y12*z23 - z12*y23
922 surfy = z12*x23 - x12*z23
923 surfz = x12*y23 - y12*x23
924 co = x12*x23 + y12*y23 + z12*z23
925 si = sqrt(surfx*surfx+surfy*surfy+surfz*surfz)
926 aaa = atan2(si,-co)*two/pi/
max(em30,si)
927 solidn_normal(1,n2) = solidn_normal(1,n2) + surfx*aaa
928 solidn_normal(2,n2) = solidn_normal(2,n2) + surfy*aaa
929 solidn_normal(3,n2) = solidn_normal(3,n2) + surfz*aaa
932 x34 = x(1,n4) - x(1,n3)
933 y34 = x(2,n4) - x(2,n3)
934 z34 = x(3,n4) - x(3,n3)
939 surfx = y23*z34 - z23*y34
940 surfy = z23*x34 - x23*z34
941 surfz = x23*y34 - y23*x34
942 co = x23*x34 + y23*y34 + z23*z34
943 si = sqrt(surfx*surfx+surfy*surfy+surfz*surfz)
944 aaa = atan2(si,-co)*two/pi/
max(em30,si)
945 solidn_normal(1,n3) = solidn_normal(1,n3) + surfx*aaa
946 solidn_normal(2,n3) = solidn_normal(2,n3) + surfy*aaa
947 solidn_normal(3,n3) = solidn_normal(3,n3) + surfz*aaa
949 surfx = y34*z41 - z34*y41
950 surfy = z34*x41 - x34*z41
951 surfz = x34*y41 - y34*x41
952 co = x34*x41 + y34*y41 + z34*z41
953 si = sqrt(surfx*surfx+surfy*surfy+surfz*surfz)
954 aaa = atan2(si,-co)*two/pi/
max(em30,si)
955 solidn_normal(1,n4) = solidn_normal(1,n4) + surfx*aaa
956 solidn_normal(2,n4) = solidn_normal(2,n4) + surfy*aaa
957 solidn_normal(3,n4) = solidn_normal(3,n4) + surfz*aaa
959 surfx = y23*z41 - z23*y41
960 surfy = z23*x41 - x23*z41
961 surfz = x23*y41 - y23*x41
962 co = x41*x23 + y41*y23 + z41*z23
963 si = sqrt(surfx*surfx+surfy*surfy+surfz*surfz)
964 aaa = atan2(si,-co)*two/pi/
max(em30,si)
966 solidn_normal(2,n3) = solidn_normal(2,n3) + surfy*aaa
967 solidn_normal(3,n3) = solidn_normal(3,n3) + surfz*aaa
991 SUBROUTINE i20dst3e(JLT ,GAP ,CAND_S,CAND_M,IRECTS ,
993 . N1,N2,M1,M2,JLT_NEW,
994 . X ,IGAP,GAP_S,GAP_M, GAPV2,
995 . NLN ,NLG ,SOLIDN_NORMAL )
999#include "implicit_f.inc"
1003#include "mvsiz_p.inc"
1007 INTEGER JLT,JLT_NEW,IGAP
1008 INTEGER IRECTS(2,*), IRECTM(2,*),CAND_S(*),CAND_M(*),
1009 . n1(*),n2(*),m1(*),m2(*)
1012 . nx(*),ny(*),nz(*),x(3,*),gap_s(*),gap_m(*), gapv2(*)
1016 INTEGER ,NLN,NLG(NLN)
1018 . XS12,YS12,ZS12,XM12,YM12,ZM12,XA,XB,
1019 . XS2,XM2,XSM,XS2M2,YS2,YM2,YSM,YS2M2,ZS2,,ZSM,ZS2M2,
1020 . XX,YY,ZZ,ALS,ALM,DET,H1S,H2S,H1M,,
1021 . GAP2,XXS1,YYS1,ZZS1,XXS2,YYS2,ZZS2,
1022 . XXM1,YYM1,ZZM1,XXM2,YYM2,ZZM2,
1023 . PENE2(MVSIZ),SOLIDN_NORMAL(3,*),AAA,
1024 . SX1,SX2,SX3,SX4,SY1,SY2,SY3,SY4,SZ1,SZ2,SZ3,
1035 gapv2(i)=gap_s(cand_s(i))+gap_m(cand_m(i))
1036 gapv2(i)=
max(gapv2(i)*gapv2(i),gap2)
1067 n1(i)=irects(1,cand_s(i))
1068 n2(i)=irects(2,cand_s(i))
1069 m1(i)=irectm(1,cand_m(i))
1070 m2(i)=irectm(2,cand_m(i))
1085 aaa = gap_s(cand_s(i))
1086 sx1 = solidn_normal(1,n1(i))*aaa
1087 sy1 = solidn_normal(2,n1(i))*aaa
1088 sz1 = solidn_normal(3,n1(i))*aaa
1089 sx2 = solidn_normal(1,n2(i))*aaa
1090 sy2 = solidn_normal(2,n2(i))*aaa
1091 sz2 = solidn_normal(3,n2(i))*aaa
1092 aaa = gap_m(cand_m(i))
1093 sx3 = solidn_normal(1,m1(i))*aaa
1094 sy3 = solidn_normal(2,m1(i))*aaa
1095 sz3 = solidn_normal(3,m1(i))*aaa
1096 sx4 = solidn_normal(1,m2(i))*aaa
1097 sy4 = solidn_normal(2,m2(i))*aaa
1098 sz4 = solidn_normal(3,m2(i))*aaa
1116 xs2 = xs12*xs12 + ys12*ys12 + zs12*zs12
1120 xm2 = xm12*xm12 + ym12*ym12 + zm12*zm12
1121 xsm = - (xs12*xm12 + ys12*ym12 + zs12*zm12)
1127 xa = xs12*xs2m2 + ys12*ys2m2 + zs12*zs2m2
1128 xb = -xm12*xs2m2 - ym12*ys2m2 - zm12*zs2m2
1129 det = xm2*xs2 - xsm*xsm
1132 h1m = (xa*xsm-xb*xs2) / det
1136 h1m=
min(one,
max(zero,h1m))
1137 h1s = -(xa + h1m*xsm) / xs2
1138 h1s=
min(one,
max(zero,h1s))
1139 h1m = -(xb + h1s*xsm) / xm2
1140 h1m=
min(one,
max(zero,h1m))
1147 nx(i) = h1s*xxs1 + h2s*xxs2
1148 . - h1m*xxm1 - h2m*xxm2
1149 ny(i) = h1s*yys1 + h2s*yys2
1150 . - h1m*yym1 - h2m*yym2
1151 nz(i) = h1s*zzs1 + h2s*zzs2
1152 . - h1m*zzm1 - h2m*zzm2
1153 pene2(i) = gapv2(i) - nx(i)*nx(i) - ny(i)*ny(i) - nz(i)*nz(i)
1154 pene2(i) =
max(zero,pene2(i))
1158 IF(pene2(i)/=zero)
THEN
1159 jlt_new = jlt_new + 1
1160 cand_s(jlt_new) = cand_s(i)
1161 cand_m(jlt_new) = cand_m(i)
1169 gapv2(jlt_new) = gapv2(i)