libMesh
|
This class defines a tensor in LIBMESH_DIM
dimensional space of type T.
More...
#include <tensor_tools.h>
Public Types | |
typedef T | value_type |
Helper typedef for C++98 generic programming. More... | |
typedef std::tuple< unsigned int, unsigned int > | index_type |
Helper typedef for generic index programming. More... | |
Public Member Functions | |
TypeTensor () | |
Empty constructor. More... | |
template<typename T2 > | |
TypeTensor (const TypeTensor< T2 > &p) | |
Copy-constructor. More... | |
~TypeTensor () | |
Destructor. More... | |
template<typename T2 > | |
void | assign (const TypeTensor< T2 > &) |
Assign to this tensor without creating a temporary. More... | |
template<typename Scalar > | |
boostcopy::enable_if_c< ScalarTraits< Scalar >::value, TypeTensor & >::type | operator= (const Scalar &libmesh_dbg_var(p)) |
Assignment-from-scalar operator. More... | |
const T & | operator() (const unsigned int i, const unsigned int j) const |
T & | operator() (const unsigned int i, const unsigned int j) |
ConstTypeTensorColumn< T > | slice (const unsigned int i) const |
TypeTensorColumn< T > | slice (const unsigned int i) |
TypeVector< T > | row (const unsigned int r) const |
template<typename T2 > | |
TypeTensor< typename CompareTypes< T, T2 >::supertype > | operator+ (const TypeTensor< T2 > &) const |
Add another tensor to this tensor. More... | |
template<typename T2 > | |
const TypeTensor< T > & | operator+= (const TypeTensor< T2 > &) |
Add to this tensor. More... | |
template<typename T2 > | |
void | add (const TypeTensor< T2 > &) |
Add to this tensor without creating a temporary. More... | |
template<typename T2 > | |
void | add_scaled (const TypeTensor< T2 > &, const T &) |
Add a scaled tensor to this tensor without creating a temporary. More... | |
template<typename T2 > | |
TypeTensor< typename CompareTypes< T, T2 >::supertype > | operator- (const TypeTensor< T2 > &) const |
Subtract a tensor from this tensor. More... | |
template<typename T2 > | |
const TypeTensor< T > & | operator-= (const TypeTensor< T2 > &) |
Subtract from this tensor. More... | |
template<typename T2 > | |
void | subtract (const TypeTensor< T2 > &) |
Subtract from this tensor without creating a temporary. More... | |
template<typename T2 > | |
void | subtract_scaled (const TypeTensor< T2 > &, const T &) |
Subtract a scaled value from this tensor without creating a temporary. More... | |
TypeTensor< T > | operator- () const |
template<typename Scalar > | |
auto | operator* (const Scalar &scalar) const -> typename boostcopy::enable_if_c< ScalarTraits< Scalar >::value, TypeTensor< decltype(T() *scalar)>>::type |
Multiply this tensor by a scalar value. More... | |
template<typename Scalar , typename boostcopy::enable_if_c< ScalarTraits< Scalar >::value, int >::type = 0> | |
const TypeTensor< T > & | operator*= (const Scalar &factor) |
Multiply this tensor by a scalar value in place. More... | |
template<typename Scalar > | |
boostcopy::enable_if_c< ScalarTraits< Scalar >::value, TypeTensor< typename CompareTypes< T, Scalar >::supertype > >::type | operator/ (const Scalar &) const |
Divide each entry of this tensor by a scalar value. More... | |
const TypeTensor< T > & | operator/= (const T &) |
Divide each entry of this tensor by a scalar value. More... | |
template<typename T2 > | |
TypeTensor< typename CompareTypes< T, T2 >::supertype > | operator* (const TypeTensor< T2 > &) const |
Multiply 2 tensors together, i.e. More... | |
template<typename T2 > | |
const TypeTensor< T > & | operator*= (const TypeTensor< T2 > &) |
Multiply this tensor by a tensor value in place. More... | |
template<typename T2 > | |
CompareTypes< T, T2 >::supertype | contract (const TypeTensor< T2 > &) const |
Multiply 2 tensors together to return a scalar, i.e. More... | |
template<typename T2 > | |
TypeVector< typename CompareTypes< T, T2 >::supertype > | operator* (const TypeVector< T2 > &) const |
Right-multiply this tensor by a vector, i.e. More... | |
template<typename T2 > | |
TypeVector< typename CompareTypes< T, T2 >::supertype > | left_multiply (const TypeVector< T2 > &p) const |
Left-multiply this tensor by a vector, i.e. More... | |
TypeTensor< T > | transpose () const |
TypeTensor< T > | inverse () const |
void | solve (const TypeVector< T > &b, TypeVector< T > &x) const |
Solve the 2x2 or 3x3 system of equations A*x = b for x by directly inverting A and multiplying it by b. More... | |
auto | size () const -> decltype(std::norm(T())) |
auto | norm () const -> decltype(std::norm(T())) |
auto | size_sq () const -> decltype(std::norm(T())) |
auto | norm_sq () const -> decltype(std::norm(T())) |
T | det () const |
T | tr () const |
void | zero () |
Set all entries of the tensor to 0. More... | |
bool | operator== (const TypeTensor< T > &rhs) const |
bool | operator< (const TypeTensor< T > &rhs) const |
bool | operator> (const TypeTensor< T > &rhs) const |
void | print (std::ostream &os=libMesh::out) const |
Formatted print to a stream which defaults to libMesh::out . More... | |
void | write_unformatted (std::ostream &out, const bool newline=true) const |
Unformatted print to the stream out . More... | |
Protected Member Functions | |
TypeTensor (const T &xx, const T &xy=0, const T &xz=0, const T &yx=0, const T &yy=0, const T &yz=0, const T &zx=0, const T &zy=0, const T &zz=0) | |
Constructor-from-T. More... | |
template<typename Scalar > | |
TypeTensor (const Scalar &xx, const Scalar &xy=0, const Scalar &xz=0, const Scalar &yx=0, const Scalar &yy=0, const Scalar &yz=0, const Scalar &zx=0, const Scalar &zy=0, typename boostcopy::enable_if_c< ScalarTraits< Scalar >::value, const Scalar >::type &zz=0) | |
Constructor-from-Scalar. More... | |
template<typename T2 > | |
TypeTensor (const TypeVector< T2 > &vx) | |
Constructor. More... | |
template<typename T2 > | |
TypeTensor (const TypeVector< T2 > &vx, const TypeVector< T2 > &vy) | |
template<typename T2 > | |
TypeTensor (const TypeVector< T2 > &vx, const TypeVector< T2 > &vy, const TypeVector< T2 > &vz) | |
Protected Attributes | |
T | _coords [LIBMESH_DIM *LIBMESH_DIM] |
The coordinates of the TypeTensor . More... | |
Friends | |
template<typename T2 > | |
class | TypeTensor |
std::ostream & | operator<< (std::ostream &os, const TypeTensor< T > &t) |
Formatted print as above but supports the syntax: More... | |
This class defines a tensor in LIBMESH_DIM
dimensional space of type T.
T may either be Real or Complex.
Definition at line 47 of file tensor_tools.h.
typedef std::tuple<unsigned int, unsigned int> libMesh::TypeTensor< T >::index_type |
Helper typedef for generic index programming.
Definition at line 144 of file type_tensor.h.
typedef T libMesh::TypeTensor< T >::value_type |
Helper typedef for C++98 generic programming.
Definition at line 139 of file type_tensor.h.
libMesh::TypeTensor< T >::TypeTensor | ( | ) |
Empty constructor.
Gives the tensor 0 in LIBMESH_DIM
dimensions.
Definition at line 538 of file type_tensor.h.
|
explicitprotected |
Constructor-from-T.
By default sets higher dimensional entries to 0. This is a poor constructor for 2D tensors - if the default arguments are to be overridden it requires that the "xz = 0." etc. arguments also be given explicitly.
Definition at line 561 of file type_tensor.h.
|
explicitprotected |
Constructor-from-Scalar.
Definition at line 605 of file type_tensor.h.
|
protected |
Constructor.
Assigns each vector to a different row of the tensor. We're in LIBMESH_DIM space dimensions and so LIBMESH_DIM many vectors are needed.
Definition at line 652 of file type_tensor.h.
|
protected |
Definition at line 660 of file type_tensor.h.
|
protected |
Definition at line 672 of file type_tensor.h.
libMesh::TypeTensor< T >::TypeTensor | ( | const TypeTensor< T2 > & | p | ) |
Copy-constructor.
Definition at line 642 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
libMesh::TypeTensor< T >::~TypeTensor | ( | ) |
void libMesh::TypeTensor< T >::add | ( | const TypeTensor< T2 > & | p | ) |
Add to this tensor without creating a temporary.
Definition at line 831 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
void libMesh::TypeTensor< T >::add_scaled | ( | const TypeTensor< T2 > & | p, |
const T & | factor | ||
) |
Add a scaled tensor to this tensor without creating a temporary.
Definition at line 842 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
void libMesh::TypeTensor< T >::assign | ( | const TypeTensor< T2 > & | p | ) |
Assign to this tensor without creating a temporary.
Definition at line 702 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
CompareTypes< T, T2 >::supertype libMesh::TypeTensor< T >::contract | ( | const TypeTensor< T2 > & | t | ) | const |
Multiply 2 tensors together to return a scalar, i.e.
Multiply 2 tensors together, i.e.
The tensors may contain different numeric types. Also known as the "double inner product" or "double dot product" of tensors.
sum Aij*Bij. The tensors may be of different types.
Definition at line 1259 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
Referenced by libMesh::TensorTools::inner_product().
T libMesh::TypeTensor< T >::det | ( | ) | const |
Because these are 3x3 tensors at most, we don't do an LU decomposition like DenseMatrix does.
Definition at line 1292 of file type_tensor.h.
TypeTensor< T > libMesh::TypeTensor< T >::inverse | ( | ) | const |
Definition at line 1071 of file type_tensor.h.
TypeVector< typename CompareTypes< T, T2 >::supertype > libMesh::TypeTensor< T >::left_multiply | ( | const TypeVector< T2 > & | p | ) | const |
Left-multiply this tensor by a vector, i.e.
matrix-vector product. The tensor and vector may contain different numeric types.
Definition at line 1202 of file type_tensor.h.
Referenced by libMesh::operator*().
auto libMesh::TypeTensor< T >::norm | ( | ) | const -> decltype(std::norm(T())) |
Definition at line 1283 of file type_tensor.h.
References libMesh::TensorTools::norm_sq(), and std::sqrt().
auto libMesh::TypeTensor< T >::norm_sq | ( | ) | const -> decltype(std::norm(T())) |
Definition at line 1354 of file type_tensor.h.
References libMesh::TensorTools::norm_sq(), and libMesh::Real.
const T & libMesh::TypeTensor< T >::operator() | ( | const unsigned int | i, |
const unsigned int | j | ||
) | const |
Definition at line 712 of file type_tensor.h.
T & libMesh::TypeTensor< T >::operator() | ( | const unsigned int | i, |
const unsigned int | j | ||
) |
Definition at line 731 of file type_tensor.h.
auto libMesh::TypeTensor< T >::operator* | ( | const Scalar & | scalar | ) | const -> typename boostcopy::enable_if_c< ScalarTraits<Scalar>::value, TypeTensor<decltype(T() * scalar)>>::type |
Multiply this tensor by a scalar value.
Definition at line 956 of file type_tensor.h.
TypeTensor< typename CompareTypes< T, T2 >::supertype > libMesh::TypeTensor< T >::operator* | ( | const TypeTensor< T2 > & | p | ) | const |
Multiply 2 tensors together, i.e.
matrix-matrix product. The tensors may contain different numeric types.
Definition at line 1224 of file type_tensor.h.
TypeVector< typename CompareTypes< T, T2 >::supertype > libMesh::TypeTensor< T >::operator* | ( | const TypeVector< T2 > & | p | ) | const |
Right-multiply this tensor by a vector, i.e.
matrix-vector product. The tensor and vector may contain different numeric types.
Definition at line 1188 of file type_tensor.h.
const TypeTensor<T>& libMesh::TypeTensor< T >::operator*= | ( | const Scalar & | factor | ) |
Multiply this tensor by a scalar value in place.
Definition at line 282 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
const TypeTensor< T > & libMesh::TypeTensor< T >::operator*= | ( | const TypeTensor< T2 > & | p | ) |
Multiply this tensor by a tensor value in place.
Definition at line 1238 of file type_tensor.h.
TypeTensor< typename CompareTypes< T, T2 >::supertype > libMesh::TypeTensor< T >::operator+ | ( | const TypeTensor< T2 > & | p | ) | const |
Add another tensor to this tensor.
Definition at line 785 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
const TypeTensor< T > & libMesh::TypeTensor< T >::operator+= | ( | const TypeTensor< T2 > & | p | ) |
Add to this tensor.
Definition at line 819 of file type_tensor.h.
TypeTensor< typename CompareTypes< T, T2 >::supertype > libMesh::TypeTensor< T >::operator- | ( | const TypeTensor< T2 > & | p | ) | const |
Subtract a tensor from this tensor.
Definition at line 855 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
TypeTensor< T > libMesh::TypeTensor< T >::operator- | ( | ) | const |
Definition at line 922 of file type_tensor.h.
const TypeTensor< T > & libMesh::TypeTensor< T >::operator-= | ( | const TypeTensor< T2 > & | p | ) |
Subtract from this tensor.
Definition at line 889 of file type_tensor.h.
boostcopy::enable_if_c< ScalarTraits< Scalar >::value, TypeTensor< typename CompareTypes< T, Scalar >::supertype > >::type libMesh::TypeTensor< T >::operator/ | ( | const Scalar & | factor | ) | const |
Divide each entry of this tensor by a scalar value.
Definition at line 1006 of file type_tensor.h.
const TypeTensor< T > & libMesh::TypeTensor< T >::operator/= | ( | const T & | factor | ) |
Divide each entry of this tensor by a scalar value.
Definition at line 1171 of file type_tensor.h.
bool libMesh::TypeTensor< T >::operator< | ( | const TypeTensor< T > & | rhs | ) | const |
true
if this tensor is "less" than another. Useful for sorting. boostcopy::enable_if_c< ScalarTraits<Scalar>::value, TypeTensor &>::type libMesh::TypeTensor< T >::operator= | ( | const Scalar & | libmesh_dbg_varp | ) |
Assignment-from-scalar operator.
Used only to zero out vectors.
Definition at line 172 of file type_tensor.h.
References libMesh::TypeTensor< T >::zero().
bool libMesh::TypeTensor< T >::operator== | ( | const TypeTensor< T > & | rhs | ) | const |
true
if two tensors are equal, false
otherwise. Definition at line 1366 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords, std::abs(), and libMesh::TOLERANCE.
bool libMesh::TypeTensor< T >::operator> | ( | const TypeTensor< T > & | rhs | ) | const |
true
if this tensor is "greater" than another. void libMesh::TypeTensor< T >::print | ( | std::ostream & | os = libMesh::out | ) | const |
Formatted print to a stream which defaults to libMesh::out
.
TypeVector< T > libMesh::TypeTensor< T >::row | ( | const unsigned int | r | ) | const |
Definition at line 771 of file type_tensor.h.
References libMesh::TypeVector< T >::_coords.
auto libMesh::TypeTensor< T >::size | ( | ) | const -> decltype(std::norm(T())) |
Definition at line 1272 of file type_tensor.h.
References std::norm().
auto libMesh::TypeTensor< T >::size_sq | ( | ) | const -> decltype(std::norm(T())) |
Definition at line 1343 of file type_tensor.h.
References libMesh::TensorTools::norm_sq().
ConstTypeTensorColumn< T > libMesh::TypeTensor< T >::slice | ( | const unsigned int | i | ) | const |
Definition at line 751 of file type_tensor.h.
TypeTensorColumn< T > libMesh::TypeTensor< T >::slice | ( | const unsigned int | i | ) |
Definition at line 761 of file type_tensor.h.
void libMesh::TypeTensor< T >::solve | ( | const TypeVector< T > & | b, |
TypeVector< T > & | x | ||
) | const |
Solve the 2x2 or 3x3 system of equations A*x = b for x by directly inverting A and multiplying it by b.
x
vector. Definition at line 1120 of file type_tensor.h.
void libMesh::TypeTensor< T >::subtract | ( | const TypeTensor< T2 > & | p | ) |
Subtract from this tensor without creating a temporary.
Definition at line 901 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
void libMesh::TypeTensor< T >::subtract_scaled | ( | const TypeTensor< T2 > & | p, |
const T & | factor | ||
) |
Subtract a scaled value from this tensor without creating a temporary.
Definition at line 912 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
T libMesh::TypeTensor< T >::tr | ( | ) | const |
Definition at line 1315 of file type_tensor.h.
TypeTensor< T > libMesh::TypeTensor< T >::transpose | ( | ) | const |
Definition at line 1041 of file type_tensor.h.
void libMesh::TypeTensor< T >::write_unformatted | ( | std::ostream & | out, |
const bool | newline = true |
||
) | const |
Unformatted print to the stream out
.
Simply prints the elements of the tensor separated by spaces and newlines.
void libMesh::TypeTensor< T >::zero | ( | ) |
Set all entries of the tensor to 0.
Definition at line 1332 of file type_tensor.h.
Referenced by libMesh::TensorValue< T >::operator=(), and libMesh::TypeTensor< T >::operator=().
|
friend |
Formatted print as above but supports the syntax:
Definition at line 455 of file type_tensor.h.
Definition at line 74 of file type_tensor.h.
|
protected |
The coordinates of the TypeTensor
.
Definition at line 472 of file type_tensor.h.
Referenced by libMesh::TypeTensor< T >::add(), libMesh::TypeTensor< T >::add_scaled(), libMesh::TypeTensor< T >::assign(), libMesh::TypeTensor< T >::contract(), libMesh::TypeTensor< T >::operator*=(), libMesh::TypeTensor< T >::operator+(), libMesh::TypeTensor< T >::operator-(), libMesh::TypeTensor< T >::operator==(), libMesh::TypeTensor< T >::subtract(), libMesh::TypeTensor< T >::subtract_scaled(), and libMesh::TypeTensor< T >::TypeTensor().