31 use,
intrinsic :: iso_fortran_env
43 type(MPI_Comm),
parameter,
public :: MPI_COMM_UNDEFINED = mpi_comm(-1)
48 type(MPI_Comm) :: comm = mpi_comm_undefined
58 procedure :: dmpi_grp_scatterv, zmpi_grp_scatterv, impi_grp_scatterv, lmpi_grp_scatterv
59 generic :: scatterv => dmpi_grp_scatterv, zmpi_grp_scatterv, impi_grp_scatterv, lmpi_grp_scatterv
60 procedure :: dmpi_grp_scatterv_i8, zmpi_grp_scatterv_i8, impi_grp_scatterv_i8, lmpi_grp_scatterv_i8
61 generic :: scatterv => dmpi_grp_scatterv_i8, zmpi_grp_scatterv_i8, impi_grp_scatterv_i8, lmpi_grp_scatterv_i8
62 procedure :: dmpi_grp_gatherv, zmpi_grp_gatherv, impi_grp_gatherv, lmpi_grp_gatherv
63 generic :: gatherv => dmpi_grp_gatherv, zmpi_grp_gatherv, impi_grp_gatherv, lmpi_grp_gatherv
64 procedure :: dmpi_grp_gather_0, zmpi_grp_gather_0, impi_grp_gather_0, lmpi_grp_gather_0
65 generic :: gather => dmpi_grp_gather_0, zmpi_grp_gather_0, impi_grp_gather_0, lmpi_grp_gather_0
66 procedure :: dmpi_grp_gatherv_i8, zmpi_grp_gatherv_i8, impi_grp_gatherv_i8, lmpi_grp_gatherv_i8
67 generic :: gatherv => dmpi_grp_gatherv_i8, zmpi_grp_gatherv_i8, impi_grp_gatherv_i8, lmpi_grp_gatherv_i8
68 procedure :: dmpi_grp_alltoallv, zmpi_grp_alltoallv, impi_grp_alltoallv, lmpi_grp_alltoallv
69 generic :: alltoallv => dmpi_grp_alltoallv, zmpi_grp_alltoallv, impi_grp_alltoallv, lmpi_grp_alltoallv
70 procedure :: dmpi_grp_alltoallv_2, zmpi_grp_alltoallv_2, impi_grp_alltoallv_2, lmpi_grp_alltoallv_2
71 generic :: alltoallv => dmpi_grp_alltoallv_2, zmpi_grp_alltoallv_2, impi_grp_alltoallv_2, lmpi_grp_alltoallv_2
72 procedure :: dmpi_grp_alltoallv_3, zmpi_grp_alltoallv_3, impi_grp_alltoallv_3, lmpi_grp_alltoallv_3
73 generic :: alltoallv => dmpi_grp_alltoallv_3, zmpi_grp_alltoallv_3, impi_grp_alltoallv_3, lmpi_grp_alltoallv_3
74 procedure :: dmpi_grp_alltoallv_i8, zmpi_grp_alltoallv_i8, impi_grp_alltoallv_i8, lmpi_grp_alltoallv_i8
75 generic :: alltoallv => dmpi_grp_alltoallv_i8, zmpi_grp_alltoallv_i8, impi_grp_alltoallv_i8, lmpi_grp_alltoallv_i8
76 procedure :: dmpi_grp_alltoall, zmpi_grp_alltoall, impi_grp_alltoall, lmpi_grp_alltoall
77 generic :: alltoall => dmpi_grp_alltoall, zmpi_grp_alltoall, impi_grp_alltoall, lmpi_grp_alltoall
78 procedure :: dmpi_grp_allgatherv, zmpi_grp_allgatherv, impi_grp_allgatherv, lmpi_grp_allgatherv
79 generic :: allgatherv => dmpi_grp_allgatherv, zmpi_grp_allgatherv, impi_grp_allgatherv, lmpi_grp_allgatherv
80 procedure :: dmpi_grp_allgatherv_2, zmpi_grp_allgatherv_2, impi_grp_allgatherv_2, lmpi_grp_allgatherv_2
81 generic :: allgatherv => dmpi_grp_allgatherv_2, zmpi_grp_allgatherv_2, impi_grp_allgatherv_2, lmpi_grp_allgatherv_2
82 procedure :: dmpi_grp_allgatherv_3, zmpi_grp_allgatherv_3, impi_grp_allgatherv_3, lmpi_grp_allgatherv_3
83 generic :: allgatherv => dmpi_grp_allgatherv_3, zmpi_grp_allgatherv_3, impi_grp_allgatherv_3, lmpi_grp_allgatherv_3
84 procedure :: dmpi_grp_allgatherv_3_1, zmpi_grp_allgatherv_3_1, impi_grp_allgatherv_3_1, lmpi_grp_allgatherv_3_1
85 generic :: allgatherv => dmpi_grp_allgatherv_3_1, zmpi_grp_allgatherv_3_1, impi_grp_allgatherv_3_1, lmpi_grp_allgatherv_3_1
86 procedure :: dmpi_grp_allgatherv_i8, zmpi_grp_allgatherv_i8, impi_grp_allgatherv_i8, lmpi_grp_allgatherv_i8
87 generic :: allgatherv => dmpi_grp_allgatherv_i8, zmpi_grp_allgatherv_i8, impi_grp_allgatherv_i8, lmpi_grp_allgatherv_i8
88 procedure :: dmpi_grp_bcast, zmpi_grp_bcast, impi_grp_bcast, lmpi_grp_bcast
89 generic :: bcast => dmpi_grp_bcast, zmpi_grp_bcast, impi_grp_bcast, lmpi_grp_bcast
90 procedure :: dmpi_grp_bcast_0, zmpi_grp_bcast_0, impi_grp_bcast_0, lmpi_grp_bcast_0
91 generic :: bcast => dmpi_grp_bcast_0, zmpi_grp_bcast_0, impi_grp_bcast_0, lmpi_grp_bcast_0
92 procedure :: dmpi_grp_bcast_2, zmpi_grp_bcast_2, impi_grp_bcast_2, lmpi_grp_bcast_2
93 generic :: bcast => dmpi_grp_bcast_2, zmpi_grp_bcast_2, impi_grp_bcast_2, lmpi_grp_bcast_2
94 procedure :: dmpi_grp_bcast_3, zmpi_grp_bcast_3, impi_grp_bcast_3, lmpi_grp_bcast_3
95 generic :: bcast => dmpi_grp_bcast_3, zmpi_grp_bcast_3, impi_grp_bcast_3, lmpi_grp_bcast_3
96 procedure :: chmpi_grp_bcast_0, lompi_grp_bcast_0
97 generic :: bcast => chmpi_grp_bcast_0, lompi_grp_bcast_0
98 procedure :: dmpi_grp_bcast_0_l, zmpi_grp_bcast_0_l, impi_grp_bcast_0_l, lmpi_grp_bcast_0_l
99 generic :: bcast => dmpi_grp_bcast_0_l, zmpi_grp_bcast_0_l, impi_grp_bcast_0_l, lmpi_grp_bcast_0_l
100 procedure :: dmpi_grp_allreduce, zmpi_grp_allreduce, impi_grp_allreduce, lmpi_grp_allreduce
101 generic :: allreduce => dmpi_grp_allreduce, zmpi_grp_allreduce, impi_grp_allreduce, lmpi_grp_allreduce
102 procedure :: dmpi_grp_allreduce_2, zmpi_grp_allreduce_2, impi_grp_allreduce_2, lmpi_grp_allreduce_2
103 generic :: allreduce => dmpi_grp_allreduce_2, zmpi_grp_allreduce_2, impi_grp_allreduce_2, lmpi_grp_allreduce_2
104 procedure :: dmpi_grp_allreduce_3, zmpi_grp_allreduce_3, impi_grp_allreduce_3, lmpi_grp_allreduce_3
105 generic :: allreduce => dmpi_grp_allreduce_3, zmpi_grp_allreduce_3, impi_grp_allreduce_3, lmpi_grp_allreduce_3
106 procedure :: dmpi_grp_allreduce_0, zmpi_grp_allreduce_0, impi_grp_allreduce_0, lmpi_grp_allreduce_0
107 generic :: allreduce => dmpi_grp_allreduce_0, zmpi_grp_allreduce_0, impi_grp_allreduce_0, lmpi_grp_allreduce_0
108 procedure :: lompi_grp_allreduce_0
109 generic :: allreduce => lompi_grp_allreduce_0
110 procedure :: dmpi_grp_allreduce_inplace_0, zmpi_grp_allreduce_inplace_0
111 procedure :: impi_grp_allreduce_inplace_0, lmpi_grp_allreduce_inplace_0
112 procedure :: lompi_grp_allreduce_inplace_0
113 generic :: allreduce_inplace => dmpi_grp_allreduce_inplace_0, zmpi_grp_allreduce_inplace_0
114 generic :: allreduce_inplace => impi_grp_allreduce_inplace_0, lmpi_grp_allreduce_inplace_0
115 generic :: allreduce_inplace => lompi_grp_allreduce_inplace_0
116 procedure :: dmpi_grp_allreduce_inplace_1, zmpi_grp_allreduce_inplace_1, &
117 impi_grp_allreduce_inplace_1, lmpi_grp_allreduce_inplace_1
118 generic :: allreduce_inplace => dmpi_grp_allreduce_inplace_1, zmpi_grp_allreduce_inplace_1, &
119 impi_grp_allreduce_inplace_1, lmpi_grp_allreduce_inplace_1
120 procedure :: dmpi_grp_allgather, zmpi_grp_allgather, impi_grp_allgather, lmpi_grp_allgather
121 generic :: allgather => dmpi_grp_allgather, zmpi_grp_allgather, impi_grp_allgather, lmpi_grp_allgather
122 procedure :: dmpi_grp_allgather_0, zmpi_grp_allgather_0, impi_grp_allgather_0, lmpi_grp_allgather_0
123 generic :: allgather => dmpi_grp_allgather_0, zmpi_grp_allgather_0, impi_grp_allgather_0, lmpi_grp_allgather_0
124 procedure :: dmpi_grp_recv, zmpi_grp_recv, impi_grp_recv, lmpi_grp_recv
125 generic :: recv => dmpi_grp_recv, zmpi_grp_recv, impi_grp_recv, lmpi_grp_recv
126 procedure :: dmpi_grp_recv_0, zmpi_grp_recv_0, impi_grp_recv_0, lmpi_grp_recv_0
127 generic :: recv => dmpi_grp_recv_0, zmpi_grp_recv_0, impi_grp_recv_0, lmpi_grp_recv_0
128 procedure :: dmpi_grp_recv_2, zmpi_grp_recv_2, impi_grp_recv_2, lmpi_grp_recv_2
129 generic :: recv => dmpi_grp_recv_2, zmpi_grp_recv_2, impi_grp_recv_2, lmpi_grp_recv_2
130 procedure :: dmpi_grp_recv_3, zmpi_grp_recv_3, impi_grp_recv_3, lmpi_grp_recv_3
131 generic :: recv => dmpi_grp_recv_3, zmpi_grp_recv_3, impi_grp_recv_3, lmpi_grp_recv_3
132 procedure :: lompi_grp_recv_0
133 generic :: recv => lompi_grp_recv_0
134 procedure :: dmpi_grp_send, zmpi_grp_send, impi_grp_send, lmpi_grp_send
135 generic :: send => dmpi_grp_send, zmpi_grp_send, impi_grp_send, lmpi_grp_send
140 procedure :: dmpi_grp_send_3, zmpi_grp_send_3, impi_grp_send_3, lmpi_grp_send_3
141 generic :: send => dmpi_grp_send_3, zmpi_grp_send_3, impi_grp_send_3, lmpi_grp_send_3
185 type(mpi_comm),
intent(out) :: comm
187#if defined(HAVE_OPENMP)
190 call mpi_init_thread(mpi_thread_funneled, provided,
mpi_err)
194 comm = mpi_comm_world
196 comm = mpi_comm_undefined
206 integer :: iam, nprocs
207 integer :: blacs_default_system_context
210 call blacs_pinfo(iam, nprocs)
249 type(mpi_comm),
intent(in) :: comm
253 if (grp%comm == mpi_comm_null) grp%comm = mpi_comm_undefined
256 if (grp%comm == mpi_comm_undefined)
then
261 call mpi_comm_rank(grp%comm, grp%rank,
mpi_err)
264 call mpi_comm_size(grp%comm, grp%size,
mpi_err)
289 integer,
intent(in) :: error
292 character(len=MPI_MAX_ERROR_STRING) :: message
293 integer :: length, temp
295 if (error /= mpi_success )
then
296 call mpi_error_string( error, message, length, temp)
297 print * , message(1:length)
298 call mpi_abort(mpi_comm_world, 1 , temp)
305 type(
mpi_grp_t),
intent(out) :: mpi_grp_out
306 type(
mpi_grp_t),
intent(in) :: mpi_grp_in
308 mpi_grp_out%comm = mpi_grp_in%comm
309 mpi_grp_out%size = mpi_grp_in%size
310 mpi_grp_out%rank = mpi_grp_in%rank
315 type(
mpi_grp_t),
intent(out) :: mpi_grp_out
316 type(
mpi_grp_t),
intent(in) :: mpi_grp_in
319 call mpi_comm_dup(mpi_grp_in%comm, mpi_grp_out%comm,
mpi_err)
321 call mpi_comm_rank(mpi_grp_out%comm, mpi_grp_out%rank,
mpi_err)
323 call mpi_comm_size(mpi_grp_out%comm, mpi_grp_out%size,
mpi_err)
341 if (mpi_grp%comm == mpi_comm_undefined)
return
346 call mpi_barrier(mpi_grp%comm,
mpi_err)
355 character(len=*),
intent(inout) :: buf
356 integer,
intent(in) :: cnt
357 type(mpi_datatype),
intent(in) :: sendtype
358 integer,
intent(in) :: root
364 if (mpi_grp%comm /= mpi_comm_undefined)
then
365 call mpi_bcast(buf, cnt, sendtype, root, mpi_grp%comm,
mpi_err)
375 logical,
intent(inout) :: buf
376 integer,
intent(in) :: cnt
377 type(mpi_datatype),
intent(in) :: sendtype
378 integer,
intent(in) :: root
384 if (mpi_grp%comm /= mpi_comm_undefined)
then
385 call mpi_bcast(buf, cnt, sendtype, root, mpi_grp%comm,
mpi_err)
396 logical,
target,
intent(in) :: sendbuf
397 logical,
target,
intent(out) :: recvbuf
398 integer,
intent(in) :: count
400 logical,
pointer :: send(:), recv(:)
402 call c_f_pointer(c_loc(sendbuf), send, [count])
403 call c_f_pointer(c_loc(recvbuf), recv, [count])
412 logical,
intent(in) :: sendbuf
413 logical,
intent(out) :: recvbuf
414 integer,
intent(in) :: count
415 type(mpi_datatype),
intent(in):: datatype
416 type(mpi_op),
intent(in) :: op
422 if (mpi_grp%comm /= mpi_comm_undefined)
then
423 call mpi_allreduce(sendbuf, recvbuf, count, datatype, op, &
438 logical,
intent(inout) :: recvbuf
439 integer,
intent(in) :: count
440 type(mpi_datatype),
intent(in) :: datatype
441 type(mpi_op),
intent(in) :: op
447 if (mpi_grp%comm /= mpi_comm_undefined)
then
448 call mpi_allreduce(mpi_in_place, recvbuf, count, datatype, op, &
457 subroutine lompi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
459 logical,
intent(out) :: recvbuf
460 integer,
intent(in) :: recvcount
461 type(mpi_datatype),
intent(in) :: recvtype
462 integer,
intent(in) :: source
463 integer,
optional,
intent(in) :: tag
468 if (
present(tag)) tag_ = tag
469 if (mpi_grp%comm == mpi_comm_undefined)
return
473 call mpi_recv(recvbuf, recvcount, recvtype, source, tag_, mpi_grp%comm, mpi_status_ignore,
mpi_err)
479 subroutine lompi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
481 logical,
intent(out) :: sendbuf
482 integer,
intent(in) :: sendcount
483 type(mpi_datatype),
intent(in) :: sendtype
484 integer,
intent(in) :: dest
485 integer,
optional,
intent(in) :: tag
490 if (
present(tag)) tag_ = tag
491 if (mpi_grp%comm == mpi_comm_undefined)
return
495 call mpi_send(sendbuf, sendcount, sendtype, dest, tag_, mpi_grp%comm,
mpi_err)
503 type(mpi_request),
intent(inout) :: request
505 if (mpi_grp%comm == mpi_comm_undefined)
return
509 call mpi_wait(request, mpi_status_ignore,
mpi_err)
517 integer,
intent(in) :: count
518 type(mpi_request),
intent(inout) :: requests(:)
520 if (mpi_grp%comm == mpi_comm_undefined)
return
524 call mpi_waitall(count, requests, mpi_statuses_ignore,
mpi_err)
533 if (mpi_grp%comm /= mpi_comm_undefined)
then
538 call mpi_abort(mpi_grp%comm, 999,
mpi_err)
547 real(real64) function mpi_get_Wtime() result(now)
557#include "mpi_inc.F90"
560#include "complex.F90"
561#include "mpi_inc.F90"
564#include "integer.F90"
565#include "mpi_inc.F90"
568#include "integer8.F90"
569#include "mpi_inc.F90"
This module contains interfaces for BLACS routines Interfaces are from http:
integer, parameter, public c_mpi_allreduce
subroutine, public mpi_debug_in(comm, index)
integer, parameter, public c_mpi_bcast
integer, parameter, public c_mpi_barrier
subroutine, public mpi_debug_out(comm, index)
subroutine mpi_grp_abort(mpi_grp)
subroutine impi_grp_irecv(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine zmpi_grp_isend_0(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine mpi_grp_duplicate(mpi_grp_out, mpi_grp_in)
subroutine impi_grp_irecv_0(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine lmpi_grp_isend(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine lompi_grp_copy_0(sendbuf, recvbuf, count)
subroutine zmpi_grp_irecv_0_int64(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine blacs_init()
Initialize BLACS to enable use of SCALAPACK.
real(real64) function, public mpi_get_wtime()
. Returns an elapsed time on the calling processor.
subroutine dmpi_grp_irecv_3(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine zmpi_grp_isend(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine dmpi_grp_isend_3(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine zmpi_grp_irecv_3(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine lompi_grp_bcast_0(mpi_grp, buf, cnt, sendtype, root)
logical function mpi_grp_is_root(grp)
subroutine impi_grp_irecv_2(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine zmpi_grp_irecv(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine mpi_grp_copy(mpi_grp_out, mpi_grp_in)
subroutine zmpi_grp_isend_3(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine impi_grp_isend_2(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine impi_grp_isend(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine impi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
subroutine lompi_grp_allreduce_inplace_0(mpi_grp, recvbuf, count, datatype, op)
subroutine impi_grp_isend_0_int64(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine zmpi_grp_irecv_2(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine dmpi_grp_isend_0(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine zmpi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
subroutine dmpi_grp_irecv(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine lmpi_grp_irecv_0_int64(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine dmpi_grp_send_2(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
subroutine impi_grp_irecv_0_int64(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine lompi_grp_recv_0(mpi_grp, recvbuf, recvcount, recvtype, source, tag)
subroutine dmpi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
subroutine mpi_grp_wait(mpi_grp, request)
subroutine lmpi_grp_irecv(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
type(mpi_grp_t), public mpi_world
subroutine impi_grp_isend_0(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine mpi_mod_end()
Finalize MPI, and optionally BLACS.
logical pure function, private not_in_openmp()
subroutine lmpi_grp_isend_2(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine mpi_grp_init(grp, comm)
Initialize MPI group instance.
subroutine zmpi_grp_send_2(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
subroutine dmpi_grp_irecv_0(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine impi_grp_irecv_3(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine impi_grp_isend_3(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine dmpi_grp_isend(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine dmpi_grp_isend_2(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine zmpi_grp_isend_0_int64(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine lmpi_grp_irecv_3(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine mpi_grp_barrier(mpi_grp)
subroutine zmpi_grp_irecv_0(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine lmpi_grp_send_2(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
subroutine mpi_init_comm(comm)
Wrapper for MPI_COMM_WORLD initialisation.
subroutine impi_grp_send_2(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
subroutine dmpi_grp_irecv_2(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
integer, public mpi_err
used to store return values of mpi calls
subroutine lmpi_grp_isend_0_int64(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine dmpi_grp_irecv_0_int64(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine lmpi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
subroutine lmpi_grp_isend_0(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine dmpi_grp_isend_0_int64(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine zmpi_grp_isend_2(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine mpi_grp_waitall(mpi_grp, count, requests)
subroutine lompi_grp_allreduce_0(mpi_grp, sendbuf, recvbuf, count, datatype, op)
subroutine lmpi_grp_irecv_0(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
subroutine lompi_grp_send_0(mpi_grp, sendbuf, sendcount, sendtype, dest, tag)
subroutine mpi_error_check(error)
subroutine lmpi_grp_isend_3(mpi_grp, sendbuf, sendcount, sendtype, source, request, tag)
subroutine chmpi_grp_bcast_0(mpi_grp, buf, cnt, sendtype, root)
subroutine lmpi_grp_irecv_2(mpi_grp, recvbuf, recvcount, recvtype, source, request, tag)
This is defined even when running serial.