37 1 IRECTS, IRECTM , X , NRTM ,NRTSR ,
38 2 XYZM , II_STOK, CAND_S , CAND_M ,NSN4 ,
39 3 NOINT , TZINF , I_MEM , ESHIFT ,ADDCM ,
40 5 CHAINE, NRTS , ITAB , STFS ,STFM ,
41 6 IAUTO , VOXEL , NBX , NBY ,NBZ ,
42 7 ITASK , IFPEN , IFORM , GAPMIN ,DRAD ,
43 8 MARGE ,GAP_S , GAP_M , GAP_S_L ,GAP_M_L,
44 9 BGAPSMX, IGAP ,GAP ,FLAGREMNODE,KREMNODE,
55#include "implicit_f.inc"
115 . NRTM,,ESHIFT,NRTS,IGAP,
116 . NSN4,NOINT,ITAB(*),NBX,NBY,NBZ,IAUTO,
117 . IRECTS(2,NRTS),IRECTM(2,NRTM)
119 INTEGER,
INTENT(INOUT) ::
120 . CAND_S(*),CAND_M(*),ADDCM(*),CHAINE(2,*),
121 . VOXEL(1:NBX+2,1:NBY+2,1:NBZ+2), I_MEM,IFPEN(*),II_STOK,
122 . FLAGREMNODE,KREMNODE(*),REMNODE(*)
126 . stfs(nrts),stfm(nrtm), tzinf, gap
127 my_real ,
INTENT(IN) :: dgapload,drad
129 . gapmin,marge,bgapsmx,
130 . gap_s(*),gap_m(*), gap_s_l(*), gap_m_l(*)
136 . n1,n2,mm1,mm2, k,l,
137 . prov_s(2*mvsiz),prov_m(2*mvsiz),
138 . ix1,iy1,iz1,ix2,iy2,iz2,
139 . ix,iy,iz, first_add,
140 . i_stok, i_stok_bak, iedg,
141 . prev_add, chain_add, current_add,
142 . nedg, deja , max_add , m,remove_remote
143 INTEGER,
DIMENSION(3) :: TMIN,TMAX
146 . XMIN, XMAX,YMIN, ,ZMIN, ZMAX,
149 . XMAX_EDGS(NRTS+NRTSR), XMIN_EDGS(NRTS+NRTSR),
150 . YMAX_EDGS(NRTS+NRTSR), YMIN_EDGS(NRTS+NRTSR),
151 . ZMAX_EDGS(+NRTSR), ZMIN_EDGS(NRTS+NRTSR),
152 . xmax_edgm(nrtm), xmin_edgm(nrtm),
153 . ymax_edgm(nrtm), ymin_edgm(nrtm),
154 . zmax_edgm(nrtm), zmin_edgm(nrtm),
155 . xminb,yminb,zminb,xmaxb,ymaxb,zmaxb
157 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAGREMLINE
160 IF(FLAGREMNODE==2) then
161 ALLOCATE(tagremline(nrts))
162 tagremline(1:nrts) = 0
178 max_add =
max(1,4*(nrts+nrtsr))
186 IF(nrtm==0.OR.nrts==0)
THEN
223 IF(stfs(i)==zero)cycle
237 xmax_edgs(i)=
max(xx1,xx2);
IF(xmax_edgs(i) < xmin) cycle
238 xmin_edgs(i)=
min(xx1,xx2);
IF(xmin_edgs(i) > xmax) cycle
241 ymax_edgs(i)=
max(yy1,yy2);
IF(ymax_edgs(i) < ymin) cycle
242 ymin_edgs(i)=
min(yy1,yy2);
IF(ymin_edgs(i) >
ymax
245 zmax_edgs(i)=
max(zz1,zz2);
IF(zmax_edgs(i) < zmin) cycle
246 zmin_edgs(i)=
min(zz1,zz2);
IF(zmin_edgs(i) > zmax) cycle
252 ix1=int(nbx*(xmin_edgs(i)-xminb)/(xmaxb-xminb))
253 iy1=int(nby*(ymin_edgs(i)-yminb)/(ymaxb-yminb))
254 iz1=int(nbz*(zmin_edgs(i)-zminb)/(zmaxb-zminb))
259 ix2=int(nbx*(xmax_edgs(i)-xminb)/(xmaxb-xminb))
260 iy2=int(nby*(ymax_edgs(i)-yminb)/(ymaxb-yminb))
261 iz2=int(nbz*(zmax_edgs(i)-zminb)/(zmaxb-zminb))
307 first_add = voxel(ix,iy,iz)
309 IF(first_add == 0)
THEN
311 voxel(ix,iy,iz) = current_add
324 current_add = current_add+1
326 IF( current_add>=max_add)
THEN
329 max_add = 2 * max_add
348 DO i = nrts+1,nrts+nrtsr
358 xmax_edgs(i)=
max(xx1,xx2) ;
IF(xmax_edgs(i) < xmin) cycle
359 xmin_edgs(i)=
min(xx1,xx2) ;
IF(xmin_edgs(i) > xmax) cycle
362 ymax_edgs(i)=
max(yy1,yy2) ;
IF(ymax_edgs(i) < ymin) cycle
363 ymin_edgs(i)=
min(yy1,yy2) ;
IF(ymin_edgs(i) >
ymax) cycle
366 zmax_edgs(i)=
max(zz1,zz2) ;
IF(zmax_edgs(i) < zmin) cycle
367 zmin_edgs(i)=
min(zz1,zz2) ;
IF(zmin_edgs(i) > zmax) cycle
373 ix1=int(nbx*(xmin_edgs(i)-xminb)/(xmaxb-xminb))
374 iy1=int(nby*(ymin_edgs(i)-yminb)/(ymaxb-yminb))
375 iz1=int(nbz*(zmin_edgs(i)-zminb)/(zmaxb-zminb))
380 ix2=int(nbx*(xmax_edgs(i)-xminb)/(xmaxb-xminb))
381 iy2=int(nby*(ymax_edgs(i)-yminb)/(ymaxb-yminb))
382 iz2=int(nbz*(zmax_edgs(i)-zminb)/(zmaxb-zminb))
427 first_add = voxel(ix,iy,iz)
428 IF(first_add == 0)
THEN
430 voxel(ix,iy,iz) = current_add
442 current_add = current_add+1
443 IF( current_add>=max_add)
THEN
446 max_add = 2 * max_add
471 marge = tzinf -
max(gap+dgapload,drad)
475 IF(stfm(iedg) == zero)cycle
483 .
max(
max(gapmin,bgapsmx+gap_m(iedg))+dgapload,drad)
505 xmax_edgm(iedg)=
max(xx1,xx2)
506 xmin_edgm(iedg)=
min(xx1,xx2)
507 ymax_edgm(iedg)=
max(yy1,yy2)
508 ymin_edgm(iedg)=
min(yy1,yy2)
509 zmax_edgm(iedg)=
max(zz1,zz2)
516 ix1=int(nbx*(xmin_edgm(iedg)-aaa-xminb)/(xmaxb-xminb))
517 iy1=int(nby*(ymin_edgm(iedg)-aaa-yminb)/(ymaxb-yminb))
518 iz1=int(nbz*(zmin_edgm(iedg)-aaa-zminb)/(zmaxb-zminb))
523 ix2=int(nbx*(xmax_edgm(iedg)+aaa-xminb)/(xmaxb-xminb))
524 iy2=int(nby*(ymax_edgm(iedg)+aaa-yminb)/(ymaxb-yminb))
525 iz2=int(nbz*(zmax_edgm(iedg)+aaa-zminb)/(zmaxb-zminb))
534 IF(flagremnode==2)
THEN
535 k = kremnode(2*(iedg-1)+1)
536 l = kremnode(2*(iedg-1)+2)-1
538 tagremline(remnode(m)) = 1
549 chain_add = voxel(ix,iy,iz)
550 DO WHILE(chain_add /= 0)
555 ss1=itab(irects(1,i))
556 ss2=itab(irects(2,i))
562 IF( (ss1==mm1).OR.(ss1==mm2).OR.
563 . (ss2==mm1).OR.(ss2==mm2) )
THEN
569 IF(iauto==1 .AND. mm1<ss1 )
THEN
575 IF (flagremnode == 2)
THEN
578 IF(tagremline(i)==1)
THEN
584 k = kremnode(2*(iedg-1)+2)
585 l = kremnode(2*(iedg-1)+3)-1
588 IF ((ss1==remnode(m)).AND.(ss2==remnode(m+1))) remove_remote = 1
590 IF (remove_remote==1)
THEN
599 prov_m(i_stok) = iedg
602 IF(deja==0) nedg = nedg + 1
606 IF(i_stok>=nvsiz)
THEN
608 1 nvsiz ,irects,irectm,x ,ii_stok,
609 2 cand_s,cand_m,nsn4 ,noint ,marge,
610 3 i_mem ,prov_s,prov_m,eshift,addcm ,
611 4 chaine,nrts ,itab ,ifpen ,iform,
612 5 gapmin,drad ,igap, gap_s, gap_m,
613 7 gap_s_l, gap_m_l ,dgapload)
620 i_stok = i_stok-nvsiz
623 prov_s(j) = prov_s(j+nvsiz)
624 prov_m(j) = prov_m(j+nvsiz)
635 IF(flagremnode==2)
THEN
636 k = kremnode(2*(iedg-1)+1)
637 l = kremnode(2*(iedg-1)+2)-1
639 tagremline(remnode(m)) = 0
650 1 i_stok,irects,irectm,x ,ii_stok,
651 2 cand_s,cand_m,nsn4 ,noint ,marge ,
652 3 i_mem ,prov_s,prov_m,eshift,addcm ,
653 4 chaine,nrts ,itab ,ifpen ,iform ,
654 5 gapmin,drad ,igap, gap_s ,gap_m ,
655 7 gap_s_l, gap_m_l ,dgapload)
679 DO k= tmin(3),tmax(3)
680 DO j= tmin(2),tmax(2)
681 DO i= tmin(1),tmax(1)
687 DEALLOCATE(lchain_next)
688 DEALLOCATE(lchain_elem)
689 DEALLOCATE(lchain_last)
690 IF(flagremnode==2)
DEALLOCATE(tagremline)
subroutine i11trivox(irects, irectm, x, nrtm, nrtsr, xyzm, ii_stok, cand_s, cand_m, nsn4, noint, tzinf, i_mem, eshift, addcm, chaine, nrts, itab, stfs, stfm, iauto, voxel, nbx, nby, nbz, itask, ifpen, iform, gapmin, drad, marge, gap_s, gap_m, gap_s_l, gap_m_l, bgapsmx, igap, gap, flagremnode, kremnode, remnode, dgapload)