pic_mpi_f08 Module

Modern MPI wrapper module using mpi_f08 interface

This module provides a high-level object-oriented interface to MPI using the modern mpi_f08 bindings. It wraps MPI communicators and requests into derived types with type-bound procedures. Allocate window memory and create window in one call (2D array)

This is more efficient than separate allocation + win_create. The baseptr is associated with the allocated memory. Memory is freed when window is finalized. Allocate window memory for integer64 array

Used for atomic counters in dynamic load balancing. Allocate window memory for single precision array Allocate window memory for integer32 array Fence synchronization for active target RMA

Completes all pending RMA operations. Use before/after Get/Put/Accumulate operations. Lock window for passive target RMA

Begins RMA access epoch for specified target rank. Must be paired with unlock. Unlock window for passive target RMA Lock window on all ranks for passive target RMA

Begins RMA access epoch for all ranks simultaneously. More efficient than individual locks when accessing multiple ranks. Must be paired with unlock_all. Unlock window on all ranks for passive target RMA Flush pending RMA operations to a specific rank

Ensures all RMA operations to target rank have completed. Use within lock_all/unlock_all epoch. Flush pending RMA operations to all ranks

Ensures all RMA operations to all ranks have completed. Use within lock_all/unlock_all epoch. Get data from remote window

Retrieves data from target rank’s window into local buffer. Must be called between fence or lock/unlock pairs. Put data to remote window

Sends data from local buffer to target rank’s window. Must be called between fence or lock/unlock pairs. Non-blocking get data from remote window

Retrieves data from target rank’s window into local buffer. Returns a request handle for later completion via wait(). Must be called between lock_all/unlock_all pairs. Non-blocking put data to remote window

Sends data from local buffer to target rank’s window. Returns a request handle for later completion via wait(). Must be called between lock_all/unlock_all pairs. Accumulate data to remote window

Atomically adds local buffer to target rank’s window. Critical for DDI_ACC (Fock matrix accumulation). Atomic fetch-and-add for load balancing

Atomically increments remote counter and returns old value. Used for DDI_DLBNEXT (dynamic load balancing). Allreduce for scalar double precision

In-place global reduction. Replaces DDI_GSUMF for scalars. Allreduce for double precision array

In-place global reduction. Replaces DDI_GSUMF for arrays. This is THE most-called DDI function (1,301 calls in GAMESS). Allreduce for scalar integer

In-place global reduction. Replaces DDI_GSUMI for scalars. Allreduce for integer array

In-place global reduction. Replaces DDI_GSUMI for arrays. Non-in-place allreduce for scalar double precision

Reduces sendbuf and stores result in recvbuf. Useful for timestep reduction where local value must be preserved. Non-in-place allreduce for double precision array

Reduces sendbuf and stores result in recvbuf. Allreduce for single-precision scalar Allreduce for single-precision array Non-in-place allreduce for scalar single-precision Non-in-place allreduce for single-precision array


Uses

  • module~~pic_mpi_f08~~UsesGraph module~pic_mpi_f08 pic_mpi_f08 mpi_f08 mpi_f08 module~pic_mpi_f08->mpi_f08 pic_types pic_types module~pic_mpi_f08->pic_types

Used by

  • module~~pic_mpi_f08~~UsedByGraph module~pic_mpi_f08 pic_mpi_f08 module~pic_mpi_lib pic_mpi_lib module~pic_mpi_lib->module~pic_mpi_f08 module~darrays darrays module~darrays->module~pic_mpi_lib module~darrays_core darrays_core module~darrays->module~darrays_core module~darrays_dlb darrays_dlb module~darrays->module~darrays_dlb module~darrays_types darrays_types module~darrays->module~darrays_types module~darrays_core->module~pic_mpi_lib module~darrays_core->module~darrays_types module~darrays_dlb->module~pic_mpi_lib module~darrays_types->module~pic_mpi_lib

Interfaces

public interface allgather

  • private subroutine comm_allgather_integer(comm, sendbuf, recvbuf)

    Gathers integer values from all processes in the communicator

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(in) :: sendbuf
    integer(kind=int32), intent(out) :: recvbuf(:)

public interface allreduce

  • private subroutine allreduce_dp(comm, buffer, op)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(inout) :: buffer
    type(MPI_Op), intent(in), optional :: op
  • private subroutine allreduce_dp_array(comm, buffer, count, op)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(inout) :: buffer(:)
    integer, intent(in), optional :: count
    type(MPI_Op), intent(in), optional :: op
  • private subroutine allreduce_sp(comm, buffer, op)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(inout) :: buffer
    type(MPI_Op), intent(in), optional :: op
  • private subroutine allreduce_sp_array(comm, buffer, count, op)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(inout) :: buffer(:)
    integer, intent(in), optional :: count
    type(MPI_Op), intent(in), optional :: op
  • private subroutine allreduce_i32(comm, buffer, op)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(inout) :: buffer
    type(MPI_Op), intent(in), optional :: op
  • private subroutine allreduce_i32_array(comm, buffer, count, op)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(inout) :: buffer(:)
    integer, intent(in), optional :: count
    type(MPI_Op), intent(in), optional :: op
  • private subroutine allreduce_dp_to(comm, sendbuf, recvbuf, op)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(in) :: sendbuf
    real(kind=dp), intent(out) :: recvbuf
    type(MPI_Op), intent(in), optional :: op
  • private subroutine allreduce_dp_array_to(comm, sendbuf, recvbuf, count, op)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(in) :: sendbuf(:)
    real(kind=dp), intent(out) :: recvbuf(:)
    integer, intent(in), optional :: count
    type(MPI_Op), intent(in), optional :: op
  • private subroutine allreduce_sp_to(comm, sendbuf, recvbuf, op)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(in) :: sendbuf
    real(kind=sp), intent(out) :: recvbuf
    type(MPI_Op), intent(in), optional :: op
  • private subroutine allreduce_sp_array_to(comm, sendbuf, recvbuf, count, op)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(in) :: sendbuf(:)
    real(kind=sp), intent(out) :: recvbuf(:)
    integer, intent(in), optional :: count
    type(MPI_Op), intent(in), optional :: op

