dune-common 2.12-git
Loading...
Searching...
No Matches
Dune::FieldMatrix< K, ROWS, COLS > Class Template Reference

A dense n x m matrix. More...

#include <dune/common/fmatrix.hh>

Inheritance diagram for Dune::FieldMatrix< K, ROWS, COLS >:
Inheritance graph

Public Types

using size_type = typename Base::size_type
 The type used for the index access and size operation.
 
using value_type = typename Base::value_type
 The type of the elements stored in the matrix.
 
using reference = value_type &
 The type used for references to the matrix entries.
 
using const_reference = const value_type &
 The type used for const references to the matrix entries.
 
using row_type = typename Base::row_type
 The type the rows of the matrix are represented by.
 
using row_reference = typename Base::row_reference
 The type used for references to the rows of the matrix.
 
using const_row_reference = typename Base::const_row_reference
 The type used for const references to the rows of the matrix.
 
typedef Traits::derived_type derived_type
 type of derived matrix class
 
typedef Traits::value_type field_type
 export the type representing the field
 
typedef Traits::value_type block_type
 export the type representing the components
 
typedef DenseIterator< DenseMatrix, row_type, row_referenceIterator
 Iterator class for sequential access.
 
typedef Iterator iterator
 typedef for stl compliant access
 
typedef Iterator RowIterator
 rename the iterators for easier access
 
typedef std::remove_reference< row_reference >::type::Iterator ColIterator
 rename the iterators for easier access
 
typedef DenseIterator< const DenseMatrix, const row_type, const_row_referenceConstIterator
 Iterator class for sequential access.
 
typedef ConstIterator const_iterator
 typedef for stl compliant access
 
typedef ConstIterator ConstRowIterator
 rename the iterators for easier access
 
typedef std::remove_reference< const_row_reference >::type::ConstIterator ConstColIterator
 rename the iterators for easier access
 

Public Member Functions

template<class OtherK , int otherRows, int otherCols>
requires (otherRows != ROWS || otherCols != COLS)
constexpr FieldMatrixoperator= (const FieldMatrix< OtherK, otherRows, otherCols > &)=delete
 Delete assignment from FieldMatrix of different shape.
 
constexpr FieldMatrix< K, COLS, ROWS > transposed () const
 Return transposed of the matrix as FieldMatrix.
 
constexpr row_reference operator[] (size_type i)
 random access
 
constexpr const_row_reference operator[] (size_type i) const
 
constexpr size_type size () const
 size method (number of rows)
 
constexpr Iterator begin ()
 begin iterator
 
constexpr ConstIterator begin () const
 begin iterator
 
constexpr Iterator end ()
 end iterator
 
constexpr ConstIterator end () const
 end iterator
 
constexpr Iterator beforeEnd ()
 
constexpr ConstIterator beforeEnd () const
 
constexpr Iterator beforeBegin ()
 
constexpr ConstIterator beforeBegin () const
 
constexpr derived_typeoperator+= (const DenseMatrix< Other > &x)
 vector space addition
 
constexpr derived_type operator- () const
 Matrix negation.
 
constexpr derived_typeoperator-= (const DenseMatrix< Other > &x)
 vector space subtraction
 
constexpr derived_typeoperator*= (const field_type &k)
 vector space multiplication with scalar
 
constexpr derived_typeoperator/= (const field_type &k)
 vector space division by scalar
 
constexpr derived_typeaxpy (const field_type &a, const DenseMatrix< Other > &x)
 vector space axpy operation (*this += a x)
 
constexpr bool operator== (const DenseMatrix< Other > &x) const
 Binary matrix comparison.
 
constexpr bool operator!= (const DenseMatrix< Other > &x) const
 Binary matrix incomparison.
 
constexpr void mv (const X &x, Y &y) const
 y = A x
 
constexpr void mtv (const X &x, Y &y) const
 y = A^T x
 
constexpr void umv (const X &x, Y &y) const
 y += A x
 
constexpr void umtv (const X &x, Y &y) const
 y += A^T x
 
constexpr void umhv (const X &x, Y &y) const
 y += A^H x
 
constexpr void mmv (const X &x, Y &y) const
 y -= A x
 
constexpr void mmtv (const X &x, Y &y) const
 y -= A^T x
 
constexpr void mmhv (const X &x, Y &y) const
 y -= A^H x
 
constexpr void usmv (const typename FieldTraits< Y >::field_type &alpha, const X &x, Y &y) const
 y += alpha A x
 
constexpr void usmtv (const typename FieldTraits< Y >::field_type &alpha, const X &x, Y &y) const
 y += alpha A^T x
 
