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)
105 INTEGER I_MEM,ESHIFT,NSN,ISZNSNR,NRTM,NIN,ITASK,IGAP,
106 . MULNSN,NOINT,NSNR,NBX,NBY,NBZ,
107 . NSV(*),CAND_N(*),CAND_E(*),
108 . IRECT(4,*), VOXEL(NBX+2,NBY+2,NBZ+2),II_STOK,ITAB(*),
109 . NBINFLG(*),MBINFLG(*),ILEV,MSEGTYP(*),
110 . FLAGREMNODE,KREMNOD(*),REMNOD(*), ICODT(*), ISKEW(*)
113 . X(3,*),V(3,*),XYZM(6),STF(*),STFN(*),GAP_S(*),GAP_M(*),
114 . CURV_MAX(*),PENE_OLD(5,NSN),GAP_S_L(*),GAP_M_L(*),
115 . MARGE,BGAPSMX,PMAX_GAP,VMAXDT
116 my_real ,
INTENT(IN) :: dgapload ,drad
120 INTEGER NB_NCN,NB_NCN1,NB_ECN,I,J,DIR,NB_NC,NB_EC,
121 . N1,N2,N3,N4,NN,NE,K,L,J_STOK,,JJ,
122 . PROV_N(MVSIZ),PROV_E(MVSIZ),
123 . nsnf, nsnl,m,ns1,ns2,nse,ns,ip,delnod
126 . dx,dy,dz,xs,ys,zs,xx,sx,sy,sz,s2,
127 . xmin, xmax,ymin,
ymax,zmin, zmax, tz, gapsmx, gapl,
128 . xx1,xx2,xx3,xx4,yy1,yy2,yy3,yy4,zz1,zz2,zz3,zz4,
129 . d1x,d1y,d1z,d2x,d2y,d2z,dd1,dd2,d2,a2,gs
133INTEGER,
DIMENSION(:),
ALLOCATABLE :: LAST_NOD
134 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IIX,IIY,IIZ
136 . xminb,yminb,zminb,xmaxb,ymaxb,zmaxb,
137 . xmine,ymine,zmine,xmaxe,ymaxe,zmaxe,aaa
138 INTEGER FIRST,NEW,LAST
140 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAG
142 CALL my_alloc(tag,numnod)
143 CALL my_alloc(last_nod,nsn+nsnr)
146 ALLOCATE(iix(nsn+nsnr))
147 ALLOCATE(iiy(nsn+nsnr))
148 ALLOCATE(iiz(nsn+nsnr))
177 IF(stfn(i) <= zero)cycle
181 IF(x(1,j) < xmin) cycle
182 IF(x(1,j) > xmax) cycle
183 IF(x(2,j) < ymin) cycle
184 IF(x(2,j) >
ymax) cycle
185 IF(x(3,j) < zmin) cycle
186 IF(x(3,j) > zmax) cycle
188 iix(i)=int(nbx*(x(1,j)-xminb)/(xmaxb-xminb))
189 iiy(i)=int(nby*(x(2,j)-yminb)/(ymaxb-yminb))
190 iiz(i)=int(nbz*(x(3,j)-zminb)/(zmaxb-zminb))
192 iix(i)=
max(1,2+
min(nbx,iix(i)))
193 iiy(i)=
max(1,2+
min(nby,iiy(i)))
194 iiz(i)=
max(1,2+
min(nbz,iiz(i)))
196 first = voxel(iix(i),iiy(i),iiz(i))
199 voxel(iix(i),iiy(i),iiz(i)) = i
202 ELSEIF(last_nod(first) == 0)
THEN
211 last = last_nod(first)
222 iix(nsn+j)=int(nbx*(xrem(1,j)-xminb)/(xmaxb-xminb))
223 iiy(nsn+j)=int(nby*(xrem(2,j)-yminb)/(ymaxb-yminb))
224 iiz(nsn+j)=int(nbz*(xrem(3,j)-zminb)/(zmaxb-zminb))
225 iix(nsn+j)=
max(1,2+
min(nbx,iix(nsn+j)))
226 iiy(nsn+j)=
max(1,2+
min(nby,iiy(nsn+j)))
227 iiz(nsn+j)=
max(1,2+
min(nbz,iiz(nsn+j)))
229 first = voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j))
232 voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j)) = nsn+j
235 ELSEIF(last_nod(first) == 0)
THEN
239 last_nod(first) = nsn+j
244 last = last_nod(first)
246 last_nod(first) = nsn+j
259 IF(flagremnode == 2)
THEN
266 IF(stf(ne) <= zero)cycle
267 k = kremnod(2*(ne-1)+1)+1
268 l = kremnod(2*(ne-1)+2)
289 xmaxe=
max(xx1,xx2,xx3,xx4)
290 xmine=
min(xx1,xx2,xx3,xx4)
296 ymaxe=
max(yy1,yy2,yy3,yy4)
297 ymine=
min(yy1,yy2,yy3,yy4)
303 zmaxe=
max(zz1,zz2,zz3,zz4)
304 zmine=
min(zz1,zz2,zz3,zz4)
309 sx = (yy3-yy1)*(zz4-zz2) - (zz3-zz1)*(yy4-yy2)
310 sy = (zz3-zz1)*(xx4-xx2) - (xx3-xx1)*(zz4-zz2)
311 sz = (xx3-xx1)*(yy4-yy2) - (yy3-yy1)*(xx4-xx2)
312 s2 = sx*sx + sy*sy + sz*sz
316 ix1=int(nbx*(xmine-aaa-xminb)/(xmaxb-xminb))
317 iy1=int(nby*(ymine-aaa-yminb)/(ymaxb-yminb))
318 iz1=int(nbz*(zmine-aaa-zminb)/(zmaxb-zminb))
324 ix2=int(nbx*(xmaxe+aaa-xminb)/(xmaxb-xminb))
325 iy2=int(nby*(ymaxe+aaa-yminb)/(ymaxb-yminb))
326 iz2=int(nbz*(zmaxe+aaa-zminb)/(zmaxb-zminb))
355 IF(tag(nn) == 1)
GOTO 200
364 aaa = marge + curv_max(ne)
365 + +
max(gap_s(jj)+gap_m(ne)+dgapload,drad)
370 k = kremnod(2*(ne-1)+2) + 1
371 l = kremnod(2*(ne-1)+3)
374 IF(remnod(m) == -
iremTHEN
380 IF(delnod /= 0)
GOTO 200
385 aaa = marge+curv_max(ne)
393 IF(xs<=xmine-aaa)
GOTO 200
394 IF(xs>=xmaxe+aaa)
GOTO 200
395 IF(ys<=ymine-aaa)
GOTO 200
396 IF(ys>=ymaxe+aaa)
GOTO 200
398 IF(zs>=zmaxe+aaa)
GOTO 200
410 dd1 = d1x*sx+d1y*sy+d1z*sz
411 dd2 = d2x*sx+d2y*sy+d2z*sz
412 IF(dd1*dd2 > zero)
THEN
413 d2 =
min(dd1*dd1,dd2*dd2)
423 IF(j_stok == nvsiz)
THEN
426 1 nvsiz ,irect ,x ,nsv ,ii_stok,
427 2 cand_n,cand_e ,mulnsn,noint ,marge ,
428 3 i_mem ,prov_n ,prov_e,eshift,v ,
429 4 nsn ,nrtm ,gap_s ,gap_m ,curv_max,nin ,
430 5 pene_old,nbinflg ,mbinflg,ilev,msegtyp,
431 6 itab ,igap ,gap_s_l,gap_m_l,icodt,iskew,
446 k = kremnod(2*(ne-1)+1)+1
447 l = kremnod(2*(ne-1)+2)
461 IF(stf(ne) <= zero)cycle
463 aaa = marge+curv_max(ne)+
max(
max(bgapsmx+gap_m(ne),pmax_gap)+dgapload,drad)+vmaxdt
479 xmaxe=
max(xx1,xx2,xx3,xx4)
480 xmine=
min(xx1,xx2,xx3,xx4)
486 ymaxe=
max(yy1,yy2,yy3,yy4)
487 ymine=
min(yy1,yy2,yy3
493 zmaxe=
max(zz1,zz2,zz3,zz4)
494 zmine=
min(zz1,zz2,zz3,zz4)
499 sx = (yy3-yy1)*(zz4-zz2) - (zz3-zz1)*(yy4-yy2)
500 sy = (zz3-zz1)*(xx4-xx2) - (xx3-xx1)*(zz4-zz2)
501 sz = (xx3-xx1)*(yy4-yy2) - (yy3-yy1)*(xx4-xx2)
502 s2 = sx*sx + sy*sy + sz*sz
506 ix1=int(nbx*(xmine-aaa-xminb)/(xmaxb-xminb))
507 iy1=int(nby*(ymine-aaa-yminb)/(ymaxb-yminb))
508 iz1=int(nbz*(zmine-aaa-zminb)/(zmaxb-zminb))
514 ix2=int(nbx*(xmaxe+aaa-xminb)/(xmaxb-xminb))
515 iy2=int(nby*(ymaxe+aaa-yminb)/(ymaxb-yminb))
516 iz2=int(nbz*(zmaxe+aaa-zminb)/(zmaxb-zminb))
553 aaa = marge + curv_max(ne)
554 + +
max(gap_s(jj)+gap_m(ne)+dgapload,drad)
562 aaa = marge+curv_max(ne)
570 IF(xs<=xmine-aaa)
GOTO 300
571 IF(xs>=xmaxe+aaa)
GOTO 300
572 IF(ys<=ymine-aaa)
GOTO 300
573 IF(ys>=ymaxe+aaa)
GOTO 300
574 IF(zs<=zmine-aaa)
GOTO 300
575 IF(zs>=zmaxe+aaa)
GOTO 300
587 dd1 = d1x*sx+d1y*sy+d1z*sz
588 dd2 = d2x*sx+d2y*sy+d2z*sz
589 IF(dd1*dd2 > zero)
THEN
590 d2 =
min(dd1*dd1,dd2*dd2)
600 IF(j_stok == nvsiz)
THEN
603 1 nvsiz ,irect ,x ,nsv ,ii_stok,
604 2 cand_n,cand_e ,mulnsn,noint ,marge ,
605 3 i_mem ,prov_n ,prov_e,eshift,v ,
606 4 nsn ,nrtm ,gap_s ,gap_m ,curv_max,nin ,
607 5 pene_old,nbinflg ,mbinflg,ilev,msegtyp,
608 6 itab ,igap ,gap_s_l,gap_m_l,icodt,iskew,
634 1 j_stok,irect ,x ,nsv ,ii_stok,
635 2 cand_n,cand_e ,mulnsn,noint ,marge ,
636 3 i_mem ,prov_n ,prov_e,eshift,v ,
637 4 nsn ,nrtm ,gap_s ,gap_m ,curv_max,nin ,
638 5 pene_old,nbinflg,mbinflg,ilev ,msegtyp,
639 6 itab ,igap ,gap_s_l,gap_m_l,icodt,iskew,
649 nsnf = 1 + itask*nsn / nthread
650 nsnl = (itask+1)*nsn / nthread
654 voxel(iix(i),iiy(i),iiz(i))=0
661 nsnf = 1 + itask*nsnr / nthread
662 nsnl = (itask+1)*nsnr / nthread
664 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)