public interface bcast

  • private subroutine comm_bcast_integer(comm, buffer, count, root)

    Broadcasts integer data from root process to all processes in communicator

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(inout) :: buffer
    integer(kind=int32), intent(in) :: count
    integer(kind=int32), intent(in) :: root
  • private subroutine comm_bcast_integer64(comm, buffer, count, root)

    Broadcasts integer64 data from root process to all processes in communicator

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int64), intent(inout) :: buffer
    integer(kind=int32), intent(in) :: count
    integer(kind=int32), intent(in) :: root
  • private subroutine comm_bcast_real_dp(comm, buffer, count, root)

    Broadcasts double precision data from root process to all processes in communicator

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(inout) :: buffer
    integer(kind=int32), intent(in) :: count
    integer(kind=int32), intent(in) :: root
  • private subroutine comm_bcast_real_dp_array(comm, buffer, count, root)

    Broadcasts double precision array from root process to all processes in communicator

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(inout) :: buffer(:)
    integer(kind=int32), intent(in) :: count
    integer(kind=int32), intent(in) :: root
  • private subroutine comm_bcast_real_sp(comm, buffer, count, root)

    Broadcasts single-precision data from root process to all processes in communicator

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(inout) :: buffer
    integer(kind=int32), intent(in) :: count
    integer(kind=int32), intent(in) :: root
  • private subroutine comm_bcast_real_sp_array(comm, buffer, count, root)

    Broadcasts single-precision array from root process to all processes in communicator

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(inout) :: buffer(:)
    integer(kind=int32), intent(in) :: count
    integer(kind=int32), intent(in) :: root

public interface comm_null

  • private function create_null_comm() result(comm)

    Creates an invalid/null communicator object that can be used for initialization or to represent absence of a communicator.

    Arguments

    None

    Return Value type(comm_t)

public interface comm_world

  • private function create_world_comm() result(comm)

    Creates a new communicator that duplicates MPI_COMM_WORLD. This is the standard way to obtain a communicator for application use.

    Arguments

    None

    Return Value type(comm_t)

public interface iprobe

  • private subroutine comm_iprobe(comm, source, tag, message_pending, status)

    Non-blocking probe for incoming messages

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    logical, intent(out) :: message_pending
    type(MPI_Status), intent(out) :: status

public interface irecv

  • private subroutine comm_irecv_integer(comm, data, source, tag, request)

    Initiates a non-blocking receive operation. The request must be waited on using wait() or test() before the buffer can be used.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(out) :: data
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_irecv_integer_array(comm, data, source, tag, request)

    Initiates a non-blocking receive operation. The request must be waited on using wait() or test() before the buffer can be used.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(out) :: data(:)
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_irecv_integer64(comm, data, source, tag, request)

    Initiates a non-blocking receive operation. The request must be waited on using wait() or test() before the buffer can be used.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int64), intent(out) :: data
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_irecv_integer64_array(comm, data, source, tag, request)

    Initiates a non-blocking receive operation. The request must be waited on using wait() or test() before the buffer can be used.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int64), intent(out) :: data(:)
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_irecv_real_dp(comm, data, source, tag, request)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(out) :: data
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_irecv_real_dp_array(comm, data, source, tag, request)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(out) :: data(:)
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_irecv_real_dp_array_2d(comm, data, source, tag, request)

    Non-blocking receive of a 2D allocatable double precision real array

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(inout), allocatable :: data(:,:)
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_irecv_real_sp(comm, data, source, tag, request)

    Non-blocking receive of a single single-precision real

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(out) :: data
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_irecv_real_sp_array(comm, data, source, tag, request)

    Non-blocking receive of a single-precision real array

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(out) :: data(:)
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_irecv_real_sp_array_2d(comm, data, source, tag, request)

    Non-blocking receive of a 2D allocatable single-precision real array

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(inout), allocatable :: data(:,:)
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_irecv_logical(comm, data, source, tag, request)

    Non-blocking receive of a logical value

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    logical, intent(out) :: data
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request

public interface isend

  • private subroutine comm_isend_integer(comm, data, dest, tag, request)

    Initiates a non-blocking send operation. The request must be waited on using wait() or test() before the buffer can be reused.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(in) :: data
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_isend_integer_array(comm, data, dest, tag, request)

    Initiates a non-blocking send operation. The request must be waited on using wait() or test() before the buffer can be reused.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(in) :: data(:)
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_isend_integer64(comm, data, dest, tag, request)

    Initiates a non-blocking send operation. The request must be waited on using wait() or test() before the buffer can be reused.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int64), intent(in) :: data
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_isend_integer64_array(comm, data, dest, tag, request)

    Initiates a non-blocking send operation. The request must be waited on using wait() or test() before the buffer can be reused.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int64), intent(in) :: data(:)
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_isend_real_dp(comm, data, dest, tag, request)

    Initiates a non-blocking send operation. The request must be waited on using wait() or test() before the buffer can be reused.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(in) :: data
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_isend_real_dp_array(comm, data, dest, tag, request)

    Initiates a non-blocking send operation. The request must be waited on using wait() or test() before the buffer can be reused.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(in) :: data(:)
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_isend_real_dp_array_2d(comm, data, dest, tag, request)

    Non-blocking send of a 2D double precision real array

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(in) :: data(:,:)
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • public subroutine comm_isend_real_dp_array_2d_n(comm, data, count, dest, tag, request)

    Non-blocking send of a contiguous 2D double-precision array with explicit count — no dim-prefix protocol. Pairs with comm_recv_real_dp_array_2d_n on the receive side. The caller must keep data valid until wait/waitall on the returned request completes.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(in) :: data(:,:)
    integer(kind=int32), intent(in) :: count
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_isend_real_sp(comm, data, dest, tag, request)

    Non-blocking send of a single single-precision real

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(in) :: data
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_isend_real_sp_array(comm, data, dest, tag, request)

    Non-blocking send of a single-precision real array

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(in) :: data(:)
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_isend_real_sp_array_2d(comm, data, dest, tag, request)

    Non-blocking send of a 2D single-precision real array

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(in) :: data(:,:)
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request
  • private subroutine comm_isend_logical(comm, data, dest, tag, request)

    Non-blocking send of a logical value

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    logical, intent(in) :: data
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
    type(request_t), intent(out) :: request

public interface probe

  • private subroutine comm_probe(comm, source, tag, status)

    Blocking probe for incoming messages. Returns once a message matching (source, tag) is queued at the receiver — caller reads status%MPI_SOURCE and status%MPI_TAG to decide who’s talking and what kind of message it is, then issues the matching recv. Use MPI_ANY_SOURCE / MPI_ANY_TAG to dispatch on whichever rank speaks first.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status), intent(out) :: status