constexpr void usmhv (const typename FieldTraits< Y >::field_type &alpha, const X &x, Y &y) const
 y += alpha A^H x
 
constexpr FieldTraits< value_type >::real_type frobenius_norm () const
 frobenius norm: sqrt(sum over squared values of entries)
 
constexpr FieldTraits< value_type >::real_type frobenius_norm2 () const
 square of frobenius norm, need for block recursion
 
constexpr FieldTraits< vt >::real_type infinity_norm () const
 infinity norm (row sum norm, how to generalize for blocks?)
 
constexpr FieldTraits< vt >::real_type infinity_norm () const
 infinity norm (row sum norm, how to generalize for blocks?)
 
constexpr FieldTraits< vt >::real_type infinity_norm_real () const
 simplified infinity norm (uses Manhattan norm for complex values)
 
constexpr FieldTraits< vt >::real_type infinity_norm_real () const
 simplified infinity norm (uses Manhattan norm for complex values)
 
void solve (V1 &x, const V2 &b, bool doPivoting=true) const
 Solve system A x = b.
 
void invert (bool doPivoting=true)
 Compute inverse.
 
field_type determinant (bool doPivoting=true) const
 calculates the determinant of this matrix
 
FieldMatrix< K, ROWS, COLS > & leftmultiply (const DenseMatrix< M2 > &M)
 Multiplies M from the left to this matrix.
 
FieldMatrix< K, ROWS, COLS > & rightmultiply (const DenseMatrix< M2 > &M)
 Multiplies M from the right to this matrix.
 
constexpr size_type N () const
 number of rows
 
constexpr size_type M () const
 number of columns
 
constexpr size_type rows () const
 number of rows
 
constexpr size_type cols () const
 number of columns
 
constexpr bool exists (size_type i, size_type j) const
 return true when (i,j) is in pattern
 
Constructors
constexpr FieldMatrix () noexcept(std::is_nothrow_default_constructible_v< K >)
 Default constructor, making value-initialized matrix with all components set to zero.
 
constexpr FieldMatrix (std::initializer_list< Dune::FieldVector< K, cols > > const &l)
 Constructor initializing the matrix from a nested list of values.
 
template<class OtherK , int otherRows, int otherCols>
requires (otherRows != ROWS || otherCols != COLS)
constexpr FieldMatrix (const FieldMatrix< OtherK, otherRows, otherCols > &)=delete
 Delete assignment from FieldMatrix of different shape.
 
template<class OtherMatrix >
requires (HasDenseMatrixAssigner<FieldMatrix, OtherMatrix>::value)
constexpr FieldMatrix (const OtherMatrix &rhs)
 copy constructor from assignable type OtherMatrix
 
Element access
constexpr row_reference mat_access (size_type i)
 
constexpr const_row_reference mat_access (size_type i) const
 
constexpr operator const_reference () const noexcept
 Conversion operator.
 
constexpr operator reference () noexcept
 Conversion operator.
 

Static Public Member Functions

Capacity
static constexpr size_type mat_rows ()
 
static constexpr size_type mat_cols ()
 

Static Public Attributes

static constexpr std::integral_constant< int, ROWS > rows = {}
 The number of rows.
 
static constexpr std::integral_constant< int, COLS > cols = {}
 The number of columns.
 
static constexpr int blocklevel
 The number of block levels we contain. This is the leaf, that is, 1.
 

Static Protected Member Functions

static void luDecomposition (DenseMatrix< FieldMatrix< K, ROWS, COLS > > &A, Func func, Mask &nonsingularLanes, bool throwEarly, bool doPivoting)
 do an LU-Decomposition on matrix A
 

Friends

template<class , int , int >
class FieldMatrix
 
Comparison operators
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr bool operator== (const FieldMatrix &a, const S &b) noexcept
 comparing FieldMatrix<1,1> with scalar for equality
 
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr bool operator== (const S &a, const FieldMatrix &b) noexcept
 comparing FieldMatrix<1,1> with scalar for equality
 
template<class OtherK >
requires (Std::three_way_comparable_with<K,OtherK>)
constexpr auto operator<=> (const FieldMatrix &a, const FieldMatrix< OtherK, ROWS, COLS > &b) noexcept
 three-way comparison of FieldMatrix
 
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr auto operator<=> (const FieldMatrix &a, const S &b) noexcept
 three-way comparison of FieldMatrix<1,1> with scalar
 
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr auto operator<=> (const S &a, const FieldMatrix &b) noexcept
 three-way comparison of FieldMatrix<1,1> with scalar
 

Vector space operations

