18#ifdef DEAL_II_WITH_PETSC
58 template <
typename SparsityPatternType>
90 template <
typename SparsityPatternType>
132 template <
typename SparsityPatternType>
157 template <
typename SparsityPatternType>
166 template <
typename SparsityPatternType>
182 template <
typename SparsityPatternType>
191 "SparsityPattern and IndexSet have different number of rows"));
195 "SparsityPattern and IndexSet have different number of columns"));
197 ExcMessage(
"PETSc only supports contiguous row/column ranges"));
211 "Each row has to be owned by exactly one owner (n_rows()=") +
212 std::to_string(sparsity_pattern.n_rows()) +
213 " but sum(local_rows.n_elements())=" +
219 "Each column has to be owned by exactly one owner (n_cols()=") +
220 std::to_string(sparsity_pattern.n_cols()) +
221 " but sum(local_columns.n_elements())=" +
235 sparsity_pattern.n_rows(),
236 sparsity_pattern.n_cols());
276 std::vector<PetscInt>
281 unsigned int n_cols = 0;
284 const PetscInt
row_length = sparsity_pattern.row_length(i);
298 sparsity_pattern.
begin(i);
299 p != sparsity_pattern.
end(i);
340 template <
typename SparsityPatternType>
378 sparsity_pattern.n_rows(),
379 sparsity_pattern.n_cols());
414 std::vector<PetscInt>
436 sparsity_pattern.
begin(i);
437 p != sparsity_pattern.
end(i);
466 template <
typename SparsityPatternType>
475# if DEAL_II_PETSC_VERSION_GTE(3, 10, 0)
478 "SparsityPattern and IndexSet have different number of rows."));
482 "SparsityPattern and IndexSet have different number of columns"));
484 ExcMessage(
"PETSc only supports contiguous row/column ranges"));
498 "Each row has to be owned by exactly one owner (n_rows()=") +
499 std::to_string(sparsity_pattern.n_rows()) +
500 " but sum(local_rows.n_elements())=" +
506 "Each column has to be owned by exactly one owner (n_cols()=") +
507 std::to_string(sparsity_pattern.n_cols()) +
508 " but sum(local_columns.n_elements())=" +
569 sparsity_pattern.n_rows(),
570 sparsity_pattern.n_cols(),
615 unsigned int global_row_index = 0;
617 unsigned int n_cols = 0;
618 unsigned int global_row_index = 0;
623 sparsity_pattern.row_length(global_row_index);
647 sparsity_pattern.
begin(global_row_index);
648 p != sparsity_pattern.
end(global_row_index);
685 (void)sparsity_pattern;
688 "BDDC preconditioner requires PETSc 3.10.0 or newer"));
698 const std::vector<size_type> &,
699 const std::vector<size_type> &,
704 const std::vector<size_type> &,
705 const std::vector<size_type> &,
712 const std::vector<size_type> &,
713 const std::vector<size_type> &,
719 const std::vector<size_type> &,
720 const std::vector<size_type> &,
749 const std::vector<size_type> &,
750 const std::vector<size_type> &,
756 const std::vector<size_type> &,
757 const std::vector<size_type> &,
840 "PETSc is requiring non contiguous memory allocation."));
866 "PETSc is requiring non contiguous memory allocation."));
value_type * data() const noexcept
void add_range(const size_type begin, const size_type end)
SparseMatrix & operator=(const value_type d)
void copy_from(const SparseMatrix &other)
void reinit(const MPI_Comm communicator, const SparsityPatternType &sparsity_pattern, const std::vector< size_type > &local_rows_per_process, const std::vector< size_type > &local_columns_per_process, const unsigned int this_process, const bool preset_nonzero_locations=true)
void mmult(SparseMatrix &C, const SparseMatrix &B, const MPI::Vector &V=MPI::Vector()) const
PetscScalar matrix_scalar_product(const Vector &u, const Vector &v) const
void Tmmult(SparseMatrix &C, const SparseMatrix &B, const MPI::Vector &V=MPI::Vector()) const
PetscScalar matrix_norm_square(const Vector &v) const
IndexSet locally_owned_range_indices() const
void do_reinit(const MPI_Comm comm, const SparsityPatternType &sparsity_pattern, const std::vector< size_type > &local_rows_per_process, const std::vector< size_type > &local_columns_per_process, const unsigned int this_process, const bool preset_nonzero_locations)
IndexSet locally_owned_domain_indices() const
size_type row_length(const size_type row) const
void vmult(VectorBase &dst, const VectorBase &src) const
void mmult(MatrixBase &C, const MatrixBase &B, const VectorBase &V) const
MatrixBase & operator=(const MatrixBase &)=delete
void assert_is_compressed()
void Tmmult(MatrixBase &C, const MatrixBase &B, const VectorBase &V) const
void compress(const VectorOperation::values operation)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
#define AssertNothrow(cond, exc)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
void set_keep_zero_rows(Mat &matrix)
void close_matrix(Mat &matrix)
T sum(const T &t, const MPI_Comm mpi_communicator)