31 . MARGE ,GAP_S ,GAP_M ,GAP_S_L,GAP_M_L ,
32 . IGAP ,X ,IRECTS ,IRECTM ,PENE ,
42#include "implicit_f.inc"
50 INTEGER JLT, NRTS,IGAP
51 INTEGER IRECTS(2,*), IRECTM(2,*),CAND_S(*),CAND_M(*)
55 . x(3,*), pene(mvsiz),
56 . gap_s(*), gap_m(*), gap_s_l(*), gap_m_l(*)
57 my_real ,
INTENT(IN) :: dgapload,drad
61 INTEGER I, IG,N1,N2,M1,M2,NI,L,J
63 . XS12,YS12,ZS12,XM12,YM12,ZM12,XA,XB,
64 . xs2,xm2,xsm,xs2m2,ys2,ym2,ysm,ys2m2,zs2,zm2,zsm,zs2m2,
65 . xx,yy,zz,als,alm,det,
66 . gap2, x11, x12, x13, x21, x22, x23,
67 . xmax1,ymax1,zmax1,xmax2,ymax2,zmax2,
68 . xmin1,ymin1,zmin1,xmin2,ymin2,zmin2,dd,gapv(mvsiz)
73 gapv(i)=
max(drad,gapmin+dgapload)+marge
79 gapv(i)=gap_s(l)+gap_m(cand_m(i))
81 . gapv(i)=
min(gap_s_l(l)+gap_m_l(cand_m(i)),gapv(i))
82 gapv(i)=
max(drad,
max(gapmin,gapv(i))+dgapload)+marge
84 gapv(i)=xrem(16,l-nrts )+gap_m(cand_m(i))
86 . gapv(i)=
min(xrem(17,l-nrts)+gap_m_l(cand_m(i)),gapv(i))
87 gapv(i)=
max(drad,
max(gapmin,gapv(i))+dgapload)+marge
131 n1=irects(1,cand_s(i))
132 n2=irects(2,cand_s(i))
148 m1=irectm(1,cand_m(i))
149 m2=irectm(2,cand_m(i))
157 xmax2 =
max(x(1,m1),x(1,m2))
158 ymax2 =
max(x(2,m1),x(2,m2))
159 zmax2 =
max(x(3,m1),x(3,m2))
163 xmin2 =
min(x(1,m1),x(1,m2))
164 ymin2 =
min(x(2,m1),x(2,m2))
165 zmin2 =
min(x(3,m1),x(3,m2))
166 dd =
max(xmin1-xmax2,ymin1-ymax2,zmin1-zmax2,
167 . xmin2-xmax1,ymin2-ymax1,zmin2-zmax1)
181 xs2 = xs12*xs12 + ys12*ys12 + zs12*zs12
182 xm12 = x(1,m2)-x(1,m1)
183 ym12 = x(2,m2)-x(2,m1)
184 zm12 = x(3,m2)-x(3,m1)
185 xm2 = xm12*xm12 + ym12*ym12 + zm12*zm12
186 xsm = - (xs12*xm12 + ys12*ym12 + zs12*zm12)
187 xa = xs12*xs2m2 + ys12*ys2m2 + zs12*zs2m2
188 xb = -xm12*xs2m2 - ym12*ys2m2 - zm12*zs2m2
189 det = xm2*xs2 - xsm*xsm
192 alm = (xa*xsm-xb*xs2) / det
195 alm=
min(one,
max(zero,alm))
196 als = -(xa + alm*xsm) / xs2
197 als=
min(one,
max(zero,als))
198 alm = -(xb + als*xsm) / xm2
199 alm=
min(one,
max(zero,alm))
203 xx = als*x11 + (one-als)*x21
204 . - alm*x(1,m1) - (one-alm)*x(1,m2)
205 yy = als*x12 + (one-als)*x22
206 . - alm*x(2,m1) - (one-alm)*x(2,m2)
207 zz = als*x13 + (one-als)*x23
208 . - alm*x(3,m1) - (one-alm)*x(3,m2)
210 pene(i) = gap2- xx*xx - yy*yy - zz*zz
226 SUBROUTINE i11pen3(JLT ,CAND_S,CAND_M,GAP ,X ,
227 . IRECTS,IRECTM,PENE ,NRTS )
235#include "implicit_f.inc"
239#include "mvsiz_p.inc"
244 INTEGER IRECTS(2,*), IRECTM(2,*),CAND_S(*),CAND_M(*)
248 . x(3,*), pene(mvsiz)
252 INTEGER I, IG,,N2,M1,M2,NI,L,J
254 . XS12,YS12,ZS12,XM12,YM12,ZM12,XA,XB,
255 . XS2,XM2,XSM,XS2M2,YS2,YM2,YSM,YS2M2,ZS2,ZM2,ZSM,ZS2M2,
256 . xx,yy,zz,als,alm,det,
257 . gap2, x11, x12, x13, x21, x22, x23,
258 . xmax1,ymax1,zmax1,xmax2,ymax2,zmax2,
259 . xmin1,ymin1,zmin1,xmin2,ymin2,zmin2,dd
295 n1=irects(1,cand_s(i))
296 n2=irects(2,cand_s(i))
312 m1=irectm(1,cand_m(i))
313 m2=irectm(2,cand_m(i))
321 xmax2 =
max(x(1,m1),x(1,m2))
322 ymax2 =
max(x(2,m1),x(2,m2))
323 zmax2 =
max(x(3,m1),x(3,m2))
327 xmin2 =
min(x(1,m1),x(1,m2))
328 ymin2 =
min(x(2,m1),x(2,m2))
329 zmin2 =
min(x(3,m1),x(3,m2))
330 dd =
max(xmin1-xmax2,ymin1-ymax2,zmin1-zmax2,
331 . xmin2-xmax1,ymin2-ymax1,zmin2-zmax1)
345 xs2 = xs12*xs12 + ys12*ys12 + zs12*zs12
346 xm12 = x(1,m2)-x(1,m1)
347 ym12 = x(2,m2)-x(2,m1)
348 zm12 = x(3,m2)-x(3,m1)
349 xm2 = xm12*xm12 + ym12*ym12 + zm12*zm12
350 xsm = - (xs12*xm12 + ys12*ym12 + zs12*zm12)
351 xa = xs12*xs2m2 + ys12*ys2m2 + zs12*zs2m2
352 xb = -xm12*xs2m2 - ym12*ys2m2 - zm12*zs2m2
353 det = xm2*xs2 - xsm*xsm
356 alm = (xa*xsm-xb*xs2) / det
359 alm=
min(one,
max(zero,alm))
360 als = -(xa + alm*xsm) / xs2
361 als=
min(one,
max(zero,als))
362 alm = -(xb + als*xsm) / xm2
363 alm=
min(one,
max(zero,alm))
367 xx = als*x11 + (one-als)*x21
368 . - alm*x(1,m1) - (one-alm)*x(1,m2)
369 yy = als*x12 + (one-als)*x22
370 . - alm*x(2,m1) - (one-alm)*x(2,m2)
371 zz = als*x13 + (one-als)*x23
372 . - alm*x(3,m1) - (one-alm)*x(3,m2)
373 pene(i) = gap2- xx*xx - yy*yy - zz*zz
subroutine i11pen3_vox(jlt, cand_s, cand_m, gapmin, drad, marge, gap_s, gap_m, gap_s_l, gap_m_l, igap, x, irects, irectm, pene, nrts, dgapload)