61 integer,
intent(in) :: pface
62 integer,
intent(in),
optional :: pdebug
66 character(len=80),
parameter :: name =
'desmpi_sendrecv_init' 67 integer :: ldebug,ltag,lerr,lrecvface
72 if (
present(pdebug))
then 79 lrecvface = pface+mod(pface,2)-mod(pface+1,2)
91 call mpi_check( name //
':mpi_irecv ', lerr )
96 call mpi_check( name //
':mpi_isend ', lerr )
103 integer function message_tag(lsource,ldest,lrecvface)
105 integer,
intent(in) :: lsource,ldest,lrecvface
124 integer,
intent(in) :: pface
125 integer,
intent(in),
optional :: pdebug
129 character(len=80),
parameter :: name =
'desmpi_sendrecv_wait' 130 integer :: ldebug,lerr
135 if (
present(pdebug))
then 142 call mpi_check( name //
':mpi_wait-send', lerr )
144 call mpi_check( name //
':mpi_wait-recv', lerr )
162 integer,
intent(in) :: ptype
163 integer,
intent(in),
optional :: pdebug
167 integer lroot,lidebug,lerr
168 character(len=80),
parameter :: name =
'desmpi_scatterv' 172 if (.not.
present(pdebug))
then 178 if (ptype .eq. 1)
then 185 call mpi_check( name //
':MPI_Scatterv', lerr )
203 integer,
intent(in) :: ptype
204 integer,
intent(in),
optional :: pdebug
208 integer lroot,lidebug,lerr
209 character(len=80),
parameter :: name =
'des_gather' 213 if (.not.
present(pdebug))
then 225 call mpi_check( name //
':MPI_Gatherv', lerr )
243 double precision,
dimension(:) :: parray
247 integer :: lcurpar,lparcount,lcount
253 do lcurpar = 1, max_pip
254 if (lparcount.gt.pip)
exit 255 if (is_nonexistent(lcurpar)) cycle
256 lparcount = lparcount +1
257 if(is_ghost(lcurpar) .or. is_entering_ghost(lcurpar) .or. is_exiting_ghost
276 logical,
dimension(:) :: parray
280 integer :: lcurpar,lparcount,lcount
286 do lcurpar = 1, max_pip
287 if (lparcount.gt.pip)
exit 288 if (is_nonexistent(lcurpar)) cycle
289 lparcount = lparcount +1
290 if(is_ghost(lcurpar) .or. is_entering_ghost(lcurpar) .or. is_exiting_ghost
292 if(parray(lcurpar))
then 317 integer,
dimension(:) :: parray
318 logical,
optional :: ploc2glb
322 integer :: lcurpar,lparcount,lcount
326 if (
present(ploc2glb))
then 335 do lcurpar = 1, max_pip
336 if (lparcount.gt.pip)
exit 337 if (is_nonexistent(lcurpar)) cycle
338 lparcount = lparcount +1
339 if(is_ghost(lcurpar) .or. is_entering_ghost(lcurpar) .or. is_exiting_ghost
341 if(parray(lcurpar).gt.0)
then 342 iprocbuf(lcount) = iglobal_id(parray(lcurpar))
348 do lcurpar = 1, max_pip
349 if (lparcount.gt.pip)
exit 350 if (is_nonexistent(lcurpar)) cycle
351 lparcount = lparcount +1
352 if(is_ghost(lcurpar) .or. is_entering_ghost(lcurpar) .or. is_exiting_ghost
subroutine desmpi_scatterv(ptype, pdebug)
integer, dimension(:), allocatable igathercnts
subroutine des_gather_i(parray, ploc2glb)
subroutine desmpi_sendrecv_init(pface, pdebug)
double precision, dimension(:), allocatable dprocbuf
subroutine desmpi_sendrecv_wait(pface, pdebug)
subroutine des_mpi_wait(preq, perr)
subroutine desmpi_gatherv(ptype, pdebug)
subroutine des_gather_d(parray)
integer, dimension(:), allocatable irootbuf
type(array), dimension(:), allocatable dsendbuf
integer, dimension(:), allocatable isendreq
type(array), dimension(:), allocatable drecvbuf
integer, dimension(:), allocatable iprocbuf
integer function message_tag(lsource, ldest, lrecvface)
subroutine mpi_check(msg, ierr)
integer, dimension(:), allocatable idispls
integer, dimension(:), allocatable ineighproc
integer, dimension(:), allocatable isendcnt
double precision, dimension(:), allocatable drootbuf
integer, dimension(:), allocatable irecvreq
integer, dimension(:), allocatable iscattercnts
subroutine des_gather_l(parray)