FEAT 3
Finite Element Analysis Toolbox
Loading...
Searching...
No Matches
FEAT::Global::AlgDofParti< LocalVector_, Mirror_ > Class Template Reference

Algebraic DOF Partitioning implementation. More...

#include <alg_dof_parti.hpp>

Public Types

typedef Intern::ADPAux< IndexVectorTypeADPAuxType
 auxiliary helper class type More...
 
typedef LAFEM::DenseVector< DataType, IndexTypeBufferVectorType
 the type for buffers used by our mirrors More...
 
typedef LocalVectorType::DataType DataType
 our data type More...
 
typedef LAFEM::VectorMirror< DataType, IndexTypeDoneeMirrorType
 type of mirror for neighbor donee owned dof indices More...
 
typedef Global::Gate< LocalVectorType, MirrorTypeGateType
 the global gate type More...
 
typedef Global::Vector< LocalVectorType, MirrorTypeGlobalVectorType
 the global vector type More...
 
typedef LocalVectorType::IndexType IndexType
 our index type More...
 
typedef LocalVectorType::template ContainerTypeByDI< IndexType, IndexTypeIndexVectorType
 the index vector type, this one is required for internal computations More...
 
typedef LocalVector_ LocalVectorType
 the local vector type More...
 
typedef Mirror_ MirrorType
 the vector mirror type More...
 
typedef MirrorType OwnedMirrorType
 type of mirror for owned local dof indices More...
 
typedef MirrorType OwnerMirrorType
 type of mirror for neighbor owner local dof indices More...
 

Public Member Functions

 AlgDofParti ()
 default constructor More...
 
 AlgDofParti (const AlgDofParti &)=delete
 no copy, no problems
 
virtual ~AlgDofParti ()=default
 virtual destructor
 
void assemble_allgather (bool yes_i_really_want_to_do_this=false)
 Assembles the required data for the AlgDofPartiSystem::apply() function. More...
 
void assemble_by_gate (const GateType &gate, Index extra_local=0u, Index extra_shared=0u)
 Assembles the AlgDofParti object from a given Global::Gate. More...
 
std::size_t bytes () const
 
void clear ()
 Resets the whole object. More...
 
template<typename DT2_ >
void download_vector (const DT2_ *owned_dofs, LocalVectorType &local_vector, DataType *extra_local=nullptr, DataType *extra_shared=nullptr) const
 
const std::vector< int > & get_all_global_dof_counts () const
 Returns the all-global-dof-counts vector. More...
 
const std::vector< int > & get_all_global_dof_offsets () const
 Returns the all-global-dof-offsets vector. More...
 
String get_block_information () const
 Returns the block information of the algebraic dof partitioning as an XML string. More...
 
const Dist::Commget_comm () const
 
const DoneeMirrorTypeget_donee_mirror (Index i) const
 Returns a donee neighbor mirror. More...
 
int get_donee_rank (Index i) const
 Returns an donee neighbor rank. More...
 
const IndexVectorTypeget_global_dof_indices () const
 Returns the global-dof-indices array. More...
 
Index get_global_dof_offset () const
 
Index get_num_donee_neighbors () const
 
Index get_num_global_dofs () const
 
Index get_num_local_dofs () const
 
Index get_num_owned_dofs () const
 
Index get_num_owner_neighbors () const
 
const OwnedMirrorTypeget_owned_mirror () const
 Returns the Mirror of the owned DOFs. More...
 
const OwnerMirrorTypeget_owner_mirror (Index i) const
 Returns an owner neighbor mirror. More...
 
int get_owner_rank (Index i) const
 Returns an owner neighbor rank. More...
 
AlgDofPartioperator= (const AlgDofParti &)=delete
 no copy, no problems
 
template<typename DT2_ >
void upload_vector (DT2_ *owned_dofs, const LocalVectorType &local_vector, const DataType *extra_local=nullptr, const DataType *extra_shared=nullptr) const
 

Public Attributes

std::vector< int > _all_global_dof_counts
 global DOF counts of all processes, More...
 
std::vector< int > _all_global_dof_offset
 global DOF offsets of all processes, More...
 
String _block_information
 a string containing the block information in XML format More...
 
const Dist::Comm_comm
 our communicator More...
 
