32 SUBROUTINE i11optcd(CAND_M,CAND_S,X ,I_STOK,IRECTS ,
33 2 IRECTM,GAP ,NIN ,V ,GAP_S ,
34 3 GAP_M ,IGAP ,STFS,ITASK ,NRTS ,
35 4 STFM ,GAP_S_L,GAP_M_L,COUNT_REMSLV,
36 5 IFPEN ,CAND_FX,CAND_FY,CAND_FZ,IFORM,
37 6 DRAD ,DGAPLOAD,LSKYI_SMS_NEW)
45#include "implicit_f.inc"
54 INTEGER IRECTS(2,*),IRECTM(2,*), CAND_M(*), CAND_S(*),
55 . I_STOK, NIN,IGAP ,ITASK, NRTS,COUNT_REMSLV(*),
58 . X(3,*),GAP,GAP_S(*),GAP_M(*),V(3,*),STFS(*), STFM(*),
59 . gap_s_l(*),gap_m_l(*),cand_fx(*),cand_fy(*),cand_fz(*)
60 my_real ,
INTENT(IN) :: dgapload,drad
61 INTEGER,
INTENT(INOUT) :: LSKYI_SMS_NEW
72 INTEGER I , L, NN1, NN2
74 . XI,X1,X2,X3,X4,YI,Y1,Y2,Y3,Y4,ZI,Z1,Z2,Z3,Z4,
75 . XMINS,XMAXS,YMINS,YMAXS,ZMINS,ZMAXS,
76 . XMINM,XMAXM,YMINM,YMAXM,ZMINM,ZMAXM,
77 . v12,v22,v32,v42,vv,gapvd
80 . GAPV(MVSIZ),DTTI(MVSIZ)
81 INTEGER LIST(MVSIZ), LISTI(MVSIZ)
82 INTEGER IS,JS,LS,,,NSEG,NLF,II,NLS2
83 INTEGER (MVSIZ),N2(MVSIZ),M1(MVSIZ),M2(MVSIZ)
84 INTEGER SG, FIRST, LAST,COUNT_CAND
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)
103 IF(cand_s(i)<=nrts)
THEN
120 gapv(is)=gap_s(cand_s(i))+gap_m(cand_m(i))
122 . gapv(is)=
min(gapv(is),
123 . gap_s_l(cand_s(i))+gap_m_l(cand_m
124 gapv(is)=
max(gapv(is),gap)
137 gapv(is)=gap_s(cand_s(i))+gap_m(cand_m(i))
139 . gapv(is)=
min(gapv(is),
140 . gap_s_l(cand_s(i))+gap_m_l(cand_m(i)))
141 gapv(is)=
max(gapv(is),gap)
154 IF (stfs(l)/=zero)
THEN
160 IF (stfm(l)/=zero)
THEN
166 gapvd =
max(gapv(is)+dgapload,drad)
167 zmins =
min(z1,z2)-gapvd
168 zmaxs =
max(z1,z2)+gapvd
169 zminm =
min(z3,z4)-gapvd
170 zmaxm =
max(z3,z4)+gapvd
171 IF (zmaxs>=zminm.AND.zmaxm>=zmins)
THEN
194 gapvd =
max(gapv(is)+dgapload,drad)
195 ymins =
min(y1,y2)-gapvd
196 ymaxs =
max(y1,y2)+gapvd
197 yminm =
min(y3,y4)-gapvd
198 ymaxm =
max(y3,y4)+gapvd
199 IF (ymaxs>=yminm.AND.ymaxm>=ymins)
THEN
218 gapvd =
max(gapv(is)+dgapload,drad)
219 xmins =
min(x1,x2)-gapvd
220 xmaxs =
max(x1,x2)+gapvd
221 xminm =
min(x3,x4)-gapvd
222 xmaxm =
max(x3,x4)+gapvd
223 IF (xmaxs>=xminm.AND.xmaxm>=xmins)
THEN
224 cand_s(i) = -cand_s(i)
225 count_cand = count_cand+1
241 gapv(is)=
gapfi(nin)%P(cand_s(i)-nrts)+gap_m(cand_m(i))
243 . gapv(is)=
min(gapv(is),
244 .
gap_lfi(nin)%P(cand_s(i)-nrts)+
245 .
max(gap_m(cand_m(i)),gap_m_l(cand_m(i))))
246 gapv(is)=
max(gapv(is),gap)
256 IF (
stifi(nin)%P(ii)/=zero)
THEN
262 IF (stfm(l)/=zero)
THEN
267 gapvd =
max(gapv(is)+dgapload,drad)
268 zmins =
min(z1,z2)-gapvd
269 zmaxs =
max(z1,z2)+gapvd
270 zminm =
min(z3,z4)-gapvd
271 zmaxm =
max(z3,z4)+gapvd
272 IF (zmaxs>=zminm.AND.zmaxm>=zmins)
THEN
296 gapvd =
max(gapv(is)+dgapload,drad)
297 ymins =
min(y1,y2)-gapvd
298 ymaxs =
max(y1,y2)+gapvd
299 yminm =
min(y3,y4)-gapvd
300 ymaxm =
max(y3,y4)+gapvd
301 IF (ymaxs>=yminm.AND.ymaxm>=ymins)
THEN
320 gapvd =
max(gapv(is)+dgapload,drad)
321 xmins =
min(x1,x2)-gapvd
322 xmaxs =
max(x1,x2)+gapvd
323 xminm =
min(x3,x4)-gapvd
324 xmaxm =
max(x3,x4)+gapvd
325 IF (xmaxs>=xminm.AND.xmaxm>=xmins)
THEN
326 cand_s(i) = -cand_s(i)
327 count_cand = count_cand+1
335 IF (itask == 0 .AND. iform == 2)
THEN
337 IF (ifpen(i) == 0 )
THEN
347 lskyi_count=lskyi_count+count_cand*5
348 count_remslv(nin)=count_remslv(nin)+ct
349 lskyi_sms_new = lskyi_sms_new + count_cand
350#include "lockoff.inc"
subroutine i11optcd(cand_m, cand_s, x, i_stok, irects, irectm, gap, nin, v, gap_s, gap_m, igap, stfs, itask, nrts, stfm, gap_s_l, gap_m_l, count_remslv, ifpen, cand_fx, cand_fy, cand_fz, iform, drad, dgapload, lskyi_sms_new)