42 1 I_MEM ,VMAXDT ,INACTI ,IRECT ,
43 2 X ,V ,STF ,STFE ,XYZM ,
44 3 II_STOK ,CANDS_E2E ,ESHIFT ,NEDGE_T ,CANDM_E2E ,
45 4 MULNSNE,NOINT ,BGAPEMX ,SSHIFT ,NRTM_T ,
46 5 VOXEL ,NBX ,NBY ,NBZ ,
47 6 IGAP ,GAP_M ,GAP_M_L ,DRAD ,MARGE ,
48 7 ITASK ,ITAB ,LL_STOK ,MULNSNS ,
49 8 MBINFLG ,EBINFLG,ILEV ,CAND_A ,CAND_P ,
50 9 FLAGREMNODE,KREMNODE_EDG,REMNODE_EDG,KREMNODE_E2S,
52 A IEDGE ,NEDGE ,LEDGE ,MSEGTYP ,IGAP0 ,
53 B ADMSR,EDG_BISECTOR,VTX_BISECTOR,
54 C CANDM_E2S,CANDS_E2S,CAND_B,CAND_PS,GAPE ,
55 D GAP_E_L,NEDGE_LOCAL,IFQ,CANDE2E_FX ,CANDE2E_FY,
56 E CANDE2E_FZ,CANDE2S_FX ,CANDE2S_FY,CANDE2S_FZ,IFPEN_E,IFPEN_E2S,
57 F KREMNODE_EDG_SIZ,REMNODE_EDG_SIZ,KREMNODE_E2S_SIZ,REMNODE_E2S_SIZ,
72#include "implicit_f.inc"
80 parameter(nvecsz = mvsiz)
86#include "i25edge_c.inc"
96 INTEGER I_MEM(2),INACTI,ITASK,IGAP,IEDGE,NEDGE,ESHIFT,NEDGE_T,SSHIFT,NRTM_T,IGAP0,
97 . mulnsne,mulnsns,noint,nbx,nby,nbz,ifq,
98 . cands_e2e(*),candm_e2e(*),
99 . irect(4,*), voxel(nbx+2,nby+2,nbz+2),ii_stok,ll_stok,itab(*),
100 . mbinflg(*),ebinflg(*),ilev,cand_a(*),ledge(nledge,*),admsr(4,*),msegtyp(*),
101 . candm_e2s(*),cands_e2s(*),cand_b(*),ifpen_e(*),ifpen_e2s(*)
103 INTEGER ,
INTENT(IN) :: KREMNODE_EDG_SIZ,REMNODE_EDG_SIZ,KREMNODE_E2S_SIZ,REMNODE_E2S_SIZ,
104 . , KREMNODE_EDG(KREMNODE_EDG_SIZ), REMNODE_EDG(REMNODE_EDG_SIZ),
105 . KREMNODE_E2S(KREMNODE_E2S_SIZ), REMNODE_E2S(REMNODE_E2S_SIZ)
107 my_real ,
INTENT(IN) :: DGAPLOAD ,DRAD
109 . X(3,*),V(3,*),XYZM(6),STF(*), STFE(NEDGE), GAP_M(*), (*), GAPE(*), GAP_E_L(*),
110 . CAND_P(*),CAND_PS(*),,BGAPEMX,VMAXDT,
111 . CANDE2E_FX(*) ,CANDE2E_FY(*),CANDE2E_FZ(*),
112 . CANDE2S_FX(4,*) ,CANDE2S_FY(4,*),CANDE2S_FZ(4,*)
113 real*4 edg_bisector(3,4,*), vtx_bisector(3,2,*)
114 INTEGER,
INTENT(IN) :: NEDGE_LOCAL
118 INTEGER I,J,I_STOK, SOL_EDGE, SH_EDGE,
119 . N1,N2,NN,NE,K,L,J_STOK,II,JJ,NA,NB,
120 . prov_s(mvsiz),prov_m(mvsiz),
121 . m,ns1,ns2,nse,ns,
SIZE,z_first,z_last
124 . dx,dy,dz,xs,ys,zs,xx,sx,sy,sz,s2,
125 . xmin, xmax,ymin,
ymax,zmin, zmax, tz, gapsmx, gapl,
126 . xx1,xx2,xx3,xx4,yy1,yy2,yy3,yy4,zz1,zz2,zz3,zz4,
127 . d1x,d1y,d1z,d2x,d2y,d2z,dd1,dd2,d2,a2,gs,drad2
129 INTEGER IX,IY,IZ,IEDG,IE,
130 . m1, m2, m3, m4, mm1,mm2,mm3,mm4,ss1,ss2,
131 . ims1,ims2,iss1,iss2,
133 . ix1,iy1,iz1,ix2,iy2,iz2,remove_remote
134 INTEGER,
DIMENSION(3) :: TMIN,TMAX
136 . xminb,yminb,zminb,xmaxb,ymaxb,zmaxb,aaa,
137 . xmax_edgs, xmin_edgs,
138 . ymax_edgs, ymin_edgs,
139 . zmax_edgs, zmin_edgs,
140 . xmax_edgm, xmin_edgm,
141 . ymax_edgm, ymin_edgm,
142 . zmax_edgm, zmin_edgm
144 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAGEDG
147 INTEGER , PREV_ADD, CHAIN_ADD, CURRENT_ADD, MAX_ADD
152 INTEGER IDS(4), PROV_IDS(2,MVSIZ)
155 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAGREMLINE
160 IF(flagremnode==2)
THEN
161 ALLOCATE(tagremline(nedge))
162 tagremline(1:nedge) = 0
166 prov_ids(1:2,1:mvsiz) = 0
169 sh_edge =iedge-10*sol_edge
180 !---------------------------------------------------------
217 IF(i <= nedge_local)
THEN
220 IF(stfe(i)==zero) cycle
222 IF(ledge(7,i) < 0) cycle
233 debug_e2e(eid == d_es,eid)
234 ELSE IF(i > nedge)
THEN
235 xx1=xrem_edge(e_x1,i-nedge)
236 xx2=xrem_edge(e_x2,i-nedge)
237 yy1=xrem_edge(e_y1,i-nedge)
238 yy2=xrem_edge(e_y2,i-nedge)
239 zz1=xrem_edge(e_z1,i-nedge)
240 zz2=xrem_edge(e_z2,i-nedge)
242 debug_e2e(eid == d_es,eid)
249 debug_e2e(eid==d_es,igap0)
252 xmax_edgs=
max(xx1,xx2);
253 xmin_edgs=
min(xx1,xx2);
254 ymax_edgs=
max(yy1,yy2);
255 ymin_edgs=
min(yy1,yy2);
256 zmax_edgs=
max(zz1,zz2);
257 zmin_edgs=
min(zz1,zz2);
258 debug_e2e(eid==d_es,xmin_edgs)
259 debug_e2e(eid==d_es,ymin_edgs)
260 debug_e2e(eid==d_es,zmin_edgs)
261 debug_e2e(eid==d_es,xmax_edgs)
262 debug_e2e(eid==d_es,ymax_edgs)
263 debug_e2e(eid==d_es,zmax_edgs)
264 debug_e2e(eid==d_es,xmin)
265 debug_e2e(eid==d_es,ymin)
266 debug_e2e(eid==d_es,zmin)
267 debug_e2e(eid==d_es,xmax)
268 debug_e2e(eid==d_es,
ymax)
269 debug_e2e(eid==d_es,zmax)
270 IF(xmax_edgs < xmin) cycle
271 IF(xmin_edgs > xmax) cycle
272 IF(ymax_edgs < ymin) cycle
273 IF(ymin_edgs >
ymax) cycle
274 IF(zmax_edgs < zmin) cycle
275 IF(zmin_edgs > zmax) cycle
281 g = xrem_edge(e_gap,i-nedge)
285 xmax_edgs=
max(xx1,xx2)+g;
286 xmin_edgs=
min(xx1,xx2)-g;
287 ymax_edgs=
max(yy1,yy2)+g;
288 ymin_edgs=
min(yy1,yy2)-g;
289 zmax_edgs=
max(zz1,zz2)+g;
293 debug_e2e(eid==d_es,xmin_edgs)
294 debug_e2e(eid==d_es,ymin_edgs)
295 debug_e2e(eid==d_es,zmin_edgs)
296 debug_e2e(eid==d_es,xmax_edgs)
297 debug_e2e(eid==d_es,ymax_edgs)
298 debug_e2e(eid==d_es,zmax_edgs)
309 ix1=int(nbx*(xmin_edgs-xminb)/(xmaxb-xminb))
310 iy1=int(nby*(ymin_edgs-yminb)/(ymaxb-yminb))
311 iz1=int(nbz*(zmin_edgs-zminb)/(zmaxb-zminb))
316 ix2=int(nbx*(xmax_edgs-xminb)/(xmaxb-xminb))
317 iy2=int(nby*(ymax_edgs-yminb)/(ymaxb-yminb))
318 iz2=int(nbz*(zmax_edgs-zminb)/(zmaxb-zminb))
362 first_add = voxel(ix,iy,iz)
364 IF(first_add == 0)
THEN
366 voxel(ix,iy,iz) = current_add
379 current_add = current_add+1
381 IF( current_add>=max_add)
THEN
384 max_add = 2 * max_add
407 IF(sh_edge==0)
GOTO 300
421 IF(stfe(iedg)==zero) cycle
424 IF(iabs(ledge(7,iedg))==1) cycle
430 aaa = marge+bgapemx+gape(iedg)+dgapload
440 ims1 = bitget(ebinflg(iedg),0)
441 ims2 = bitget(ebinflg(iedg),1)
454 xmax_edgm=
max(xx1,xx2)+gape(iedg)
455 xmin_edgm=
min(xx1,xx2)-gape(iedg)
456 ymax_edgm=
max(yy1,yy2)+gape(iedg)
457 ymin_edgm=
min(yy1,yy2)-gape(iedg)
458 zmax_edgm=
max(zz1,zz2)+gape(iedg)
464 ix1=int(nbx*(xmin_edgm-aaa-xminb)/(xmaxb-xminb))
465 iy1=int(nby*(ymin_edgm-aaa-yminb)/(ymaxb-yminb))
466 iz1=int(nbz*(zmin_edgm-aaa-zminb)/(zmaxb-zminb))
471 ix2=int(nbx*(xmax_edgm+aaa-xminb)/(xmaxb-xminb))
472 iy2=int(nby*(ymax_edgm+aaa-yminb)/(ymaxb-yminb))
473 iz2=int(nbz*(zmax_edgm+aaa-zminb)/(zmaxb-zminb))
479 IF(flagremnode==2)
THEN
480 k = kremnode_edg(2*(iedg-1)+1)
481 l = kremnode_edg(2*(iedg-1)+2)-1
483 tagremline(remnode_edg(m)) = 1
491 chain_add = voxel(ix,iy,iz)
492 DO WHILE(chain_add /= 0)
504 ss1= itab(ledge(5,jj))
505 ss2= itab(ledge(6,jj))
513 IF( (ss1==mm1).OR.(ss1==mm2).OR.
514 . (ss2==mm1).OR.(ss2==mm2) )
THEN
521 iss1=bitget(ebinflg(jj),0)
522 iss2=bitget(ebinflg(jj),1)
525 iss1 = bitget(
irem_edge(e_ebinflg,jj-nedge),0)
526 iss2 = bitget(
irem_edge(e_ebinflg,jj-nedge),1)
529 IF(.NOT.((ims1 == 1 .and. iss2==1).or.
530 . (ims2 == 1 .and. iss1==1)))
THEN
536 IF( jj <= nedge)
THEN
537 edge_type = ledge(7,jj)
539 edge_type =
irem_edge(e_type ,jj - nedge)
542 IF(iabs(ledge(7,iedg))/=1 .AND. edge_type /= 1 )
THEN
548 IF(am1 < as1 .OR. (am1 == as1 .AND. am2 < as2))
THEN
554 IF (flagremnode == 2)
THEN
555 IF (jj <= nedge)
THEN
557 IF(tagremline(jj)==1)
THEN
562 IF(tagremline(jj)==0)
THEN
564 k = kremnode_edg(2*(iedg-1)+2)
565 l = kremnode_edg(2*(iedg-1)+3)-1
568 IF ((ss1==remnode_edg(m)).AND.(ss2==remnode_edg(m+1))) remove_remote = 1
570 IF (remove_remote==1)
THEN
577 k = kremnode_edg(2*(iedg-1)+2)
578 l = kremnode_edg(2*(iedg-1)+3)-1
581 IF ((ss1==remnode_edg
583 IF (remove_remote==1)
THEN
594 prov_m(j_stok) = iedg
596 debug_e2e(ledge(8,iedg) == d_em .AND. eid == d_es,eid)
602 IF(j_stok==nvsiz)
THEN
604 1 nvsiz ,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 ,
609 6 cand_p,ifq,cande2e_fx ,cande2e_fy,cande2e_fz,ifpen_e,
611 IF(i_mem(1)/=0)
GOTO 300
627 chain_add = voxel(ix,iy,iz)
628 DO WHILE(chain_add /= 0)
643 IF(flagremnode==2)
THEN
644 k = kremnode_edg(2*(iedg-1)+1)
645 l = kremnode_edg(2*(iedg-1)+2)-1
647 tagremline(remnode_edg(m)) = 0
658 1 j_stok ,irect ,x ,ii_stok,inacti,
659 2 cands_e2e,candm_e2e ,mulnsne,noint ,marge ,
660 3 i_mem(1) ,prov_s ,prov_m ,igap0,cand_a,
661 4 nedge ,ledge ,itab ,drad2 ,igap ,
662 5 gape ,gap_e_l,admsr ,edg_bisector,vtx_bisector ,
663 6 cand_p,ifq,cande2e_fx ,cande2e_fy,cande2e_fz,ifpen_e,
670 IF(sol_edge==0)
GOTO 400
684 IF(msegtyp(ne)/=0) cycle
685 IF(stf(ne)==zero) cycle
710 xmax_edgm=
max(xx1,xx2,xx3,xx4)
711 xmin_edgm=
min(xx1,xx2,xx3,xx4)
712 ymax_edgm=
max(yy1,yy2,yy3,yy4)
713 ymin_edgm=
min(yy1,yy2,yy3,yy4)
714 zmax_edgm=
max(zz1,zz2,zz3,zz4)
715 zmin_edgm=
min(zz1,zz2,zz3,zz4)
717 dx=em02*(xmax_edgm-xmin_edgm)
718 dy=em02*(ymax_edgm-ymin_edgm)
719 dz=em02*(zmax_edgm-zmin_edgm)
720 xmax_edgm=xmax_edgm+dx
721 xmin_edgm=xmin_edgm-dx
722 ymax_edgm=ymax_edgm+dy
723 ymin_edgm=ymin_edgm-dy
724 zmax_edgm=zmax_edgm+dz
725 zmin_edgm=zmin_edgm-dz
727 aaa = marge+bgapemx+dgapload
733 ix1=int(nbx*(xmin_edgm-aaa-xminb)/(xmaxb-xminb))
734 iy1=int(nby*(ymin_edgm-aaa-yminb)/(ymaxb-yminb))
735 iz1=int(nbz*(zmin_edgm-aaa-zminb)/(zmaxb-zminb))
740 ix2=int(nbx*(xmax_edgm+aaa-xminb)/(xmaxb-xminb))
741 iy2=int(nby*(ymax_edgm+aaa-yminb)/(ymaxb-yminb))
742 iz2=int(nbz*(zmax_edgm+aaa-zminb)/(zmaxb-zminb))
748 ims1 = bitget(mbinflg(ne),0)
749 ims2 = bitget(mbinflg(ne),1)
754 ids(1) = itab(irect(1,ne))
755 ids(2) = itab(irect(2,ne))
756 ids(3) = itab(irect(3,ne))
757 ids(4) = itab(irect(4,ne))
767 IF(flagremnode==2)
THEN
768 k = kremnode_e2s(2*(ne-1)+1)
769 l = kremnode_e2s(2*(ne-1)+2)-1
771 tagremline(remnode_e2s(m)) = 1
779 chain_add = voxel(ix,iy,iz)
780 DO WHILE(chain_add /= 0)
790 IF(tagedg(jj)/=0)
THEN
798 ss1= itab(ledge(5,jj))
799 ss2= itab(ledge(6,jj))
805 IF((ss1==mm1).OR.(ss1==mm2).OR.(ss1==mm3).OR.(ss1==mm4).OR.
806 . (ss2==mm1).OR.(ss2==mm2).OR.(ss2==mm3).OR.(ss2==mm4))
THEN
813 iss1=bitget(ebinflg(jj),0)
814 iss2=bitget(ebinflg(jj),1)
816 iss1 = bitget(
irem_edge(e_ebinflg,jj-nedge),0)
817 iss2 = bitget(
irem_edge(e_ebinflg,jj-nedge),1)
819 IF(.NOT.((ims1 == 1 .and. iss2==1).or.
820 . (ims2 == 1 .and. iss1==1)))
THEN
827 IF (flagremnode == 2)
THEN
830 IF(tagremline(jj)==1)
THEN
836 k = kremnode_e2s(2*(ne-1)+2)
837 l = kremnode_e2s(2*(ne-1)+3)-1
840 IF ((ss1==remnode_e2s(m)).AND.(ss2==remnode_e2s(m+1))) remove_remote = 1
842 IF (remove_remote==1)
THEN
870 prov_ids(2,j_stok) = eid
878 IF(j_stok==nvsiz)
THEN
880 1 nvsiz ,irect ,x ,ll_stok,inacti,
881 2 cands_e2s,candm_e2s,mulnsns,noint ,marge ,
882 3 i_mem(2) ,prov_s ,prov_m ,igap0 ,cand_b,
883 4 nedge ,ledge ,itab ,drad2 ,igap ,
884 5 gap_m ,gap_m_l,gape ,gap_e_l,admsr ,
885 6 edg_bisector,vtx_bisector ,cand_ps,prov_ids,
886 7 ifq,cande2s_fx ,cande2s_fy,cande2s_fz,ifpen_e2s,
889 IF(i_mem(2)/=0)
GOTO 400
907 chain_add = voxel(ix,iy,iz)
908 DO WHILE(chain_add /= 0)
922 IF(flagremnode==2)
THEN
923 k = kremnode_e2s(2*(ne-1)+1)
926 tagremline(remnode_e2s(m)) = 0
935 1 j_stok ,irect ,x ,ll_stok,inacti,
936 2 cands_e2s,candm_e2s,mulnsns,noint ,marge ,
937 3 i_mem(2) ,prov_s ,prov_m ,igap0 ,cand_b,
938 4 nedge ,ledge ,itab ,drad2 ,igap ,
939 5 gap_m ,gap_m_l,gape ,gap_e_l,admsr ,
940 6 edg_bisector,vtx_bisector ,cand_ps,prov_ids,
941 7 ifq,cande2s_fx ,cande2s_fy,cande2s_fz,ifpen_e2s,
984 DO k= tmin(3),tmax(3)
985 DO j= tmin(2),tmax(2)
986 DO i= tmin(1),tmax(1)
995 IF(flagremnode==2)
DEALLOCATE(tagremline)