std::vector< DoneeMirrorType_donee_mirrors
 rank/mirror-pair of DOF-donee processes More...
 
std::vector< int > _donee_ranks
 ranks of DOF-donee neighbor processes More...
 
Index _extra_dof_offset
 offset of first extra DOF More...
 
Index _extra_local_dof_count
 number of extra local dofs; may be different for each process More...
 
Index _extra_shared_dof_count
 number of extra shared dofs; must be equal on all processes More...
 
Index _global_dof_count
 global dof count over all processes More...
 
IndexVectorType _global_dof_idx
 global dof indices for each local dof More...
 
Index _global_dof_offset
 global dof offset of this process More...
 
Index _local_dof_count
 number of local dofs of this process More...
 
Index _owned_dof_count
 number of owned dofs of this process More...
 
MirrorType _owned_mirror
 mirror for this process's owned DOFs More...
 
std::vector< OwnerMirrorType_owner_mirrors
 rank/mirror-pair of DOF-owner processes More...
 
std::vector< int > _owner_ranks
 ranks of DOF-owner neighbor processes More...
 

Static Protected Member Functions

template<typename DT2_ >
static Index _gather (LAFEM::DenseVector< DataType, IndexType > &buffer, const DT2_ *vector, const LAFEM::VectorMirror< DataType, IndexType > &mirror)
 
static Index _get_donee_dofs (std::vector< IndexType > &send_buf, const LAFEM::VectorMirror< DataType, IndexType > &donee_mir, Index offset)
 

Detailed Description

template<typename LocalVector_, typename Mirror_>
class FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >

Algebraic DOF Partitioning implementation.

This class implements the functionality to generate and manage a distributed partitioning of the degrees of freedom of a (linear) system in an algebraic sense instead of the usual domain-decomposition approach. With this algebraic dof partitioning approach (ADP), each process in a given communicator becomes the unique owner of a set of consecutively enumerated global dofs, whereas in the domain-decomposition approach a single global dof may be shared by several processes, thus having no unique owner. The primary purpose of this class and the closely related AlgDofPartiSystem class is to offer the capability of embedding various third-party linear solver libraries as solvers, preconditioners or smoothers within the solver framework used in FEAT.

To use this class, one needs to have a fully assembled Global::Gate object, which contains all the partitioning information in the usual domain-decomposition sense, which is used as a "starting point" for an algebraic DOF partitioning in the assemble_by_gate() function.

Throughout this class and the closely related AlgDofPartiSystem class, you will frequently find the terms "local DOF", "shared DOF" and "owned DOF" and "donee DOF", which are defined as follows:

  • "local" DOFs always means the DOFs as they are used in the domain decomposition world.
  • "shared" DOFs are all local DOFs are "shared" by at least two processes in the domain decomposition world. In other words: Each local DOF, which is part of at least one neighbor mirror in the Global::Gate, is a shared DOF.
  • "owned" DOFs are all local DOFs, which:
    • are not shared with any other process
    • are only shared with processes of higher comm rank
  • "donee" DOFs are all shared DOFs, which are not owned DOFs

Furthermore, the neighbor ranks and mirrors, which are used in the Global::Gate of the domain-decomposition based approach, are converted into "owner" and "donee" neighbor ranks and mirrors in this algebraic approach. The basic idea is the following: Assume that three processes A, B and C share a common set of DOFs, i.e. they are neighbors in the domain-decomposition sense, and assume that process A has a lower rank than process B and process C. Due to the "ownership" rule (lowest rank is owner), process A becomes the "owner" of the shared DOFs and thus is responsible for enumerating and managing all DOFs shared by A, B and C, which in turn makes processes B and C "donees". Now, because process A owns at least one DOF that is also a local DOF of process B and a local DOF of process C in the domain decomposition sense, we have that:

  • process A is an "owner neighbor" of process B
  • process A is an "owner neighbor" of process C
  • process B is a "donee neighbor" of process A
  • process C is a "donee neighbor" of process A

Algebraic DOF partitioning of combined discretizations:
This class supports the algebraic dof partitioning of simple scalar FE spaces, which are represented by the LAFEM::DenseVector class, as well as more complex space combinations, which are represented by a hierarchy of meta containers, such as the LAFEM::TupleVector, and basic containers like LAFEM::DenseVector and/or LAFEM::DenseVectorBlocked; one prominent example is the velocity-pressure space pair used in Stokes systems which is typically represented by a LAFEM::DenseVectorBlocked for the velocity components and a (scalar) LAFEM::DenseVector for the pressure component, which are then joined together by a LAFEM::TupleVector meta container to form a single class that contains the entire velocity-pressure pair.

