libMesh
|
This class defines a tensor in LIBMESH_DIM dimensional Real or Complex space. More...
#include <exact_solution.h>
Classes | |
struct | rebind |
Public Types | |
typedef T | value_type |
typedef std::tuple< unsigned int, unsigned int > | index_type |
Helper typedef for generic index programming. More... | |
Public Member Functions | |
TensorValue () | |
Empty constructor. More... | |
TensorValue (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 > | |
TensorValue (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-scalars. More... | |
template<typename T2 > | |
TensorValue (const TypeVector< T2 > &vx) | |
Constructor. More... | |
template<typename T2 > | |
TensorValue (const TypeVector< T2 > &vx, const TypeVector< T2 > &vy) | |
Constructor. More... | |
template<typename T2 > | |
TensorValue (const TypeVector< T2 > &vx, const TypeVector< T2 > &vy, const TypeVector< T2 > &vz) | |
Constructor. More... | |
template<typename T2 > | |
TensorValue (const TensorValue< T2 > &p) | |
Copy-constructor. More... | |
template<typename T2 > | |
TensorValue (const TypeTensor< T2 > &p) | |
Copy-constructor. More... | |
TensorValue (const TypeTensor< Real > &p_re, const TypeTensor< Real > &p_im) | |
Constructor that takes two TypeTensor<Real> representing the real and imaginary part as arguments. More... | |
template<typename Scalar > | |
boostcopy::enable_if_c< ScalarTraits< Scalar >::value, TensorValue & >::type | operator= (const Scalar &libmesh_dbg_var(p)) |
Assignment-from-scalar operator. More... | |
template<typename T2 > | |
void | assign (const TypeTensor< T2 > &) |
Assign to this tensor without creating a temporary. 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 |
TypeVector< T > | column (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... | |
TypeTensor< T > | operator- () const |
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... | |
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 T2 > | |
TypeTensor< typename CompareTypes< T, T2 >::supertype > | operator* (const TypeTensor< T2 > &) const |
Multiply 2 tensors together, 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 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 T2 > | |
const TypeTensor< T > & | operator*= (const TypeTensor< T2 > &) |
Multiply this tensor by a tensor 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 > | |
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 > | 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 | norm () const -> decltype(std::norm(T())) |
auto | norm_sq () const -> decltype(std::norm(T())) |
bool | is_zero () const |
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 |
template<> | |
bool | operator< (const TypeTensor< Real > &rhs) const |
template<> | |
bool | operator< (const TypeTensor< Complex > &rhs) const |
bool | operator> (const TypeTensor< T > &rhs) const |
template<> | |
bool | operator> (const TypeTensor< Real > &rhs) const |
template<> | |
bool | operator> (const TypeTensor< Complex > &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_stream, const bool newline=true) const |
Unformatted print to the stream out . More... | |
Static Public Member Functions | |
static TensorValue< Real > | intrinsic_rotation_matrix (Real phi, Real theta, Real psi) |
Generate the intrinsic rotation matrix associated with the provided Euler angles. More... | |
static TensorValue< Real > | inverse_intrinsic_rotation_matrix (Real phi, Real theta, Real psi) |
Invert the rotation that would occur if the same angles were provided to intrinsic_rotation_matrix , e.g. More... | |
static TensorValue< Real > | extrinsic_rotation_matrix (Real angle1_deg, Real angle2_deg, Real angle3_deg) |
Generate the extrinsic rotation matrix associated with the provided Euler angles. More... | |
static TensorValue< Real > | inverse_extrinsic_rotation_matrix (Real angle1_deg, Real angle2_deg, Real angle3_deg) |
Invert the rotation that would occur if the same angles were provided to extrinsic_rotation_matrix , e.g. More... | |
Protected Attributes | |
T | _coords [LIBMESH_DIM *LIBMESH_DIM] |
The coordinates of the TypeTensor . More... | |
This class defines a tensor in LIBMESH_DIM dimensional Real or Complex space.
The typedef RealTensorValue always defines a real-valued tensor, and NumberTensorValue defines a real or complex-valued tensor depending on how the library was configured.
Definition at line 46 of file exact_solution.h.
|
inherited |
Helper typedef for generic index programming.
Definition at line 125 of file type_tensor.h.
typedef T libMesh::TensorValue< T >::value_type |
Definition at line 47 of file tensor_value.h.
|
inline |
Empty constructor.
Gives the tensor 0 in LIBMESH_DIM
dimensional T space.
Definition at line 215 of file tensor_value.h.
|
inlineexplicit |
Constructor-from-T.
By default sets higher dimensional entries to 0.
Definition at line 224 of file tensor_value.h.
|
inlineexplicit |
Constructor-from-scalars.
By default sets higher dimensional entries to 0.
Definition at line 241 of file tensor_value.h.
|
inline |
|
inline |
|
inline |
|
inline |
Copy-constructor.
Definition at line 261 of file tensor_value.h.
|
inline |
Copy-constructor.
Definition at line 304 of file tensor_value.h.
|
inline |
Constructor that takes two TypeTensor<Real>
representing the real and imaginary part as arguments.
Definition at line 313 of file tensor_value.h.
|
inlineinherited |
Add to this tensor without creating a temporary.
Definition at line 840 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
|
inlineinherited |
Add a scaled tensor to this tensor without creating a temporary.
Definition at line 851 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
Referenced by libMesh::HPCoarsenTest::add_projection(), LinearElasticityWithContact::compute_stresses(), LargeDeformationElasticity::compute_stresses(), libMesh::MeshFunction::hessian(), libMesh::WeightedPatchRecoveryErrorEstimator::EstimateError::operator()(), libMesh::PatchRecoveryErrorEstimator::EstimateError::operator()(), libMesh::System::point_hessian(), and libMesh::HPCoarsenTest::select_refinement().
|
inlineinherited |
Assign to this tensor without creating a temporary.
Definition at line 696 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
|
inlineinherited |
Definition at line 779 of file type_tensor.h.
References libMesh::TypeVector< T >::_coords.
Referenced by TypeTensorTest::testRowCol().
|
inlineinherited |
Multiply 2 tensors together to return a scalar, i.e.
Multiply 2 tensors together, i.e.
\( \sum_{ij} A_{ij} B_{ij} \) 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 1268 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
Referenced by libMesh::HPCoarsenTest::add_projection(), libMesh::TensorTools::inner_product(), and libMesh::HPCoarsenTest::select_refinement().
|
inlineinherited |
Because these are 3x3 tensors at most, we don't do an LU decomposition like DenseMatrix does.
Definition at line 1298 of file type_tensor.h.
Referenced by LargeDeformationElasticity::compute_stresses(), libMesh::Hex::quality(), and libMesh::Sphere::Sphere().
|
static |
Generate the extrinsic rotation matrix associated with the provided Euler angles.
An extrinsic rotation rotates the bodies in the domain and leaves the coordinate axes fixed. We follow the convention described at https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix and we use the matrix described by the 'Proper Euler Angles' column and Z1 X2 Z3 row, which indicates that the rotations are performed sequentially about the z, x, and z axes, in that order. A positive angle yields a counter-clockwise rotation about the axis in question. Note that angles should be provided in degrees
angle1_deg | rotation angle around z-axis |
angle2_deg | rotation angle around x-axis (post angle1) |
angle3_deg | rotation angle around z-axis (post angle1 and angle2) |
Definition at line 372 of file tensor_value.h.
References libMesh::libmesh_ignore(), and libMesh::pi.
Referenced by libMesh::TensorValue< T >::inverse_extrinsic_rotation_matrix(), and TypeTensorTest::testRotation().
|
static |
Generate the intrinsic rotation matrix associated with the provided Euler angles.
An intrinsic rotation leaves bodies in the domain fixed while rotating the coordinate axes. We follow the convention described at http://mathworld.wolfram.com/EulerAngles.html (equations 6-14 give the entries of the composite transformation matrix). The rotations are performed sequentially about the z, x', and z'' axes, in that order. A positive angle for a given step in the rotation sequences gives the appearance of rotating an entity in the domain counter-clockwise around the rotation axis, although in fact it is the coordinate axes themselves that are rotating. In order to give the appearance of a body rotating counter-clockwise, we actually rotate the coordinate axes by the negative of the angle passed into the method. All angles should be provided in degrees
phi | The negative of the angle we will rotate the coordinate axes around the original z-axis |
theta | The negative of the angle we will rotate the coordinate axes around the "current" x-axis (post phi), e.g. x' |
psi | The negative of the angle we will rotate the coordinate axes around the "current" z-axis (post phi and theta), e.g. z'' |
Definition at line 330 of file tensor_value.h.
References libMesh::libmesh_ignore(), libMesh::pi, and libMesh::Real.
Referenced by libMesh::TensorValue< T >::inverse_intrinsic_rotation_matrix(), and libMesh::MeshTools::Modification::rotate().
|
inlineinherited |
Definition at line 1080 of file type_tensor.h.
Referenced by NonlinearNeoHookeCurrentConfig::calculate_stress(), and TypeTensorTest::testInverse().
|
static |
Invert the rotation that would occur if the same angles were provided to extrinsic_rotation_matrix
, e.g.
return to the original starting point
Definition at line 404 of file tensor_value.h.
References libMesh::TensorValue< T >::extrinsic_rotation_matrix().
Referenced by TypeTensorTest::testRotation().
|
static |
Invert the rotation that would occur if the same angles were provided to intrinsic_rotation_matrix
, e.g.
return to the original starting point. All angles should be provided in degrees
Definition at line 364 of file tensor_value.h.
References libMesh::TensorValue< T >::intrinsic_rotation_matrix().
|
inlineinherited |
Definition at line 1288 of file type_tensor.h.
Referenced by TypeTensorTest::testIsZero().
|
inlineinherited |
Left-multiply this tensor by a vector, i.e.
matrix-vector product. The tensor and vector may contain different numeric types.
Definition at line 1211 of file type_tensor.h.
Referenced by libMesh::operator*().
|
inlineinherited |
Definition at line 1280 of file type_tensor.h.
References libMesh::TensorTools::norm_sq().
|
inlineinherited |
Definition at line 1348 of file type_tensor.h.
References libMesh::TensorTools::norm_sq(), and libMesh::Real.
Referenced by libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::ExactErrorEstimator::find_squared_element_error(), and libMesh::HPCoarsenTest::select_refinement().
|
inlineinherited |
Definition at line 706 of file type_tensor.h.
|
inlineinherited |
Definition at line 725 of file type_tensor.h.
|
inlineinherited |
Multiply this tensor by a scalar value.
Definition at line 965 of file type_tensor.h.
|
inlineinherited |
Multiply 2 tensors together, i.e.
matrix-matrix product. The tensors may contain different numeric types.
Definition at line 1233 of file type_tensor.h.
|
inlineinherited |
Right-multiply this tensor by a vector, i.e.
matrix-vector product. The tensor and vector may contain different numeric types.
Definition at line 1197 of file type_tensor.h.
|
inlineinherited |
Multiply this tensor by a scalar value in place.
Definition at line 268 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
|
inlineinherited |
Multiply this tensor by a tensor value in place.
Definition at line 1247 of file type_tensor.h.
|
inlineinherited |
Add another tensor to this tensor.
Definition at line 794 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
|
inlineinherited |
Add to this tensor.
Definition at line 828 of file type_tensor.h.
|
inlineinherited |
Subtract a tensor from this tensor.
Definition at line 864 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
|
inlineinherited |
Definition at line 931 of file type_tensor.h.
|
inlineinherited |
Subtract from this tensor.
Definition at line 898 of file type_tensor.h.
|
inlineinherited |
Divide each entry of this tensor by a scalar value.
Definition at line 1015 of file type_tensor.h.
|
inlineinherited |
Divide each entry of this tensor by a scalar value.
Definition at line 1180 of file type_tensor.h.
|
inherited |
Definition at line 113 of file type_tensor.C.
|
inherited |
Definition at line 146 of file type_tensor.C.
References std::imag(), and std::real().
|
inherited |
true
if this tensor is "less" than another. Useful for sorting.
|
inline |
Assignment-from-scalar operator.
Used only to zero out tensors.
Definition at line 145 of file tensor_value.h.
References libMesh::TypeTensor< T >::zero().
|
inlineinherited |
true
if two tensors are equal, false
otherwise. Definition at line 1360 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords, and libMesh::TOLERANCE.
|
inherited |
Definition at line 129 of file type_tensor.C.
|
inherited |
Definition at line 166 of file type_tensor.C.
References std::imag(), and std::real().
|
inherited |
true
if this tensor is "greater" than another.
|
inherited |
Formatted print to a stream which defaults to libMesh::out
.
Definition at line 39 of file type_tensor.C.
|
inlineinherited |
Definition at line 765 of file type_tensor.h.
References libMesh::TypeVector< T >::_coords.
Referenced by TypeTensorTest::testRowCol().
|
inlineinherited |
Definition at line 745 of file type_tensor.h.
|
inlineinherited |
Definition at line 755 of file type_tensor.h.
|
inlineinherited |
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 1129 of file type_tensor.h.
Referenced by InfFERadialTest::base_point(), and libMesh::InfFEMap::inverse_map().
|
inlineinherited |
Subtract from this tensor without creating a temporary.
Definition at line 910 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
|
inlineinherited |
Subtract a scaled value from this tensor without creating a temporary.
Definition at line 921 of file type_tensor.h.
References libMesh::TypeTensor< T >::_coords.
Referenced by libMesh::HPCoarsenTest::select_refinement().
|
inlineinherited |
Definition at line 1321 of file type_tensor.h.
|
inlineinherited |
Definition at line 1050 of file type_tensor.h.
Referenced by assemble_shell(), and LargeDeformationElasticity::compute_stresses().
|
inherited |
Unformatted print to the stream out
.
Simply prints the elements of the tensor separated by spaces and newlines.
Definition at line 83 of file type_tensor.C.
References libMesh::libmesh_assert().
|
inlineinherited |
Set all entries of the tensor to 0.
Definition at line 1338 of file type_tensor.h.
Referenced by LinearElasticityWithContact::compute_stresses(), LargeDeformationElasticity::compute_stresses(), NonlinearNeoHookeCurrentConfig::init_for_qp(), libMesh::TensorValue< T >::operator=(), and libMesh::TypeTensor< T >::operator=().
|
protectedinherited |
The coordinates of the TypeTensor
.
Definition at line 444 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().