public interface recv

  • private subroutine comm_recv_integer(comm, data, source, tag, status)

    Blocking receive of an integer from specified source. Use MPI_ANY_SOURCE or MPI_ANY_TAG for wildcards.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(out) :: data
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status), intent(out), optional :: status
  • private subroutine comm_recv_integer_array(comm, data, source, tag, status)

    Blocking receive of an integer array from specified source.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(out), allocatable :: data(:)
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status), intent(out) :: status
  • private subroutine comm_recv_integer64(comm, data, source, tag, status)

    Blocking receive of an integer64 from specified source. Use MPI_ANY_SOURCE or MPI_ANY_TAG for wildcards.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int64), intent(out) :: data
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status), intent(out), optional :: status
  • private subroutine comm_recv_integer64_array(comm, data, source, tag, status)

    Blocking receive of an integer64 array from specified source. Array is automatically allocated to the correct size.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int64), intent(out), allocatable :: data(:)
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status), intent(out) :: status
  • private subroutine comm_recv_real_dp(comm, data, source, tag, status)

    Blocking receive of a single double precision real from specified source.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(out) :: data
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status), intent(out), optional :: status
  • private subroutine comm_recv_real_dp_array(comm, data, source, tag, status)

    Blocking receive of a double precision real array from specified source.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(out), allocatable :: data(:)
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status) :: status
  • private subroutine comm_recv_real_dp_array_2d(comm, data, source, tag, status)

    Blocking receive of a 2D allocatable double precision real array

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(inout), allocatable :: data(:,:)
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status), intent(out) :: status
  • private subroutine comm_recv_real_sp(comm, data, source, tag, status)

    Blocking receive of a single single-precision real from specified source.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(out) :: data
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status), intent(out), optional :: status
  • private subroutine comm_recv_real_sp_array(comm, data, source, tag, status)

    Blocking receive of a single-precision real array from specified source.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(out), allocatable :: data(:)
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status) :: status
  • private subroutine comm_recv_real_sp_array_2d(comm, data, source, tag, status)

    Blocking receive of a 2D allocatable single-precision real array

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(inout), allocatable :: data(:,:)
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status), intent(out) :: status
  • private subroutine comm_recv_logical(comm, data, source, tag, status)

    Blocking receive of a logical value from specified source

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    logical, intent(out) :: data
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status), intent(out), optional :: status
  • public subroutine comm_recv_integer_array_n(comm, data, count, source, tag, status)

    Blocking receive into a pre-allocated int32 array.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(out) :: data(:)
    integer(kind=int32), intent(in) :: count
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status), intent(out), optional :: status
  • public subroutine comm_recv_integer64_array_n(comm, data, count, source, tag, status)

    Blocking receive into a pre-allocated int64 array.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int64), intent(out) :: data(:)
    integer(kind=int32), intent(in) :: count
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status), intent(out), optional :: status
  • public subroutine comm_recv_real_dp_array_n(comm, data, count, source, tag, status)

    Blocking receive into a pre-allocated double-precision array.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(out) :: data(:)
    integer(kind=int32), intent(in) :: count
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status), intent(out), optional :: status
  • public subroutine comm_recv_real_sp_array_n(comm, data, count, source, tag, status)

    Blocking receive into a pre-allocated single-precision array.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(out) :: data(:)
    integer(kind=int32), intent(in) :: count
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status), intent(out), optional :: status
  • public subroutine comm_recv_real_dp_array_2d_n(comm, data, count, source, tag, status)

    Blocking receive of a contiguous 2D double-precision array with explicit count. No dim-prefix protocol — the caller has already shaped data. Mirrors comm_send_real_dp_array_2d_n.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(out) :: data(:,:)
    integer(kind=int32), intent(in) :: count
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status), intent(out), optional :: status
  • public subroutine comm_recv_integer_array_2d_n(comm, data, count, source, tag, status)

    Blocking recv of a contiguous 2D int32 array with explicit count.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(out) :: data(:,:)
    integer(kind=int32), intent(in) :: count
    integer(kind=int32), intent(in) :: source
    integer(kind=int32), intent(in) :: tag
    type(MPI_Status), intent(out), optional :: status

public interface send

  • private subroutine comm_send_integer(comm, data, dest, tag)

    Blocking send of an integer to specified destination

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(in) :: data
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
  • private subroutine comm_send_integer_array(comm, data, dest, tag)

    Blocking send of an integer array to specified destination

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(in) :: data(:)
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
  • private subroutine comm_send_integer64(comm, data, dest, tag)

    Blocking send of an integer64 to specified destination

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int64), intent(in) :: data
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
  • private subroutine comm_send_integer64_array(comm, data, dest, tag)

    Blocking send of an integer64 array to specified destination

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int64), intent(in) :: data(:)
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
  • private subroutine comm_send_real_dp(comm, data, dest, tag)

    Blocking send of a single double precision real to specified destination

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(in) :: data
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
  • private subroutine comm_send_real_dp_array(comm, data, dest, tag)

    Blocking send of a double precision real array to specified destination

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(in) :: data(:)
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
  • private subroutine comm_send_real_dp_array_2d(comm, data, dest, tag)

    Blocking send of a 2D double precision real array to specified destination

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(in) :: data(:,:)
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
  • public subroutine comm_send_real_dp_array_2d_n(comm, data, count, dest, tag)

    Blocking send of a contiguous 2D double-precision array using an explicit count. Unlike comm_send_real_dp_array_2d, this variant does NOT prefix the message with the dimensions — caller and receiver agree on the shape via the protocol. The receiver uses comm_recv_real_dp_array_2d_n (or any of the _array_n overloads) with the same count.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), intent(in) :: data(:,:)
    integer(kind=int32), intent(in) :: count
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
  • public subroutine comm_send_integer_array_2d_n(comm, data, count, dest, tag)

    Blocking send of a contiguous 2D int32 array using an explicit count, no dim-prefix. Pairs with comm_recv_integer_array_2d_n.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(in) :: data(:,:)
    integer(kind=int32), intent(in) :: count
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
  • private subroutine comm_send_real_sp(comm, data, dest, tag)

    Blocking send of a single single-precision real to specified destination

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(in) :: data
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
  • private subroutine comm_send_real_sp_array(comm, data, dest, tag)

    Blocking send of a single-precision real array to specified destination

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(in) :: data(:)
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
  • private subroutine comm_send_real_sp_array_2d(comm, data, dest, tag)

    Blocking send of a 2D single-precision real array to specified destination

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=sp), intent(in) :: data(:,:)
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag
  • private subroutine comm_send_logical(comm, data, dest, tag)

    Blocking send of a logical value to specified destination

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    logical, intent(in) :: data
    integer(kind=int32), intent(in) :: dest
    integer(kind=int32), intent(in) :: tag

