110 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
111#include "implicit_f.inc"
123 INTEGER BUF(*), SIZE, ITAG, IPROV
128 INTEGER IERR, ISTAT(MPI_STATUS_SIZE), LEN_STR, IERR_STR
129 CHARACTER STR_ERROR*(MPI_MAX_ERROR_STRING)
131 CALL mpi_recv(buf,
SIZE, mpi_integer, it_spmd(iprov), itag,
132 . spmd_comm_world, istat, ierr)
187 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
188#include "implicit_f.inc"
196#include
"com01_c.inc"
201 INTEGER SIZE, SBUF(SIZE,*), RBUF(SIZE,*), MSGOFF
206 INTEGER I, ITAG, REQ(2), IERR,
207 . TSTAT(MPI_STATUS_SIZE,2)
214 itag=msgoff + nspmd*ispmd + i
215 CALL mpi_isend(sbuf(1,i),
SIZE, mpi_integer, it_spmd(i),
216 . itag, spmd_comm_world, req(1), ierr)
218 itag=msgoff + nspmd*(i-1) + ispmd+1
219 CALL mpi_irecv(rbuf(1,i),
SIZE, mpi_integer, it_spmd(i),
220 . itag, spmd_comm_world, req(2), ierr)
240 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
241#include "implicit_f.inc"
249#include "com01_c.inc"
254 INTEGER N, NN, IEXCH(NN,*), MSGOFF, IADS(*), IADR(*)
256 . matr(n,*), rexch(*)
261 INTEGER I, IADC, LEN, ITAG(3), J, IR, IC, (6),
262 . tstat(mpi_status_size,6), ierr, lenr
263 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IROW, ICOL
265 . ,
DIMENSION(:),
ALLOCATABLE :: val
270 len=iads(i+1)-iads(i)
274 matr(ir,ic)=matr(ir,ic)+rexch(iadc+j-1)
278 len=iadr(i+1)-iadr(i)
280 ALLOCATE(irow(len), icol(len), val(len))
281 itag(1)=msgoff + nspmd*3*(i-1) + ispmd+1
283 itag(3)=msgoff + nspmd*3*(i-1) + 2*nspmd+ispmd+1
284 CALL mpi_irecv(irow, len, mpi_integer, it_spmd(i),
285 . itag(1), spmd_comm_world, req(1), ierr)
286 CALL mpi_irecv(icol, len, mpi_integer, it_spmd(i),
287 . itag(2), spmd_comm_world, req(2), ierr)
288 CALL mpi_irecv(val, len, real, it_spmd(i),
289 . itag(3), spmd_comm_world, req(3), ierr)
292 len=iads(i+1)-iads(i)
293 itag(1)=msgoff + nspmd*3*ispmd + i
294 itag(2)=msgoff + nspmd*3*ispmd + nspmd+i
295 itag(3)=msgoff + nspmd*3*ispmd + 2*nspmd+i
296 CALL mpi_isend(iexch(iadc,1), len, mpi_integer, it_spmd(i),
297 . itag(1), spmd_comm_world, req(4), ierr)
298 CALL mpi_isend(iexch(iadc,2), len, mpi_integer, it_spmd(i),
299 . itag(2), spmd_comm_world, req(5), ierr)
300 CALL mpi_isend(rexch(iadc), len, real, it_spmd(i),
301 . itag(3), spmd_comm_world, req(6), ierr)
308 matr(ir,ic)=matr(ir,ic)+val
310 DEALLOCATE(irow, icol, val)
324 . IADS, IADR, NN , NV )
328 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
329#include "implicit_f.inc"
337#include "com01_c.inc"
342 INTEGER N, IEXCH(*), MSGOFF, IADS(*), IADR(*), NN, NV
344 . vect(n,*), rexch(nn,*)
349 INTEGER I, IADC, LEN, ITAG, J, K, IR, REQ(4),
350 . TSTAT(MPI_STATUS_SIZE, 4), IERR, II, LEN2, LENR
351 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IROW
353 . ,
DIMENSION(:,:),
ALLOCATABLE :: val, vals
358 len=iads(i+1)-iads(i)
362 vect(ir,j)=vect(ir,j)+rexch(iadc+k-1,j)
367 len=iadr(i+1)-iadr(i)
371 ALLOCATE(irow(len), val(len,nv))
372 itag=msgoff + nspmd*2*(i-1) + ispmd+1
374 CALL mpi_irecv(irow, len, mpi_integer, it_spmd(i),
375 . itag, spmd_comm_world, req(ii), ierr)
376 itag=msgoff + nspmd*2*(i-1) + nspmd + ispmd+1
379 CALL mpi_irecv(val, len2, real, it_spmd(i),
380 . itag, spmd_comm_world, req(ii), ierr)
384 len=iads(i+1)-iads(i)
386 itag=msgoff + nspmd*2*ispmd + i
388 CALL mpi_isend(iexch(iadc), len, mpi_integer, it_spmd(i),
389 . itag, spmd_comm_world, req(ii), ierr)
390 ALLOCATE(vals(len,nv))
393 vals(k,j)=rexch(iadc+k-1,j)
396 itag=msgoff + nspmd*2*ispmd + nspmd + i
399 CALL mpi_isend(vals, len2, real, it_spmd(i),
400 . itag, spmd_comm_world, req(ii), ierr)
408 vect(ir,j)=vect(ir,j)+val(k,j)
411 IF (len>0)
DEALLOCATE(vals)
412 IF (lenr>0)
DEALLOCATE(irow, val)
430 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
431#include "implicit_f.inc"
439#include "com01_c.inc"
444 INTEGER NDEPL, NDDLC, NLOC, MSGOFF
451 INTEGER ITAG, LEN, IERR, I, NPLOC, IPROV,
452 . ISTAT(MPI_STATUS_SIZE), J, KK, IAD1, K
454 . ,
DIMENSION(:,:),
ALLOCATABLE :: vp
456 IF (ispmd/=0.AND.mod(ispmd,dsncol)==0)
THEN
458 CALL mpi_send(nloc, 1, mpi_integer, it_spmd(1), itag,
459 . spmd_comm_world, ierr)
461 itag=msgoff + nspmd + ispmd
463 CALL mpi_send(v, len, real, it_spmd(1), itag,
464 . spmd_comm_world, ierr)
471 ALLOCATE(vp(nploc,ndepl))
479 itag=msgoff + iprov-1
480 CALL mpi_recv(nploc, 1, mpi_integer, it_spmd(iprov),
483 itag=msgoff + nspmd + iprov-1
484 ALLOCATE(vp(nploc,ndepl))
486 CALL mpi_recv(vp, len, real, it_spmd(iprov), itag,
487 . spmd_comm_world, istat, ierr)
497 iad1=iad1+dsnbloc*(dsnrow-1)
507 itag=msgoff + 2*nspmd + i-1
509 CALL mpi_send(vv, len, real, it_spmd(i), itag,
510 . spmd_comm_world, ierr)
513 itag=msgoff + 2*nspmd + ispmd
515 CALL mpi_recv(vv, len, real, it_spmd(1), itag,
516 . spmd_comm_world, istat, ierr)
533 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
534#include "implicit_f.inc"
542#include "com01_c.inc"
547 INTEGER NDDLT, NDDLG, NDDL, LSDDL(*), IW(*), MSGOFF
552 INTEGER I, ITAG(2,NDDLT), II, NDDLPM, IRQTAG, NDDLP(NSPMD-1),
553 . ISTAT(MPI_STATUS_SIZE), IERR, J, JJ, N
554 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: LDDLP
569 CALL mpi_recv(nddlp(i), 1, mpi_integer
570 . irqtag, spmd_comm_world, istat, ierr)
571 nddlpm=
max(nddlpm,nddlp(i))
573 ALLOCATE(lddlp(nddlpm,nspmd-1))
575 irqtag=msgoff + nspmd + i
577 . lddlp(1,i), nddlp(i), mpi_integer, it_spmd(i+1),
578 . irqtag, spmd_comm_world, istat, ierr)
587 IF (itag(1,i)==1)
THEN
602 lddlp(j,i)=itag(2,jj)
604 irqtag=msgoff + 2*nspmd + i
605 CALL mpi_send(nddlg, 1, mpi_integer, it_spmd(i+1),
606 . irqtag, spmd_comm_world, ierr)
607 irqtag=msgoff + 3*nspmd + i
609 . lddlp(1,i), nddlp(i), mpi_integer, it_spmd(i+1),
610 . irqtag, spmd_comm_world, ierr)
614 irqtag=msgoff + ispmd
615 CALL mpi_send(nddl, 1, mpi_integer, it_spmd(1),
616 . irqtag, spmd_comm_world, ierr)
617 irqtag=msgoff + nspmd + ispmd
618 CALL mpi_send(lsddl, nddl, mpi_integer, it_spmd(1),
619 . irqtag, spmd_comm_world, ierr)
620 irqtag=msgoff + 2*nspmd + ispmd
621 CALL mpi_recv(nddlg, 1, mpi_integer, it_spmd(1),
622 . irqtag, spmd_comm_world, istat, ierr)
623 irqtag=msgoff + 3*nspmd + ispmd
624 CALL mpi_recv(iw, nddl, mpi_integer, it_spmd(1),
625 . irqtag, spmd_comm_world, istat, ierr)