Octopus
mpi.F90
Go to the documentation of this file.
1!! Copyright (C) 2005-2006 Heiko Appel, Florian Lorenzen
2!!
3!! This program is free software; you can redistribute it and/or modify
4!! it under the terms of the GNU General Public License as published by
5!! the Free Software Foundation; either version 2, or (at your option)
6!! any later version.
7!!
8!! This program is distributed in the hope that it will be useful,
9!! but WITHOUT ANY WARRANTY; without even the implied warranty of
10!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11!! GNU General Public License for more details.
12!!
13!! You should have received a copy of the GNU General Public License
14!! along with this program; if not, write to the Free Software
15!! Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
16!! 02110-1301, USA.
17!!
18
19#include "global.h"
20
21module mpi_oct_m
22#ifdef HAVE_MPI
23 use mpi_f08
24#else
26#endif
27 use blacs_oct_m
28 use loct_oct_m
30 use iso_c_binding
31 use, intrinsic :: iso_fortran_env
32#ifdef HAVE_OPENMP
33 use omp_lib
34#endif
35
36
37 implicit none
38
39 ! I do not make this module private on purpose, so that the symbols defined either in
40 ! module mpi, or in mpif.h are exported
41
43 type(MPI_Comm), parameter, public :: MPI_COMM_UNDEFINED = mpi_comm(-1)
44
46 integer, parameter, private :: ROOT_PROCESS = 0
47
49 type mpi_grp_t
50 ! Components are public by default
51 type(MPI_Comm) :: comm = mpi_comm_undefined
52 integer :: size = 0
53 integer :: rank = 0
54 contains
55 ! Wrapper functions for common MPI calls
56 ! We do not check the error code in any of those wrappers because the behavior of
57 ! an application is undefined after an MPI error according to the standard. The
58 ! default is to let the application crash in such a case with an error message
59 ! from the MPI runtime.
60 procedure :: barrier => mpi_grp_barrier
61 procedure :: dmpi_grp_scatterv, zmpi_grp_scatterv, impi_grp_scatterv, lmpi_grp_scatterv, smpi_grp_scatterv, &
62 cmpi_grp_scatterv
63 generic :: scatterv => dmpi_grp_scatterv, zmpi_grp_scatterv, impi_grp_scatterv, lmpi_grp_scatterv, smpi_grp_scatterv, &
64 cmpi_grp_scatterv
65 procedure :: dmpi_grp_scatterv_i8, zmpi_grp_scatterv_i8, impi_grp_scatterv_i8, lmpi_grp_scatterv_i8, &
66 smpi_grp_scatterv_i8, cmpi_grp_scatterv_i8
67 generic :: scatterv => dmpi_grp_scatterv_i8, zmpi_grp_scatterv_i8, impi_grp_scatterv_i8, lmpi_grp_scatterv_i8, &
68 smpi_grp_scatterv_i8, cmpi_grp_scatterv_i8
69 procedure :: dmpi_grp_gatherv, zmpi_grp_gatherv, impi_grp_gatherv, lmpi_grp_gatherv, smpi_grp_gatherv, cmpi_grp_gatherv
70 generic :: gatherv => dmpi_grp_gatherv, zmpi_grp_gatherv, impi_grp_gatherv, lmpi_grp_gatherv, smpi_grp_gatherv, &
71 cmpi_grp_gatherv
72 procedure :: dmpi_grp_gatherv_2, zmpi_grp_gatherv_2, impi_grp_gatherv_2, lmpi_grp_gatherv_2
73 generic :: gatherv => dmpi_grp_gatherv_2, zmpi_grp_gatherv_2, impi_grp_gatherv_2, lmpi_grp_gatherv_2
74 procedure :: dmpi_grp_gather_0, zmpi_grp_gather_0, impi_grp_gather_0, lmpi_grp_gather_0, smpi_grp_gather_0, &
75 cmpi_grp_gather_0
76 generic :: gather => dmpi_grp_gather_0, zmpi_grp_gather_0, impi_grp_gather_0, lmpi_grp_gather_0, smpi_grp_gather_0, &
77 cmpi_grp_gather_0
78 procedure :: dmpi_grp_gatherv_i8, zmpi_grp_gatherv_i8, impi_grp_gatherv_i8, lmpi_grp_gatherv_i8, smpi_grp_gatherv_i8, &
79 cmpi_grp_gatherv_i8
80 generic :: gatherv => dmpi_grp_gatherv_i8, zmpi_grp_gatherv_i8, impi_grp_gatherv_i8, lmpi_grp_gatherv_i8, &
81 smpi_grp_gatherv_i8, cmpi_grp_gatherv_i8
82 procedure :: dmpi_grp_alltoallv, zmpi_grp_alltoallv, impi_grp_alltoallv, lmpi_grp_alltoallv, smpi_grp_alltoallv, &
83 cmpi_grp_alltoallv
84 generic :: alltoallv => dmpi_grp_alltoallv, zmpi_grp_alltoallv, impi_grp_alltoallv, lmpi_grp_alltoallv, &
85 smpi_grp_alltoallv, cmpi_grp_alltoallv
86 procedure :: dmpi_grp_alltoallv_2, zmpi_grp_alltoallv_2, impi_grp_alltoallv_2, lmpi_grp_alltoallv_2, &
87 smpi_grp_alltoallv_2, cmpi_grp_alltoallv_2
88 generic :: alltoallv => dmpi_grp_alltoallv_2, zmpi_grp_alltoallv_2, impi_grp_alltoallv_2, lmpi_grp_alltoallv_2, &
89 smpi_grp_alltoallv_2, cmpi_grp_alltoallv_2
90 procedure :: dmpi_grp_alltoallv_3, zmpi_grp_alltoallv_3, impi_grp_alltoallv_3, lmpi_grp_alltoallv_3, &
91 smpi_grp_alltoallv_3, cmpi_grp_alltoallv_3
92 generic :: alltoallv => dmpi_grp_alltoallv_3, zmpi_grp_alltoallv_3, impi_grp_alltoallv_3, lmpi_grp_alltoallv_3, &
93 smpi_grp_alltoallv_3, cmpi_grp_alltoallv_3
94 procedure :: dmpi_grp_alltoallv_i8, zmpi_grp_alltoallv_i8, impi_grp_alltoallv_i8, lmpi_grp_alltoallv_i8, &
95 smpi_grp_alltoallv_i8, cmpi_grp_alltoallv_i8
96 generic :: alltoallv => dmpi_grp_alltoallv_i8, zmpi_grp_alltoallv_i8, impi_grp_alltoallv_i8, lmpi_grp_alltoallv_i8, &
97 smpi_grp_alltoallv_i8, cmpi_grp_alltoallv_i8
98 procedure :: dmpi_grp_alltoall, zmpi_grp_alltoall, impi_grp_alltoall, lmpi_grp_alltoall, smpi_grp_alltoall, &
99 cmpi_grp_alltoall
100 generic :: alltoall => dmpi_grp_alltoall, zmpi_grp_alltoall, impi_grp_alltoall, lmpi_grp_alltoall, smpi_grp_alltoall, &
101 cmpi_grp_alltoall
102 procedure :: dmpi_grp_allgatherv, zmpi_grp_allgatherv, impi_grp_allgatherv, lmpi_grp_allgatherv, smpi_grp_allgatherv, &
103 cmpi_grp_allgatherv
104 generic :: allgatherv => dmpi_grp_allgatherv, zmpi_grp_allgatherv, impi_grp_allgatherv, lmpi_grp_allgatherv, &
105 smpi_grp_allgatherv, cmpi_grp_allgatherv
106 procedure :: dmpi_grp_allgatherv_2, zmpi_grp_allgatherv_2, impi_grp_allgatherv_2, lmpi_grp_allgatherv_2, &
107 smpi_grp_allgatherv_2, cmpi_grp_allgatherv_2
108 generic :: allgatherv => dmpi_grp_allgatherv_2, zmpi_grp_allgatherv_2, impi_grp_allgatherv_2, lmpi_grp_allgatherv_2, &
109 smpi_grp_allgatherv_2, cmpi_grp_allgatherv_2
110 procedure :: dmpi_grp_allgatherv_3, zmpi_grp_allgatherv_3, impi_grp_allgatherv_3, lmpi_grp_allgatherv_3, &
111 smpi_grp_allgatherv_3, cmpi_grp_allgatherv_3
112 generic :: allgatherv => dmpi_grp_allgatherv_3, zmpi_grp_allgatherv_3, impi_grp_allgatherv_3, lmpi_grp_allgatherv_3, &
113 smpi_grp_allgatherv_3, cmpi_grp_allgatherv_3
114 procedure :: dmpi_grp_allgatherv_3_1, zmpi_grp_allgatherv_3_1, impi_grp_allgatherv_3_1, lmpi_grp_allgatherv_3_1, &
115 smpi_grp_allgatherv_3_1, cmpi_grp_allgatherv_3_1
116 generic :: allgatherv => dmpi_grp_allgatherv_3_1, zmpi_grp_allgatherv_3_1, impi_grp_allgatherv_3_1, &
117 lmpi_grp_allgatherv_3_1, smpi_grp_allgatherv_3_1, cmpi_grp_allgatherv_3_1
118 procedure :: dmpi_grp_allgatherv_i8, zmpi_grp_allgatherv_i8, impi_grp_allgatherv_i8, lmpi_grp_allgatherv_i8, &
119 smpi_grp_allgatherv_i8, cmpi_grp_allgatherv_i8
120 generic :: allgatherv => dmpi_grp_allgatherv_i8, zmpi_grp_allgatherv_i8, impi_grp_allgatherv_i8, lmpi_grp_allgatherv_i8, &
121 smpi_grp_allgatherv_i8, cmpi_grp_allgatherv_i8
122 procedure :: dmpi_grp_allgatherv_inplace, zmpi_grp_allgatherv_inplace, &
123 impi_grp_allgatherv_inplace, lmpi_grp_allgatherv_inplace, &
124 smpi_grp_allgatherv_inplace, cmpi_grp_allgatherv_inplace
125 generic :: allgatherv_inplace => dmpi_grp_allgatherv_inplace, zmpi_grp_allgatherv_inplace, &
126 impi_grp_allgatherv_inplace, lmpi_grp_allgatherv_inplace, &
127 smpi_grp_allgatherv_inplace, cmpi_grp_allgatherv_inplace
128 procedure :: dmpi_grp_bcast, zmpi_grp_bcast, impi_grp_bcast, lmpi_grp_bcast, smpi_grp_bcast, cmpi_grp_bcast
129 generic :: bcast => dmpi_grp_bcast, zmpi_grp_bcast, impi_grp_bcast, lmpi_grp_bcast, smpi_grp_bcast, cmpi_grp_bcast
130 procedure :: dmpi_grp_bcast_0, zmpi_grp_bcast_0, impi_grp_bcast_0, lmpi_grp_bcast_0, smpi_grp_bcast_0, cmpi_grp_bcast_0
131 generic :: bcast => dmpi_grp_bcast_0, zmpi_grp_bcast_0, impi_grp_bcast_0, lmpi_grp_bcast_0, smpi_grp_bcast_0, &
132 cmpi_grp_bcast_0
133 procedure :: dmpi_grp_bcast_2, zmpi_grp_bcast_2, impi_grp_bcast_2, lmpi_grp_bcast_2, smpi_grp_bcast_2, cmpi_grp_bcast_2
134 generic :: bcast => dmpi_grp_bcast_2, zmpi_grp_bcast_2, impi_grp_bcast_2, lmpi_grp_bcast_2, smpi_grp_bcast_2, &
135 cmpi_grp_bcast_2
140 generic :: bcast => chmpi_grp_bcast_0, lompi_grp_bcast_0
142 cmpi_grp_bcast_0_l
144 cmpi_grp_bcast_0_l
161 procedure :: lompi_grp_allreduce_0
162 generic :: allreduce => lompi_grp_allreduce_0
170 generic :: allreduce_inplace => lompi_grp_allreduce_inplace_0
178 generic :: allreduce_inplace => dmpi_grp_allreduce_inplace_2, zmpi_grp_allreduce_inplace_2, &
197 procedure :: lompi_grp_recv_0
198 generic :: recv => lompi_grp_recv_0
207 procedure :: lompi_grp_send_0
208 generic :: send => lompi_grp_send_0
239 procedure :: mpi_grp_wait, mpi_grp_waitall
240 generic :: wait => mpi_grp_wait, mpi_grp_waitall
241 procedure :: abort => mpi_grp_abort
242 procedure :: is_root => mpi_grp_is_root
243 end type mpi_grp_t
245 type(mpi_grp_t), public :: mpi_world
247 private :: not_in_openmp
249
251 abstract interface
253 logical :: omp_region_func
254 end function
255 end interface
257#if defined(HAVE_MPI) && defined(HAVE_OPENMP)
260 integer, parameter :: octopus_mpi_thread_level = mpi_thread_funneled
261 procedure(omp_region_func), pointer :: mpi_call_is_thread_safe => mpi_call_is_thread_funneled_safe
262#elif defined(HAVE_MPI)
264 integer, parameter :: octopus_mpi_thread_level = mpi_thread_single
266#else
267
269#endif
270
272contains
273
277 subroutine mpi_init_comm(comm)
278 type(mpi_comm), intent(out) :: comm
279#if defined(HAVE_MPI)
280#if defined(HAVE_OPENMP)
281 integer :: provided
283 call mpi_init_thread(octopus_mpi_thread_level, provided)
285#else
286 call mpi_init()
287#endif
288 comm = mpi_comm_world
289#else
290 comm = mpi_comm_undefined
291#endif
293 end subroutine mpi_init_comm
298 subroutine check_threading_support(comm)
299 type(mpi_comm), intent(in) :: comm
301#if defined(HAVE_MPI) && defined(HAVE_OPENMP)
302 integer :: provided, ierr, rank
304 call mpi_query_thread(provided)
305 if (provided < octopus_mpi_thread_level) then
306 call mpi_comm_rank(comm, rank)
307 if (rank == 0) write(*, '(a)') 'MPI library threading support is less than required by Octopus'
308 call mpi_abort(comm, 1, ierr)
309 end if
310#else
311 return
312#endif
314 end subroutine check_threading_support
316
318 subroutine blacs_init()
319#if defined(HAVE_MPI)
320#ifdef HAVE_SCALAPACK
321 integer :: iam, nprocs
322 integer :: blacs_default_system_context
324 ! Determine my process number and the number of processes in machine
325 call blacs_pinfo(iam, nprocs)
327 ! If machine needs additional set up, do it now
328 if (nprocs < 1) then
329 call blacs_setup(iam, mpi_world%size)
330 end if
331
332 ! blacs_gridinit() or blacs_gridmap() must be called, else
333 ! blacs_exit() triggers an error with openmpi:
334 ! *** An error occurred in MPI_Type_free
335 ! *** MPI_ERR_TYPE: invalid datatype
336 call blacs_get(0, 0, blacs_default_system_context)
337 call blacs_gridinit(blacs_default_system_context, 'R', mpi_world%size, 1)
338 call blacs_gridexit(blacs_default_system_context)
339#endif
340#endif
341 end subroutine blacs_init
342
343
345 subroutine mpi_mod_end()
346
347#ifdef HAVE_SCALAPACK
348 if (mpi_world%comm /= mpi_comm_undefined) call blacs_exit(1)
349#endif
350
352
353#if defined(HAVE_MPI)
354 if (mpi_world%comm /= mpi_comm_undefined) call mpi_finalize()
355#endif
356
357 end subroutine mpi_mod_end
358
359
364 subroutine mpi_grp_init(grp, comm)
365 type(mpi_grp_t), intent(out) :: grp
366 type(mpi_comm), intent(in) :: comm
367
368 grp%comm = comm
369#if defined(HAVE_MPI)
370 if (grp%comm == mpi_comm_null) grp%comm = mpi_comm_undefined
371#endif
372
373 if (grp%comm == mpi_comm_undefined) then
374 grp%rank = 0
375 grp%size = 1
376#if defined(HAVE_MPI)
377 else
378 call mpi_comm_rank(grp%comm, grp%rank)
379
380 call mpi_comm_size(grp%comm, grp%size)
381#endif
382 end if
383
384 end subroutine mpi_grp_init
385
386
388 logical &
389#ifndef HAVE_OPENMP
390 pure &
391#endif
392 function not_in_openmp()
393
394#ifdef HAVE_OPENMP
395 not_in_openmp = .not. omp_in_parallel()
396#else
398#endif
399
400 end function not_in_openmp
401
402
405#if defined(HAVE_MPI) && defined(HAVE_OPENMP)
406 logical function mpi_call_is_thread_funneled_safe()
407 mpi_call_is_thread_funneled_safe = &
408 not_in_openmp() .or. (omp_get_thread_num() == 0)
409 end function mpi_call_is_thread_funneled_safe
410#endif
411
412
413 subroutine mpi_grp_copy(mpi_grp_out, mpi_grp_in)
414 type(mpi_grp_t), intent(out) :: mpi_grp_out
415 type(mpi_grp_t), intent(in) :: mpi_grp_in
416
417 mpi_grp_out%comm = mpi_grp_in%comm
418 mpi_grp_out%size = mpi_grp_in%size
419 mpi_grp_out%rank = mpi_grp_in%rank
420 end subroutine mpi_grp_copy
421
422 ! ---------------------------------------------------------
423 subroutine mpi_grp_duplicate(mpi_grp_out, mpi_grp_in)
424 type(mpi_grp_t), intent(out) :: mpi_grp_out
425 type(mpi_grp_t), intent(in) :: mpi_grp_in
426
427#if defined(HAVE_MPI)
428 call mpi_comm_dup(mpi_grp_in%comm, mpi_grp_out%comm)
429 call mpi_comm_rank(mpi_grp_out%comm, mpi_grp_out%rank)
430 call mpi_comm_size(mpi_grp_out%comm, mpi_grp_out%size)
431#else
432 call mpi_grp_copy(mpi_grp_out, mpi_grp_in)
433#endif
434 end subroutine mpi_grp_duplicate
435
437 logical function mpi_grp_is_root(grp)
438 class(mpi_grp_t), intent(in) :: grp
439
440 mpi_grp_is_root = (grp%rank == root_process)
441 end function mpi_grp_is_root
442
443 ! ---------------------------------------------------------
444 subroutine mpi_grp_barrier(mpi_grp)
445 class(mpi_grp_t), intent(in) :: mpi_grp
446
447 if (mpi_grp%comm == mpi_comm_undefined) return
448#if defined(HAVE_MPI)
450
451 call mpi_debug_in(mpi_grp%comm, c_mpi_barrier)
452 call mpi_barrier(mpi_grp%comm)
453 call mpi_debug_out(mpi_grp%comm, c_mpi_barrier)
454#endif
455 end subroutine mpi_grp_barrier
456
457 ! ---------------------------------------------------------
458 subroutine chmpi_grp_bcast_0(mpi_grp, buf, cnt, sendtype, root)
459 class(mpi_grp_t), intent(in) :: mpi_grp
460 character(len=*), intent(inout) :: buf
461 integer, intent(in) :: cnt
462 type(mpi_datatype), intent(in) :: sendtype
463 integer, intent(in) :: root
464
465#if defined(HAVE_MPI)
467
468 call mpi_debug_in(mpi_grp%comm, c_mpi_bcast)
469 if (mpi_grp%comm /= mpi_comm_undefined) then
470 call mpi_bcast(buf, cnt, sendtype, root, mpi_grp%comm)
471 end if
472 call mpi_debug_out(mpi_grp%comm, c_mpi_bcast)
473#endif
474 end subroutine chmpi_grp_bcast_0
475
476 ! ---------------------------------------------------------
477 subroutine lompi_grp_bcast_0(mpi_grp, buf, cnt, sendtype, root)
478 class(mpi_grp_t), intent(in) :: mpi_grp
479 logical, intent(inout) :: buf
480 integer, intent(in) :: cnt
481 type(mpi_datatype), intent(in) :: sendtype
482 integer, intent(in) :: root
483
484#if defined(HAVE_MPI)
486
487 call mpi_debug_in(mpi_grp%comm, c_mpi_bcast)
488 if (mpi_grp%comm /= mpi_comm_undefined) then
489 call mpi_bcast(buf, cnt, sendtype, root, mpi_grp%comm)
490 end if
491 call mpi_debug_out(mpi_grp%comm, c_mpi_bcast)
492#endif
493 end subroutine lompi_grp_bcast_0
494
495 ! ---------------------------------------------------------
496 ! copy routine for serial case
497 subroutine lompi_grp_copy_0(sendbuf, recvbuf, count)
498 use iso_c_binding
499 logical, target, intent(in) :: sendbuf
500 logical, target, intent(out) :: recvbuf
501 integer, intent(in) :: count
502 integer :: ii
503 logical, pointer :: send(:), recv(:)
504
505 call c_f_pointer(c_loc(sendbuf), send, [count])
506 call c_f_pointer(c_loc(recvbuf), recv, [count])
507 do ii = 1, count
508 recv(ii) = send(ii)
509 end do
510 end subroutine lompi_grp_copy_0
511
512 ! ---------------------------------------------------------
513 subroutine lompi_grp_allreduce_0(mpi_grp, sendbuf, recvbuf, count, datatype, op)
514 class(mpi_grp_t), intent(in) :: mpi_grp
515 logical, intent(in) :: sendbuf
516 logical, intent(out) :: recvbuf
517 integer, intent(in) :: count
518 type(mpi_datatype), intent(in):: datatype
519 type(mpi_op), intent(in) :: op
520
521#if defined(HAVE_MPI)
523
524 call mpi_debug_in(mpi_grp%comm, c_mpi_allreduce)
525 if (mpi_grp%comm /= mpi_comm_undefined) then
526 call mpi_allreduce(sendbuf, recvbuf, count, datatype, op, &
527 mpi_grp%comm)
528 else
529 call lompi_grp_copy_0(sendbuf, recvbuf, count)
530 end if
531 call mpi_debug_out(mpi_grp%comm, c_mpi_allreduce)
532#else
533 call lompi_grp_copy_0(sendbuf, recvbuf, count)
534#endif
535 end subroutine lompi_grp_allreduce_0
536
537 ! ---------------------------------------------------------
538 subroutine lompi_grp_allreduce_inplace_0(mpi_grp, recvbuf, count, datatype, op)
539 class(mpi_grp_t), intent(in) :: mpi_grp
540 logical, intent(inout) :: recvbuf
541 integer, intent(in) :: count
542 type(mpi_datatype), intent(in) :: datatype
543 type(mpi_op), intent(in) :: op
544
545#if defined(HAVE_MPI)
547
548 call mpi_debug_in(mpi_grp%comm, c_mpi_allreduce)
549 if (mpi_grp%comm /= mpi_comm_undefined) then
550 call mpi_allreduce(mpi_in_place, recvbuf, count, datatype, op, &
551 mpi_grp%comm)
552 end if
553 call mpi_debug_out(mpi_grp%comm, c_mpi_allreduce)
554#endif
555 end subroutine lompi_grp_allreduce_inplace_0
556
557 ! ---------------------------------------------------------
558 subroutine lompi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
559 class(mpi_grp_t), intent(in) :: mpi_grp
560 logical, intent(out) :: recvbuf
561 integer, intent(in) :: recvcount
562 type(mpi_datatype),intent(in) :: recvtype
563 integer, intent(in) :: source
564 integer, optional, intent(in) :: tag
565
566 integer :: tag_
567
568 tag_ = 0
569 if (present(tag)) tag_ = tag
570 if (mpi_grp%comm == mpi_comm_undefined) return
571#if defined(HAVE_MPI)
573
574 call mpi_debug_in(mpi_grp%comm, c_mpi_recv)
575 call mpi_recv(recvbuf, recvcount, recvtype, source, tag_, mpi_grp%comm, mpi_status_ignore)
576 call mpi_debug_out(mpi_grp%comm, c_mpi_recv)
577#endif
578 end subroutine lompi_grp_recv_0
579
580 ! ---------------------------------------------------------
581 subroutine lompi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
582 class(mpi_grp_t), intent(in) :: mpi_grp
583 logical, intent(in) :: sendbuf
584 integer, intent(in) :: sendcount
585 type(mpi_datatype),intent(in) :: sendtype
586 integer, intent(in) :: dest
587 integer, optional, intent(in) :: tag
588
589 integer :: tag_
590
591 tag_ = 0
592 if (present(tag)) tag_ = tag
593 if (mpi_grp%comm == mpi_comm_undefined) return
594#if defined(HAVE_MPI)
596
597 call mpi_debug_in(mpi_grp%comm, c_mpi_send)
598 call mpi_send(sendbuf, sendcount, sendtype, dest, tag_, mpi_grp%comm)
599 call mpi_debug_out(mpi_grp%comm, c_mpi_send)
600#endif
601 end subroutine lompi_grp_send_0
602
603 ! ---------------------------------------------------------
604 subroutine mpi_grp_wait(mpi_grp, request)
605 class(mpi_grp_t), intent(in) :: mpi_grp
606 type(mpi_request), intent(inout) :: request
607
608 if (mpi_grp%comm == mpi_comm_undefined) return
609#if defined(HAVE_MPI)
611
612 call mpi_debug_in(mpi_grp%comm, c_mpi_wait)
613 call mpi_wait(request, mpi_status_ignore)
614 call mpi_debug_out(mpi_grp%comm, c_mpi_wait)
615#endif
616 end subroutine mpi_grp_wait
617
618 ! ---------------------------------------------------------
619 subroutine mpi_grp_waitall(mpi_grp, count, requests)
620 class(mpi_grp_t), intent(in) :: mpi_grp
621 integer, intent(in) :: count
622 type(mpi_request), intent(inout) :: requests(:)
623
624 if (mpi_grp%comm == mpi_comm_undefined) return
625#if defined(HAVE_MPI)
627
628 call mpi_debug_in(mpi_grp%comm, c_mpi_waitall)
629 call mpi_waitall(count, requests, mpi_statuses_ignore)
630 call mpi_debug_out(mpi_grp%comm, c_mpi_waitall)
631#endif
632 end subroutine mpi_grp_waitall
633
634 ! ---------------------------------------------------------
635 subroutine mpi_grp_abort(mpi_grp)
636 class(mpi_grp_t), intent(in) :: mpi_grp
637
638 if (mpi_grp%comm /= mpi_comm_undefined) then
639#if defined(HAVE_MPI)
641
642 ! Abort with an arbitrary error code
643 call mpi_abort(mpi_grp%comm, 999)
644#endif
645 end if
646
647 error stop 1
649 end subroutine mpi_grp_abort
650
651 ! ---------------------------------------------------------
653 real(real64) function mpi_get_wtime() result(now)
654#if defined(HAVE_MPI)
655 now = mpi_wtime()
656#else
657 now = loct_clock()
658#endif
659 end function mpi_get_wtime
660
661#include "undef.F90"
662#include "real.F90"
663#include "mpi_inc.F90"
664
665#include "undef.F90"
666#include "complex.F90"
667#include "mpi_inc.F90"
668
669#include "undef.F90"
670#include "integer.F90"
671#include "mpi_inc.F90"
672
673#include "undef.F90"
674#include "integer8.F90"
675#include "mpi_inc.F90"
676
677#include "undef.F90"
678#include "real32.F90"
679#include "mpi_inc.F90"
680
681#include "undef.F90"
682#include "complex32.F90"
683#include "mpi_inc.F90"
684
685end module mpi_oct_m
686
687
688!! Local Variables:
689!! mode: f90
690!! coding: utf-8
691!! End:
Interface for function returned by mpi_call_is_thread_safe_factory
Definition: mpi.F90:345
This module contains interfaces for BLACS routines Interfaces are from http://www....
Definition: blacs.F90:25
System information (time, memory, sysname)
Definition: loct.F90:115
integer, parameter, public c_mpi_allreduce
Definition: mpi_debug.F90:137
integer, parameter, public c_mpi_recv
Definition: mpi_debug.F90:137
subroutine, public mpi_debug_in(comm, index)
Definition: mpi_debug.F90:231
integer, parameter, public c_mpi_send
Definition: mpi_debug.F90:137
integer, parameter, public c_mpi_waitall
Definition: mpi_debug.F90:137
integer, parameter, public c_mpi_bcast
Definition: mpi_debug.F90:137
integer, parameter, public c_mpi_barrier
Definition: mpi_debug.F90:137
integer, parameter, public c_mpi_wait
Definition: mpi_debug.F90:137
subroutine, public mpi_debug_out(comm, index)
Definition: mpi_debug.F90:255
subroutine lmpi_grp_bcast_0_l(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:4085
subroutine mpi_grp_abort(mpi_grp)
Definition: mpi.F90:631
subroutine impi_grp_irecv(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:3423
subroutine smpi_grp_bcast_0_l(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:5104
subroutine smpi_grp_allreduce_0(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:5154
subroutine dmpi_grp_recv_2(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:1204
subroutine smpi_grp_isend_3(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:5634
subroutine dmpi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:1164
subroutine smpi_grp_allgather_0(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:5215
subroutine smpi_grp_isend_0_int64(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:5533
subroutine zmpi_grp_isend_0(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:2509
subroutine impi_grp_allreduce_3(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:3106
subroutine impi_grp_allreduce_0(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:3119
subroutine mpi_grp_duplicate(mpi_grp_out, mpi_grp_in)
Definition: mpi.F90:459
subroutine zmpi_grp_allreduce(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:2065
subroutine impi_grp_irecv_0(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:3398
subroutine lmpi_grp_allreduce_3(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:4122
subroutine smpi_grp_isend_0(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:5559
subroutine lmpi_grp_allreduce_inplace_1(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:4158
subroutine cmpi_grp_allreduce_3(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:6160
subroutine lmpi_grp_send(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:4319
subroutine dmpi_grp_allreduce_inplace_1(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:1112
subroutine lmpi_grp_isend(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:4565
subroutine zmpi_grp_bcast_0_l(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:2054
subroutine lompi_grp_copy_0(sendbuf, recvbuf, count)
Definition: mpi.F90:515
subroutine smpi_grp_allreduce_inplace_0(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:5167
subroutine smpi_grp_irecv(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:5458
subroutine smpi_grp_isend(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:5584
subroutine cmpi_grp_send_3(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:6403
subroutine zmpi_grp_irecv_0_int64(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:2357
subroutine zmpi_grp_recv_3(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:2242
subroutine cmpi_grp_allreduce_2(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:6147
subroutine blacs_init()
Initialize BLACS to enable use of SCALAPACK.
Definition: mpi.F90:382
subroutine impi_grp_send_3(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:3349
real(real64) function, public mpi_get_wtime()
. Returns an elapsed time on the calling processor.
Definition: mpi.F90:649
subroutine dmpi_grp_irecv_3(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:1443
subroutine impi_grp_bcast_0_l(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:3069
subroutine zmpi_grp_isend(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:2534
subroutine dmpi_grp_isend_3(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:1569
subroutine zmpi_grp_irecv_3(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:2458
subroutine lompi_grp_bcast_0(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:504
logical function mpi_grp_is_root(grp)
Is the current MPI process of grpcomm, root.
Definition: mpi.F90:473
subroutine zmpi_grp_allreduce_inplace_1(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:2127
subroutine lmpi_grp_allgather_0(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:4196
subroutine impi_grp_irecv_2(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:3448
subroutine cmpi_grp_recv_2(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:6288
subroutine zmpi_grp_recv(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:2196
subroutine zmpi_grp_allreduce_0(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:2104
subroutine smpi_grp_recv_2(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:5269
subroutine cmpi_grp_irecv_0_int64(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:6426
subroutine zmpi_grp_allgather(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:2150
subroutine zmpi_grp_irecv(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:2408
procedure(omp_region_func), pointer mpi_call_is_thread_safe
Single-threaded without MPI.
Definition: mpi.F90:351
subroutine dmpi_grp_allgather(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:1135
subroutine mpi_grp_copy(mpi_grp_out, mpi_grp_in)
MPI_THREAD_FUNNELED allows for calls to MPI from an OMP region if the thread is the team master.
Definition: mpi.F90:449
subroutine zmpi_grp_isend_3(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:2584
subroutine dmpi_grp_bcast_0_l(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:1039
subroutine impi_grp_isend_2(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:3574
subroutine impi_grp_allreduce(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:3080
subroutine impi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:3194
subroutine lmpi_grp_recv_3(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:4273
subroutine smpi_grp_irecv_0(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:5433
subroutine impi_grp_isend(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:3549
subroutine lmpi_grp_recv(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:4227
subroutine impi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:3280
subroutine dmpi_grp_allreduce_inplace_0(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:1102
subroutine cmpi_grp_allreduce_inplace_1(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:6196
subroutine dmpi_grp_allreduce_0(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:1089
subroutine lompi_grp_allreduce_inplace_0(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:544
subroutine cmpi_grp_allreduce(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:6134
subroutine impi_grp_bcast_3(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:3059
subroutine impi_grp_isend_0_int64(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:3498
subroutine smpi_grp_allreduce_inplace_2(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:5188
subroutine lmpi_grp_bcast_3(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:4075
subroutine cmpi_grp_isend_0(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:6578
subroutine impi_grp_recv_2(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:3234
subroutine zmpi_grp_irecv_2(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:2433
subroutine dmpi_grp_isend_0(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:1494
subroutine zmpi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:2265
subroutine lmpi_grp_allreduce_2(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:4109
subroutine dmpi_grp_irecv(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:1393
subroutine lmpi_grp_irecv_0_int64(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:4388
subroutine cmpi_grp_isend_2(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:6628
subroutine smpi_grp_irecv_0_int64(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:5407
subroutine cmpi_grp_isend(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:6603
subroutine smpi_grp_bcast_3(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:5094
subroutine dmpi_grp_send_2(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:1296
subroutine cmpi_grp_allreduce_inplace_2(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:6207
subroutine smpi_grp_allreduce_2(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:5128
subroutine smpi_grp_send_3(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:5384
subroutine smpi_grp_irecv_2(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:5483
subroutine dmpi_grp_bcast_3(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:1029
subroutine impi_grp_irecv_0_int64(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:3372
subroutine lompi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:554
subroutine zmpi_grp_allreduce_inplace_0(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:2117
subroutine dmpi_grp_allreduce_2(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:1063
subroutine cmpi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:6248
subroutine zmpi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:2179
subroutine cmpi_grp_recv(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:6265
subroutine smpi_grp_allgather(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:5200
subroutine check_threading_support(comm)
Check that the threading support of the MPI library is consistent with the requested support from Oct...
Definition: mpi.F90:372
subroutine smpi_grp_recv_3(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:5292
subroutine dmpi_grp_allgather_0(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:1150
subroutine smpi_grp_allreduce_inplace_1(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:5177
subroutine dmpi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:1250
subroutine smpi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:5229
subroutine cmpi_grp_bcast_3(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:6113
subroutine lmpi_grp_recv_2(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:4250
subroutine cmpi_grp_irecv_3(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:6527
subroutine zmpi_grp_allgather_0(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:2165
subroutine mpi_grp_wait(mpi_grp, request)
Definition: mpi.F90:600
subroutine lmpi_grp_irecv(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:4439
subroutine zmpi_grp_bcast_3(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:2044
type(mpi_grp_t), public mpi_world
Definition: mpi.F90:338
subroutine impi_grp_isend_0(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:3524
subroutine lmpi_grp_allgather(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:4181
subroutine mpi_mod_end()
Finalize MPI, and conditionally BLACS.
Definition: mpi.F90:388
subroutine cmpi_grp_irecv_2(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:6502
subroutine dmpi_grp_allreduce_3(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:1076
subroutine dmpi_grp_send(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:1273
subroutine lmpi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:4210
logical pure function, private not_in_openmp()
Not in an OpenMP region.
Definition: mpi.F90:435
subroutine cmpi_grp_irecv(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:6477
subroutine dmpi_grp_recv_3(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:1227
subroutine zmpi_grp_send(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:2288
subroutine lmpi_grp_isend_2(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:4590
subroutine cmpi_grp_allgather_0(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:6234
subroutine cmpi_grp_allreduce_inplace_0(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:6186
subroutine mpi_grp_init(grp, comm)
Initialize MPI group instance.
Definition: mpi.F90:407
subroutine cmpi_grp_isend_0_int64(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:6552
subroutine zmpi_grp_send_2(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:2311
subroutine dmpi_grp_irecv_0(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:1368
subroutine smpi_grp_send(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:5338
subroutine impi_grp_irecv_3(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:3473
subroutine lmpi_grp_allreduce_0(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:4135
subroutine impi_grp_isend_3(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:3599
subroutine dmpi_grp_isend(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:1519
subroutine dmpi_grp_isend_2(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:1544
subroutine smpi_grp_recv(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:5246
subroutine zmpi_grp_recv_2(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:2219
subroutine dmpi_grp_recv(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:1181
subroutine zmpi_grp_isend_0_int64(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:2483
subroutine impi_grp_allgather_0(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:3180
subroutine lmpi_grp_irecv_3(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:4489
subroutine zmpi_grp_allreduce_3(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:2091
subroutine smpi_grp_allreduce(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:5115
subroutine dmpi_grp_allreduce_inplace_2(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:1123
subroutine lmpi_grp_allreduce(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:4096
subroutine smpi_grp_send_2(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:5361
subroutine lmpi_grp_allreduce_inplace_2(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:4169
subroutine cmpi_grp_isend_3(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:6653
subroutine mpi_grp_barrier(mpi_grp)
Definition: mpi.F90:480
subroutine impi_grp_recv_3(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:3257
subroutine zmpi_grp_irecv_0(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:2383
subroutine cmpi_grp_allgather(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:6219
subroutine impi_grp_allreduce_inplace_1(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:3142
subroutine lmpi_grp_send_2(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:4342
subroutine impi_grp_allgather(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:3165
subroutine mpi_init_comm(comm)
Wrapper for MPI_COMM_WORLD initialisation.
Definition: mpi.F90:361
subroutine impi_grp_send_2(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:3326
subroutine dmpi_grp_allreduce(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:1050
subroutine dmpi_grp_irecv_2(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:1418
subroutine lmpi_grp_allreduce_inplace_0(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:4148
subroutine cmpi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:6334
subroutine cmpi_grp_irecv_0(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:6452
subroutine impi_grp_allreduce_inplace_0(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:3132
subroutine lmpi_grp_isend_0_int64(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:4514
subroutine dmpi_grp_irecv_0_int64(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:1342
subroutine smpi_grp_allreduce_3(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:5141
subroutine cmpi_grp_allreduce_0(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:6173
subroutine smpi_grp_isend_2(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:5609
subroutine lmpi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:4296
subroutine lmpi_grp_isend_0(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:4540
subroutine impi_grp_recv(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:3211
subroutine dmpi_grp_isend_0_int64(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:1468
subroutine smpi_grp_irecv_3(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:5508
subroutine impi_grp_allreduce_inplace_2(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:3153
subroutine dmpi_grp_send_3(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:1319
subroutine zmpi_grp_isend_2(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:2559
subroutine lmpi_grp_send_3(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:4365
subroutine cmpi_grp_send(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:6357
subroutine cmpi_grp_recv_3(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:6311
subroutine zmpi_grp_send_3(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:2334
subroutine mpi_grp_waitall(mpi_grp, count, requests)
Definition: mpi.F90:615
subroutine zmpi_grp_allreduce_2(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:2078
subroutine lompi_grp_allreduce_0(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:531
subroutine cmpi_grp_send_2(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:6380
subroutine lmpi_grp_irecv_0(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:4414
subroutine impi_grp_send(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:3303
subroutine lompi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:577
subroutine smpi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:5315
subroutine lmpi_grp_isend_3(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:4615
subroutine zmpi_grp_allreduce_inplace_2(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:2138
subroutine chmpi_grp_bcast_0(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:494
subroutine impi_grp_allreduce_2(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:3093
subroutine lmpi_grp_irecv_2(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:4464
type(mpi_comm), parameter mpi_comm_null
type(mpi_op), parameter mpi_in_place
This is defined even when running serial.
Definition: mpi.F90:142
int true(void)