32 SUBROUTINE i23optcd(CAND_E ,CAND_N ,X ,I_STOK ,IRECT ,
33 2 GAP ,GAP_S ,IGAP ,NSN ,STFN ,
34 3 ITASK ,STF ,INACTI ,FTXSAV ,
35 4 FTYSAV ,FTZSAV ,CAND_P ,NIN ,GAPMAX ,
36 5 ICURV ,COUNT_REMSLV ,GAP_M ,MSR ,NSV ,
45#include "implicit_f.inc"
61 INTEGER IRECT(4,*), (*), CAND_N(*),
62 . I_STOK,NIN,IGAP ,ITASK, NSN, INACTI,ICURV,
63 . COUNT_REMSLV(*), MSR(*), NSV(*)
65 . X(3,*),GAP,GAP_S(*),STFN(*),STF(*),
66 . ftxsav(*), ftysav(*), ftzsav(*), cand_p(*),
67 . gapmax, gap_m(*), gapmin
71 INTEGER I,L,IS,JS,LS,NLS
72INTEGER LIST(MVSIZ),IG(MVSIZ),IX1(MVSIZ),IX2(MVSIZ),IX3(MVSIZ),
73 . IX4(MVSIZ), LISTI(MVSIZ),COUNT_CAND,CT
75 . XI,X1,X2,X3,X4,YI,Y1,Y2,Y3,Y4,ZI,Z1,Z2,Z3,Z4,
76 . xmin,xmax,ymin,
ymax,zmin,zmax,v12,v22,v32,v42
80 . x0,y0,z0,xxx,yyy,zzz,curv_max
86 first = 1 + i_stok*itask / nthread
87 last = i_stok*(itask+1) / nthread
89 DO sg = first,last,mseg
90 nseg =
min(mseg,last-js)
101 IF(cand_n(i)<=nsn)
THEN
118 gapv(is)=gap_s(cand_n(i))+gap_m(cand_e(i))
122 IF(gapmax/=zero)gapv(is)=
min(gapv(is),gapmax)
123 gapv(is)=
max(gapv(is),gapmin)
136 gapv(is)=gap_s(cand_n(i))+gap_m(cand_e(i))
140 IF(gapmax/=zero)gapv(is)=
min(gapv(is),gapmax)
141 gapv(is)=
max(gapv(is),gapmin)
153 gapv(is)=sqrt(three)*gapv(is)
161 IF(stf(l)/=zero.AND.stfn(cand_n(i))/=zero)
THEN
162 ig(is) = nsv(cand_n(i))
182 x0 = fourth*(x1+x2+x3+x4)
183 y0 = fourth*(y1+y2+y3+y4)
184 z0 = fourth*(z1+z2+z3+z4)
185 xxx=
max(x1,x2,x3,x4)-
min(x1,x2,x3,x4)
187 zzz=
max(z1,z2,z3,z4)-
min(z1,z2,z3,z4)
188 curv_max = half *
max(xxx,yyy,zzz)
189 xmin = x0-curv_max-gapv(is)
190 ymin = y0-curv_max-gapv(is)
191 zmin = z0-curv_max-gapv(is)
192 xmax = x0+curv_max+gapv(is)
193 ymax = y0+curv_max+gapv(is)
194 zmax = z0+curv_max+gapv(is)
195 IF (xmin <= xi.AND.xmax >= xi.AND.
196 . ymin <= yi.AND.
ymax >= yi.AND.
197 . zmin <= zi.AND.zmax >= zi)
THEN
198 cand_n(i) = -cand_n(i)
199 count_cand = count_cand+1
209 IF(stf(l)/=zero.AND.stfn(cand_n(i))/=zero)
THEN
210 ig(is) = nsv(cand_n(i))
220 zmin =
min(z1,z2,z3,z4)-gapv(is)
221 zmax =
max(z1,z2,z3,z4)+gapv(is)
222 IF (zmin<=zi.AND.zmax>=zi)
THEN
238 ymin =
min(y1,y2,y3,y4)-gapv(is)
239 ymax =
max(y1,y2,y3,y4)+gapv(is)
240 IF (ymin<=yi.AND.
ymax>=yi)
THEN
253 xmin =
min(x1,x2,x3,x4)-gapv(is)
254 xmax =
max(x1,x2,x3,x4)+gapv(is)
255 IF (xmin<=xi.AND.xmax>=xi)
THEN
257 cand_n(i) = -cand_n(i)
258 count_cand = count_cand+1
274 gapv(is)=
gapfi(nin)%P(cand_n(i)-nsn)+gap_m(cand_e(i))
275 IF(gapmax/=zero)gapv(is)=
min(gapv(is),gapmax)
276 gapv(is)=
max(gapv(is),gapmin)
283 gapv(is)=sqrt(three)*gapv(is)
292 IF(stf(l)/=zero.AND.
stifi(nin)%P(ii)/=zero)
THEN
293 xi =
xfi(nin)%P(1,ii)
294 yi =
xfi(nin)%P(2,ii)
295 zi =
xfi(nin)%P(3,ii)
312 x0 = fourth*(x1+x2+x3+x4)
313 y0 = fourth*(y1+y2+y3+y4)
314 z0 = fourth*(z1+z2+z3+z4)
315 xxx=
max(x1,x2,x3,x4)-
min(x1,x2,x3,x4)
316 yyy=
max(y1,y2,y3,y4)-
min(y1,y2,y3,y4)
317 zzz=
max(z1,z2,z3,z4)-
min(z1,z2,z3,z4)
318 curv_max = half *
max(xxx,yyy,zzz)
319 xmin = x0-curv_max-gapv(is)
320 ymin = y0-curv_max-gapv(is)
321 zmin = z0-curv_max-gapv(is)
322 xmax = x0+curv_max+gapv(is)
323 ymax = y0+curv_max+gapv(is)
324 zmax = z0+curv_max+gapv(is)
325 IF (xmin <= xi.AND.xmax >= xi.AND.
326 . ymin <= yi.AND.
ymax >= yi.AND.
327 . zmin <= zi.AND.zmax >= zi)
THEN
328 cand_n(i) = -cand_n(i)
329 count_cand = count_cand + 1
341 IF(stf(l)/=zero.AND.
stifi(nin)%P(ii)/=zero)
THEN
342 zi =
xfi(nin)%P(3,ii)
351 zmin =
min(z1,z2,z3,z4)-gapv(is)
352 zmax =
max(z1,z2,z3,z4)+gapv(is)
353 IF (zmin<=zi.AND.zmax>=zi)
THEN
372 ymin =
min(y1,y2,y3,y4)-gapv(is)
373 ymax =
max(y1,y2,y3,y4)+gapv(is)
374 IF (ymin<=yi.AND.
ymax>=yi)
THEN
384 xi =
xfi(nin)%P(1,ii)
389 xmin =
min(x1,x2,x3,x4)-gapv(is)
390 xmax =
max(x1,x2,x3,x4)+gapv(is)
391 IF (xmin<=xi.AND.xmax>=xi)
THEN
392 cand_n(i) = -cand_n(i)
393 count_cand = count_cand+1
405 lskyi_count=lskyi_count+count_cand*5
406 count_remslv(nin)=count_remslv(nin)+ct
407#include "lockoff.inc"
subroutine i23optcd(cand_e, cand_n, x, i_stok, irect, gap, gap_s, igap, nsn, stfn, itask, stf, inacti, ftxsav, ftysav, ftzsav, cand_p, nin, gapmax, icurv, count_remslv, gap_m, msr, nsv, gapmin)