17 template <
typename T,
int dim>
26 template <
typename EType>
29 return E / (3.0 * (1.0 - 2.0 * nu));
35 template <
typename EType>
38 return 0.5 * E / (1.0 + nu);
44 template <
typename EType,
typename AlphaType,
typename TGradU,
typename TTheta,
int dim>
50 static constexpr
auto I = Identity<dim>();
53 const auto trEg =
tr(Eg);
54 const auto S = 2.0 * G *
dev(Eg) + K * (trEg -
static_cast<double>(dim) * alpha * (theta - theta_ref)) * I;
61 template <
typename TGradTheta,
int dim>
64 return -kappa * grad_theta;
100 template <
typename T1,
typename T2,
typename T3,
int dim>
104 const auto trEg =
tr(Eg);
119 template <
typename T1,
typename T2,
int dim>
122 const double K =
E / (3.0 * (1.0 - 2.0 *
nu));
123 const double G = 0.5 *
E / (1.0 +
nu);
125 auto trE =
tr(strain);
131 return psi_1 + psi_2 + psi_3;
170 template <
typename T1,
typename T2,
typename T3,
typename T4,
int dim>
172 T4 thermal_expansion_scaling)
const
174 auto [scale, unused] = thermal_expansion_scaling;
176 const auto trEg =
tr(Eg);
177 auto alpha =
alpha0 * scale;
193 template <
typename T1,
typename T2,
typename T3,
int dim>
196 auto [scale, unused] = thermal_expansion_scaling;
200 auto trE =
tr(strain);
201 const auto alpha =
alpha0 * scale;
206 auto psi_3 = -3.0 * K * alpha * (theta -
theta_ref) * trE;
207 return psi_1 + psi_2 + psi_3;
Thermomechanics helper data types.
auto fourierHeatFlux(double kappa, const tensor< TGradTheta, dim > &grad_theta)
Compute referential Fourier heat flux.
auto greenSaintVenantPiola(EType E, double nu, AlphaType alpha, double theta_ref, const tensor< TGradU, dim, dim > &grad_u, TTheta theta)
Compute first Piola stress for Green-Saint Venant thermoelasticity.
auto greenStrain(const tensor< T, dim, dim > &grad_u)
Compute Green's strain from the displacement gradient.
auto bulkModulus(EType E, double nu)
Compute isotropic bulk modulus from Young's modulus and Poisson ratio.
auto shearModulus(EType E, double nu)
Compute isotropic shear modulus from Young's modulus and Poisson ratio.
SMITH_HOST_DEVICE auto log(dual< gradient_type > a)
implementation of the natural logarithm function for dual numbers
mfem::future::tuple< T... > tuple
Expose MFEM tuple in the Smith namespace.
constexpr SMITH_HOST_DEVICE auto squared_norm(const isotropic_tensor< T, m, m > &I)
compute the squared Frobenius norm (tr(dot(transpose(I), I))) of an isotropic tensor
constexpr SMITH_HOST_DEVICE auto transpose(const isotropic_tensor< T, m, m > &I)
return the transpose of an isotropic tensor
constexpr SMITH_HOST_DEVICE auto dev(const tensor< T, n, n > &A)
Calculates the deviator of a matrix (rank-2 tensor)
constexpr SMITH_HOST_DEVICE auto get_value(const T &arg)
return the "value" part from a given type. For non-dual types, this is just the identity function
constexpr SMITH_HOST_DEVICE auto tr(const isotropic_tensor< T, m, m > &I)
calculate the trace of an isotropic tensor
constexpr SMITH_HOST_DEVICE auto dot(const isotropic_tensor< S, m, m > &I, const tensor< T, m, n... > &A)
dot product between an isotropic and (nonisotropic) tensor
Arbitrary-rank tensor class.
internal variables for the material model
double strain_trace
trace of Green-Saint Venant strain tensor
Green-Saint Venant isotropic thermoelastic model.
double alpha
thermal expansion coefficient
double kappa
thermal conductivity
double theta_ref
datum temperature for thermal expansion
double nu
Poisson's ratio.
auto calculateFreeEnergy(const tensor< T1, dim, dim > &grad_u, T2 theta) const
evaluate free energy density
auto operator()(State &state, const tensor< T1, dim, dim > &grad_u, T2 theta, const tensor< T3, dim > &grad_theta) const
Evaluate constitutive variables for thermomechanics.
double C_v
volumetric heat capacity
internal variables for the material model
double strain_trace
trace of Green-Saint Venant strain tensor
Green-Saint Venant isotropic thermoelastic model.
double nu
Poisson's ratio.
double C_v
volumetric heat capacity
auto operator()(State &state, const tensor< T1, dim, dim > &grad_u, T2 theta, const tensor< T3, dim > &grad_theta, T4 thermal_expansion_scaling) const
Evaluate constitutive variables for thermomechanics.
double alpha0
reference value of thermal expansion coefficient
double kappa
thermal conductivity
double theta_ref
datum temperature for thermal expansion
auto calculateFreeEnergy(const tensor< T1, dim, dim > &grad_u, T2 theta, T3 thermal_expansion_scaling) const
evaluate free energy density
Implementation of the tensor class used by Functional.
Smith tuple compatibility layer over mfem::future::tuple.