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"
117 . NRTM,NRTSR,ESHIFT,NRTS,IGAP,
118 . NSN4,NOINT,ITAB(*),NBX,NBY,NBZ,IAUTO,
119 . IRECTS(2,NRTS),IRECTM(2,NRTM)
121 INTEGER,
INTENT(INOUT) ::
122 . CAND_S(*),CAND_M(*),ADDCM(*),CHAINE(2,*),
123 . VOXEL(1:NBX+2,1:NBY+2,1:NBZ+2), I_MEM,IFPEN(*),II_STOK,
124 . FLAGREMNODE,KREMNODE(*),REMNODE(*)
128 . stfs(nrts),stfm(nrtm), tzinf, gap
129 my_real ,
INTENT(IN) :: dgapload,drad
131 . gapmin,marge,bgapsmx,
132 . gap_s(*),gap_m(*), gap_s_l(*), gap_m_l(*)
138 . n1,n2,mm1,mm2, in1, in2, im1, im2, k,l,
139 . prov_s(2*mvsiz),prov_m(2*mvsiz),
140 . ix1,iy1,iz1,ix2,iy2,iz2,
141 . ix,iy,iz, first_add,
142 . i_stok, i_stok_bak, iedg,
143 . prev_add, chain_add, current_add,
144 . nedg, deja , max_add ,ii_stok0, m,remove_remote
145 INTEGER,
DIMENSION(3) :: TMIN,TMAX
148 . , XMAX,YMIN, YMAX,, ZMAX,
151 . XMAX_EDGS(NRTS+NRTSR), XMIN_EDGS(NRTS+NRTSR),
152 . YMAX_EDGS(NRTS+NRTSR), YMIN_EDGS(NRTS+NRTSR),
153 . ZMAX_EDGS(NRTS+NRTSR), ZMIN_EDGS(NRTS+NRTSR),
154 . xmax_edgm(nrtm), xmin_edgm(nrtm),
155 . ymax_edgm(nrtm), ymin_edgm(nrtm),
156 . zmax_edgm(nrtm), zmin_edgm(nrtm),
157 . xminb,yminb,zminb,xmaxb,ymaxb,zmaxb
159 INTEGERDIMENSION(:),
ALLOCATABLE :: TAGREMLINE
162 IF(FLAGREMNODE==2) then
180 max_add =
max(1,4*(nrts+nrtsr))
188 IF(nrtm==0.OR.nrts==0)
THEN
195 !---------------------------------------------------------
225 IF(stfs(i)==zero)cycle
239 xmax_edgs(i)=
max(xx1,xx2);
IF(xmax_edgs(i) < xmin) cycle
240 xmin_edgs(i)=
min(xx1,xx2);
IF(xmin_edgs(i) > xmax) cycle
243 ymax_edgs(i)=
max(yy1,yy2);
IF(ymax_edgs(i) < ymin) cycle
244 ymin_edgs(i)=
min(yy1,yy2);
IF(ymin_edgs(i) > ymax) cycle
247 zmax_edgs(i)=
max(zz1,zz2);
IF(zmax_edgs(i) < zmin) cycle
248 zmin_edgs(i)=
min(zz1,zz2);
IF(zmin_edgs(i) > zmax) cycle
254 ix1=int(nbx*(xmin_edgs(i)-xminb)/(xmaxb-xminb))
255 iy1=int(nby*(ymin_edgs(i)-yminb)/(ymaxb-yminb))
256 iz1=int(nbz*(zmin_edgs(i)-zminb)/(zmaxb-zminb))
261 ix2=int(nbx*(xmax_edgs(i)-xminb)/(xmaxb-xminb))
262 iy2=int(nby*(ymax_edgs(i)-yminb)/(ymaxb-yminb))
263 iz2=int(nbz*(zmax_edgs(i)-zminb)/(zmaxb-zminb))
309 first_add = voxel(ix,iy,iz)
311 IF(first_add == 0)
THEN
313 voxel(ix,iy,iz) = current_add
326 current_add = current_add+1
328 IF( current_add>=max_add)
THEN
331 max_add = 2 * max_add
351 DO i = nrts+1,nrts+nrtsr
361 xmax_edgs(i)=
max(xx1,xx2) ;
IF(xmax_edgs(i) < xmin) cycle
362 xmin_edgs(i)=
min(xx1,xx2) ;
IF(xmin_edgs(i) > xmax) cycle
365 ymax_edgs(i)=
max(yy1,yy2) ;
IF(ymax_edgs(i) < ymin) cycle
366 ymin_edgs(i)=
min(yy1,yy2) ;
IF(ymin_edgs(i) > ymax) cycle
369 zmax_edgs(i)=
max(zz1,zz2) ;
IF(zmax_edgs(i) < zmin) cycle
370 zmin_edgs(i)=
min(zz1,zz2) ;
IF(zmin_edgs(i) > zmax) cycle
376 ix1=int(nbx*(xmin_edgs(i)-xminb)/(xmaxb-xminb))
377 iy1=int(nby*(ymin_edgs(i)-yminb)/(ymaxb-yminb))
378 iz1=int(nbz*(zmin_edgs(i)-zminb)/(zmaxb-zminb))
383 ix2=int(nbx*(xmax_edgs(i)-xminb)/(xmaxb-xminb))
384 iy2=int(nby*(ymax_edgs(i)-yminb)/(ymaxb-yminb))
385 iz2=int(nbz*(zmax_edgs(i)-zminb)/(zmaxb-zminb))
430 first_add = voxel(ix,iy,iz)
431 IF(first_add == 0)
THEN
433 voxel(ix,iy,iz) = current_add
445 current_add = current_add+1
446 IF( current_add>=max_add)
THEN
449 max_add = 2 * max_add
474 marge = tzinf -
max(gap+dgapload,drad)
478 IF(stfm(iedg) == zero)cycle
486 .
max(
max(gapmin,bgapsmx+gap_m(iedg))+dgapload,drad)
508 xmax_edgm(iedg)=
max(xx1,xx2)
509 xmin_edgm(iedg)=
min(xx1,xx2)
510 ymax_edgm(iedg)=
max(yy1,yy2)
511 ymin_edgm(iedg)=
min(yy1,yy2)
512 zmax_edgm(iedg)=
max(zz1,zz2)
513 zmin_edgm(iedg)=
min(zz1,zz2)
519 ix1=int(nbx*(xmin_edgm(iedg)-aaa-xminb)/(xmaxb-xminb))
520 iy1=int(nby*(ymin_edgm(iedg)-aaa-yminb)/(ymaxb-yminb))
521 iz1=int(nbz*(zmin_edgm(iedg)-aaa-zminb)/(zmaxb-zminb))
526 ix2=int(nbx*(xmax_edgm(iedg)+aaa-xminb)/(xmaxb-xminb))
527 iy2=int(nby*(ymax_edgm(iedg)+aaa-yminb)/(ymaxb-yminb))
528 iz2=int(nbz*(zmax_edgm(iedg)+aaa-zminb)/(zmaxb-zminb))
537 IF(flagremnode==2)
THEN
538 k = kremnode(2*(iedg-1)+1)
539 l = kremnode(2*(iedg-1)+2)-1
541 tagremline(remnode(m)) = 1
552 chain_add = voxel(ix,iy,iz)
553 DO WHILE(chain_add /= 0)
558 ss1=itab(irects(1,i))
559 ss2=itab(irects(2,i))
565 IF( (ss1==mm1).OR.(ss1==mm2).OR.
566 . (ss2==mm1).OR.(ss2==mm2) )
THEN
572 IF(iauto==1 .AND. mm1<ss1 )
THEN
578 IF (flagremnode == 2)
THEN
581 IF(tagremline(i)==1)
THEN
587 k = kremnode(2*(iedg-1)+2)
588 l = kremnode(2*(iedg-1)+3)-1
591 IF ((ss1==remnode(m)).AND.(ss2==remnode(m+1))) remove_remote = 1
593 IF (remove_remote==1)
THEN
602 prov_m(i_stok) = iedg
605 IF(deja==0) nedg = nedg + 1
609 IF(i_stok>=nvsiz)
THEN
611 1 nvsiz ,irects,irectm,x ,ii_stok,
612 2 cand_s,cand_m,nsn4 ,noint ,marge,
613 3 i_mem ,prov_s,prov_m,eshift,addcm ,
614 4 chaine,nrts ,itab ,ifpen ,iform,
615 5 gapmin,drad ,igap, gap_s, gap_m,
616 7 gap_s_l, gap_m_l ,dgapload)
619 !print *,
"too much candidates"
626 prov_s(j) = prov_s(j+nvsiz)
627 prov_m(j) = prov_m(j+nvsiz)
638 IF(flagremnode==2)
THEN
639 k = kremnode(2*(iedg-1)+1)
640 l = kremnode(2*(iedg-1)+2)-1
642 tagremline(remnode(m)) = 0
653 1 i_stok,irects,irectm,x ,ii_stok,
654 2 cand_s,cand_m,nsn4 ,noint ,marge ,
655 3 i_mem ,prov_s,prov_m,eshift,addcm ,
656 4 chaine,nrts ,itab ,ifpen ,iform ,
657 5 gapmin,drad ,igap, gap_s ,gap_m ,
658 7 gap_s_l, gap_m_l ,dgapload)
682 DO k= tmin(3),tmax(3)
683 DO j= tmin(2),tmax(2)
684 DO i= tmin(1),tmax(1)
690 DEALLOCATE(lchain_next)
691 DEALLOCATE(lchain_elem)
692 DEALLOCATE(lchain_last)
693 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)