39 1 NSN ,RENUM ,NSHELR_L,ISZNSNR ,I_MEM ,
40 2 IRECT ,X ,STF ,STFN ,BMINMA ,
41 3 NSV ,II_STOK,CAND_B ,ESHIFT ,CAND_E ,
42 4 MULNSN ,NOINT ,TZINF ,
43 5 VOXEL ,NBX ,NBY ,NBZ ,
47 9 NIN ,ITASK ,IXS ,BUFBRIC ,
48 A NBRIC ,ITAB ,NSHEL_L)
64#include "implicit_f.inc"
123 INTEGER I_MEM,ESHIFT,NSN,ISZNSNR,NSHEL_T,NIN,ITASK
125 . NSV(*),CAND_B(*),CAND_E(*),RENUM(*),
126 . (4,*), IXS(NIXS,*),
128 . VOXEL(NBX+2,NBY+2,NBZ+2),ITAB(*),NSHEL_L,II_STOK
134 . bminma(6),cand_p(*), stf(*),stfn(*),
137 my_real,
DIMENSION(SIZ_XREM, NSHEL_T+1: NSHEL_T+NSHELR_L) ::
143 INTEGER NB_NCN,NB_NCN1,NB_ECN,I,J,K,,DIR,NB_NC,NB_EC,
144 . N1,N2,N3,N4,NN,NE,NS,NCAND_PROV,J_STOK,II,JJ,TT,
145 . OLDNUM(ISZNSNR), NSNF, NSNL,
146 . PROV_B((2*MVSIZ), LAST_NE,
147 . voxbnd(2*mvsiz,0:1,1:3)
150 . dx,dy,dz,xs,ys,zs,sx,sy,sz,s2,
151 . xmin, xmax,ymin,
ymax,zmin, zmax, tz, gapsmx, gapl,
152 . d1x,d1y,d1z,d2x,d2y,d2z,dd1,dd2,d2,a2,gs, point(3),
155 INTEGER IX,IY,IZ,NEXT,M1,M2,M3,M4,M5,M6,M7,M8,
156 . IX1,IY1,IZ1,IX2,IY2,IZ2,IBUG,IBUG2,I_LOC,
157 . BIX1(NBRIC),BIY1(NBRIC),BIZ1(NBRIC),
158 . BIX2(NBRIC),BIY2(NBRIC),BIZ2(NBRIC),
159 . first_add, prev_add, lchain_add, i_stok
161 INTEGER :: , I_STOK_BAK, IPA,IPB
163 . XMINB,,ZMINB,XMAXB,YMAXB,ZMAXB,
167 LOGICAL,
DIMENSION(NBRIC) :: TAGB
169 LOGICAL :: BOOL(NIRECT_L)
170 INTEGER NBCUT, DEJA, ISONSHELL, ISONSH3N
171 INTEGER :: COUNTER, NEDGE, NFACE, NODES8(8), COUNTER_BRICK(NBRIC)
175 INTEGER :: iN1, iN2, iN1a, iN2a, iN1b, iN2b , iN3, iN4
176 INTEGER :: POS, IAD, IB , NBF,
177 INTEGER :: I_12bits, nbits, npqts, pqts(4), SUM, SECTION
178 INTEGER :: I_bits(12), MAX_ADD, IMIN_LOC, IMAX_LOC
181 . aeradiag,xx(8),yy(8),zz(8),diag(4)
183 CHARACTER*12 :: sectype
184 LOGICAL :: IsSecDouble, IsSTO
186 CHARACTER(LEN=1) filenum
189 . MIN_IX_LOC, MIN_IY_LOC, MIN_IZ_LOC,
190 . max_ix_loc, max_iy_loc, max_iz_loc
192 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: order, VALUE
207 print *,
" i22trivox:entering routine"
209 print *,
"------------------BRICKS DOMAIN--------------------"
210 print *,
" BMINMAL_I22TRIVOX=", bminma(4:6),bminma(1:3)
211 print *,
" NBX,NBY,NBZ=", nbx,nby,nbz
212 print *,
"---------------------------------------------------"
215 print *,
" |-----------i22trivox.F---------|"
216 print *,
" | DOMAIN INFORMATION |"
217 print *,
" |-------------------------------|"
218 print *,
" MPI =",ispmd +1
219 print *,
" NT =",itask+1
220 print *,
" NCYCLE =", ncycle
221 print *,
" ITASK =", itask
222 print *,
" NIRECT_L =", nirect_l
223 print *,
" local bricks :", nbric
224 print *,
" tableau briques du domaine local :"
225 print *, ixs(11,bufbric(1:nbric))
226 print *,
" local faces :",nshel_l
227 print *,
" tableau facettes du domaine local :"
228 DO i=1, nirect_l-nshelr_l
229 print *, i,nint(irect_l(1:4, i))
231 print *,
" +remotes:"
232 DO i=nirect_l-nshelr_l+1, nirect_l
233 print *, i,irect_l(1:4, i)
235 print *,
" |-------------------------------|"
237 print *,
" |-----i22trivox.F--------|"
238 print *,
" | THREAD INFORMATION |"
239 print *,
" |------------------------|"
241 print *,
" cple candidats max : ", mulnsn
242 print *,
" ESHIFT=", eshift
243 print *,
" |------------------------|"
276 IF(itask==nthread-1)
THEN
315 daaa = ( (bminma(1)-bminma(4))+(bminma(2)-bminma(5))+
316 . (bminma(3)-bminma(6)) ) / three/hundred
317 dmax =
max(
max(dxb,dyb),dzb)
319 IF(dxb/dmax<em06)dxb=daaa
320 IF(dyb/dmax<em06)dyb=daaa
321 IF(dzb/dmax<em06)dzb=daaa
324 nbf = 1+itask*nirect_l/nthread
325 nbl = (itask+1)*nirect_l/nthread
331 IF(irect_l(23,ne)==zero)cycle
332 IF(((xmaxe(ne)< xminb).OR.(xmine(ne)>xmaxb)).OR.
333 . ((ymaxe(ne)< yminb).OR.(ymine(ne)>ymaxb)).OR.
334 . ((zmaxe(ne)< zminb).OR.(zmine(ne)>zmaxb)))
THEN
343 ix1=int(nbx*(irect_l(17,ne)-aaa-xminb)/dxb)
344 iy1=int(nby*(irect_l(18,ne)-aaa-yminb)/dyb)
345 iz1=int(nbz*(irect_l(19,ne)-aaa-zminb)/dzb)
350 ix2=int(nbx*(irect_l(20,ne)+aaa-xminb)/dxb)
351 iy2=int(nby*(irect_l(21,ne)+aaa-yminb)/dyb)
352 iz2=int(nbz*(irect_l(22,ne)+aaa-zminb)/dzb)
377#include "lockoff.inc"
419 IF(irect_l(23,ne)==zero)cycle
422 print *,
" traitement shell",nint(irect_l((/1,3/),ne)),
424 print *,
" xmin/xmax=", irect_l((/17,20/),ne)
425 print *,
" ymin/ymax=", irect_l((/18,21/),ne)
426 print *,
" zmin/zmax=", irect_l((/19,22/),ne)
432 first_add = voxel(ix,iy,iz)
433 IF(first_add == 0)
THEN
451 max_add = 2 * max_add
466 .print *,
" i22trivox:voxel filled"
477 nbf = 1+itask*nbric/nthread
478 nbl = (itask+1)*nbric/nthread
488 ix1=int(nbx*(xmins(i)-xminb)/dxb)
489 iy1=int(nby*(ymins(i)-yminb)/dyb)
490 iz1=int(nbz*(zmins(i)-zminb)/dzb)
491 bix1(i)=
max(1,2+
min(nbx,ix1))
492 biy1(i)=
max(1,2+
min(nby,iy1))
493 biz1(i)=
max(1,2+
min(nbz,iz1))
495 ix2=int(nbx*(xmaxs(i)-xminb)/dxb)
496 iy2=int(nby*(ymaxs(i)-yminb)/dyb)
497 iz2=int(nbz*(zmaxs(i)-zminb)/dzb)
498 bix2(i)=
max(1,2+
min(nbx,ix2))
499 biy2(i)=
max(1,2+
min(nby,iy2))
500 biz2(i)=
max(1,2+
min(nbz,iz2))
509 DO iz = biz1(i),biz2(i)
510 DO iy = biy1(i),biy2(i)
511 DO ix = bix1(i),bix2(i)
512 lchain_add = voxel(ix,iy,iz)
513 DO WHILE(lchain_add /= 0)
524 DO iz = biz1(i),biz2(i)
525 DO iy = biy1(i),biy2(i)
526 DO ix = bix1(i),bix2(i)
527 lchain_add = voxel(ix,iy,iz)
528 DO WHILE(lchain_add /= 0)
538 xx(1:8) = x(1,ixs(2:9,ns))
539 yy(1:8) = x(2,ixs(2:9,ns))
540 zz(1:8) = x(3,ixs(2:9,ns))
541 diag(1) = sqrt((xx(1)-xx(7))**2 + (yy(1)-yy(7))**2 + (zz(1)-zz(7))**2)
542 diag(2) = sqrt((xx(3)-xx(5))**2 + (yy(3)-yy(5))**2 + (zz(3)-zz(5))**2)
543 diag(3) = sqrt((xx(2)-xx(8))**2 + (yy(2)-yy(8))**2 + (zz(2)-zz(8))**2)
544 diag(4) = sqrt((xx(4)-xx(6))**2 + (yy(4)-yy(6))**2 + (zz(4)-zz(6))**2)
545 aaa = 1.2d00*maxval(diag(1:4),1)
548 IF( (irect_l(17,ne)-aaa>xmaxs(i)).OR.
549 . (irect_l(20,ne)+aaa<xmins(i)).OR.
550 . (irect_l(18,ne)-aaa>ymaxs(i)).OR.
551 . (irect_l(21,ne)+aaa<ymins(i)).OR.
552 . (irect_l(19,ne)-aaa>zmaxs(i)).OR.
553 . (irect_l(22,ne)+aaa<zmins(i)) )
THEN
564 IF( (irect_l(17,ne) >xmaxs(i)).OR.
565 . (irect_l(20,ne) <xmins(i)).OR.
566 . (irect_l(18,ne) >ymaxs(i)).OR.
567 . (irect_l(21,ne) <ymins(i)).OR.
568 . (irect_l(19,ne) >zmaxs(i)).OR.
569 . (irect_l(22,ne) <zmins(i)) ) prov_e(i_stok) = -prov_e(i_stok)
573 IF(i_stok>=nvsiz)
THEN
579 1 i_stok ,irect ,x , ii_stok, cand_b,
580 2 cand_e ,mulnsn ,noint , marge , i_mem
581 3 prov_b ,prov_e ,eshift , itask , nc ,
582 4 ixs ,bufbric ,nbric , issto )
586 print *,
" i22trivox.F:too much candidates on thread=",
588 print *,
" i22trivox.F:II_STOK=", ii_stok,mulnsn
605 1 i_stok ,irect ,x , ii_stok ,cand_b,
606 2 cand_e ,mulnsn ,noint , marge ,i_mem ,
607 3 prov_b ,prov_e ,eshift , itask ,nc ,
608 4 ixs ,bufbric ,nbric , issto )
626#include "lockoff.inc"
644 if(itask==0.AND.ibug22_trivox==1) print *,
645 .
" i22trivox.F:nb de candidats:" , ii_stok, itask
649 DO k= min_iz , max_iz
664 DEALLOCATE(lchain_last, lchain_next, lchain_elem )
665 DEALLOCATE(eix1, eiy1, eiz1, eix2, eiy2, eiz2)
666 NULLIFY (lchain_last, lchain_next, lchain_elem)
671 if(itask==0.AND.ibug22_trivox==1)
then
675 if (voxel(ix,iy,iz)/=0)
then
676 print *,
" i22trivox.F:error raz voxel",voxel(ix,iy,iz)
677 print *,
" i22trivox.F:ix,iy,iz=", ix,iy,iz
683 print *,
" i22trivox.F:raz voxel ok."
686 if(itask==0.AND.ibug22_trivox==1)
688 .
" i22trivox.F:returning i22buce (too much candidate)"
691 if(itask==0.AND.ibug22_trivox==1)
692 . print *,
" i22trivox.F:fin recherche des candidats, nb=",
695 if(itask==0.AND.ibug22_trivox==1)
then
696 allocate(order(ii_stok) ,value(ii_stok))
697 min2 = minval(abs(cand_e(1:ii_stok)))
698 r2 = maxval(abs(cand_e(1:ii_stok))) - min2
700 value(i) = cand_b(i)*(r2+1)+abs(cand_e(i))-min2
707 print *,
" II_STOK=", ii_stok
708 print *,
" IXS(11,BUFBRIC(CAND_B)) ) =", ixs(11, bufbric(cand_b(order(1:ii_stok))))
709 print *,
" BUFBRIC(CAND_B) =", bufbric(cand_b(order(1:ii_stok)))
710 print *,
" CAND_B =", cand_b(order(1:ii_stok))
711 print *,
" CAND_E =", cand_e(order(1:ii_stok))
713 deallocate(order,
VALUE)