parallel_obj Derived Type

type, public :: parallel_obj

Utility to handle MPI communications


Inherits

type~~parallel_obj~~InheritsGraph type~parallel_obj parallel_obj MPI_Datatype MPI_Datatype type~parallel_obj->MPI_Datatype REAL_SP, REAL_DP, REAL_WP, COMPLEX_SP, COMPLEX_DP, COMPLEX_WP, INTEGER, INT8, LOGICAL type~communicators communicators type~parallel_obj->type~communicators comm type~patch patch type~parallel_obj->type~patch rank MPI_Comm MPI_Comm type~communicators->MPI_Comm w, g

Inherited by

type~~parallel_obj~~InheritedByGraph type~parallel_obj parallel_obj type~bc_set bc_set type~bc_set->type~parallel_obj parallel type~block_obj block_obj type~bc_set->type~block_obj block type~hdf5_obj hdf5_obj type~bc_set->type~hdf5_obj hdf5 type~region_obj region_obj type~bc_set->type~region_obj region type~block_obj->type~parallel_obj parallel type~block_obj->type~hdf5_obj hdf5 type~collision_obj collision_obj type~collision_obj->type~parallel_obj parallel type~collision_obj->type~block_obj cblock type~monitor_set monitor_set type~collision_obj->type~monitor_set monitors type~timer_obj timer_obj type~collision_obj->type~timer_obj timer type~marker_set marker_set type~collision_obj->type~marker_set IB type~particle_set particle_set type~collision_obj->type~particle_set PP type~respart_set ResPart_set type~collision_obj->type~respart_set RP type~eulerian_obj_base eulerian_obj_base type~eulerian_obj_base->type~parallel_obj parallel type~eulerian_obj_base->type~block_obj block type~eulerian_set eulerian_set type~eulerian_set->type~parallel_obj parallel type~eulerian_set->type~block_obj block type~eulerian_ptr eulerian_ptr type~eulerian_set->type~eulerian_ptr field type~h5hut_obj h5hut_obj type~h5hut_obj->type~parallel_obj parallel type~h5hut_obj->type~hdf5_obj hdf5 type~hdf5_obj->type~parallel_obj parallel type~hypre_obj hypre_obj type~hypre_obj->type~parallel_obj parallel type~hypre_obj->type~block_obj block type~eulerian_obj_i eulerian_obj_i type~hypre_obj->type~eulerian_obj_i irow type~lagrangian_set lagrangian_set type~lagrangian_set->type~parallel_obj parallel type~lagrangian_set->type~block_obj block type~monitor_set->type~parallel_obj parallel type~op_obj op_obj type~op_obj->type~parallel_obj parallel type~op_obj->type~block_obj block type~silo_obj silo_obj type~silo_obj->type~parallel_obj parallel type~solid_set solid_set type~solid_set->type~parallel_obj parallel type~solid_set->type~block_obj block type~solid_obj solid_obj type~solid_set->type~solid_obj p type~solver_obj solver_obj type~solver_obj->type~parallel_obj parallel type~solver_obj->type~timer_obj timer type~timer_obj->type~parallel_obj parallel type~cdifs_obj cdifs_obj type~cdifs_obj->type~bc_set bcs type~cdifs_obj->type~block_obj block type~cdifs_obj->type~collision_obj collisions type~cdifs_obj->type~eulerian_set fields type~cdifs_obj->type~hdf5_obj hdf5 type~cdifs_obj->type~hypre_obj hypre, VFSolver type~cdifs_obj->type~monitor_set monitors, pmonitor type~cdifs_obj->type~op_obj op type~cdifs_obj->type~solver_obj type~cdifs_obj->type~eulerian_obj_i maskV type~eulerian_obj_r eulerian_obj_r type~cdifs_obj->type~eulerian_obj_r V, P, dP, ibS, ibVF, ibF, ibN, Vold, resV, rhs, divu, Vm, srcV type~cdifs_obj->type~marker_set IB type~cdifs_obj->type~respart_set RP type~eulerian_obj_i->type~eulerian_obj_base type~eulerian_obj_r->type~eulerian_obj_base type~eulerian_ptr->type~eulerian_obj_base p type~grans_obj grans_obj type~grans_obj->type~bc_set bcs type~grans_obj->type~block_obj block type~grans_obj->type~collision_obj collisions type~grans_obj->type~eulerian_set fields type~grans_obj->type~hdf5_obj hdf5 type~grans_obj->type~hypre_obj VFSolver type~grans_obj->type~monitor_set monitors type~grans_obj->type~op_obj op type~grans_obj->type~solver_obj type~grans_obj->type~eulerian_obj_r ibVF, PVF, ibS, Fp, ibF, ibN, rhs type~grans_obj->type~marker_set IB type~grans_obj->type~particle_set PP type~grans_obj->type~respart_set RP type~marker_set->type~bc_set bcs type~marker_set->type~lagrangian_set type~marker_set->type~monitor_set monitors type~marker_set->type~op_obj op type~marker_set->type~timer_obj timer type~particle_set->type~lagrangian_set type~particle_set->type~monitor_set monitors type~particle_set->type~op_obj op type~particle_set->type~timer_obj timer type~region_obj->type~block_obj region type~respart_set->type~bc_set bcs type~respart_set->type~lagrangian_set type~respart_set->type~monitor_set monitors type~respart_set->type~op_obj op type~respart_set->type~timer_obj timer type~respart_set->type~marker_set ib type~solid_obj->type~marker_set