public interface test

  • private subroutine request_test(request, flag, status)

    Arguments

    Type IntentOptional Attributes Name
    type(request_t), intent(inout) :: request
    logical, intent(out) :: flag
    type(MPI_Status), intent(out), optional :: status

public interface wait

  • private subroutine request_wait(request, status)

    Blocks until the operation associated with the request completes. The request is freed after completion.

    Arguments

    Type IntentOptional Attributes Name
    type(request_t), intent(inout) :: request
    type(MPI_Status), intent(out), optional :: status

public interface waitall

  • private subroutine request_waitall(requests, statuses)

    Blocks until all operations in the request array complete. All requests are freed after completion.

    Arguments

    Type IntentOptional Attributes Name
    type(request_t), intent(inout) :: requests(:)
    type(MPI_Status), intent(out), optional :: statuses(:)

public interface win_allocate

  • private subroutine create_win_allocate_dp_1d(comm, length, baseptr, win)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(in) :: length
    real(kind=dp), intent(out), pointer :: baseptr(:)
    type(win_t), intent(out) :: win
  • private subroutine create_win_allocate_dp_2d(comm, dim1, dim2, baseptr, win)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(in) :: dim1
    integer(kind=int32), intent(in) :: dim2
    real(kind=dp), intent(out), pointer :: baseptr(:,:)
    type(win_t), intent(out) :: win
  • private subroutine create_win_allocate_sp_1d(comm, length, baseptr, win)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(in) :: length
    real(kind=sp), intent(out), pointer :: baseptr(:)
    type(win_t), intent(out) :: win
  • private subroutine create_win_allocate_i32_1d(comm, length, baseptr, win)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(in) :: length
    integer(kind=int32), intent(out), pointer :: baseptr(:)
    type(win_t), intent(out) :: win
  • private subroutine create_win_allocate_i64_1d(comm, length, baseptr, win)

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    integer(kind=int32), intent(in) :: length
    integer(kind=int64), intent(out), pointer :: baseptr(:)
    type(win_t), intent(out) :: win

public interface win_create

  • private function create_win_dp_array(comm, base, win_size) result(win)

    Create MPI window for RMA operations

    Creates a window exposing local memory to remote RMA operations. Used for DDI distributed arrays.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm
    real(kind=dp), target :: base(:)
    integer(kind=MPI_ADDRESS_KIND), intent(in) :: win_size

    Return Value type(win_t)

public interface win_create_dynamic

  • private function create_win_dynamic(comm) result(win)

    Create dynamic MPI window

    For windows where memory will be attached later. Useful for load balancing counters.

    Arguments

    Type IntentOptional Attributes Name
    type(comm_t), intent(in) :: comm

    Return Value type(win_t)


Derived Types

type, public ::  comm_t

MPI communicator wrapper type

Read more…

Components

Type Visibility Attributes Name Initial
logical, private :: is_valid = .false.

Validity flag

type(MPI_Comm), private :: m_comm = MPI_COMM_NULL

Internal MPI communicator

integer(kind=int32), private :: m_rank = -1

Cached rank in this communicator

integer(kind=int32), private :: m_size = -1

Cached size of this communicator

Type-Bound Procedures

procedure, public :: barrier => comm_barrier

Synchronization barrier

procedure, public :: discard_leader => comm_discard_leader

Create communicator without leader

procedure, public :: discard_to => comm_discard_to

Create communicator with first N ranks

procedure, public :: duplicate => comm_duplicate

Duplicate communicator

procedure, public :: finalize => comm_finalize

Free communicator resources

procedure, public :: get => comm_get

Get underlying MPI_Comm

procedure, public :: is_null => comm_is_null

Check if communicator is null

procedure, public :: leader => comm_leader

Check if this rank is leader (rank 0)

procedure, public :: rank => comm_rank

Get rank in communicator

procedure, public :: size => m_size_func

Get size of communicator

procedure, public :: split => comm_split_shared

Split into shared memory communicators

procedure, public :: split_by => comm_split_by_color

Split communicator by color

type, public ::  request_t

Wraps MPI_Request to provide object-oriented interface for non-blocking communication operations (isend, irecv)

Components

Type Visibility Attributes Name Initial
logical, private :: is_valid = .false.

Validity flag

type(MPI_Request), private :: m_request = MPI_REQUEST_NULL

Internal MPI request handle

Type-Bound Procedures

procedure, public :: free => request_free

Free the request

procedure, public :: get => request_get

Get underlying MPI_Request

procedure, public :: is_null => request_is_null

Check if request is null

type, public ::  win_t

MPI-3 Window type for one-sided communication (RMA)

Read more…

Components

Type Visibility Attributes Name Initial
logical, private :: is_valid = .false.
type(MPI_Win), private :: m_win = MPI_WIN_NULL

Type-Bound Procedures

procedure, public :: accumulate_dp => win_accumulate_dp
procedure, public :: accumulate_i32 => win_accumulate_i32
procedure, public :: accumulate_i64 => win_accumulate_i64
procedure, public :: accumulate_sp => win_accumulate_sp
procedure, public :: fence => win_fence
procedure, public :: fetch_and_add_i64 => win_fetch_and_add_i64
procedure, public :: finalize => win_finalize
procedure, public :: flush => win_flush
procedure, public :: flush_all => win_flush_all
procedure, public :: get_dp => win_get_dp
procedure, public :: get_handle => win_get_handle
procedure, public :: get_i32 => win_get_i32
procedure, public :: get_i64 => win_get_i64
procedure, public :: get_sp => win_get_sp
procedure, public :: is_null => win_is_null
procedure, public :: lock => win_lock
procedure, public :: lock_all => win_lock_all
procedure, public :: put_dp => win_put_dp
procedure, public :: put_i32 => win_put_i32
procedure, public :: put_i64 => win_put_i64
procedure, public :: put_sp => win_put_sp
procedure, public :: rget_dp => win_rget_dp
procedure, public :: rget_i32 => win_rget_i32
procedure, public :: rget_i64 => win_rget_i64
procedure, public :: rget_sp => win_rget_sp
procedure, public :: rput_dp => win_rput_dp
procedure, public :: rput_i32 => win_rput_i32
procedure, public :: rput_i64 => win_rput_i64
procedure, public :: rput_sp => win_rput_sp
procedure, public :: unlock => win_unlock
procedure, public :: unlock_all => win_unlock_all

