--- /dev/null
+New: TrilinosWrappers::MPI::BlockMatrix can now return its MPI_Comm via
+get_mpi_communicator() and its range and domain indices via
+locally_owned_range_indices() and locally_owned_domain_indices()
+relying on the information of the TrilinosWrappers::MPI::Matrix
+object it is based on.
+<br>
+(Daniel Arndt, 2017/05/09)
*/
size_type n_nonzero_elements () const;
+ /**
+ * Return the MPI communicator object in use with this matrix.
+ */
+ MPI_Comm get_mpi_communicator () const;
+
/**
* Return a vector of the underlying Trilinos Epetra_Map that sets the
* partitioning of the domain space of this block matrix, i.e., the
*/
std::vector<Epetra_Map> range_partitioner () const DEAL_II_DEPRECATED;
+ /**
+ * Return the partitioning of the domain space for the individual blocks of
+ * this matrix, i.e., the partitioning of the block vectors this matrix has
+ * to be multiplied with.
+ */
+ std::vector<IndexSet> locally_owned_domain_indices() const;
+
+ /**
+ * Return the partitioning of the range space for the individual blocks of
+ * this matrix, i.e., the partitioning of the block vectors that result
+ * from matrix-vector products.
+ */
+ std::vector<IndexSet> locally_owned_range_indices() const;
/**
* Matrix-vector multiplication: let $dst = M*src$ with $M$ being this
+ inline
+ std::vector<IndexSet>
+ BlockSparseMatrix::locally_owned_domain_indices () const
+ {
+ Assert (this->n_block_cols() != 0, ExcNotInitialized());
+ Assert (this->n_block_rows() != 0, ExcNotInitialized());
+
+ std::vector<IndexSet> domain_indices;
+ for (size_type c = 0; c < this->n_block_cols(); ++c)
+ domain_indices.push_back(this->sub_objects[0][c]->locally_owned_domain_indices());
+
+ return domain_indices;
+ }
+
+
+
+ inline
+ std::vector<IndexSet>
+ BlockSparseMatrix::locally_owned_range_indices () const
+ {
+ Assert (this->n_block_cols() != 0, ExcNotInitialized());
+ Assert (this->n_block_rows() != 0, ExcNotInitialized());
+
+ std::vector<IndexSet> range_indices;
+ for (size_type r = 0; r < this->n_block_rows(); ++r)
+ range_indices.push_back(this->sub_objects[r][0]->locally_owned_range_indices());
+
+ return range_indices;
+ }
+
+
+
namespace internal
{
namespace BlockLinearOperator