28 SUBROUTINE i11dst3(JLT ,GAP ,CAND_S,CAND_M,IRECTS ,
30 . N1,N2,M1,M2,JLT_NEW,
31 . X ,IGAP,GAP_S,GAP_M, GAPV2,
32 . GAP_S_L,GAP_M_L,DRAD,DGAPLOAD)
36#include "implicit_f.inc"
44 INTEGER JLT,JLT_NEW,IGAP
45 INTEGER IRECTS(2,*), IRECTM(2,*),CAND_S(*),CAND_M(*),
46 . N1(*),N2(*),M1(*),M2(*)
47 my_real ,
INTENT(IN) :: DGAPLOAD
50 . nx(*),ny(*),nz(*),x(3,*),gap_s(*),gap_m(*), gapv2(*),
51 . gap_s_l(*),gap_m_l(*)
57 . XS12,YS12,ZS12,XM12,YM12,ZM12,XA,XB,
58 . XS2,XM2,XSM,XS2M2,YS2,YM2,YSM,YS2M2,ZS2,ZM2,ZSM,ZS2M2,
59 . xx,yy,zz,als,alm,det,h1s,h2s,h1m,h2m,
63 gap2=(gap+dgapload)*(gap+dgapload)
72 gapv2(i)=gap_s(cand_s(i))+gap_m(cand_m(i))
74 . gapv2(i)=
min(gap_s_l(cand_s(i))+gap_m_l(cand_m(i)),gapv2(i))+dgapload
75 gapv2(i)=
max(gapv2(i)*gapv2(i),gap2)
106 n1(i)=irects(1,cand_s(i))
107 n2(i)=irects(2,cand_s(i))
108 m1(i)=irectm(1,cand_m(i))
109 m2(i)=irectm(2,cand_m(i))
110 xs12 = x(1,n2(i))-x(1,n1(i))
111 ys12 = x(2,n2(i))-x(2,n1(i))
112 zs12 = x(3,n2(i))-x(3,n1(i))
113 xs2 = xs12*xs12 + ys12*ys12 + zs12*zs12
114 xm12 = x(1,m2(i))-x(1,m1(i))
115 ym12 = x(2,m2(i))-x(2,m1(i))
116 zm12 = x(3,m2(i))-x(3,m1(i))
117 xm2 = xm12*xm12 + ym12*ym12 + zm12*zm12
118 xsm = - (xs12*xm12 + ys12*ym12 + zs12*zm12)
120 ys2m2 = x(2,m2(i))-x(2,n2(i))
121 zs2m2 = x(3,m2(i))-x(3,n2(i))
122 xa = xs12*xs2m2 + ys12*ys2m2 + zs12*zs2m2
123 xb = -xm12*xs2m2 - ym12*ys2m2 - zm12*zs2m2
124 det = xm2*xs2 - xsm*xsm
127 h1m = (xa*xsm-xb*xs2) / det
131 h1m=
min(one,
max(zero,h1m))
132 h1s = -(xa + h1m*xsm) / xs2
133 h1s=
min(one,
max(zero,h1s))
134 h1m = -(xb + h1s*xsm) / xm2
135 h1m=
min(one,
max(zero,h1m))
142 nx(i) = h1s*x(1,n1(i)) + h2s*x(1,n2(i))
143 . - h1m*x(1,m1(i)) - h2m*x(1,m2(i))
144 ny(i) = h1s*x(2,n1(i)) + h2s*x(2,n2(i))
147 . - h1m*x(3,m1(i)) - h2m*x(3,m2(i))
148 pene2(i) =
max(gapv2(i),drad2) - nx(i)*nx(i) - ny(i)*ny(i) - nz(i)*nz(i)
149 pene2(i) =
max(zero,pene2(i))
153 IF(pene2(i)/=zero)
THEN
154 jlt_new = jlt_new + 1
155 cand_s(jlt_new) = cand_s(i)
156 cand_m(jlt_new) = cand_m(i)
164 gapv2(jlt_new) = gapv2(i)
subroutine i11dst3(jlt, gap, cand_s, cand_m, irects, irectm, nx, ny, nz, n1, n2, m1, m2, jlt_new, x, igap, gap_s, gap_m, gapv2, gap_s_l, gap_m_l, drad, dgapload)