leapParallel Module

Toolkit to manage parallel decomposition and MPI directives used in LEAP.


Uses

  • module~~leapparallel~~UsesGraph module~leapparallel leapParallel iso_fortran_env iso_fortran_env module~leapparallel->iso_fortran_env module~leapkinds leapKinds module~leapparallel->module~leapkinds mpi_f08 mpi_f08 module~leapparallel->mpi_f08 module~leapkinds->iso_fortran_env

Used by

  • module~~leapparallel~~UsedByGraph module~leapparallel leapParallel module~cdifs cdifs module~cdifs->module~leapparallel module~collisions collisions module~cdifs->module~collisions module~leapbc leapBC module~cdifs->module~leapbc module~leapblock leapBlock module~cdifs->module~leapblock module~leapdiffop leapDiffOp module~cdifs->module~leapdiffop module~leapeulerian leapEulerian module~cdifs->module~leapeulerian module~leaphypre leapHypre module~cdifs->module~leaphypre module~leapmonitor leapMonitor module~cdifs->module~leapmonitor module~leapsolver leapSolver module~cdifs->module~leapsolver module~leaptimer leapTimer module~cdifs->module~leaptimer module~particles_resolved particles_resolved module~cdifs->module~particles_resolved module~immersed_boundaries immersed_boundaries module~cdifs->module~immersed_boundaries module~leapio leapIO module~cdifs->module~leapio module~collisions->module~leapparallel module~collisions->module~leapblock module~collisions->module~leapmonitor module~collisions->module~leaptimer module~particles_point particles_point module~collisions->module~particles_point module~collisions->module~particles_resolved module~collisions->module~immersed_boundaries module~grans grans module~grans->module~leapparallel module~grans->module~collisions module~grans->module~leapbc module~grans->module~leapblock module~grans->module~leapdiffop module~grans->module~leapeulerian module~grans->module~leaphypre module~grans->module~leapmonitor module~grans->module~leapsolver module~grans->module~leaptimer module~grans->module~particles_point module~grans->module~particles_resolved module~grans->module~immersed_boundaries module~grans->module~leapio module~immersed_boundaries_markers immersed_boundaries_markers module~immersed_boundaries_markers->module~leapparallel module~immersed_boundaries_markers->module~leapbc module~immersed_boundaries_markers->module~leapblock module~immersed_boundaries_markers->module~leapdiffop module~immersed_boundaries_markers->module~leapeulerian module~immersed_boundaries_markers->module~leaphypre module~leaplagrangian leapLagrangian module~immersed_boundaries_markers->module~leaplagrangian module~immersed_boundaries_markers->module~leapmonitor module~immersed_boundaries_markers->module~leaptimer module~immersed_boundaries_markers->module~leapio module~immersed_boundaries_solids immersed_boundaries_solids module~immersed_boundaries_solids->module~leapparallel module~immersed_boundaries_solids->module~immersed_boundaries_markers module~immersed_boundaries_solids->module~leapblock module~immersed_boundaries_solids->module~leapeulerian module~immersed_boundaries_solids->module~leaplagrangian module~immersed_boundaries_solids->module~leapio module~leapbc->module~leapparallel module~leapbc->module~leapblock module~leapbc->module~leapeulerian module~leapbc->module~leapio module~leapblock->module~leapparallel module~leapio_hdf5 leapIO_hdf5 module~leapblock->module~leapio_hdf5 module~leapdiffop->module~leapparallel module~leapdiffop->module~leapbc module~leapdiffop->module~leapblock module~leapdiffop->module~leapeulerian module~leapeulerian->module~leapparallel module~leapeulerian->module~leapblock module~leapeulerian->module~leapio module~leaphypre->module~leapparallel module~leaphypre->module~leapblock module~leaphypre->module~leapeulerian module~leapio_h5hut leapIO_h5hut module~leapio_h5hut->module~leapparallel module~leapio_h5hut->module~leapio_hdf5 module~leapio_hdf5->module~leapparallel module~leapio_silo leapIO_silo module~leapio_silo->module~leapparallel module~leaplagrangian->module~leapparallel module~leaplagrangian->module~leapblock module~leaplagrangian->module~leapio module~leapmonitor->module~leapparallel module~leapsolver->module~leapparallel module~leapsolver->module~leaptimer module~leapsolver->module~leapio module~leaptimer->module~leapparallel module~particles_point->module~leapparallel module~particles_point->module~leapblock module~particles_point->module~leapdiffop module~particles_point->module~leapeulerian module~particles_point->module~leaplagrangian module~particles_point->module~leapmonitor module~particles_point->module~leaptimer module~particles_point->module~immersed_boundaries module~particles_point->module~leapio module~particles_resolved->module~leapparallel module~particles_resolved->module~leapbc module~particles_resolved->module~leapblock module~particles_resolved->module~leapdiffop module~particles_resolved->module~leapeulerian module~particles_resolved->module~leaplagrangian module~particles_resolved->module~leapmonitor module~particles_resolved->module~leaptimer module~particles_resolved->module~immersed_boundaries module~particles_resolved->module~leapio program~main main program~main->module~leapparallel program~main->module~cdifs program~main->module~grans program~main->module~leapsolver program~main->module~leaptimer program~main->module~leapio module~cdifs_advancesolution_smod cdifs_AdvanceSolution_smod module~cdifs_advancesolution_smod->module~cdifs module~cdifs_monitor_smod cdifs_Monitor_smod module~cdifs_monitor_smod->module~cdifs module~cdifs_preparesolver_smod cdifs_PrepareSolver_smod module~cdifs_preparesolver_smod->module~cdifs module~cdifs_writeoutputdata_smod cdifs_WriteOutputData_smod module~cdifs_writeoutputdata_smod->module~cdifs module~cdifs_writerestartdata_smod cdifs_WriteRestartData_smod module~cdifs_writerestartdata_smod->module~cdifs module~grans_advancesolution_smod grans_AdvanceSolution_smod module~grans_advancesolution_smod->module~grans module~grans_module_smod grans_module_smod module~grans_module_smod->module~grans module~grans_preparesolver_smod grans_PrepareSolver_smod module~grans_preparesolver_smod->module~grans module~grans_writeoutputdata_smod grans_WriteOutputData_smod module~grans_writeoutputdata_smod->module~grans module~grans_writerestartdata_smod grans_WriteRestartData_smod module~grans_writerestartdata_smod->module~grans module~immersed_boundaries->module~immersed_boundaries_markers module~immersed_boundaries->module~immersed_boundaries_solids module~leapio->module~leapio_h5hut module~leapio->module~leapio_hdf5 module~leapio->module~leapio_silo proc~bc_set_buildmask bc_set%bc_set_BuildMask proc~bc_set_buildmask->module~leapeulerian proc~cdifs_obj_preparesolverbodyforce cdifs_obj_PrepareSolverBodyforce proc~cdifs_obj_preparesolverbodyforce->module~leapbc proc~cdifs_obj_preparesolveroperators cdifs_obj_PrepareSolverOperators proc~cdifs_obj_preparesolveroperators->module~leapbc proc~cdifs_obj_preparesolveroperatorsdiv cdifs_obj_PrepareSolverOperatorsDIV proc~cdifs_obj_preparesolveroperatorsdiv->module~leapbc proc~cdifs_obj_preparesolveroperatorspgrad cdifs_obj_PrepareSolverOperatorsPGRAD proc~cdifs_obj_preparesolveroperatorspgrad->module~leapbc proc~cdifs_obj_preparesolveroperatorsvlap cdifs_obj_PrepareSolverOperatorsVLAP proc~cdifs_obj_preparesolveroperatorsvlap->module~leapbc proc~collision_obj_setupcollisionblock2 collision_obj%collision_obj_SetupCollisionBlock2 proc~collision_obj_setupcollisionblock2->module~leapblock proc~grans_obj_preparesolveroperators grans_obj_PrepareSolverOperators proc~grans_obj_preparesolveroperators->module~leapdiffop proc~marker_set_computesolidvolfrac marker_set%marker_set_ComputeSolidVolFrac proc~marker_set_computesolidvolfrac->module~leapdiffop

