28 #ifndef __GENERIC_MATRIX_H 29 #define __GENERIC_MATRIX_H 33 #include <dolfin/common/constants.h> 34 #include "GenericTensor.h" 35 #include "GenericLinearOperator.h" 56 virtual std::size_t
rank()
const 60 virtual std::size_t
size(std::size_t dim)
const = 0;
63 virtual std::pair<std::int64_t, std::int64_t>
67 virtual std::size_t
nnz()
const = 0;
72 {
get(block, num_rows[0], rows[0], num_rows[1], rows[1]); }
77 {
set(block, num_rows[0], rows[0], num_rows[1], rows[1]); }
83 {
set_local(block, num_rows[0], rows[0], num_rows[1], rows[1]); }
88 {
add(block, num_rows[0], rows[0], num_rows[1], rows[1]); }
94 {
add_local(block, num_rows[0], rows[0], num_rows[1], rows[1]); }
98 add(
const double* block,
101 add(block, rows[0].
size(), rows[0].data(),
102 rows[1].
size(), rows[1].data());
111 rows[1].
size(), rows[1].data());
115 virtual void zero() = 0;
118 virtual void apply(std::string mode) = 0;
121 virtual std::string
str(
bool verbose)
const = 0;
126 virtual std::shared_ptr<GenericMatrix>
copy()
const = 0;
139 virtual void get(
double* block,
144 virtual void set(
const double* block,
149 virtual void set_local(
const double* block,
154 virtual void add(
const double* block,
159 virtual void add_local(
const double* block,
165 bool same_nonzero_pattern) = 0;
168 virtual double norm(std::string norm_type)
const = 0;
171 virtual void getrow(std::size_t row, std::vector<std::size_t>& columns,
172 std::vector<double>& values)
const = 0;
175 virtual void setrow(std::size_t row,
176 const std::vector<std::size_t>& columns,
177 const std::vector<double>& values) = 0;
217 axpy(-1.0, A,
false);
225 "test if matrix is symmetric",
226 "Not implemented by current linear algebra backend");
237 {
double value(0);
get(&value, 1, &i, 1, &j);
return value; }
244 get(&value, 1, &ij.first, 1, &ij.second);
250 virtual void setitem(std::pair<dolfin::la_index, dolfin::la_index> ij,
252 {
set(&value, 1, &ij.first, 1, &ij.second); }
virtual double operator()(dolfin::la_index i, dolfin::la_index j) const
Get value of given entry.
Definition: GenericMatrix.h:236
virtual void setrow(std::size_t row, const std::vector< std::size_t > &columns, const std::vector< double > &values)=0
Set values for given row (global index) on local process.
virtual void add_local(const double *block, const std::vector< ArrayView< const dolfin::la_index >> &rows)
Add block of values using local indices.
Definition: GenericMatrix.h:107
virtual const GenericMatrix & operator/=(double a)=0
Divide matrix by given number.
virtual std::shared_ptr< GenericMatrix > copy() const =0
Return copy of matrix.
virtual void transpmult(const GenericVector &x, GenericVector &y) const =0
virtual void set_diagonal(const GenericVector &x)=0
Set diagonal of a matrix.
virtual void set_local(const double *block, const dolfin::la_index *num_rows, const dolfin::la_index *const *rows)
Set block of values using local indices.
Definition: GenericMatrix.h:80
virtual double getitem(std::pair< dolfin::la_index, dolfin::la_index > ij) const
Get value of given entry.
Definition: GenericMatrix.h:240
virtual std::size_t nnz() const =0
Return number of non-zero entries in matrix (collective)
virtual bool is_symmetric(double tol) const
Test if matrix is symmetric.
Definition: GenericMatrix.h:222
Definition: GenericLinearOperator.h:42
virtual const GenericMatrix & operator=(const GenericMatrix &x)=0
Assignment operator.
virtual std::pair< std::int64_t, std::int64_t > local_range(std::size_t dim) const =0
Return local ownership range.
virtual void zero()=0
Set all entries to zero and keep any sparse structure.
virtual void setitem(std::pair< dolfin::la_index, dolfin::la_index > ij, double value)
Definition: GenericMatrix.h:250
virtual void ident_local(std::size_t m, const dolfin::la_index *rows)=0
Set given rows (local row indices) to identity matrix.
const GenericMatrix & operator+=(const GenericMatrix &A)
Add given matrix.
Definition: GenericMatrix.h:208
virtual void apply(std::string mode)=0
Finalize assembly of tensor.
virtual void get_diagonal(GenericVector &x) const =0
Get diagonal of a matrix.
virtual std::size_t size(std::size_t dim) const =0
Return size of given dimension.
virtual std::size_t rank() const
Return tensor rank (number of dimensions)
Definition: GenericMatrix.h:56
virtual void getrow(std::size_t row, std::vector< std::size_t > &columns, std::vector< double > &values) const =0
Get non-zero values of given row (global index) on local process.
A common interface for arbitrary rank tensors.
Definition: GenericTensor.h:48
virtual void add(const double *block, const dolfin::la_index *num_rows, const dolfin::la_index *const *rows)
Add block of values using global indices.
Definition: GenericMatrix.h:86
Definition: ArrayView.h:31
virtual ~GenericMatrix()
Destructor.
Definition: GenericMatrix.h:51
This class defines a common interface for matrices.
Definition: GenericMatrix.h:46
virtual void init_vector(GenericVector &z, std::size_t dim) const =0
PetscInt la_index
Index type for compatibility with linear algebra backend(s)
Definition: types.h:32
virtual void ident(std::size_t m, const dolfin::la_index *rows)=0
Set given rows (global row indices) to identity matrix.
void dolfin_error(std::string location, std::string task, std::string reason,...)
Definition: log.cpp:129
virtual void zero_local(std::size_t m, const dolfin::la_index *rows)=0
Set given rows (local row indices) to zero.
const GenericMatrix & operator-=(const GenericMatrix &A)
Subtract given matrix.
Definition: GenericMatrix.h:215
virtual std::string str(bool verbose) const =0
Return informal string representation (pretty-print)
virtual void ident_zeros(double tol=DOLFIN_EPS)
Insert one on the diagonal for all zero rows.
Definition: GenericMatrix.cpp:30
virtual void axpy(double a, const GenericMatrix &A, bool same_nonzero_pattern)=0
Add multiple of given matrix (AXPY operation)
virtual const GenericMatrix & operator*=(double a)=0
Multiply matrix by given number.
virtual void add(const double *block, const std::vector< ArrayView< const dolfin::la_index >> &rows)
Add block of values using global indices.
Definition: GenericMatrix.h:98
virtual double norm(std::string norm_type) const =0
Return norm of matrix.
This class defines a common interface for vectors.
Definition: GenericVector.h:47
virtual void add_local(const double *block, const dolfin::la_index *num_rows, const dolfin::la_index *const *rows)
Add block of values using local indices.
Definition: GenericMatrix.h:91