leapParallel Module

Contains all MPI decomposition info and directives used in LEAP.


Uses

  • module~~leapparallel~~UsesGraph module~leapparallel leapParallel module~leapkinds leapKinds module~leapparallel->module~leapkinds module~leapparser leapParser module~leapparallel->module~leapparser mpi_f08 mpi_f08 module~leapparallel->mpi_f08 iso_fortran_env iso_fortran_env module~leapkinds->iso_fortran_env module~leapparser->module~leapkinds module~leapcli leapCli module~leapparser->module~leapcli module~leapcli->module~leapkinds

Used by

  • module~~leapparallel~~UsedByGraph module~leapparallel leapParallel module~cdifs cdifs module~cdifs->module~leapparallel 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~particles_resolved particles_resolved module~cdifs->module~particles_resolved module~cdifs_cases cdifs_cases module~cdifs->module~cdifs_cases module~immersed_boundaries immersed_boundaries module~cdifs->module~immersed_boundaries module~grans grans module~grans->module~leapparallel module~grans->module~leapblock module~grans->module~leapeulerian module~grans->module~leaphypre module~grans->module~leapmonitor module~grans->module~leapsolver module~particles_point particles_point module~grans->module~particles_point module~grans->module~particles_resolved module~grans_cases grans_cases module~grans->module~grans_cases module~grans->module~immersed_boundaries module~immersed_boundaries_markers immersed_boundaries_markers module~immersed_boundaries_markers->module~leapparallel 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~leapio leapIO 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~leapblock->module~leapparallel module~leapcases leapCases module~leapcases->module~leapparallel module~leapcases->module~leapblock 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~leapio_mpi leapIO_mpi module~leapeulerian->module~leapio_mpi 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_hdf5 leapIO_hdf5 module~leapio_hdf5->module~leapparallel module~leapio_mpi->module~leapparallel module~leapio_mpi->module~leapblock module~leapio_silo leapIO_silo module~leapio_silo->module~leapparallel module~leapio_silo->module~leapblock module~leaplagrangian->module~leapparallel module~leaplagrangian->module~leapblock module~leaplagrangian->module~leapio module~leapmonitor->module~leapparallel module~leapsolver->module~leapparallel module~particles_point->module~leapparallel module~particles_point->module~leapblock module~particles_point->module~leapeulerian module~particles_point->module~leaplagrangian module~particles_point->module~leapio module~particles_resolved->module~leapparallel 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~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 module~cdifs_advancesolution_smod cdifs_AdvanceSolution_smod module~cdifs_advancesolution_smod->module~cdifs module~cdifs_cases->module~leapcases module~cdifs_cases->module~leapeulerian 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_cases->module~leapcases module~grans_cases->module~leapeulerian module~grans_cases->module~particles_point module~grans_cases->module~particles_resolved module~grans_cases->module~immersed_boundaries 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_mpi module~leapio->module~leapio_silo module~nga_smod nga_smod module~nga_smod->module~particles_point proc~add_markers add_markers proc~add_markers->module~particles_resolved proc~add_markers->module~immersed_boundaries proc~add_markers~2 add_markers proc~add_markers~2->module~particles_resolved proc~add_markers~2->module~immersed_boundaries proc~bc_set_buildmask bc_set%bc_set_BuildMask proc~bc_set_buildmask->module~leapeulerian proc~block_obj_read block_obj%block_obj_Read proc~block_obj_read->module~leapio_hdf5 proc~block_obj_write block_obj%block_obj_Write proc~block_obj_write->module~leapio_hdf5 proc~cdifs_channel_flow_bcs cdifs_channel_flow_bcs proc~cdifs_channel_flow_bcs->module~leapbc proc~cdifs_channel_flow_block cdifs_channel_flow_block proc~cdifs_channel_flow_block->module~leapblock proc~cdifs_cylinder_bcs cdifs_cylinder_bcs proc~cdifs_cylinder_bcs->module~leapbc proc~cdifs_lamb_oseen_bcs cdifs_lamb_oseen_bcs proc~cdifs_lamb_oseen_bcs->module~leapbc proc~cdifs_lid_driven_cavity_bcs cdifs_lid_driven_cavity_bcs proc~cdifs_lid_driven_cavity_bcs->module~leapbc proc~cdifs_lid_driven_cavity_block cdifs_lid_driven_cavity_block proc~cdifs_lid_driven_cavity_block->module~leapblock 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~cdifs_rebound_bcs cdifs_rebound_bcs proc~cdifs_rebound_bcs->module~leapbc proc~cdifs_rebound_respart cdifs_rebound_ResPart proc~cdifs_rebound_respart->module~particles_resolved proc~cdifs_settling_sphere_bcs cdifs_settling_sphere_bcs proc~cdifs_settling_sphere_bcs->module~leapbc proc~cdifs_settling_sphere_respart cdifs_settling_sphere_ResPart proc~cdifs_settling_sphere_respart->module~particles_resolved proc~cdifs_taylor_green_bcs cdifs_taylor_green_bcs proc~cdifs_taylor_green_bcs->module~leapbc proc~cdifs_vortex_dipole_bcs cdifs_vortex_dipole_bcs proc~cdifs_vortex_dipole_bcs->module~leapbc proc~cdifs_vortex_impingement_bcs cdifs_vortex_impingement_bcs proc~cdifs_vortex_impingement_bcs->module~leapbc proc~cdifs_vortex_impingement_block cdifs_vortex_impingement_block proc~cdifs_vortex_impingement_block->module~leapblock proc~grans_obj_preparesolver_operators grans_obj_PrepareSolver_operators proc~grans_obj_preparesolver_operators->module~leapdiffop proc~marker_set_computesolidvolfrac marker_set%marker_set_ComputeSolidVolFrac proc~marker_set_computesolidvolfrac->module~leapdiffop proc~op_obj_applylaplaciandc op_obj%op_obj_ApplyLaplacianDC proc~op_obj_applylaplaciandc->module~leapbc module~cavity_smod cavity_smod module~cavity_smod->module~cdifs_cases module~channel_flow_smod channel_flow_smod module~channel_flow_smod->module~cdifs_cases module~cylinder_smod cylinder_smod module~cylinder_smod->module~cdifs_cases module~headon_collision_smod headon_collision_smod module~headon_collision_smod->module~grans_cases module~homogeneous_cooling_smod homogeneous_cooling_smod module~homogeneous_cooling_smod->module~grans_cases module~lamb_oseen_smod lamb_oseen_smod module~lamb_oseen_smod->module~cdifs_cases module~rebound_smod rebound_smod module~rebound_smod->module~cdifs_cases module~rotating_drum_smod rotating_drum_smod module~rotating_drum_smod->module~grans_cases module~settling_sphere_smod settling_sphere_smod module~settling_sphere_smod->module~cdifs_cases module~taylor_green_smod taylor_green_smod module~taylor_green_smod->module~cdifs_cases module~vortex_dipole_smod vortex_dipole_smod module~vortex_dipole_smod->module~cdifs_cases module~vortex_impingement_smod vortex_impingement_smod module~vortex_impingement_smod->module~cdifs_cases proc~bc_set_read bc_set%bc_set_Read proc~bc_set_read->module~leapio proc~bc_set_write bc_set%bc_set_Write proc~bc_set_write->module~leapio proc~cdifs_cylinder_ib cdifs_cylinder_IB proc~cdifs_cylinder_ib->module~immersed_boundaries proc~cdifs_rebound_ib cdifs_rebound_IB proc~cdifs_rebound_ib->module~immersed_boundaries proc~cdifs_settling_sphere_ib cdifs_settling_sphere_IB proc~cdifs_settling_sphere_ib->module~immersed_boundaries

