Serac
0.1
Serac is an implicit thermal strucural mechanics simulation code.
|
Implementation of isotropic tensor classes. More...
#include <iostream>
#include <type_traits>
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... | |
Implementation of isotropic tensor classes.
Definition in file isotropic_tensor.hpp.