34 1 NSV ,CAND_E ,CAND_N ,X ,I_STOK ,
35 2 IRECT ,GAP_S ,GAP_M ,V ,ICURV ,
36 3 STFN ,ITASK ,STF ,NIN ,NSN ,
37 4 IRTLM ,TIME_S ,MSEGLO ,COUNT_REMSLV,ITAB ,
38 5 SECND_FR,NSNR ,PENE_OLD,STIF_OLD ,MSEGTYP ,
39 6 NRTM ,PMAX_GAP,I_OPT_STOK,CAND_OPT_E,CAND_OPT_N ,
40 7 SIZOPT ,IGAP ,GAP_S_L ,GAP_M_L ,DRAD ,
49#include "implicit_f.inc"
67 INTEGER NSNR,I_STOK,NIN ,ITASK, NSN, ICURV, I_OPT_STOK, NRTM,
68 . IGAP, IRECT(4,*), NSV(*), (*), CAND_N(*),
69 . IRTLM(4,NSN),MSEGLO(*),COUNT_REMSLV(*), ITAB(*),
70 . MSEGTYP(*), CAND_OPT_E(*), CAND_OPT_N(*), SIZOPT
71 INTEGER ,
INTENT(INOUT) :: ICONT_I(NSN)
72 my_real ,
INTENT(IN) :: DGAPLOAD ,DRAD
75 . x(3,*),gap_s(*),gap_m(*),stfn(*),stf(*),
76 . v(3,*),secnd_fr(6,*),time_s(*),
77 . pene_old(5,nsn),stif_old(2,nsn),
78 . gap_s_l(*),gap_m_l(*)
82 INTEGER I,L,IS,JS,LS,NLS,NLT,NSEG,NLS2,SG,FIRST,LAST,MSEG,NLF,
83 . MG,,N,KLEAVE, ISH, NSNRF,NSNRL,NSNF,NSNL
84 INTEGER LIST(MVSIZ),IG(MVSIZ),IX1(MVSIZ),IX2(MVSIZ),IX3(MVSIZ),
85 . IX4(MVSIZ), LISTI(MVSIZ)
87 . XI,X1,X2,X3,X4,YI,Y1,Y2,Y3,Y4,ZI,Z1,Z2,Z3,Z4,
88 . XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX,V12,V22,V32,V42
92 . x0,y0,z0,xxx,yyy,zzz,curv_max,tzinf,vx,vy,vz,vv,
94 . vx1,vx2,vx3,vx4,vy1,vy2,vy3,vy4,vz1,vz2,vz3,vz4
98 prec = (seven+half)*em06
107 nsnf = 1 + itask*nsn / nthread
108 nsnl = (itask+1)*nsn / nthread
110 IF(irtlm(1,i)/=0) icont_i(i)=0
113 nsnrf = 1 + itask*nsnr / nthread
114 nsnrl = (itask+1)*nsnr / nthread
121 first = 1 + i_stok*itask / nthread
122 last = i_stok*(itask+1) / nthread
124 DO sg = first,last,mseg
125 nseg =
min(mseg,last-js)
136 IF(cand_n(i)<=nsn)
THEN
147 gapv(is)=gap_s(cand_n(i)) + gap_m(cand_e(i))
149 . gapv(is)=
min(gapv(is),
150 . gap_s_l(cand_n(i))+gap_m_l(cand_e(i)))
156 gapv(is)=gap_s(cand_n(i)) + gap_m(cand_e(i))
158 . gapv(is)=
min(gapv(is),
159 . gap_s_l(cand_n(i))+gap_m_l(cand_e(i)))
175 IF(stfn(n)/=zero.AND.stf(l)>zero.AND.mg==0.AND.kleave/=-1)
THEN
177 ig(is) = nsv(cand_n(i))
192 vz=
max(
max(vz1,vz2,vz3,vz4)-vzi,vzi-
min(vz1,vz2,vz3,vz4))
194 tzinf =
max(
max(gapv(is)+dgapload,drad),onep01*vz*dt1)
195 tzinf =
max(prec,tzinf)
196 zmin =
min(z1,z2,z3,z4)-tzinf
197 zmax =
max(z1,z2,z3,z4)+tzinf
198 IF (zmin<=zi.AND.zmax>=zi)
THEN
220 vy=
max(
max(vy1,vy2,vy3,vy4)-vyi,vyi-
min(vy1,vy2,vy3,vy4))
222 tzinf =
max(
max(gapv(is)+dgapload,drad),onep01*vy*dt1)
223 tzinf =
max(prec,tzinf)
224 ymin =
min(y1,y2,y3,y4)-tzinf
225 ymax =
max(y1,y2,y3,y4)+tzinf
226 IF (ymin<=yi.AND.ymax>=yi)
THEN
232#include "vectorize.inc"
246 vx=
max(
max(vx1,vx2,vx3,vx4)-vxi,vxi-
min(vx1,vx2,vx3,vx4))
248 tzinf =
max(
max(gapv(is)+dgapload,drad),onep01*vx*dt1)
249 tzinf =
max(prec,tzinf)
250 xmin =
min(x1,x2,x3,x4)-tzinf
251 xmax =
max(x1,x2,x3,x4)+tzinf
252 IF (xmin<=xi.AND.xmax>=xi)
THEN
253 cand_n(i) = -cand_n(i)
264 gapv(is)=
gapfi(nin)%P(cand_n(i)-nsn) + gap_m(cand_e(i))
266 . gapv(is)=
min(gapv(is),
267 .
gap_lfi(nin)%P(cand_n(i)-nsn)+gap_m_l(cand_e(i)))
278 IF(
stifi(nin)%P(ii)/=zero.AND.stf(l)>zero.AND.mg==0.AND.kleave/=-1)
THEN
279 zi =
xfi(nin)%P(3,ii)
288 vzi =
vfi(nin)%P(3,ii)
293 vz=
max(
max(vz1,vz2,vz3,vz4)-vzi,vzi-
min(vz1,vz2,vz3,vz4))
295 tzinf =
max(
max(gapv(is)+dgapload,drad),onep01*vz*dt1)
296 tzinf =
max(prec,tzinf)
297 zmin =
min(z1,z2,z3,z4)-tzinf
298 zmax =
max(z1,z2,z3,z4)+tzinf
299 IF (zmin<=zi.AND.zmax>=zi)
THEN
318 vyi =
vfi(nin)%P(2,ii)
323 vy=
max(
max(vy1,vy2,vy3,vy4)-vyi,vyi-
min(vy1,vy2,vy3,vy4))
325 tzinf =
max(
max(gapv(is)+dgapload,drad),onep01*vy*dt1)
326 tzinf =
max(prec,tzinf)
327 ymin =
min(y1,y2,y3,y4)-tzinf
328 ymax =
max(y1,y2,y3,y4)+tzinf
329 IF (ymin<=yi.AND.ymax>=yi
THEN
335#include "vectorize.inc"
340 xi =
xfi(nin)%P(1,ii)
345 vxi =
vfi(nin)%P(1,ii)
350 vx=
max(
max(vx1,vx2,vx3,vx4)-vxi,vxi-
min(vx1,vx2,vx3,vx4))
352 tzinf =
max(
max(gapv(is)+dgapload,drad),onep01*vx*dt1)
353 tzinf =
max(prec,tzinf)
354 xmin =
min(x1,x2,x3,x4)-tzinf
355 xmax =
max(x1,x2,x3,x4)+tzinf
356 IF (xmin<=xi.AND.xmax>=xi)
THEN
357 cand_n(i) = -cand_n(i)
373 cand_n(i) = -cand_n(i)
374 i_opt_stok= i_opt_stok + 1
375 IF(i_opt_stok <= sizopt)
THEN
376 cand_opt_n(i_opt_stok)= cand_n(i)
377 cand_opt_e(i_opt_stok)= cand_e(i)
381 IF(i_opt_stok <= sizopt)
THEN
382 lskyi_count=lskyi_count+i_opt_stok*5
383 count_remslv(nin)=count_remslv(nin)+i_opt_stok
subroutine i25optcd(nsv, cand_e, cand_n, x, i_stok, irect, gap_s, gap_m, v, icurv, stfn, itask, stf, nin, nsn, irtlm, time_s, mseglo, count_remslv, itab, secnd_fr, nsnr, pene_old, stif_old, msegtyp, nrtm, pmax_gap, i_opt_stok, cand_opt_e, cand_opt_n, sizopt, igap, gap_s_l, gap_m_l, drad, dgapload, icont_i)