Branch data Line data Source code
1 : : !{\src2tex{textfont=tt}}
2 : : !!****f* ABINIT/xmpi_ialltoallv_dp2d
3 : : !! NAME
4 : : !! xmpi_ialltoallv_dp2d
5 : : !!
6 : : !! FUNCTION
7 : : !! This module contains functions calling the non-blocking MPI routine IALLTOALLV
8 : : !! xmpi_ialltoallv is the generic function.
9 : : !!
10 : : !! COPYRIGHT
11 : : !! Copyright (C) 2001-2026 ABINIT group (MG)
12 : : !! This file is distributed under the terms of the
13 : : !! GNU General Public License, see ~ABINIT/COPYING
14 : : !! or http://www.gnu.org/copyleft/gpl.txt .
15 : : !!
16 : : !! INPUTS
17 : : !! xval= buffer array
18 : : !! sendcnts= number of sent elements
19 : : !! sdispls= postions of values sent by the processor
20 : : !! rdispls= positions of values received by the processor
21 : : !! recvcnts= number of received elements
22 : : !! comm= MPI communicator
23 : : !!
24 : : !! OUTPUT
25 : : !! request= MPI request
26 : : !!
27 : : !! SIDE EFFECTS
28 : : !! recvbuf= received buffer
29 : : !!
30 : : !! SOURCE
31 : :
32 [ # # # # : 0 : subroutine xmpi_ialltoallv_dp2d(xval,sendcnts,sdispls,recvbuf,recvcnts,rdispls,comm,request)
# # # # #
# # # ]
33 : :
34 : : !Arguments-------------------------
35 : : real(dp) ABI_ASYNC, intent(in) :: xval(:,:)
36 : : real(dp) ABI_ASYNC, intent(inout) :: recvbuf(:,:)
37 : : integer ABI_ASYNC, intent(in) :: sendcnts(:),sdispls(:),rdispls(:),recvcnts(:)
38 : : integer ,intent(in) :: comm
39 : : integer ,intent(out) :: request
40 : :
41 : : !Local variables-------------------
42 : : integer :: ierr
43 : :
44 : : ! *********************************************************************
45 : :
46 : : #ifdef HAVE_MPI_IALLTOALLV
47 [ # # ]: 0 : if (comm /= MPI_COMM_SELF .and. comm /= MPI_COMM_NULL) then
48 : : call MPI_IALLTOALLV(xval,sendcnts,sdispls,MPI_DOUBLE_PRECISION,recvbuf,&
49 [ # # # # : 0 : recvcnts,rdispls,MPI_DOUBLE_PRECISION,comm,request,ierr)
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # #
# ]
50 : 0 : xmpi_count_requests = xmpi_count_requests + 1
51 : 0 : return
52 : : end if
53 : : #endif
54 : :
55 : : ! Call the blocking version and return null request.
56 : 0 : call xmpi_alltoallv(xval,sendcnts,sdispls,recvbuf,recvcnts,rdispls,comm,ierr)
57 : 0 : request = xmpi_request_null
58 : :
59 : : end subroutine xmpi_ialltoallv_dp2d
60 : : !!***
61 : :
62 : : !!****f* ABINIT/xmpi_ialltoallv_int2d
63 : : !! NAME
64 : : !! xmpi_ialltoallv_int2d
65 : : !!
66 : : !! FUNCTION
67 : : !! Sends data from all to all processes.
68 : : !! Target: two-dimensional integer arrays.
69 : : !!
70 : : !! SOURCE
71 : :
72 [ # # # # : 0 : subroutine xmpi_ialltoallv_int2d(xval,sendcnts,sdispls,recvbuf,recvcnts,rdispls,comm,request)
# # # # #
# # # ]
73 : :
74 : : !Arguments-------------------------
75 : : integer ABI_ASYNC, intent(in) :: xval(:,:)
76 : : integer ABI_ASYNC, intent(inout) :: recvbuf(:,:)
77 : : integer ABI_ASYNC, intent(in) :: sendcnts(:),sdispls(:),rdispls(:),recvcnts(:)
78 : : integer,intent(in) :: comm
79 : : integer,intent(out) :: request
80 : :
81 : : !Local variables-------------------
82 : : integer :: ierr
83 : :
84 : : ! *********************************************************************
85 : :
86 : : #ifdef HAVE_MPI_IALLTOALLV
87 [ # # ]: 0 : if (comm /= MPI_COMM_SELF .and. comm /= MPI_COMM_NULL) then
88 : : call MPI_IALLTOALLV(xval,sendcnts,sdispls,MPI_INTEGER,recvbuf,&
89 [ # # # # : 0 : recvcnts,rdispls,MPI_INTEGER,comm,request,ierr)
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # #
# ]
90 : 0 : xmpi_count_requests = xmpi_count_requests + 1
91 : 0 : return
92 : : end if
93 : : #endif
94 : :
95 : : ! Call the blocking version and return null request.
96 : 0 : call xmpi_alltoallv(xval,sendcnts,sdispls,recvbuf,recvcnts,rdispls,comm,ierr)
97 : 0 : request = xmpi_request_null
98 : :
99 : : end subroutine xmpi_ialltoallv_int2d
100 : : !!***
101 : :
102 : : !!****f* ABINIT/xmpi_ialltoallv_dp1d2
103 : : !! NAME
104 : : !! xmpi_ialltoallv_dp1d2
105 : : !!
106 : : !! FUNCTION
107 : : !! Sends data from all to all processes.
108 : : !! Target: double precision one-dimensional arrays.
109 : : !!
110 : : !! SOURCE
111 : :
112 [ # # # # : 0 : subroutine xmpi_ialltoallv_dp1d2(xval,sendcnts,sdispls,recvbuf,recvcnts,rdispls,comm,request)
# # # # #
# # # ]
113 : :
114 : : !Arguments-------------------------
115 : : real(dp) ABI_ASYNC, intent(in) :: xval(:)
116 : : real(dp) ABI_ASYNC, intent(inout) :: recvbuf(:)
117 : : integer ABI_ASYNC, intent(in) :: sendcnts(:),sdispls(:),recvcnts(:),rdispls(:)
118 : : integer,intent(in) :: comm
119 : : integer,intent(out) :: request
120 : :
121 : : !Local variables-------------------
122 : : integer :: ierr
123 : :
124 : : ! *********************************************************************
125 : :
126 : : #ifdef HAVE_MPI_IALLTOALLV
127 [ # # ]: 0 : if (comm /= MPI_COMM_SELF .and. comm /= MPI_COMM_NULL) then
128 : : call MPI_IALLTOALLV(xval,sendcnts,sdispls,MPI_DOUBLE_PRECISION,recvbuf,&
129 [ # # # # : 0 : recvcnts,rdispls,MPI_DOUBLE_PRECISION,comm,request,ierr)
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # #
# ]
130 : 0 : xmpi_count_requests = xmpi_count_requests + 1
131 : 0 : return
132 : : end if
133 : : #endif
134 : :
135 : : ! Call the blocking version and return null request.
136 : 0 : call xmpi_alltoallv(xval,sendcnts,sdispls,recvbuf,recvcnts,rdispls,comm,ierr)
137 : 0 : request = xmpi_request_null
138 : :
139 : : end subroutine xmpi_ialltoallv_dp1d2
140 : : !!***
|