TABLE OF CONTENTS


ABINIT/xmpi_ialltoallv_dp1d2 [ Functions ]

[ Top ] [ Functions ]

NAME

  xmpi_ialltoallv_dp1d2

FUNCTION

  Sends data from all to all processes.
  Target: double precision one-dimensional arrays.

PARENTS

CHILDREN

      mpi_ialltoallv

SOURCE

127 subroutine xmpi_ialltoallv_dp1d2(xval,sendcnts,sdispls,recvbuf,recvcnts,rdispls,comm,request)
128 
129 !Arguments-------------------------
130  real(dp) ABI_ASYNC, intent(in) :: xval(:)
131  real(dp) ABI_ASYNC, intent(inout) :: recvbuf(:)
132  integer ABI_ASYNC, intent(in) :: sendcnts(:),sdispls(:),recvcnts(:),rdispls(:)
133  integer,intent(in) :: comm
134  integer,intent(out) :: request
135 
136 !Local variables-------------------
137  integer :: ierr
138 
139 ! *********************************************************************
140 
141 #ifdef HAVE_MPI_IALLTOALLV
142  if (comm /= MPI_COMM_SELF .and. comm /= MPI_COMM_NULL) then
143    call MPI_IALLTOALLV(xval,sendcnts,sdispls,MPI_DOUBLE_PRECISION,recvbuf,&
144     recvcnts,rdispls,MPI_DOUBLE_PRECISION,comm,request,ierr)
145    xmpi_count_requests = xmpi_count_requests + 1
146    return
147  end if
148 #endif
149 
150  ! Call the blocking version and return null request.
151  call xmpi_alltoallv(xval,sendcnts,sdispls,recvbuf,recvcnts,rdispls,comm,ierr)
152  request = xmpi_request_null
153 
154 end subroutine xmpi_ialltoallv_dp1d2

ABINIT/xmpi_ialltoallv_dp2d [ Functions ]

[ Top ] [ Functions ]

NAME

  xmpi_ialltoallv_dp2d

FUNCTION

  This module contains functions calling the non-blocking MPI routine IALLTOALLV
  xmpi_ialltoallv is the generic function.

COPYRIGHT

  Copyright (C) 2001-2022 ABINIT group (MG)
  This file is distributed under the terms of the
  GNU General Public License, see ~ABINIT/COPYING
  or http://www.gnu.org/copyleft/gpl.txt .

INPUTS

  xval= buffer array
  sendcnts= number of sent elements
  sdispls= postions of values sent by the processor
  rdispls= positions of values received by the processor
  recvcnts= number of received elements
  comm= MPI communicator

OUTPUT

  request= MPI request

SIDE EFFECTS

  recvbuf= received buffer

PARENTS

CHILDREN

      mpi_ialltoallv

SOURCE

37 subroutine xmpi_ialltoallv_dp2d(xval,sendcnts,sdispls,recvbuf,recvcnts,rdispls,comm,request)
38 
39 !Arguments-------------------------
40  real(dp) ABI_ASYNC, intent(in) :: xval(:,:)
41  real(dp) ABI_ASYNC, intent(inout) :: recvbuf(:,:)
42  integer  ABI_ASYNC, intent(in) :: sendcnts(:),sdispls(:),rdispls(:),recvcnts(:)
43  integer ,intent(in) :: comm
44  integer ,intent(out) :: request
45 
46 !Local variables-------------------
47  integer :: ierr
48  
49 ! *********************************************************************
50 
51 #ifdef HAVE_MPI_IALLTOALLV
52  if (comm /= MPI_COMM_SELF .and. comm /= MPI_COMM_NULL) then
53    call MPI_IALLTOALLV(xval,sendcnts,sdispls,MPI_DOUBLE_PRECISION,recvbuf,&
54      recvcnts,rdispls,MPI_DOUBLE_PRECISION,comm,request,ierr)
55    xmpi_count_requests = xmpi_count_requests + 1
56    return
57  end if
58 #endif
59 
60  ! Call the blocking version and return null request.
61  call xmpi_alltoallv(xval,sendcnts,sdispls,recvbuf,recvcnts,rdispls,comm,ierr)
62  request = xmpi_request_null
63 
64 end subroutine xmpi_ialltoallv_dp2d

ABINIT/xmpi_ialltoallv_int2d [ Functions ]

[ Top ] [ Functions ]

NAME

  xmpi_ialltoallv_int2d

FUNCTION

  Sends data from all to all processes.
  Target: two-dimensional integer arrays.

PARENTS

CHILDREN

      mpi_ialltoallv

SOURCE

 82 subroutine xmpi_ialltoallv_int2d(xval,sendcnts,sdispls,recvbuf,recvcnts,rdispls,comm,request)
 83 
 84 !Arguments-------------------------
 85  integer ABI_ASYNC, intent(in) :: xval(:,:)
 86  integer ABI_ASYNC, intent(inout) :: recvbuf(:,:)
 87  integer ABI_ASYNC, intent(in) :: sendcnts(:),sdispls(:),rdispls(:),recvcnts(:)
 88  integer,intent(in) :: comm
 89  integer,intent(out) :: request
 90 
 91 !Local variables-------------------
 92  integer :: ierr
 93 
 94 ! *********************************************************************
 95 
 96 #ifdef HAVE_MPI_IALLTOALLV
 97  if (comm /= MPI_COMM_SELF .and. comm /= MPI_COMM_NULL) then
 98    call MPI_IALLTOALLV(xval,sendcnts,sdispls,MPI_INTEGER,recvbuf,&
 99     recvcnts,rdispls,MPI_INTEGER,comm,request,ierr)
100    xmpi_count_requests = xmpi_count_requests + 1
101    return
102  end if
103 #endif
104 
105  ! Call the blocking version and return null request.
106  call xmpi_alltoallv(xval,sendcnts,sdispls,recvbuf,recvcnts,rdispls,comm,ierr)
107  request = xmpi_request_null
108 
109 end subroutine xmpi_ialltoallv_int2d