Derived Types

type, public ::  parallel_obj

Utility to handle MPI communications

Components

Type Visibility Attributes Name Initial
type(MPI_Datatype), public :: COMPLEX_DP
type(MPI_Datatype), public :: COMPLEX_SP
type(MPI_Datatype), public :: COMPLEX_WP
type(MPI_Datatype), public :: INT8
type(MPI_Datatype), public :: INTEGER
type(MPI_Datatype), public :: LOGICAL
type(MPI_Datatype), public :: REAL_DP
type(MPI_Datatype), public :: REAL_SP
type(MPI_Datatype), public :: REAL_WP
type(communicators), public :: comm

Communicators

type(MPI_Info), public :: mpi_info
character(len=str8), public :: mpiiofs
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

Type-Bound Procedures

procedure, public, nopass :: Finalize => parallel_obj_final
procedure, public :: Initialize => parallel_obj_init
procedure, public :: SetMPIFSHints => parallel_obj_SetMPIFSHints
procedure, public :: Stop => parallel_obj_stop
procedure, public, nopass :: Time => parallel_obj_time
procedure, public :: Topology => parallel_obj_topology
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_char ../../

Broadcast to all ranks

generic, public :: max => parallel_obj_max_int_0d, parallel_obj_max_int_1d, parallel_obj_max_real_0d, parallel_obj_max_real_1d ../../

Compute the maximum across all ranks

generic, public :: min => parallel_obj_min_int_0d, parallel_obj_min_int_1d, parallel_obj_min_real_0d, parallel_obj_min_real_1d ../../

Compute the minimum across all ranks

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 ../../

Sum across all ranks

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_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_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

