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)
105 INTEGER I_MEM,ESHIFT,NSN,ISZNSNR,NRTM,NIN,ITASK,
106 . MULNSN,NOINT,NSNR,NBX,NBY,NBZ,IEDGE,NSNE,
107 . NSV(*),CAND_N(*),CAND_E(*),
108 . IRECT(4,*), VOXEL(NBX+2,NBY+2,NBZ+2),II_STOK,ITAB(*),
109 . NBINFLG(*),MBINFLG(*),ILEV,MSEGTYP(*),CAND_T(*),
110 . ISEADD(*) ,ISEDGE(*),FLAGREMNODE,KREMNOD(*),REMNOD(*),CAND_A(*),
111 . RENUM(*),NSNROLD,IRTSE(5,*),IS2SE(2,*)
112 INTEGER,
INTENT(IN) :: INTHEAT
113 INTEGER,
INTENT(IN) ::
114 INTEGER,
INTENT(IN) :: NODADT_THERM
117 . x(3,*),v(3,*),xyzm(6),stf(*),stfn(*),gap_s(*),
118 . gap_m(*),curv_max(*),pene_old(5,nsn),edge_l2(*),
119 . marge,bgapsmx,pmax_gap,vmaxdt
120 my_real ,
INTENT(IN) :: dgapload
125 . nn,ne,k,l,j_stok,jj,
126 . prov_n(mvsiz),prov_e(mvsiz),
127 . oldnum(isznsnr), nsnf, nsnl,m,nse,ns
130 . xs,ys,zs,sx,sy,sz,s2,
131 . xmin, xmax,ymin,
ymax,zmin, zmax,
132 . xx1,xx2,xx3,xx4,yy1,yy2,yy3,yy4,zz1,zz2,zz3,zz4,
133 . d1x,d1y,d1z,d2x,d2y,d2z,dd1,dd2,d2,a2
135 INTEGER LAST_NOD(NSN+NSNR)
136 INTEGER IX,IY,IZ,M1,M2,M3,M4,
137 . IX1,IY1,IZ1,IX2,IY2,IZ2
138 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IIX,IIY,IIZ
140 . xminb,yminb,zminb,xmaxb,ymaxb,zmaxb,
141 . xmine,ymine,zmine,xmaxe,ymaxe,zmaxe,aaa
144 INTEGER,
DIMENSION(NUMNOD+NSNE) :: TAG
148 INTEGER IK1(4),IK2(4),IED,NS1,NS2,NS1ID,NS2ID
154 ALLOCATE(iix(nsn+nsnr))
155 ALLOCATE(iiy(nsn+nsnr))
156 ALLOCATE(iiz(nsn+nsnr))
181 CALL spmd_oldnumcd(renum,oldnum,isznsnr,nsnrold,intheat,idt_therm,nodadt_therm)
195 IF(stfn(i) == zero)cycle
199 IF(x(1,j) < xmin) cycle
200 IF(x(1,j) > xmax) cycle
201 IF(x(2,j) < ymin) cycle
202 IF(x(2,j) >
ymax) cycle
203 IF(x(3,j) < zmin) cycle
204 IF(x(3,j) > zmax) cycle
206 iix(i)=int(nbx*(x(1,j)-xminb)/(xmaxb-xminb))
207 iiy(i)=int(nby*(x(2,j)-yminb)/(ymaxb-yminb))
208 iiz(i)=int(nbz*(x(3,j)-zminb)/(zmaxb-zminb))
210 iix(i)=
max(1,2+
min(nbx,iix(i)))
211 iiy(i)=
max(1,2+
min(nby,iiy(i)))
212 iiz(i)=
max(1,2+
min(nbz,iiz(i)))
214 first = voxel(iix(i),iiy(i),iiz(i))
217 voxel(iix(i),iiy(i),iiz(i)) = i
220 ELSEIF(last_nod(first) == 0)
THEN
229 last = last_nod(first)
241 IF(
irem(8,j)==-1) cycle
244 iix(nsn+j)=int(nbx*(xrem(1,j)-xminb)/(xmaxb-xminb))
245 iiy(nsn+j)=int(nby*(xrem(2,j)-yminb)/(ymaxb-yminb))
246 iiz(nsn+j)=int(nbz*(xrem(3,j)-zminb)/(zmaxb-zminb))
247 iix(nsn+j)=
max(1,2+
min(nbx,iix(nsn+j)))
248 iiy(nsn+j)=
max(1,2+
min(nby,iiy(nsn+j)))
249 iiz(nsn+j)=
max(1,2+
min(nbz,iiz(nsn+j)))
251 first = voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j))
254 voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j)) = nsn+j
257 ELSEIF(last_nod(first) == 0)
THEN
261 last_nod(first) = nsn+j
266 last = last_nod(first)
268 last_nod(first) = nsn+j
280 IF(flagremnode == 2)
THEN
288 IF(stf(ne) == zero)cycle
290 aaa = marge+curv_max(ne)+bgapsmx+pmax_gap+vmaxdt
291 + + gap_m(ne)+dgapload
306 xmaxe=
max(xx1,xx2,xx3,xx4)
307 xmine=
min(xx1,xx2,xx3,xx4)
313 ymaxe=
max(yy1,yy2,yy3,yy4)
314 ymine=
min(yy1,yy2,yy3,yy4)
320 zmaxe=
max(zz1,zz2,zz3,zz4)
321 zmine=
min(zz1,zz2,zz3,zz4)
326 sx = (yy3-yy1)*(zz4-zz2) - (zz3-zz1)*(yy4-yy2)
327 sy = (zz3-zz1)*(xx4-xx2) - (xx3-xx1)*(zz4-zz2)
328 sz = (xx3-xx1)*(yy4-yy2) - (yy3-yy1)*(xx4-xx2)
329 s2 = sx*sx + sy*sy + sz*sz
333 ix1=int(nbx*(xmine-aaa-xminb)/(xmaxb-xminb))
334 iy1=int(nby*(ymine-aaa-yminb)/(ymaxb-yminb))
335 iz1=int(nbz*(zmine-aaa-zminb)/(zmaxb-zminb))
341 ix2=int(nbx*(xmaxe+aaa-xminb)/(xmaxb-xminb))
342 iy2=int(nby*(ymaxe+aaa-yminb)/(ymaxb-yminb))
343 iz2=int(nbz*(zmaxe+aaa-zminb)/(zmaxb-zminb))
349 IF(flagremnode == 2)
THEN
350 k = kremnod(2*(ne-1)+1)+1
351 l = kremnod(2*(ne-1)+2)
379 IF(flagremnode == 2)
THEN
380 IF(tag(nn) == 1)
GOTO 200
387 IF(ns1 == m1 .OR. ns2 == m1)
GOTO 200
388 IF(ns1 == m2 .OR. ns2 == m2)
GOTO 200
389 IF(ns1 == m3 .OR. ns2 == m3)
GOTO 200
390 IF(ns1 == m4 .OR. ns2 == m4)
GOTO 200
401 aaa = marge + curv_max(ne)
402 + +
max(gap_s(jj)+gap_m(ne)+edge_l2(jj)+dgapload
403 + ,pene_old(3,jj))+vmaxdt
405 aaa = marge + curv_max(ne)
406 + +
max(gap_s(jj)+gap_m(ne)+dgapload
407 + ,pene_old(3,jj))+vmaxdt
411 IF(flagremnode == 2)
THEN
412 k = kremnod(2*(ne-1)+2) + 1
413 l = kremnod(2*(ne-1)+3)
414 IF(irem(8,j)==1)
THEN
416 IF(remnod(m) == -irem(2,j) )
GOTO 200
420 IF(remnod(m) == -irem(2,j) )
GOTO 200
428 IF(irem(8,j)==1)
THEN
430 i24irempnsne=irem(7,j)
431 ied = irem(i24irempnsne+4,j)
432 ns1 = irem(i24irempnsne-1+ik1(ied),j)
433 ns2 = irem(i24irempnsne-1+ik2(ied),j)
436 IF (ns1id == itab(m1) .OR. ns2id == itab(m1))
GOTO 200
437 IF (ns1id == itab(m2) .OR. ns2id == itab(m2))
GOTO 200
438 IF (ns1id == itab(m3) .OR. ns2id == itab(m3))
GOTO 200
439 IF (ns1id == itab(m4) .OR. ns2id == itab(m4))
GOTO 200
444 aaa = marge+curv_max(ne)
448 + +
max(xrem(igapxremp,j)+gap_m(ne)+dgapload,xrem(i24xremp+6,j))
452 IF(xs<=xmine-aaa)
GOTO 200
453 IF(xs>=xmaxe+aaa)
GOTO 200
454 IF(ys<=ymine-aaa)
GOTO 200
455 IF(ys>=ymaxe+aaa)
GOTO 200
456 IF(zs<=zmine-aaa)
GOTO 200
457 IF(zs>=zmaxe+aaa)
GOTO 200
469 dd1 = d1x*sx+d1y*sy+d1z*sz
470 dd2 = d2x*sx+d2y*sy+d2z*sz
471 IF(dd1*dd2 > zero)
THEN
472 d2 =
min(dd1*dd1,dd2*dd2)
482 IF(j_stok == nvsiz)
THEN
485 1 nvsiz ,irect ,x ,nsv ,ii_stok,
486 2 cand_n,cand_e ,mulnsn,noint ,marge ,
487 3 i_mem ,prov_n ,prov_e,eshift,v ,
488 4 nsn ,gap_s ,gap_m ,curv_max,nin ,
489 5 pene_old,nbinflg ,mbinflg,ilev,msegtyp,
490 6 edge_l2,iedge,iseadd ,isedge ,cand_t,itab,
491 7 cand_a,oldnum,nsnrold,dgapload)
509 IF(flagremnode == 2)
THEN
510 k = kremnod(2*(ne-1)+1)+1
511 l = kremnod(2*(ne-1)+2)
522 1 j_stok,irect ,x ,nsv ,ii_stok,
523 2 cand_n,cand_e ,mulnsn,noint ,marge ,
524 3 i_mem ,prov_n ,prov_e,eshift,v ,
525 4 nsn ,gap_s ,gap_m ,curv_max,nin ,
526 5 pene_old,nbinflg,mbinflg,ilev ,msegtyp,
527 6 edge_l2,iedge,iseadd ,isedge ,cand_t,itab,
528 7 cand_a,oldnum,nsnrold,dgapload)
537 nsnf = 1 + itask*nsn / nthread
538 nsnl = (itask+1)*nsn / nthread
542 voxel(iix(i),iiy(i),iiz(i))=0
549 nsnf = 1 + itask*nsnr / nthread
550 nsnl = (itask+1)*nsnr / nthread
552 IF(irem(8,j)==-1)cycle
553 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)