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,ISZNSNR,NSNROLD,NIN,ITASK,
113 . MULNSN,NOINT,,IFQ,NSNR,IGAP,NBX,NBY,NBZ,
114 . NSV(*),CAND_N(*),CAND_E(*),CAND_A(*),IFPEN(*),RENUM(
117INTEGER,
INTENT(in) :: NRTM
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(*),
124 . tzinf,marge,gap,gapmin,gapmax,bgapsmx,
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
133 . nn,ne,k,l,j_stok,jj,
134 . prov_n(mvsiz),prov_e(mvsiz),
135 . oldnum(isznsnr), nsnf, nsnl,delnod,m
136 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAGREMNODE
138 . xs,ys,zs,sx,sy,sz,s2,
139 . xmin, xmax,ymin,
ymax,zmin, zmax,
140 . xx1,xx2,xx3,xx4,yy1,yy2,yy3,yy4,zz1,zz2,zz3,zz4,
143 INTEGER LAST_NOD(NSN+NSNR)
144 INTEGER IX,IY,IZ,M1,M2,M3,M4,
145 . IX1,IY1,IZ1,IX2,IY2,IZ2
146 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IIX,IIY,IIZ
148 . xminb,yminb,zminb,xmaxb,ymaxb,zmaxb,
149 . xmine,ymine,zmine,xmaxe,ymaxe,zmaxe,aaa
152 INTEGER FIRST,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)')
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
223 !c optimization // search
for nodes within xmin xmax of
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))
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
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+j)))
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) == 1 .OR. iiz(j+nsn) == 1 .AND.
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) == 0)
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)
381 zmine=
min(zz1,zz2,zz3,zz4)
384 sx = (yy3-yy1)*(zz4-zz2) - (zz3-zz1)*(yy4-yy2)
385 sy = (zz3-zz1)*(xx4-xx2) - (xx3-xx1
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 ,
511 3 i_mem ,prov_n ,prov_e,eshift,inacti ,
512 4 ifq ,cand_a ,cand_p,ifpen ,nsn ,
513 5 oldnum,nsnrold,igap ,gap ,gap_s ,
514 6 gap_m ,gapmin ,gapmax,curv_max,nin ,
515 7 gap_s_l,gap_m_l,intth,drad,itied ,
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
562 nsnl = (itask+1)*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(ALLOCATED(TAGREMNODE)) DEALLOCATE(TAGREMNODE)
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 ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)