template<class OtherK >
constexpr auto operator+ (const FieldMatrix &matrixA, const FieldMatrix< OtherK, ROWS, COLS > &matrixB)
 vector space addition
 
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr auto operator+ (const FieldMatrix &a, const S &b) noexcept
 Binary addition, when using FieldVector<K,1,1> like K.
 
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr auto operator+ (const S &a, const FieldMatrix &b) noexcept
 Binary addition, when using FieldMatrix<K,1,1> like K.
 
template<class OtherK >
constexpr auto operator- (const FieldMatrix &matrixA, const FieldMatrix< OtherK, ROWS, COLS > &matrixB)
 vector space subtraction
 
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr auto operator- (const FieldMatrix &a, const S &b) noexcept
 Binary subtraction, when using FieldMatrix<K,1,1> like K.
 
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr auto operator- (const S &a, const FieldMatrix &b) noexcept
 Binary subtraction, when using FieldMatrix<K,1,1> like K.
 
template<Concept::Number S>
constexpr auto operator* (const FieldMatrix &matrix, const S &scalar)
 vector space multiplication with scalar
 
template<Concept::Number S>
constexpr auto operator* (const S &scalar, const FieldMatrix &matrix)
 vector space multiplication with scalar
 
template<Concept::Number S>
constexpr auto operator/ (const FieldMatrix &matrix, const S &scalar)
 vector space division by scalar
 
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr auto operator/ (const S &a, const FieldMatrix &b) noexcept
 Binary division, when using FieldMatrix<K,1,1> like K.
 
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr FieldMatrixoperator+= (const S &scalar)
 add scalar
 
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr FieldMatrixoperator-= (const S &scalar)
 subtract scalar
 
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr FieldMatrixoperator*= (const S &scalar)
 multiplication with scalar
 
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr FieldMatrixoperator/= (const S &scalar)
 division by scalar
 

Matrix-matrix multiplication

template<class OtherK , int otherCols>
constexpr auto operator* (const FieldMatrix &matrixA, const FieldMatrix< OtherK, COLS, otherCols > &matrixB)
 Matrix-matrix multiplication of FieldMatrix types.
 
template<class OtherMatrix >
requires (Impl::IsStaticSizeMatrix_v<OtherMatrix> and not Impl::IsFieldMatrix_v<OtherMatrix>)
constexpr auto operator* (const FieldMatrix &matrixA, const OtherMatrix &matrixB)
 Matrix-matrix multiplication of FieldMatrix with other matrix type.
 
template<class OtherMatrix >
requires (Impl::IsStaticSizeMatrix_v<OtherMatrix> and not Impl::IsFieldMatrix_v<OtherMatrix>)
constexpr auto operator* (const OtherMatrix &matrixA, const FieldMatrix &matrixB)
 Matrix-matrix multiplication.
 
template<int l>
constexpr FieldMatrix< K, l, colsleftmultiplyany (const FieldMatrix< K, l, rows > &M) const
 Multiplies M from the left to this matrix, this matrix is not modified.
 
template<int r, int c>
constexpr FieldMatrixrightmultiply (const FieldMatrix< K, r, c > &M)
 Multiplies M from the right to this matrix.
 
template<int l>
constexpr FieldMatrix< K, rows, l > rightmultiplyany (const FieldMatrix< K, cols, l > &M) const
 Multiplies M from the right to this matrix, this matrix is not modified.
 

Detailed Description

template<class K, int ROWS, int COLS>
class Dune::FieldMatrix< K, ROWS, COLS >

A dense n x m matrix.

Matrices represent linear maps from a vector space V to a vector space W. This class represents such a linear map by storing a two-dimensional array of numbers of a given field type K. The number of rows and columns is given at compile time.

Member Typedef Documentation

◆ block_type

typedef Traits::value_type Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::block_type
inherited

export the type representing the components

◆ ColIterator

typedef std::remove_reference<row_reference>::type::Iterator Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::ColIterator
inherited

rename the iterators for easier access

◆ const_iterator

typedef ConstIterator Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::const_iterator
inherited

typedef for stl compliant access

◆ const_reference

template<class K , int ROWS, int COLS>
using Dune::FieldMatrix< K, ROWS, COLS >::const_reference = const value_type&

The type used for const references to the matrix entries.

◆ const_row_reference

template<class K , int ROWS, int COLS>
using Dune::FieldMatrix< K, ROWS, COLS >::const_row_reference = typename Base::const_row_reference

The type used for const references to the rows of the matrix.

◆ ConstColIterator

typedef std::remove_reference<const_row_reference>::type::ConstIterator Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::ConstColIterator
inherited

rename the iterators for easier access

◆ ConstIterator

typedef DenseIterator<const DenseMatrix,const row_type,const_row_reference> Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::ConstIterator
inherited

Iterator class for sequential access.