Functions

public function pic_mpi_query_thread_level() result(thread_level)

Query the current MPI thread support level

Arguments

None

Return Value integer(kind=int32)

private function comm_discard_leader(this) result(new_comm)

Arguments

Type IntentOptional Attributes Name
class(comm_t), intent(in) :: this

Return Value type(comm_t)

private function comm_discard_to(this, num_ranks) result(new_comm)

Arguments

Type IntentOptional Attributes Name
class(comm_t), intent(in) :: this
integer, intent(in) :: num_ranks

Return Value type(comm_t)

private function comm_duplicate(this) result(new_comm)

Arguments

Type IntentOptional Attributes Name
class(comm_t), intent(in) :: this

Return Value type(comm_t)

private function comm_get(this) result(mpi_comm_out)

Arguments

Type IntentOptional Attributes Name
class(comm_t), intent(in) :: this

Return Value type(MPI_Comm)

private pure function comm_is_null(this) result(is_null)

Arguments

Type IntentOptional Attributes Name
class(comm_t), intent(in) :: this

Return Value logical

private pure function comm_leader(this) result(is_leader)

Returns true if the calling process has rank 0

Arguments

Type IntentOptional Attributes Name
class(comm_t), intent(in) :: this

Return Value logical

private pure function comm_rank(this) result(rank)

Returns the 0-indexed rank of the calling process

Arguments

Type IntentOptional Attributes Name
class(comm_t), intent(in) :: this

Return Value integer

private function comm_split_by_color(this, color) result(new_comm)

Partitions the communicator into disjoint subgroups based on color. Processes with the same color end up in the same new communicator.

Arguments

Type IntentOptional Attributes Name
class(comm_t), intent(in) :: this
integer, intent(in) :: color

Return Value type(comm_t)

private function comm_split_shared(this) result(new_comm)

Creates a new communicator containing only processes that share memory with each other (typically processes on the same node)

Arguments

Type IntentOptional Attributes Name
class(comm_t), intent(in) :: this

Return Value type(comm_t)

private function create_comm_from_mpi(mpi_comm_in) result(comm)

Internal helper function that wraps an MPI_Comm into a comm_t object and caches rank and size information

Arguments

Type IntentOptional Attributes Name
type(MPI_Comm), intent(in) :: mpi_comm_in

Return Value type(comm_t)

private function create_null_comm() result(comm)

Creates an invalid/null communicator object that can be used for initialization or to represent absence of a communicator.

Arguments

None

Return Value type(comm_t)

private function create_win_dp_array(comm, base, win_size) result(win)

Create MPI window for RMA operations

Read more…

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), target :: base(:)
integer(kind=MPI_ADDRESS_KIND), intent(in) :: win_size

Return Value type(win_t)

private function create_win_dynamic(comm) result(win)

Create dynamic MPI window

Read more…

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm

Return Value type(win_t)

private function create_world_comm() result(comm)

Creates a new communicator that duplicates MPI_COMM_WORLD. This is the standard way to obtain a communicator for application use.

Arguments

None

Return Value type(comm_t)

private pure function m_size_func(this) result(size)

Returns the number of processes in the communicator

Arguments

Type IntentOptional Attributes Name
class(comm_t), intent(in) :: this

Return Value integer

private function request_get(this) result(mpi_request_out)

Retrieves the underlying MPI_Request handle

Arguments

Type IntentOptional Attributes Name
class(request_t), intent(in) :: this

Return Value type(MPI_Request)

private pure function request_is_null(this) result(is_null)

Checks if the request is null/invalid

Arguments

Type IntentOptional Attributes Name
class(request_t), intent(in) :: this

Return Value logical

private function win_get_handle(this) result(mpi_win_out)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this

Return Value type(MPI_Win)

private pure function win_is_null(this) result(is_null)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this

Return Value logical


Subroutines

public subroutine abort_comm(comm, errorcode)

Aborts all processes in the communicator with the given error code

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(in) :: errorcode

public subroutine comm_irecv_real_dp_array_n(comm, data, count, source, tag, request)

Non-blocking receive with explicit count (for device pointers in host_data blocks)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp) :: data(:)
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

public subroutine comm_irecv_real_sp_array_n(comm, data, count, source, tag, request)

Non-blocking receive with explicit count for single-precision (for device pointers in host_data blocks)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp) :: data(:)
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

public subroutine comm_isend_real_dp_array_2d_n(comm, data, count, dest, tag, request)

Non-blocking send of a contiguous 2D double-precision array with explicit count — no dim-prefix protocol. Pairs with comm_recv_real_dp_array_2d_n on the receive side. The caller must keep data valid until wait/waitall on the returned request completes.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(in) :: data(:,:)
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

public subroutine comm_isend_real_dp_array_n(comm, data, count, dest, tag, request)

Non-blocking send with explicit count (for device pointers in host_data blocks)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp) :: data(:)
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

public subroutine comm_isend_real_sp_array_n(comm, data, count, dest, tag, request)

Non-blocking send with explicit count for single-precision (for device pointers in host_data blocks)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp) :: data(:)
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

public subroutine comm_recv_integer64_array_n(comm, data, count, source, tag, status)

Blocking receive into a pre-allocated int64 array.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int64), intent(out) :: data(:)
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status), intent(out), optional :: status

public subroutine comm_recv_integer_array_2d_n(comm, data, count, source, tag, status)

Blocking recv of a contiguous 2D int32 array with explicit count.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(out) :: data(:,:)
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status), intent(out), optional :: status

public subroutine comm_recv_integer_array_n(comm, data, count, source, tag, status)

Blocking receive into a pre-allocated int32 array.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(out) :: data(:)
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status), intent(out), optional :: status

public subroutine comm_recv_real_dp_array_2d_n(comm, data, count, source, tag, status)

Blocking receive of a contiguous 2D double-precision array with explicit count. No dim-prefix protocol — the caller has already shaped data. Mirrors comm_send_real_dp_array_2d_n.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(out) :: data(:,:)
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status), intent(out), optional :: status

