|
| TensorGeneric () |
| initialize the tensor to zero More...
|
|
| TensorGeneric (const VectorGeneric< n > &v1, const VectorGeneric< m > &v2) |
| initialize a tensor as an external product of two Vector More...
|
|
| TensorGeneric (double, double, double, double) |
| initialize a tensor with 4 values, in standard C order More...
|
|
| TensorGeneric (double, double, double, double, double, double, double, double, double) |
| initialize a tensor with 9 values, in standard C order More...
|
|
void | zero () |
| set it to zero More...
|
|
double & | operator() (unsigned i, unsigned j) |
| access element More...
|
|
const double & | operator() (unsigned i, unsigned j) const |
| access element More...
|
|
TensorGeneric & | operator+= (const TensorGeneric< n, m > &b) |
| increment More...
|
|
TensorGeneric & | operator-= (const TensorGeneric< n, m > &b) |
| decrement More...
|
|
TensorGeneric & | operator*= (double) |
| multiply More...
|
|
TensorGeneric & | operator/= (double) |
| divide More...
|
|
TensorGeneric | operator+ () const |
| return +t More...
|
|
TensorGeneric | operator- () const |
| return -t More...
|
|
TensorGeneric & | setCol (unsigned j, const VectorGeneric< n > &c) |
| set j-th column More...
|
|
TensorGeneric & | setRow (unsigned i, const VectorGeneric< m > &r) |
| set i-th row More...
|
|
VectorGeneric< n > | getCol (unsigned j) const |
| get j-th column More...
|
|
VectorGeneric< m > | getRow (unsigned i) const |
| get i-th row More...
|
|
double | determinant () const |
| returns the determinant More...
|
|
TensorGeneric | inverse () const |
| return the matrix inverse More...
|
|
TensorGeneric< m, n > | transpose () const |
| return the transpose matrix More...
|
|
template<> |
| TensorGeneric (double d00, double d01, double d10, double d11) |
|
template<> |
| TensorGeneric (double d00, double d01, double d02, double d10, double d11, double d12, double d20, double d21, double d22) |
|
template<> |
double | determinant () const |
|
template<> |
TensorGeneric< 3, 3 > | inverse () const |
|
Row | operator[] (unsigned i) |
| access element (with [][] syntax) More...
|
|
Const_row | operator[] (unsigned i) const |
| access element (with [][] syntax) More...
|
|
|
template<unsigned n_, unsigned m_> |
TensorGeneric< n_, m_ > | operator+ (const TensorGeneric< n_, m_ > &, const TensorGeneric< n_, m_ > &) |
| return t1+t2 More...
|
|
template<unsigned n_, unsigned m_> |
TensorGeneric< n_, m_ > | operator- (const TensorGeneric< n_, m_ > &, const TensorGeneric< n_, m_ > &) |
| return t1+t2 More...
|
|
template<unsigned n_, unsigned m_> |
TensorGeneric< n_, m_ > | operator* (double, const TensorGeneric< n_, m_ > &) |
| scale the tensor by a factor s More...
|
|
template<unsigned n_, unsigned m_> |
TensorGeneric< n_, m_ > | operator* (const TensorGeneric< n_, m_ > &, double s) |
| scale the tensor by a factor s More...
|
|
template<unsigned n_, unsigned m_> |
TensorGeneric< n_, m_ > | operator/ (const TensorGeneric< n_, m_ > &, double s) |
| scale the tensor by a factor 1/s More...
|
|
template<unsigned n_, unsigned m_, unsigned l_> |
TensorGeneric< n_, l_ > | matmul (const TensorGeneric< n_, m_ > &, const TensorGeneric< m_, l_ > &) |
| matrix-matrix multiplication More...
|
|
template<unsigned n_, unsigned m_> |
VectorGeneric< n_ > | matmul (const TensorGeneric< n_, m_ > &, const VectorGeneric< m_ > &) |
| matrix-vector multiplication More...
|
|
template<unsigned n_, unsigned m_> |
VectorGeneric< n_ > | matmul (const VectorGeneric< m_ > &, const TensorGeneric< m_, n_ > &) |
| vector-matrix multiplication More...
|
|
template<unsigned n_> |
double | matmul (const VectorGeneric< n_ > &, const VectorGeneric< n_ > &) |
| vector-vector multiplication (maps to dotProduct) More...
|
|
template<unsigned n_, unsigned m_, unsigned l_, unsigned i_> |
TensorGeneric< n_, i_ > | matmul (const TensorGeneric< n_, m_ > &, const TensorGeneric< m_, l_ > &, const TensorGeneric< l_, i_ > &) |
| matrix-matrix-matrix multiplication More...
|
|
template<unsigned n_, unsigned m_, unsigned l_> |
VectorGeneric< n_ > | matmul (const TensorGeneric< n_, m_ > &, const TensorGeneric< m_, l_ > &, const VectorGeneric< l_ > &) |
| matrix-matrix-vector multiplication More...
|
|
template<unsigned n_, unsigned m_, unsigned l_> |
VectorGeneric< l_ > | matmul (const VectorGeneric< n_ > &, const TensorGeneric< n_, m_ > &, const TensorGeneric< m_, l_ > &) |
| vector-matrix-matrix multiplication More...
|
|
template<unsigned n_, unsigned m_> |
double | matmul (const VectorGeneric< n_ > &, const TensorGeneric< n_, m_ > &, const VectorGeneric< m_ > &) |
| vector-matrix-vector multiplication More...
|
|
double | determinant (const TensorGeneric< 3, 3 > &) |
| returns the determinant of a tensor More...
|
|
TensorGeneric< 3, 3 > | inverse (const TensorGeneric< 3, 3 > &) |
| returns the inverse of a tensor (same as inverse()) More...
|
|
template<unsigned n_, unsigned m_> |
TensorGeneric< n_, m_ > | transpose (const TensorGeneric< m_, n_ > &) |
| returns the transpose of a tensor (same as transpose()) More...
|
|
template<unsigned n_, unsigned m_> |
TensorGeneric< n_, m_ > | extProduct (const VectorGeneric< n > &, const VectorGeneric< m > &) |
| returns the transpose of a tensor (same as TensorGeneric(const VectorGeneric&,const VectorGeneric&)) More...
|
|
TensorGeneric< 3, 3 > | dcrossDv1 (const VectorGeneric< 3 > &, const VectorGeneric< 3 > &) |
|
TensorGeneric< 3, 3 > | dcrossDv2 (const VectorGeneric< 3 > &, const VectorGeneric< 3 > &) |
|
template<unsigned n_, unsigned m_> |
std::ostream & | operator<< (std::ostream &os, const TensorGeneric< n_, m_ > &) |
| << operator. More...
|
|
template<unsigned n, unsigned m>
class PLMD::TensorGeneric< n, m >
Class implementing fixed size matrices of doubles.
- Template Parameters
-
n | The number rows |
m | The number columns |
This class implements a matrix of doubles with size fixed at compile time. It is useful for small fixed size objects (e.g. 3x3 tensors) as it does not waste space to store the vector size. Moreover, as the compiler knows the size, it can be completely opimized inline. Most of the loops are explicitly unrolled using PLMD::LoopUnroller class Matrix elements are initialized to zero by default. Notice that this means that constructor is a bit slow. This point might change in future if we find performance issues. It takes advantage of MatrixSquareBracketsAccess to provide both () and [] syntax for access. Several functions are declared as friends even if not necessary so as to properly appear in Doxygen documentation.
Aliases are defined to simplify common declarations (Tensor, Tensor2d, Tensor3d, Tensor4d). Also notice that some operations are only available for 3x3 tensors.
Example of usage
#include "Tensor.h"
using namespace PLMD;
int main(){
Tensor a;
TensorGeneric<3,2> b;
TensorGeneric<3,2> c=matmul(a,b);
return 0;
}