32 SUBROUTINE i7optcd(NSV ,CAND_E ,CAND_N ,X ,I_STOK ,
33 2 IRECT ,GAP ,GAP_S ,GAP_M ,IGAP ,
34 3 STFN ,ITASK ,STF ,IFQ ,IFPEN ,
35 4 CAND_FX ,CAND_FY ,CAND_FZ ,NIN ,NSN ,
36 5 GAPMAX ,ICURV ,GAP_S_L ,GAP_M_L ,
37 6 COUNT_REMSLV ,GAPMIN ,DRAD ,DGAPLOAD ,
46#include "implicit_f.inc"
63 INTEGER IRECT(4,*), NSV(*), CAND_E(*), CAND_N(*), IFPEN(*),
64 . I_STOK,NIN,IGAP ,ITASK, , IFQ,ICURV,COUNT_REMSLV(*)
66 . X(3,*),GAP,GAP_S(*),GAP_M(*),STFN(*),STF(*),
67 . CAND_FX(*),CAND_FY(*),CAND_FZ(*),
68 . GAPMAX,GAP_S_L(*),GAP_M_L(*),GAPMIN
69 my_real ,
INTENT(IN) :: dgapload ,drad
70 INTEGER,
INTENT(INOUT) :: LSKYI_SMS_NEW
74 INTEGER I,L,IS,JS,LS,NLS,NLT,NSEG,,SG,FIRST,LAST,MSEG,NLF,II
75 INTEGER LIST(MVSIZ),IG(MVSIZ),IX1(MVSIZ),IX2(MVSIZ),IX3(MVSIZ),
76 . ix4(mvsiz), listi(mvsiz),count_cand,ct
78 . xi,x1,x2,x3,x4,yi,y1,y2,y3,y4,zi,z1,z2,z3,z4,
79 . xmin,xmax,ymin,
ymax,zmin,zmax,v12,v22,v32,v42
83 . x0,y0,z0,xxx,yyy,zzz,curv_max,gapf
89 first = 1 + i_stok*itask / nthread
90 last = i_stok*(itask+1) / nthread
92 DO sg = first,last,mseg
93 nseg =
min(mseg,last-js)
104 IF(cand_n(i)<=nsn)
THEN
121 gapv(is)=gap_s(cand_n(i))+gap_m(cand_e(i))
123 . gapv(is)=
min(gapv(is),
124 . gap_s_l(cand_n(i))+gap_m_l(cand_e(i)))
125 gapv(is)=
min(gapv(is),gapmax)
126 gapv(is)=
max(gapv(is),gapmin)
139 gapv(is)=gap_s(cand_n(i))+gap_m(cand_e(i))
141 . gapv(is)=
min(gapv(is),
142 . gap_s_l(cand_n(i))+gap_m_l(cand_e(i)))
143 gapv(is)=
min(gapv(is),gapmax)
144 gapv(is)=
max(gapv(is),gapmin)
158 IF(stf(l)/=zero.AND.stfn(cand_n(i))/=zero)
THEN
159 ig(is) = nsv(cand_n(i))
160 gapf =
max(gapv(is)+dgapload,drad)
180 x0 = fourth*(x1+x2+x3+x4)
181 y0 = fourth*(y1+y2+y3+y4)
182 z0 = fourth*(z1+z2+z3+z4)
183 xxx=
max(x1,x2,x3,x4)-
min(x1,x2,x3,x4)
184 yyy=
max(y1,y2,y3,y4)-
min(y1,y2,y3,y4)
185 zzz=
max(z1,z2,z3,z4)-
min(z1,z2,z3,z4)
186 curv_max = half *
max(xxx,yyy,zzz)
187 xmin = x0-curv_max-gapf
188 ymin = y0-curv_max-gapf
189 zmin = z0-curv_max-gapf
190 xmax = x0+curv_max+gapf
191 ymax = y0+curv_max+gapf
192 zmax = z0+curv_max+gapf
193 IF (xmin <= xi.AND.xmax >= xi.AND.
194 . ymin <= yi.AND.
ymax >= yi.AND.
195 . zmin <= zi.AND.zmax >= zi)
THEN
196 cand_n(i) = -cand_n(i)
197 count_cand = count_cand+1
207 IF(stf(l)/=zero.AND.stfn(cand_n(i))/=zero)
THEN
208 ig(is) = nsv(cand_n(i))
209 gapf =
max(gapv(is)+dgapload,drad)
219 zmin =
min(z1,z2,z3,z4)-gapf
220 zmax =
max(z1,z2,z3,z4)+gapf
226 ymin =
min(y1,y2,y3,y4)-gapf
233 xmin =
min(x1,x2,x3,x4)-gapf
234 xmax =
max(x1,x2,x3,x4)+gapf
235 IF (zmin<=zi.AND.zmax>=zi)
THEN
236 IF (ymin<=yi.AND.
ymax>=yi)
THEN
237 IF (xmin<=xi.AND.xmax>=xi)
THEN
239 cand_n(i) = -cand_n(i)
240 count_cand = count_cand+1
261 gapv(is)=
gapfi(nin)%P(cand_n(i)-nsn)+gap_m(cand_e(i))
263 . gapv(is)=
min(gapv(is),
264 .
gap_lfi(nin)%P(cand_n(i)-nsn)+
265 .
max(gap_m(cand_e(i)),gap_m_l(cand_e(i))))
266 gapv(is)=
min(gapv(is),gapmax)
267 gapv(is)=
max(gapv(is),gapmin)
273 gapv(is)=
gapfi(nin)%P(cand_n(i)-nsn)+gap_m(cand_e(i))
275 . gapv(is)=
min(gapv(is),
276 .
gap_lfi(nin)%P(cand_n(i)-nsn)+
277 .
max(gap_m(cand_e(i)),gap_m_l(cand_e(i))))
278 gapv(is)=
max(gapv(is),gapmin)
288 IF(stf(l)/=zero.AND.
stifi(nin)%P(ii)/=zero)
THEN
289 gapf =
max(gapv(is)+dgapload,drad)
290 xi =
xfi(nin)%P(1,ii)
291 yi =
xfi(nin)%P(2,ii)
292 zi =
xfi(nin)%P(3,ii)
309 x0 = fourth*(x1+x2+x3+x4)
310 y0 = fourth*(y1+y2+y3+y4)
311 z0 = fourth*(z1+z2+z3+z4)
312 xxx=
max(x1,x2,x3,x4)-
min(x1,x2,x3,x4)
313 yyy=
max(y1,y2,y3,y4)-
min(y1,y2,y3,y4)
314 zzz=
max(z1,z2,z3,z4)-
min(z1,z2,z3,z4)
315 curv_max = half *
max(xxx,yyy,zzz)
316 xmin = x0-curv_max-gapf
317 ymin = y0-curv_max-gapf
318 zmin = z0-curv_max-gapf
319 xmax = x0+curv_max+gapf
320 ymax = y0+curv_max+gapf
321 zmax = z0+curv_max+gapf
322 IF (xmin <= xi.AND.xmax >= xi.AND.
323 . ymin <= yi.AND.
ymax >= yi.AND.
324 . zmin <= zi.AND.zmax >= zi)
THEN
325 cand_n(i) = -cand_n(i)
326 count_cand = count_cand + 1
338 IF(stf(l)/=zero.AND.
stifi(nin)%P(ii)/=zero)
THEN
339 gapf =
max(gapv(is)+dgapload,drad)
340 zi =
xfi(nin)%P(3,ii)
349 zmin =
min(z1,z2,z3,z4)-gapf
350 zmax =
max(z1,z2,z3,z4)+gapf
351 IF (zmin<=zi.AND.zmax>=zi)
THEN
363 gapf =
max(gapv(is)+dgapload,drad)
371 ymin =
min(y1,y2,y3,y4)-gapf
373 IF (ymin<=yi.AND.
ymax>=yi)
THEN
381 gapf =
max(gapv(is)+dgapload,drad)
384 xi =
xfi(nin)%P(1,ii)
389 xmin =
min(x1,x2,x3,x4)-gapf
390 xmax =
max(x1,x2,x3,x4)+gapf
391 IF (xmin<=xi.AND.xmax>=xi)
THEN
392 cand_n(i) = -cand_n(i)
393 count_cand = count_cand+1
405 IF (ifpen(i) == 0 .AND. imconv == 1)
THEN
414 IF(count_cand > 0 .OR. ct > 0)
THEN
416 lskyi_count=lskyi_count+count_cand*5
417 count_remslv(nin)=count_remslv(nin)+ct
418 lskyi_sms_new = lskyi_sms_new + count_cand
419#include "lockoff.inc"
subroutine i7optcd(nsv, cand_e, cand_n, x, i_stok, irect, gap, gap_s, gap_m, igap, stfn, itask, stf, ifq, ifpen, cand_fx, cand_fy, cand_fz, nin, nsn, gapmax, icurv, gap_s_l, gap_m_l, count_remslv, gapmin, drad, dgapload, lskyi_sms_new)