Serac  0.1
Serac is an implicit thermal strucural 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  serac::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  serac::isotropic_tensor< T, m, m >
 a rank-2 isotropic tensor is essentially just the Identity matrix, with a constant of proportionality More...
 
struct  serac::isotropic_tensor< T, 3, 3, 3 >
 the only rank-3 isotropic tensor we suport is the alternating tensor (levi-civita symbol) More...
 
struct  serac::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

 serac
 Accelerator functionality.
 

Functions

template<int m>
constexpr SERAC_HOST_DEVICE isotropic_tensor< double, m, m > serac::Identity ()
 return the identity matrix of the specified size More...
 
template<typename S , typename T , int m>
constexpr SERAC_HOST_DEVICE auto serac::operator* (S scale, isotropic_tensor< T, m, m > I)
 scalar multiplication More...
 
template<typename S , typename T , int m>
constexpr SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::sym (const isotropic_tensor< T, m, m > &I)
 return the symmetric part of an isotropic tensor More...
 
template<typename T , int m>
constexpr SERAC_HOST_DEVICE auto serac::antisym (const isotropic_tensor< T, m, m > &)
 return the antisymmetric part of an isotropic tensor More...
 
template<typename T , int m>
constexpr SERAC_HOST_DEVICE auto serac::tr (const isotropic_tensor< T, m, m > &I)
 calculate the trace of an isotropic tensor More...
 
template<typename T , int m>
constexpr SERAC_HOST_DEVICE auto serac::transpose (const isotropic_tensor< T, m, m > &I)
 return the transpose of an isotropic tensor More...
 
template<typename T , int m>
constexpr SERAC_HOST_DEVICE auto serac::inv (const isotropic_tensor< T, m, m > &I)
 return the inverse of an isotropic tensor More...
 
template<typename T , int m>
constexpr SERAC_HOST_DEVICE auto serac::det (const isotropic_tensor< T, m, m > &I)
 compute the determinant of an isotropic tensor More...
 
template<typename T , int m>
constexpr SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::operator* (S scale, isotropic_tensor< T, m, m, m, m > I)
 scalar multiplication More...
 
template<typename S , typename T , int m>
constexpr SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::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 SERAC_HOST_DEVICE auto serac::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.