12#ifndef MFEM_ELASTICITY_OPERATOR
13#define MFEM_ELASTICITY_OPERATOR
28class ElasticityOperator
34 bool nonlinear =
false;
37 bool formsystem =
false;
39 ParMesh * pmesh =
nullptr;
42 Array<int> ess_bdr, ess_bdr_attr;
45 Array<int> ess_tdof_list, ess_bdr_attr_comp;
54 FiniteElementCollection * fec =
nullptr;
57 ParFiniteElementSpace * fes =
nullptr;
63 ParLinearForm * b =
nullptr;
69 HypreParMatrix *K=
nullptr;
75 ConstantCoefficient pressure_cf;
81 PWConstCoefficient c1_cf, c2_cf;
84 NeoHookeanModel * material_model =
nullptr;
91 void SetEssentialBC();
104 Array<int> & ess_bdr_attr_comp_,
105 const Vector & E,
const Vector & nu,
bool nonlinear_ =
false);
ParMesh * GetMesh() const
ElasticityOperator(ParMesh *pmesh_, Array< int > &ess_bdr_attr_, Array< int > &ess_bdr_attr_comp_, const Vector &E, const Vector &nu, bool nonlinear_=false)
Construct an ElasticityOperator.
void FormLinearSystem()
Assemble and form the linear system (matrix and RHS).
ParFiniteElementSpace * GetFESpace() const
void UpdateRHS()
Reset and reassemble the RHS linear form.
void SetNeumanPressureData(ConstantCoefficient &f, Array< int > &bdr_marker)
Apply Neumann (pressure) boundary condition on a set of boundary markers.
const Array< int > & GetEssentialDofs() const
int GetGlobalNumDofs() const
bool IsNonlinear()
Check if the operator is nonlinear.
~ElasticityOperator()
Destructor (cleans up FE space, operator, and material model).
void GetGradient(const Vector &u, Vector &gradE) const
Compute the gradient of the energy functional at a given displacement vector.
void SetParameters(const Vector &E, const Vector &nu)
Set material parameters from vectors of Young’s modulus (E) and Poisson’s ratio (ν).
HypreParMatrix * GetHessian(const Vector &u)
Get the Hessian (stiffness matrix) at a given displacement vector.
void Getxrefbc(Vector &xrefbc) const
Get the displacement with essential boundary conditions applied.
void SetDisplacementDirichletData(const Vector &delta, Array< int > essbdr)
Apply Dirichlet (displacement) boundary condition on a set of boundary markers.
real_t GetEnergy(const Vector &u) const
Compute the elastic energy functional at a given displacement vector.
Wrapper for hypre's ParCSR matrix class.
Operator(int s=0)
Construct a square Operator with given size s (default 0).
Abstract parallel finite element space.
Class for parallel meshes.
real_t u(const Vector &xvec)
std::function< real_t(const Vector &)> f(real_t mass_coeff)