Components

Type Visibility Attributes Name Initial
type(MPI_Datatype), public :: COMPLEX_DP

MPI Datatype for double precision complex numbers

type(MPI_Datatype), public :: COMPLEX_SP

MPI Datatype for single precision complex numbers

type(MPI_Datatype), public :: COMPLEX_WP

MPI Datatype for working precision complex numbers

type(MPI_Datatype), public :: INT8

MPI Datatype for 8-byte integers

type(MPI_Datatype), public :: INTEGER

MPI Datatype for 4-byte integers

type(MPI_Datatype), public :: LOGICAL

MPI Datatype for logicals

type(MPI_Datatype), public :: REAL_DP

MPI Datatype for double precision reals

type(MPI_Datatype), public :: REAL_SP

MPI Datatype for single precision reals

type(MPI_Datatype), public :: REAL_WP

MPI Datatype for working precision reals

type(communicators), public :: comm

Communicators

integer, public :: np(3)

Number of ranks in each direction

integer, public :: nproc

Total number of ranks

integer, public :: npx

Number of ranks in the x direction

integer, public :: npy

Number of ranks in the y direction

integer, public :: npz

Number of ranks in the z direction

type(patch), public :: rank

Rank and grid decompostion info

integer, private :: RootRank = 1

Rank of the root process


