36 1 NSN ,NSNR ,ISZNSNR ,I_MEM ,VMAXDT ,
37 2 IRECT ,X ,STF ,STFN ,XYZM ,
38 3 NSV ,II_STOK ,CAND_N ,ESHIFT ,CAND_E ,
39 4 MULNSN ,NOINT ,V ,BGAPSMX ,
40 5 VOXEL ,NBX ,NBY ,NBZ ,PMAX_GAP ,
41 6 NRTM ,GAP_S ,GAP_M ,MARGE ,CURV_MAX ,
42 7 NIN ,ITASK ,PENE_OLD,ITAB ,NBINFLG ,
43 8 MBINFLG,ILEV ,MSEGTYP ,EDGE_L2 ,IEDGE ,
44 9 ISEADD ,ISEDGE ,CAND_T ,FLAGREMNODE,KREMNOD,
45 A REMNOD ,CAND_A ,RENUM ,NSNROLD ,IRTSE ,
46 B IS2SE ,NSNE ,DGAPLOAD,INTHEAT,IDT_THERM,NODADT_THERM)
54#include "implicit_f.inc"
61 parameter(nvecsz = mvsiz)
106 INTEGER I_MEM,ESHIFT,NSN,ISZNSNR,NRTM,NIN,ITASK,
107 . MULNSN,NOINT,NSNR,NBX,NBY,NBZ,IEDGE,,
108 . NSV(*),CAND_N(*),CAND_E(*),
109 . IRECT(4,*), VOXEL(NBX+2,NBY+2,NBZ+2),II_STOK,ITAB(*),
110 . NBINFLG(*),MBINFLG(*),ILEV,MSEGTYP(*),CAND_T(*),
111 . ISEADD(*) ,ISEDGE(*),FLAGREMNODE,KREMNOD(*),REMNOD(*),CAND_A(*),
112 . RENUM(*),NSNROLD,IRTSE(5,*),IS2SE(2,*)
113 INTEGER,
INTENT(IN) :: INTHEAT
114 INTEGER,
INTENT(IN) :: IDT_THERM
115 INTEGER,
INTENT(IN) :: NODADT_THERM
118 . x(3,*),v(3,*),xyzm(6),stf(*),stfn
119 . gap_m(*),curv_max(*),pene_old(5,nsn),edge_l2(*),
120 . marge,bgapsmx,pmax_gap,vmaxdt
121 my_real ,
INTENT(IN) :: dgapload
125 INTEGER NB_NCN,NB_NCN1,NB_ECN,I,J,DIR,NB_NC,NB_EC,
126 . n1,n2,n3,n4,nn,ne,k,l,j_stok,ii,jj,
127 . prov_n(mvsiz),prov_e(mvsiz),
128 . oldnum(isznsnr), nsnf, nsnl,m,nse,ns,ip
131 . dx,dy,dz,xs,ys,zs,xx,sx,sy,sz,s2,
132 . xmin, xmax,ymin,
ymax,zmin, zmax, tz, gapsmx, gapl,
133 . xx1,xx2,xx3,xx4,yy1,yy2,yy3,yy4,zz1,zz2,zz3,zz4,
134 . d1x,d1y,d1z,d2x,d2y,d2z,dd1,dd2,d2,a2,gs
136 INTEGER LAST_NOD(NSN+NSNR)
137 INTEGER IX,IY,IZ,NEXT,M1,M2,,M4,
138 . IX1,IY1,IZ1,IX2,IY2,IZ2
139 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IIX,IIY,IIZ
141 . xminb,yminb,zminb,xmaxb,ymaxb,zmaxb,
142 . xmine,ymine,zmine,xmaxe,ymaxe,zmaxe,aaa
143 INTEGER FIRST,NEW,LAST
145 INTEGER,
DIMENSION(NUMNOD+NSNE) :: TAG
149 INTEGER IK1(4),IK2(4),IE1,IE2,IED,NS1,NS2,NS1ID,NS2ID
155 ALLOCATE(iix(nsn+nsnr))
156 ALLOCATE(iiy(nsn+nsnr))
157 ALLOCATE(iiz(nsn+nsnr))
182 CALL spmd_oldnumcd(renum,oldnum,isznsnr,nsnrold,intheat,idt_therm,nodadt_therm)
196 IF(stfn(i) == zero)cycle
200 IF(x(1,j) < xmin) cycle
201 IF(x(1,j) > xmax) cycle
202 IF(x(2,j) < ymin) cycle
203 IF(x(2,j) >
ymax) cycle
204 IF(x(3,j) < zmin) cycle
205 IF(x(3,j) > zmax) cycle
207 iix(i)=int(nbx*(x(1,j)-xminb)/(xmaxb-xminb))
208 iiy(i)=int(nby*(x(2,j)-yminb)/(ymaxb-yminb))
209 iiz(i)=int(nbz*(x(3,j)-zminb)/(zmaxb-zminb))
211 iix(i)=
max(1,2+
min(nbx,iix(i)))
212 iiy(i)=
max(1,2+
min(nby,iiy(i)))
213 iiz(i)=
max(1,2+
min(nbz,iiz(i)))
215 first = voxel(iix(i),iiy(i),iiz(i))
218 voxel(iix(i),iiy(i),iiz(i)) = i
221 ELSEIF(last_nod(first) == 0)
THEN
230 last = last_nod(first)
242 IF(
irem(8,j)==-1) cycle
245 iix(nsn+j)=int(nbx*(xrem(1,j)-xminb)/(xmaxb-xminb))
246 iiy(nsn+j)=int(nby*(xrem(2,j)-yminb)/(ymaxb-yminb))
247 iiz(nsn+j)=int(nbz*(xrem(3,j)-zminb)/(zmaxb-zminb))
248 iix(nsn+j)=
max(1,2+
min(nbx,iix(nsn+j)))
249 iiy(nsn+j)=
max(1,2+
min(nby,iiy(nsn+j)))
250 iiz(nsn+j)=
max(1,2+
min(nbz,iiz(nsn+j)))
252 first = voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j))
255 voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j)) = nsn+j
258 ELSEIF(last_nod(first) == 0)
THEN
262 last_nod(first) = nsn+j
267 last = last_nod(first)
269 last_nod(first) = nsn+j
281 IF(flagremnode == 2)
THEN
289 IF(stf(ne) == zero)cycle
291 aaa = marge+curv_max(ne)+bgapsmx+pmax_gap+vmaxdt
292 + + gap_m(ne)+dgapload
307 xmaxe=
max(xx1,xx2,xx3,xx4)
308 xmine=
min(xx1,xx2,xx3,xx4)
314 ymaxe=
max(yy1,yy2,yy3,yy4)
315 ymine=
min(yy1,yy2,yy3,yy4)
321 zmaxe=
max(zz1,zz2,zz3,zz4)
322 zmine=
min(zz1,zz2,zz3,zz4)
327 sx = (yy3-yy1)*(zz4-zz2) - (zz3-zz1)*(yy4-yy2)
328 sy = (zz3-zz1)*(xx4-xx2) - (xx3-xx1)*(zz4-zz2)
329 sz = (xx3-xx1)*(yy4-yy2) - (yy3-yy1)*(xx4-xx2)
330 s2 = sx*sx + sy*sy + sz*sz
334 ix1=int(nbx*(xmine-aaa-xminb)/(xmaxb-xminb))
335 iy1=int(nby*(ymine-aaa-yminb)/(ymaxb-yminb))
336 iz1=int(nbz*(zmine-aaa-zminb)/(zmaxb-zminb))
342 ix2=int(nbx*(xmaxe+aaa-xminb)/(xmaxb-xminb))
343 iy2=int(nby*(ymaxe+aaa-yminb)/(ymaxb-yminb))
344 iz2=int(nbz*(zmaxe+aaa-zminb)/(zmaxb-zminb))
350 IF(flagremnode == 2)
THEN
351 k = kremnod(2*(ne-1)+1)+1
352 l = kremnod(2*(ne-1)+2)
380 IF(flagremnode == 2)
THEN
381 IF(tag(nn) == 1)
GOTO 200
388 IF(ns1 == m1 .OR. ns2 == m1)
GOTO 200
390 IF(ns1 == m3 .OR. ns2
GOTO 200
391 IF(ns1 == m4 .OR. ns2 == m4)
GOTO 200
402 aaa = marge + curv_max(ne)
404 + ,pene_old(3,jj))+vmaxdt
406 aaa = marge + curv_max(ne)
407 + +
max(gap_s(jj)+gap_m(ne)+dgapload
408 + ,pene_old(3,jj))+vmaxdt
412 IF(flagremnode == 2)
THEN
413 k = kremnod(2*(ne-1)+2) + 1
414 l = kremnod(2*(ne-1)+3)
415 IF(irem(8,j)==1)
THEN
417 IF(remnod(m) == -irem(2,j) )
GOTO 200
421 IF(remnod(m) == -irem(2,j) )
GOTO 200
429 IF(irem(8,j)==1)
THEN
431 i24irempnsne=irem(7,j)
432 ied = irem(i24irempnsne+4,j)
433 ns1 = irem(i24irempnsne-1+ik1(ied),j)
434 ns2 = irem(i24irempnsne-1+ik2(ied),j)
437 IF (ns1id == itab(m1) .OR. ns2id == itab(m1))
GOTO 200
438 IF (ns1id == itab(m2) .OR. ns2id == itab(m2))
GOTO 200
439 IF (ns1id == itab(m3) .OR. ns2id == itab(m3))
GOTO
440 IF (ns1id == itab(m4) .OR. ns2id == itab(m4))
GOTO 200
445 aaa = marge+curv_max(ne)
449 + +
max(xrem(igapxremp,j)+gap_m(ne)+dgapload,xrem(i24xremp+6,j))
453 IF(xs<=xmine-aaa)
GOTO 200
454 IF(xs>=xmaxe+aaa)
GOTO 200
455 IF(ys<=ymine-aaa)
GOTO 200
456 IF(ys>=ymaxe+aaa)
GOTO 200
457 IF(zs<=zmine-aaa)
GOTO 200
458 IF(zs>=zmaxe+aaa)
GOTO 200
470 dd1 = d1x*sx+d1y*sy+d1z
471 dd2 = d2x*sx+d2y*sy+d2z*sz
472 IF(dd1*dd2 > zero)
THEN
473 d2 =
min(dd1*dd1,dd2*dd2)
483 IF(j_stok == nvsiz)
THEN
486 1 nvsiz ,irect ,x ,nsv ,ii_stok,
487 2 cand_n,cand_e ,mulnsn,noint ,marge ,
488 3 i_mem ,prov_n ,prov_e,eshift,v ,
489 4 nsn ,gap_s ,gap_m ,curv_max,nin ,
490 5 pene_old,nbinflg ,mbinflg,ilev,msegtyp,
491 6 edge_l2,iedge,iseadd ,isedge ,cand_t,itab,
492 7 cand_a,oldnum,nsnrold,dgapload)
510 IF(flagremnode == 2)
THEN
511 k = kremnod(2*(ne-1)+1)+1
512 l = kremnod(2*(ne-1)+2)
523 1 j_stok,irect ,x ,nsv ,ii_stok,
524 2 cand_n,cand_e ,mulnsn,noint ,marge ,
525 3 i_mem ,prov_n ,prov_e,eshift,v ,
526 4 nsn ,gap_s ,gap_m ,curv_max,nin ,
527 5 pene_old,nbinflg,mbinflg,ilev ,msegtyp,
528 6 edge_l2,iedge,iseadd ,isedge ,cand_t,itab,
529 7 cand_a,oldnum,nsnrold,dgapload)
538 nsnf = 1 + itask*nsn / nthread
539 nsnl = (itask+1)*nsn / nthread
543 voxel(iix(i),iiy(i),iiz(i))=0
550 nsnf = 1 + itask*nsnr / nthread
551 nsnl = (itask+1)*nsnr / nthread
553 IF(irem(8,j)==-1)cycle
554 voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j))=0
subroutine i24trivox(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, edge_l2, iedge, iseadd, isedge, cand_t, flagremnode, kremnod, remnod, cand_a, renum, nsnrold, irtse, is2se, nsne, dgapload, intheat, idt_therm, nodadt_therm)