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_gather_0, zmpi_grp_gather_0, impi_grp_gather_0, lmpi_grp_gather_0, smpi_grp_gather_0, &
73 cmpi_grp_gather_0
74 generic :: gather => 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 procedure :: dmpi_grp_gatherv_i8, zmpi_grp_gatherv_i8, impi_grp_gatherv_i8, lmpi_grp_gatherv_i8, smpi_grp_gatherv_i8, &
77 cmpi_grp_gatherv_i8
78 generic :: gatherv => dmpi_grp_gatherv_i8, zmpi_grp_gatherv_i8, impi_grp_gatherv_i8, lmpi_grp_gatherv_i8, &
79 smpi_grp_gatherv_i8, cmpi_grp_gatherv_i8
80 procedure :: dmpi_grp_alltoallv, zmpi_grp_alltoallv, impi_grp_alltoallv, lmpi_grp_alltoallv, smpi_grp_alltoallv, &
81 cmpi_grp_alltoallv
82 generic :: alltoallv => dmpi_grp_alltoallv, zmpi_grp_alltoallv, impi_grp_alltoallv, lmpi_grp_alltoallv, &
83 smpi_grp_alltoallv, cmpi_grp_alltoallv
84 procedure :: dmpi_grp_alltoallv_2, zmpi_grp_alltoallv_2, impi_grp_alltoallv_2, lmpi_grp_alltoallv_2, &
85 smpi_grp_alltoallv_2, cmpi_grp_alltoallv_2
86 generic :: alltoallv => 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 procedure :: dmpi_grp_alltoallv_3, zmpi_grp_alltoallv_3, impi_grp_alltoallv_3, lmpi_grp_alltoallv_3, &
89 smpi_grp_alltoallv_3, cmpi_grp_alltoallv_3
90 generic :: alltoallv => 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 procedure :: dmpi_grp_alltoallv_i8, zmpi_grp_alltoallv_i8, impi_grp_alltoallv_i8, lmpi_grp_alltoallv_i8, &
93 smpi_grp_alltoallv_i8, cmpi_grp_alltoallv_i8
94 generic :: alltoallv => 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 procedure :: dmpi_grp_alltoall, zmpi_grp_alltoall, impi_grp_alltoall, lmpi_grp_alltoall, smpi_grp_alltoall, &
97 cmpi_grp_alltoall
98 generic :: alltoall => dmpi_grp_alltoall, zmpi_grp_alltoall, impi_grp_alltoall, lmpi_grp_alltoall, smpi_grp_alltoall, &
99 cmpi_grp_alltoall
100 procedure :: dmpi_grp_allgatherv, zmpi_grp_allgatherv, impi_grp_allgatherv, lmpi_grp_allgatherv, smpi_grp_allgatherv, &
101 cmpi_grp_allgatherv
102 generic :: allgatherv => dmpi_grp_allgatherv, zmpi_grp_allgatherv, impi_grp_allgatherv, lmpi_grp_allgatherv, &
103 smpi_grp_allgatherv, cmpi_grp_allgatherv
104 procedure :: dmpi_grp_allgatherv_2, zmpi_grp_allgatherv_2, impi_grp_allgatherv_2, lmpi_grp_allgatherv_2, &
105 smpi_grp_allgatherv_2, cmpi_grp_allgatherv_2
106 generic :: allgatherv => 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 procedure :: dmpi_grp_allgatherv_3, zmpi_grp_allgatherv_3, impi_grp_allgatherv_3, lmpi_grp_allgatherv_3, &
109 smpi_grp_allgatherv_3, cmpi_grp_allgatherv_3
110 generic :: allgatherv => 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 procedure :: dmpi_grp_allgatherv_3_1, zmpi_grp_allgatherv_3_1, impi_grp_allgatherv_3_1, lmpi_grp_allgatherv_3_1, &
113 smpi_grp_allgatherv_3_1, cmpi_grp_allgatherv_3_1
114 generic :: allgatherv => dmpi_grp_allgatherv_3_1, zmpi_grp_allgatherv_3_1, impi_grp_allgatherv_3_1, &
115 lmpi_grp_allgatherv_3_1, smpi_grp_allgatherv_3_1, cmpi_grp_allgatherv_3_1
116 procedure :: dmpi_grp_allgatherv_i8, zmpi_grp_allgatherv_i8, impi_grp_allgatherv_i8, lmpi_grp_allgatherv_i8, &
117 smpi_grp_allgatherv_i8, cmpi_grp_allgatherv_i8
118 generic :: allgatherv => 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 procedure :: dmpi_grp_allgatherv_inplace, zmpi_grp_allgatherv_inplace, &
121 impi_grp_allgatherv_inplace, lmpi_grp_allgatherv_inplace, &
122 smpi_grp_allgatherv_inplace, cmpi_grp_allgatherv_inplace
123 generic :: allgatherv_inplace => dmpi_grp_allgatherv_inplace, zmpi_grp_allgatherv_inplace, &
124 impi_grp_allgatherv_inplace, lmpi_grp_allgatherv_inplace, &
125 smpi_grp_allgatherv_inplace, cmpi_grp_allgatherv_inplace
126 procedure :: dmpi_grp_bcast, zmpi_grp_bcast, impi_grp_bcast, lmpi_grp_bcast, smpi_grp_bcast, cmpi_grp_bcast
127 generic :: bcast => dmpi_grp_bcast, zmpi_grp_bcast, impi_grp_bcast, lmpi_grp_bcast, smpi_grp_bcast, cmpi_grp_bcast
128 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
129 generic :: bcast => dmpi_grp_bcast_0, zmpi_grp_bcast_0, impi_grp_bcast_0, lmpi_grp_bcast_0, smpi_grp_bcast_0, &
130 cmpi_grp_bcast_0
131 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
132 generic :: bcast => dmpi_grp_bcast_2, zmpi_grp_bcast_2, impi_grp_bcast_2, lmpi_grp_bcast_2, smpi_grp_bcast_2, &
133 cmpi_grp_bcast_2
134 procedure :: dmpi_grp_bcast_3, zmpi_grp_bcast_3, impi_grp_bcast_3, lmpi_grp_bcast_3, smpi_grp_bcast_3, cmpi_grp_bcast_3
135 generic :: bcast => dmpi_grp_bcast_3, zmpi_grp_bcast_3, impi_grp_bcast_3, lmpi_grp_bcast_3, smpi_grp_bcast_3, &
136 cmpi_grp_bcast_3
137 procedure :: chmpi_grp_bcast_0, lompi_grp_bcast_0
138 generic :: bcast => chmpi_grp_bcast_0, lompi_grp_bcast_0
144 cmpi_grp_allreduce
146 smpi_grp_allreduce, cmpi_grp_allreduce
159 procedure :: lompi_grp_allreduce_0
160 generic :: allreduce => lompi_grp_allreduce_0
168 generic :: allreduce_inplace => lompi_grp_allreduce_inplace_0
176 generic :: allreduce_inplace => dmpi_grp_allreduce_inplace_2, zmpi_grp_allreduce_inplace_2, &
195 procedure :: lompi_grp_recv_0
196 generic :: recv => lompi_grp_recv_0
205 procedure :: lompi_grp_send_0
206 generic :: send => lompi_grp_send_0
237 procedure :: mpi_grp_wait, mpi_grp_waitall
238 generic :: wait => mpi_grp_wait, mpi_grp_waitall
239 procedure :: abort => mpi_grp_abort
240 procedure :: is_root => mpi_grp_is_root
241 end type mpi_grp_t
243 type(mpi_grp_t), public :: mpi_world
245 private :: not_in_openmp
247
249 abstract interface
251 logical :: omp_region_func
252 end function
253 end interface
255#if defined(HAVE_MPI) && defined(HAVE_OPENMP)
258 integer, parameter :: octopus_mpi_thread_level = mpi_thread_funneled
259 procedure(omp_region_func), pointer :: mpi_call_is_thread_safe => mpi_call_is_thread_funneled_safe
260#elif defined(HAVE_MPI)
261
262 integer, parameter :: octopus_mpi_thread_level = mpi_thread_single
264#else
265
267#endif
268
270contains
275 subroutine mpi_init_comm(comm)
276 type(mpi_comm), intent(out) :: comm
277#if defined(HAVE_MPI)
278#if defined(HAVE_OPENMP)
279 integer :: provided
281 call mpi_init_thread(octopus_mpi_thread_level, provided)
283#else
284 call mpi_init()
285#endif
286 comm = mpi_comm_world
287#else
288 comm = mpi_comm_undefined
289#endif
291 end subroutine mpi_init_comm
296 subroutine check_threading_support(comm)
297 type(mpi_comm), intent(in) :: comm
299#if defined(HAVE_MPI) && defined(HAVE_OPENMP)
300 integer :: provided, ierr, rank
302 call mpi_query_thread(provided)
303 if (provided < octopus_mpi_thread_level) then
304 call mpi_comm_rank(comm, rank)
305 if (rank == 0) write(*, '(a)') 'MPI library threading support is less than required by Octopus'
306 call mpi_abort(comm, 1, ierr)
307 end if
308#else
309 return
310#endif
312 end subroutine check_threading_support
314
316 subroutine blacs_init()
317#if defined(HAVE_MPI)
318#ifdef HAVE_SCALAPACK
319 integer :: iam, nprocs
320 integer :: blacs_default_system_context
321
322 ! Determine my process number and the number of processes in machine
323 call blacs_pinfo(iam, nprocs)
324
325 ! If machine needs additional set up, do it now
326 if (nprocs < 1) then
327 call blacs_setup(iam, mpi_world%size)
328 end if
329
330 ! blacs_gridinit() or blacs_gridmap() must be called, else
331 ! blacs_exit() triggers an error with openmpi:
332 ! *** An error occurred in MPI_Type_free
333 ! *** MPI_ERR_TYPE: invalid datatype
334 call blacs_get(0, 0, blacs_default_system_context)
335 call blacs_gridinit(blacs_default_system_context, 'R', mpi_world%size, 1)
336 call blacs_gridexit(blacs_default_system_context)
337#endif
338#endif
339 end subroutine blacs_init
340
341
343 subroutine mpi_mod_end()
344
345#ifdef HAVE_SCALAPACK
346 if (mpi_world%comm /= mpi_comm_undefined) call blacs_exit(1)
347#endif
348
350
351#if defined(HAVE_MPI)
352 if (mpi_world%comm /= mpi_comm_undefined) call mpi_finalize()
353#endif
354
355 end subroutine mpi_mod_end
356
357
362 subroutine mpi_grp_init(grp, comm)
363 type(mpi_grp_t), intent(out) :: grp
364 type(mpi_comm), intent(in) :: comm
365
366 grp%comm = comm
367#if defined(HAVE_MPI)
368 if (grp%comm == mpi_comm_null) grp%comm = mpi_comm_undefined
369#endif
370
371 if (grp%comm == mpi_comm_undefined) then
372 grp%rank = 0
373 grp%size = 1
374#if defined(HAVE_MPI)
375 else
376 call mpi_comm_rank(grp%comm, grp%rank)
377
378 call mpi_comm_size(grp%comm, grp%size)
379#endif
380 end if
382 end subroutine mpi_grp_init
383
384
386 logical &
387#ifndef HAVE_OPENMP
388 pure &
389#endif
390 function not_in_openmp()
391
392#ifdef HAVE_OPENMP
393 not_in_openmp = .not. omp_in_parallel()
394#else
396#endif
397
398 end function not_in_openmp
399
400
403#if defined(HAVE_MPI) && defined(HAVE_OPENMP)
404 logical function mpi_call_is_thread_funneled_safe()
405 mpi_call_is_thread_funneled_safe = &
406 not_in_openmp() .or. (omp_get_thread_num() == 0)
407 end function mpi_call_is_thread_funneled_safe
408#endif
409
410
411 subroutine mpi_grp_copy(mpi_grp_out, mpi_grp_in)
412 type(mpi_grp_t), intent(out) :: mpi_grp_out
413 type(mpi_grp_t), intent(in) :: mpi_grp_in
414
415 mpi_grp_out%comm = mpi_grp_in%comm
416 mpi_grp_out%size = mpi_grp_in%size
417 mpi_grp_out%rank = mpi_grp_in%rank
418 end subroutine mpi_grp_copy
419
420 ! ---------------------------------------------------------
421 subroutine mpi_grp_duplicate(mpi_grp_out, mpi_grp_in)
422 type(mpi_grp_t), intent(out) :: mpi_grp_out
423 type(mpi_grp_t), intent(in) :: mpi_grp_in
424
425#if defined(HAVE_MPI)
426 call mpi_comm_dup(mpi_grp_in%comm, mpi_grp_out%comm)
427 call mpi_comm_rank(mpi_grp_out%comm, mpi_grp_out%rank)
428 call mpi_comm_size(mpi_grp_out%comm, mpi_grp_out%size)
429#else
430 call mpi_grp_copy(mpi_grp_out, mpi_grp_in)
431#endif
432 end subroutine mpi_grp_duplicate
433
435 logical function mpi_grp_is_root(grp)
436 class(mpi_grp_t), intent(in) :: grp
437
438 mpi_grp_is_root = (grp%rank == root_process)
439 end function mpi_grp_is_root
440
441 ! ---------------------------------------------------------
442 subroutine mpi_grp_barrier(mpi_grp)
443 class(mpi_grp_t), intent(in) :: mpi_grp
444
445 if (mpi_grp%comm == mpi_comm_undefined) return
446#if defined(HAVE_MPI)
449 call mpi_debug_in(mpi_grp%comm, c_mpi_barrier)
450 call mpi_barrier(mpi_grp%comm)
451 call mpi_debug_out(mpi_grp%comm, c_mpi_barrier)
452#endif
453 end subroutine mpi_grp_barrier
454
455 ! ---------------------------------------------------------
456 subroutine chmpi_grp_bcast_0(mpi_grp, buf, cnt, sendtype, root)
457 class(mpi_grp_t), intent(in) :: mpi_grp
458 character(len=*), intent(inout) :: buf
459 integer, intent(in) :: cnt
460 type(mpi_datatype), intent(in) :: sendtype
461 integer, intent(in) :: root
462
463#if defined(HAVE_MPI)
465
466 call mpi_debug_in(mpi_grp%comm, c_mpi_bcast)
467 if (mpi_grp%comm /= mpi_comm_undefined) then
468 call mpi_bcast(buf, cnt, sendtype, root, mpi_grp%comm)
469 end if
470 call mpi_debug_out(mpi_grp%comm, c_mpi_bcast)
471#endif
472 end subroutine chmpi_grp_bcast_0
473
474 ! ---------------------------------------------------------
475 subroutine lompi_grp_bcast_0(mpi_grp, buf, cnt, sendtype, root)
476 class(mpi_grp_t), intent(in) :: mpi_grp
477 logical, intent(inout) :: buf
478 integer, intent(in) :: cnt
479 type(mpi_datatype), intent(in) :: sendtype
480 integer, intent(in) :: root
481
482#if defined(HAVE_MPI)
484
485 call mpi_debug_in(mpi_grp%comm, c_mpi_bcast)
486 if (mpi_grp%comm /= mpi_comm_undefined) then
487 call mpi_bcast(buf, cnt, sendtype, root, mpi_grp%comm)
488 end if
489 call mpi_debug_out(mpi_grp%comm, c_mpi_bcast)
490#endif
491 end subroutine lompi_grp_bcast_0
492
493 ! ---------------------------------------------------------
494 ! copy routine for serial case
495 subroutine lompi_grp_copy_0(sendbuf, recvbuf, count)
496 use iso_c_binding
497 logical, target, intent(in) :: sendbuf
498 logical, target, intent(out) :: recvbuf
499 integer, intent(in) :: count
500 integer :: ii
501 logical, pointer :: send(:), recv(:)
502
503 call c_f_pointer(c_loc(sendbuf), send, [count])
504 call c_f_pointer(c_loc(recvbuf), recv, [count])
505 do ii = 1, count
506 recv(ii) = send(ii)
507 end do
508 end subroutine lompi_grp_copy_0
509
510 ! ---------------------------------------------------------
511 subroutine lompi_grp_allreduce_0(mpi_grp, sendbuf, recvbuf, count, datatype, op)
512 class(mpi_grp_t), intent(in) :: mpi_grp
513 logical, intent(in) :: sendbuf
514 logical, intent(out) :: recvbuf
515 integer, intent(in) :: count
516 type(mpi_datatype), intent(in):: datatype
517 type(mpi_op), intent(in) :: op
518
519#if defined(HAVE_MPI)
521
522 call mpi_debug_in(mpi_grp%comm, c_mpi_allreduce)
523 if (mpi_grp%comm /= mpi_comm_undefined) then
524 call mpi_allreduce(sendbuf, recvbuf, count, datatype, op, &
525 mpi_grp%comm)
526 else
527 call lompi_grp_copy_0(sendbuf, recvbuf, count)
528 end if
529 call mpi_debug_out(mpi_grp%comm, c_mpi_allreduce)
530#else
531 call lompi_grp_copy_0(sendbuf, recvbuf, count)
532#endif
533 end subroutine lompi_grp_allreduce_0
534
535 ! ---------------------------------------------------------
536 subroutine lompi_grp_allreduce_inplace_0(mpi_grp, recvbuf, count, datatype, op)
537 class(mpi_grp_t), intent(in) :: mpi_grp
538 logical, intent(inout) :: recvbuf
539 integer, intent(in) :: count
540 type(mpi_datatype), intent(in) :: datatype
541 type(mpi_op), intent(in) :: op
542
543#if defined(HAVE_MPI)
545
546 call mpi_debug_in(mpi_grp%comm, c_mpi_allreduce)
547 if (mpi_grp%comm /= mpi_comm_undefined) then
548 call mpi_allreduce(mpi_in_place, recvbuf, count, datatype, op, &
549 mpi_grp%comm)
550 end if
551 call mpi_debug_out(mpi_grp%comm, c_mpi_allreduce)
552#endif
554
555 ! ---------------------------------------------------------
556 subroutine lompi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
557 class(mpi_grp_t), intent(in) :: mpi_grp
558 logical, intent(out) :: recvbuf
559 integer, intent(in) :: recvcount
560 type(mpi_datatype),intent(in) :: recvtype
561 integer, intent(in) :: source
562 integer, optional, intent(in) :: tag
563
564 integer :: tag_
565
566 tag_ = 0
567 if (present(tag)) tag_ = tag
568 if (mpi_grp%comm == mpi_comm_undefined) return
569#if defined(HAVE_MPI)
571
572 call mpi_debug_in(mpi_grp%comm, c_mpi_recv)
573 call mpi_recv(recvbuf, recvcount, recvtype, source, tag_, mpi_grp%comm, mpi_status_ignore)
574 call mpi_debug_out(mpi_grp%comm, c_mpi_recv)
575#endif
576 end subroutine lompi_grp_recv_0
577
578 ! ---------------------------------------------------------
579 subroutine lompi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
580 class(mpi_grp_t), intent(in) :: mpi_grp
581 logical, intent(in) :: sendbuf
582 integer, intent(in) :: sendcount
583 type(mpi_datatype),intent(in) :: sendtype
584 integer, intent(in) :: dest
585 integer, optional, intent(in) :: tag
586
587 integer :: tag_
588
589 tag_ = 0
590 if (present(tag)) tag_ = tag
591 if (mpi_grp%comm == mpi_comm_undefined) return
592#if defined(HAVE_MPI)
594
595 call mpi_debug_in(mpi_grp%comm, c_mpi_send)
596 call mpi_send(sendbuf, sendcount, sendtype, dest, tag_, mpi_grp%comm)
597 call mpi_debug_out(mpi_grp%comm, c_mpi_send)
598#endif
599 end subroutine lompi_grp_send_0
600
601 ! ---------------------------------------------------------
602 subroutine mpi_grp_wait(mpi_grp, request)
603 class(mpi_grp_t), intent(in) :: mpi_grp
604 type(mpi_request), intent(inout) :: request
605
606 if (mpi_grp%comm == mpi_comm_undefined) return
607#if defined(HAVE_MPI)
609
610 call mpi_debug_in(mpi_grp%comm, c_mpi_wait)
611 call mpi_wait(request, mpi_status_ignore)
612 call mpi_debug_out(mpi_grp%comm, c_mpi_wait)
613#endif
614 end subroutine mpi_grp_wait
615
616 ! ---------------------------------------------------------
617 subroutine mpi_grp_waitall(mpi_grp, count, requests)
618 class(mpi_grp_t), intent(in) :: mpi_grp
619 integer, intent(in) :: count
620 type(mpi_request), intent(inout) :: requests(:)
621
622 if (mpi_grp%comm == mpi_comm_undefined) return
623#if defined(HAVE_MPI)
625
626 call mpi_debug_in(mpi_grp%comm, c_mpi_waitall)
627 call mpi_waitall(count, requests, mpi_statuses_ignore)
628 call mpi_debug_out(mpi_grp%comm, c_mpi_waitall)
629#endif
630 end subroutine mpi_grp_waitall
631
632 ! ---------------------------------------------------------
633 subroutine mpi_grp_abort(mpi_grp)
634 class(mpi_grp_t), intent(in) :: mpi_grp
635
636 if (mpi_grp%comm /= mpi_comm_undefined) then
637#if defined(HAVE_MPI)
639
640 ! Abort with an arbitrary error code
641 call mpi_abort(mpi_grp%comm, 999)
642#endif
643 end if
644
645 error stop 1
646
647 end subroutine mpi_grp_abort
649 ! ---------------------------------------------------------
651 real(real64) function mpi_get_wtime() result(now)
652#if defined(HAVE_MPI)
653 now = mpi_wtime()
654#else
655 now = loct_clock()
656#endif
657 end function mpi_get_wtime
658
659#include "undef.F90"
660#include "real.F90"
661#include "mpi_inc.F90"
662
663#include "undef.F90"
664#include "complex.F90"
665#include "mpi_inc.F90"
666
667#include "undef.F90"
668#include "integer.F90"
669#include "mpi_inc.F90"
670
671#include "undef.F90"
672#include "integer8.F90"
673#include "mpi_inc.F90"
674
675#include "undef.F90"
676#include "real32.F90"
677#include "mpi_inc.F90"
678
679#include "undef.F90"
680#include "complex32.F90"
681#include "mpi_inc.F90"
682
683end module mpi_oct_m
684
685
686!! Local Variables:
687!! mode: f90
688!! coding: utf-8
689!! 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:
Definition: blacs.F90:27
System information (time, memory, sysname)
Definition: loct.F90:117
integer, parameter, public c_mpi_allreduce
Definition: mpi_debug.F90:139
integer, parameter, public c_mpi_recv
Definition: mpi_debug.F90:139
subroutine, public mpi_debug_in(comm, index)
Definition: mpi_debug.F90:233
integer, parameter, public c_mpi_send
Definition: mpi_debug.F90:139
integer, parameter, public c_mpi_waitall
Definition: mpi_debug.F90:139
integer, parameter, public c_mpi_bcast
Definition: mpi_debug.F90:139
integer, parameter, public c_mpi_barrier
Definition: mpi_debug.F90:139
integer, parameter, public c_mpi_wait
Definition: mpi_debug.F90:139
subroutine, public mpi_debug_out(comm, index)
Definition: mpi_debug.F90:257
subroutine lmpi_grp_bcast_0_l(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:4021
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:3375
subroutine smpi_grp_bcast_0_l(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:5024
subroutine smpi_grp_allreduce_0(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:5074
subroutine dmpi_grp_recv_2(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:1188
subroutine smpi_grp_isend_3(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:5554
subroutine dmpi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:1148
subroutine smpi_grp_allgather_0(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:5135
subroutine smpi_grp_isend_0_int64(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:5453
subroutine zmpi_grp_isend_0(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:2477
subroutine impi_grp_allreduce_3(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:3058
subroutine impi_grp_allreduce_0(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:3071
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:2033
subroutine impi_grp_irecv_0(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:3350
subroutine lmpi_grp_allreduce_3(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:4058
subroutine smpi_grp_isend_0(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:5479
subroutine lmpi_grp_allreduce_inplace_1(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:4094
subroutine cmpi_grp_allreduce_3(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:6064
subroutine lmpi_grp_send(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:4255
subroutine dmpi_grp_allreduce_inplace_1(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:1096
subroutine lmpi_grp_isend(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:4501
subroutine zmpi_grp_bcast_0_l(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:2022
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:5087
subroutine smpi_grp_irecv(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:5378
subroutine smpi_grp_isend(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:5504
subroutine cmpi_grp_send_3(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:6307
subroutine zmpi_grp_irecv_0_int64(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:2325
subroutine zmpi_grp_recv_3(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:2210
subroutine cmpi_grp_allreduce_2(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:6051
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:3301
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:1427
subroutine impi_grp_bcast_0_l(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:3021
subroutine zmpi_grp_isend(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:2502
subroutine dmpi_grp_isend_3(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:1553
subroutine zmpi_grp_irecv_3(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:2426
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:2095
subroutine lmpi_grp_allgather_0(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:4132
subroutine impi_grp_irecv_2(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:3400
subroutine cmpi_grp_recv_2(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:6192
subroutine zmpi_grp_recv(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:2164
subroutine zmpi_grp_allreduce_0(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:2072
subroutine smpi_grp_recv_2(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:5189
subroutine cmpi_grp_irecv_0_int64(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:6330
subroutine zmpi_grp_allgather(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:2118
subroutine zmpi_grp_irecv(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:2376
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:1119
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:2552
subroutine dmpi_grp_bcast_0_l(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:1023
subroutine impi_grp_isend_2(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:3526
subroutine impi_grp_allreduce(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:3032
subroutine impi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:3146
subroutine lmpi_grp_recv_3(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:4209
subroutine smpi_grp_irecv_0(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:5353
subroutine impi_grp_isend(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:3501
subroutine lmpi_grp_recv(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:4163
subroutine impi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:3232
subroutine dmpi_grp_allreduce_inplace_0(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:1086
subroutine cmpi_grp_allreduce_inplace_1(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:6100
subroutine dmpi_grp_allreduce_0(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:1073
subroutine lompi_grp_allreduce_inplace_0(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:544
subroutine impi_grp_isend_0_int64(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:3450
subroutine smpi_grp_allreduce_inplace_2(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:5108
subroutine cmpi_grp_isend_0(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:6482
subroutine impi_grp_recv_2(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:3186
subroutine zmpi_grp_irecv_2(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:2401
subroutine dmpi_grp_isend_0(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:1478
subroutine zmpi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:2233
subroutine lmpi_grp_allreduce_2(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:4045
subroutine dmpi_grp_irecv(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:1377
subroutine lmpi_grp_irecv_0_int64(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:4324
subroutine cmpi_grp_isend_2(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:6532
subroutine smpi_grp_irecv_0_int64(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:5327
subroutine cmpi_grp_isend(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:6507
subroutine dmpi_grp_send_2(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:1280
subroutine cmpi_grp_allreduce_inplace_2(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:6111
subroutine smpi_grp_allreduce_2(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:5048
subroutine smpi_grp_send_3(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:5304
subroutine smpi_grp_irecv_2(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:5403
subroutine impi_grp_irecv_0_int64(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:3324
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:2085
subroutine dmpi_grp_allreduce_2(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:1047
subroutine cmpi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:6152
subroutine zmpi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:2147
subroutine cmpi_grp_recv(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:6169
subroutine smpi_grp_allgather(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:5120
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:5212
subroutine dmpi_grp_allgather_0(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:1134
subroutine smpi_grp_allreduce_inplace_1(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:5097
subroutine dmpi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:1234
subroutine smpi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:5149
subroutine lmpi_grp_recv_2(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:4186
subroutine cmpi_grp_irecv_3(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:6431
subroutine zmpi_grp_allgather_0(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:2133
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:4375
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:3476
subroutine lmpi_grp_allgather(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:4117
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:6406
subroutine dmpi_grp_allreduce_3(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:1060
subroutine dmpi_grp_send(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:1257
subroutine lmpi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:4146
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:6381
subroutine dmpi_grp_recv_3(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:1211
subroutine zmpi_grp_send(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:2256
subroutine lmpi_grp_isend_2(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:4526
subroutine cmpi_grp_allgather_0(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:6138
subroutine cmpi_grp_allreduce_inplace_0(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:6090
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:6456
subroutine zmpi_grp_send_2(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:2279
subroutine dmpi_grp_irecv_0(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:1352
subroutine smpi_grp_send(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:5258
subroutine impi_grp_irecv_3(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:3425
subroutine lmpi_grp_allreduce_0(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:4071
subroutine impi_grp_isend_3(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:3551
subroutine dmpi_grp_isend(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:1503
subroutine dmpi_grp_isend_2(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:1528
subroutine smpi_grp_recv(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:5166
subroutine zmpi_grp_recv_2(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:2187
subroutine dmpi_grp_recv(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:1165
subroutine zmpi_grp_isend_0_int64(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:2451
subroutine impi_grp_allgather_0(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:3132
subroutine lmpi_grp_irecv_3(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:4425
subroutine zmpi_grp_allreduce_3(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:2059
subroutine smpi_grp_allreduce(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:5035
subroutine dmpi_grp_allreduce_inplace_2(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:1107
subroutine lmpi_grp_allreduce(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:4032
subroutine smpi_grp_send_2(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:5281
subroutine lmpi_grp_allreduce_inplace_2(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:4105
subroutine cmpi_grp_isend_3(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:6557
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:3209
subroutine zmpi_grp_irecv_0(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:2351
subroutine cmpi_grp_allgather(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:6123
subroutine impi_grp_allreduce_inplace_1(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:3094
subroutine cmpi_grp_bcast_0_l(mpi_grp, buf, cnt, sendtype, root)
Definition: mpi.F90:6027
subroutine lmpi_grp_send_2(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:4278
subroutine impi_grp_allgather(mpi_grp, sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype)
Definition: mpi.F90:3117
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:3278
subroutine dmpi_grp_allreduce(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:1034
subroutine dmpi_grp_irecv_2(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:1402
subroutine lmpi_grp_allreduce_inplace_0(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:4084
subroutine cmpi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:6238
subroutine cmpi_grp_irecv_0(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:6356
subroutine impi_grp_allreduce_inplace_0(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:3084
subroutine lmpi_grp_isend_0_int64(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:4450
subroutine dmpi_grp_irecv_0_int64(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:1326
subroutine smpi_grp_allreduce_3(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:5061
subroutine cmpi_grp_allreduce_0(mpi_grp, sendbuf, recvbuf, count, datatype, op)
Definition: mpi.F90:6077
subroutine smpi_grp_isend_2(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:5529
subroutine lmpi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:4232
subroutine lmpi_grp_isend_0(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:4476
subroutine impi_grp_recv(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:3163
subroutine dmpi_grp_isend_0_int64(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:1452
subroutine smpi_grp_irecv_3(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:5428
subroutine impi_grp_allreduce_inplace_2(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:3105
subroutine dmpi_grp_send_3(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:1303
subroutine zmpi_grp_isend_2(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:2527
subroutine lmpi_grp_send_3(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:4301
subroutine cmpi_grp_send(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:6261
subroutine cmpi_grp_recv_3(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
Definition: mpi.F90:6215
subroutine zmpi_grp_send_3(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:2302
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:2046
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:6284
subroutine lmpi_grp_irecv_0(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:4350
subroutine impi_grp_send(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
Definition: mpi.F90:3255
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:5235
subroutine lmpi_grp_isend_3(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
Definition: mpi.F90:4551
subroutine zmpi_grp_allreduce_inplace_2(mpi_grp, recvbuf, count, datatype, op)
Definition: mpi.F90:2106
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:3045
subroutine lmpi_grp_irecv_2(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
Definition: mpi.F90:4400
type(mpi_comm), parameter mpi_comm_null
type(mpi_op), parameter mpi_in_place
This is defined even when running serial.
Definition: mpi.F90:144
int true(void)