Smith  0.1
Smith is an implicit thermal structural mechanics simulation code.
Classes | Namespaces | Functions
isotropic_tensor.hpp File Reference

Implementation of isotropic tensor classes. More...

#include <iostream>
#include <type_traits>
Include dependency graph for isotropic_tensor.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  smith::isotropic_tensor< T, n >
 there is no such thing as a rank-1 isotropic tensor, but we include this specialization to help explain that to users, rather than just producing an "incomplete type" compilation error More...
 
struct  smith::isotropic_tensor< T, m, m >
 a rank-2 isotropic tensor is essentially just the Identity matrix, with a constant of proportionality More...
 
struct  smith::isotropic_tensor< T, 3, 3, 3 >
 the only rank-3 isotropic tensor we suport is the alternating tensor (levi-civita symbol) More...
 
struct  smith::isotropic_tensor< T, m, m, m, m >
 there are 3 independent rank-4 isotropic tensors (dilatational, symmetric, antisymmetric), so this object represents a linear combination of them More...
 

Namespaces

 smith
 Accelerator functionality.
 

Functions

template<int m>
constexpr SMITH_HOST_DEVICE isotropic_tensor< double, m, m > smith::Identity ()
 return the identity matrix of the specified size More...
 
template<typename S , typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::operator* (S scale, isotropic_tensor< T, m, m > I)
 scalar multiplication More...
 
template<typename S , typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::operator* (isotropic_tensor< T, m, m > I, S scale)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename S , typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::operator+ (isotropic_tensor< S, m, m > I1, isotropic_tensor< T, m, m > I2)
 addition of isotropic tensors More...
 
template<typename S , typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::operator- (isotropic_tensor< S, m, m > I1, isotropic_tensor< T, m, m > I2)
 difference of isotropic tensors More...
 
template<typename S , typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::operator+ (const isotropic_tensor< S, m, m > &I, const tensor< T, m, m > &A)
 sum of isotropic and (nonisotropic) tensor More...
 
template<typename S , typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::operator+ (const tensor< S, m, m > &A, const isotropic_tensor< T, m, m > &I)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename S , typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::operator- (const isotropic_tensor< S, m, m > &I, const tensor< T, m, m > &A)
 difference of isotropic and (nonisotropic) tensor More...
 
template<typename S , typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::operator- (const tensor< S, m, m > &A, const isotropic_tensor< T, m, m > &I)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename S , typename T , int m, int... n>
constexpr SMITH_HOST_DEVICE auto smith::dot (const isotropic_tensor< S, m, m > &I, const tensor< T, m, n... > &A)
 dot product between an isotropic and (nonisotropic) tensor More...
 
template<typename S , typename T , int m, int... n>
constexpr SMITH_HOST_DEVICE auto smith::dot (const tensor< S, n... > &A, isotropic_tensor< T, m, m > I)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename S , typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::double_dot (const isotropic_tensor< S, m, m > &I, const tensor< T, m, m > &A)
 double-dot product between an isotropic and (nonisotropic) tensor More...
 
template<typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::sym (const isotropic_tensor< T, m, m > &I)
 return the symmetric part of an isotropic tensor More...
 
template<typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::antisym (const isotropic_tensor< T, m, m > &)
 return the antisymmetric part of an isotropic tensor More...
 
template<typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::tr (const isotropic_tensor< T, m, m > &I)
 calculate the trace of an isotropic tensor More...
 
template<typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::transpose (const isotropic_tensor< T, m, m > &I)
 return the transpose of an isotropic tensor More...
 
template<typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::inv (const isotropic_tensor< T, m, m > &I)
 return the inverse of an isotropic tensor More...
 
template<typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::det (const isotropic_tensor< T, m, m > &I)
 compute the determinant of an isotropic tensor More...
 
template<typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::norm (const isotropic_tensor< T, m, m > &I)
 compute the Frobenius norm (sqrt(tr(dot(transpose(I), I)))) of an isotropic tensor More...
 
template<typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::squared_norm (const isotropic_tensor< T, m, m > &I)
 compute the squared Frobenius norm (tr(dot(transpose(I), I))) of an isotropic tensor More...
 
template<int m>
constexpr SMITH_HOST_DEVICE auto smith::SymmetricIdentity ()
 a helper function for creating the rank-4 isotropic tensor defined by: d(sym(A)_{ij}) / d(A_{kl}) More...
 
template<int m>
constexpr SMITH_HOST_DEVICE auto smith::AntisymmetricIdentity ()
 a helper function for creating the rank-4 isotropic tensor defined by: d(antisym(A)_{ij}) / d(A_{kl}) More...
 
template<typename S , typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::operator* (S scale, isotropic_tensor< T, m, m, m, m > I)
 scalar multiplication More...
 
template<typename S , typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::operator* (isotropic_tensor< S, m, m, m, m > I, T scale)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename S , typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::operator+ (isotropic_tensor< S, m, m, m, m > I1, isotropic_tensor< T, m, m, m, m > I2)
 addition of isotropic tensors More...
 
template<typename S , typename T , int m>
constexpr SMITH_HOST_DEVICE auto smith::operator- (isotropic_tensor< S, m, m, m, m > I1, isotropic_tensor< T, m, m, m, m > I2)
 difference of isotropic tensors More...
 
template<typename S , typename T , int m, int... n>
constexpr SMITH_HOST_DEVICE auto smith::double_dot (const isotropic_tensor< S, m, m, m, m > &I, const tensor< T, m, m, n... > &A)
 double-dot product between an isotropic and (nonisotropic) tensor More...
 

Detailed Description

Implementation of isotropic tensor classes.

Note
Do not include this file directly, it is included by tensor.hpp

Definition in file isotropic_tensor.hpp.