12 #ifndef MFEM_ELASTICITY_OP_HPP
13 #define MFEM_ELASTICITY_OP_HPP
15 #include "../kernels/elasticity_kernels.hpp"
144 std::function<void(const int, const Array<double> &,
const Array<double> &,
154 std::function<void(const int, const Array<double> &,
const Array<double> &,
164 std::function<void(const int, const Array<double> &,
const Array<double> &,
178 template <
typename material_type>
183 MFEM_ABORT(
"dim != 3 not implemented");
196 ElasticityKernels::Apply3D<2, 2, material_type>(
197 ne, B_, G_, W_, Jacobian_, detJ_, X_, Y_,
material);
202 ElasticityKernels::Apply3D<3, 3, material_type>(
203 ne, B_, G_, W_, Jacobian_, detJ_, X_, Y_,
material);
207 ElasticityKernels::Apply3D<4, 4, material_type>(
208 ne, B_, G_, W_, Jacobian_, detJ_, X_, Y_,
material);
211 MFEM_ABORT(
"Not implemented: " << std::hex <<
id << std::dec);
225 ElasticityKernels::ApplyGradient3D<2, 2, material_type>(
226 ne, B_, G_, W_, Jacobian_, detJ_, dU_, dF_, U_,
material,
230 ElasticityKernels::ApplyGradient3D<3, 3, material_type>(
231 ne, B_, G_, W_, Jacobian_, detJ_, dU_, dF_, U_,
material,
235 ElasticityKernels::ApplyGradient3D<4, 4, material_type>(
236 ne, B_, G_, W_, Jacobian_, detJ_, dU_, dF_, U_,
material,
240 MFEM_ABORT(
"Not implemented for D1D=" <<
d1d_ <<
" and Q1D=" <<
q1d_);
253 ElasticityKernels::AssembleGradientDiagonal3D<2, 2, material_type>(
254 ne, B_, G_, W_, Jacobian_, detJ_, X_, Y_,
material);
257 ElasticityKernels::AssembleGradientDiagonal3D<3, 3, material_type>(
258 ne, B_, G_, W_, Jacobian_, detJ_, X_, Y_,
material);
261 ElasticityKernels::AssembleGradientDiagonal3D<4, 4, material_type>(
262 ne, B_, G_, W_, Jacobian_, detJ_, X_, Y_,
material);
265 MFEM_ABORT(
"Not implemented: " << std::hex <<
id << std::dec);
std::function< void(const int, const Array< double > &, const Array< double > &, const Array< double > &, const Vector &, const Vector &, const Vector &, Vector &)> element_kernel_assemble_diagonal_wrapper
Wrapper for the assembly of the gradient on each diagonal element.
virtual void GetEssentialTrueDofs(const Array< int > &bdr_attr_is_ess, Array< int > &ess_tdof_list, int component=-1)
Class for an integration rule - an Array of IntegrationPoint.
const GeometricFactors * geometric_factors_
void SetMaterial(const material_type &material)
Set the material type.
Vector X_el_
Input state E-vector.
const int order_
Polynomial order of the FE space.
const Operator * h1_prolongation_
virtual void Mult(const Vector &U, Vector &Y) const override
Compute the residual Y = R(U) representing the elasticity equation with a material model chosen by ca...
ElasticityOperator(ParMesh &mesh, const int order)
Abstract parallel finite element space.
Structure for storing mesh geometric factors: coordinates, Jacobians, and determinants of the Jacobia...
void AssembleGradientDiagonal(Vector &Ke_diag, Vector &K_diag_local, Vector &K_diag) const
Assemble the linearization of the residual K = dR(U)/dU.
std::function< void(const int, const Array< double > &, const Array< double > &, const Array< double > &, const Vector &, const Vector &, const Vector &, Vector &, const Vector &)> element_apply_gradient_kernel_wrapper
Wrapper for the application of the gradient of the residual.
int material(Vector &x, Vector &xmin, Vector &xmax)
Vector Y_el_
Output state E-Vector.
int q1d_
Number of quadrature points in 1D.
const Operator * h1_element_restriction_
Array< int > displaced_tdof_list_
Vector X_local_
Input state L-vector.
Vector Y_local_
Output state L-vector.
const int ne_
Number of elements in the mesh (rank local)
Structure representing the matrices/tensors needed to evaluate (in reference space) the values...
const Array< int > & GetPrescribedDisplacementTDofs()
Return the T-vector degrees of freedom that have been marked as displaced.
int d1d_
Number of degrees of freedom in 1D.
Array< int > ess_tdof_list_
H1_FECollection h1_fec_
H1 finite element collection.
std::function< void(const int, const Array< double > &, const Array< double > &, const Array< double > &, const Vector &, const Vector &, const Vector &, Vector &)> element_apply_kernel_wrapper
Wrapper for the application of the residual R(U).
void SetPrescribedDisplacement(const Array< int > attr)
Set the attributes which mark the degrees of freedom that have a fixed displacement.
void SetEssentialAttributes(const Array< int > attr)
Set the essential attributes which mark degrees of freedom for the solving process.
Arbitrary order H1-conforming (continuous) finite elements.
ParFiniteElementSpace h1_fes_
H1 finite element space.
Class for parallel meshes.
Operator & GetGradient(const Vector &U) const override
Get the Gradient object.
void GradientMult(const Vector &dX, Vector &Y) const
Multiply the linearization of the residual R(U) wrt to the current state U by a perturbation dX...