40 1 NSN ,RENUM ,NSHELR_L,ISZNSNR ,I_MEM ,
41 2 IRECT ,X ,STF ,STFN ,BMINMA ,
42 3 NSV ,II_STOK,CAND_B ,ESHIFT ,CAND_E ,
43 4 MULNSN ,NOINT ,TZINF ,
44 5 VOXEL ,NBX ,NBY ,NBZ ,
48 9 NIN ,ITASK ,IXS ,BUFBRIC ,
49 A NBRIC ,ITAB ,NSHEL_L)
62 use element_mod ,
only : nixs
66#include
"implicit_f.inc"
125 INTEGER I_MEM,ESHIFT,NSN,ISZNSNR,NSHEL_T,NIN,ITASK,
126 . MULNSN,NOINT,NSHELR_L,IGAP,NBX,NBY,NBZ,NBRIC,
127 . NSV(*),CAND_B(*),CAND_E(*),RENUM(*),
128 . IRECT(4,*), IXS(NIXS,*),
130 . VOXEL(NBX+2,NBY+2,NBZ+2),ITAB(*),NSHEL_L,II_STOK
136 . bminma(6),cand_p(*), stf(*),stfn(*),
139 my_real,
DIMENSION(SIZ_XREM, NSHEL_T+1: NSHEL_T+NSHELR_L) ::
145 INTEGER NB_NCN,NB_NCN1,NB_ECN,I,J,K,L,DIR,,NB_EC,
146 . N1,N2,N3,N4,NN,NE,,NCAND_PROV,J_STOK,,JJ,TT,
147 . OLDNUM(ISZNSNR), NSNF, NSNL,
148 . (2*MVSIZ), PROV_E(2*MVSIZ), LAST_NE,
149 . voxbnd(2*mvsiz,0:1,1:3)
152 . dx,dy,dz,xs,ys,zs,sx,sy,sz,s2,
153 . xmin, xmax,ymin,
ymax,zmin, zmax, tz, gapsmx, gapl,
154 . d1x,d1y,d1z,d2x,d2y,d2z,dd1,dd2,d2,a2,gs, point(3),
157 INTEGER IX,IY,IZ,NEXT,M1,M2,M3,M4,M5,M6,M7,M8,
158 . IX1,IY1,IZ1,IX2,IY2,IZ2,IBUG,IBUG2,I_LOC,
159 . BIX1(NBRIC),BIY1(NBRIC),BIZ1(NBRIC),
160 . BIX2(NBRIC),BIY2(NBRIC),BIZ2(NBRIC),
161 . first_add, prev_add, lchain_add, i_stok
163 INTEGER :: NC, I_STOK_BAK, IPA,IPB
165 . XMINB,YMINB,ZMINB,XMAXB,YMAXB,ZMAXB,
169 LOGICAL,
DIMENSION(NBRIC) :: TAGB
171 LOGICAL :: BOOL(NIRECT_L)
172 INTEGER NBCUT, DEJA, ISONSHELL, ISONSH3N
173 INTEGER :: COUNTER, NEDGE, NFACE, NODES8(8), COUNTER_BRICK(NBRIC)
177 INTEGER :: iN1, iN2, iN1a, iN2a, iN1b, iN2b , iN3, iN4
178 INTEGER :: POS, IAD, IB , NBF, NBL
179 INTEGER :: I_12bits, nbits, npqts, pqts(4), SUM, SECTION
180 INTEGER :: I_bits(12), MAX_ADD, IMIN_LOC, IMAX_LOC
183 . aeradiag,xx(8),yy(8),zz(8),diag(4)
185 CHARACTER*12 :: sectype
186 LOGICAL :: IsSecDouble, IsSTO
188 CHARACTER(LEN=1) filenum
191 . MIN_IX_LOC, MIN_IY_LOC, MIN_IZ_LOC,
192 . max_ix_loc, max_iy_loc, max_iz_loc
194 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: order, VALUE
209 print *,
" i22trivox:entering routine"
211 print *,
"------------------BRICKS DOMAIN--------------------"
212 print *,
" BMINMAL_I22TRIVOX=", bminma(4:6),bminma(1:3)
213 print *,
" NBX,NBY,NBZ=", nbx,nby,nbz
214 print *,
"---------------------------------------------------"
217 print *,
" |-----------i22trivox.F---------|"
218 print *,
" | DOMAIN INFORMATION |"
219 print *,
" |-------------------------------|"
220 print *,
" MPI =",ispmd +1
221 print *,
" NT =",itask+1
222 print *,
" NCYCLE =", ncycle
223 print *,
" ITASK =", itask
224 print *,
" NIRECT_L =", nirect_l
225 print *,
" local bricks :", nbric
226 print *,
" tableau briques du domaine local :"
227 print *, ixs(11,bufbric(1:nbric))
228 print *,
" local faces :",nshel_l
229 print *,
" tableau facettes du domaine local :"
230 DO i=1, nirect_l-nshelr_l
231 print *, i,nint(irect_l(1:4, i))
233 print *,
" +remotes:"
234 DO i=nirect_l-nshelr_l+1, nirect_l
235 print *, i,irect_l(1:4, i)
237 print *,
" |-------------------------------|"
239 print *,
" |-----i22trivox.F--------|"
240 print *,
" | THREAD INFORMATION |"
241 print *,
" |------------------------|"
243 print *,
" cple candidats max : ", mulnsn
244 print *,
" ESHIFT=", eshift
245 print *,
" |------------------------|"
278 IF(itask==nthread-1)
THEN
317 daaa = ( (bminma(1)-bminma(4))+(bminma(2)-bminma(5))+
318 . (bminma(3)-bminma(6)) ) / three/hundred
319 dmax =
max(
max(dxb,dyb),dzb)
321 IF(dxb/dmax<em06)dxb=daaa
322 IF(dyb/dmax<em06)dyb=daaa
323 IF(dzb/dmax<em06)dzb=daaa
326 nbf = 1+itask*nirect_l/nthread
327 nbl = (itask+1)*nirect_l/nthread
333 IF(irect_l(23,ne)==zero)cycle
334 IF(((xmaxe(ne)< xminb).OR.(xmine(ne)>xmaxb)).OR.
335 . ((ymaxe(ne)< yminb).OR.(ymine(ne)>ymaxb)).OR.
336 . ((zmaxe(ne)< zminb).OR.(zmine(ne)>zmaxb)))
THEN
345 ix1=int(nbx*(irect_l(17,ne)-aaa-xminb)/dxb)
346 iy1=int(nby*(irect_l(18,ne)-aaa-yminb)/dyb)
347 iz1=int(nbz*(irect_l(19,ne)-aaa-zminb)/dzb)
352 ix2=int(nbx*(irect_l(20,ne)+aaa-xminb)/dxb)
353 iy2=int(nby*(irect_l(21,ne)+aaa-yminb)/dyb)
354 iz2=int(nbz*(irect_l(22,ne)+aaa-zminb)/dzb)
379#include "lockoff.inc"
421 IF(irect_l(23,ne)==zero)cycle
424 print *,
" traitement shell",nint(irect_l((/1,3/),ne)),
426 print *,
" xmin/xmax=", irect_l((/17,20/),ne)
427 print *,
" ymin/ymax=", irect_l((/18,21/),ne)
428 print *,
" zmin/zmax=", irect_l((/19,22/),ne)
434 first_add = voxel(ix,iy,iz)
435 IF(first_add == 0)
THEN
453 max_add = 2 * max_add
468 .print *,
" i22trivox:voxel filled"
469!------ post ---- debug
479 nbf = 1+itask*nbric/nthread
480 nbl = (itask+1)*nbric/nthread
490 ix1=int(nbx*(xmins(i)-xminb)/dxb)
491 iy1=int(nby*(ymins(i)-yminb)/dyb)
492 iz1=int(nbz*(zmins(i)-zminb)/dzb)
493 bix1(i)=
max(1,2+
min(nbx,ix1))
494 biy1(i)=
max(1,2+
min(nby,iy1))
495 biz1(i)=
max(1,2+
min(nbz,iz1))
497 ix2=int(nbx*(xmaxs(i)-xminb)/dxb)
498 iy2=int(nby*(ymaxs(i)-yminb)/dyb)
499 iz2=int(nbz*(zmaxs(i)-zminb)/dzb)
500 bix2(i)=
max(1,2+
min(nbx,ix2))
501 biy2(i)=
max(1,2+
min(nby,iy2))
502 biz2(i)=
max(1,2+
min(nbz,iz2))
511 DO iz = biz1(i),biz2(i)
512 DO iy = biy1(i),biy2(i)
513 DO ix = bix1(i),bix2(i)
514 lchain_add = voxel(ix,iy,iz)
515 DO WHILE(lchain_add /= 0)
526 DO iz = biz1(i),biz2(i)
527 DO iy = biy1(i),biy2(i)
528 DO ix = bix1(i),bix2(i)
529 lchain_add = voxel(ix,iy,iz)
530 DO WHILE(lchain_add /= 0)
540 xx(1:8) = x(1,ixs(2:9,ns))
541 yy(1:8) = x(2,ixs(2:9,ns))
542 zz(1:8) = x(3,ixs(2:9,ns))
543 diag(1) = sqrt((xx(1)-xx(7))**2 + (yy(1)-yy(7))**2 + (zz(1)-zz(7))**2)
544 diag(2) = sqrt((xx(3)-xx(5))**2 + (yy(3)-yy(5))**2 + (zz(3)-zz(5))**2)
545 diag(3) = sqrt((xx(2)-xx(8))**2 + (yy(2)-yy(8))**2 + (zz(2)-zz(8))**2)
546 diag(4) = sqrt((xx(4)-xx(6))**2 + (yy(4)-yy(6))**2 + (zz(4)-zz(6))**2)
547 aaa = 1.2d00*maxval(diag(1:4),1)
550 IF( (irect_l(17,ne)-aaa>xmaxs(i)).OR.
551 . (irect_l(20,ne)+aaa<xmins(i)).OR.
552 . (irect_l(18,ne)-aaa>ymaxs(i)).OR.
553 . (irect_l(21,ne)+aaa<ymins(i)).OR.
554 . (irect_l(19,ne)-aaa>zmaxs(i)).OR.
555 . (irect_l(22,ne)+aaa<zmins(i)) )
THEN
566 IF( (irect_l(17,ne) >xmaxs(i)).OR.
567 . (irect_l(20,ne) <xmins(i)).OR.
568 . (irect_l(18,ne) >ymaxs(i)).OR.
569 . (irect_l(21,ne) <ymins(i)).OR.
570 . (irect_l(19,ne) >zmaxs(i)).OR.
571 . (irect_l(22,ne) <zmins(i)) ) prov_e(i_stok) = -prov_e(i_stok)
575 IF(i_stok>=nvsiz)
THEN
581 1 i_stok ,irect ,x , ii_stok, cand_b,
582 2 cand_e ,mulnsn ,noint , marge , i_mem ,
583 3 prov_b ,prov_e ,eshift , itask , nc ,
584 4 ixs ,bufbric ,nbric , issto )
588 print *,
" i22trivox.F:too much candidates on thread=",
590 print *,
" i22trivox.F:II_STOK=", ii_stok,mulnsn
607 1 i_stok ,irect ,x , ii_stok ,cand_b,
608 2 cand_e ,mulnsn ,noint , marge
609 3 prov_b ,prov_e ,eshift , itask ,nc ,
610 4 ixs ,bufbric ,nbric , issto )
628#include "lockoff.inc"
646 if(itask==0.AND.ibug22_trivox==1) print *,
647 .
" i22trivox.F:nb de candidats:" , ii_stok, itask
651 DO k= min_iz , max_iz
666 DEALLOCATE(lchain_last, lchain_next, lchain_elem )
667 DEALLOCATE(eix1, eiy1, eiz1, eix2, eiy2, eiz2)
668 NULLIFY (lchain_last, lchain_next, lchain_elem)
673 if(itask==0.AND.ibug22_trivox==1)
then
677 if (voxel(ix,iy,iz)/=0)
then
678 print *,
" i22trivox.F:error raz voxel",voxel(ix,iy,iz)
679 print *,
" i22trivox.F:ix,iy,iz=", ix,iy,iz
685 print *,
" i22trivox.F:raz voxel ok."
688 if(itask==0.AND.ibug22_trivox==1)
690 .
" i22trivox.F:returning i22buce (too much candidate)"
693 if(itask==0.AND.ibug22_trivox==1)
694 . print *,
" i22trivox.F:fin recherche des candidats, nb=",
697 if(itask==0.AND.ibug22_trivox==1)
then
698 allocate(order(ii_stok) ,value(ii_stok))
699 min2 = minval(abs(cand_e(1:ii_stok)))
700 r2 = maxval(abs(cand_e(1:ii_stok))) - min2
702 value(i) = cand_b(i)*(r2+1)+abs(cand_e(i))-min2
709 print *,
" II_STOK=", ii_stok
710 print *,
" IXS(11,BUFBRIC(CAND_B)) ) =", ixs(11, bufbric(cand_b(order(1:ii_stok))))
711 print *,
" BUFBRIC(CAND_B) =", bufbric(cand_b(order(1:ii_stok)))
712 print *,
" CAND_B =", cand_b(order(1:ii_stok))
713 print *,
" CAND_E =", cand_e(order(1:ii_stok))
715 deallocate(order,
VALUE)