Branch data Line data Source code
1 : : !{\src2tex{textfont=tt}}
2 : : !!****f* ABINIT/xmpi_max_int0d_i4b
3 : : !! NAME
4 : : !! xmpi_max_int0d_i4b
5 : : !!
6 : : !! FUNCTION
7 : : !! This module contains functions that calls MPI routine,
8 : : !! if we compile the code using the MPI CPP flags.
9 : : !! xmpi_max is the generic function.
10 : : !!
11 : : !! COPYRIGHT
12 : : !! Copyright (C) 2001-2026 ABINIT group (AR,XG,MB)
13 : : !! This file is distributed under the terms of the
14 : : !! GNU General Public License, see ~ABINIT/COPYING
15 : : !! or http://www.gnu.org/copyleft/gpl.txt .
16 : : !!
17 : : !! SOURCE
18 : :
19 : 8548 : subroutine xmpi_max_int0d_i4b(xval,xmax,comm,ierr)
20 : :
21 : : !Arguments-------------------------
22 : : integer ,intent(in) :: xval
23 : : integer, intent(out) :: xmax
24 : : integer ,intent(in) :: comm
25 : : integer ,intent(out) :: ierr
26 : :
27 : : !Local variables-------------------
28 : : #if defined HAVE_MPI
29 : : integer :: arr_xmax(1),arr_xval(1)
30 : : #endif
31 : : ! *************************************************************************
32 : :
33 : 8548 : ierr=0
34 : : #if defined HAVE_MPI
35 [ + + ]: 8548 : if (comm /= MPI_COMM_SELF .and. comm /= MPI_COMM_NULL) then
36 : 7151 : arr_xval(1) = xval
37 : 7151 : call MPI_ALLREDUCE(arr_xval,arr_xmax,1,MPI_INTEGER,MPI_MAX,comm,ierr)
38 : 7151 : xmax=arr_xmax(1)
39 : : else
40 : : #endif
41 : 1397 : xmax=xval
42 : : #if defined HAVE_MPI
43 : : end if
44 : : #endif
45 : :
46 : 8548 : end subroutine xmpi_max_int0d_i4b
47 : : !!***
48 : :
49 : :
50 : : !!****f* ABINIT/xmpi_max_int0d_i8b
51 : : !! NAME
52 : : !! xmpi_max_int0d_i8b
53 : : !!
54 : : !! FUNCTION
55 : : !!
56 : : !! SOURCE
57 : :
58 : 0 : subroutine xmpi_max_int0d_i8b(xval,xmax,comm,ierr)
59 : :
60 : : !Arguments-------------------------
61 : : integer(i8b) ,intent(in) :: xval
62 : : integer(i8b), intent(out) :: xmax
63 : : integer ,intent(in) :: comm
64 : : integer ,intent(out) :: ierr
65 : :
66 : : !Local variables-------------------
67 : : #if defined HAVE_MPI
68 : : integer(i8b) :: arr_xmax(1),arr_xval(1)
69 : : #endif
70 : : ! *************************************************************************
71 : :
72 : 0 : ierr=0
73 : : #if defined HAVE_MPI
74 [ # # ]: 0 : if (comm /= MPI_COMM_SELF .and. comm /= MPI_COMM_NULL) then
75 : 0 : arr_xval(1) = xval
76 : 0 : call MPI_ALLREDUCE(arr_xval,arr_xmax,1,MPI_INTEGER8,MPI_MAX,comm,ierr)
77 : 0 : xmax=arr_xmax(1)
78 : : else
79 : : #endif
80 : 0 : xmax=xval
81 : : #if defined HAVE_MPI
82 : : end if
83 : : #endif
84 : :
85 : 0 : end subroutine xmpi_max_int0d_i8b
86 : : !!***
87 : :
88 : : !!****f* ABINIT/xmpi_max_int
89 : : !! NAME
90 : : !! xmpi_max_int
91 : : !!
92 : : !! SOURCE
93 : :
94 [ - + - + ]: 189 : subroutine xmpi_max_int(xval,xmax,comm,ierr)
95 : :
96 : : !Arguments-------------------------
97 : : integer, DEV_CONTARRD intent(in) :: xval(:)
98 : : integer, DEV_CONTARRD intent(out):: xmax(:)
99 : : integer ,intent(in) :: comm
100 : : integer ,intent(out) :: ierr
101 : :
102 : : !Local variables-------------------
103 : : integer :: s1
104 : : ! *************************************************************************
105 : :
106 : 189 : ierr=0
107 : 189 : s1 =SIZE(xval)
108 : : #if defined HAVE_MPI
109 [ - + ]: 189 : if (comm /= MPI_COMM_SELF .and. comm /= MPI_COMM_NULL) then
110 [ - + - + ]: 189 : call MPI_ALLREDUCE(xval,xmax,s1,MPI_INTEGER,MPI_MAX,comm,ierr)
111 : : else
112 : : #endif
113 [ # # ]: 0 : xmax=xval
114 : : #if defined HAVE_MPI
115 : : end if
116 : : #endif
117 : :
118 : 189 : end subroutine xmpi_max_int
119 : : !!***
120 : :
121 : : !!****f* ABINIT/xmpi_max_dpv
122 : : !! NAME
123 : : !! xmpi_max_dpv
124 : : !!
125 : : !! FUNCTION
126 : : !! Combines values from all processes and distribute
127 : : !! the result back to all processes.
128 : : !! Target: scalar double precisions.
129 : : !!
130 : : !! INPUTS
131 : : !! comm= MPI communicator
132 : : !!
133 : : !! OUTPUT
134 : : !! ierr= exit status, a non-zero value meaning there is an error
135 : : !!
136 : : !! SIDE EFFECTS
137 : : !! xval= buffer array
138 : : !! xmax= number of elements in send buffer
139 : : !!
140 : : !! SOURCE
141 : :
142 : 24077 : subroutine xmpi_max_dpv(xval, xmax, comm, ierr)
143 : :
144 : : !Arguments-------------------------
145 : : real(dp),intent(in) :: xval
146 : : real(dp),intent(out) :: xmax
147 : : integer ,intent(in) :: comm
148 : : integer ,intent(out) :: ierr
149 : :
150 : : !Local variables-------------------
151 : : #if defined HAVE_MPI
152 : : real(dp) :: arr_xmax(1),arr_xval(1)
153 : : #endif
154 : : ! *************************************************************************
155 : :
156 : 24077 : ierr=0
157 : : #if defined HAVE_MPI
158 [ + + ]: 24077 : if (comm /= MPI_COMM_SELF .and. comm /= MPI_COMM_NULL) then
159 : 19851 : arr_xval(1) = xval
160 : 19851 : call MPI_ALLREDUCE(arr_xval,arr_xmax,1,MPI_DOUBLE_PRECISION,MPI_MAX,comm,ierr)
161 : 19851 : xmax=arr_xmax(1)
162 : : else
163 : : #endif
164 : 4226 : xmax=xval
165 : : #if defined HAVE_MPI
166 : : end if
167 : : #endif
168 : :
169 : 24077 : end subroutine xmpi_max_dpv
170 : : !!***
171 : :
172 : : !!****f* ABINIT/xmpi_max_int0d_ip
173 : : !! NAME
174 : : !! xmpi_max_int0d_ip
175 : : !!
176 : : !! FUNCTION
177 : : !! Combines values from all processes and distribute
178 : : !! the result back to all processes.
179 : : !! Target: scalar integer. In place operation
180 : : !!
181 : : !! INPUTS
182 : : !! comm= MPI communicator
183 : : !!
184 : : !! OUTPUT
185 : : !! ierr= exit status, a non-zero value meaning there is an error
186 : : !!
187 : : !! SIDE EFFECTS
188 : : !! xval=
189 : : !! in input: the value on the local processor
190 : : !! in output: the maximum inside the given communicator.
191 : : !!
192 : : !! SOURCE
193 : :
194 : 0 : subroutine xmpi_max_int0d_ip(xval,comm,ierr)
195 : :
196 : : !Arguments-------------------------
197 : : integer ,intent(inout) :: xval
198 : : integer ,intent(in) :: comm
199 : : integer ,intent(out) :: ierr
200 : :
201 : : !Local variables-------------------
202 : : #if defined HAVE_MPI
203 : : integer :: arr_xmax(1),arr_xval(1)
204 : : #endif
205 : : ! *************************************************************************
206 : :
207 : 0 : ierr=0
208 : : #if defined HAVE_MPI
209 [ # # ]: 0 : if (comm /= MPI_COMM_SELF .and. comm /= MPI_COMM_NULL) then
210 : 0 : arr_xval(1) = xval
211 : 0 : call MPI_ALLREDUCE(arr_xval,arr_xmax,1,MPI_INTEGER,MPI_MAX,comm,ierr)
212 : 0 : xval = arr_xmax(1)
213 : : end if
214 : : #endif
215 : :
216 : 0 : end subroutine xmpi_max_int0d_ip
217 : : !!***
218 : :
219 : : !!****f* ABINIT/xmpi_max_dp0d_ip
220 : : !! NAME
221 : : !! xmpi_max_dp0d_ip
222 : : !!
223 : : !! FUNCTION
224 : : !! Combines values from all processes and distribute
225 : : !! the result back to all processes.
226 : : !! Target: scalar double precisions. In place operation
227 : : !!
228 : : !! INPUTS
229 : : !! comm= MPI communicator
230 : : !!
231 : : !! OUTPUT
232 : : !! ierr= exit status, a non-zero value meaning there is an error
233 : : !!
234 : : !! SIDE EFFECTS
235 : : !! xval=
236 : : !! in input: the value on the local processor
237 : : !! in output: the maximum inside the given communicator.
238 : : !!
239 : : !! SOURCE
240 : :
241 : 33612 : subroutine xmpi_max_dp0d_ip(xval,comm,ierr)
242 : :
243 : : !Arguments-------------------------
244 : : real(dp),intent(inout) :: xval
245 : : integer ,intent(in) :: comm
246 : : integer ,intent(out) :: ierr
247 : :
248 : : !Local variables-------------------
249 : : #if defined HAVE_MPI
250 : : real(dp) :: arr_xmax(1),arr_xval(1)
251 : : #endif
252 : : ! *************************************************************************
253 : :
254 : 33612 : ierr=0
255 : : #if defined HAVE_MPI
256 [ + + ]: 33612 : if (comm /= MPI_COMM_SELF .and. comm /= MPI_COMM_NULL) then
257 : 33130 : arr_xval(1) = xval
258 : 33130 : call MPI_ALLREDUCE(arr_xval,arr_xmax,1,MPI_DOUBLE_PRECISION,MPI_MAX,comm,ierr)
259 : 33130 : xval = arr_xmax(1)
260 : : end if
261 : : #endif
262 : :
263 : 33612 : end subroutine xmpi_max_dp0d_ip
264 : : !!***
265 : :
266 : : !!****f* ABINIT/xmpi_max_dp1d_ip
267 : : !! NAME
268 : : !! xmpi_max_dp1d_ip
269 : : !!
270 : : !! SOURCE
271 : :
272 [ # # ]: 0 : subroutine xmpi_max_dp1d_ip(xval, comm, ierr)
273 : :
274 : : !Arguments-------------------------
275 : : real(dp),intent(inout) :: xval(:)
276 : : integer ,intent(in) :: comm
277 : : integer ,intent(out) :: ierr
278 : :
279 : : !Local variables-------------------
280 : : #if defined HAVE_MPI
281 : 0 : real(dp) :: arr_xval(size(xval))
282 : : #endif
283 : : ! *************************************************************************
284 : :
285 : 0 : ierr=0
286 : : #if defined HAVE_MPI
287 [ # # ]: 0 : if (comm /= MPI_COMM_SELF .and. comm /= MPI_COMM_NULL) then
288 [ # # ]: 0 : arr_xval = xval
289 [ # # ]: 0 : call MPI_ALLREDUCE(arr_xval,xval,size(xval),MPI_DOUBLE_PRECISION,MPI_MAX,comm,ierr)
290 : : end if
291 : : #endif
292 : :
293 : 0 : end subroutine xmpi_max_dp1d_ip
294 : : !!***
295 : :
296 : : !!****f* ABINIT/xmpi_max_int1d_ip
297 : : !! NAME
298 : : !! xmpi_max_int1d_ip
299 : : !!
300 : : !! FUNCTION
301 : : !! Combines values from all processes and distribute
302 : : !! the result back to all processes.
303 : : !! Target: 1d integer vector. In place operation
304 : : !!
305 : : !! INPUTS
306 : : !! comm= MPI communicator
307 : : !!
308 : : !! SIDE EFFECTS
309 : : !! xval=
310 : : !! in input: the value on the local processor
311 : : !! in output: the maximum inside the given communicator.
312 : : !!
313 : : !! SOURCE
314 : :
315 [ # # ]: 0 : subroutine xmpi_max_int1d_ip(xval, comm, ierr)
316 : :
317 : : !Arguments-------------------------
318 : : integer, intent(inout) :: xval(:)
319 : : integer ,intent(in) :: comm
320 : : integer ,intent(out) :: ierr
321 : :
322 : : !Local variables-------------------
323 : : #if defined HAVE_MPI
324 : 0 : integer :: xmax(size(xval))
325 : : #endif
326 : : ! *************************************************************************
327 : :
328 : 0 : ierr=0
329 : : #if defined HAVE_MPI
330 [ # # ]: 0 : if (comm /= MPI_COMM_SELF .and. comm /= MPI_COMM_NULL) then
331 [ # # ]: 0 : call MPI_ALLREDUCE(xval,xmax,size(xval),MPI_INTEGER,MPI_MAX,comm,ierr)
332 [ # # ]: 0 : xval = xmax
333 : : end if
334 : : #endif
335 : :
336 : 0 : end subroutine xmpi_max_int1d_ip
337 : : !!***
|