16#ifndef dealii_full_matrix_h
17#define dealii_full_matrix_h
38template <
typename number>
40template <
typename number>
77template <
typename number>
91 "The FullMatrix class only supports basic numeric types. In particular, it "
92 "does not support automatically differentiated numbers.");
185 template <
typename number2>
214 template <
typename number2>
224 template <
typename MatrixType>
233 template <
typename MatrixType>
247 const unsigned int src_r_i = 0,
248 const unsigned int src_r_j = dim - 1,
249 const unsigned int src_c_i = 0,
250 const unsigned int src_c_j = dim - 1,
268 const unsigned int dst_r = 0,
269 const unsigned int dst_c = 0)
const;
283 template <
typename MatrixType,
typename index_type>
286 const std::vector<index_type> &row_index_set,
301 template <
typename MatrixType,
typename index_type>
305 MatrixType & matrix)
const;
317 template <
typename number2>
329 template <
typename number2>
344 template <
typename number2>
347 const std::vector<size_type> &
p_rows,
348 const std::vector<size_type> &
p_cols);
415 template <
typename number2>
428 template <
typename number2>
490 template <
class StreamType>
493 const unsigned int width = 5,
494 const unsigned int precision = 2)
const;
520 const unsigned int precision = 3,
521 const bool scientific =
true,
522 const unsigned int width = 0,
525 const double threshold = 0.)
const;
589 template <
typename number2>
600 template <
typename number2>
615 template <
typename number2>
635 template <
typename number2>
649 template <
typename number2>
664 template <
typename number2>
688 template <
typename number2,
typename index_type>
753 template <
typename number2>
760 template <
typename number2>
770 template <
typename number2>
811 template <
typename number2>
823 template <
typename number2>
831 template <
typename number2>
840 template <
typename number2>
849 template <
typename number2>
877 template <
typename number2>
881 const bool adding =
false)
const;
901 template <
typename number2>
905 const bool adding =
false)
const;
925 template <
typename number2>
929 const bool adding =
false)
const;
950 template <
typename number2>
954 const bool adding =
false)
const;
972 const number scaling = number(1.));
986 template <
typename number2>
990 const bool adding =
false)
const;
997 template <
typename number2>
1014 template <
typename number2>
1018 const bool adding =
false)
const;
1026 template <
typename number2>
1035 template <
typename somenumber>
1039 const number omega = 1.)
const;
1047 template <
typename number2,
typename number3>
1063 template <
typename number2>
1074 template <
typename number2>
1096 <<
"The maximal pivot is " <<
arg1
1097 <<
", which is below the threshold. The matrix may be singular.");
1105 <<
"Target region not in matrix: size in this direction="
1106 <<
arg1 <<
", size of new matrix=" <<
arg2
1112 "You are attempting an operation on two vectors that "
1113 "are the same object, but the operation requires that the "
1114 "two objects are in fact different.");
1129template <
typename number>
1133 return this->n_rows();
1138template <
typename number>
1142 return this->n_cols();
1147template <
typename number>
1155 this->reset_values();
1162template <
typename number>
1163template <
typename number2>
1172template <
typename number>
1173template <
typename MatrixType>
1182 for (size_type row = 0; row <
M.m(); ++row)
1184 const typename MatrixType::const_iterator
end_row =
M.
end(row);
1185 for (
typename MatrixType::const_iterator entry =
M.
begin(row);
1188 this->el(row, entry->column()) = entry->value();
1194template <
typename number>
1202 const size_type
dst_r,
1203 const size_type
dst_c)
1224template <
typename number>
1232 const unsigned int dst_r,
1233 const unsigned int dst_c)
const
1254template <
typename number>
1255template <
typename MatrixType>
1264 for (size_type row = 0; row <
M.m(); ++row)
1266 const typename MatrixType::const_iterator
end_row =
M.
end(row);
1267 for (
typename MatrixType::const_iterator entry =
M.
begin(row);
1270 this->el(entry->column(), row) = entry->value();
1276template <
typename number>
1277template <
typename MatrixType,
typename index_type>
1280 const MatrixType & matrix,
1281 const std::vector<index_type> &row_index_set,
1298template <
typename number>
1299template <
typename MatrixType,
typename index_type>
1302 const std::vector<index_type> &row_index_set,
1304 MatrixType & matrix)
const
1320template <
typename number>
1326 (*this)(i,
j) = value;
1331template <
typename number>
1332template <
typename number2>
1341template <
typename number>
1342template <
typename number2>
1352template <
typename number>
1362template <
typename number>
1372template <
typename number>
1382template <
typename number>
1392template <
typename number>
1399 this->operator()(r, c) += v;
1404template <
typename number>
1405template <
typename number2,
typename index_type>
1408 const size_type n_cols,
1415 for (size_type col = 0; col < n_cols; ++col)
1423template <
typename number>
1424template <
class StreamType>
1427 const unsigned int w,
1428 const unsigned int p)
const
1434 const std::streamsize
old_width = s.width(w);
1436 for (size_type i = 0; i < this->m(); ++i)
1438 for (size_type
j = 0;
j < this->n(); ++
j)
1442 s << this->el(i,
j);
void reinit(value_type *starting_element, const std::size_t n_elements)
const ElementType * const_iterator
typename numbers::NumberTraits< number >::real_type real_type
typename Table< 2, number >::const_iterator const_iterator
void triple_product(const FullMatrix< number > &A, const FullMatrix< number > &B, const FullMatrix< number > &D, const bool transpose_B=false, const bool transpose_D=false, const number scaling=number(1.))
FullMatrix< number > & operator=(const number d)
void TmTmult(FullMatrix< number2 > &C, const FullMatrix< number2 > &B, const bool adding=false) const
FullMatrix(const size_type rows, const size_type cols)
number residual(Vector< number2 > &dst, const Vector< number2 > &x, const Vector< number3 > &b) const
std::size_t memory_consumption() const
void diagadd(const number s)
void fill_permutation(const FullMatrix< number2 > &src, const std::vector< size_type > &p_rows, const std::vector< size_type > &p_cols)
void add_row(const size_type i, const number s, const size_type j)
void mmult(FullMatrix< number2 > &C, const FullMatrix< number2 > &B, const bool adding=false) const
real_type relative_symmetry_norm2() const
void add(const size_type row, const size_type column, const number value)
void copy_from(const Tensor< 2, dim > &T, const unsigned int src_r_i=0, const unsigned int src_r_j=dim - 1, const unsigned int src_c_i=0, const unsigned int src_c_j=dim - 1, const size_type dst_r=0, const size_type dst_c=0)
void equ(const number a, const FullMatrix< number2 > &A, const number b, const FullMatrix< number2 > &B)
void right_invert(const FullMatrix< number2 > &M)
FullMatrix< number > & operator=(const FullMatrix< number2 > &)
FullMatrix & operator/=(const number factor)
void set(const size_type i, const size_type j, const number value)
void add_row(const size_type i, const number s, const size_type j, const number t, const size_type k)
FullMatrix< number > & operator=(const IdentityMatrix &id)
typename Table< 2, number >::iterator iterator
void add(const number a, const FullMatrix< number2 > &A, const number b, const FullMatrix< number2 > &B, const number c, const FullMatrix< number2 > &C)
void Tadd(const number s, const FullMatrix< number2 > &B)
void vmult(Vector< number2 > &w, const Vector< number2 > &v, const bool adding=false) const
void add_col(const size_type i, const number s, const size_type j, const number t, const size_type k)
void scatter_matrix_to(const std::vector< index_type > &row_index_set, const std::vector< index_type > &column_index_set, MatrixType &matrix) const
void swap_row(const size_type i, const size_type j)
void add(const FullMatrix< number2 > &src, const number factor, const size_type dst_offset_i=0, const size_type dst_offset_j=0, const size_type src_offset_i=0, const size_type src_offset_j=0)
void copy_to(Tensor< 2, dim > &T, const size_type src_r_i=0, const size_type src_r_j=dim - 1, const size_type src_c_i=0, const size_type src_c_j=dim - 1, const unsigned int dst_r=0, const unsigned int dst_c=0) const
number2 matrix_norm_square(const Vector< number2 > &v) const
void equ(const number a, const FullMatrix< number2 > &A)
const_iterator end(const size_type r) const
FullMatrix(const size_type rows, const size_type cols, const number *entries)
bool operator==(const FullMatrix< number > &) const
void Tvmult(Vector< number2 > &w, const Vector< number2 > &v, const bool adding=false) const
void Tmmult(FullMatrix< number2 > &C, const FullMatrix< number2 > &B, const bool adding=false) const
number2 matrix_scalar_product(const Vector< number2 > &u, const Vector< number2 > &v) const
void add(const size_type row, const size_type n_cols, const index_type *col_indices, const number2 *values, const bool elide_zero_values=true, const bool col_indices_are_sorted=false)
void add_col(const size_type i, const number s, const size_type j)
void precondition_Jacobi(Vector< somenumber > &dst, const Vector< somenumber > &src, const number omega=1.) const
FullMatrix(const IdentityMatrix &id)
void vmult_add(Vector< number2 > &w, const Vector< number2 > &v) const
void invert(const FullMatrix< number2 > &M)
void cholesky(const FullMatrix< number2 > &A)
void fill(const FullMatrix< number2 > &src, const size_type dst_offset_i=0, const size_type dst_offset_j=0, const size_type src_offset_i=0, const size_type src_offset_j=0)
void add(const number a, const FullMatrix< number2 > &A)
number determinant() const
void equ(const number a, const FullMatrix< number2 > &A, const number b, const FullMatrix< number2 > &B, const number c, const FullMatrix< number2 > &C)
void fill(const number2 *)
void copy_transposed(const MatrixType &)
void print(StreamType &s, const unsigned int width=5, const unsigned int precision=2) const
FullMatrix< number > & operator=(const LAPACKFullMatrix< number2 > &)
void print_formatted(std::ostream &out, const unsigned int precision=3, const bool scientific=true, const unsigned int width=0, const char *zero_string=" ", const double denominator=1., const double threshold=0.) const
FullMatrix & operator*=(const number factor)
void Tvmult_add(Vector< number2 > &w, const Vector< number2 > &v) const
void mTmult(FullMatrix< number2 > &C, const FullMatrix< number2 > &B, const bool adding=false) const
void left_invert(const FullMatrix< number2 > &M)
iterator begin(const size_type r)
iterator end(const size_type r)
void add(const number a, const FullMatrix< number2 > &A, const number b, const FullMatrix< number2 > &B)
void outer_product(const Vector< number2 > &V, const Vector< number2 > &W)
real_type frobenius_norm() const
void forward(Vector< number2 > &dst, const Vector< number2 > &src) const
void Tadd(const FullMatrix< number2 > &src, const number factor, const size_type dst_offset_i=0, const size_type dst_offset_j=0, const size_type src_offset_i=0, const size_type src_offset_j=0)
FullMatrix(const size_type n=0)
void swap_col(const size_type i, const size_type j)
void extract_submatrix_from(const MatrixType &matrix, const std::vector< index_type > &row_index_set, const std::vector< index_type > &column_index_set)
void backward(Vector< number2 > &dst, const Vector< number2 > &src) const
void copy_from(const MatrixType &)
const_iterator begin(const size_type r) const
real_type l1_norm() const
real_type linfty_norm() const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DeclException0(Exception0)
static ::ExceptionBase & ExcEmptyMatrix()
static ::ExceptionBase & ExcScalarAssignmentOnlyForZeroValue()
#define Assert(cond, exc)
#define AssertDimension(dim1, dim2)
static ::ExceptionBase & ExcNotRegular(number arg1)
#define AssertIndexRange(index, range)
#define DeclExceptionMsg(Exception, defaulttext)
static ::ExceptionBase & ExcMatrixNotPositiveDefinite()
static ::ExceptionBase & ExcSourceEqualsDestination()
#define DeclException3(Exception3, type1, type2, type3, outsequence)
static ::ExceptionBase & ExcInvalidDestination(size_type arg1, size_type arg2, size_type arg3)
#define DeclException1(Exception1, type1, outsequence)
@ matrix
Contents is actually a matrix.
types::global_dof_index size_type