|
FEAT 3
Finite Element Analysis Toolbox
|
Tiny Matrix class template. More...
#include <tiny_algebra.hpp>
Public Types | |
| typedef Intern::DataTypeExtractor< ValueType >::MyDataType | DataType |
| The basic data type buried in the lowest level of the vector. More... | |
| typedef Vector< T_, n_, sn_ > | RowType |
| the type of a single matrix row More... | |
| typedef T_ | ValueType |
| the data type of the matrix More... | |
Public Member Functions | |
| CUDA_HOST_DEVICE | Matrix () |
| default constructor More... | |
| template<typename T2_ , int sma_, int sna_> | |
| CUDA_HOST_DEVICE | Matrix (const Matrix< T2_, m_, n_, sma_, sna_ > &a) |
| copy constructor More... | |
| template<typename Tx_ > | |
| CUDA_HOST_DEVICE | Matrix (const std::initializer_list< std::initializer_list< Tx_ > > &x) |
| Initializer list constructor. More... | |
| template<typename Tx_ > | |
| CUDA_HOST_DEVICE | Matrix (const std::initializer_list< Tx_ > &x) |
| Initializer list of Tiny::Vector constructor. More... | |
| CUDA_HOST_DEVICE | Matrix (DataType value) |
| value-assignment constructor More... | |
| template<int k_, int l_, int sma_, int sna_, int smb_, int snb_, int smd_, int snd_> | |
| CUDA_HOST_DEVICE Matrix & | add_double_mat_mult (const Matrix< T_, k_, l_, sma_, sna_ > &a, const Matrix< T_, k_, m_, smb_, snb_ > &b, const Matrix< T_, l_, n_, smd_, snd_ > &d, DataType alpha=DataType(1)) |
| Adds the algebraic matrix double-product of three other matrices onto this matrix. More... | |
| template<int la_, int lb_, int sma_, int sna_, int smb_, int snb_> | |
| CUDA_HOST_DEVICE Matrix & | add_mat_mat_mult (const Matrix< T_, m_, la_, sma_, sna_ > &a, const Matrix< T_, lb_, n_, smb_, snb_ > &b, DataType alpha=DataType(1)) |
| Adds the algebraic matrix-product of two other matrices onto this matrix. More... | |
| template<int snx_, int sny_> | |
| CUDA_HOST_DEVICE Matrix & | add_outer_product (const Vector< T_, m_, snx_ > &x, const Vector< T_, n_, sny_ > &y, const DataType alpha=DataType(1)) |
| Adds the outer product of two vectors onto the matrix. More... | |
| CUDA_HOST_DEVICE Matrix & | add_scalar_main_diag (DataType alpha) |
| Adds a value onto the matrix's main diagonal. More... | |
| template<int l_, int snv_, int slt_, int smt_, int snt_> | |
| CUDA_HOST_DEVICE Matrix & | add_vec_tensor_mult (const Vector< T_, l_, snv_ > &x, const Tensor3< T_, l_, m_, n_, slt_, smt_, snt_ > &t, DataType alpha=DataType(1)) |
| Adds the result of a vector-tensor left-product onto this matrix. More... | |
| template<int sma_, int sna_> | |
| CUDA_HOST_DEVICE Matrix & | axpy (DataType alpha, const Matrix< T_, m_, n_, sma_, sna_ > &a) |
| Adds another scaled matrix onto this matrix. More... | |
| template<typename Tx_ , int sma_, int sna_> | |
| CUDA_HOST_DEVICE void | convert (const Matrix< Tx_, m_, n_, sma_, sna_ > &a) |
| conversion operator More... | |
| template<int sma_, int sna_> | |
| CUDA_HOST_DEVICE void | copy (const Matrix< T_, m_, n_, sma_, sna_ > &a) |
| Copies a matrix. More... | |
| template<int mm_, int nn_, int ma_, int na_, int sma_, int sna_> | |
| CUDA_HOST_DEVICE void | copy_n (const Matrix< T_, ma_, na_, sma_, sna_ > &a) |
| Copies the upper left mm_ x nn_ entries of a matrix. More... | |
| CUDA_HOST_DEVICE DataType | det () const |
| Returns the determinant of the matrix. More... | |
| CUDA_HOST_DEVICE void | format (DataType alpha=DataType(0)) |
| Formats the matrix. More... | |
| CUDA_HOST_DEVICE DataType | norm_frobenius () const |
| Returns the Frobenius norm of the matrix. More... | |
| CUDA_HOST_DEVICE DataType | norm_frobenius_sqr () const |
| Returns the Frobenius norm squared of the matrix. More... | |
| CUDA_HOST_DEVICE DataType | norm_hessian_sqr () const |
| Returns the Hessian norm square. More... | |
| CUDA_HOST_DEVICE DataType | norm_sub_id_frobenius () const |
| Returns the Frobenius norm of the difference of this matrix and the identity matrix. More... | |
| CUDA_HOST_DEVICE T_ & | operator() (int i, int j) |
| Access operator. More... | |
| CUDA_HOST_DEVICE const T_ & | operator() (int i, int j) const |
| Access operator. More... | |
| CUDA_HOST_DEVICE Matrix & | operator*= (DataType alpha) |
| scalar-right-multiply-by operator More... | |
| template<int sma_, int sna_> | |
| CUDA_HOST_DEVICE Matrix & | operator+= (const Matrix< T_, m_, n_, sma_, sna_ > &a) |
| matrix component-wise addition operator More... | |
| template<int sma_, int sna_> | |
| CUDA_HOST_DEVICE Matrix & | operator-= (const Matrix< T_, m_, n_, sma_, sna_ > &a) |
| matrix component-wise subtraction operator More... | |
| template<int sma_, int sna_> | |
| CUDA_HOST_DEVICE Matrix & | operator= (const Matrix< T_, m_, n_, sma_, sna_ > &a) |
| assignment operator More... | |
| template<typename Tx_ > | |
| CUDA_HOST_DEVICE Matrix & | operator= (const std::initializer_list< std::initializer_list< Tx_ > > &x) |
| Initializer list assignment operator. More... | |
| template<typename Tx_ > | |
| CUDA_HOST_DEVICE Matrix & | operator= (const std::initializer_list< Tx_ > &x) |
| Initializer list assignment operator. More... | |
| CUDA_HOST_DEVICE Matrix & | operator= (DataType value) |
| value-assignment operator More... | |
| CUDA_HOST_DEVICE RowType & | operator[] (int i) |
| Row-Access operator. More... | |
| CUDA_HOST_DEVICE const RowType & | operator[] (int i) const |
| Row-Access operator. More... | |
| template<int snx_, int sny_> | |
| CUDA_HOST_DEVICE DataType | scalar_product (const Vector< T_, m_, snx_ > &x, const Vector< T_, n_, sny_ > &y) const |
| Computes the scalar product of two vectors with this matrix. More... | |
| template<int sma_, int sna_> | |
| CUDA_HOST_DEVICE Matrix & | set_cofactor (const Matrix< T_, m_, n_, sma_, sna_ > &a) |
| Sets this matrix to the cofactor matrix of another matrix. More... | |
| template<int k_, int l_, int sma_, int sna_, int smb_, int snb_, int smd_, int snd_> | |
| CUDA_HOST_DEVICE Matrix & | set_double_mat_mult (const Matrix< T_, k_, l_, sma_, sna_ > &a, const Matrix< T_, k_, m_, smb_, snb_ > &b, const Matrix< T_, l_, n_, smd_, snd_ > &d, T_ alpha=T_(1)) |
| Sets this matrix to the algebraic matrix double-product of three other matrices. More... | |
| template<int l_, int sla_, int sna_> | |
| CUDA_HOST_DEVICE Matrix & | set_gram (const Matrix< T_, l_, n_, sla_, sna_ > &a) |
| Sets this matrix to the Gram matrix of another matrix. More... | |
| CUDA_HOST_DEVICE Matrix & | set_identity () |
| Sets this matrix to the identity matrix. More... | |
| template<int sma_, int sna_> | |
| CUDA_HOST_DEVICE Matrix & | set_inverse (const Matrix< T_, m_, n_, sma_, sna_ > &a) |
| Sets this matrix to the inverse of another matrix. More... | |
| template<int la_, int lb_, int sma_, int sna_, int smb_, int snb_> | |
| CUDA_HOST_DEVICE Matrix & | set_mat_mat_mult (const Matrix< T_, m_, la_, sma_, sna_ > &a, const Matrix< T_, lb_, n_, smb_, snb_ > &b) |
| Sets this matrix to the algebraic matrix-product of two other matrices. More... | |
| template<int snx_, int sny_> | |
| CUDA_HOST_DEVICE Matrix & | set_outer_product (const Vector< T_, m_, snx_ > &x, const Vector< T_, n_, sny_ > &y) |
| Sets this matrix to the outer product of two vectors. More... | |
| CUDA_HOST_DEVICE Matrix & | set_rotation_2d (T_ angle) |
| Sets this matrix to a 2D rotation matrix. More... | |
| CUDA_HOST_DEVICE Matrix & | set_rotation_3d (T_ yaw, T_ pitch, T_ roll) |
| Sets this matrix to a 3D yaw-pitch-roll rotation matrix. More... | |
| template<int sma_, int sna_> | |
| CUDA_HOST_DEVICE Matrix & | set_transpose (const Matrix< T_, n_, m_, sma_, sna_ > &a) |
| Sets this matrix to the transpose of another matrix. More... | |
| template<int l_, int snv_, int slt_, int smt_, int snt_> | |
| CUDA_HOST_DEVICE Matrix & | set_vec_tensor_mult (const Vector< T_, l_, snv_ > &x, const Tensor3< T_, l_, m_, n_, slt_, smt_, snt_ > &t, DataType alpha=DataType(1)) |
| Sets this matrix to the result of a vector-tensor left-product. More... | |
| CUDA_HOST_DEVICE DataType | trace () const |
| Returns the trace of the matrix. More... | |
| CUDA_HOST_DEVICE DataType | vol () const |
| Returns the volume of the matrix. More... | |
Static Public Member Functions | |
| static CUDA_HOST_DEVICE Matrix | null () |
| Returns a null-matrix. More... | |
Public Attributes | |
| RowType | v [sm_] |
| actual matrix data; that's an array of vectors More... | |
Static Public Attributes | |
| static constexpr int | m = m_ |
| the row count of the matrix More... | |
| static constexpr int | n = n_ |
| the column count of the matrix More... | |
| static constexpr int | sm = sm_ |
| the row stride of the matrix More... | |
| static constexpr int | sn = sn_ |
| the column stride of the matrix More... | |
Friends | |
| CUDA_HOST friend std::ostream & | operator<< (std::ostream &lhs, const Matrix &A) |
| Tiny::Matrix streaming operator. More... | |
| CUDA_HOST friend std::istream & | operator>> (std::istream &in, Matrix &A) |
| Tiny::Matrix streaming operator. More... | |
This class template implements a matrix whose value type and size is given at compile-time. The value type can be a primitive type, or some other object like a Vector.
| T_ | The datatype that the vector shall contain. |
| m_,n_ | The number rows and columns of the matrix. Must be > 0. |
| sm_ | The row stride of the matrix. Must be >= m_. |
| sn_ | The column stride of the matrix. Must be >= n_. |
Definition at line 84 of file tiny_algebra.hpp.
| typedef Intern::DataTypeExtractor<ValueType>::MyDataType FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::DataType |
The basic data type buried in the lowest level of the vector.
Definition at line 1368 of file tiny_algebra.hpp.
| typedef Vector<T_, n_, sn_> FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::RowType |
the type of a single matrix row
Definition at line 1371 of file tiny_algebra.hpp.
| typedef T_ FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::ValueType |
the data type of the matrix
Definition at line 1366 of file tiny_algebra.hpp.
|
inline |
default constructor
Definition at line 1376 of file tiny_algebra.hpp.
|
inlineexplicit |
value-assignment constructor
Definition at line 1381 of file tiny_algebra.hpp.
References FEAT::value.
|
inline |
copy constructor
Definition at line 1391 of file tiny_algebra.hpp.
References FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::v.
|
inlineexplicit |
Initializer list of Tiny::Vector constructor.
| [in] | x | The initializer list whose elements are to be assigned. |
Definition at line 1414 of file tiny_algebra.hpp.
References XASSERTM.
|
inlineexplicit |
Initializer list constructor.
| [in] | x | The initializer list whose elements are to be assigned. |
Definition at line 1436 of file tiny_algebra.hpp.
References XASSERTM.
|
inline |
Adds the algebraic matrix double-product of three other matrices onto this matrix.
Let C denote this m-by-n matrix, B the left k-by-m input matrix, D the right l-by-n input matrix and A the inner k-by-l input matrix, then this operation computes:
\[ C \leftarrow C + \alpha B^\top\cdot A\cdot D\]
| [in] | a | The inner k-by-l multiplicand matrix. |
| [in] | b | The left k-by-m multiplicand matrix. |
| [in] | d | The right l-by-n multiplicand matrix. |
| [in] | alpha | A scaling factor for the product. |
*this Definition at line 2145 of file tiny_algebra.hpp.
References ASSERTM.
|
inline |
Adds the algebraic matrix-product of two other matrices onto this matrix.
Let C denote this matrix, and let A denote the left m-by-l matrix and B the right l-by-n matrix, then this function computes:
\[ C\leftarrow C + \alpha A\cdot B \]
| [in] | a | The left m-by-l multiplicand matrix. |
| [in] | b | The right l-by-n multiplicand matrix. |
| [in] | alpha | A scaling factor for the product. |
*this Definition at line 2071 of file tiny_algebra.hpp.
References ASSERTM.
|
inline |
Adds the outer product of two vectors onto the matrix.
This function performs:
\[ a_{ij} \leftarrow a_{ij} + \alpha x_i y_j \]
| [in] | x | The left multiplicand vector of size m_. |
| [in] | y | The right multiplicand vector of size n_. |
| [in] | alpha | The scaling factor for the outer product. |
*this Definition at line 1971 of file tiny_algebra.hpp.
Referenced by FEAT::Assembly::BurgersBlockedAssemblyTaskBase< Job_, DataType_, block_size_ >::assemble_burgers_point(), FEAT::Assembly::BurgersCarreauBlockedAssemblyTaskBase< Job_, DataType_, block_size_ >::assemble_burgers_point(), FEAT::Assembly::BurgersAssembler< DataType_, IndexType_, dim_ >::assemble_matrix(), FEAT::Assembly::OldroydAssembler::assemble_matrix(), FEAT::Assembly::BurgersAssemblerCarreau< DataType_, IndexType_, dim_ >::assemble_vector(), FEAT::Assembly::VelocityAnalyser::compute(), FEAT::Assembly::DiscreteEvaluator::eval_fe_gradient(), FEAT::Assembly::BurgersAssemblyTaskBase< Job_, DataType_ >::prepare_point(), and FEAT::Assembly::BurgersCarreauAssemblyTaskBase< Job_, DataType_ >::prepare_point().
|
inline |
Adds a value onto the matrix's main diagonal.
| [in] | alpha | The value that is to be added onto the main diagonal. |
Definition at line 2045 of file tiny_algebra.hpp.
Referenced by FEAT::Assembly::BurgersBlockedAssemblyTaskBase< Job_, DataType_, block_size_ >::assemble_burgers_point(), FEAT::Assembly::BurgersCarreauBlockedAssemblyTaskBase< Job_, DataType_, block_size_ >::assemble_burgers_point(), FEAT::Assembly::OldroydAssembler::assemble_matrix(), FEAT::Assembly::BurgersBlockedAssemblyTaskBase< Job_, DataType_, block_size_ >::assemble_streamline_diffusion(), FEAT::Assembly::BurgersCarreauBlockedAssemblyTaskBase< Job_, DataType_, block_size_ >::assemble_streamline_diffusion(), FEAT::Assembly::Common::LaplaceOperatorBlocked< dimension_ >::Evaluator< AsmTraits_ >::eval(), FEAT::Assembly::Common::IdentityOperatorBlocked< dimension_ >::Evaluator< AsmTraits_ >::eval(), and FEAT::Assembly::Common::DuDvOperatorBlocked< dimension_ >::Evaluator< AsmTraits_ >::eval().
|
inline |
Adds the result of a vector-tensor left-product onto this matrix.
Let A denote this m-by-n matrix, v the l-size input vector and T the l-by-m-by-b input tensor, then this operation computes:
\[ \forall i\in\{0,...,m-1\},j\in\{0,...,n-1\}:~ A_{ij} \leftarrow A_{ij} + \alpha \sum_{k=0}^{l-1} v_k\cdot T_{kij}\]
| [in] | x | The l-size vector that serves as a left multiplicand. |
| [in] | t | The l-by-m-by-n tensor that serves as a right multiplicand. |
| [in] | alpha | A scaling factor for the product. |
*this Definition at line 2234 of file tiny_algebra.hpp.
|
inline |
Adds another scaled matrix onto this matrix.
| [in] | alpha | The scaling parameter for the axpy. |
| [in] | a | The matrix to be added onto this matrix. |
*this Definition at line 2027 of file tiny_algebra.hpp.
References FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::v.
Referenced by FEAT::Assembly::BurgersBlockedAssemblyTaskBase< Job_, DataType_, block_size_ >::assemble_burgers_point(), FEAT::Assembly::BurgersCarreauBlockedAssemblyTaskBase< Job_, DataType_, block_size_ >::assemble_burgers_point(), FEAT::Assembly::BurgersAssemblerCarreau< DataType_, IndexType_, dim_ >::assemble_vector(), and FEAT::Assembly::BurgersCarreauAssemblyTaskBase< Job_, DataType_ >::prepare_point().
|
inline |
conversion operator
Definition at line 1510 of file tiny_algebra.hpp.
References FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::v.
|
inline |
Copies a matrix.
| [in] | a | The source matrix to copy |
Definition at line 1601 of file tiny_algebra.hpp.
References FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::v.
|
inline |
Copies the upper left mm_ x nn_ entries of a matrix.
| mm_ | The number of matrix rows to copy; must be mm_ <= min(m_, ma_) |
| nn_ | The number of matrix columns to copy; must be nn_ <= min(n_, na_) |
| [in] | x | The source vector to copy the elements from |
Definition at line 1621 of file tiny_algebra.hpp.
References FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::v.
|
inline |
Returns the determinant of the matrix.
m_ = n_ and will intentionally fail to compile in any other case.Definition at line 1778 of file tiny_algebra.hpp.
|
inline |
Formats the matrix.
| [in] | alpha | The value that the matrix is to be set to. |
Definition at line 1638 of file tiny_algebra.hpp.
References FEAT::Tiny::Vector< T_, n_, s_ >::format().
Referenced by FEAT::Assembly::TraceAssemblyStokesBodyForceAssemblyJob< VectorVelo_, VectorPres_, SpaceVelo_, SpacePres_ >::TraceAssemblyStokesBodyForceAssemblyJob(), FEAT::Assembly::BurgersBlockedAssemblyTaskBase< Job_, DataType_, block_size_ >::assemble(), FEAT::Assembly::BurgersScalarAssemblyTaskBase< Job_, DataType_ >::assemble(), FEAT::Assembly::BurgersCarreauBlockedAssemblyTaskBase< Job_, DataType_, block_size_ >::assemble(), FEAT::Assembly::BurgersCarreauScalarAssemblyTaskBase< Job_, DataType_ >::assemble(), FEAT::Assembly::TraceAssemblyJumpMatrixTaskCRTP1< Derived_, Matrix_, Space_, trafo_config_, facet_trafo_config_, space_config_ >::assemble(), FEAT::Assembly::GradPresDivVeloAssembler::assemble(), FEAT::Assembly::GradOperatorAssembler::assemble(), FEAT::Assembly::BurgersAssembler< DataType_, IndexType_, dim_ >::assemble_matrix(), FEAT::Assembly::OldroydAssembler::assemble_matrix(), FEAT::Assembly::GridTransfer::assemble_prolongation(), FEAT::Assembly::SpaceTransfer::assemble_transfer(), FEAT::Assembly::GridTransfer::assemble_truncation(), FEAT::Assembly::BurgersAssemblerCarreau< DataType_, IndexType_, dim_ >::assemble_vector(), FEAT::Assembly::VelocityAnalyser::compute(), FEAT::Meshopt::MeshConcentrationFunction< ElementalFunction_, Trafo_, RefCellTrafo_ >::compute_grad_h(), FEAT::Assembly::DiscreteEvaluator::eval_fe_gradient(), FEAT::Assembly::MatrixDiscreteEvalData< DT_, dim_i_, dim_j_ >::mean_value(), FEAT::Assembly::MatrixDiscreteEvalData< DT_, dim_i_, dim_j_ >::mean_value_dist(), FEAT::Space::Argyris::Evaluator< Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Simplex< 2 > >::prepare(), FEAT::Assembly::BurgersAssemblyTaskBase< Job_, DataType_ >::prepare_point(), FEAT::Assembly::BurgersCarreauAssemblyTaskBase< Job_, DataType_ >::prepare_point(), FEAT::Assembly::GridTransfer::prolongate_vector(), and FEAT::Assembly::SpaceTransfer::transfer_vector().
|
inline |
Returns the Frobenius norm of the matrix.
This function computes and returns
\[ \Big(\sum_{i=0}^{m-1}\sum_{j=0}^{n-1} (A_{ij})^2\Big)^{\frac{1}{2}} \]
Definition at line 1687 of file tiny_algebra.hpp.
References FEAT::Math::sqrt().
Referenced by FEAT::Assembly::GridTransfer::assemble_prolongation(), FEAT::Assembly::SpaceTransfer::assemble_transfer(), FEAT::Assembly::GridTransfer::assemble_truncation(), FEAT::Assembly::BurgersAssemblerCarreau< DataType_, IndexType_, dim_ >::assemble_vector(), FEAT::Assembly::BurgersCarreauAssemblyTaskBase< Job_, DataType_ >::prepare_point(), FEAT::Assembly::GridTransfer::prolongate_vector(), and FEAT::Assembly::SpaceTransfer::transfer_vector().
|
inline |
Returns the Frobenius norm squared of the matrix.
This function computes and returns
\[ \sum_{i=0}^{m-1}\sum_{j=0}^{n-1} (A_{ij})^2\]
Definition at line 1704 of file tiny_algebra.hpp.
References FEAT::Math::sqr().
|
inline |
Returns the Hessian norm square.
This function computes and returns
\[ \sum_{i=0}^{m-1}\sum_{j=0}^{n-1} K_{ij}\cdot (A_{ij})^2 \]
where K_ij is 1 for i=j and 1/2 otherwise.
Definition at line 1657 of file tiny_algebra.hpp.
References FEAT::Math::sqr().
Referenced by FEAT::Assembly::FunctionIntegralInfo< DataType_, ValueType_, GradientType_, HessianType_ >::add_hess().
|
inline |
Returns the Frobenius norm of the difference of this matrix and the identity matrix.
Definition at line 1726 of file tiny_algebra.hpp.
References FEAT::Math::sqr(), and FEAT::Math::sqrt().
Referenced by FEAT::Geometry::Atlas::Extrude< Mesh_, SubChart_ >::write().
|
inlinestatic |
Returns a null-matrix.
Definition at line 2365 of file tiny_algebra.hpp.
|
inline |
Access operator.
| [in] | i,j | The indices of the matrix entry that is to be returned. |
Definition at line 1525 of file tiny_algebra.hpp.
References ASSERTM.
|
inline |
Access operator.
| [in] | i,j | The indices of the matrix entry that is to be returned. |
Definition at line 1533 of file tiny_algebra.hpp.
References ASSERTM.
|
inline |
scalar-right-multiply-by operator
Definition at line 1563 of file tiny_algebra.hpp.
|
inline |
matrix component-wise addition operator
Definition at line 1574 of file tiny_algebra.hpp.
References FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::v.
|
inline |
matrix component-wise subtraction operator
Definition at line 1585 of file tiny_algebra.hpp.
References FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::v.
|
inline |
assignment operator
Definition at line 1456 of file tiny_algebra.hpp.
References FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::v.
|
inline |
Initializer list assignment operator.
| [in] | x | The initializer list whose elements are to be assigned. |
Definition at line 1499 of file tiny_algebra.hpp.
References XASSERTM.
|
inline |
Initializer list assignment operator.
| [in] | x | The initializer list whose elements are to be assigned. |
Definition at line 1478 of file tiny_algebra.hpp.
References XASSERTM.
|
inline |
|
inline |
Row-Access operator.
| [in] | i | The index of the row that is to be returned. |
i-th row of the matrix.S Definition at line 1549 of file tiny_algebra.hpp.
References ASSERTM.
|
inline |
Row-Access operator.
| [in] | i | The index of the row that is to be returned. |
i-th row of the matrix.S Definition at line 1556 of file tiny_algebra.hpp.
References ASSERTM.
|
inline |
Computes the scalar product of two vectors with this matrix.
This function returns
\[ x^\top\cdot A\cdot y = \sum_{i=0}^{m-1}\sum_{j=0}^{n-1} x_i\cdot A_{ij}\cdot y_j\]
| [in] | x | The left muliplicant vector of size m_. |
| [in] | y | The right multiplicand vector of size n_. |
x and y with this matrix. Definition at line 1943 of file tiny_algebra.hpp.
References FEAT::Tiny::dot().
Referenced by FEAT::Assembly::Common::LaplaceBeltramiOperator::Evaluator< AsmTraits_ >::eval().
|
inline |
Sets this matrix to the cofactor matrix of another matrix.
\( \mathrm{Cof}(A) \) is the cofactor matrix of \( A \). If \(A \in \mathbb{R}^{n \times n}\), define \(A^{(i,j)} \in \mathbb{R}^{n-1 \times n-1}\) as the matrix obtained by deleting the \( i \)th column and \( j \)th row of \( A \). Then
\[ \mathrm{Cof}(A)_{i,j} = (-1)^{i+j} \det(A^{(i,j)}) \]
and if \( A \in \mathrm{GL}_n\), \( \mathrm{Cof}(A) = \det(A) A^{-T} \).
m_ = n_ and will intentionally fail to compile in any other case.| [in] | a | The matrix whose cofactor matrix is to be stored in this matrix. |
*this Definition at line 1862 of file tiny_algebra.hpp.
References ASSERTM.
|
inline |
Sets this matrix to the algebraic matrix double-product of three other matrices.
Let C denote this m-by-n matrix, B the left k-by-m input matrix, D the right l-by-n input matrix and A the inner k-by-l input matrix, then this operation computes:
\[ C \leftarrow B^\top\cdot A\cdot D\]
| [in] | a | The inner k-by-l multiplicand matrix. |
| [in] | b | The left k-by-m multiplicand matrix. |
| [in] | d | The right l-by-n multiplicand matrix. |
| [in] | alpha | A scaling factor for the product. |
*this Definition at line 2198 of file tiny_algebra.hpp.
References ASSERTM.
|
inline |
Sets this matrix to the Gram matrix of another matrix.
Let C denote this n-by-n matrix, and let A denote the l-by-n input matrix, then this function computes:
\[ C\leftarrow A^\top\cdot A \]
| [in] | a | The matrix whose Gram matrix is to be stored in this matrix. |
*this Definition at line 1907 of file tiny_algebra.hpp.
References FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::v.
|
inline |
Sets this matrix to the identity matrix.
*this Definition at line 2289 of file tiny_algebra.hpp.
Referenced by FEAT::Geometry::Intern::AdaptiveMeshStorage< MeshShape_, TemplateSet_, VertexType_ >::_aux_rot_mat().
|
inline |
Sets this matrix to the inverse of another matrix.
m_ = n_ and will intentionally fail to compile in any other case.| [in] | a | The matrix whose inverse is to be stored in this matrix. |
*this Definition at line 1810 of file tiny_algebra.hpp.
References ASSERTM.
Referenced by FEAT::Space::CroRavRanTur::Evaluator< Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Quadrilateral >::_build_coeff_matrix(), FEAT::Space::CroRavRanTur::Evaluator< Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Hexahedron >::_build_coeff_matrix(), FEAT::Space::Q1TBNP::Evaluator< Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Quadrilateral >::_build_coeff_matrix(), FEAT::Space::Q1TBNP::Evaluator< Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Hexahedron >::_build_coeff_matrix(), FEAT::Trafo::Standard::inverse_mapping(), and FEAT::Space::Argyris::Evaluator< Space_, TrafoEvaluator_, SpaceEvalTraits_, Shape::Simplex< 2 > >::prepare().
|
inline |
Sets this matrix to the algebraic matrix-product of two other matrices.
Let C denote this matrix, and let A denote the left m-by-l matrix and B the right l-by-n matrix, then this function computes:
\[ C\leftarrow A\cdot B \]
| [in] | a | The left m-by-l multiplicand matrix. |
| [in] | b | The right l-by-n multiplicand matrix. |
*this Definition at line 2112 of file tiny_algebra.hpp.
References ASSERTM.
Referenced by FEAT::LAFEM::SparseMatrixBCSR< DT_, IT_, BlockHeight_, BlockWidth_ >::add_double_mat_product(), FEAT::Assembly::GridTransfer::assemble_prolongation(), FEAT::Assembly::SpaceTransfer::assemble_transfer(), FEAT::Assembly::GridTransfer::assemble_truncation(), FEAT::Tiny::operator*(), FEAT::Assembly::GridTransfer::prolongate_vector(), and FEAT::Assembly::SpaceTransfer::transfer_vector().
|
inline |
Sets this matrix to the outer product of two vectors.
This function performs:
\[ a_{ij} \leftarrow x_i y_j \]
| [in] | x | The left multiplicand vector of size m_. |
| [in] | y | The right multiplicand vector of size n_. |
*this Definition at line 2001 of file tiny_algebra.hpp.
Referenced by FEAT::Assembly::Common::DuDvOperatorBlocked< dimension_ >::Evaluator< AsmTraits_ >::eval().
|
inline |
Sets this matrix to a 2D rotation matrix.
| [in] | angle | Specifies the rotation angle in radians |
*this Definition at line 2305 of file tiny_algebra.hpp.
References FEAT::Math::cos(), and FEAT::Math::sin().
Referenced by FEAT::Analytic::PolarCoordinate< Function_, pos_range_ >::PolarCoordinate(), FEAT::Geometry::Intern::AdaptiveMeshStorage< MeshShape_, TemplateSet_, VertexType_ >::_aux_rot_mat(), FEAT::Geometry::Atlas::Bezier< Mesh_ >::transform(), and FEAT::Geometry::Atlas::Circle< Mesh_ >::transform().
|
inline |
Sets this matrix to a 3D yaw-pitch-roll rotation matrix.
This function sets a 3D rotation matrix by specifying the yaw, pitch and roll angles.
The convention for the rotation is Z-Y'-X'', also known as nautical angles.
*this Definition at line 2332 of file tiny_algebra.hpp.
References FEAT::Math::cos(), and FEAT::Math::sin().
Referenced by FEAT::Geometry::Intern::AdaptiveMeshStorage< MeshShape_, TemplateSet_, VertexType_ >::_aux_rot_mat(), FEAT::Geometry::MeshExtruder< ConformalMesh< Shape::Hypercube< 2 >, 2, Coord_ > >::extrude_vertex_set(), FEAT::Geometry::Atlas::Sphere< Mesh_ >::transform(), and FEAT::Geometry::Atlas::SurfaceMesh< Mesh_ >::transform().
|
inline |
Sets this matrix to the transpose of another matrix.
| [in] | a | The matrix whose transpose is to be stored in this matrix. |
*this Definition at line 1879 of file tiny_algebra.hpp.
References ASSERTM, and FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::v.
Referenced by FEAT::Assembly::BurgersAssemblerCarreau< DataType_, IndexType_, dim_ >::assemble_vector(), FEAT::Assembly::BurgersCarreauAssemblyTaskBase< Job_, DataType_ >::prepare_point(), and FEAT::LAFEM::SparseMatrixBCSR< DT_, IT_, BlockHeight_, BlockWidth_ >::transpose().
|
inline |
Sets this matrix to the result of a vector-tensor left-product.
Let A denote this m-by-n matrix, v the l-size input vector and T the l-by-m-by-b input tensor, then this operation computes:
\[ \forall i\in\{0,...,m-1\},j\in\{0,...,n-1\}:~ A_{ij} \leftarrow \alpha \sum_{k=0}^{l-1} v_k\cdot T_{kij}\]
| [in] | x | The l-size vector that serves as a left multiplicand. |
| [in] | t | The l-by-m-by-n tensor that serves as a right multiplicand. |
| [in] | alpha | A scaling factor for the product. |
*this Definition at line 2275 of file tiny_algebra.hpp.
|
inline |
Returns the trace of the matrix.
This function computes and returns
\[ \sum_{i=0}^{\min(m,n)} A_{ii}\]
i.e. the sum of all main diagonal elements.
Definition at line 1756 of file tiny_algebra.hpp.
References FEAT::Math::min().
Referenced by FEAT::Assembly::FunctionIntegralInfo< DataType_, ValueType_, GradientType_, HessianType_ >::add_grad(), and FEAT::Assembly::VelocityAnalyser::compute().
|
inline |
Returns the volume of the matrix.
The volume of a matrix A is defined as:
\[ \textnormal{vol}(A) := \sqrt{\textnormal{det}(A^\top\cdot A)} \]
m_ = n_, the volume of the matrix equals the absolute of its determinant. m_ < n_, the volume of the matrix is always zero.Definition at line 1794 of file tiny_algebra.hpp.
|
friend |
Tiny::Matrix streaming operator.
| [in] | lhs | The target stream. |
| [in] | A | The matrix to be streamed. |
Definition at line 2376 of file tiny_algebra.hpp.
|
friend |
Tiny::Matrix streaming operator.
| [in] | in | The input stream. |
| [in] | A | The matrix to fill. |
Definition at line 2393 of file tiny_algebra.hpp.
|
staticconstexpr |
the row count of the matrix
Definition at line 1357 of file tiny_algebra.hpp.
Referenced by FEAT::Geometry::Atlas::SurfaceMesh< Mesh_ >::get_normal_on_tria().
|
staticconstexpr |
the column count of the matrix
Definition at line 1359 of file tiny_algebra.hpp.
Referenced by FEAT::Geometry::Atlas::SurfaceMesh< Mesh_ >::get_normal_on_tria().
|
staticconstexpr |
the row stride of the matrix
Definition at line 1361 of file tiny_algebra.hpp.
|
staticconstexpr |
the column stride of the matrix
Definition at line 1363 of file tiny_algebra.hpp.
Referenced by FEAT::Assembly::GridTransfer::assemble_prolongation(), FEAT::Assembly::SpaceTransfer::assemble_transfer(), FEAT::Assembly::GridTransfer::assemble_truncation(), FEAT::Assembly::GridTransfer::prolongate_vector(), and FEAT::Assembly::SpaceTransfer::transfer_vector().
| RowType FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::v[sm_] |
actual matrix data; that's an array of vectors
Definition at line 1373 of file tiny_algebra.hpp.
Referenced by FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::Matrix(), FEAT::Tiny::Vector< T_, n_, s_ >::add_mat_vec_mult(), FEAT::Tiny::Vector< T_, n_, s_ >::add_mat_vec_mult_n(), FEAT::Tiny::Vector< T_, n_, s_ >::add_vec_mat_mult(), FEAT::Tiny::Vector< T_, n_, s_ >::add_vec_mat_mult_n(), FEAT::Assembly::GridTransfer::assemble_prolongation(), FEAT::Assembly::SpaceTransfer::assemble_transfer(), FEAT::Assembly::GridTransfer::assemble_truncation(), FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::axpy(), FEAT::Tiny::axpy(), FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::convert(), FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::copy(), FEAT::Tiny::Tensor3< T_, l_, m_, n_, sl_, sm_, sn_ >::copy(), FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::copy_n(), FEAT::Tiny::Tensor3< T_, l_, m_, n_, sl_, sm_, sn_ >::copy_n(), FEAT::Tiny::dot(), FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::operator+=(), FEAT::Tiny::Tensor3< T_, l_, m_, n_, sl_, sm_, sn_ >::operator+=(), FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::operator-=(), FEAT::Tiny::Tensor3< T_, l_, m_, n_, sl_, sm_, sn_ >::operator-=(), FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::operator=(), FEAT::Tiny::Tensor3< T_, l_, m_, n_, sl_, sm_, sn_ >::operator=(), FEAT::Assembly::GridTransfer::prolongate_vector(), FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::set_gram(), FEAT::Tiny::Vector< T_, n_, s_ >::set_mat_vec_mult(), FEAT::Tiny::Vector< T_, n_, s_ >::set_mat_vec_mult_n(), FEAT::Tiny::Matrix< T_, m_, n_, sm_, sn_ >::set_transpose(), FEAT::Tiny::Vector< T_, n_, s_ >::set_vec_mat_mult(), FEAT::Tiny::Vector< T_, n_, s_ >::set_vec_mat_mult_n(), FEAT::Assembly::TraceAssemblyStokesBodyForceAssemblyJob< VectorVelo_, VectorPres_, SpaceVelo_, SpacePres_ >::sync(), and FEAT::Assembly::SpaceTransfer::transfer_vector().