Contains MPI ranks of current process and neighboring ones

Components

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

Rank of left neighbor

integer, public :: R(3)

Rank of right neighbor

integer, public :: dir(3)

Process cooridnate in each direction

integer, public :: mine = 1

Rank of this process

integer, public :: root = 1

Rank of root


Functions

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)


Subroutines

private subroutine parallel_obj_SetMPIFSHints(this)

Set the MPI file system hints

Arguments

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

Parallel object

private subroutine parallel_obj_bcast_char(this, A)

Arguments

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

Parallel object

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

private subroutine parallel_obj_bcast_int_0d(this, A)

Arguments

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

Parallel object

integer, intent(in) :: A

private subroutine parallel_obj_bcast_int_1d(this, A)

Arguments

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

Parallel object

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

private subroutine parallel_obj_bcast_int_2d(this, A)

Arguments

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

Parallel object

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

private subroutine parallel_obj_bcast_int_3d(this, A)

Arguments

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

Parallel object

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

private subroutine parallel_obj_bcast_real_0d(this, A)

Arguments

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

Parallel object

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

private subroutine parallel_obj_bcast_real_1d(this, A)

Arguments

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

Parallel object

real(kind=WP), intent(in), dimension(:) :: A

private subroutine parallel_obj_bcast_real_2d(this, A)

Arguments

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

Parallel object

real(kind=WP), dimension(:,:) :: A

private subroutine parallel_obj_bcast_real_3d(this, A)

Arguments

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

Parallel object

real(kind=WP), intent(in), dimension(:,:,:) :: A

private subroutine parallel_obj_final()

Finalize MPI and the parallel environment

Arguments

None

private subroutine parallel_obj_init(this)

Initialize the parallel environement

Arguments

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

Parallel object

private subroutine parallel_obj_max_int_0d(this, A, B)

Arguments

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

Parallel object

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

private subroutine parallel_obj_max_int_1d(this, A, B)

Arguments

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

Parallel object

integer, intent(in), dimension(:) :: A
integer, intent(out), dimension(:) :: B

private subroutine parallel_obj_max_real_0d(this, A, B)

Arguments

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

Parallel object

real(kind=WP), intent(in) :: A
real(kind=WP), intent(out) :: B

private subroutine parallel_obj_max_real_1d(this, A, B)

Arguments

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

Parallel object

real(kind=wp), intent(in), dimension(:) :: A
real(kind=wp), intent(out), dimension(:) :: B

private subroutine parallel_obj_min_int_0d(this, A, B)

Arguments

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

Parallel object

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

private subroutine parallel_obj_min_int_1d(this, A, B)

Arguments

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

Parallel object

integer, intent(in), dimension(:) :: A
integer, intent(out), dimension(:) :: B

private subroutine parallel_obj_min_real_0d(this, A, B)

Arguments

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

Parallel object

real(kind=WP), intent(in) :: A
real(kind=WP), intent(out) :: B

private 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), dimension(:) :: A
real(kind=wp), intent(out), dimension(:) :: B

private 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 subroutine parallel_obj_sum_int_0d(this, A, B)

Arguments

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

Parallel object

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

private subroutine parallel_obj_sum_int_1d(this, A, B)

Arguments

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

Parallel object

integer, intent(in), dimension(:) :: A
integer, intent(out), dimension(:) :: B

private subroutine parallel_obj_sum_int_2d(this, A, B)

Arguments

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

Parallel object

integer, intent(in), dimension(:,:) :: A
integer, intent(out), dimension(:,:) :: B

private subroutine parallel_obj_sum_int_3d(this, A, B)

Arguments

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

Parallel object

integer, intent(in), dimension(:,:,:) :: A
integer, intent(out), dimension(:,:,:) :: B

private subroutine parallel_obj_sum_real_0d(this, A, B)

Arguments

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

Parallel object

real(kind=WP), intent(in) :: A
real(kind=WP), intent(out) :: B

private subroutine parallel_obj_sum_real_1d(this, A, B)

Arguments

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

Parallel object

real(kind=WP), intent(in), dimension(:) :: A
real(kind=WP), intent(out), dimension(:) :: B

private subroutine parallel_obj_sum_real_2d(this, A, B)

Arguments

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

Parallel object

real(kind=WP), intent(in), dimension(:,:) :: A
real(kind=WP), intent(out), dimension(:,:) :: B

private subroutine parallel_obj_sum_real_3d(this, A, B)

Arguments

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

Parallel object

real(kind=WP), intent(in), dimension(:,:,:) :: A
real(kind=WP), intent(out), dimension(:,:,:) :: B

private subroutine parallel_obj_topology(this, is_periodic, Ng, Nb)

Builds a Cartesian topolgy with MPI

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