35 1 NSV ,CAND_E ,CAND_N ,X ,I_STOK ,
36 2 IRECT ,GAP_S ,GAP_M ,V ,ICURV ,
37 3 STFN ,ITASK ,STF ,NIN ,NSN ,
38 4 IRTLM ,TIME_S ,MSEGLO ,COUNT_REMSLV,
39 5 SECND_FR,NSNR ,PENE_OLD,STIF_OLD ,
40 6 PMAX_GAP,EDGE_L2,IEDGE ,IGSTI ,MVOISIN ,
41 7 ICONT_I ,IS2SE,IRTSE,
42 8 NSNE,NRTSE,IS2PT,ISPT2,ISEGPT,IEDG4,T2MAIN_SMS,
43 9 LSKYI_SMS_NEW,DGAPLOAD)
52#include "implicit_f.inc"
72 INTEGER NSNR,IEDGE,I_STOK,NIN ,ITASK, NSN, ICURV,
73 . IRECT(4,*), NSV(*), CAND_E(*), CAND_N(*),
74 . IRTLM(2,NSN),MSEGLO(*),COUNT_REMSLV(*),IGSTI ,MVOISIN(4,*),
75 . ICONT_I(*),IS2SE(2,*),IRTSE(5,*),NSNE,NRTSE,IS2PT(*),ISPT2(*),
76 . ISEGPT(*),IEDG4,T2MAIN_SMS(6,*),LSKYI_SMS_NEW
79 . X(3,*),GAP_S(*),GAP_M(*),STFN(*),STF(*),
80 . V(3,*),SECND_FR(6,*),TIME_S(*),EDGE_L2(*),
81 . pene_old(5,nsn),stif_old(2,nsn)
82 my_real ,
INTENT(IN) :: dgapload
86 INTEGER I,L,IS,,LS,NLS,NLT,NSEG,NLS2,SG,FIRST,LAST,MSEG,NLF,
87 . MG,II,NSNF,NSNL,N,IGL,N1,N2,N3,N4
88 INTEGER LIST(MVSIZ),IG(),IX1(MVSIZ),IX2(MVSIZ),IX3(MVSIZ),
89 . IX4(MVSIZ), LISTI(MVSIZ),COUNT_CAND,CT,NSNRF,NSNRL,SE,E,SN,,
90 . COUNT_CONNEC_SMS,NS,IE,KK
92 . xi,x1,x2,x3,x4,yi,y1,y2,y3,y4,zi,z1,z2,z3,z4,
93 . xmin,xmax,ymin,
ymax,zmin,zmax,v12,v22,v32,v42
95 . gapv(mvsiz),edge_l(mvsiz),prec
97 . x0,y0,z0,xxx,yyy,zzz,curv_max,tzinf,vx,vy,vz,vv,
99 . vx1,vx2,vx3,vx4,vy1,vy2,vy3,vy4,vz1,vz2,vz3,vz4
104 prec = (seven+half)*em06
109 nsnf = 1 + itask*nsn / nthread
110 nsnl = (itask+1)*nsn / nthread
113 secnd_fr(4,i)=secnd_fr(1,i)
114 secnd_fr(5,i)=secnd_fr(2,i)
115 secnd_fr(6,i)=secnd_fr(3,i)
123 pene_old(2,i) = pene_old(1,i)
124 stif_old(2,i) = stif_old(1,i)
129 IF(irtlm(1,i)/=0) icont_i(i)=0
138 nsnrf = 1 + itask*nsnr / nthread
139 nsnrl = (itask+1)*nsnr / nthread
154 first = 1 + i_stok*itask / nthread
155 last = i_stok*(itask+1) / nthread
159 DO sg = first,last,mseg
160 nseg =
min(mseg,last-js)
171 IF(cand_n(i)<=nsn)
THEN
183 gapv(is)=gap_s(cand_n(i)) + gap_m(cand_e(i))
190 gapv(is)=gap_s(cand_n(i)) + gap_m(cand_e(i))
191 edge_l(is)=edge_l2(cand_n(i))
199 gapv(is)=gap_s(cand_n(i)) + gap_m(cand_e(i))
206 gapv(is)=gap_s(cand_n(i)) + gap_m(cand_e(i))
207 edge_l(is)=edge_l2(cand_n(i))
221 IF(stf(l)/=zero.AND.stfn(cand_n(i))/=zero)
THEN
222 ig(is) = nsv(cand_n(i))
242 x0 = fourth*(x1+x2+x3+x4)
243 y0 = fourth*(y1+y2+y3+y4)
244 z0 = fourth*(z1+z2+z3+z4)
245 xxx=
max(x1,x2,x3,x4)-
min(x1,x2,x3,x4)
246 yyy=
max(y1,y2,y3,y4)-
min(y1,y2,y3,y4)
247 zzz=
max(z1,z2,z3,z4)-
min(z1,z2,z3,z4)
248 curv_max = half *
max(xxx,yyy,zzz)
264 vx=
max(
max(vx1,vx2,vx3,vx4)-vxi,vxi-
min(vx1,vx2,vx3,vx4))
265 vy=
max(
max(vy1,vy2,vy3,vy4)-vyi,vyi-
min(vy1,vy2
266 vz=
max(
max(vz1,vz2,vz3,vz4)-vzi,vzi-
min(vz1,vz2,vz3,vz4))
267 vv = onep01*
max(vx,vy,vz)
269 tzinf =
max(curv_max+gapv(is)+dgapload,vv*dt1,edge_l(is))
270 tzinf =
max(prec,tzinf)
277 IF (xmin <= xi.AND.xmax >= xi.AND.
278 . ymin <= yi.AND.
ymax >= yi.AND.
279 . zmin <= zi.AND.zmax >= zi)
THEN
280 cand_n(i) = -cand_n(i)
282 IF ((idtmins /= 2).AND.(idtmins_int == 0))
THEN
283 count_cand = count_cand+1
284 IF(ig(is) > numnod) count_cand = count_cand + 3
287 IF(ig(is) > numnod)
THEN
288 count_cand = count_cand
290 IF (is2se(1,ns) > 0)
THEN
296 count_connec_sms = count_connec_sms + t2main_sms(1,irtse(kk,ie))*
297 . (t2main_sms(1,ix1(is))+t2main_sms(1,ix2(is))+t2main_sms(1,ix3(is))+t2main_sms(1,ix4(is)))
300 count_cand = count_cand+1
301 count_connec_sms = count_connec_sms + t2main_sms(1,ig(is))*
302 . (t2main_sms(1,ix1(is))+t2main_sms(1,ix2(is))+t2main_sms(1,ix3(is))+t2main_sms(1,ix4(is)))
315 irtlm(1,cand_n(i)) = iabs(irtlm(1,cand_n(i)))
316 mg = irtlm(1,cand_n(i))
317 IF(stf(l)/=zero.AND.stfn(cand_n(i))/=zero)
THEN
318 IF(mg /= 0 .and. mg /= mseglo(cand_e(i)))
THEN
320 time_s(cand_n(i))=zero
321 ELSEIF(mg == mseglo(cand_e(i)))
THEN
327 ig(is) = nsv(cand_n(i))
342 vz=
max(
max(vz1,vz2,vz3,vz4)-vzi,vzi-
min(vz1,vz2,vz3,vz4))
344 tzinf =
max(gapv(is)+dgapload,onep01*vz*dt1,edge_l(is))
345 tzinf =
max(prec,tzinf)
347 zmax =
max(z1,z2,z3,z4)+tzinf
348 IF (zmin<=zi.AND.zmax>=zi)
THEN
352 time_s(cand_n(i))=zero
360 mg = irtlm(1,cand_n(i))
361 IF (mg == mseglo(cand_e(i)))
THEN
363 time_s(cand_n(i))=-ep20
366 IF(stfn(cand_n(i))==zero)
THEN
368 time_s(cand_n(i))=-ep20
378 mg = irtlm(1,cand_n(i))
379 IF(mg == mseglo(cand_e(i)))
THEN
395 vy=
max(
max(vy1,vy2,vy3,vy4)-vyi,vyi-
min(vy1,vy2,vy3,vy4))
397 tzinf =
max(gapv(is)+dgapload,onep01*vy*dt1,edge_l(is))
398 tzinf =
max(prec,tzinf)
399 ymin =
min(y1,y2,y3,y4)-tzinf
401 IF (ymin<=yi.AND.
ymax>=yi)
THEN
405 time_s(cand_n(i))=zero
413 mg = irtlm(1,cand_n(i))
414 IF(mg == mseglo(cand_e(i)))
THEN
416 IF ((idtmins /= 2).AND.(idtmins_int == 0))
THEN
417 cand_n(i) = -cand_n(i)
418 count_cand = count_cand+1
419 IF(ig(is) > numnod) count_cand = count_cand + 3
422 ig(is) = nsv(cand_n(i))
423 cand_n(i) = -cand_n(i)
430 IF(ig(is) > numnod)
THEN
431 count_cand = count_cand+4
433 IF (is2se(1,ns) > 0)
THEN
439 count_connec_sms = count_connec_sms + t2main_sms(1,irtse(kk,ie))*
440 . (t2main_sms(1,ix1(is))+t2main_sms(1,ix2(is))+t2main_sms(1,ix3(is))+t2main_sms(1,ix4(is)))
443 count_cand = count_cand+1
444 count_connec_sms = count_connec_sms + t2main_sms(1,ig(is))*
445 . (t2main_sms(1,ix1(is))+t2main_sms(1,ix2(is))+t2main_sms(1,ix3(is))+t2main_sms(1,ix4(is)))
460 vx=
max(
max(vx1,vx2,vx3,vx4)-vxi,vxi-
min(vx1,vx2,vx3,vx4))
462 tzinf =
max(gapv(is)+dgapload,onep01*vx*dt1,edge_l(is))
463 tzinf =
max(prec,tzinf)
464 xmin =
min(x1,x2,x3,x4)-tzinf
465 xmax =
max(x1,x2,x3,x4)+tzinf
466 IF (xmin<=xi.AND.xmax>=xi)
THEN
467 cand_n(i) = -cand_n(i)
468 IF ((idtmins /= 2).AND.(idtmins_int == 0))
THEN
469 count_cand = count_cand+1
470 IF(ig(is) > numnod) count_cand = count_cand + 3
473 IF(ig(is) > numnod)
THEN
474 count_cand = count_cand+4
476 IF (is2se(1,ns) > 0)
THEN
482 count_connec_sms = count_connec_sms + t2main_sms(1,irtse(kk,ie))*
483 . (t2main_sms(1,ix1(is))+t2main_sms(1,ix2(is))+t2main_sms(1,ix3(is))+t2main_sms(1,ix4(is)))
486 count_cand = count_cand+1
487 count_connec_sms = count_connec_sms + t2main_sms(1,ig(is))*
488 . (t2main_sms(1,ix1(is))+t2main_sms(1,ix2(is))+t2main_sms(1,ix3(is))+t2main_sms(1,ix4(is)))
492 time_s(cand_n(i))=zero
505 gapv(is)=
gapfi(nin)%P(cand_n(i)-nsn) + gap_m(cand_e(i))
512 gapv(is)=
gapfi(nin)%P(cand_n(i)-nsn) + gap_m(cand_e(i))
523 IF(stf(l)/=zero.AND.
stifi(nin)%P(ii)/=zero)
THEN
524 xi =
xfi(nin)%P(1,ii)
525 yi =
xfi(nin)%P(2,ii)
526 zi =
xfi(nin)%P(3,ii)
543 x0 = fourth*(x1+x2+x3+x4)
544 y0 = fourth*(y1+y2+y3+y4)
545 z0 = fourth*(z1+z2+z3+z4)
546 xxx=
max(x1,x2,x3,x4)-
min(x1,x2,x3,x4)
547 yyy=
max(y1,y2,y3,y4)-
min(y1,y2,y3,y4)
548 zzz=
max(z1,z2,z3,z4)-
min(z1,z2,z3,z4)
549 curv_max = half *
max(xxx,yyy,zzz)
550 vxi =
vfi(nin)%P(1,ii)
551 vyi =
vfi(nin)%P(2,ii)
552 vzi =
vfi(nin)%P(3,ii)
565 vx=
max(
max(vx1,vx2,vx3,vx4)-vxi,vxi-
min(vx1,vx2,vx3,vx4))
566 vy=
max(
max(vy1,vy2,vy3,vy4)-vyi,vyi-
min(vy1,vy2,vy3,vy4))
567 vz=
max(
max(vz1,vz2,vz3,vz4)-vzi,vzi-
min(vz1,vz2,vz3,vz4))
570 tzinf =
max(curv_max+gapv(is)+dgapload,onep01*vv*dt1,edge_l(is))
571 tzinf =
max(prec,tzinf)
578 IF (xmin <= xi.AND.xmax >= xi.AND.
579 . ymin <= yi.AND.
ymax >= yi.AND.
580 . zmin <= zi.AND.zmax >= zi)
THEN
581 cand_n(i) = -cand_n(i)
582 count_cand = count_cand+1
583 IF ((idtmins /= 2).AND.(idtmins_int == 0))
THEN
597 . (t2main_sms(1,ix1(is))+t2main_sms(1,ix2(is))+t2main_sms(1,ix3(is))+t2main_sms(1,ix4(is)))
601 count_connec_sms = count_connec_sms +
t2main_sms_fi(nin)%P(1,ii)*
602 . (t2main_sms(1,ix1(is))+t2main_sms
619 IF(stf(l)/=zero.AND.
stifi(nin)%P(ii)/=zero)
THEN
620 IF(mg /= 0 .and. mg /= mseglo(cand_e(i)))
THEN
623 ELSEIF(mg == mseglo(cand_e(i)))
THEN
629 zi =
xfi(nin)%P(3,ii)
638 vzi =
vfi(nin)%P(3,ii)
643 vz=
max(
max(vz1,vz2,vz3,vz4)-vzi,vzi-
min(vz1,vz2,vz3,vz4))
645 tzinf =
max(gapv(is)+dgapload,onep01*vz*dt1,edge_l(is))
646 tzinf =
max(prec,tzinf)
647 zmin =
min(z1,z2,z3,z4)-tzinf
648 zmax =
max(z1,z2,z3,z4)+tzinf
649 IF (zmin<=zi.AND.zmax>=zi)
THEN
659 IF (mg == mseglo(cand_e(i)))
THEN
664 IF(
stifi(nin)%P(ii)==zero)
THEN
680 IF(mg == mseglo(cand_e(i)))
THEN
691 vyi =
vfi(nin)%P(2,ii)
696 vy=
max(
max(vy1,vy2,vy3,vy4)-vyi,vyi-
min(vy1,vy2,vy3,vy4))
698 tzinf =
max(gapv(is)+dgapload,onep01*vy*dt1,edge_l(is))
699 tzinf =
max(prec,tzinf)
700 ymin =
min(y1,y2,y3,y4)-tzinf
702 IF (ymin<=yi.AND.
ymax>=yi)
THEN
717 IF(mg == mseglo(cand_e(i)))
THEN
719 cand_n(i) = -cand_n(i)
720 count_cand = count_cand+1
721 IF ((idtmins /= 2).AND.(idtmins_int == 0))
THEN
740 . (t2main_sms(1,ix1(is))+t2main_sms(1,ix2(is))+t2main_sms(1,ix3(is))+t2main_sms(1,ix4(is)))
744 count_connec_sms = count_connec_sms +
t2main_sms_fi(nin)%P(1,ii)*
745 . (t2main_sms(1,ix1(is))+t2main_sms(1,ix2(is))+t2main_sms(1,ix3(is))+t2main_sms(1,ix4(is)))
750 xi =
xfi(nin)%P(1,ii)
755 vxi =
vfi(nin)%P(1,ii)
760 vx=
max(
max(vx1,vx2,vx3,vx4)-vxi,vxi-
min(vx1,vx2,vx3,vx4))
762 tzinf =
max(gapv(is)+dgapload,onep01*vx*dt1,edge_l(is
763 tzinf =
max(prec,tzinf)
764 xmin =
min(x1,x2,x3,x4)-tzinf
765 xmax =
max(x1,x2,x3,x4)+tzinf
766 IF (xmin<=xi.AND.xmax>=xi)
THEN
767 cand_n(i) = -cand_n(i)
768 count_cand = count_cand+1
769 IF ((idtmins /= 2).AND.(idtmins_int == 0))
THEN
783 . (t2main_sms(1,ix1(is))+t2main_sms(1,ix2(is))+t2main_sms(1,ix3(is))+t2main_sms(1,ix4(is)))
787 count_connec_sms = count_connec_sms +
t2main_sms_fi(nin)%P(1,ii)*
788 . (t2main_sms(1,ix1(is))+t2main_sms(1,ix2(is))+t2main_sms(1,ix3(is))+t2main_sms(1,ix4(is)))
805 lskyi_count=lskyi_count+count_cand*5
806 count_remslv(nin)=count_remslv(nin)+ct
807 lskyi_sms_new = lskyi_sms_new + count_connec_sms
808#include "lockoff.inc"
816 IF (iedg4 > 0 .AND.nspmd == 1)
THEN
821 1 nsnf ,nsnl ,nsv ,cand_n ,nsn ,irtse
822 2 is2se ,ispt2 ,isegpt ,irtlm ,nsne ,