◆ ConstRowIterator

typedef ConstIterator Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::ConstRowIterator
inherited

rename the iterators for easier access

◆ derived_type

typedef Traits::derived_type Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::derived_type
inherited

type of derived matrix class

◆ field_type

typedef Traits::value_type Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::field_type
inherited

export the type representing the field

◆ Iterator

typedef DenseIterator<DenseMatrix,row_type,row_reference> Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::Iterator
inherited

Iterator class for sequential access.

◆ iterator

typedef Iterator Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::iterator
inherited

typedef for stl compliant access

◆ reference

template<class K , int ROWS, int COLS>
using Dune::FieldMatrix< K, ROWS, COLS >::reference = value_type&

The type used for references to the matrix entries.

◆ row_reference

template<class K , int ROWS, int COLS>
using Dune::FieldMatrix< K, ROWS, COLS >::row_reference = typename Base::row_reference

The type used for references to the rows of the matrix.

◆ row_type

template<class K , int ROWS, int COLS>
using Dune::FieldMatrix< K, ROWS, COLS >::row_type = typename Base::row_type

The type the rows of the matrix are represented by.

◆ RowIterator

typedef Iterator Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::RowIterator
inherited

rename the iterators for easier access

◆ size_type

template<class K , int ROWS, int COLS>
using Dune::FieldMatrix< K, ROWS, COLS >::size_type = typename Base::size_type

The type used for the index access and size operation.

◆ value_type

template<class K , int ROWS, int COLS>
using Dune::FieldMatrix< K, ROWS, COLS >::value_type = typename Base::value_type

The type of the elements stored in the matrix.

Constructor & Destructor Documentation

◆ FieldMatrix() [1/4]

template<class K , int ROWS, int COLS>
constexpr Dune::FieldMatrix< K, ROWS, COLS >::FieldMatrix ( )
inlineconstexprnoexcept

Default constructor, making value-initialized matrix with all components set to zero.

◆ FieldMatrix() [2/4]

template<class K , int ROWS, int COLS>
constexpr Dune::FieldMatrix< K, ROWS, COLS >::FieldMatrix ( std::initializer_list< Dune::FieldVector< K, cols > > const &  l)
inlineconstexpr

Constructor initializing the matrix from a nested list of values.

◆ FieldMatrix() [3/4]

template<class K , int ROWS, int COLS>
template<class OtherK , int otherRows, int otherCols>
requires (otherRows != ROWS || otherCols != COLS)
constexpr Dune::FieldMatrix< K, ROWS, COLS >::FieldMatrix ( const FieldMatrix< OtherK, otherRows, otherCols > &  )
constexprdelete

Delete assignment from FieldMatrix of different shape.

◆ FieldMatrix() [4/4]

template<class K , int ROWS, int COLS>
template<class OtherMatrix >
requires (HasDenseMatrixAssigner<FieldMatrix, OtherMatrix>::value)
constexpr Dune::FieldMatrix< K, ROWS, COLS >::FieldMatrix ( const OtherMatrix &  rhs)
inlineconstexpr

copy constructor from assignable type OtherMatrix

Member Function Documentation

◆ axpy()

constexpr derived_type & Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::axpy ( const field_type a,
const DenseMatrix< Other > &  x 
)
inlineconstexprinherited

vector space axpy operation (*this += a x)

◆ beforeBegin() [1/2]

constexpr Iterator Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::beforeBegin ( )
inlineconstexprinherited
Returns
an iterator that is positioned before the first entry of the vector.

◆ beforeBegin() [2/2]

constexpr ConstIterator Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::beforeBegin ( ) const
inlineconstexprinherited
Returns
an iterator that is positioned before the first entry of the vector.

◆ beforeEnd() [1/2]

constexpr Iterator Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::beforeEnd ( )
inlineconstexprinherited
Returns
an iterator that is positioned before the end iterator of the vector, i.e. at the last entry.

◆ beforeEnd() [2/2]

constexpr ConstIterator Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::beforeEnd ( ) const
inlineconstexprinherited
Returns
an iterator that is positioned before the end iterator of the vector. i.e. at the last element

◆ begin() [1/2]

constexpr Iterator Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::begin ( )
inlineconstexprinherited

begin iterator

◆ begin() [2/2]

constexpr ConstIterator Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::begin ( ) const
inlineconstexprinherited

begin iterator

◆ cols()

constexpr size_type Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::cols ( ) const
inlineconstexprinherited

number of columns

◆ determinant()

field_type Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::determinant ( bool  doPivoting = true) const
inherited

calculates the determinant of this matrix

◆ end() [1/2]

constexpr Iterator Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::end ( )
inlineconstexprinherited

end iterator

◆ end() [2/2]

