11#ifndef MAT_ELASTIC_HPP
12#define MAT_ELASTIC_HPP
26 using MatPiolaResponse::MatPiolaResponse;
55 addKinematics(boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pip,
57 boost::shared_ptr<MatrixDouble> m_grad) {
58 constexpr int DIM = (MODEL_TYPE ==
MODEL_3D) ? 3 : 2;
60 auto m_disp = boost::make_shared<MatrixDouble>();
61 auto m_grad_2d = boost::make_shared<MatrixDouble>();
73 template <AssemblyType A, IntegrationType I,
typename DomainEleOp>
76 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pip,
78 boost::shared_ptr<PhysicalEquations> physical_equations_ptr) {
80 constexpr int DIM = (MODEL_TYPE ==
MODEL_3D) ? 3 : 2;
85 physical_equations_ptr->matOpsDataPtr->getCommonDataPtr(
"grad");
86 auto m_P = physical_equations_ptr->matOpsDataPtr->getCommonDataPtr(
"P");
88 pip.push_back(physical_equations_ptr->createOp(physical_equations_ptr,
true,
91 auto data = boost::make_shared<AxisymmetricAssemblyData>();
98 pip.push_back(
new OpInternalForce(
field_name, m_P));
103 template <AssemblyType A, IntegrationType I,
typename DomainEleOp>
106 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pip,
108 boost::shared_ptr<PhysicalEquations> physical_equations_ptr) {
110 constexpr int DIM = (MODEL_TYPE ==
MODEL_3D) ? 3 : 2;
113 using OpKPiola =
typename B::template OpGradTensorGrad<1, DIM, DIM, -1>;
115 physical_equations_ptr->matOpsDataPtr->getCommonDataPtr(
"grad");
117 physical_equations_ptr->matOpsDataPtr->getCommonDataPtr(
"P_dF");
119 pip.push_back(physical_equations_ptr->createOp(physical_equations_ptr,
120 false,
true,
false));
122 auto data = boost::make_shared<AxisymmetricAssemblyData>();
137 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pip,
139 boost::shared_ptr<PhysicalEquations> physical_equations_ptr) {
141 constexpr int DIM = (MODEL_TYPE ==
MODEL_3D) ? 3 : 2;
143 physical_equations_ptr->matOpsDataPtr->getCommonDataPtr(
"grad");
144 auto m_P = physical_equations_ptr->matOpsDataPtr->getCommonDataPtr(
"P");
146 pip.push_back(physical_equations_ptr->createOp(physical_equations_ptr,
147 false,
false,
true));
153 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pip,
155 boost::shared_ptr<PhysicalEquations> physical_equations_ptr) {
157 constexpr int DIM = (MODEL_TYPE ==
MODEL_3D) ? 3 : 2;
159 physical_equations_ptr->matOpsDataPtr->getCommonDataPtr(
"grad");
160 auto m_P = physical_equations_ptr->matOpsDataPtr->getCommonDataPtr(
"P");
162 pip.push_back(physical_equations_ptr->createOp(physical_equations_ptr,
true,
172std::map<int, boost::shared_ptr<MatPiolaResponse>> &
176boost::shared_ptr<PhysicalEquations>
178 boost::shared_ptr<MatOpsData> mat_ops_data_ptr,
int tag);
181boost::shared_ptr<PhysicalEquations>
183 boost::shared_ptr<MatOpsData> mat_ops_data_ptr,
int tag);
186boost::shared_ptr<PhysicalEquations>
188 boost::shared_ptr<MatOpsData> mat_ops_data_ptr,
int tag);
191boost::shared_ptr<PhysicalEquations>
193 boost::shared_ptr<MatOpsData> mat_ops_data_ptr,
int tag);
196boost::shared_ptr<PhysicalEquations>
198 boost::shared_ptr<MatOpsData> mat_ops_data_ptr,
int tag);
201boost::shared_ptr<PhysicalEquations>
203 boost::shared_ptr<MatOpsData> mat_ops_data_ptr,
int tag);
206boost::shared_ptr<PhysicalEquations>
209 boost::shared_ptr<MatOpsData> mat_ops_data_ptr,
int tag);
212boost::shared_ptr<PhysicalEquations>
214 boost::shared_ptr<MatOpsData> mat_ops_data_ptr,
int tag);
217boost::shared_ptr<PhysicalEquations>
220 boost::shared_ptr<MatOpsData> mat_ops_data_ptr,
int tag);
223boost::shared_ptr<PhysicalEquations>
226 boost::shared_ptr<MatOpsData> mat_ops_data_ptr,
int tag);
237boost::shared_ptr<PhysicalEquations>
239 boost::shared_ptr<MatOpsData> mat_ops_data_ptr,
int tag);
SmartPetscObj< Mat > jacobian
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
boost::shared_ptr< PhysicalEquations > createMatOpsPhysicalEquationsPtr< PIOLA_RESPONSE::VOLUMELENGTHQUALITY, MODEL_3D >(boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag)
boost::shared_ptr< PhysicalEquations > createMatOpsPhysicalEquationsPtr< PIOLA_RESPONSE::META, MODEL_AXISYMMETRIC >(boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag)
boost::shared_ptr< PhysicalEquations > createMatOpsPhysicalEquationsPtr< PIOLA_RESPONSE::META, MODEL_3D >(boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag)
boost::shared_ptr< PhysicalEquations > createMatOpsPhysicalEquationsPtr< ELASTICITY::NEOHOOKEAN, MODEL_AXISYMMETRIC >(boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag)
boost::shared_ptr< PhysicalEquations > createMatOpsPhysicalEquationsPtr< ELASTICITY::NEOHOOKEAN, MODEL_3D >(boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag)
std::map< int, boost::shared_ptr< MatPiolaResponse > > & getMetaPiolaResponseMap(boost::shared_ptr< MatPiolaResponse > meta_ptr)
boost::shared_ptr< PhysicalEquations > createMatOpsPhysicalEquationsPtr< ELASTICITY::STVENANTKIRCHHOFF, MODEL_3D >(boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag)
boost::shared_ptr< PhysicalEquations > createMatOpsPhysicalEquationsPtr(boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag)
boost::shared_ptr< PhysicalEquations > createMatOpsPhysicalEquationsPtr< PIOLA_RESPONSE::META, MODEL_2D_PLANE_STRAIN >(boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag)
@ BARRIER_AND_CHANGE_QUALITY_SCALED_BY_VOLUME
@ LASTOP_VOLUMELENGTHQUALITYTYPE
@ BARRIER_AND_CHANGE_QUALITY
boost::shared_ptr< PhysicalEquations > createMatOpsPhysicalEquationsPtr< ELASTICITY::NEOHOOKEAN, MODEL_2D_PLANE_STRAIN >(boost::shared_ptr< MatOpsData > mat_ops_data_ptr, int tag)
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
FormsIntegrators< DomainEleOp >::Assembly< A >::LinearForm< I >::OpGradTimesTensor< 1, FIELD_DIM, SPACE_DIM > OpGradTimesTensor
constexpr auto field_name
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::BiLinearForm< GAUSS >::OpGradTensorGrad< 1, SPACE_DIM, SPACE_DIM, -1 > OpKPiola
[Only used for dynamics]
Conservative elastic response with a stored-energy density.
static constexpr auto energyDensityDataName
MatOpsData::MatrixPtr getEnergyDensityPtr() const
boost::shared_ptr< MatrixDouble > MatrixPtr
Constitutive response expressed by first Piola stress.
static MoFEMErrorCode opUpdateFactory(MoFEM::Interface &m_field, boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pip, std::string field_name, boost::shared_ptr< PhysicalEquations > physical_equations_ptr)
static MoFEMErrorCode opPostProcFactory(MoFEM::Interface &m_field, boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pip, std::string field_name, boost::shared_ptr< PhysicalEquations > physical_equations_ptr)
OpMaterialFactory()=delete
static MoFEMErrorCode opLhsFactory(MoFEM::Interface &m_field, boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pip, std::string field_name, boost::shared_ptr< PhysicalEquations > physical_equations_ptr)
static MoFEMErrorCode opRhsFactory(MoFEM::Interface &m_field, boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pip, std::string field_name, boost::shared_ptr< PhysicalEquations > physical_equations_ptr)
static void addKinematics(boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pip, const std::string &field_name, boost::shared_ptr< MatrixDouble > m_grad)
boost::shared_ptr< MatOpsData > matOpsDataPtr
Deprecated interface functions.
Get field gradients at integration pts for scalar field rank 0, i.e. vector field.
Specialization for MatrixDouble vector field values calculation.