In the case of a combined discretization (such as the velocity-pressure pair), the algebraic dof partitioning distributes the DOFs of the individual components in an interleaved fashion among the processes, i.e. each process owns a set of DOFs of the first component followed by a set of DOFs of the second component, etc., so in the example of the velocity-pressure pair each process owns a set of consecutively numbered velocity DOFs followed by a set of consecutively numbered pressure DOFs, and so from a global perspective, the global DOFs alternate between sets of velocity and pressure DOFs across all processes.

Example:
Let's assume that we have 25x2=50 velocity DOFs (V0.0, V0.1, V1.0, ..., V24.0, V24.1) and 12 pressure DOFs (P0, ..., P11) in total partitioned among 4 processes and let's assume that each process owns 3 pressure DOFs and that the four processes own 18, 12, 12 and 8 velocity dofs, respectively, then the algebraic DOF partitioning of the 62 total global DOFs would look like in the table below:

+------------------------------+-------------------------------+--------------------------------+----------------------------------+
|          Process 0           |           Process 1           |            Process 2           |            Process 3             |
+------------------------------+-------------------------------+--------------------------------+----------------------------------+
|    0, ...,    17, 18, 19, 20 |    21, ...,    32, 33, 34, 35 |     36, ...,    47, 48, 49, 50 |    51, ...,     58, 59,  60,  61 | <- global algebraic DOF
+------------------------------+-------------------------------+--------------------------------+----------------------------------+
|    0, ...,    17, 18, 19, 20 |     0, ...,    11, 12, 13, 14 |      0, ...,    11, 12, 13, 14 |     0, ...,      8,  9,  10,  11 | <- owned (local) algebraic DOF
+------------------------------+-------------------------------+--------------------------------+----------------------------------+
| V0.0, ...,  V8.1             |  V9.0, ..., V14.1             |  V15.0, ..., V20.1             |  V21.0, ..., V24.1               | <- global velocity DOF (interpreted as blocked DOFs)
|  V'0, ...,  V'17             |  V'18, ...,  V'29             |   V'30, ...,  V'41             |   V'42, ...,  V'49               | <- global velocity DOF (interpreted as scalar DOFs)
|                   P0, P1, P2 |                    P3, P4, P5 |                     P6, P7, P8 |                     P9, P10, P11 | <- global pressure DOF (scalar)
+------------------------------+-------------------------------+--------------------------------+----------------------------------+
| v0.0, ...,  v8.1             |  v0.0, ...,  v5.1             |   v0.0, ...,  v5.1             |   v0.0, ...,  v4.1               | <- owned (local) velocity DOF (interpreted as blocked DOFs)
|  v'0, ...,  v'17             |   v'0, ...,  v'11             |    v'0, ...,  v'11             |    v'0, ...,   v'7               | <- owned (local) velocity DOF (interpreted as scalar DOFs)
|                   p0, p1, p2 |                    p0, p1, p2 |                     p0, p1, p2 |                     p0,  p1,  p2 | <- owned (local) pressure DOF
+------------------------------+-------------------------------+--------------------------------+----------------------------------+

So in the above example, global algebraic DOF 33 corresponds to global pressure DOF 3 (P3), which is owned by process 1 and which corresponds to the owned pressure DOF 1 (p1) on that process, whereas global DOF 47 corresponds to the second block-component (index 1) of the global velocity DOF 20 (V20.1), which is owned by process 2 and which corresponds to the owned velocity DOF 5 (v5.1), etc.

Retrieving ADP block information for combined discretizations:
Some third-party libraries, which are used as solver backends for ADP based solvers, do not treat the system as a black box, but require information about the composition of the system components within the algebraic DOF partitioning – or in simpler terms: the library needs to know which DOF is a velocity DOF and which DOF is a pressure DOF in the example above. This information can be queried by calling the get_block_information() member function, which returns a String object containing the relevant offsets and counts encoded in XML format.