constexpr ConstIterator Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::end ( ) const
inlineconstexprinherited

end iterator

◆ exists()

constexpr bool Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::exists ( size_type  i,
size_type  j 
) const
inlineconstexprinherited

return true when (i,j) is in pattern

◆ frobenius_norm()

constexpr FieldTraits< value_type >::real_type Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::frobenius_norm ( ) const
inlineconstexprinherited

frobenius norm: sqrt(sum over squared values of entries)

◆ frobenius_norm2()

constexpr FieldTraits< value_type >::real_type Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::frobenius_norm2 ( ) const
inlineconstexprinherited

square of frobenius norm, need for block recursion

◆ infinity_norm() [1/2]

constexpr FieldTraits< vt >::real_type Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::infinity_norm ( ) const
inlineconstexprinherited

infinity norm (row sum norm, how to generalize for blocks?)

◆ infinity_norm() [2/2]

constexpr FieldTraits< vt >::real_type Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::infinity_norm ( ) const
inlineconstexprinherited

infinity norm (row sum norm, how to generalize for blocks?)

◆ infinity_norm_real() [1/2]

constexpr FieldTraits< vt >::real_type Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::infinity_norm_real ( ) const
inlineconstexprinherited

simplified infinity norm (uses Manhattan norm for complex values)

◆ infinity_norm_real() [2/2]

constexpr FieldTraits< vt >::real_type Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::infinity_norm_real ( ) const
inlineconstexprinherited

simplified infinity norm (uses Manhattan norm for complex values)

◆ invert()

void Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::invert ( bool  doPivoting = true)
inherited

Compute inverse.

Exceptions
FMatrixErrorif the matrix is singular

◆ leftmultiply()

FieldMatrix< K, ROWS, COLS > & Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::leftmultiply ( const DenseMatrix< M2 > &  M)
inlineinherited

Multiplies M from the left to this matrix.

◆ leftmultiplyany()

template<class K , int ROWS, int COLS>
template<int l>
constexpr FieldMatrix< K, l, cols > Dune::FieldMatrix< K, ROWS, COLS >::leftmultiplyany ( const FieldMatrix< K, l, rows > &  M) const
inlineconstexpr

Multiplies M from the left to this matrix, this matrix is not modified.

◆ luDecomposition()

static void Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::luDecomposition ( DenseMatrix< FieldMatrix< K, ROWS, COLS > > &  A,
Func  func,
Mask &  nonsingularLanes,
bool  throwEarly,
bool  doPivoting 
)
staticprotectedinherited

do an LU-Decomposition on matrix A

Parameters
AThe matrix to decompose, and to store the result in.
funcFunctor used for swapping lanes and to conduct the elimination. Depending on the functor, luDecomposition() can be used for solving, for inverting, or to compute the determinant.
nonsingularLanesSimdMask of lanes that are nonsingular.
throwEarlyWhether to throw an FMatrixError immediately as soon as one lane is discovered to be singular. If false, do not throw, instead continue until finished or all lanes are singular, and exit via return in both cases.
doPivotingEnable pivoting.

There are two modes of operation:

  • Terminate as soon as one lane is discovered to be singular. Early termination is done by throwing an FMatrixError. On entry, Simd::allTrue(nonsingularLanes) and throwEarly==true should hold. After early termination, the contents of A should be considered bogus, and nonsingularLanes has the lane(s) that triggered the early termination unset. There may be more singular lanes than the one reported in nonsingularLanes, which just haven't been discovered yet; so the value of nonsingularLanes is mostly useful for diagnostics.
  • Terminate only when all lanes are discovered to be singular. Use this when you want to apply special postprocessing in singular lines (e.g. setting the determinant of singular lanes to 0 in determinant()). On entry, nonsingularLanes may have any value and throwEarly==false should hold. The function will not throw an exception if some lanes are discovered to be singular, instead it will continue running until all lanes are singular or until finished, and terminate only via normal return. On exit, nonsingularLanes contains the map of lanes that are valid in A.

◆ M()

constexpr size_type Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::M ( ) const
inlineconstexprinherited

number of columns

◆ mat_access() [1/2]

template<class K , int ROWS, int COLS>
constexpr row_reference Dune::FieldMatrix< K, ROWS, COLS >::mat_access ( size_type  i)
inlineconstexpr

◆ mat_access() [2/2]

template<class K , int ROWS, int COLS>
constexpr const_row_reference Dune::FieldMatrix< K, ROWS, COLS >::mat_access ( size_type  i) const
inlineconstexpr

◆ mat_cols()

template<class K , int ROWS, int COLS>
static constexpr size_type Dune::FieldMatrix< K, ROWS, COLS >::mat_cols ( )
inlinestaticconstexpr