public subroutine comm_recv_real_dp_array_n(comm, data, count, source, tag, status)

Blocking receive into a pre-allocated double-precision array.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(out) :: data(:)
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status), intent(out), optional :: status

public subroutine comm_recv_real_sp_array_n(comm, data, count, source, tag, status)

Blocking receive into a pre-allocated single-precision array.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(out) :: data(:)
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status), intent(out), optional :: status

public subroutine comm_send_integer_array_2d_n(comm, data, count, dest, tag)

Blocking send of a contiguous 2D int32 array using an explicit count, no dim-prefix. Pairs with comm_recv_integer_array_2d_n.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(in) :: data(:,:)
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag

public subroutine comm_send_real_dp_array_2d_n(comm, data, count, dest, tag)

Blocking send of a contiguous 2D double-precision array using an explicit count. Unlike comm_send_real_dp_array_2d, this variant does NOT prefix the message with the dimensions — caller and receiver agree on the shape via the protocol. The receiver uses comm_recv_real_dp_array_2d_n (or any of the _array_n overloads) with the same count.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(in) :: data(:,:)
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag

public subroutine get_processor_name(name, namelen)

Retrieves the name of the processor

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(inout) :: name
integer(kind=int32), intent(out) :: namelen

public subroutine pic_mpi_finalize(ierr)

Finalize MPI environment

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(out), optional :: ierr

public subroutine pic_mpi_init(requested_thread_level, provided_thread_level)

Initialize MPI environment with optional threading support

Read more…

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in), optional :: requested_thread_level
integer(kind=int32), intent(out), optional :: provided_thread_level

private subroutine allreduce_dp(comm, buffer, op)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(inout) :: buffer
type(MPI_Op), intent(in), optional :: op

private subroutine allreduce_dp_array(comm, buffer, count, op)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(inout) :: buffer(:)
integer, intent(in), optional :: count
type(MPI_Op), intent(in), optional :: op

private subroutine allreduce_dp_array_to(comm, sendbuf, recvbuf, count, op)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(in) :: sendbuf(:)
real(kind=dp), intent(out) :: recvbuf(:)
integer, intent(in), optional :: count
type(MPI_Op), intent(in), optional :: op

private subroutine allreduce_dp_to(comm, sendbuf, recvbuf, op)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(in) :: sendbuf
real(kind=dp), intent(out) :: recvbuf
type(MPI_Op), intent(in), optional :: op

private subroutine allreduce_i32(comm, buffer, op)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(inout) :: buffer
type(MPI_Op), intent(in), optional :: op

private subroutine allreduce_i32_array(comm, buffer, count, op)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(inout) :: buffer(:)
integer, intent(in), optional :: count
type(MPI_Op), intent(in), optional :: op

private subroutine allreduce_sp(comm, buffer, op)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(inout) :: buffer
type(MPI_Op), intent(in), optional :: op

private subroutine allreduce_sp_array(comm, buffer, count, op)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(inout) :: buffer(:)
integer, intent(in), optional :: count
type(MPI_Op), intent(in), optional :: op

private subroutine allreduce_sp_array_to(comm, sendbuf, recvbuf, count, op)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(in) :: sendbuf(:)
real(kind=sp), intent(out) :: recvbuf(:)
integer, intent(in), optional :: count
type(MPI_Op), intent(in), optional :: op

private subroutine allreduce_sp_to(comm, sendbuf, recvbuf, op)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(in) :: sendbuf
real(kind=sp), intent(out) :: recvbuf
type(MPI_Op), intent(in), optional :: op

private subroutine comm_allgather_integer(comm, sendbuf, recvbuf)

Gathers integer values from all processes in the communicator

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(in) :: sendbuf
integer(kind=int32), intent(out) :: recvbuf(:)

private subroutine comm_barrier(this)

Blocks until all processes in the communicator have called barrier

Arguments

Type IntentOptional Attributes Name
class(comm_t), intent(in) :: this

private subroutine comm_bcast_integer(comm, buffer, count, root)

Broadcasts integer data from root process to all processes in communicator

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(inout) :: buffer
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: root

private subroutine comm_bcast_integer64(comm, buffer, count, root)

Broadcasts integer64 data from root process to all processes in communicator

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int64), intent(inout) :: buffer
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: root

private subroutine comm_bcast_real_dp(comm, buffer, count, root)

Broadcasts double precision data from root process to all processes in communicator

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(inout) :: buffer
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: root

private subroutine comm_bcast_real_dp_array(comm, buffer, count, root)

Broadcasts double precision array from root process to all processes in communicator

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(inout) :: buffer(:)
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: root

private subroutine comm_bcast_real_sp(comm, buffer, count, root)

Broadcasts single-precision data from root process to all processes in communicator

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(inout) :: buffer
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: root

private subroutine comm_bcast_real_sp_array(comm, buffer, count, root)

Broadcasts single-precision array from root process to all processes in communicator

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(inout) :: buffer(:)
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: root

private subroutine comm_finalize(this)

Frees the MPI communicator resources

Arguments

Type IntentOptional Attributes Name
class(comm_t), intent(inout) :: this

private subroutine comm_iprobe(comm, source, tag, message_pending, status)

Non-blocking probe for incoming messages

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
logical, intent(out) :: message_pending
type(MPI_Status), intent(out) :: status

private subroutine comm_irecv_integer(comm, data, source, tag, request)

Initiates a non-blocking receive operation. The request must be waited on using wait() or test() before the buffer can be used.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(out) :: data
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_irecv_integer64(comm, data, source, tag, request)

Initiates a non-blocking receive operation. The request must be waited on using wait() or test() before the buffer can be used.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int64), intent(out) :: data
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_irecv_integer64_array(comm, data, source, tag, request)

Initiates a non-blocking receive operation. The request must be waited on using wait() or test() before the buffer can be used.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int64), intent(out) :: data(:)
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_irecv_integer_array(comm, data, source, tag, request)

Initiates a non-blocking receive operation. The request must be waited on using wait() or test() before the buffer can be used.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(out) :: data(:)
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_irecv_logical(comm, data, source, tag, request)

Non-blocking receive of a logical value

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
logical, intent(out) :: data
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_irecv_real_dp(comm, data, source, tag, request)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(out) :: data
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_irecv_real_dp_array(comm, data, source, tag, request)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(out) :: data(:)
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_irecv_real_dp_array_2d(comm, data, source, tag, request)

