29 . MARGE ,GAP_S ,GAP_M ,GAP_S_L,GAP_M_L,
30 . IGAP ,X ,IRECTS ,IRECTM ,PENE ,
35#include "implicit_f.inc"
44 INTEGER IRECTS(2,*), IRECTM(2,*),CAND_S(*),CAND_M(*)
47 my_real ,
INTENT(IN) :: dgapload
49 . x(3,*), pene(mvsiz),
50 . gap_s(*), gap_m(*), gap_s_l(*), gap_m_l(*)
54 INTEGER I, IG,N1,N2,M1,M2
56 . XS12,YS12,ZS12,XM12,YM12,ZM12,XA,XB,
57 . xs2,xm2,xsm,xs2m2,ys2,ym2,ysm,ys2m2,zs2,zm2,zsm,zs2m2,
58 . xx,yy,zz,als,alm,det,
64 gapv(i)=
max(drad,gapmin+dgapload)+marge
68 gapv(i)=gap_s(cand_s(i))+gap_m(cand_m(i))
70 . gapv(i)=
min(gap_s_l(cand_s(i))+gap_m_l(cand_m(i)),gapv(i))
71 gapv(i)=
max(drad,
max(gapmin,gapv(i))+dgapload)+marge
102 n1=irects(1,cand_s(i))
103 n2=irects(2,cand_s(i))
104 m1=irectm(1,cand_m(i))
105 m2=irectm(2,cand_m(i))
106 xs12 = x(1,n2)-x(1,n1)
107 ys12 = x(2,n2)-x(2,n1)
108 zs12 = x(3,n2)-x(3,n1)
109 xs2 = xs12*xs12 + ys12*ys12 + zs12*zs12
110 xm12 = x(1,m2)-x(1,m1)
111 ym12 = x(2,m2)-x(2,m1)
112 zm12 = x(3,m2)-x(3,m1)
113 xm2 = xm12*xm12 + ym12*ym12 + zm12*zm12
114 xsm = - (xs12*xm12 + ys12*ym12 + zs12*zm12)
115 xs2m2 = x(1,m2)-x(1,n2)
116 ys2m2 = x(2,m2)-x(2,n2)
117 zs2m2 = x(3,m2)-x(3,n2)
118 xa = xs12*xs2m2 + ys12*ys2m2 + zs12*zs2m2
119 xb = -xm12*xs2m2 - ym12*ys2m2 - zm12*zs2m2
120 det = xm2*xs2 - xsm*xsm
126 alm=
min(one,
max(zero,alm))
127 als = -(xa + alm*xsm) / xs2
129 alm = -(xb + als*xsm) / xm2
130 alm=
min(one,
max(zero,alm))
135 xx = als*x(1,n1) + (1.-als)*x(1,n2)
136 . - alm*x(1,m1) - (1.-alm)*x(1,m2)
137 yy = als*x(2,n1) + (1.-als)*x(2,n2)
138 . - alm*x(2,m1) - (1.-alm)*x(2,m2)
139 zz = als*x(3,n1) + (1.-als)*x(3,n2)
140 . - alm*x(3,m1) - (1.-alm)*x(3,m2)
142 pene(i) =
max(zero,gap2- xx*xx - yy*yy - zz*zz)
154 . IRECTS ,IRECTM ,PENE )
158#include "implicit_f.inc"
162#include "mvsiz_p.inc"
167 INTEGER IRECTS(2,*), IRECTM(2,*),CAND_N(*),CAND_E(*)
171 . x(3,*), pene(mvsiz)
175 INTEGER I, IG,N1,N2,M1,M2
177 . XS12,YS12,ZS12,XM12,YM12,ZM12,XA,XB,
178 . XS2,XM2,XSM,XS2M2,YS2,YM2,YSM,YS2M2,ZS2,ZM2,ZSM,ZS2M2,
179 . xx,yy,zz,als,alm,det,
212 n1=irects(1,cand_n(i))
213 n2=irects(2,cand_n(i))
214 m1=irectm(1,cand_e(i))
215 m2=irectm(2,cand_e(i))
216 xs12 = x(1,n2)-x(1,n1)
217 ys12 = x(2,n2)-x(2,n1)
218 zs12 = x(3,n2)-x(3,n1)
219 xs2 = xs12*xs12 + ys12*ys12 + zs12*zs12
220 xm12 = x(1,m2)-x(1,m1)
221 ym12 = x(2,m2)-x(2,m1)
222 zm12 = x(3,m2)-x(3,m1)
223 xm2 = xm12*xm12 + ym12*ym12 + zm12*zm12
224 xsm = - (xs12*xm12 + ys12*ym12 + zs12*zm12)
225 xs2m2 = x(1,m2)-x(1,n2)
226 ys2m2 = x(2,m2)-x(2,n2)
227 zs2m2 = x(3,m2)-x(3,n2)
228 xa = xs12*xs2m2 + ys12*ys2m2 + zs12*zs2m2
229 xb = -xm12*xs2m2 - ym12*ys2m2 - zm12*zs2m2
230 det = xm2*xs2 - xsm*xsm
233 alm = (xa*xsm-xb*xs2) / det
236 alm=
min(one,
max(zero,alm))
237 als = -(xa + alm*xsm) / xs2
238 als=
min(one,
max(zero,als))
239 alm = -(xb + als*xsm) / xm2
240 alm=
min(one,
max(zero,alm))
245 xx = als*x(1,n1) + (1.-als)*x(1,n2)
246 . - alm*x(1,m1) - (1.-alm)*x(1,m2)
247 yy = als*x(2,n1) + (1.-als)*x(2,n2)
248 . - alm*x(2,m1) - (1.-alm)*x(2,m2)
249 zz = als*x(3,n1) + (1.-als)*x(3,n2)
250 . - alm*x(3,m1) - (1.-alm)*x(3,m2)
251 pene(i) =
max(zero,gap2- xx*xx - yy*yy - zz*zz)
subroutine i11pen3_vox1(jlt, cand_s, cand_m, gapmin, drad, marge, gap_s, gap_m, gap_s_l, gap_m_l, igap, x, irects, irectm, pene, dgapload)