Distributed operator

Builder

template<typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
class DefaultApproximationBuilder

Public Functions

inline DefaultApproximationBuilder(const VirtualInternalGenerator<CoefficientPrecision> &generator, const Cluster<CoordinatePrecision> &target_cluster, const Cluster<CoordinatePrecision> &source_cluster, const HMatrixTreeBuilder<CoefficientPrecision, CoordinatePrecision> &hmatrix_tree_builder, MPI_Comm communicator)
inline DefaultApproximationBuilder(const VirtualGenerator<CoefficientPrecision> &generator, const Cluster<CoordinatePrecision> &target_cluster, const Cluster<CoordinatePrecision> &source_cluster, const HMatrixTreeBuilder<CoefficientPrecision, CoordinatePrecision> &hmatrix_tree_builder, MPI_Comm communicator)

Public Members

HMatrix<CoefficientPrecision, CoordinatePrecision> hmatrix
DistributedOperator<CoefficientPrecision> &distributed_operator
const HMatrix<CoefficientPrecision, CoordinatePrecision> *block_diagonal_hmatrix = {nullptr}
template<typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
class DefaultLocalApproximationBuilder

Public Functions

inline DefaultLocalApproximationBuilder(const VirtualInternalGenerator<CoefficientPrecision> &generator, const Cluster<CoordinatePrecision> &target_cluster, const Cluster<CoordinatePrecision> &source_cluster, const HMatrixTreeBuilder<CoefficientPrecision, CoordinatePrecision> &hmatrix_tree_builder, MPI_Comm communicator)
inline DefaultLocalApproximationBuilder(const VirtualGenerator<CoefficientPrecision> &generator, const Cluster<CoordinatePrecision> &target_cluster, const Cluster<CoordinatePrecision> &source_cluster, const HMatrixTreeBuilder<CoefficientPrecision, CoordinatePrecision> &hmatrix_tree_builder, MPI_Comm communicator)

Public Members

HMatrix<CoefficientPrecision, CoordinatePrecision> hmatrix
DistributedOperator<CoefficientPrecision> &distributed_operator
const HMatrix<CoefficientPrecision, CoordinatePrecision> *block_diagonal_hmatrix = {nullptr}
template<typename CoefficientPrecision, typename CoordinatePrecision = underlying_type<CoefficientPrecision>>
class CustomApproximationBuilder

Public Functions

inline explicit CustomApproximationBuilder(const Cluster<CoordinatePrecision> &target_cluster, const Cluster<CoordinatePrecision> &source_cluster, MPI_Comm communicator, const VirtualGlobalToLocalOperator<CoefficientPrecision> &local_operator)
inline explicit CustomApproximationBuilder(const Cluster<CoordinatePrecision> &target_cluster, const Cluster<CoordinatePrecision> &source_cluster, MPI_Comm communicator, const VirtualLocalToLocalOperator<CoefficientPrecision> &local_operator)

Public Members

DistributedOperator<CoefficientPrecision> distributed_operator

DistributedOperator

template<typename CoefficientPrecision>
class DistributedOperator

Public Functions

DistributedOperator(const DistributedOperator&) = delete
DistributedOperator &operator=(const DistributedOperator&) = delete
DistributedOperator(DistributedOperator &&cluster) noexcept = default
DistributedOperator &operator=(DistributedOperator &&cluster) noexcept = default
virtual ~DistributedOperator() = default
inline explicit DistributedOperator(const VirtualPartition<CoefficientPrecision> &target_partition, const VirtualPartition<CoefficientPrecision> &source_partition, MPI_Comm comm)
inline void add_local_to_local_operator(const VirtualLocalToLocalOperator<CoefficientPrecision> *local_operator)
inline void add_global_to_local_operator(const VirtualGlobalToLocalOperator<CoefficientPrecision> *local_operator)
inline MPI_Comm get_comm() const
inline const VirtualPartition<CoefficientPrecision> &get_target_partition() const
inline const VirtualPartition<CoefficientPrecision> &get_source_partition() const
inline const std::vector<const VirtualLocalToLocalOperator<CoefficientPrecision>*> get_local_to_local_operators() const
inline const std::vector<const VirtualGlobalToLocalOperator<CoefficientPrecision>*> get_global_to_local_operators() const

