32 2 IXTG ,X ,NODCUT,RWBUF,NPRW,
37#include "implicit_f.inc"
49 INTEGER NESBW,NSTRF(*),IXC(NIXC,*),IXTG(NIXTG,*),
50 . NODCUT,NPRW(*), IXS(NIXS,*),BUF,NODGLOB(*)
52 . x(3,*),rwbuf(nrwlp,*)
56 INTEGER J, JJ, LEN, I, K, L, KK, K0, K1, K5, K9, N,
57 . N0, N1, N2, N3, N4, N10, NSEG, NSEGC, NSEGTG, ITYP,
58 . unpack(15,4), ii(8), n5, n6, n7, n8, nsegs, k3,ow,
61 . xx1, yy1, zz1, xx2, yy2, zz2, xx3, yy3, zz3,
62 . xx4, yy4, zz4, d13, xxc, yyc, zzc
63 INTEGER POWER2(8),IPACK
65 INTEGER :: MODE,SIZE_BUFFER_S,SIZE_BUFFER00_R
66 INTEGER,
DIMENSION(NSPMD) :: SHIFT_R,
67 INTEGER,
DIMENSION(NSECT,3,NSPMD) :: SHIFT_SECT
68 INTEGER,
DIMENSION(NSECT+1,3) ::SINDEX
69 INTEGER,
DIMENSION(NSECT+1,3,NSPMD) :: RINDEX_PROC
70 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BUFFER_S
71 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BUFFER00_R
73 DATA power2/1,2,4,8,16,32,64,128/
75 DATA unpack/1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,
76 . 0,0,2,0,3,3,2,0,4,4,2,4,3,3,2,
77 . 0,0,0,0,0,0,3,0,0,0,4,0,4,4,3,
78 . 0,0,0,0,0,0,0,0,0,0,0,0,0,0,4/
137 sindex(1:nsect+1,1:3) = 0
145 n0 = numnod + nodcut + i - 1
146 k5=k0+30+nstrf(k0+14)+nstrf(k0+6)
147 1 + 2*nstrf(k0+7) +nstrf(k0+8)*2
156 IF(nstrf(kk+1)/=0)
THEN
161 k9 = k5+2*nstrf(k0+9) +2*nstrf(k0+10)
162 1 +2*nstrf(k0+11)+2*nstrf(k0+12)
163 nsegtg = nstrf(k0+13)
170 IF(nstrf(kk+1)/=0)
THEN
176 k3=k0+30+nstrf(k0+14)+nstrf(k0+6)
200 ii(1)=nodglob(ixs(2,n))-1
202 ii(3)=nodglob(ixs(4,n))-1
205 ii(6)=nodglob(ixs(7,n))-1
206 ii(7)=nodglob(ixs(8,n))-1
210 IF( ii(2)==ii(1).AND.ii(4)==ii(3)
211 . .AND.ii(8)==ii(5).AND.ii(7)==ii(6))
THEN
213 n1=mod(ipack/power2(1),2)
214 n2=mod(ipack/power2(3),2)
215 n3=mod(ipack/power2(5),2)
216 n4=mod(ipack/power2(6),2)
217 IF(n1/=0.AND.n2/=0.AND.n3/=0)
THEN
220 IF(n1/=0.AND.n2/=0.AND.n4/=0)
THEN
223 IF(n2/=0.AND.n3/=0.AND.n4/=0)
THEN
226 IF(n3/=0.AND.n1/=0.AND.n4/=0)
THEN
231 n1=mod(ipack/power2(1),2)
232 n2=mod(ipack/power2(2),2)
233 n3=mod(ipack/power2(3),2)
234 n4=mod(ipack/power2(4),2)
235 n5=mod(ipack/power2(5),2)
236 n6=mod(ipack/power2(6),2)
237 n7=mod(ipack/power2(7),2)
238 n8=mod(ipack/power2(8),2)
239 IF(n1/=0.AND.n2/=0.AND.n3/=0.AND.n4/=0)
THEN
242 IF(n5/=0.AND.n6/=0.AND.n7/=0.AND.n8/=0)
THEN
245 IF(n1/=0.AND.n5/=0.AND.n6/=0.AND.n2/=0)
THEN
248 IF(n4/=0.AND.n8/=0.AND.n7/=0.AND.n3/=0)
THEN
251 IF(n1/=0.AND.n4/=0.AND.n8/=0.AND.n5/=0)
THEN
254 IF(n2/=0.AND.n3/=0.AND.n7/=0.AND.n6/=0)
THEN
265 sindex(nsect+1,1:3) = size_buffer_s
270 ALLOCATE( buffer_s(size_buffer_s) )
273 ALLOCATE( buffer00_r(0) )
276 CALL spmd_gather_wa(mode,size_buffer_s,size_buffer00_r,sindex,rindex_proc,
277 1 buffer_s,buffer00_r,shift_r,nb_elem_r)
279 size_buffer00_r = size_buffer_s
282 rindex_proc(1:nsect,1:3,1) = sindex(1:nsect,1:3)
286 DEALLOCATE( buffer00_r )
287 ALLOCATE( buffer00_r(size_buffer00_r) )
296 n0 = numnod + nodcut + i - 1
297 k5=k0+30+nstrf(k0+14)+nstrf(k0+6)
304 IF(nstrf(kk+1)/=0)
THEN
305 n1 = unpack(nstrf(kk+1),1)
306 n2 = unpack(nstrf(kk+1),2)
311 n3 = unpack(nstrf(kk+1),3)
316 buffer_s(jj+2) = ixc(1+n1,n)-1
317 buffer_s(jj+3) = ixc(1+n2,n)-1
318 buffer_s(jj+4) = ixc(1+n3,n)-1
321 buffer_s(jj+1) = numnodg + nodcut + i - 1
322 buffer_s(jj+2) = nodglob(ixc(1+n1,n))-1
323 buffer_s(jj+3) = nodglob(ixc(1+n2,n))-1
330 k9=k5+2*nstrf(k0+9) +2*nstrf(k0+10)
331 1 + 2*nstrf(k0+11)+2*nstrf(k0+12)
332 nsegtg = nstrf(k0+13)
336 IF(nstrf(kk+1)/=0)
THEN
337 n1 = unpack(nstrf(1+kk),1)
338 n2 = unpack(nstrf(1+kk),2)
343 n3 = unpack(nstrf(1+kk),3)
348 buffer_s(jj+2) = ixtg(1+n1,n)-1
349 buffer_s(jj+3) = ixtg(1+n2,n)-1
350 buffer_s(jj+4) = ixtg(1+n3,n)-1
353 buffer_s(jj+1) = numnodg + nodcut + i - 1
354 buffer_s(jj+2) = nodglob(ixtg(1+n1,n))-1
355 buffer_s(jj+3) = nodglob(ixtg(1+n2,n))-1
356 buffer_s(jj+4) = nodglob(ixtg(1+n3,n))-1
362 k3=k0+30+nstrf(k0+14)+nstrf(k0+6)
376 buffer_s(jj+4) = numnodg + nodcut
396 ii(1)=nodglob(ixs(2,n))-1
399 ii(4)=nodglob(ixs(5,n))-1
400 ii(5)=nodglob(ixs(6,n))-1
401 ii(6)=nodglob(ixs(7,n))-1
402 ii(7)=nodglob(ixs(8,n))-1
406 IF( ii(2)==ii(1).AND.ii
407 . .AND.ii(8)==ii(5).AND.ii
THEN
409 n1=mod(ipack/power2(1),2)
411 n3=mod(ipack/power2(5),2)
413 IF(n1/=0.AND.n2/=0.AND.n3/=0)
THEN
414 buffer_s(jj+1) =ii(1)
415 buffer_s(jj+2) =ii(3)
416 buffer_s(jj+3) =ii(5)
417 buffer_s(jj+4) =ii(5)
420 IF(n1/=0.AND.n2/=0.AND.n4/=0)
THEN
421 buffer_s(jj+1) =ii(1)
423 buffer_s(jj+3) =ii(6)
427 IF(n2/=0.AND.n3/=0.AND.n4/=0)
THEN
428 buffer_s(jj+1) =ii(3)
429 buffer_s(jj+2) =ii(5)
434 IF(n3/=0.AND.n1/=0.AND.n4/=0)
THEN
437 buffer_s(jj+3) =ii(6)
438 buffer_s(jj+4) =ii(6)
443 n1=mod(ipack/power2(1),2)
444 n2=mod(ipack/power2(2),2)
445 n3=mod(ipack/power2(3),2)
446 n4=mod(ipack/power2(4),2)
447 n5=mod(ipack/power2(5),2)
448 n6=mod(ipack/power2(6),2)
449 n7=mod(ipack/power2(7),2)
450 n8=mod(ipack/power2(8),2)
452 IF(n1/=0.AND.n2/=0.AND.n3/=0.AND.n4/=0)
THEN
453 buffer_s(jj+1) =ii(1)
454 buffer_s(jj+2) =ii(2)
455 buffer_s(jj+3) =ii(3)
456 buffer_s(jj+4) =ii(4)
459 IF(n5/=0.AND.n6/=0.AND.n7/=0.AND.n8/=0)
THEN
460 buffer_s(jj+1) =ii(5)
461 buffer_s(jj+2) =ii(6)
462 buffer_s(jj+3) =ii(7)
463 buffer_s(jj+4) =ii(8)
466 IF(n1/=0.AND.n5/=0.AND.n6/=0.AND.n2/=0)
THEN
467 buffer_s(jj+1) =ii(1)
468 buffer_s(jj+2) =ii(5)
469 buffer_s(jj+3) =ii(6)
470 buffer_s(jj+4) =ii(2)
473 IF(n4/=0.AND.n8/=0.AND.n7/=0.AND.n3/=0)
THEN
474 buffer_s(jj+1) =ii(4)
475 buffer_s(jj+2) =ii(8)
476 buffer_s(jj+3) =ii(7)
477 buffer_s(jj+4) =ii(3)
480 IF(n1/=0.AND.n4/=0.AND.n8/=0.AND.n5/=0)
THEN
481 buffer_s(jj+1) =ii(1)
482 buffer_s(jj+2) =ii(4)
483 buffer_s(jj+3) =ii(8)
484 buffer_s(jj+4) =ii(5)
487 IF(n2/=0.AND.n3/=0.AND.n7/=0.AND.n6/=0)
THEN
488 buffer_s(jj+1) =ii(2)
489 buffer_s(jj+2) =ii(3)
490 buffer_s(jj+3) =ii(7)
491 buffer_s(jj+4) =ii(6)
506 CALL spmd_gather_wa(mode,size_buffer_s,size_buffer00_r,sindex,rindex_proc,
507 1 buffer_s,buffer00_r,shift_r,nb_elem_r)
509 buffer00_r(1:size_buffer00_r) = buffer_s(1:size_buffer_s)
511 DEALLOCATE( buffer_s )
530 IF (ispmd==0.AND.nsect>0)
THEN
532 shift_sect(1,1,i) = 0
533 shift_sect(1,2,i) = rindex_proc(1,1,i)
534 shift_sect(1,3,i) = rindex_proc(1,2,i)
536 shift_sect(jj,1,i) = rindex_proc(jj-1,3,i)
537 shift_sect(jj,2,i) = rindex_proc(jj,1,i)
538 shift_sect(jj,3,i) = rindex_proc(jj,2,i)
547 len = rindex_proc(jj,1,i) - shift_sect(jj,1,i)
549 indice = 1 + shift_r(i) + shift_sect(jj,1,i)
557 len = rindex_proc(jj,2,i) - rindex_proc(jj,1,i)
559 indice = 1 + shift_r(i) + shift_sect(jj,2,i)
567 len = rindex_proc(jj,3,i) - rindex_proc(jj,2,i)
569 indice = 1 + shift_r(i) + shift_sect(jj,3,i)
579 n0 = numnodg + nodcut + nsect
580 n1 = numnodg + nodcut + nsect + nrwall
595 IF(iabs(ityp)==1.OR.ityp==4)
THEN
635 IF(nprw(n4)==-1)k=k+nint(rwbuf(8,n))
639 IF(
ALLOCATED(buffer00_r))
DEALLOCATE( buffer00_r )