DomainDecomposition Derived Type

type, public, extends(DomainDecomposition_t) :: DomainDecomposition


Inherits

type~~domaindecomposition~2~~InheritsGraph type~domaindecomposition~2 DomainDecomposition c_ptr c_ptr type~domaindecomposition~2->c_ptr elemToRank_gpu, halo_sides_gpu type~domaindecomposition_t DomainDecomposition_t type~domaindecomposition~2->type~domaindecomposition_t

Contents

Source Code


Components

TypeVisibilityAttributesNameInitial
integer, public, pointer, dimension(:):: elemToRank
type(c_ptr), public :: elemToRank_gpu
logical, public :: halo_built =.false.
integer, public :: halo_nnbr =0
integer, public :: halo_nsides =0
integer, public, allocatable:: halo_offset(:)
integer, public, allocatable:: halo_rank(:)
type(c_ptr), public :: halo_sides_gpu =c_null_ptr
logical, public :: initialized =.false.
integer, public :: maxMsg
integer, public :: mpiComm
logical, public :: mpiEnabled =.false.
integer, public :: mpiPrec
integer, public :: msgCount
integer, public :: nElem
integer, public :: nRanks
integer, public, pointer, dimension(:):: offSetElem
integer, public :: rankId
integer, public, allocatable:: requests(:)
integer, public, allocatable:: stats(:,:)

Type-Bound Procedures

procedure, public :: BuildHaloExchange => BuildHaloExchange_DomainDecomposition

  • public subroutine BuildHaloExchange_DomainDecomposition(this, sideInfo, nElem, nSidesPerElem)

    Build the aggregated halo exchange tables for the mesh this domain decomposition belongs to.

    Read more…

    Arguments

    TypeIntentOptionalAttributesName
    class(DomainDecomposition), intent(inout) :: this
    integer, intent(in) :: sideInfo(1:5,1:nSidesPerElem,1:nElem)
    integer, intent(in) :: nElem
    integer, intent(in) :: nSidesPerElem

procedure, public :: FinalizeMPIExchangeAsync

procedure, public :: Free => Free_DomainDecomposition

procedure, public :: GenerateDecomposition => GenerateDecomposition_DomainDecomposition_t

procedure, public :: Init => Init_DomainDecomposition

procedure, public :: SetElemToRank => SetElemToRank_DomainDecomposition

Source Code

  type,extends(DomainDecomposition_t) :: DomainDecomposition
    type(c_ptr) :: elemToRank_gpu

    ! Aggregated MPI halo exchange tables, shared by every field on the mesh.
    ! All locally-owned sides with a neighbor element on another rank are
    ! enumerated once, grouped by neighbor rank and sorted by global side id
    ! within each group, so that the two ranks sharing an interface enumerate
    ! its sides in the same order and packed message buffers line up without
    ! any per-message metadata. Field classes allocate their own packed
    ! send/receive buffers (sized by their variable count) and share these
    ! tables for the pack/unpack kernels and message posting.
    logical :: halo_built = .false.
    integer :: halo_nnbr = 0 ! Number of neighboring ranks
    integer :: halo_nsides = 0 ! Total number of sides exchanged with other ranks
    integer,allocatable :: halo_rank(:) ! (1:halo_nnbr) neighbor rank ids
    integer,allocatable :: halo_offset(:) ! (1:halo_nnbr+1) side-list offsets per neighbor
    type(c_ptr) :: halo_sides_gpu = c_null_ptr ! (element,side,flip) triplets, device copy

  contains

    procedure :: Init => Init_DomainDecomposition
    procedure :: Free => Free_DomainDecomposition

    procedure :: SetElemToRank => SetElemToRank_DomainDecomposition

    procedure :: BuildHaloExchange => BuildHaloExchange_DomainDecomposition

  endtype DomainDecomposition