35 1 NSN ,RENUM ,NSNR ,ISZNSNR ,I_MEM ,
36 2 IRECT ,X ,STF ,STFN ,XYZM ,
37 3 NSV ,II_STOK,CAND_N ,ESHIFT ,CAND_E ,
38 4 MULNSN ,NOINT ,TZINF ,MSR ,
39 5 VOXEL ,NBX ,NBY ,NBZ ,
40 6 INACTI ,CAND_A ,CAND_P ,IFPEN ,
41 7 NRTM ,NSNROLD,IGAP ,GAP ,GAP_S ,
42 8 GAP_M ,GAPMIN ,GAPMAX ,MARGE ,CURV_MAX ,
43 9 NIN ,ITASK ,BGAPSMX ,INTHEAT,IDT_THERM,NODADT_THERM)
51#include "implicit_f.inc"
58 PARAMETER (NVECSZ = mvsiz)
103 INTEGER I_MEM,ESHIFT,NSN,ISZNSNR,NRTM,NSNROLD,NIN,ITASK,
104 . MULNSN,NOINT,INACTI,NSNR,IGAP,NBX,NBY,NBZ,
105 . NSV(*),CAND_N(*),CAND_E(*),CAND_A(*),IFPEN(*),RENUM(*),
106 . IRECT(4,*), VOXEL(NBX+2,NBY+2,NBZ+2), MSR(*),II_STOK
107 INTEGER,
INTENT(IN) :: INTHEAT
108 INTEGER,
INTENT(IN) :: IDT_THERM
109 INTEGER,
INTENT(IN) :: NODADT_THERM
112 . x(3,*),xyzm(6),cand_p(*),stf(*),stfn(*),gap_s(*),gap_m(*),
113 . tzinf,marge,gap,gapmin,gapmax,bgapsmx,
118 INTEGER NB_NCN,NB_NCN1,NB_ECN,I,J,DIR,NB_NC,NB_EC,
119 . N1,N2,N3,N4,NN,NE,K,L,NCAND_PROV,J_STOK,II,JJ,
120 . prov_n(mvsiz),prov_e(mvsiz),
121 . oldnum(isznsnr), nsnf, nsnl
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
129 INTEGER LAST_NOD(NSN+NSNR)
130 INTEGER IX,IY,IZ,NEXT,M1,M2,M3,M4,
131 . IX1,IY1,IZ1,IX2,IY2,IZ2
132 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IIX,IIY,IIZ
134 . XMINB,YMINB,ZMINB,XMAXB,YMAXB,ZMAXB,
135 . XMINE,YMINE,ZMINE,XMAXE,YMAXE,ZMAXE,AAA
136 INTEGER FIRST,NEW,LAST
141 ALLOCATE(iix(nsn+nsnr))
142 ALLOCATE(iiy(nsn+nsnr))
143 ALLOCATE(iiz(nsn+nsnr))
167 CALL spmd_oldnumcd(renum,oldnum,isznsnr,nsnrold,intheat,idt_therm,nodadt_therm)
179 IF(stfn(i) == zero)cycle
183 IF(x(1,j) < xmin) cycle
184 IF(x(1,j) > xmax) cycle
185 IF(x(2,j) < ymin) cycle
186 IF(x(2,j) >
ymax) cycle
187 IF(x(3,j) < zmin) cycle
188 IF(x(3,j) > zmax) cycle
190 iix(i)=int(nbx*(x(1,j)-xminb)/(xmaxb-xminb))
191 iiy(i)=int(nby*(x(2,j)-yminb)/(ymaxb-yminb))
192 iiz(i)=int(nbz*(x(3,j)-zminb)/(zmaxb-zminb))
194 iix(i)=
max(1,2+
min(nbx,iix(i)))
195 iiy(i)=
max(1,2+
min(nby,iiy(i)))
196 iiz(i)=
max(1,2+
min(nbz,iiz(i)))
198 first = voxel(iix(i),iiy(i),iiz(i))
201 voxel(iix(i),iiy(i),iiz(i)) = i
204 ELSEIF(last_nod(first) == 0)
THEN
213 last = last_nod(first) ! last node in this voxel
224 iix(nsn+j)=int(nbx*(xrem(1,j)-xminb)/(xmaxb-xminb))
225 iiy(nsn+j)=int(nby*(xrem(2,j)-yminb)/(ymaxb-yminb))
226 iiz(nsn+j)=int(nbz*(xrem(3,j)-zminb)/(zmaxb-zminb))
229 iiy(nsn+j)=
max(1,2+
min(nby,iiy(nsn+j)))
230 iiz(nsn+j)=
max(1,2+
min(nbz,iiz(nsn+j)))
232 first = voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j))
235 voxel(iix(nsn+j),iiy(nsn+j
238 ELSEIF(last_nod(first) == 0)
THEN
242 last_nod(first) = nsn+j
247 last = last_nod(first)
249 last_nod(first) = nsn+j
266 IF(stf(ne) == zero)cycle
269 aaa = tzinf+sqrt(three)*curv_max(ne)
271 aaa = marge+sqrt(three)*(curv_max(ne)+
272 .
min(gapmax,
max(gapmin,bgapsmx+gap_m(ne))))
287 xmaxe=
max(xx1,xx2,xx3,xx4)
288 xmine=
min(xx1,xx2,xx3,xx4)
294 ymaxe=
max(yy1,yy2,yy3,yy4)
295 ymine=
min(yy1,yy2,yy3,yy4)
301 zmaxe=
max(zz1,zz2,zz3,zz4)
302 zmine=
min(zz1,zz2,zz3,zz4)
307 sx = (yy3-yy1)*(zz4-zz2) - (zz3-zz1)*(yy4-yy2)
308 sy = (zz3-zz1)*(xx4-xx2) - (xx3-xx1)*(zz4-zz2)
309 sz = (xx3-xx1)*(yy4-yy2) - (yy3-yy1)*(xx4-xx2)
310 s2 = sx*sx + sy*sy + sz*sz
314 ix1=int(nbx*(xmine-aaa-xminb)/(xmaxb-xminb))
315 iy1=int(nby*(ymine-aaa-yminb)/(ymaxb-yminb))
316 iz1=int(nbz*(zmine-aaa-zminb)/(zmaxb-zminb))
322 ix2=int(nbx*(xmaxe+aaa-xminb)/(xmaxb-xminb))
323 iy2=int(nby*(ymaxe+aaa-yminb)/(ymaxb-yminb))
324 iz2=int(nbz*(zmaxe+aaa-zminb)/(zmaxb-zminb))
358 . sqrt(three)*(curv_max(ne)+
min(gapmax,
max
359 . gap_s(jj)+gap_m(ne))))
368 . sqrt(three)*(curv_max(ne)+
min(gapmax,
max(gapmin,
369 . xrem(9,j)+gap_m(ne))))
374 IF(xs<=xmine-aaa)
GOTO 200
375 IF(xs>=xmaxe+aaa)
GOTO 200
376 IF(ys<=ymine-aaa)
GOTO 200
377 IF(ys>=ymaxe+aaa)
GOTO 200
378 IF(zs<=zmine-aaa)
GOTO 200
379 IF(zs>=zmaxe+aaa)
GOTO 200
391 dd1 = d1x*sx+d1y*sy+d1z*sz
392 dd2 = d2x*sx+d2y*sy+d2z*sz
393 IF(dd1*dd2 > zero)
THEN
394 d2 =
min(dd1*dd1,dd2*dd2)
404 IF(j_stok == nvsiz)
THEN
407 1 nvsiz ,irect ,x ,nsv ,ii_stok,
408 2 cand_n ,cand_e ,mulnsn ,noint ,marge ,
409 3 i_mem ,prov_n ,prov_e ,eshift ,inacti ,
410 4 igap ,gap ,gap_s ,gap_m ,gapmin ,
411 5 gapmax ,curv_max ,msr ,nsn ,oldnum ,
412 6 nsnrold,cand_a ,ifpen ,cand_p )
437 1 j_stok ,irect ,x ,nsv ,ii_stok,
438 2 cand_n ,cand_e ,mulnsn ,noint ,marge ,
439 3 i_mem ,prov_n ,prov_e ,eshift ,inacti ,
440 4 igap ,gap ,gap_s ,gap_m ,gapmin ,
441 5 gapmax ,curv_max ,msr ,nsn ,oldnum ,
442 6 nsnrold,cand_a ,ifpen ,cand_p )
451 nsnf = 1 + itask*nsn / nthread
452 nsnl = (itask+1)*nsn / nthread
456 voxel(iix(i),iiy(i),iiz(i))=0
463 nsnf = 1 + itask*nsnr / nthread
464 nsnl = (itask+1)*nsnr / nthread
466 voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j))=0
subroutine i23buce(x, irect, nsv, inacti, nrtm, nsn, cand_e, cand_n, gap, noint, ii_stok, tzinf, maxbox, minbox, ncontact, nb_n_b, eshift, cand_p, ncont, ild, weight, stfn, nin, stf, igap, gap_s, gapmin, gapmax, icurv, num_imp, itask, i_mem, msr, gap_m, nsnr, curv_max, renum, nsnrold, ifpen, mwag, bminma, nmn, irectg, bgapsmx, intheat, idt_therm, nodadt_therm)
subroutine i23trivox(nsn, renum, nsnr, isznsnr, i_mem, irect, x, stf, stfn, xyzm, nsv, ii_stok, cand_n, eshift, cand_e, mulnsn, noint, tzinf, msr, voxel, nbx, nby, nbz, inacti, cand_a, cand_p, ifpen, nrtm, nsnrold, igap, gap, gap_s, gap_m, gapmin, gapmax, marge, curv_max, nin, itask, bgapsmx, intheat, idt_therm, nodadt_therm)