The returned XML string consists of one or more lines and each line contains a single XML marker, which currently is either

  • a closed <Scalar .../> marker that represents a scalar component that corresponds to a LAFEM::DenseVector container
  • a closed <Blocked .../> marker that represents a blocked/vector-valued component that corresponds to a LAFEM::DenseVectorBlocked container
  • an open <Tuple ...> marker that represents a meta component that combines one or more other components and which corresponds to the LAFEM::TupleVector container
  • a </Tuple> marker that closes a previously opened <Tuple ...> marker

Each of the above XML markers contains the following five attributes in alphabetical order:

  • gc ("global count"): contains the total number of global DOFs on all processes of the corresponding component; this quantity is identical on all processes
  • gf ("global first"): represents the index of the first DOF of this component that is is owned by the current process
  • go ("global offset"): represents the index of the first global DOF owned by this process, which corresponds to the first global DOF of the corresponding component
  • lc ("local count"): contains the number of local DOFs within this component that are owned by the current process.
  • lo ("local offset"): represents the index of the first local DOF owned by this process, which corresponds to the first local DOF of the corresponding component

Additionally, the <Blocked .../> marker also contains the following attribute:

  • bs ("block size"): contains the total number values per DOF block

In the example above, the four processes would contain the following block information strings:

  • Process 0:
    <Tuple gc="62" gf="0" go="0" lc="21" lo="0">
    <Blocked bs="2" gc="50" gf="0" go="0" lc="18" lo="0"/>
    <Scalar gc="12" gf="0" go="18" lc="3" lo="18"/>
    </Tuple>
    
  • Process 1:
    <Tuple gc="62" gf="21" go="21" lc="15" lo="0">
    <Blocked bs="2" gc="50" gf="18" go="21" lc="12" lo="0"/>
    <Scalar gc="12" gf="3" go="33" lc="3" lo="12"/>
    </Tuple>
    
  • Process 2:
    <Tuple gc="62" gf="36" go="36" lc="15" lo="0">
    <Blocked bs="2" gc="50" gf="30" go="36" lc="12" lo="0"/>
    <Scalar gc="12" gf="6" go="48" lc="3" lo="12"/>
    </Tuple>
    
  • Process 3:

    <Tuple gc="62" gf="51" go="51" lc="11" lo="0">
    <Blocked bs="2" gc="50" gf="42" go="51" lc="8" lo="0"/>
    <Scalar gc="12" gf="9" go="59" lc="3" lo="8"/>
    </Tuple>
    
    Todo:

    decide what happens if this process owns no dofs at all

    make sure that this works for discontinuous elements, too

    ensure that extra local and extra shared dofs are handled appropriately

Author
Peter Zajac

Definition at line 191 of file alg_dof_parti.hpp.

Member Typedef Documentation

◆ ADPAuxType

template<typename LocalVector_ , typename Mirror_ >
typedef Intern::ADPAux<IndexVectorType> FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::ADPAuxType

auxiliary helper class type

Definition at line 213 of file alg_dof_parti.hpp.

◆ BufferVectorType

template<typename LocalVector_ , typename Mirror_ >
typedef LAFEM::DenseVector<DataType, IndexType> FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::BufferVectorType

the type for buffers used by our mirrors

Definition at line 216 of file alg_dof_parti.hpp.

◆ DataType

template<typename LocalVector_ , typename Mirror_ >
typedef LocalVectorType::DataType FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::DataType

our data type

Definition at line 200 of file alg_dof_parti.hpp.

◆ DoneeMirrorType

template<typename LocalVector_ , typename Mirror_ >
typedef LAFEM::VectorMirror<DataType, IndexType> FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::DoneeMirrorType

type of mirror for neighbor donee owned dof indices

Definition at line 223 of file alg_dof_parti.hpp.

◆ GateType

template<typename LocalVector_ , typename Mirror_ >
typedef Global::Gate<LocalVectorType, MirrorType> FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::GateType

the global gate type

Definition at line 207 of file alg_dof_parti.hpp.

◆ GlobalVectorType

template<typename LocalVector_ , typename Mirror_ >
typedef Global::Vector<LocalVectorType, MirrorType> FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::GlobalVectorType

the global vector type

Definition at line 205 of file alg_dof_parti.hpp.

◆ IndexType

