18#ifdef DEAL_II_WITH_PETSC
30 namespace MatrixIterators
34 MatrixBase::const_iterator::Accessor::visit_present_row()
39 if (
matrix->in_local_range(
this->a_row) ==
false)
49 const PetscInt * colnums;
64 std::make_shared<std::vector<size_type>>(colnums, colnums +
ncols);
150 std::vector<size_type> rows(1, row);
164 const std::vector<PetscInt>
petsc_rows(rows.begin(), rows.end());
191 const std::vector<PetscInt>
petsc_rows(rows.begin(), rows.end());
245# ifdef DEAL_II_WITH_MPI
261 ExcMessage(
"Error: not all processors agree on the last "
262 "VectorOperation before this compress() call."));
270 "Missing compress() or calling with wrong VectorOperation argument."));
287 PetscInt n_rows, n_cols;
300 PetscInt n_rows, n_cols;
323 std::pair<MatrixBase::size_type, MatrixBase::size_type>
350 std::pair<MatrixBase::size_type, MatrixBase::size_type>
375 return static_cast<std::uint64_t
>(
mat_info.nz_used);
395 const PetscInt * colnums;
396 const PetscScalar *values;
500 const PetscScalar factor = 1. / a;
588 if (use_vector ==
false)
616# if DEAL_II_PETSC_VERSION_LT(3, 8, 0)
670 MatrixBase::operator Mat()
const
684# if DEAL_II_PETSC_VERSION_LT(3, 8, 0)
746 std::pair<MatrixBase::size_type, MatrixBase::size_type>
loc_range =
750 const PetscInt * colnums;
751 const PetscScalar *values;
759 for (PetscInt col = 0; col <
ncols; ++col)
761 out <<
"(" << row <<
"," << colnums[col] <<
") " << values[col]
value_type * data() const noexcept
void add(const size_type i, const size_type j, const PetscScalar value)
size_type row_length(const size_type row) const
std::size_t memory_consumption() const
PetscReal l1_norm() const
VectorOperation::values last_action
void vmult(VectorBase &dst, const VectorBase &src) const
void clear_rows(const std::vector< size_type > &rows, const PetscScalar new_diag_value=0)
MPI_Comm get_mpi_communicator() const
PetscScalar diag_element(const size_type i) const
size_type local_domain_size() const
const_iterator begin() const
MatrixBase & operator/=(const PetscScalar factor)
void mmult(MatrixBase &C, const MatrixBase &B, const VectorBase &V) const
PetscBool is_symmetric(const double tolerance=1.e-12)
PetscReal frobenius_norm() const
virtual ~MatrixBase() override
std::pair< size_type, size_type > local_domain() const
const_iterator end() const
void Tvmult_add(VectorBase &dst, const VectorBase &src) const
void print(std::ostream &out, const bool alternative_output=false) const
PetscScalar el(const size_type i, const size_type j) const
size_type local_size() const
MatrixBase & operator=(const MatrixBase &)=delete
PetscScalar trace() const
PetscBool is_hermitian(const double tolerance=1.e-12)
PetscScalar matrix_scalar_product(const VectorBase &u, const VectorBase &v) const
void assert_is_compressed()
void Tvmult(VectorBase &dst, const VectorBase &src) const
void clear_rows_columns(const std::vector< size_type > &row_and_column_indices, const PetscScalar new_diag_value=0)
MatrixBase & operator*=(const PetscScalar factor)
PetscScalar residual(VectorBase &dst, const VectorBase &x, const VectorBase &b) const
void Tmmult(MatrixBase &C, const MatrixBase &B, const VectorBase &V) const
void write_ascii(const PetscViewerFormat format=PETSC_VIEWER_DEFAULT)
void vmult_add(VectorBase &dst, const VectorBase &src) const
std::pair< size_type, size_type > local_range() const
void compress(const VectorOperation::values operation)
PetscScalar matrix_norm_square(const VectorBase &v) const
std::uint64_t n_nonzero_elements() const
void clear_row(const size_type row, const PetscScalar new_diag_value=0)
PetscReal linfty_norm() const
real_type l2_norm() const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcIO()
static ::ExceptionBase & ExcScalarAssignmentOnlyForZeroValue()
#define Assert(cond, exc)
#define AssertThrowMPI(error_code)
#define AssertNothrow(cond, exc)
static ::ExceptionBase & ExcSourceEqualsDestination()
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcNotQuadratic()
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
@ matrix
Contents is actually a matrix.
void perform_mmult(const MatrixBase &inputleft, const MatrixBase &inputright, MatrixBase &result, const VectorBase &V, const bool transpose_left)