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 : !!***
|