Derived Types

type, public ::  parallel_obj

Utility to handle MPI communications

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

generic, public :: 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
procedure, public, nopass :: Finalize => parallel_obj_Final
procedure, public :: Initialize => parallel_obj_Init
generic, public :: LOR => parallel_obj_Lor_0d, parallel_obj_Lor_1d
generic, public :: Max => parallel_obj_Max_int_0d, parallel_obj_Max_int_1d, parallel_obj_Max_real_0d, parallel_obj_Max_real_1d
generic, public :: Min => parallel_obj_Min_int_0d, parallel_obj_Min_int_1d, parallel_obj_Min_real_0d, parallel_obj_Min_real_1d
procedure, public :: RankIsRoot => parallel_obj_RankIsRoot
procedure, public :: Stop => parallel_obj_Stop
generic, public :: 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
procedure, public, nopass :: Time => parallel_obj_Time
procedure, public :: Topology => parallel_obj_Topology
procedure, private :: parallel_obj_Bcast_char
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_log_0d
procedure, private :: parallel_obj_Bcast_log_1d
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_Lor_0d
procedure, private :: parallel_obj_Lor_1d
procedure, private :: parallel_obj_Max_int_0d
procedure, private :: parallel_obj_Max_int_1d
procedure, private :: parallel_obj_Max_real_0d
procedure, private :: parallel_obj_Max_real_1d
procedure, private :: parallel_obj_Min_int_0d
procedure, private :: parallel_obj_Min_int_1d
procedure, private :: parallel_obj_Min_real_0d
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

type, private ::  communicators

MPI communicators.

Components

Type Visibility Attributes Name Initial
type(MPI_Comm), public :: g

Grid communicator

type(MPI_Comm), public :: w

Default World communicator

type, private ::  patch

Object that stores the rank of the current process, its coordinates in a Cartesian topology, and ranks of its neighbors.

Components

Type Visibility Attributes Name Initial
integer, public :: L(3)

Rank of left neighbor in each direction

integer, public :: R(3)

Rank of right neighbor in each direction

integer, public :: dir(3)

Process cooridnates in each direction

integer, public :: mine = 1

Rank of this process


Functions

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

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


Subroutines

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

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_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_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_Final()

Finalizes MPI and the parallel environment.

Arguments

None

private impure subroutine parallel_obj_Init(this)

Initializes the parallel environement.

Arguments

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

Parallel object

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

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

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