16 #ifndef dealii_petsc_sparse_matrix_h 17 # define dealii_petsc_sparse_matrix_h 20 # include <deal.II/base/config.h> 22 # ifdef DEAL_II_WITH_PETSC 24 # include <deal.II/lac/exceptions.h> 25 # include <deal.II/lac/petsc_matrix_base.h> 26 # include <deal.II/lac/petsc_vector.h> 30 DEAL_II_NAMESPACE_OPEN
32 template <
typename MatrixType>
112 const std::vector<size_type> &row_lengths,
132 template <
typename SparsityPatternType>
133 explicit SparseMatrix(
const SparsityPatternType &sparsity_pattern,
134 const bool preset_nonzero_locations =
true);
167 const std::vector<size_type> &row_lengths,
195 template <
typename SparsityPatternType>
197 reinit(
const SparsityPatternType &sparsity_pattern,
198 const bool preset_nonzero_locations =
true);
205 virtual const MPI_Comm &
271 const std::vector<size_type> &row_lengths,
277 template <
typename SparsityPatternType>
279 do_reinit(
const SparsityPatternType &sparsity_pattern,
280 const bool preset_nonzero_locations);
402 ~SparseMatrix()
override;
434 const size_type n_offdiag_nonzero_per_row = 0);
465 const std::vector<size_type> &row_lengths,
467 const std::vector<size_type> &offdiag_row_lengths =
468 std::vector<size_type>());
492 template <
typename SparsityPatternType>
494 const SparsityPatternType & sparsity_pattern,
495 const std::vector<size_type> &local_rows_per_process,
496 const std::vector<size_type> &local_columns_per_process,
497 const unsigned int this_process,
498 const bool preset_nonzero_locations =
true);
518 copy_from(
const SparseMatrix &other);
530 reinit(
const MPI_Comm &communicator,
537 const size_type n_offdiag_nonzero_per_row = 0);
549 reinit(
const MPI_Comm & communicator,
554 const std::vector<size_type> &row_lengths,
556 const std::vector<size_type> &offdiag_row_lengths =
557 std::vector<size_type>());
578 template <
typename SparsityPatternType>
580 reinit(
const MPI_Comm & communicator,
581 const SparsityPatternType & sparsity_pattern,
582 const std::vector<size_type> &local_rows_per_process,
583 const std::vector<size_type> &local_columns_per_process,
584 const unsigned int this_process,
585 const bool preset_nonzero_locations =
true);
593 template <
typename SparsityPatternType>
597 const SparsityPatternType &sparsity_pattern,
598 const MPI_Comm & communicator);
606 reinit(
const SparseMatrix &other);
612 virtual const MPI_Comm &
625 <<
"The number of local rows " << arg1
626 <<
" must be larger than the total number of rows " 664 locally_owned_domain_indices()
const;
672 locally_owned_range_indices()
const;
681 mmult(SparseMatrix & C,
682 const SparseMatrix &B,
694 const SparseMatrix &B,
719 const size_type n_offdiag_nonzero_per_row = 0);
733 const std::vector<size_type> &row_lengths,
735 const std::vector<size_type> &offdiag_row_lengths =
736 std::vector<size_type>());
741 template <
typename SparsityPatternType>
743 do_reinit(
const SparsityPatternType & sparsity_pattern,
744 const std::vector<size_type> &local_rows_per_process,
745 const std::vector<size_type> &local_columns_per_process,
746 const unsigned int this_process,
747 const bool preset_nonzero_locations);
752 template <
typename SparsityPatternType>
756 const SparsityPatternType &sparsity_pattern);
768 inline const MPI_Comm &
776 DEAL_II_NAMESPACE_CLOSE
778 # endif // DEAL_II_WITH_PETSC
#define DeclException2(Exception2, type1, type2, outsequence)
PetscScalar matrix_scalar_product(const VectorBase &u, const VectorBase &v) const
virtual const MPI_Comm & get_mpi_communicator() const override
static const bool zero_addition_can_be_elided
void Tmmult(SparseMatrix &C, const SparseMatrix &B, const MPI::Vector &V=MPI::Vector()) const
PetscBool is_symmetric(const double tolerance=1.e-12)
unsigned long long int global_dof_index
SparseMatrix & operator=(const double d)
void reinit(const size_type m, const size_type n, const size_type n_nonzero_per_row, const bool is_symmetric=false)
PetscScalar matrix_norm_square(const VectorBase &v) const
types::global_dof_index size_type
void mmult(SparseMatrix &C, const SparseMatrix &B, const MPI::Vector &V=MPI::Vector()) const
void do_reinit(const size_type m, const size_type n, const size_type n_nonzero_per_row, const bool is_symmetric=false)