template<typename LocalVector_ , typename Mirror_ >
typedef LocalVectorType::IndexType FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::IndexType

our index type

Definition at line 202 of file alg_dof_parti.hpp.

◆ IndexVectorType

template<typename LocalVector_ , typename Mirror_ >
typedef LocalVectorType::template ContainerTypeByDI<IndexType, IndexType> FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::IndexVectorType

the index vector type, this one is required for internal computations

Definition at line 210 of file alg_dof_parti.hpp.

◆ LocalVectorType

template<typename LocalVector_ , typename Mirror_ >
typedef LocalVector_ FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::LocalVectorType

the local vector type

Definition at line 195 of file alg_dof_parti.hpp.

◆ MirrorType

template<typename LocalVector_ , typename Mirror_ >
typedef Mirror_ FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::MirrorType

the vector mirror type

Definition at line 197 of file alg_dof_parti.hpp.

◆ OwnedMirrorType

template<typename LocalVector_ , typename Mirror_ >
typedef MirrorType FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::OwnedMirrorType

type of mirror for owned local dof indices

Definition at line 219 of file alg_dof_parti.hpp.

◆ OwnerMirrorType

template<typename LocalVector_ , typename Mirror_ >
typedef MirrorType FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::OwnerMirrorType

type of mirror for neighbor owner local dof indices

Definition at line 221 of file alg_dof_parti.hpp.

Constructor & Destructor Documentation

◆ AlgDofParti()

template<typename LocalVector_ , typename Mirror_ >
FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::AlgDofParti ( )
inline

default constructor

Definition at line 268 of file alg_dof_parti.hpp.

Member Function Documentation

◆ _gather()

template<typename LocalVector_ , typename Mirror_ >
template<typename DT2_ >
static Index FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_gather ( LAFEM::DenseVector< DataType, IndexType > &  buffer,
const DT2_ *  vector,
const LAFEM::VectorMirror< DataType, IndexType > &  mirror 
)
inlinestaticprotected

Definition at line 874 of file alg_dof_parti.hpp.

◆ _get_donee_dofs()

template<typename LocalVector_ , typename Mirror_ >
static Index FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_get_donee_dofs ( std::vector< IndexType > &  send_buf,
const LAFEM::VectorMirror< DataType, IndexType > &  donee_mir,
Index  offset 
)
inlinestaticprotected

Definition at line 862 of file alg_dof_parti.hpp.

◆ assemble_allgather()

template<typename LocalVector_ , typename Mirror_ >
void FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::assemble_allgather ( bool  yes_i_really_want_to_do_this = false)
inline

Assembles the required data for the AlgDofPartiSystem::apply() function.

Warning
Calling this function and (more importantly) the AlgDofPartiSystem::apply() functions will totally screw up the scalability of your application, so the code will blow up in your face on bigger clusters.
Do not use this function except for small-scale debugging purposes. You have been warned.
Parameters
[in]yes_i_really_want_to_do_thisAn assertion will fire if this is false. The only purpose of this parameter is to force you to read the warning in this documentation first.

Definition at line 493 of file alg_dof_parti.hpp.

References FEAT::Dist::Comm::allgather(), FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_global_dof_offset(), FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_num_global_dofs(), FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_num_owned_dofs(), FEAT::Dist::Comm::size(), and XASSERTM.

◆ assemble_by_gate()

template<typename LocalVector_ , typename Mirror_ >
void FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::assemble_by_gate ( const GateType gate,
Index  extra_local = 0u,
Index  extra_shared = 0u 
)
inline

◆ bytes()

◆ clear()

◆ download_vector()

template<typename LocalVector_ , typename Mirror_ >
template<typename DT2_ >
void FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::download_vector ( const DT2_ *  owned_dofs,
LocalVectorType local_vector,
DataType extra_local = nullptr,
DataType extra_shared = nullptr 
) const
inline

Definition at line 772 of file alg_dof_parti.hpp.

◆ get_all_global_dof_counts()

template<typename LocalVector_ , typename Mirror_ >
const std::vector< int > & FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_all_global_dof_counts ( ) const
inline

Returns the all-global-dof-counts vector.

Attention
This vector is only allocated after assemble_allgather() has been called.
Don't use this unless you really know what you are doing!
Returns
The all-global-dof-counts vector.

Definition at line 475 of file alg_dof_parti.hpp.

References FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_all_global_dof_counts, and XASSERTM.

◆ get_all_global_dof_offsets()

template<typename LocalVector_ , typename Mirror_ >
const std::vector< int > & FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_all_global_dof_offsets ( ) const
inline

Returns the all-global-dof-offsets vector.

Attention
This vector is only allocated after assemble_allgather() has been called.
Don't use this unless you really know what you are doing!
Returns
The all-global-dof-offsets vector.

Definition at line 460 of file alg_dof_parti.hpp.

References FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_all_global_dof_offset, and XASSERTM.

◆ get_block_information()

template<typename LocalVector_ , typename Mirror_ >
String FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_block_information ( ) const
inline

Returns the block information of the algebraic dof partitioning as an XML string.

Definition at line 332 of file alg_dof_parti.hpp.

References FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_block_information.

◆ get_comm()

template<typename LocalVector_ , typename Mirror_ >
const Dist::Comm * FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_comm ( ) const
inline
Returns
The communicator

Definition at line 308 of file alg_dof_parti.hpp.

References FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_comm.

◆ get_donee_mirror()

template<typename LocalVector_ , typename Mirror_ >
const DoneeMirrorType & FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_donee_mirror ( Index  i) const
inline

Returns a donee neighbor mirror.

Note
The indices of a donee neighbor mirror are owned DOF indices.
Parameters
[in]iThe index of the donee neighbor.
Returns
The mirror of the i-th donee neighbor.

Definition at line 446 of file alg_dof_parti.hpp.

Referenced by FEAT::Global::AlgDofPartiSystem< LocalMatrix_, LocalFilter_, Mirror_ >::_assemble_data_mirrors(), and FEAT::Global::AlgDofPartiSystem< LocalMatrix_, LocalFilter_, Mirror_ >::_assemble_structure().

◆ get_donee_rank()

template<typename LocalVector_ , typename Mirror_ >
int FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_donee_rank ( Index  i) const
inline

Returns an donee neighbor rank.

Parameters
[in]iThe index of the donee neighbor.
Returns
The rank of the i-th donee neighbor.

Definition at line 412 of file alg_dof_parti.hpp.

Referenced by FEAT::Global::AlgDofPartiSystem< LocalMatrix_, LocalFilter_, Mirror_ >::_assemble_buffers(), and FEAT::Global::AlgDofPartiSystem< LocalMatrix_, LocalFilter_, Mirror_ >::upload_matrix_numeric().

◆ get_global_dof_indices()

◆ get_global_dof_offset()

template<typename LocalVector_ , typename Mirror_ >
Index FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_global_dof_offset ( ) const
inline
Returns
The index of the first global DOF owned by this process.

Definition at line 356 of file alg_dof_parti.hpp.

References FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_global_dof_offset.

Referenced by FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::assemble_allgather().

◆ get_num_donee_neighbors()

◆ get_num_global_dofs()

◆ get_num_local_dofs()

template<typename LocalVector_ , typename Mirror_ >
Index FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_num_local_dofs ( ) const
inline
Returns
The number of local DOFs shared by this process.

Definition at line 344 of file alg_dof_parti.hpp.

References FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_local_dof_count.

◆ get_num_owned_dofs()

template<typename LocalVector_ , typename Mirror_ >
Index FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_num_owned_dofs ( ) const
inline

◆ get_num_owner_neighbors()

template<typename LocalVector_ , typename Mirror_ >
Index FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_num_owner_neighbors ( ) const
inline

◆ get_owned_mirror()

template<typename LocalVector_ , typename Mirror_ >
const OwnedMirrorType & FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_owned_mirror ( ) const
inline

◆ get_owner_mirror()

template<typename LocalVector_ , typename Mirror_ >
const OwnerMirrorType & FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_owner_mirror ( Index  i) const
inline

Returns an owner neighbor mirror.

Note
The indices of an owner neighbor mirror are local DOF indices.
Parameters
[in]iThe index of the owner neighbor.
Returns
The mirror of the i-th owner neighbor.

Definition at line 429 of file alg_dof_parti.hpp.

Referenced by FEAT::Global::AlgDofPartiSystem< LocalMatrix_, LocalFilter_, Mirror_ >::_assemble_buffers(), and FEAT::Global::AlgDofPartiSystem< LocalMatrix_, LocalFilter_, Mirror_ >::_assemble_data_mirrors().

