15#ifdef DEAL_II_WITH_TRILINOS
25#ifdef DEAL_II_WITH_TRILINOS
46 const size_type n_block_columns)
55 this->
sub_objects.reinit(n_block_rows, n_block_columns);
73 template <
typename BlockSparsityPatternType>
76 const std::vector<IndexSet> ¶llel_partitioning,
77 const BlockSparsityPatternType &block_sparsity_pattern,
79 const bool exchange_data)
81 std::vector<Epetra_Map> epetra_maps;
82 epetra_maps.reserve(block_sparsity_pattern.n_block_rows());
83 for (
size_type i = 0; i < block_sparsity_pattern.n_block_rows(); ++i)
84 epetra_maps.push_back(
85 parallel_partitioning[i].make_trilinos_map(communicator,
false));
87 Assert(epetra_maps.size() == block_sparsity_pattern.n_block_rows(),
89 block_sparsity_pattern.n_block_rows()));
90 Assert(epetra_maps.size() == block_sparsity_pattern.n_block_cols(),
92 block_sparsity_pattern.n_block_cols()));
97 block_sparsity_pattern.n_block_rows()));
100 block_sparsity_pattern.n_block_cols()));
103 reinit(block_sparsity_pattern.n_block_rows(),
104 block_sparsity_pattern.n_block_cols());
115 this->
sub_objects[r][c]->reinit(parallel_partitioning[r],
116 parallel_partitioning[c],
117 block_sparsity_pattern.block(r, c),
125 template <
typename BlockSparsityPatternType>
128 const BlockSparsityPatternType &block_sparsity_pattern)
130 std::vector<IndexSet> parallel_partitioning;
131 parallel_partitioning.reserve(block_sparsity_pattern.n_block_rows());
132 for (
size_type i = 0; i < block_sparsity_pattern.n_block_rows(); ++i)
133 parallel_partitioning.emplace_back(
136 reinit(parallel_partitioning, block_sparsity_pattern);
166 const std::vector<IndexSet> ¶llel_partitioning,
167 const ::BlockSparseMatrix<double> &dealii_block_sparse_matrix,
169 const double drop_tolerance)
175 dealii_block_sparse_matrix.n_block_rows()));
178 dealii_block_sparse_matrix.n_block_cols()));
188 this->
sub_objects[r][c]->reinit(parallel_partitioning[r],
189 parallel_partitioning[c],
190 dealii_block_sparse_matrix.block(r,
203 const ::BlockSparseMatrix<double> &dealii_block_sparse_matrix,
204 const double drop_tolerance)
206 Assert(dealii_block_sparse_matrix.n_block_rows() ==
207 dealii_block_sparse_matrix.n_block_cols(),
209 dealii_block_sparse_matrix.n_block_cols()));
210 Assert(dealii_block_sparse_matrix.m() == dealii_block_sparse_matrix.n(),
212 dealii_block_sparse_matrix.n()));
214 std::vector<IndexSet> parallel_partitioning;
215 parallel_partitioning.reserve(dealii_block_sparse_matrix.n_block_rows());
216 for (
size_type i = 0; i < dealii_block_sparse_matrix.n_block_rows(); ++i)
217 parallel_partitioning.emplace_back(
220 reinit(parallel_partitioning,
221 dealii_block_sparse_matrix,
240 std::uint64_t n_nonzero = 0;
315 return this->
sub_objects[0][0]->get_mpi_communicator();
330 const ::BlockDynamicSparsityPattern &,
void reinit(const unsigned int n_blocks, const size_type n_elements_per_block)
BlockIndices column_block_indices
unsigned int n_block_rows() const
unsigned int n_block_cols() const
BlockIndices row_block_indices
BlockType & block(const unsigned int row, const unsigned int column)
Table< 2, ObserverPointer< BlockType, BlockMatrixBase< SparseMatrix > > > sub_objects
size_type n_block_rows() const
SparsityPatternType & block(const size_type row, const size_type column)
const BlockIndices & get_column_indices() const
size_type n_block_cols() const
const BlockIndices & get_row_indices() const
real_type l2_norm() const
std::size_t n_nonzero_elements() const
BaseClass::size_type size_type
~BlockSparseMatrix() override
TrilinosScalar residual(MPI::BlockVector &dst, const MPI::BlockVector &x, const MPI::BlockVector &b) const
MPI_Comm get_mpi_communicator() const
std::uint64_t n_nonzero_elements() const
void reinit(const size_type n_block_rows, const size_type n_block_columns)
BaseClass::BlockType BlockType
void vmult(VectorType1 &dst, const VectorType2 &src) const
real_type l2_norm() const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcNotInitialized()
IndexSet complete_index_set(const IndexSet::size_type N)