Type-Bound Procedures

  • private impure subroutine parallel_obj_Bcast_int_0d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    integer, intent(inout) :: A

    Send buffer

  • private impure subroutine parallel_obj_Bcast_int_1d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    integer, intent(inout) :: A(:)

    Send buffer

  • private impure subroutine parallel_obj_Bcast_int_2d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    integer, intent(inout) :: A(:,:)

    Send buffer

  • private impure subroutine parallel_obj_Bcast_int_3d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    integer, intent(inout) :: A(:,:,:)

    Send buffer

  • private impure subroutine parallel_obj_Bcast_real_0d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    real(kind=wp), intent(inout) :: A

    Send buffer

  • private impure subroutine parallel_obj_Bcast_real_1d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    real(kind=wp), intent(inout) :: A(:)

    Send buffer

  • private impure subroutine parallel_obj_Bcast_real_2d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    real(kind=wp), intent(inout) :: A(:,:)

    Send buffer

  • private impure subroutine parallel_obj_Bcast_real_3d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    real(kind=wp), intent(inout) :: A(:,:,:)

    Send buffer

  • private impure subroutine parallel_obj_Bcast_log_0d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    logical, intent(inout) :: A

    Send buffer

  • private impure subroutine parallel_obj_Bcast_log_1d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    logical, intent(inout) :: A(:)

    Send buffer

  • private impure subroutine parallel_obj_Bcast_char(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    character(len=*), intent(inout) :: A

    Send buffer

procedure, public, nopass :: Finalize => parallel_obj_Final

  • private impure subroutine parallel_obj_Final()

    Finalizes MPI and the parallel environment.

    Arguments

    None

procedure, public :: Initialize => parallel_obj_Init

  • private impure subroutine parallel_obj_Init(this)

    Initializes the parallel environement.

    Arguments

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

    Parallel object

generic, public :: LOR => parallel_obj_Lor_0d, parallel_obj_Lor_1d

  • private impure subroutine parallel_obj_Lor_0d(this, A, B)

    MPI LOGICAL OR reduction operation.

    Arguments

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

    Parallel object

    logical, intent(in) :: A

    Send buffer

    logical, intent(out) :: B

    Receive buffer

  • private impure subroutine parallel_obj_Lor_1d(this, A, B)

    MPI LOGICAL OR reduction operation.

    Arguments

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

    Parallel object

    logical, intent(in) :: A(:)

    Send buffer

    logical, intent(out) :: B(:)

    Receive buffer

  • private impure subroutine parallel_obj_Max_int_0d(this, A, B)

    MPI MAX reduction operation.

    Arguments

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

    Parallel object

    integer, intent(in) :: A

    Send buffer

    integer, intent(out) :: B

    Receive buffer

  • private impure subroutine parallel_obj_Max_int_1d(this, A, B)

    MPI MAX reduction operation.

    Arguments

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

    Parallel object

    integer, intent(in) :: A(:)

    Send buffer

    integer, intent(out) :: B(:)

    Receive buffer

  • private impure subroutine parallel_obj_Max_real_0d(this, A, B)

    MPI MAX reduction operation.

    Arguments

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

    Parallel object

    real(kind=wp), intent(in) :: A

    Send buffer

    real(kind=wp), intent(out) :: B

    Receive buffer

  • private impure subroutine parallel_obj_Max_real_1d(this, A, B)

    MPI MAX reduction operation.

    Arguments

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

    Parallel object

    real(kind=wp), intent(in) :: A(:)

    Send buffer

    real(kind=wp), intent(out) :: B(:)

    Receive buffer

  • private impure subroutine parallel_obj_Min_int_0d(this, A, B)

    MPI MIN reduction operation.

    Arguments

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

    Parallel object

    integer, intent(in) :: A

    Send buffer

    integer, intent(out) :: B

    Receive buffer

  • private impure subroutine parallel_obj_Min_int_1d(this, A, B)

    MPI MIN reduction operation.

    Arguments

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

    Parallel object

    integer, intent(in) :: A(:)

    Send buffer

    integer, intent(out) :: B(:)

    Receive buffer

  • private impure subroutine parallel_obj_Min_real_0d(this, A, B)

    MPI MIN reduction operation.

    Arguments

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

    Parallel object

    real(kind=wp), intent(in) :: A

    Send buffer

    real(kind=wp), intent(out) :: B

    Receive buffer

  • private impure subroutine parallel_obj_Min_real_1d(this, A, B)

    Arguments

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

    Parallel object

    real(kind=wp), intent(in) :: A(:)

    Send buffer

    real(kind=wp), intent(out) :: B(:)

    Receive buffer

procedure, public :: RankIsRoot => parallel_obj_RankIsRoot

  • private pure function parallel_obj_RankIsRoot(this) result(val)

    Determines if this rank is the root rank.

    Arguments

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

    Parallel object

    Return Value logical

    Result

procedure, public :: Stop => parallel_obj_Stop

  • private impure subroutine parallel_obj_Stop(this, msg)

    Subroutine to gracefully stop the execution with an optional error message.

    Arguments

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

    Parallel object

    character(len=*), intent(in), optional :: msg

    Error message

  • private impure subroutine parallel_obj_Sum_int_0d(this, A, B)

    MPI SUM reduction operation.

    Arguments

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

    Parallel object

    integer, intent(in) :: A

    Send buffer

    integer, intent(out) :: B

    Receive buffer

  • private impure subroutine parallel_obj_Sum_int_1d(this, A, B)

    MPI SUM reduction operation.

    Arguments

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

    Parallel object

    integer, intent(in) :: A(:)

    Send buffer

    integer, intent(out) :: B(:)

    Receive buffer

  • private impure subroutine parallel_obj_Sum_int_2d(this, A, B)

    MPI SUM reduction operation.

    Arguments

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

    Parallel object

    integer, intent(in) :: A(:,:)

    Send buffer

    integer, intent(out) :: B(:,:)

    Receive buffer

  • private impure subroutine parallel_obj_Sum_int_3d(this, A, B)

    MPI SUM reduction operation.

    Arguments

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

    Parallel object

    integer, intent(in) :: A(:,:,:)

    Send buffer

    integer, intent(out) :: B(:,:,:)

    Receive buffer

  • private impure subroutine parallel_obj_Sum_real_0d(this, A, B)

    MPI SUM reduction operation.

    Arguments

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

    Parallel object

    real(kind=wp), intent(in) :: A

    Send buffer

    real(kind=wp), intent(out) :: B

    Receive buffer

  • private impure subroutine parallel_obj_Sum_real_1d(this, A, B)

    MPI SUM reduction operation.

    Arguments

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

    Parallel object

    real(kind=wp), intent(in) :: A(:)

    Send buffer

    real(kind=wp), intent(out) :: B(:)

    Receive buffer

  • private impure subroutine parallel_obj_Sum_real_2d(this, A, B)

    MPI SUM reduction operation.

    Arguments

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

    Parallel object

    real(kind=wp), intent(in) :: A(:,:)

    Send buffer

    real(kind=wp), intent(out) :: B(:,:)

    Receive buffer

  • private impure subroutine parallel_obj_Sum_real_3d(this, A, B)

    MPI SUM reduction operation.

    Arguments

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

    Parallel object

    real(kind=wp), intent(in) :: A(:,:,:)

    Send buffer

    real(kind=wp), intent(out) :: B(:,:,:)

    Receive buffer

procedure, public, nopass :: Time => parallel_obj_Time

  • private function parallel_obj_Time() result(wtime)

    Returns the elapsed time since an arbitrary origin. Note that different ranks return different WTIMEs.

    Arguments

    None

    Return Value real(kind=wp)

    Elasped time since arbitrary origin

procedure, public :: Topology => parallel_obj_Topology

  • private impure subroutine parallel_obj_Topology(this, is_periodic, Ng, Nb)

    Builds a Cartesian topolgy with MPI. Define a root processor at coordinates (1,1,1)

    Arguments

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

    Parallel object

    logical, intent(in) :: is_periodic(3)

    Periodicity

    integer, intent(in) :: Ng(3) Read more…
    integer, intent(in), optional :: Nb(3)

    Explicit block decomposition

procedure, private :: parallel_obj_Bcast_char

  • private impure subroutine parallel_obj_Bcast_char(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    character(len=*), intent(inout) :: A

    Send buffer

procedure, private :: parallel_obj_Bcast_int_0d

  • private impure subroutine parallel_obj_Bcast_int_0d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    integer, intent(inout) :: A

    Send buffer

procedure, private :: parallel_obj_Bcast_int_1d

  • private impure subroutine parallel_obj_Bcast_int_1d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    integer, intent(inout) :: A(:)

    Send buffer

procedure, private :: parallel_obj_Bcast_int_2d

  • private impure subroutine parallel_obj_Bcast_int_2d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    integer, intent(inout) :: A(:,:)

    Send buffer

procedure, private :: parallel_obj_Bcast_int_3d

  • private impure subroutine parallel_obj_Bcast_int_3d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    integer, intent(inout) :: A(:,:,:)

    Send buffer

procedure, private :: parallel_obj_Bcast_log_0d

  • private impure subroutine parallel_obj_Bcast_log_0d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    logical, intent(inout) :: A

    Send buffer

procedure, private :: parallel_obj_Bcast_log_1d

  • private impure subroutine parallel_obj_Bcast_log_1d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    logical, intent(inout) :: A(:)

    Send buffer

procedure, private :: parallel_obj_Bcast_real_0d

  • private impure subroutine parallel_obj_Bcast_real_0d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    real(kind=wp), intent(inout) :: A

    Send buffer

procedure, private :: parallel_obj_Bcast_real_1d

  • private impure subroutine parallel_obj_Bcast_real_1d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    real(kind=wp), intent(inout) :: A(:)

    Send buffer

procedure, private :: parallel_obj_Bcast_real_2d

  • private impure subroutine parallel_obj_Bcast_real_2d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    real(kind=wp), intent(inout) :: A(:,:)

    Send buffer

procedure, private :: parallel_obj_Bcast_real_3d

  • private impure subroutine parallel_obj_Bcast_real_3d(this, A)

    MPI Broadcast operation from root rank.

    Arguments

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

    Parallel object

    real(kind=wp), intent(inout) :: A(:,:,:)

    Send buffer

procedure, private :: parallel_obj_Lor_0d

  • private impure subroutine parallel_obj_Lor_0d(this, A, B)

    MPI LOGICAL OR reduction operation.

    Arguments

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

    Parallel object

    logical, intent(in) :: A

    Send buffer

    logical, intent(out) :: B

    Receive buffer

procedure, private :: parallel_obj_Lor_1d

  • private impure subroutine parallel_obj_Lor_1d(this, A, B)

    MPI LOGICAL OR reduction operation.

    Arguments

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

    Parallel object

    logical, intent(in) :: A(:)

    Send buffer

    logical, intent(out) :: B(:)

    Receive buffer

procedure, private :: parallel_obj_Max_int_0d

  • private impure subroutine parallel_obj_Max_int_0d(this, A, B)

    MPI MAX reduction operation.

    Arguments

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

    Parallel object

    integer, intent(in) :: A

    Send buffer

    integer, intent(out) :: B

    Receive buffer

procedure, private :: parallel_obj_Max_int_1d

  • private impure subroutine parallel_obj_Max_int_1d(this, A, B)

    MPI MAX reduction operation.

    Arguments

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

    Parallel object

    integer, intent(in) :: A(:)

    Send buffer

    integer, intent(out) :: B(:)

    Receive buffer

procedure, private :: parallel_obj_Max_real_0d

  • private impure subroutine parallel_obj_Max_real_0d(this, A, B)

    MPI MAX reduction operation.

    Arguments

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

    Parallel object

    real(kind=wp), intent(in) :: A

    Send buffer

    real(kind=wp), intent(out) :: B

    Receive buffer

procedure, private :: parallel_obj_Max_real_1d

  • private impure subroutine parallel_obj_Max_real_1d(this, A, B)

    MPI MAX reduction operation.

    Arguments

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

    Parallel object

    real(kind=wp), intent(in) :: A(:)

    Send buffer

    real(kind=wp), intent(out) :: B(:)

    Receive buffer

procedure, private :: parallel_obj_Min_int_0d

  • private impure subroutine parallel_obj_Min_int_0d(this, A, B)

    MPI MIN reduction operation.

    Arguments

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

    Parallel object

    integer, intent(in) :: A

    Send buffer

    integer, intent(out) :: B

    Receive buffer

procedure, private :: parallel_obj_Min_int_1d

  • private impure subroutine parallel_obj_Min_int_1d(this, A, B)

    MPI MIN reduction operation.

    Arguments

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

    Parallel object

    integer, intent(in) :: A(:)

    Send buffer

    integer, intent(out) :: B(:)

    Receive buffer

procedure, private :: parallel_obj_Min_real_0d

  • private impure subroutine parallel_obj_Min_real_0d(this, A, B)

    MPI MIN reduction operation.

    Arguments

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

    Parallel object

    real(kind=wp), intent(in) :: A

    Send buffer

    real(kind=wp), intent(out) :: B

    Receive buffer

procedure, private :: parallel_obj_Min_real_1d

  • private impure subroutine parallel_obj_Min_real_1d(this, A, B)

    Arguments

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

    Parallel object

    real(kind=wp), intent(in) :: A(:)

    Send buffer

    real(kind=wp), intent(out) :: B(:)

    Receive buffer

procedure, private :: parallel_obj_Sum_int_0d

  • private impure subroutine parallel_obj_Sum_int_0d(this, A, B)

    MPI SUM reduction operation.

    Arguments

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

    Parallel object

    integer, intent(in) :: A

    Send buffer

    integer, intent(out) :: B

    Receive buffer

procedure, private :: parallel_obj_Sum_int_1d

  • private impure subroutine parallel_obj_Sum_int_1d(this, A, B)

    MPI SUM reduction operation.

    Arguments

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

    Parallel object

    integer, intent(in) :: A(:)

    Send buffer

    integer, intent(out) :: B(:)

    Receive buffer

procedure, private :: parallel_obj_Sum_int_2d

  • private impure subroutine parallel_obj_Sum_int_2d(this, A, B)

    MPI SUM reduction operation.

    Arguments

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

    Parallel object

    integer, intent(in) :: A(:,:)

    Send buffer

    integer, intent(out) :: B(:,:)

    Receive buffer

procedure, private :: parallel_obj_Sum_int_3d

  • private impure subroutine parallel_obj_Sum_int_3d(this, A, B)

    MPI SUM reduction operation.

    Arguments

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

    Parallel object

    integer, intent(in) :: A(:,:,:)

    Send buffer

    integer, intent(out) :: B(:,:,:)

    Receive buffer

procedure, private :: parallel_obj_Sum_real_0d

  • private impure subroutine parallel_obj_Sum_real_0d(this, A, B)

    MPI SUM reduction operation.

    Arguments

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

    Parallel object

    real(kind=wp), intent(in) :: A

    Send buffer

    real(kind=wp), intent(out) :: B

    Receive buffer

procedure, private :: parallel_obj_Sum_real_1d

  • private impure subroutine parallel_obj_Sum_real_1d(this, A, B)

    MPI SUM reduction operation.

    Arguments

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

    Parallel object

    real(kind=wp), intent(in) :: A(:)

    Send buffer

    real(kind=wp), intent(out) :: B(:)

    Receive buffer

procedure, private :: parallel_obj_Sum_real_2d

  • private impure subroutine parallel_obj_Sum_real_2d(this, A, B)

    MPI SUM reduction operation.

    Arguments

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

    Parallel object

    real(kind=wp), intent(in) :: A(:,:)

    Send buffer

    real(kind=wp), intent(out) :: B(:,:)

    Receive buffer

procedure, private :: parallel_obj_Sum_real_3d

  • private impure subroutine parallel_obj_Sum_real_3d(this, A, B)

    MPI SUM reduction operation.

    Arguments

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

    Parallel object

    real(kind=wp), intent(in) :: A(:,:,:)

    Send buffer

    real(kind=wp), intent(out) :: B(:,:,:)

    Receive buffer

Source Code

  type :: parallel_obj
    !> Utility to handle MPI communications
    integer             :: nproc                                               !! Total number of ranks
    integer             :: np(3)                                               !! Number of ranks in each direction
    integer             :: npx                                                 !! Number of ranks in the x direction
    integer             :: npy                                                 !! Number of ranks in the y direction
    integer             :: npz                                                 !! Number of ranks in the z direction
    type(patch)         :: rank                                                !! Rank and grid decompostion info
    type(communicators) :: comm                                                !! Communicators
    integer, private    :: RootRank = 1                                        !! Rank of the root process
    ! Elementary data types
    type(MPI_Datatype)  :: REAL_SP                                             !! MPI Datatype for single precision reals
    type(MPI_Datatype)  :: REAL_DP                                             !! MPI Datatype for double precision reals
    type(MPI_Datatype)  :: REAL_WP                                             !! MPI Datatype for working precision reals
    type(MPI_Datatype)  :: COMPLEX_SP                                          !!MPI Datatype for single precision complex numbers
    type(MPI_Datatype)  :: COMPLEX_DP                                          !! MPI Datatype for double precision complex numbers
    type(MPI_Datatype)  :: COMPLEX_WP                                          !! MPI Datatype for working precision complex numbers
    type(MPI_Datatype)  :: INTEGER                                             !! MPI Datatype for 4-byte integers
    type(MPI_Datatype)  :: INT8                                                !! MPI Datatype for 8-byte integers
    type(MPI_Datatype)  :: LOGICAL                                             !! MPI Datatype for logicals
    contains
      procedure         :: Initialize      => parallel_obj_Init
      procedure, nopass :: Finalize        => parallel_obj_Final
      procedure         :: Topology        => parallel_obj_Topology
      procedure, nopass :: Time            => parallel_obj_Time
      procedure         :: Stop            => parallel_obj_Stop
      procedure         :: RankIsRoot      => parallel_obj_RankIsRoot
      generic           :: Max             => parallel_obj_Max_int_0d, parallel_obj_Max_int_1d, &
                                              parallel_obj_Max_real_0d,parallel_obj_Max_real_1d
      generic           :: Min             => parallel_obj_Min_int_0d, parallel_obj_Min_int_1d, &
                                              parallel_obj_Min_real_0d,parallel_obj_Min_real_1d
      generic           :: Sum             => parallel_obj_Sum_int_0d, parallel_obj_Sum_int_1d, &
                                              parallel_obj_Sum_int_2d, parallel_obj_Sum_int_3d, &
                                              parallel_obj_Sum_real_0d,parallel_obj_Sum_real_1d,&
                                              parallel_obj_Sum_real_2d,parallel_obj_Sum_real_3d
      generic           :: LOR             => parallel_obj_Lor_0d,parallel_obj_Lor_1d
      generic           :: Bcast           => parallel_obj_Bcast_int_0d, parallel_obj_Bcast_int_1d, &
                                              parallel_obj_Bcast_int_2d, parallel_obj_Bcast_int_3d, &
                                              parallel_obj_Bcast_real_0d,parallel_obj_Bcast_real_1d,&
                                              parallel_obj_Bcast_real_2d,parallel_obj_Bcast_real_3d,&
                                              parallel_obj_Bcast_log_0d, parallel_obj_Bcast_log_1d, &
                                              parallel_obj_Bcast_char
      ! Internal/private procedures
      procedure, private :: parallel_obj_Max_int_0d
      procedure, private :: parallel_obj_Max_real_0d
      procedure, private :: parallel_obj_Max_int_1d
      procedure, private :: parallel_obj_Max_real_1d
      procedure, private :: parallel_obj_Min_int_0d
      procedure, private :: parallel_obj_Min_real_0d
      procedure, private :: parallel_obj_Min_int_1d
      procedure, private :: parallel_obj_Min_real_1d
      procedure, private :: parallel_obj_Sum_int_0d
      procedure, private :: parallel_obj_Sum_int_1d
      procedure, private :: parallel_obj_Sum_int_2d
      procedure, private :: parallel_obj_Sum_int_3d
      procedure, private :: parallel_obj_Sum_real_0d
      procedure, private :: parallel_obj_Sum_real_1d
      procedure, private :: parallel_obj_Sum_real_2d
      procedure, private :: parallel_obj_Sum_real_3d
      procedure, private :: parallel_obj_Lor_0d
      procedure, private :: parallel_obj_Lor_1d
      procedure, private :: parallel_obj_Bcast_int_0d
      procedure, private :: parallel_obj_Bcast_int_1d
      procedure, private :: parallel_obj_Bcast_int_2d
      procedure, private :: parallel_obj_Bcast_int_3d
      procedure, private :: parallel_obj_Bcast_real_0d
      procedure, private :: parallel_obj_Bcast_real_1d
      procedure, private :: parallel_obj_Bcast_real_2d
      procedure, private :: parallel_obj_Bcast_real_3d
      procedure, private :: parallel_obj_Bcast_char
      procedure, private :: parallel_obj_Bcast_log_0d
      procedure, private :: parallel_obj_Bcast_log_1d
  end type parallel_obj