◆ get_owner_rank()

template<typename LocalVector_ , typename Mirror_ >
int FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_owner_rank ( Index  i) const
inline

Returns an owner neighbor rank.

Parameters
[in]iThe index of the owner neighbor.
Returns
The rank of the i-th owner neighbor.

Definition at line 398 of file alg_dof_parti.hpp.

Referenced by FEAT::Global::AlgDofPartiSystem< LocalMatrix_, LocalFilter_, Mirror_ >::_assemble_buffers(), and FEAT::Global::AlgDofPartiSystem< LocalMatrix_, LocalFilter_, Mirror_ >::upload_matrix_numeric().

◆ upload_vector()

template<typename LocalVector_ , typename Mirror_ >
template<typename DT2_ >
void FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::upload_vector ( DT2_ *  owned_dofs,
const LocalVectorType local_vector,
const DataType extra_local = nullptr,
const DataType extra_shared = nullptr 
) const
inline

Definition at line 743 of file alg_dof_parti.hpp.

Member Data Documentation

◆ _all_global_dof_counts

template<typename LocalVector_ , typename Mirror_ >
std::vector<int> FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_all_global_dof_counts

◆ _all_global_dof_offset

template<typename LocalVector_ , typename Mirror_ >
std::vector<int> FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_all_global_dof_offset

◆ _block_information

template<typename LocalVector_ , typename Mirror_ >
String FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_block_information

a string containing the block information in XML format

Definition at line 255 of file alg_dof_parti.hpp.

Referenced by FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::get_block_information().

◆ _comm

template<typename LocalVector_ , typename Mirror_ >
const Dist::Comm* FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_comm

◆ _donee_mirrors

template<typename LocalVector_ , typename Mirror_ >
std::vector<DoneeMirrorType> FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_donee_mirrors

◆ _donee_ranks

template<typename LocalVector_ , typename Mirror_ >
std::vector<int> FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_donee_ranks

ranks of DOF-donee neighbor processes

Definition at line 249 of file alg_dof_parti.hpp.

Referenced by FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::assemble_by_gate().

◆ _extra_dof_offset

template<typename LocalVector_ , typename Mirror_ >
Index FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_extra_dof_offset

offset of first extra DOF

Definition at line 241 of file alg_dof_parti.hpp.

Referenced by FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::clear().

◆ _extra_local_dof_count

template<typename LocalVector_ , typename Mirror_ >
Index FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_extra_local_dof_count

number of extra local dofs; may be different for each process

Definition at line 237 of file alg_dof_parti.hpp.

Referenced by FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::assemble_by_gate(), and FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::clear().

◆ _extra_shared_dof_count

template<typename LocalVector_ , typename Mirror_ >
Index FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_extra_shared_dof_count

number of extra shared dofs; must be equal on all processes

Definition at line 239 of file alg_dof_parti.hpp.

Referenced by FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::assemble_by_gate(), and FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::clear().

◆ _global_dof_count

template<typename LocalVector_ , typename Mirror_ >
Index FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_global_dof_count

◆ _global_dof_idx

template<typename LocalVector_ , typename Mirror_ >
IndexVectorType FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_global_dof_idx

◆ _global_dof_offset

template<typename LocalVector_ , typename Mirror_ >
Index FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_global_dof_offset

◆ _local_dof_count

template<typename LocalVector_ , typename Mirror_ >
Index FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_local_dof_count

◆ _owned_dof_count

template<typename LocalVector_ , typename Mirror_ >
Index FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_owned_dof_count

◆ _owned_mirror

template<typename LocalVector_ , typename Mirror_ >
MirrorType FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_owned_mirror

◆ _owner_mirrors

template<typename LocalVector_ , typename Mirror_ >
std::vector<OwnerMirrorType> FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_owner_mirrors

◆ _owner_ranks

template<typename LocalVector_ , typename Mirror_ >
std::vector<int> FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::_owner_ranks

ranks of DOF-owner neighbor processes

Definition at line 247 of file alg_dof_parti.hpp.

Referenced by FEAT::Global::AlgDofParti< LocalVector_, Mirror_ >::assemble_by_gate().


The documentation for this class was generated from the following file: