38 1 NSN ,RENUM ,NSNR ,ISZNSNR ,I_MEM ,
39 2 IRECT ,X ,STF ,STFN ,XYZM ,
40 3 NSV ,II_STOK ,CAND_N ,ESHIFT ,CAND_E ,
41 4 MULNSN ,NOINT ,TZINF ,GAP_S_L ,GAP_M_L ,
42 5 VOXEL ,NBX ,NBY ,NBZ ,INTTH ,
43 6 INACTI ,IFQ ,CAND_A ,CAND_P ,IFPEN ,
44 7 NRTM ,NSNROLD ,IGAP ,GAP ,GAP_S ,
45 8 GAP_M ,GAPMIN ,GAPMAX ,MARGE ,CURV_MAX ,
46 9 NIN ,ITASK ,BGAPSMX ,KREMNOD ,REMNOD ,
47 A ITAB ,FLAGREMNODE ,DRAD ,ITIED ,CAND_F ,
48 B DGAPLOAD,REMOTE_S_NODE,LIST_REMOTE_S_NODE,
49 C TOTAL_NB_NRTM,INTHEAT,IDT_THERM,NODADT_THERM)
58#include "implicit_f.inc"
65 parameter(nvecsz = mvsiz)
112 INTEGER I_MEM,ESHIFT,NSN,,NSNROLD,NIN,ITASK,
113 . MULNSN,NOINT,INACTI,IFQ,NSNR,IGAP,NBX,NBY,NBZ,
114 . NSV(*),CAND_N(*),CAND_E(*),CAND_A(*),IFPEN(*),RENUM(*),
115 . INTTH,(4,*), VOXEL(NBX+2,NBY+2,NBZ+2),II_STOK,
116 . KREMNOD(*),REMNOD(*),ITAB(*),FLAGREMNODE,ITIED
117 INTEGER,
INTENT(in) ::
118 INTEGER,
INTENT(in) :: TOTAL_NB_NRTM
119 INTEGER,
INTENT(IN) :: INTHEAT
120 INTEGER,
INTENT(IN) :: IDT_THERM
121 INTEGER,
INTENT(IN) :: NODADT_THERM
123 . X(3,*),XYZM(12),CAND_P(*),STF(*),STFN(*),GAP_S(*),GAP_M(*)
125 . curv_max(*),gap_s_l(*),gap_m_l(*),cand_f(*)
126 my_real ,
INTENT(IN) :: drad,dgapload
127 INTEGER,
INTENT(inout) :: REMOTE_S_NODE
128 INTEGER,
DIMENSION(NSNR),
INTENT(inout) :: LIST_REMOTE_S_NODE
132 INTEGER NB_NCN,NB_NCN1,NB_ECN,I,J,DIR,NB_NC,NB_EC,
133 . n1,n2,n3,n4,nn,ne,k,l,ncand_prov,j_stok,ii,jj,
134 . prov_n(mvsiz),prov_e(mvsiz),
135 . oldnum(isznsnr), nsnf, nsnl,delnod,m
136 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAGREMNODE
138 . dx,dy,dz,xs,ys,zs,xx,sx,sy,sz,s2,
139 . xmin, xmax,ymin,
ymax,zmin, zmax, tz, gapsmx, gapl,
140 . xx1,xx2,xx3,xx4,yy1,yy2,yy3,yy4,zz1,zz2,zz3,zz4,
141 . d1x,d1y,d1z,d2x,d2y,d2z,dd1,dd2,d2,a2,gs
143 INTEGER LAST_NOD(NSN+NSNR)
144 INTEGER ,IY,IZ,NEXT,M1,M2,,M4,
145 . IX1,IY1,IZ1,IX2,IY2,
146 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IIX,,IIZ
148 . xminb,yminb,zminb,xmaxb,ymaxb,zmaxb,
149 . xmine,ymine,zmine,xmaxe,ymaxe,zmaxe,aaa
152 INTEGER FIRST,NEW,LAST,IERROR
153 LOGICAL DBG_type18_fvm
159 ALLOCATE(
next_nod(nsn+nsnr),stat=ierror)
161 CALL ancmsg(msgid=19,anmode=aninfo,
162 . c1=
'(/INTER/TYPE7)')
165 ALLOCATE(iix(nsn+nsnr),iiy(nsn+nsnr),iiz(nsn+nsnr),stat=ierror)
167 CALL ancmsg(msgid=19,anmode=aninfo,
168 . c1=
'(/INTER/TYPE7)')
175! initial phase of bpe and bpn construction moved from
i7buce =>
i7tri
207 IF(nspmd>1.AND.(inacti==5.OR.inacti==6.OR.inacti==7.OR.ifq>0.OR.itied/=0))
THEN
208 CALL spmd_oldnumcd(renum,oldnum,isznsnr,nsnrold,intheat,idt_therm,nodadt_therm)
214 IF(itask==0.AND.total_nb_nrtm>0)
THEN
221 IF(stfn(i) == zero)cycle
225 IF(x(1,j) < xmin) cycle
226 IF(x(1,j) > xmax) cycle
227 IF(x(2,j) < ymin) cycle
228 IF(x(2,j) >
ymax) cycle
229 IF(x(3,j) < zmin) cycle
230 IF(x(3,j) > zmax) cycle
231 iix(i)=int(nbx*(x(1,j)-xminb)/(xmaxb-xminb))
232 iiy(i)=int(nby*(x(2,j)-yminb)/(ymaxb-yminb))
233 iiz(i)=int(nbz*(x(3,j)-zminb)/(zmaxb-zminb))
234 iix(i)=
max(1,2+
min(nbx,iix(i)))
235 iiy(i)=
max(1,2+
min(nby,iiy(i)))
236 iiz(i)=
max(1,2+
min(nbz,iiz(i)))
237 first = voxel(iix(i),iiy(i),iiz(i))
239! count
the number of secondary nodes outiside
the reduced box
240 IF(iix(i) == 1 .OR. iiy(i) == 1 .OR. iiz(i) == 1 .AND.
241 . iix(i) == nbx+2 .OR. iiy(i) == nby+2 .OR. iiz(i) == nbz+2)
THEN
242 cpt_vox0 = cpt_vox0 +1
247 voxel(iix(i),iiy(i),iiz(i)) = i
250 ELSEIF(last_nod(first) == 0)
THEN
259 last = last_nod(first)
271 IF(xrem(1,j) < xmin) cycle
272 IF(xrem(1,j) > xmax) cycle
273 IF(xrem(2,j) < ymin) cycle
274 IF(xrem(2,j) >
ymax) cycle
275 IF(xrem(3,j) < zmin) cycle
276 IF(xrem(3,j) > zmax) cycle
278 remote_s_node = remote_s_node + 1
279 list_remote_s_node( remote_s_node ) = j
280 iix(nsn+j)=int(nbx*(xrem(1,j)-xminb)/(xmaxb-xminb))
281 iiy(nsn+j)=int(nby*(xrem(2,j)-yminb)/(ymaxb-yminb))
282 iiz(nsn+j)=int(nbz*(xrem(3,j)-zminb)/(zmaxb-zminb))
283 iix(nsn+j)=
max(1,2+
min(nbx,iix(nsn+j)))
284 iiy(nsn+j)=
max(1,2+
min(nby,iiy(nsn
285 iiz(nsn+j)=
max(1,2+
min(nbz,iiz(nsn+j)))
287 first = voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j))
290 IF(iix(j+nsn) == 1 .OR. iiy(j+nsn) ==
291 . iix(j+nsn) == nbx+2 .OR. iiy(j+nsn) == nby+2 .OR. iiz(j+nsn) == nbz+2)
THEN
292 cpt_vox0 = cpt_vox0 +1
298 voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j)) = nsn+j
301 ELSEIF(last_nod(first
THEN
304 last_nod(first) = nsn+j
308 last = last_nod(first)
310 last_nod(first) = nsn+j
324 IF(cpt_vox0 > 5*(remote_s_node + nsn)/100)
to_trim(nin) = .false.
335 IF(flagremnode == 2)
THEN
336 ALLOCATE(tagremnode(numnod+numfakenodigeo))
337 DO i=1,numnod+numfakenodigeo
342 IF(stf(ne) == zero)cycle
343 IF(flagremnode == 2)
THEN
344 k = kremnod(2*(ne-1)+1)+1
345 l = kremnod(2*(ne-1)+2)
347 tagremnode(remnod(i)) = 1
351 aaa = tzinf+curv_max(ne)
353 aaa = marge+curv_max(ne)+
max(
min(gapmax,
max(gapmin,bgapsmx+gap_m(ne)))+dgapload,drad)
366 xmaxe=
max(xx1,xx2,xx3,xx4)
367 xmine=
min(xx1,xx2,xx3,xx4)
373 ymaxe=
max(yy1,yy2,yy3,yy4)
374 ymine=
min(yy1,yy2,yy3,yy4)
380 zmaxe=
max(zz1,zz2,zz3,zz4)
384 sx = (yy3-yy1)*(zz4-zz2) - (zz3-zz1)*(yy4-yy2
385 sy = (zz3-zz1)*(xx4-xx2) - (xx3-xx1)*(zz4-zz2)
386 sz = (xx3-xx1)*(yy4-yy2) - (yy3-yy1)*(xx4-xx2)
387 s2 = sx*sx + sy*sy + sz*sz
391 ix1=int(nbx*(xmine-aaa-xminb)/(xmaxb-xminb))
392 ix2=int(nbx*(xmaxe+aaa-xminb)/(xmaxb-xminb))
399 iy1=int(nby*(ymine-aaa-yminb)/(ymaxb-yminb))
400 iy2=int(nby*(ymaxe+aaa-yminb)/(ymaxb-yminb))
407 iz1=int(nbz*(zmine-aaa-zminb)/(zmaxb-zminb))
408 iz2=int(nbz*(zmaxe+aaa-zminb)/(zmaxb-zminb))
446 IF(flagremnode == 2)
THEN
447 IF( tagremnode(nsv(jj)) == 1)
GOTO 200
453 aaa = marge+curv_max(ne)+
max(
min(gapmax,
max(gapmin,gap_s(jj)+gap_m(ne)))+dgapload,drad)
457 IF(flagremnode == 2)
THEN
459 k = kremnod(2*(ne-1)+2) + 1
460 l = kremnod(2*(ne-1)+3)
462 IF(remnod(m) == -
irem(2,j) )
THEN
467 IF(delnod /= 0)
GOTO 200
474 aaa = marge+curv_max(ne)+
max(
min(gapmax,
max(gapmin,xrem(9,j)+gap_m(ne)))+dgapload,drad)
478 IF(xs<=xmine-aaa)
GOTO 200
479 IF(xs>=xmaxe+aaa)
GOTO 200
480 IF(ys<=ymine-aaa)
GOTO 200
481 IF(ys>=ymaxe+aaa)
GOTO 200
482 IF(zs<=zmine-aaa)
GOTO 200
483 IF(zs>=zmaxe+aaa)
GOTO 200
494 dd1 = d1x*sx+d1y*sy+d1z*sz
495 dd2 = d2x*sx+d2y*sy+d2z*sz
496 IF(dd1*dd2 > zero)
THEN
497 d2 =
min(dd1*dd1,dd2*dd2)
507 IF(j_stok == nvsiz)
THEN
509 1 nvsiz ,irect ,x ,nsv ,ii_stok
510 2 cand_n,cand_e ,mulnsn,noint ,marge ,
512 4 ifq ,cand_a ,cand_p,ifpen ,nsn ,
513 5 oldnum,nsnrold,igap ,gap ,gap_s ,
526 IF(flagremnode == 2)
THEN
527 k = kremnod(2*(ne-1)+1)+1
528 l = kremnod(2*(ne-1)+2)
530 tagremnode(remnod(i)) = 0
537 IF(j_stok/=0)
CALL i7sto(
538 1 j_stok,irect ,x ,nsv ,ii_stok,
539 2 cand_n,cand_e ,mulnsn,noint ,marge ,
540 3 i_mem ,prov_n ,prov_e,eshift,inacti ,
541 4 ifq ,cand_a ,cand_p,ifpen ,nsn ,
542 5 oldnum,nsnrold,igap ,gap ,gap_s ,
543 6 gap_m ,gapmin ,gapmax,curv_max,nin ,
544 7 gap_s_l,gap_m_l,intth,drad ,itied ,
553 IF(total_nb_nrtm>0)
THEN
554 nsnf = 1 + itask*nsn / nthread
555 nsnl = (itask+1)*nsn / nthread
558 voxel(iix(i),iiy(i),iiz(i))=0
561 nsnf = 1 + itask*remote_s_node / nthread
563 IF(itask+1==nthread) nsnl=remote_s_node
565 j = list_remote_s_node(jj)
566 voxel(iix(nsn+j),iiy(nsn+j),iiz(nsn+j))=0
575 dbg_type18_fvm=.false.
576 if(inacti==7 .AND. dbg_type18_fvm)
then
577 write(*,fmt=
'(A)')
"------------------------------------------"
578 write(*,*)
"RESULT : Search Algorithm with VOXEL partitioning"
579 write(*,*)
" Number of couples =", ii_stok
581 write(*,fmt=
'(A,(I10))')
" --> SECONDARY Node ids: ", cand_n(1:ii_stok)
582 write(*,fmt=
'(A,(I10))')
" --> Local Face ids: ", cand_e(1:ii_stok)
584 write(*,*)
" Structure domain :"
585 write(*,fmt=
'(A,F30.16,A,F30.16)')
" Xmin=",xmin,
" Xmax=",xmax
586 write(*,fmt=
'(A,F30.16,A,F30.16)')
" Ymin=",ymin,
" Ymax=",
ymax
587 write(*,fmt=
'(A,F30.16,A,F30.16)')
" Zmin=",zmin,
" Zmax=",zmax
588 write(*,*)
" Partitioning domain :"
589 write(*,*)
" TZINF,AAA=",tzinf,aaa
590 write(*,fmt=
'(A,F30.16,A,F30.16)')
" Xmin=",xmin-aaa," xmax=
",XMAX+AAA
591 write(*,FMT='(A,F30.16,A,F30.16)')" ymin=
",YMIN-AAA," ymax=
",YMAX+AAA
592 write(*,FMT='(A,F30.16,A,F30.16)')" zmin=",zmin-aaa,
" Zmax=",zmax+aaa
593 write(*,fmt=
'(A)')
"------------------------------------------"
605 IF(flagremnode == 2)
THEN
606 IF(
ALLOCATEDDEALLOCATE
subroutine i7buce(x, irect, nsv, inacti, cand_p, nmn, nrtm, nsn, cand_e, cand_n, gap, noint, ii_stok, ncontact, bminma, tzinf, maxbox, minbox, mwag, curv_max, nb_n_b, eshift, ild, ifq, ifpen, stfn, nin, stf, igap, gap_s, nsnr, ncont, renum, nsnrold, gap_m, gapmin, gapmax, curv_max_max, num_imp, gap_s_l, gap_m_l, intth, itask, bgapsmx, i_mem, kremnod, remnod, itab, flagremnode, drad, itied, cand_f, dgapload, intheat, idt_therm, nodadt_therm)
subroutine i7trivox(nsn, renum, nsnr, isznsnr, i_mem, irect, x, stf, stfn, xyzm, nsv, ii_stok, cand_n, eshift, cand_e, mulnsn, noint, tzinf, gap_s_l, gap_m_l, voxel, nbx, nby, nbz, intth, inacti, ifq, cand_a, cand_p, ifpen, nrtm, nsnrold, igap, gap, gap_s, gap_m, gapmin, gapmax, marge, curv_max, nin, itask, bgapsmx, kremnod, remnod, itab, flagremnode, drad, itied, cand_f, dgapload, remote_s_node, list_remote_s_node, total_nb_nrtm, intheat, idt_therm, nodadt_therm)
subroutine i7tri(bpe, pe, bpn, pn, add, irect, x, nb_nc, nb_ec, xyzm, i_add, nsv, i_amax, xmax, ymax, zmax, maxsiz, i_stok, i_mem, nb_n_b, cand_n, cand_e, nsn, noint, tzinf, maxbox, minbox, stf, stfn, j_stok, multimp, istf, itab, gap, gap_s, gap_m, igap, gapmin, gapmax, marge, gap_s_l, gap_m_l, id, titr, ix1, ix2, ix3, ix4, nsvg, prov_n, prov_e, n11, n12, n13, pene, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, xi, yi, zi, x0, y0, z0, nx1, ny1, nz1, nx2, ny2, nz2, nx3, ny3, nz3, nx4, ny4, nz4, p1, p2, p3, p4, lb1, lb2, lb3, lb4, lc1, lc2, lc3, lc4, stif)