35 1 NSN ,NSNR ,ISZNSNR ,I_MEM ,VMAXDT ,
36 2 IRECT ,X ,STF ,STFN ,XYZM ,
37 3 NSV ,II_STOK ,CAND_N ,ESHIFT ,CAND_E ,
38 4 MULNSN ,NOINT ,V ,BGAPSMX ,
39 5 VOXEL ,NBX ,NBY ,NBZ ,PMAX_GAP ,
40 6 NRTM ,GAP_S ,GAP_M ,MARGE ,CURV_MAX ,
41 7 NIN ,ITASK ,PENE_OLD,ITAB ,NBINFLG ,
42 8 MBINFLG,ILEV ,MSEGTYP ,
43 9 FLAGREMNODE,KREMNOD,REMNOD ,
44 A IGAP ,GAP_S_L,GAP_M_L ,ICODT ,ISKEW ,
54#include "implicit_f.inc"
61 parameter(nvecsz = mvsiz)
104 INTEGER I_MEM,ESHIFT,NSN,ISZNSNR,NRTM,NIN,ITASK,IGAP,
105 . MULNSN,NOINT,NSNR,,NBY,NBZ,
106 . NSV(*),CAND_N(*),CAND_E(*),
107 . IRECT(4,*), VOXEL(NBX+2,NBY+2,NBZ+2),II_STOK,ITAB(*),
108 . NBINFLG(*),MBINFLG(*),ILEV,MSEGTYP(*),
109 . FLAGREMNODE,KREMNOD(*),REMNOD(*), ICODT(*), (*)
112 . (3,*),V(3,*),XYZM(6),STF(*),STFN(*),GAP_S(*),GAP_M(*),
113 . CURV_MAX(*),PENE_OLD(5,),GAP_S_L(*),GAP_M_L(*),
114 . MARGE,BGAPSMX,PMAX_GAP,VMAXDT
115 my_real ,
INTENT(IN) :: dgapload ,drad
120 . NN,NE,K,L,J_STOK,JJ,
121 . PROV_N(),PROV_E(MVSIZ),
122 . nsnf, nsnl,m,delnod
125 . xs,ys,zs,sx,sy,sz,s2,
126 . xmin, xmax,ymin,
ymax,zmin, zmax,
127 . xx1,xx2,xx3,xx4,yy1,yy2,yy3,yy4,zz1,zz2,zz3,zz4,
128 . d1x,d1y,d1z,d2x,d2y,d2z,dd1,dd2,d2,a2
130 INTEGER IX,IY,IZ,M1,,M3,M4,
131 . IX1,IY1,IZ1,IX2,IY2,IZ2
132 INTEGER,
DIMENSION(:),
ALLOCATABLE :: LAST_NOD
133 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IIX,IIY,
135 . xminb,yminb,zminb,xmaxb,ymaxb,zmaxb,
136 . xmine,ymine,zmine,xmaxe,ymaxe,zmaxe,aaa
139 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAG
141 CALL my_alloc(tag,numnod)
142 CALL my_alloc(last_nod,nsn+nsnr)
145 ALLOCATE(iix(nsn+nsnr))
146 ALLOCATE(iiy(nsn+nsnr))
147 ALLOCATE(iiz(nsn+nsnr))
176 IF(stfn(i) <= zero)cycle
180 IF(x(1,j) < xmin) cycle
181 IF(x(1,j) > xmax) cycle
182 IF(x(2,j) < ymin) cycle
183 IF(x(2,j) >
ymax) cycle
184 IF(x(3,j) < zmin) cycle
185 IF(x(3,j) > zmax) cycle
187 iix(i)=int(nbx*(x(1,j)-xminb)/(xmaxb-xminb))
188 iiy(i)=int(nby*(x(2,j)-yminb)/(ymaxb-yminb))
189 iiz(i)=int(nbz*(x(3,j)-zminb)/(zmaxb-zminb))
191 iix(i)=
max(1,2+
min(nbx,iix(i)))
192 iiy(i)=
max(1,2+
min(nby,iiy(i)))
193 iiz(i)=
max(1,2+
min(nbz,iiz(i)))
195 first = voxel(iix(i),iiy(i),iiz(i))
198 voxel(iix(i),iiy(i),iiz(i)) = i
201 ELSEIF(last_nod(first) == 0)
THEN
210 last = last_nod(first)
221 iix(nsn+j)=int(nbx*(xrem(1,j)-xminb)/(xmaxb-xminb))
222 iiy(nsn+j)=int(nby*(xrem(2,j)-yminb)/(ymaxb-yminb))
223 iiz(nsn+j)=int(nbz*(xrem(3,j)-zminb)/(zmaxb-zminb))
224 iix(nsn+j)=
max(1,2+
min(nbx,iix(nsn+j)))
225 iiy(nsn+j)=
max(1,2+
min(nby,iiy(nsn+j)))
226 iiz(nsn+j)=
max(1,2+
min(nbz,iiz(nsn+j)))
228 first = voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j))
231 voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j)) = nsn+j
234 ELSEIF(last_nod(first) == 0)
THEN
238 last_nod(first) = nsn+j
243 last = last_nod(first)
245 last_nod(first) = nsn+j
258 IF(flagremnode == 2)
THEN
265 IF(stf(ne) <= zero)cycle
266 k = kremnod(2*(ne-1)+1)+1
267 l = kremnod(2*(ne-1)+2)
272 aaa = marge+curv_max(ne)+
max(
max(bgapsmx+gap_m(ne),pmax_gap)+dgapload,drad)+vmaxdt
288 xmaxe=
max(xx1,xx2,xx3,xx4)
289 xmine=
min(xx1,xx2,xx3,xx4)
295 ymaxe=
max(yy1,yy2,yy3,yy4)
296 ymine=
min(yy1,yy2,yy3,yy4)
302 zmaxe=
max(zz1,zz2,zz3,zz4)
303 zmine=
min(zz1,zz2,zz3,zz4)
308 sx = (yy3-yy1)*(zz4-zz2) - (zz3-zz1)*(yy4-yy2)
309 sy = (zz3-zz1)*(xx4-xx2) - (xx3-xx1)*(zz4-zz2)
310 sz = (xx3-xx1)*(yy4-yy2) - (yy3-yy1)*(xx4-xx2)
311 s2 = sx*sx + sy*sy + sz*sz
315 ix1=int(nbx*(xmine-aaa-xminb)/(xmaxb-xminb))
316 iy1=int(nby*(ymine-aaa-yminb)/(ymaxb-yminb))
317 iz1=int(nbz*(zmine-aaa-zminb)/(zmaxb-zminb))
323 ix2=int(nbx*(xmaxe+aaa-xminb)/(xmaxb-xminb))
324 iy2=int(nby*(ymaxe+aaa-yminb)/(ymaxb-yminb))
325 iz2=int(nbz*(zmaxe+aaa-zminb)/(zmaxb-zminb))
354 IF(tag(nn) == 1)
GOTO 200
363 aaa = marge + curv_max(ne)
364 + +
max(gap_s(jj)+gap_m(ne)+dgapload,drad)
369 k = kremnod(2*(ne-1)+2) + 1
370 l = kremnod(2*(ne-1)+3)
373 IF(remnod(m) == -
irem(2,j) )
THEN
379 IF(delnod /= 0)
GOTO 200
384 aaa = marge+curv_max(ne)
392 IF(xs<=xmine-aaa)
GOTO 200
393 IF(xs>=xmaxe+aaa)
GOTO 200
394 IF(ys<=ymine-aaa)
GOTO 200
395 IF(ys>=ymaxe+aaa)
GOTO 200
396 IF(zs<=zmine-aaa)
GOTO 200
397 IF(zs>=zmaxe+aaa)
GOTO 200
409 dd1 = d1x*sx+d1y*sy+d1z*sz
410 dd2 = d2x*sx+d2y*sy+d2z*sz
411 IF(dd1*dd2 > zero)
THEN
412 d2 =
min(dd1*dd1,dd2*dd2)
422 IF(j_stok == nvsiz)
THEN
425 1 nvsiz ,irect ,x ,nsv ,ii_stok,
426 2 cand_n,cand_e ,mulnsn,noint ,marge ,
427 3 i_mem ,prov_n ,prov_e,eshift,v ,
428 4 nsn ,nrtm ,gap_s ,gap_m ,curv_max,nin ,
429 5 pene_old,nbinflg ,mbinflg,ilev,msegtyp,
430 6 itab ,igap ,gap_s_l,gap_m_l,icodt,iskew,
445 k = kremnod(2*(ne-1)+1)+1
446 l = kremnod(2*(ne-1)+2)
460 IF(stf(ne) <= zero)cycle
462 aaa = marge+curv_max(ne)+
max(
max(bgapsmx+gap_m(ne),pmax_gap)+dgapload,drad)+vmaxdt
478 xmaxe=
max(xx1,xx2,xx3,xx4)
479 xmine=
min(xx1,xx2,xx3,xx4)
485 ymaxe=
max(yy1,yy2,yy3,yy4)
486 ymine=
min(yy1,yy2,yy3,yy4)
492 zmaxe=
max(zz1,zz2,zz3,zz4)
493 zmine=
min(zz1,zz2,zz3,zz4)
498 sx = (yy3-yy1)*(zz4-zz2) - (zz3-zz1)*(yy4-yy2)
499 sy = (zz3-zz1)*(xx4-xx2) - (xx3-xx1)*(zz4-zz2)
500 sz = (xx3-xx1)*(yy4-yy2) - (yy3-yy1)*(xx4-xx2)
501 s2 = sx*sx + sy*sy + sz*sz
505 ix1=int(nbx*(xmine-aaa-xminb)/(xmaxb-xminb))
506 iy1=int(nby*(ymine-aaa-yminb)/(ymaxb-yminb))
507 iz1=int(nbz*(zmine-aaa-zminb)/(zmaxb-zminb))
513 ix2=int(nbx*(xmaxe+aaa-xminb)/(xmaxb-xminb))
514 iy2=int(nby*(ymaxe+aaa-yminb)/(ymaxb-yminb))
515 iz2=int(nbz*(zmaxe+aaa-zminb)/(zmaxb-zminb))
552 aaa = marge + curv_max(ne)
553 + +
max(gap_s(jj)+gap_m(ne)+dgapload,drad)
561 aaa = marge+curv_max(ne)
569 IF(xs<=xmine-aaa)
GOTO 300
570 IF(xs>=xmaxe+aaa)
GOTO 300
571 IF(ys<=ymine-aaa)
GOTO 300
572 IF(ys>=ymaxe+aaa)
GOTO 300
573 IF(zs<=zmine-aaa)
GOTO 300
574 IF(zs>=zmaxe+aaa)
GOTO 300
586 dd1 = d1x*sx+d1y*sy+d1z*sz
587 dd2 = d2x*sx+d2y*sy+d2z*sz
588 IF(dd1*dd2 > zero)
THEN
589 d2 =
min(dd1*dd1,dd2*dd2)
599 IF(j_stok == nvsiz)
THEN
602 1 nvsiz ,irect ,x ,nsv ,ii_stok,
603 2 cand_n,cand_e ,mulnsn,noint ,marge ,
605 4 nsn ,nrtm ,gap_s ,gap_m ,curv_max,nin ,
606 5 pene_old,nbinflg ,mbinflg,ilev,msegtyp,
607 6 itab ,igap ,gap_s_l,gap_m_l,icodt,iskew,
633 1 j_stok,irect ,x ,nsv ,ii_stok,
634 2 cand_n,cand_e ,mulnsn,noint ,marge ,
635 3 i_mem ,prov_n ,prov_e,eshift,v ,
636 4 nsn ,nrtm ,gap_s ,gap_m ,curv_max,nin ,
637 5 pene_old,nbinflg,mbinflg,ilev ,msegtyp,
638 6 itab ,igap ,gap_s_l,gap_m_l,icodt,iskew,
648 nsnf = 1 + itask*nsn / nthread
649 nsnl = (itask+1)*nsn / nthread
653 voxel(iix(i),iiy(i),iiz(i))=0
660 nsnf = 1 + itask*nsnr / nthread
661 nsnl = (itask+1)*nsnr / nthread
663 voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j))=0
subroutine i25trivox(nsn, nsnr, isznsnr, i_mem, vmaxdt, irect, x, stf, stfn, xyzm, nsv, ii_stok, cand_n, eshift, cand_e, mulnsn, noint, v, bgapsmx, voxel, nbx, nby, nbz, pmax_gap, nrtm, gap_s, gap_m, marge, curv_max, nin, itask, pene_old, itab, nbinflg, mbinflg, ilev, msegtyp, flagremnode, kremnod, remnod, igap, gap_s_l, gap_m_l, icodt, iskew, drad, dgapload)