Non-blocking receive of a 2D allocatable double precision real array

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(inout), allocatable :: data(:,:)
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_irecv_real_sp(comm, data, source, tag, request)

Non-blocking receive of a single single-precision real

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(out) :: data
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_irecv_real_sp_array(comm, data, source, tag, request)

Non-blocking receive of a single-precision real array

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(out) :: data(:)
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_irecv_real_sp_array_2d(comm, data, source, tag, request)

Non-blocking receive of a 2D allocatable single-precision real array

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(inout), allocatable :: data(:,:)
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_isend_integer(comm, data, dest, tag, request)

Initiates a non-blocking send operation. The request must be waited on using wait() or test() before the buffer can be reused.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(in) :: data
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_isend_integer64(comm, data, dest, tag, request)

Initiates a non-blocking send operation. The request must be waited on using wait() or test() before the buffer can be reused.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int64), intent(in) :: data
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_isend_integer64_array(comm, data, dest, tag, request)

Initiates a non-blocking send operation. The request must be waited on using wait() or test() before the buffer can be reused.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int64), intent(in) :: data(:)
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_isend_integer_array(comm, data, dest, tag, request)

Initiates a non-blocking send operation. The request must be waited on using wait() or test() before the buffer can be reused.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(in) :: data(:)
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_isend_logical(comm, data, dest, tag, request)

Non-blocking send of a logical value

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
logical, intent(in) :: data
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_isend_real_dp(comm, data, dest, tag, request)

Initiates a non-blocking send operation. The request must be waited on using wait() or test() before the buffer can be reused.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(in) :: data
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_isend_real_dp_array(comm, data, dest, tag, request)

Initiates a non-blocking send operation. The request must be waited on using wait() or test() before the buffer can be reused.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(in) :: data(:)
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_isend_real_dp_array_2d(comm, data, dest, tag, request)

Non-blocking send of a 2D double precision real array

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(in) :: data(:,:)
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_isend_real_sp(comm, data, dest, tag, request)

Non-blocking send of a single single-precision real

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(in) :: data
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_isend_real_sp_array(comm, data, dest, tag, request)

Non-blocking send of a single-precision real array

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(in) :: data(:)
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_isend_real_sp_array_2d(comm, data, dest, tag, request)

Non-blocking send of a 2D single-precision real array

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(in) :: data(:,:)
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

private subroutine comm_probe(comm, source, tag, status)

Blocking probe for incoming messages. Returns once a message matching (source, tag) is queued at the receiver — caller reads status%MPI_SOURCE and status%MPI_TAG to decide who’s talking and what kind of message it is, then issues the matching recv. Use MPI_ANY_SOURCE / MPI_ANY_TAG to dispatch on whichever rank speaks first.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status), intent(out) :: status

private subroutine comm_recv_integer(comm, data, source, tag, status)

Blocking receive of an integer from specified source. Use MPI_ANY_SOURCE or MPI_ANY_TAG for wildcards.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(out) :: data
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status), intent(out), optional :: status

private subroutine comm_recv_integer64(comm, data, source, tag, status)

Blocking receive of an integer64 from specified source. Use MPI_ANY_SOURCE or MPI_ANY_TAG for wildcards.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int64), intent(out) :: data
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status), intent(out), optional :: status

private subroutine comm_recv_integer64_array(comm, data, source, tag, status)

Blocking receive of an integer64 array from specified source. Array is automatically allocated to the correct size.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int64), intent(out), allocatable :: data(:)
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status), intent(out) :: status

private subroutine comm_recv_integer_array(comm, data, source, tag, status)

Blocking receive of an integer array from specified source.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(out), allocatable :: data(:)
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status), intent(out) :: status

private subroutine comm_recv_logical(comm, data, source, tag, status)

Blocking receive of a logical value from specified source

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
logical, intent(out) :: data
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status), intent(out), optional :: status

private subroutine comm_recv_real_dp(comm, data, source, tag, status)

Blocking receive of a single double precision real from specified source.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(out) :: data
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status), intent(out), optional :: status

private subroutine comm_recv_real_dp_array(comm, data, source, tag, status)

Blocking receive of a double precision real array from specified source.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(out), allocatable :: data(:)
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status) :: status

private subroutine comm_recv_real_dp_array_2d(comm, data, source, tag, status)

Blocking receive of a 2D allocatable double precision real array

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(inout), allocatable :: data(:,:)
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status), intent(out) :: status

private subroutine comm_recv_real_sp(comm, data, source, tag, status)

Blocking receive of a single single-precision real from specified source.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(out) :: data
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status), intent(out), optional :: status

private subroutine comm_recv_real_sp_array(comm, data, source, tag, status)

Blocking receive of a single-precision real array from specified source.

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(out), allocatable :: data(:)
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status) :: status

private subroutine comm_recv_real_sp_array_2d(comm, data, source, tag, status)

Blocking receive of a 2D allocatable single-precision real array

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(inout), allocatable :: data(:,:)
integer(kind=int32), intent(in) :: source
integer(kind=int32), intent(in) :: tag
type(MPI_Status), intent(out) :: status

private subroutine comm_send_integer(comm, data, dest, tag)

Blocking send of an integer to specified destination

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(in) :: data
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag

private subroutine comm_send_integer64(comm, data, dest, tag)

Blocking send of an integer64 to specified destination

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int64), intent(in) :: data
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag

private subroutine comm_send_integer64_array(comm, data, dest, tag)

Blocking send of an integer64 array to specified destination

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int64), intent(in) :: data(:)
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag

private subroutine comm_send_integer_array(comm, data, dest, tag)

Blocking send of an integer array to specified destination

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(in) :: data(:)
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag

private subroutine comm_send_logical(comm, data, dest, tag)

Blocking send of a logical value to specified destination

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
logical, intent(in) :: data
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag

private subroutine comm_send_real_dp(comm, data, dest, tag)

Blocking send of a single double precision real to specified destination

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(in) :: data
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag

private subroutine comm_send_real_dp_array(comm, data, dest, tag)

Blocking send of a double precision real array to specified destination

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(in) :: data(:)
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag

private subroutine comm_send_real_dp_array_2d(comm, data, dest, tag)

Blocking send of a 2D double precision real array to specified destination

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(in) :: data(:,:)
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag

private subroutine comm_send_real_sp(comm, data, dest, tag)