◆ mat_rows()

template<class K , int ROWS, int COLS>
static constexpr size_type Dune::FieldMatrix< K, ROWS, COLS >::mat_rows ( )
inlinestaticconstexpr

◆ mmhv()

constexpr void Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::mmhv ( const X &  x,
Y &  y 
) const
inlineconstexprinherited

y -= A^H x

◆ mmtv()

constexpr void Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::mmtv ( const X &  x,
Y &  y 
) const
inlineconstexprinherited

y -= A^T x

◆ mmv()

constexpr void Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::mmv ( const X &  x,
Y &  y 
) const
inlineconstexprinherited

y -= A x

◆ mtv()

constexpr void Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::mtv ( const X &  x,
Y &  y 
) const
inlineconstexprinherited

y = A^T x

◆ mv()

constexpr void Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::mv ( const X &  x,
Y &  y 
) const
inlineconstexprinherited

y = A x

◆ N()

constexpr size_type Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::N ( ) const
inlineconstexprinherited

number of rows

◆ operator const_reference()

template<class K , int ROWS, int COLS>
constexpr Dune::FieldMatrix< K, ROWS, COLS >::operator const_reference ( ) const
inlineconstexprnoexcept

Conversion operator.

◆ operator reference()

template<class K , int ROWS, int COLS>
constexpr Dune::FieldMatrix< K, ROWS, COLS >::operator reference ( )
inlineconstexprnoexcept

Conversion operator.

◆ operator!=()

constexpr bool Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::operator!= ( const DenseMatrix< Other > &  x) const
inlineconstexprinherited

Binary matrix incomparison.

◆ operator*=() [1/2]

constexpr derived_type & Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::operator*= ( const field_type k)
inlineconstexprinherited

vector space multiplication with scalar

◆ operator*=() [2/2]

template<class K , int ROWS, int COLS>
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr FieldMatrix & Dune::FieldMatrix< K, ROWS, COLS >::operator*= ( const S &  scalar)
inlineconstexpr

multiplication with scalar

Deprecated:
This method implements a special handling for 1x1 matrices, and will be removed in Dune 2.13 or later. It is not deprecated by a C++ attribute because the operation it implements is legit for matrices of all sizes. The method exists only to resolve an overloading ambiguity warning that appears without it.

◆ operator+=() [1/2]

constexpr derived_type & Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::operator+= ( const DenseMatrix< Other > &  x)
inlineconstexprinherited

vector space addition

◆ operator+=() [2/2]

template<class K , int ROWS, int COLS>
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr FieldMatrix & Dune::FieldMatrix< K, ROWS, COLS >::operator+= ( const S &  scalar)
inlineconstexpr

add scalar

◆ operator-()

constexpr derived_type Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::operator- ( ) const
inlineconstexprinherited

Matrix negation.

◆ operator-=() [1/2]

constexpr derived_type & Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::operator-= ( const DenseMatrix< Other > &  x)
inlineconstexprinherited

vector space subtraction

◆ operator-=() [2/2]

template<class K , int ROWS, int COLS>
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr FieldMatrix & Dune::FieldMatrix< K, ROWS, COLS >::operator-= ( const S &  scalar)
inlineconstexpr

subtract scalar

◆ operator/=() [1/2]

constexpr derived_type & Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::operator/= ( const field_type k)
inlineconstexprinherited

vector space division by scalar

◆ operator/=() [2/2]

template<class K , int ROWS, int COLS>
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr FieldMatrix & Dune::FieldMatrix< K, ROWS, COLS >::operator/= ( const S &  scalar)
inlineconstexpr

division by scalar

Deprecated:
This method implements a special handling for 1x1 matrices, and will be removed in Dune 2.13 or later. It is not deprecated by a C++ attribute because the operation it implements is legit for matrices of all sizes. The method exists only to resolve an overloading ambiguity warning that appears without it.

◆ operator=()

template<class K , int ROWS, int COLS>
template<class OtherK , int otherRows, int otherCols>
requires (otherRows != ROWS || otherCols != COLS)
constexpr FieldMatrix & Dune::FieldMatrix< K, ROWS, COLS >::operator= ( const FieldMatrix< OtherK, otherRows, otherCols > &  )
constexprdelete

Delete assignment from FieldMatrix of different shape.

◆ operator==()

constexpr bool Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::operator== ( const DenseMatrix< Other > &  x) const
inlineconstexprinherited

Binary matrix comparison.

◆ operator[]() [1/2]

constexpr row_reference Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::operator[] ( size_type  i)
inlineconstexprinherited

random access

◆ operator[]() [2/2]

constexpr const_row_reference Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::operator[] ( size_type  i) const
inlineconstexprinherited

