38 1 I_MEM ,VMAXDT ,INACTI ,
39 2 IRECT ,X ,STF ,XYZM ,
40 3 II_STOK ,CANDS_E2E ,ESHIFT ,NEDGE_T ,CANDM_E2E ,
41 4 MULNSNE,NOINT ,BGAPEMX ,SSHIFT ,NRTM_T ,
42 5 VOXEL ,NBX ,NBY ,NBZ ,
43 6 IGAP ,GAP_M ,GAP_M_L ,DRAD ,MARGE ,
44 7 ITASK ,ITAB ,LL_STOK ,MULNSNS ,
45 8 MBINFLG ,EBINFLG,ILEV ,CAND_A ,CAND_P ,
46 9 FLAGREMNODE,KREMNODE,REMNODE ,S_REMNODE_EDG,
47 A IEDGE ,NEDGE ,LEDGE ,MSEGTYP ,IGAP0 ,
48 B ADMSR,EDG_BISECTOR,VTX_BISECTOR,
49 C CANDM_E2S,CANDS_E2S,CAND_B,CAND_PS,GAPE ,
50 D GAP_E_L ,DGAPLOAD,FLAG_REMOVED_NODE,
51 E S_KREMNODE_E2S,S_REMNODE_E2S,KREMNODE_E2S,REMNODE_E2S,
62#include "implicit_f.inc"
69 PARAMETER (NVECSZ = mvsiz)
83 INTEGER,
INTENT(in) :: S_REMNODE_EDG
84 LOGICAL,
INTENT(in) :: FLAG_REMOVED_NODE
85 INTEGER,
INTENT(in) :: S_KREMNODE_E2S
86 INTEGER,
INTENT(in) :: S_REMNODE_E2S
87 INTEGER,
INTENT(in) :: S_KREMNODE_EDG
89 INTEGER I_MEM(2),INACTI,ITASK,IGAP,IEDGE,NEDGE,ESHIFT,NEDGE_T,SSHIFT,NRTM_T,IGAP0,
90 . MULNSNE,MULNSNS,NOINT,,NBY,NBZ,
92 . IRECT(4,*), VOXEL(NBX+2,NBY+2,NBZ+2),II_STOK,LL_STOK,ITAB(*),
93 . MBINFLG(*),EBINFLG(*),ILEV,CAND_A(*),LEDGE(NLEDGE,*),ADMSR(4,*),MSEGTYP(*),
94 . CANDM_E2S(*),CANDS_E2S(*),CAND_B(*),
95 . FLAGREMNODE,KREMNODE(S_KREMNODE_EDG),REMNODE(*)
96 INTEGER,
DIMENSION(S_KREMNODE_E2S),
INTENT(in) :: KREMNODE_E2S
97 INTEGER,
DIMENSION(S_REMNODE_E2S),
INTENT(in) :: REMNODE_E2S
100 . x(3,*),xyzm(6),stf(*),gap_m(*),gap_m_l(*),gape(*),gap_e_l(*),cand_p(*), cand_ps(*),
101 . marge,bgapemx,vmaxdt,drad
102 my_real ,
INTENT(IN) :: dgapload
103 real*4 edg_bisector(3,4,*), vtx_bisector(3,2,*)
107 INTEGER I,J,I_STOK, SOL_EDGE, SH_EDGE,
108 . N1,N2,NN,NE,K,L,J_STOK,II,JJ,NA,NB,
109 . PROV_S(MVSIZ),PROV_M(MVSIZ),
110 . M,NS1,NS2,NSE,NS,SIZE,Z_FIRST,Z_LAST
113 . dx,dy,dz,xs,ys,zs,xx,sx,sy,sz,s2,
114 . xmin, xmax,ymin,
ymax,zmin, zmax, tz, gapsmx, gapl,
115 . xx1,xx2,xx3,xx4,yy1,yy2,yy3,yy4,zz1,zz2,zz3,zz4,
116 . d1x,d1y,d1z,d2x,d2y,d2z,dd1,dd2,d2,a2,gs
118 INTEGER TAGEDG(NEDGE)
119 INTEGER IX,IY,IZ,IEDG,
120 . M1, M2, M3, M4, MM1,MM2,MM3,MM4,SS1,,
121 . IMS1,IMS2,ISS1,ISS2,
123 . ix1,iy1,iz1,ix2,iy2,iz2
124 INTEGER,
DIMENSION(3) :: TMIN,TMAX
126 . XMINB,YMINB,ZMINB,XMAXB,YMAXB,ZMAXB,AAA,DRAD2,
127 . xmax_edgs, xmin_edgs,
128 . ymax_edgs, ymin_edgs,
129 . zmax_edgs, zmin_edgs,
130 . xmax_edgm, xmin_edgm,
131 . ymax_edgm, ymin_edgm,
132 . zmax_edgm, zmin_edgm
133 INTEGER FIRST_ADD, , CHAIN_ADD, CURRENT_ADD, MAX_ADD
136 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: ,LEDGE_TMP
137 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDEX
141 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAGREMLINE
146 IF(flag_removed_node)
THEN
147 ALLOCATE(tagremline(nedge))
148 tagremline(1:nedge) = 0
152 sh_edge =iedge-10*sol_edge
164 max_add =
max(1,4*nedge)
169 ALLOCATE(iixyz(4,nedge),ledge_tmp(nledge,nedge),index(2*nedge))
216 xmax_edgs=
max(xx1,xx2);
IF(xmax_edgs < xmin) cycle
217 xmin_edgs=
min(xx1,xx2);
IF(xmin_edgs > xmax) cycle
218 ymax_edgs=
max(yy1,yy2);
IF(ymax_edgs < ymin) cycle
219 ymin_edgs=
min(yy1,yy2);
IF(ymin_edgs >
ymax) cycle
220 zmax_edgs=
max(zz1,zz2);
IF(zmax_edgs < zmin) cycle
221 zmin_edgs=
min(zz1,zz2);
IF(zmin_edgs > zmax) cycle
223 xmax_edgs=
max(xx1,xx2)+gap_m(ne);
IF(xmax_edgs < xmin) cycle
224 xmin_edgs=
min(xx1,xx2)-gap_m(ne);
IF(xmin_edgs > xmax) cycle
225 ymax_edgs=
max(yy1,yy2)+gap_m(ne);
IF(ymax_edgs < ymin) cycle
226 ymin_edgs=
min(yy1,yy2)-gap_m(ne);
IF(ymin_edgs >
ymax) cycle
227 zmax_edgs=
max(zz1,zz2)+gap_m(ne);
IF(zmax_edgs < zmin) cycle
228 zmin_edgs=
min(zz1,zz2)-gap_m(ne);
IF(zmin_edgs > zmax) cycle
235 ix1=int(nbx*(xmin_edgs-xminb)/(xmaxb-xminb))
237 iz1=int(nbz*(zmin_edgs-zminb)/(zmaxb-zminb))
242 ix2=int(nbx*(xmax_edgs-xminb)/(xmaxb-xminb))
243 iy2=int(nby*(ymax_edgs-yminb)/(ymaxb-yminb))
244 iz2=int(nbz*(zmax_edgs-zminb)/(zmaxb-zminb))
249 iixyz(1,i)=
min(n1,n2)
258 CALL my_orders(0,work,iixyz,index,nedge,4)
259 ledge_tmp(1:nledge,1:nedge)=ledge(1:nledge,1:nedge)
262 ledge(1:nledge,i)=ledge_tmp(1:nledge,k)
265 DEALLOCATE(iixyz,index,ledge_tmp)
272 IF(stf(ne)==zero) cycle
274 IF(ledge(7,i) < 0) cycle
287 xmax_edgs=
max(xx1,xx2);
IF(xmax_edgs < xmin) cycle
288 xmin_edgs=
min(xx1,xx2);
IF(xmin_edgs > xmax) cycle
289 ymax_edgs=
max(yy1,yy2);
IF(ymax_edgs < ymin) cycle
290 ymin_edgs=
min(yy1,yy2);
IF(ymin_edgs >
ymax) cycle
291 zmax_edgs=
max(zz1,zz2);
IF(zmax_edgs < zmin) cycle
292 zmin_edgs=
min(zz1,zz2);
IF(zmin_edgs > zmax) cycle
294 xmax_edgs=
max(xx1,xx2)+gape(i);
IF(xmax_edgs < xmin) cycle
295 IF(xmin_edgs > xmax) cycle
296 ymax_edgs=
max(yy1,yy2)+gape(i);
IF(ymax_edgs < ymin) cycle
297 ymin_edgs=
min(yy1,yy2)-gape(i);
IF(ymin_edgs >
ymax) cycle
298 zmax_edgs=
max(zz1,zz2)+gape(i);
IF(zmax_edgs < zmin) cycle
299 zmin_edgs=
min(zz1,zz2)-gape(i);
IF(zmin_edgs > zmax) cycle
306 ix1=int(nbx*(xmin_edgs-xminb)/(xmaxb-xminb))
307 iy1=int(nby*(ymin_edgs-yminb)/(ymaxb-yminb))
308 iz1=int(nbz*(zmin_edgs-zminb)/(zmaxb-zminb))
313 ix2=int(nbx*(xmax_edgs-xminb)/(xmaxb-xminb))
314 iy2=int(nby*(ymax_edgs-yminb)/(ymaxb-yminb))
315 iz2=int(nbz*(zmax_edgs-zminb)/(zmaxb-zminb))
359 first_add = voxel(ix,iy,iz)
361 IF(first_add == 0)
THEN
363 voxel(ix,iy,iz) = current_add
376 current_add = current_add+1
378 IF( current_add>=max_add)
THEN
381 max_add = 2 * max_add
402 IF(sh_edge==0)
GOTO 300
417 IF(stf(ne)==zero) cycle
419 IF(iabs(ledge(7,iedg))==1) cycle
425 aaa = marge+bgapemx+gape(iedg)+dgapload
435 ims1 = bitget(ebinflg(iedg),0)
436 ims2 = bitget(ebinflg(iedg),1)
449 xmax_edgm=
max(xx1,xx2)+gape(iedg)
450 xmin_edgm=
min(xx1,xx2)-gape(iedg)
451 ymax_edgm=
max(yy1,yy2)+gape(iedg)
452 ymin_edgm=
min(yy1,yy2)-gape(iedg)
453 zmax_edgm=
max(zz1,zz2)+gape(iedg)
454 zmin_edgm=
min(zz1,zz2)-gape(iedg)
459 ix1=int(nbx*(xmin_edgm-aaa-xminb)/(xmaxb-xminb))
460 iy1=int(nby*(ymin_edgm-aaa-yminb)/(ymaxb-yminb))
461 iz1=int(nbz*(zmin_edgm-aaa-zminb)/(zmaxb-zminb))
466 ix2=int(nbx*(xmax_edgm+aaa-xminb)/(xmaxb-xminb))
467 iy2=int(nby*(ymax_edgm+aaa-yminb)/(ymaxb-yminb))
468 iz2=int(nbz*(zmax_edgm+aaa-zminb)/(zmaxb-zminb))
474 IF(flag_removed_node .AND. s_kremnode_edg > 0)
THEN
476 l = kremnode(iedg+1)-1
478 tagremline(remnode(m)) = 1
486 chain_add = voxel(ix,iy,iz)
487 DO WHILE(chain_add /= 0)
490 IF(tagedg(jj)/=0)
THEN
497 ss1= itab(ledge(5,jj))
498 ss2= itab(ledge(6,jj))
501 IF( (ss1==mm1).OR.(ss1==mm2).OR.
502 . (ss2==mm1).OR.(ss2==mm2) )
THEN
509 iss1=bitget(ebinflg(jj),0)
510 iss2=bitget(ebinflg(jj),1)
512 IF(.NOT.((ims1 == 1 .and. iss2==1).or.(ims2 == 1 .and. iss1==1)))
THEN
519 IF(iabs(ledge(7,iedg))/=1 .AND. ledge(7,jj)/=1)
THEN
524 ! unicite des couples
525 IF(am1 < as1 .OR. (am1 == as1 .AND. am2 < as2))
THEN
532 IF(flag_removed_node)
THEN
533 IF(tagremline(jj)==1)
THEN
543 prov_m(j_stok) = iedg
549 IF(j_stok==nvsiz)
THEN
551 1 nvsiz ,irect ,x ,ii_stok,inacti,
552 2 cands_e2e,candm_e2e ,mulnsne,noint ,marge ,
553 3 i_mem(1) ,prov_s ,prov_m ,igap0,cand_a,
554 4 nedge ,ledge ,itab ,drad2 ,igap ,
555 5 gape ,gap_e_l,admsr ,edg_bisector,vtx_bisector ,
557 IF(i_mem(1)/=0)
GOTO 300
573 chain_add = voxel(ix,iy,iz)
574 DO WHILE(chain_add /= 0)
588 IF(flag_removed_node .AND. s_kremnode_edg > 0)
THEN
590 l = kremnode(iedg+1)-1
592 tagremline(remnode(m)) = 0
604 1 j_stok ,irect ,x ,ii_stok,inacti,
605 2 cands_e2e,candm_e2e ,mulnsne,noint ,marge ,
606 3 i_mem(1) ,prov_s ,prov_m ,igap0,cand_a,
607 4 nedge ,ledge ,itab ,drad2 ,igap ,
608 5 gape ,gap_e_l,admsr ,edg_bisector,vtx_bisector ,
615 IF(sol_edge==0)
GOTO 400
629 IF(msegtyp(ne)/=0) cycle
630 IF(stf(ne)==zero) cycle
654 xmax_edgm=
max(xx1,xx2,xx3,xx4)
655 xmin_edgm=
min(xx1,xx2,xx3,xx4)
656 ymax_edgm=
max(yy1,yy2,yy3,yy4)
657 ymin_edgm=
min(yy1,yy2,yy3,yy4)
658 zmax_edgm=
max(zz1,zz2
659 zmin_edgm=
min(zz1,zz2,zz3,zz4)
661 dx=em02*(xmax_edgm-xmin_edgm)
662 dy=em02*(ymax_edgm-ymin_edgm)
663 dz=em02*(zmax_edgm-zmin_edgm)
665 xmax_edgm=xmax_edgm+dx
666 xmin_edgm=xmin_edgm-dx
667 ymax_edgm=ymax_edgm+dy
668 ymin_edgm=ymin_edgm-dy
669 zmax_edgm=zmax_edgm+dz
670 zmin_edgm=zmin_edgm-dz
672 aaa = marge+bgapemx +dgapload
678 ix1=int(nbx*(xmin_edgm-aaa-xminb)/(xmaxb-xminb))
679 iy1=int(nby*(ymin_edgm-aaa-yminb)/(ymaxb-yminb))
680 iz1=int(nbz*(zmin_edgm-aaa-zminb)/(zmaxb-zminb))
685 ix2=int(nbx*(xmax_edgm+aaa-xminb)/(xmaxb-xminb))
686 iy2=int(nby*(ymax_edgm+aaa-yminb)/(ymaxb-yminb))
687 iz2=int(nbz*(zmax_edgm+aaa-zminb)/(zmaxb-zminb))
693 ims1 = bitget(mbinflg(ne),0)
694 ims2 = bitget(mbinflg(ne),1)
697 IF(flag_removed_node .AND. s_remnode_e2s > 0)
THEN
698 k = kremnode_e2s(2*(ne-1)+1)
699 l = kremnode_e2s(2*(ne-1)+2)-1
701 tagremline(remnode_e2s(m)) = 1
709 chain_add = voxel(ix,iy,iz)
710 DO WHILE(chain_add /= 0)
720 ss1= itab(ledge(5,jj))
721 ss2= itab(ledge(6,jj))
724 IF((ss1==mm1).OR.(ss1==mm2).OR.(ss1==mm3).OR.(ss1==mm4).OR.
725 . (ss2==mm1).OR.(ss2==mm2).OR.(ss2==mm3).OR.(ss2==mm4))
THEN
732 iss1=bitget(ebinflg(jj),0)
733 iss2=bitget(ebinflg(jj),1)
736 IF(.NOT.((ims1 == 1 .and. iss2==1).or.(ims2 == 1 .and. iss1==1)))
THEN
742 IF (flag_removed_node)
THEN
743 IF(tagremline(jj)==1)
THEN
758 IF(j_stok==nvsiz)
THEN
760 1 nvsiz ,irect ,x ,ll_stok,inacti,
761 2 cands_e2s,candm_e2s,mulnsns,noint ,marge ,
762 3 i_mem(2) ,prov_s ,prov_m ,igap0,cand_b,
763 4 nedge ,ledge ,itab ,drad2 ,igap ,
764 5 gap_m ,gap_m_l,gape ,gap_e_l,admsr ,
765 6 edg_bisector,vtx_bisector ,cand_ps,dgapload)
766 IF(i_mem(2)/=0)
GOTO 400
784 chain_add = voxel(ix,iy,iz)
785 DO WHILE(chain_add /= 0)
798 IF(flag_removed_node.AND.s_remnode_e2s>0)
THEN
799 k = kremnode_e2s(2*(ne-1)+1)
800 l = kremnode_e2s(2*(ne-1)+2)-1
802 tagremline(remnode_e2s(m)) = 0
811 1 j_stok ,irect ,x ,ll_stok,inacti,
812 2 cands_e2s,candm_e2s,mulnsns,noint ,marge ,
813 3 i_mem(2) ,prov_s ,prov_m ,igap0,cand_b,
814 4 nedge ,ledge ,itab ,drad2 ,igap ,
815 5 gap_m ,gap_m_l,gape ,gap_e_l,admsr ,
816 6 edg_bisector,vtx_bisector ,cand_ps,dgapload)
836 DO k= tmin(3),tmax(3)
838 DO i= tmin(1),tmax(1)
847 IF(flag_removed_node)
DEALLOCATE(tagremline)
subroutine i25trivox_edg(i_mem, vmaxdt, inacti, irect, x, stf, xyzm, ii_stok, cands_e2e, eshift, nedge_t, candm_e2e, mulnsne, noint, bgapemx, sshift, nrtm_t, voxel, nbx, nby, nbz, igap, gap_m, gap_m_l, drad, marge, itask, itab, ll_stok, mulnsns, mbinflg, ebinflg, ilev, cand_a, cand_p, flagremnode, kremnode, remnode, s_remnode_edg, iedge, nedge, ledge, msegtyp, igap0, admsr, edg_bisector, vtx_bisector, candm_e2s, cands_e2s, cand_b, cand_ps, gape, gap_e_l, dgapload, flag_removed_node, s_kremnode_e2s, s_remnode_e2s, kremnode_e2s, remnode_e2s, s_kremnode_edg)