20 #ifndef __mast_linear_thermoelasticity_load_h__ 21 #define __mast_linear_thermoelasticity_load_h__ 28 namespace Elasticity {
29 namespace LinearContinuum {
32 template <
typename FEVarType,
33 typename TemperatureFieldType,
34 typename ExpansionCoeffType,
35 typename SectionPropertyType,
44 using vector_t =
typename Eigen::Matrix<scalar_t, Eigen::Dynamic, 1>;
45 using matrix_t =
typename Eigen::Matrix<scalar_t, Eigen::Dynamic, Eigen::Dynamic>;
93 const typename FEVarType::fe_shape_deriv_t
96 typename Eigen::Matrix<scalar_t, n_strain, 1>
97 dt_vec = Eigen::Matrix<scalar_t, n_strain, 1>::Zero(),
101 vec = vector_t::Zero(Dim*fe.n_basis());
103 for (
uint_t i=0; i<Dim; i++) dt_vec(i) = 1.;
105 typename SectionPropertyType::value_t
113 for (
uint_t i=0; i<fe.n_q_points(); i++) {
123 stress = mat * dt_vec;
125 res -= (fe.detJxW(i) * dt * alpha) * vec;
132 template <
typename ScalarFieldType>
134 const ScalarFieldType& f,
142 const typename FEVarType::fe_shape_deriv_t
145 typename Eigen::Matrix<scalar_t, n_strain, 1>
146 dt_vec = Eigen::Matrix<scalar_t, n_strain, 1>::Zero(),
150 vec = vector_t::Zero(Dim*fe.n_basis());
152 for (
uint_t i=0; i<Dim; i++) dt_vec(i) = 1.;
154 typename SectionPropertyType::value_t
162 for (
uint_t i=0; i<fe.n_q_points(); i++) {
174 dalphadp =
_alpha->derivative(c, f);
179 stress = mat*dt_vec * (dalphadp*dt + alpha*dtdp) + dmat*dt_vec * alpha*dt;
181 res -= fe.detJxW(i) * vec;
203 #endif // __mast_linear_thermoelasticity_load_h__ void derivative(ContextType &c, const ScalarFieldType &f, vector_t &res, matrix_t *jac=nullptr) const
const ExpansionCoeffType * _alpha
const SectionPropertyType * _property
typename FEVarType::scalar_t scalar_t
void vector_mult_transpose(T1 &res, const T2 &v) const
res = v^T * [this]
void compute(ContextType &c, vector_t &res, matrix_t *jac=nullptr) const
void set_coeff_thermal_expansion(const ExpansionCoeffType &a)
void set_section_property(const SectionPropertyType &p)
void set_temperature(const TemperatureFieldType &dt)
virtual ~ThermoelasticLoad()
typename FEVarType::fe_shape_deriv_t fe_shape_deriv_t
typename FEVarType::fe_shape_deriv_t::scalar_t basis_scalar_t
const TemperatureFieldType * _temperature
std::enable_if< Dim==2, void >::type strain(const FEVarType &fe_var, const uint_t qp, typename Eigen::Matrix< VarScalarType, 3, 1 > &epsilon, MAST::Numerics::FEMOperatorMatrix< NodalScalarType > &Bmat)
void set_fe_var_data(const FEVarType &fe_data)
#define Assert0(cond, msg)
typename Eigen::Matrix< scalar_t, Eigen::Dynamic, Eigen::Dynamic > matrix_t
const FEVarType * _fe_var_data
static const uint_t n_strain
void reinit(uint_t n_interpolated_vars, uint_t n_discrete_vars, uint_t n_discrete_dofs_per_var)
this initializes the operator for number of rows and variables, assuming that all variables has the s...
typename Eigen::Matrix< scalar_t, Eigen::Dynamic, 1 > vector_t