20 #ifndef __mast_elasticity_plate_linear_acceleration_kernel_h__ 21 #define __mast_elasticity_plate_linear_acceleration_kernel_h__ 31 namespace Elasticity {
35 template <
typename NodalScalarType,
36 typename VarScalarType,
41 typename Eigen::Matrix<VarScalarType, 3, 1>& u,
46 const typename FEVarType::fe_shape_deriv_t
47 &fe = fe_var.get_fe_shape_data();
52 "Incompatible operator size");
54 Bmat.
n(), 3*fe.n_basis(),
55 "Incompatible Operator size.");
59 for (
uint_t i=0; i<3; i++) {
61 u(i) = fe_var.u(qp, i);
78 template <
typename FEVarType,
79 typename SectionPropertyType,
87 using vector_t =
typename Eigen::Matrix<scalar_t, Eigen::Dynamic, 1>;
88 using matrix_t =
typename Eigen::Matrix<scalar_t, Eigen::Dynamic, Eigen::Dynamic>;
128 const typename FEVarType::fe_shape_deriv_t
132 n_basis = fe.n_basis();
134 typename Eigen::Matrix<scalar_t, 3, 1>
138 vec = vector_t::Zero(3*n_basis);
145 mat = matrix_t::Zero(3*n_basis, 3*n_basis);
149 Bmat.
reinit(3, 3, n_basis);
151 for (
uint_t i=0; i<fe.n_q_points(); i++) {
155 _property->translation_inertia(c, w_factor);
156 _property->rotation_inertia(c, theta_factor);
162 u(1) *= theta_factor;
163 u(2) *= theta_factor;
166 res += fe.detJxW(i) * vec;
172 mat.topLeftCorner(n_basis, n_basis) *= w_factor;
173 mat.block(n_basis, n_basis, n_basis, n_basis) *= theta_factor;
174 mat.bottomRightCorner(n_basis, n_basis) *= theta_factor;
176 (*jac) += fe.detJxW(i) * mat;
189 template <
typename ScalarFieldType>
191 const ScalarFieldType& f,
198 const typename FEVarType::fe_shape_deriv_t
202 n_basis = fe.n_basis();
204 typename Eigen::Matrix<scalar_t, 3, 1>
208 vec = vector_t::Zero(3*n_basis);
215 mat = matrix_t::Zero(3*n_basis, 3*n_basis);
219 Bmat.
reinit(3, 3, n_basis);
221 for (
uint_t i=0; i<fe.n_q_points(); i++) {
225 _property->translation_inertia_derivative(c, f, dw_factor);
226 _property->rotation_inertia_derivative(c, f, dtheta_factor);
232 u(1) *= dtheta_factor;
233 u(2) *= dtheta_factor;
236 res += fe.detJxW(i) * vec;
242 mat.topLeftCorner(n_basis, n_basis) *= dw_factor;
243 mat.block(n_basis, n_basis, n_basis, n_basis) *= dtheta_factor;
244 mat.bottomRightCorner(n_basis, n_basis) *= dtheta_factor;
246 (*jac) += fe.detJxW(i) * mat;
264 #endif // __mast_elasticity_plate_linear_acceleration_kernel_h__ This class implements the discrete evaluation of the acceleration kernel defined as where...
typename FEVarType::scalar_t scalar_t
void vector_mult_transpose(T1 &res, const T2 &v) const
res = v^T * [this]
const FEVarType * _fe_var_data
typename FEVarType::fe_shape_deriv_t::scalar_t basis_scalar_t
#define Assert1(cond, v1, msg)
void right_multiply_transpose(T &r, const T &m) const
[R] = [this]^T * [M]
void set_section_property(const SectionPropertyType &p)
virtual ~LinearAcceleration()
void displacement(const FEVarType &fe_var, const uint_t qp, typename Eigen::Matrix< VarScalarType, 3, 1 > &u, MAST::Numerics::FEMOperatorMatrix< NodalScalarType > &Bmat)
const SectionPropertyType * _property
void set_fe_var_data(const FEVarType &fe)
typename Eigen::Matrix< scalar_t, Eigen::Dynamic, Eigen::Dynamic > matrix_t
#define Assert0(cond, msg)
void set_shape_function(uint_t interpolated_var, uint_t discrete_var, const VecType &shape_func)
sets the shape function values for the block corresponding to interpolated_var and discrete_var...
void derivative(ContextType &c, const ScalarFieldType &f, vector_t &res, matrix_t *jac=nullptr) const
Computes the derivative of residual of variational term with respect to parameter and returns it in...
#define Assert2(cond, v1, v2, msg)
typename Eigen::Matrix< scalar_t, Eigen::Dynamic, 1 > vector_t
void compute(ContextType &c, vector_t &res, matrix_t *jac=nullptr) const
Computes the residual of variational term and returns it in res.
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...