◆ rightmultiply() [1/2]

FieldMatrix< K, ROWS, COLS > & Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::rightmultiply ( const DenseMatrix< M2 > &  M)
inlineinherited

Multiplies M from the right to this matrix.

◆ rightmultiply() [2/2]

template<class K , int ROWS, int COLS>
template<int r, int c>
constexpr FieldMatrix & Dune::FieldMatrix< K, ROWS, COLS >::rightmultiply ( const FieldMatrix< K, r, c > &  M)
inlineconstexpr

Multiplies M from the right to this matrix.

◆ rightmultiplyany()

template<class K , int ROWS, int COLS>
template<int l>
constexpr FieldMatrix< K, rows, l > Dune::FieldMatrix< K, ROWS, COLS >::rightmultiplyany ( const FieldMatrix< K, cols, l > &  M) const
inlineconstexpr

Multiplies M from the right to this matrix, this matrix is not modified.

◆ rows()

constexpr size_type Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::rows ( ) const
inlineconstexprinherited

number of rows

◆ size()

constexpr size_type Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::size ( ) const
inlineconstexprinherited

size method (number of rows)

◆ solve()

void Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::solve ( V1 &  x,
const V2 &  b,
bool  doPivoting = true 
) const
inherited

Solve system A x = b.

Exceptions
FMatrixErrorif the matrix is singular

◆ transposed()

template<class K , int ROWS, int COLS>
constexpr FieldMatrix< K, COLS, ROWS > Dune::FieldMatrix< K, ROWS, COLS >::transposed ( ) const
inlineconstexpr

Return transposed of the matrix as FieldMatrix.

◆ umhv()

constexpr void Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::umhv ( const X &  x,
Y &  y 
) const
inlineconstexprinherited

y += A^H x

◆ umtv()

constexpr void Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::umtv ( const X &  x,
Y &  y 
) const
inlineconstexprinherited

y += A^T x

◆ umv()

constexpr void Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::umv ( const X &  x,
Y &  y 
) const
inlineconstexprinherited

y += A x

◆ usmhv()

constexpr void Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::usmhv ( const typename FieldTraits< Y >::field_type &  alpha,
const X &  x,
Y &  y 
) const
inlineconstexprinherited

y += alpha A^H x

◆ usmtv()

constexpr void Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::usmtv ( const typename FieldTraits< Y >::field_type &  alpha,
const X &  x,
Y &  y 
) const
inlineconstexprinherited

y += alpha A^T x

◆ usmv()

constexpr void Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::usmv ( const typename FieldTraits< Y >::field_type &  alpha,
const X &  x,
Y &  y 
) const
inlineconstexprinherited

y += alpha A x

Friends And Related Symbol Documentation

◆ FieldMatrix

template<class K , int ROWS, int COLS>
template<class , int , int >
friend class FieldMatrix
friend

◆ operator* [1/5]

template<class K , int ROWS, int COLS>
template<Concept::Number S>
constexpr auto operator* ( const FieldMatrix< K, ROWS, COLS > &  matrix,
const S &  scalar 
)
friend

vector space multiplication with scalar

◆ operator* [2/5]

template<class K , int ROWS, int COLS>
template<class OtherK , int otherCols>
constexpr auto operator* ( const FieldMatrix< K, ROWS, COLS > &  matrixA,
const FieldMatrix< OtherK, COLS, otherCols > &  matrixB 
)
friend

Matrix-matrix multiplication of FieldMatrix types.

◆ operator* [3/5]

template<class K , int ROWS, int COLS>
template<class OtherMatrix >
requires (Impl::IsStaticSizeMatrix_v<OtherMatrix> and not Impl::IsFieldMatrix_v<OtherMatrix>)
constexpr auto operator* ( const FieldMatrix< K, ROWS, COLS > &  matrixA,
const OtherMatrix &  matrixB 
)
friend

Matrix-matrix multiplication of FieldMatrix with other matrix type.

This implements multiplication of a FieldMatrix with another matrix of type OtherMatrix. The latter has to provide OtherMatrix::field_type, OtherMatrix::cols, and OtherMatrix::mtv(x,y).

◆ operator* [4/5]

template<class K , int ROWS, int COLS>
template<class OtherMatrix >
requires (Impl::IsStaticSizeMatrix_v<OtherMatrix> and not Impl::IsFieldMatrix_v<OtherMatrix>)
constexpr auto operator* ( const OtherMatrix &  matrixA,
const FieldMatrix< K, ROWS, COLS > &  matrixB 
)
friend

Matrix-matrix multiplication.

This implements multiplication of another matrix of type OtherMatrix with a FieldMatrix. The former has to provide OtherMatrix::field_type, OtherMatrix::rows, and OtherMatrix::mv(x,y).

