15 & ( n, neibpetot,neibpe,stack_import, nod_import, &
16 & stack_export, nod_export, &
17 & ws, wr, x, solver_comm,my_rank, nb, m)
20 implicit real*8 (a-h,o-z)
22 integer(kind=kint ) ,
intent(in) :: N, m
23 integer(kind=kint ) ,
intent(in) :: NEIBPETOT
24 integer(kind=kint ),
pointer :: NEIBPE (:)
25 integer(kind=kint ),
pointer :: STACK_IMPORT(:)
26 integer(kind=kint ),
pointer :: NOD_IMPORT (:)
27 integer(kind=kint ),
pointer :: STACK_EXPORT(:)
28 integer(kind=kint ),
pointer :: NOD_EXPORT (:)
29 real (kind=
kreal),
dimension(NB*m),
intent(inout):: ws
30 real (kind=
kreal),
dimension(NB*m),
intent(inout):: wr
31 real (kind=
kreal),
dimension(NB*N),
intent(inout):: x
32 integer(kind=kint ) ,
intent(in) ::SOLVER_COMM
33 integer(kind=kint ) ,
intent(in) :: my_rank
35 integer(kind=kint ),
dimension(:,:),
save,
allocatable :: sta1
36 integer(kind=kint ),
dimension(:,:),
save,
allocatable :: sta2
37 integer(kind=kint ),
dimension(: ),
save,
allocatable :: req1
38 integer(kind=kint ),
dimension(: ),
save,
allocatable :: req2
40 integer(kind=kint ),
save :: NFLAG
46 allocate (sta1(mpi_status_size,neibpetot))
47 allocate (sta2(mpi_status_size,neibpetot))
48 allocate (req1(neibpetot))
49 allocate (req2(neibpetot))
56 istart= stack_export(neib-1)
57 inum = stack_export(neib ) - istart
59 do k= istart+1, istart+inum
60 ii= nb*nod_export(k) - nb
66 call mpi_isend (ws(nb*istart+1), nb*inum,mpi_double_precision, &
67 & neibpe(neib), 0, solver_comm, req1(neib), ierr)
73 istart= stack_import(neib-1)
74 inum = stack_import(neib ) - istart
75 call mpi_irecv (wr(nb*istart+1), nb*inum, mpi_double_precision, &
76 & neibpe(neib), 0, solver_comm, req2(neib), ierr)
79 call mpi_waitall (neibpetot, req2, sta2, ierr)
82 istart= stack_import(neib-1)
83 inum = stack_import(neib ) - istart
84 do k= istart+1, istart+inum
85 ii= nb*nod_import(k) - nb
93 call mpi_waitall (neibpetot, req1, sta1, ierr)