Linear algebra

template<typename CoefficientPrecision>
void htool::add_distributed_operator_vector_product_local_to_local(char trans, CoefficientPrecision alpha, const DistributedOperator<CoefficientPrecision> &A, const CoefficientPrecision *const in, CoefficientPrecision beta, CoefficientPrecision *const out, CoefficientPrecision *work)
Template Parameters:

CoefficientPrecision

Parameters:
  • trans

  • alpha

  • A

  • in

  • beta

  • out

  • work – Optional buffer of size (m+n+N if trans==’N’, m+n+N+n*sizeWorld otherwise). Used if different of nullptr.

template<typename MatIn, typename MatOut, typename = std::enable_if_t<std::is_same<typename MatIn::value_type, typename MatOut::value_type>::value>>
void htool::add_distributed_operator_matrix_product_local_to_local(char trans, typename MatIn::value_type alpha, const DistributedOperator<typename MatIn::value_type> &A, const MatIn &in, typename MatIn::value_type beta, MatOut &out, typename MatIn::value_type *work)
Template Parameters:
  • MatIn

  • MatOut

Tparam :

template<typename CoefficientPrecision>
void htool::add_distributed_operator_vector_product_global_to_global(char trans, CoefficientPrecision alpha, const DistributedOperator<CoefficientPrecision> &A, const CoefficientPrecision *const in, CoefficientPrecision beta, CoefficientPrecision *const out, CoefficientPrecision *work)
Template Parameters:

CoefficientPrecision

Parameters:
  • trans

  • alpha

  • A

  • in

  • beta

  • out

  • work – Optional buffer of size (M+N+m if trans==’N’, M+N+N if trans!=’N’ and beta!=0, M+N otherwise). Used if different of nullptr.

template<typename MatIn, typename MatOut, typename = std::enable_if_t<std::is_same<typename MatIn::value_type, typename MatOut::value_type>::value>>
void htool::add_distributed_operator_matrix_product_global_to_global(char trans, typename MatIn::value_type alpha, const DistributedOperator<typename MatIn::value_type> &A, const MatIn &in, typename MatIn::value_type beta, MatOut &out, typename MatIn::value_type *work)
Template Parameters:
  • MatIn

  • MatOut

Tparam :

Operators

template<class T>
class VirtualLocalToLocalOperator

Interface representing.

Template Parameters:

T

Public Functions

virtual void add_vector_product(char trans, T alpha, const T *const in, T beta, T *const out) const = 0
Parameters:
  • trans

  • alpha

  • in – Local input vector.

  • beta

  • out – Local output vector.

virtual void add_matrix_product_row_major(char trans, T alpha, const T *const in, T beta, T *const out, int mu) const = 0
Parameters:
  • trans

  • alpha

  • in – Local input row-major matrix.

  • beta

  • out – Local output row-major matrix.

  • mu – Number of columns for in and out.

virtual void add_sub_matrix_product_to_local(const T *const in, T *const out, int mu, int offset, int size) const = 0
Parameters:
  • in

  • out

  • mu

  • offset

  • size

inline virtual ~VirtualLocalToLocalOperator()
template<class T>
class VirtualGlobalToLocalOperator

Interface representing.

Template Parameters:

T

Public Functions

virtual void add_vector_product(char trans, T alpha, const T *const in, T beta, T *const out) const = 0
Parameters:
  • trans

  • alpha

  • in – Global input vector when trans==’N’. Local input vector when trans!=N.

  • beta

  • out – Local output vector when trans==’N’. Global output vector when trans==’N’.

virtual void add_matrix_product_row_major(char trans, T alpha, const T *const in, T beta, T *const out, int mu) const = 0
Parameters:
  • trans

  • alpha

  • in – Global input row-major matrix when trans==’N’. Local input row-major matrix when trans!=N.

  • beta

  • out – Local input row-major matrix when trans==’N’. Global input row-major matrix when trans!=N.

  • mu – Number of columns for in and out.

virtual void add_sub_matrix_product_to_local(const T *const in, T *const out, int mu, int offset, int size) const = 0
Parameters:
  • in

  • out

  • mu

  • offset

  • size

inline virtual ~VirtualGlobalToLocalOperator()