Blocking send of a single single-precision real to specified destination

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(in) :: data
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag

private subroutine comm_send_real_sp_array(comm, data, dest, tag)

Blocking send of a single-precision real array to specified destination

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(in) :: data(:)
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag

private subroutine comm_send_real_sp_array_2d(comm, data, dest, tag)

Blocking send of a 2D single-precision real array to specified destination

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=sp), intent(in) :: data(:,:)
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag

private subroutine create_win_allocate_dp_1d(comm, length, baseptr, win)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(in) :: length
real(kind=dp), intent(out), pointer :: baseptr(:)
type(win_t), intent(out) :: win

private subroutine create_win_allocate_dp_2d(comm, dim1, dim2, baseptr, win)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(in) :: dim1
integer(kind=int32), intent(in) :: dim2
real(kind=dp), intent(out), pointer :: baseptr(:,:)
type(win_t), intent(out) :: win

private subroutine create_win_allocate_i32_1d(comm, length, baseptr, win)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(in) :: length
integer(kind=int32), intent(out), pointer :: baseptr(:)
type(win_t), intent(out) :: win

private subroutine create_win_allocate_i64_1d(comm, length, baseptr, win)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(in) :: length
integer(kind=int64), intent(out), pointer :: baseptr(:)
type(win_t), intent(out) :: win

private subroutine create_win_allocate_sp_1d(comm, length, baseptr, win)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer(kind=int32), intent(in) :: length
real(kind=sp), intent(out), pointer :: baseptr(:)
type(win_t), intent(out) :: win

private subroutine request_free(this)

Frees the MPI request resources

Arguments

Type IntentOptional Attributes Name
class(request_t), intent(inout) :: this

private subroutine request_test(request, flag, status)

Arguments

Type IntentOptional Attributes Name
type(request_t), intent(inout) :: request
logical, intent(out) :: flag
type(MPI_Status), intent(out), optional :: status

private subroutine request_wait(request, status)

Blocks until the operation associated with the request completes. The request is freed after completion.

Arguments

Type IntentOptional Attributes Name
type(request_t), intent(inout) :: request
type(MPI_Status), intent(out), optional :: status

private subroutine request_waitall(requests, statuses)

Blocks until all operations in the request array complete. All requests are freed after completion.

Arguments

Type IntentOptional Attributes Name
type(request_t), intent(inout) :: requests(:)
type(MPI_Status), intent(out), optional :: statuses(:)

private subroutine win_accumulate_dp(this, target_rank, target_disp, count, buffer, op)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
real(kind=dp), intent(in) :: buffer(*)
type(MPI_Op), intent(in), optional :: op

private subroutine win_accumulate_i32(this, target_rank, target_disp, count, buffer, op)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: buffer(*)
type(MPI_Op), intent(in), optional :: op

private subroutine win_accumulate_i64(this, target_rank, target_disp, count, buffer, op)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
integer(kind=int64), intent(in) :: buffer(*)
type(MPI_Op), intent(in), optional :: op

private subroutine win_accumulate_sp(this, target_rank, target_disp, count, buffer, op)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
real(kind=sp), intent(in) :: buffer(*)
type(MPI_Op), intent(in), optional :: op

private subroutine win_fence(this, assert)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in), optional :: assert

private subroutine win_fetch_and_add_i64(this, target_rank, target_disp, value, result)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int64), intent(in) :: value
integer(kind=int64), intent(out) :: result

private subroutine win_finalize(this)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(inout) :: this

private subroutine win_flush(this, rank)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: rank

private subroutine win_flush_all(this)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this

private subroutine win_get_dp(this, target_rank, target_disp, count, buffer)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
real(kind=dp), intent(out) :: buffer(*)

private subroutine win_get_i32(this, target_rank, target_disp, count, buffer)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(out) :: buffer(*)

private subroutine win_get_i64(this, target_rank, target_disp, count, buffer)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
integer(kind=int64), intent(out) :: buffer(*)

private subroutine win_get_sp(this, target_rank, target_disp, count, buffer)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
real(kind=sp), intent(out) :: buffer(*)

private subroutine win_lock(this, rank, lock_type)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: rank
integer(kind=int32), intent(in), optional :: lock_type

private subroutine win_lock_all(this, assert)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in), optional :: assert

private subroutine win_put_dp(this, target_rank, target_disp, count, buffer)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
real(kind=dp), intent(in) :: buffer(*)

private subroutine win_put_i32(this, target_rank, target_disp, count, buffer)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: buffer(*)

private subroutine win_put_i64(this, target_rank, target_disp, count, buffer)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
integer(kind=int64), intent(in) :: buffer(*)

private subroutine win_put_sp(this, target_rank, target_disp, count, buffer)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
real(kind=sp), intent(in) :: buffer(*)

private subroutine win_rget_dp(this, target_rank, target_disp, count, buffer, request)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
real(kind=dp), intent(out) :: buffer(*)
type(request_t), intent(out) :: request

private subroutine win_rget_i32(this, target_rank, target_disp, count, buffer, request)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(out) :: buffer(*)
type(request_t), intent(out) :: request

private subroutine win_rget_i64(this, target_rank, target_disp, count, buffer, request)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
integer(kind=int64), intent(out) :: buffer(*)
type(request_t), intent(out) :: request

private subroutine win_rget_sp(this, target_rank, target_disp, count, buffer, request)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
real(kind=sp), intent(out) :: buffer(*)
type(request_t), intent(out) :: request

private subroutine win_rput_dp(this, target_rank, target_disp, count, buffer, request)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
real(kind=dp), intent(in) :: buffer(*)
type(request_t), intent(out) :: request

private subroutine win_rput_i32(this, target_rank, target_disp, count, buffer, request)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
integer(kind=int32), intent(in) :: buffer(*)
type(request_t), intent(out) :: request

private subroutine win_rput_i64(this, target_rank, target_disp, count, buffer, request)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
integer(kind=int64), intent(in) :: buffer(*)
type(request_t), intent(out) :: request

private subroutine win_rput_sp(this, target_rank, target_disp, count, buffer, request)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer(kind=int32), intent(in) :: count
real(kind=sp), intent(in) :: buffer(*)
type(request_t), intent(out) :: request

private subroutine win_unlock(this, rank)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this
integer(kind=int32), intent(in) :: rank

private subroutine win_unlock_all(this)

Arguments

Type IntentOptional Attributes Name
class(win_t), intent(in) :: this