◆ operator* [5/5]

template<class K , int ROWS, int COLS>
template<Concept::Number S>
constexpr auto operator* ( const S &  scalar,
const FieldMatrix< K, ROWS, COLS > &  matrix 
)
friend

vector space multiplication with scalar

◆ operator+ [1/3]

template<class K , int ROWS, int COLS>
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr auto operator+ ( const FieldMatrix< K, ROWS, COLS > &  a,
const S &  b 
)
friend

Binary addition, when using FieldVector<K,1,1> like K.

◆ operator+ [2/3]

template<class K , int ROWS, int COLS>
template<class OtherK >
constexpr auto operator+ ( const FieldMatrix< K, ROWS, COLS > &  matrixA,
const FieldMatrix< OtherK, ROWS, COLS > &  matrixB 
)
friend

vector space addition

◆ operator+ [3/3]

template<class K , int ROWS, int COLS>
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr auto operator+ ( const S &  a,
const FieldMatrix< K, ROWS, COLS > &  b 
)
friend

Binary addition, when using FieldMatrix<K,1,1> like K.

◆ operator- [1/3]

template<class K , int ROWS, int COLS>
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr auto operator- ( const FieldMatrix< K, ROWS, COLS > &  a,
const S &  b 
)
friend

Binary subtraction, when using FieldMatrix<K,1,1> like K.

◆ operator- [2/3]

template<class K , int ROWS, int COLS>
template<class OtherK >
constexpr auto operator- ( const FieldMatrix< K, ROWS, COLS > &  matrixA,
const FieldMatrix< OtherK, ROWS, COLS > &  matrixB 
)
friend

vector space subtraction

◆ operator- [3/3]

template<class K , int ROWS, int COLS>
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr auto operator- ( const S &  a,
const FieldMatrix< K, ROWS, COLS > &  b 
)
friend

Binary subtraction, when using FieldMatrix<K,1,1> like K.

◆ operator/ [1/2]

template<class K , int ROWS, int COLS>
template<Concept::Number S>
constexpr auto operator/ ( const FieldMatrix< K, ROWS, COLS > &  matrix,
const S &  scalar 
)
friend

vector space division by scalar

◆ operator/ [2/2]

template<class K , int ROWS, int COLS>
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr auto operator/ ( const S &  a,
const FieldMatrix< K, ROWS, COLS > &  b 
)
friend

Binary division, when using FieldMatrix<K,1,1> like K.

◆ operator<=> [1/3]

template<class K , int ROWS, int COLS>
template<class OtherK >
requires (Std::three_way_comparable_with<K,OtherK>)
constexpr auto operator<=> ( const FieldMatrix< K, ROWS, COLS > &  a,
const FieldMatrix< OtherK, ROWS, COLS > &  b 
)
friend

three-way comparison of FieldMatrix

◆ operator<=> [2/3]

template<class K , int ROWS, int COLS>
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr auto operator<=> ( const FieldMatrix< K, ROWS, COLS > &  a,
const S &  b 
)
friend

three-way comparison of FieldMatrix<1,1> with scalar

◆ operator<=> [3/3]

template<class K , int ROWS, int COLS>
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr auto operator<=> ( const S &  a,
const FieldMatrix< K, ROWS, COLS > &  b 
)
friend

three-way comparison of FieldMatrix<1,1> with scalar

◆ operator== [1/2]

template<class K , int ROWS, int COLS>
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr bool operator== ( const FieldMatrix< K, ROWS, COLS > &  a,
const S &  b 
)
friend

comparing FieldMatrix<1,1> with scalar for equality

◆ operator== [2/2]

template<class K , int ROWS, int COLS>
template<Concept::Number S>
requires (ROWS*COLS == 1)
constexpr bool operator== ( const S &  a,
const FieldMatrix< K, ROWS, COLS > &  b 
)
friend

comparing FieldMatrix<1,1> with scalar for equality

Member Data Documentation

◆ blocklevel

constexpr int Dune::DenseMatrix< FieldMatrix< K, ROWS, COLS > >::blocklevel
staticconstexprinherited

The number of block levels we contain. This is the leaf, that is, 1.

◆ cols

template<class K , int ROWS, int COLS>
constexpr std::integral_constant<int, COLS> Dune::FieldMatrix< K, ROWS, COLS >::cols = {}
staticconstexpr

The number of columns.

◆ rows

template<class K , int ROWS, int COLS>
constexpr std::integral_constant<int, ROWS> Dune::FieldMatrix< K, ROWS, COLS >::rows = {}
staticconstexpr

The number of rows.


The documentation for this class was generated from the following files: