24constexpr auto A = AssemblyType::BLOCK_MAT;
28#ifndef __ESHELBIAN_PLASTICITY_HPP__
29 #define __ESHELBIAN_PLASTICITY_HPP__
36using DL = DataLayoutTraits<DataLayout::GaussByCoeffs>;
53using EntData = EntitiesFieldData::EntData;
57using EleOnSide = PipelineManager::ElementsAndOpsByDim<SPACE_DIM>::FaceSideEle;
66struct AnalyticalExprPython;
69 :
public boost::enable_shared_from_this<MatOpsDataAtIntegrationPts> {
78 matOpsData->insertCommonData(
"wL2DotDotAtPts");
79 matOpsData->insertCommonData(
"logStretchTensorAtPts");
80 matOpsData->insertCommonData(
"logStretchTensor0AtPts");
81 matOpsData->insertCommonData(
"logStretchDotTensorAtPts");
82 matOpsData->insertCommonData(
"gradLogStretchDotTensorAtPts");
85 matOpsData->insertCommonData(
"rotAxisGradAtPts");
86 matOpsData->insertCommonData(
"rotAxisDotAtPts");
87 matOpsData->insertCommonData(
"rotAxisGradDotAtPts");
88 matOpsData->insertCommonData(
"stretchH1AtPts");
90 matOpsData->insertCommonData(
"stretchTensorAtPts");
91 matOpsData->insertCommonData(
"diffStretchH1AtPts");
92 matOpsData->insertCommonData(
"diffStretchTensorAtPts");
94 matOpsData->insertCommonData(
"adjointPdstretchAtPts");
95 matOpsData->insertCommonData(
"adjointPdUAtPts");
96 matOpsData->insertCommonData(
"adjointPdUdOmegaAtPts");
97 matOpsData->insertCommonData(
"adjointPdUdPAtPts");
169 template <
class Tensor>
170 static inline auto getFTensor(MatrixDouble &
m,
const int nb_gauss_pts) {
171 return MatrixSizeHelper<Tensor, DL>::get(
m, nb_gauss_pts)();
174 template <
class Tensor>
176 return getFTensor<Tensor>(*
m, nb_gauss_pts);
182 matOpsData->getCommonDataPtr(
"approxPAtPts"), nb_gauss_pts);
188 matOpsData->getCommonDataPtr(
"approxP0AtPts"), nb_gauss_pts);
193 matOpsData->getCommonDataPtr(
"divPAtPts"), nb_gauss_pts);
198 matOpsData->getCommonDataPtr(
"wL2AtPts"), nb_gauss_pts);
203 matOpsData->getCommonDataPtr(
"wL2DotAtPts"), nb_gauss_pts);
208 matOpsData->getCommonDataPtr(
"wL2DotDotAtPts"), nb_gauss_pts);
213 matOpsData->getCommonDataPtr(
"logStretchTensorAtPts"),
219 matOpsData->getCommonDataPtr(
"logStretchTensor0AtPts"),
225 matOpsData->getCommonDataPtr(
"logStretchDotTensorAtPts"),
231 matOpsData->getCommonDataPtr(
"gradLogStretchDotTensorAtPts"),
237 matOpsData->getCommonDataPtr(
"rotAxisAtPts"), nb_gauss_pts);
242 matOpsData->getCommonDataPtr(
"rotAxis0AtPts"), nb_gauss_pts);
248 matOpsData->getCommonDataPtr(
"rotAxisGradAtPts"), nb_gauss_pts);
253 matOpsData->getCommonDataPtr(
"rotAxisDotAtPts"), nb_gauss_pts);
259 matOpsData->getCommonDataPtr(
"rotAxisGradDotAtPts"), nb_gauss_pts);
265 matOpsData->getCommonDataPtr(
"stretchH1AtPts"), nb_gauss_pts);
271 matOpsData->getCommonDataPtr(
"wGradH1AtPts"), nb_gauss_pts);
276 matOpsData->getCommonDataPtr(
"stretchTensorAtPts"), nb_gauss_pts);
282 matOpsData->getCommonDataPtr(
"diffStretchH1AtPts"), nb_gauss_pts);
288 matOpsData->getCommonDataPtr(
"diffStretchTensorAtPts"),
295 matOpsData->getCommonDataPtr(
"hAtPts"), nb_gauss_pts);
300 GetFTensor2SymmetricFromMatType<
SPACE_DIM, -1,
DL>>(
301 matOpsData->getCommonDataPtr(
"plasticH"), nb_gauss_pts);
306 GetFTensor2SymmetricFromMatType<
SPACE_DIM, -1,
DL>>(
307 matOpsData->getCommonDataPtr(
"plasticF"), nb_gauss_pts);
313 matOpsData->getCommonDataPtr(
"invPlasticF"), nb_gauss_pts);
319 matOpsData->getCommonDataPtr(
"adjointPdstretchAtPts"),
325 matOpsData->getCommonDataPtr(
"adjointPdUAtPts"), nb_gauss_pts);
330 matOpsData->getCommonDataPtr(
"adjointPdUdOmegaAtPts"),
337 matOpsData->getCommonDataPtr(
"adjointPdUdPAtPts"), nb_gauss_pts);
342 matOpsData->getCommonDataPtr(
"eigenVals"), nb_gauss_pts);
348 matOpsData->getCommonDataPtr(
"eigenVecs"), nb_gauss_pts);
352 return matOpsData->getCommonDataPtr(
"approxPAtPts");
356 return matOpsData->getCommonDataPtr(
"approxP0AtPts");
362 return matOpsData->getCommonDataPtr(
"diffStretchH1AtPts");
366 return matOpsData->getCommonDataPtr(
"stretchH1AtPts");
370 return matOpsData->getCommonDataPtr(
"adjointPdstretchAtPts");
374 return matOpsData->getCommonDataPtr(
"adjointPdUAtPts");
378 return matOpsData->getCommonDataPtr(
"adjointPdUdOmegaAtPts");
382 return matOpsData->getCommonDataPtr(
"adjointPdUdPAtPts");
386 return matOpsData->getCommonDataPtr(
"eigenVals");
390 return matOpsData->getCommonDataPtr(
"eigenVecs");
394 return matOpsData->getCommonDataPtr(
"divPAtPts");
398 return matOpsData->getCommonDataPtr(
"wL2AtPts");
402 return matOpsData->getCommonDataPtr(
"wL2DotAtPts");
406 return matOpsData->getCommonDataPtr(
"wL2DotDotAtPts");
410 return matOpsData->getCommonDataPtr(
"logStretchTensorAtPts");
414 return boost::shared_ptr<MatrixDouble>(
419 return matOpsData->getCommonDataPtr(
"logStretchTensor0AtPts");
423 return matOpsData->getCommonDataPtr(
"stretchTensorAtPts");
427 return matOpsData->getCommonDataPtr(
"diffStretchTensorAtPts");
431 return matOpsData->getCommonDataPtr(
"hAtPts");
435 return matOpsData->getCommonDataPtr(
"plasticH");
439 return matOpsData->getCommonDataPtr(
"plasticFlow");
443 return matOpsData->getCommonDataPtr(
"plasticF");
447 return matOpsData->getCommonDataPtr(
"invPlasticF");
451 return matOpsData->getCommonDataPtr(
"logStretchDotTensorAtPts");
455 return matOpsData->getCommonDataPtr(
"gradLogStretchDotTensorAtPts");
459 return matOpsData->getCommonDataPtr(
"rotAxisAtPts");
463 return matOpsData->getCommonDataPtr(
"rotAxis0AtPts");
467 return matOpsData->getCommonDataPtr(
"rotAxisGradAtPts");
471 return matOpsData->getCommonDataPtr(
"rotAxisDotAtPts");
475 return matOpsData->getCommonDataPtr(
"rotAxisGradDotAtPts");
479 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matD);
483 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matInvD);
487 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wH1AtPts);
491 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
XH1AtPts);
495 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
contactL2AtPts);
499 return matOpsData->getCommonDataPtr(
"wGradH1AtPts");
503 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
508 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varRotAxis);
512 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varGradRotAxis);
516 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varLogStreach);
520 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varPiola);
524 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varDivPiola);
528 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varWL2);
532 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
537 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
542 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
547 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
552 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
gradientAtPts);
556 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
rotMatAtPts);
704 using Map = OpPostProcMapInMoab<SPACE_DIM, SPACE_DIM>;
763 std::vector<FieldDefinition>
770 std::vector<std::pair<std::string, std::string>>
772 std::vector<std::pair<std::string, std::string>>
778 boost::ptr_deque<UserDataOperator> &pipeline,
779 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
784 boost::ptr_deque<UserDataOperator> &pipeline,
785 boost::shared_ptr<DataAtIntegrationPts> data_ptr);
789 const EshelbianCore &ep, boost::ptr_deque<UserDataOperator> &pipeline,
790 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
bool rhs,
bool lhs);
793 virtual MoFEMErrorCode
795 boost::ptr_deque<UserDataOperator> &pipeline,
796 boost::shared_ptr<DataAtIntegrationPts> data_ptr);
800 boost::ptr_deque<UserDataOperator> &pipeline,
801 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
802 boost::shared_ptr<MatrixDouble> strain_ptr =
nullptr,
803 boost::shared_ptr<MatrixDouble> stress_ptr =
nullptr);
807 boost::ptr_deque<UserDataOperator> &pipeline,
808 boost::shared_ptr<DataAtIntegrationPts> data_ptr);
812 boost::ptr_deque<UserDataOperator> &pipeline,
813 boost::shared_ptr<DataAtIntegrationPts> data_ptr);
817 boost::ptr_deque<UserDataOperator> &pipeline,
818 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
819 boost::shared_ptr<double> total_energy_ptr);
823 boost::ptr_deque<UserDataOperator> &pipeline,
824 boost::shared_ptr<DataAtIntegrationPts> data_ptr);
827 boost::ptr_deque<UserDataOperator> &pipeline,
828 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
832 const EshelbianCore &ep, boost::ptr_deque<UserDataOperator> &pipeline,
833 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
837 const EshelbianCore &ep, boost::ptr_deque<UserDataOperator> &pipeline,
838 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
842 const EshelbianCore &ep, VolumeElementForcesAndSourcesCoreOnSide &fe,
843 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
848 const EshelbianCore &ep, boost::ptr_deque<UserDataOperator> &pipeline,
849 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
bool lhs);
853 const EshelbianCore &ep, boost::ptr_deque<UserDataOperator> &pipeline,
854 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
bool lhs =
false);
858 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
859 boost::shared_ptr<PhysicalEquations> physics_ptr);
863 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
864 const double alpha_u);
868 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
869 boost::shared_ptr<ExternalStrainVec> external_strain_vec_ptr,
870 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv);
873 std::string row_field, std::string col_field,
874 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
const double alpha);
878 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
879 SmartPetscObj<Vec> assemble_vec,
880 boost::shared_ptr<TopologicalData> topo_ptr,
const double alpha_u,
881 boost::shared_ptr<double> J_ptr);
885 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
886 boost::shared_ptr<double> total_helmholtz_free_energy_ptr);
892 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
893 boost::shared_ptr<PhysicalEquations> physics_ptr,
894 boost::shared_ptr<MatrixDouble> strain_ptr =
nullptr);
897 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
898 boost::shared_ptr<PhysicalEquations> physics_ptr,
899 boost::shared_ptr<MatrixDouble> strain_ptr,
903 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
904 boost::shared_ptr<PhysicalEquations> physics_ptr,
905 boost::shared_ptr<MatrixDouble> strain_ptr,
906 boost::shared_ptr<MatrixDouble> stress_ptr,
911 boost::shared_ptr<ExternalStrainVec> external_strain_vec_ptr,
912 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv);
915 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
916 boost::shared_ptr<PhysicalEquations> physics_ptr);
934 std::string load_history_file =
"");
945 std::string load_history_file =
"");
958 std::string load_history_file =
"");
969 std::string load_history_file =
"");
988 Range faces, std::string load_history_file =
"");
997 std::string load_history_file =
"");
1006 std::string load_history_file =
"");
1016 std::string load_history_file =
"");
1024template <
typename OP_PTR>
1025std::tuple<std::string, MatrixDouble>
1027 const std::string block_name);
1029template <
typename OP_PTR>
1030std::tuple<std::string, VectorDouble>
1032 const std::string block_name);
1034template <
typename OP_PTR>
1039 MatrixDouble &m_ref_coords,
1040 MatrixDouble &m_ref_normals,
1041 const std::string block_name);
1045 MatrixDouble &m_ref_coords,
1046 const std::string block_name);
1050 MatrixDouble &m_ref_coords,
1051 const std::string block_name);
Analytical expression Python bridge.
VectorDouble analytical_externalstrain_function(double delta_t, double t, int nb_gauss_pts, MatrixDouble &m_ref_coords, const std::string block_name)
boost::shared_ptr< MatrixDouble > MatrixPtr
std::vector< AnalyticalTractionBc > AnalyticalTractionBcVec
std::vector< TractionBc > TractionBcVec
std::tuple< std::string, VectorDouble > getAnalyticalExternalStrain(OP_PTR op_ptr, VectorDouble &analytical_expr, const std::string block_name)
std::vector< AnalyticalDisplacementBc > AnalyticalDisplacementBcVec
std::vector< PressureBc > PressureBcVec
std::vector< SpringBc > SpringBcVec
std::tuple< std::string, MatrixDouble > getAnalyticalExpr(OP_PTR op_ptr, MatrixDouble &analytical_expr, const std::string block_name)
VectorDouble analytical_elastic_function(double delta_t, double t, int nb_gauss_pts, MatrixDouble &m_ref_coords, const std::string block_name)
std::vector< Range > TractionFreeBc
std::vector< ExternalStrain > ExternalStrainVec
VectorDouble getAnalyticalElastic(OP_PTR op_ptr, const std::string block_name)
std::vector< BcRot > BcRotVec
std::vector< NormalDisplacementBc > NormalDisplacementBcVec
FaceElementForcesAndSourcesCore::UserDataOperator FaceUserDataOperator
PipelineManager::ElementsAndOpsByDim< SPACE_DIM >::FaceSideEle EleOnSide
MatrixDouble analytical_expr_function(double delta_t, double t, int nb_gauss_pts, MatrixDouble &m_ref_coords, MatrixDouble &m_ref_normals, const std::string block_name)
std::vector< BcDisp > BcDispVec
boost::shared_ptr< VectorDouble > VectorPtr
boost::shared_ptr< MatOpsData > createMatOpsDataPtr()
constexpr double t
plate stiffness
constexpr auto field_name
FTensor::Index< 'm', 3 > m
std::string loadHistoryFile
std::string loadHistoryFile
MatrixPtr getAdjointPdUdOmegaAtPts()
MatrixPtr getAdjointPdstretchAtPts()
MatrixPtr getHybridDispAtPts()
auto getFTensorSmallWH1(const int nb_gauss_pts)
MatrixPtr getApproxP0AtPts()
MatrixPtr getLogStretchTensorAtPts()
VectorDouble normalPressureAtPts
MatrixDouble matDeviatorD
auto getFTensorStretch(const int nb_gauss_pts)
auto getFTensorLogStretchDot(const int nb_gauss_pts)
MatrixDouble logStretchTotalTensorAtPts
MatrixDouble hdOmegaAtPts
auto getFTensorVarGradRotAxis(const int nb_gauss_pts)
auto getFTensorEigenVecsC(const int nb_gauss_pts)
MatrixDouble gradHybridDispAtPts
MatrixPtr getStretchH1AtPts()
MatrixDouble leviKirchhoffdOmegaAtPts
auto getFTensorPlasticH(const int nb_gauss_pts)
MatrixDouble leviKirchhoff0AtPts
MatrixDouble leviKirchhoffPAtPts
auto getFTensorSmallWL2Dot(const int nb_gauss_pts)
MatrixPtr getSmallWL2AtPts()
MatrixPtr getGradientAtPts()
auto getFTensorRotAxisGrad(const int nb_gauss_pts)
MatrixDouble internalStressAtPts
auto getFTensorVarPiola(const int nb_gauss_pts)
MatrixPtr getInternalStressAtPts()
auto getFTensorSmallHdLogStretch(const int nb_gauss_pts)
auto getFTensorAdjointPdstretch(const int nb_gauss_pts)
auto getFTensorSmallH(const int nb_gauss_pts)
auto getFTensorSmallHybridDisp(const int nb_gauss_pts)
auto getFTensorVarRotAxis(const int nb_gauss_pts)
MatrixPtr getRotAxisAtPts()
MatrixPtr getRotAxis0AtPts()
auto getFTensorLeviKirchhoffP(const int nb_gauss_pts)
MatrixPtr getLeviKirchhoffAtPts()
MatrixPtr getSmallWL2DotDotAtPts()
MatrixPtr getRotAxisGradDotAtPts()
auto getFTensorRotAxis0(const int nb_gauss_pts)
MatrixPtr getRotMatAtPts()
auto getFTensorLeviKirchhoff(const int nb_gauss_pts)
MatrixPtr getVarLogStreachPts()
MatrixPtr getRotAxisDotAtPts()
MatrixPtr getDivVarPiolaPts()
MatrixPtr getVarGradRotAxisPts()
MatrixPtr getSmallWGradH1AtPts()
auto getFTensorEigenVals(const int nb_gauss_pts)
auto getFTensorGradHybridDisp(const int nb_gauss_pts)
MatrixPtr getGradHybridDispAtPts()
auto getFTensorVarLogStreach(const int nb_gauss_pts)
auto getFTensorEigenVecs(const int nb_gauss_pts)
auto getFTensorRotAxisDot(const int nb_gauss_pts)
auto getFTensorApproxP(const int nb_gauss_pts)
MatrixPtr getSmallWH1AtPts()
MatrixPtr getAdjointPdUAtPts()
MatrixPtr getLogStretchTensor0AtPts()
MatrixPtr getLogStretchDotTensorAtPts()
MatrixPtr getContactL2AtPts()
auto getFTensorRotMat(const int nb_gauss_pts)
auto getFTensorAdjointPdUdOmega(const int nb_gauss_pts)
auto getFTensorInternalStressVec(const int nb_gauss_pts)
MatrixPtr getApproxPAtPts()
auto getFTensorLeviKirchhoffdOmega(const int nb_gauss_pts)
MatrixPtr getStretchTensorAtPts()
MatrixPtr getInvPlasticF()
auto getFTensorInternalStress(const int nb_gauss_pts)
auto getFTensorVarWL2(const int nb_gauss_pts)
auto getFTensorSmallWL2DotDot(const int nb_gauss_pts)
auto getFTensorEigenValsC(const int nb_gauss_pts)
auto getFTensorLogStretchTotal(const int nb_gauss_pts)
MatrixPtr getDiffStretchH1AtPts()
MatrixPtr getVarRotAxisPts()
MatrixDouble hdLogStretchAtPts
MatrixPtr getVarPiolaPts()
MatrixPtr getLargeXH1AtPts()
static auto getFTensor(MatrixDouble &m, const int nb_gauss_pts)
MatrixPtr getVarHybridDispAtPts()
MatrixPtr getDeformationGradient()
auto getFTensorLeviKirchhoffdLogStretch(const int nb_gauss_pts)
MatrixPtr getSmallWL2DotAtPts()
auto getFTensorDiffStretchH1(const int nb_gauss_pts)
auto getFTensorFaceMaterialForce(const int nb_gauss_pts)
auto getFTensorLogStretch2H1(const int nb_gauss_pts)
auto getFTensorLeviKirchhoff0(const int nb_gauss_pts)
auto getFTensorSmallWGradH1(const int nb_gauss_pts)
auto getFTensorTraction(const int nb_gauss_pts)
auto getFTensorRotAxis(const int nb_gauss_pts)
MatrixDouble varHybridDispAtPts
MatrixDouble tractionAtPts
auto getFTensorLogStretch0(const int nb_gauss_pts)
MatrixDouble varLogStreach
MatrixPtr getAdjointPdUdPAtPts()
auto getFTensorSmallHdOmega(const int nb_gauss_pts)
MatrixDouble logStretch2H1AtPts
MatrixPtr getGradLogStretchDotTensorAtPts()
auto getFTensorInvPlasticF(const int nb_gauss_pts)
VectorDouble youngModulusAtPts
MatrixPtr getDiffStretchTensorAtPts()
MatrixDouble leviKirchhoffdLogStreatchAtPts
auto getFTensorDivVarPiola(const int nb_gauss_pts)
auto getFTensorAdjointPdU(const int nb_gauss_pts)
boost::shared_ptr< AuxiliaryLogarithmicStressData > auxiliaryData0
MatrixPtr getLogStretchTotalTensorAtPts()
auto getFTensorSmallWL2(const int nb_gauss_pts)
auto getFTensorRotAxisGradDot(const int nb_gauss_pts)
static constexpr int SizeSymm
MatrixDouble gradientAtPts
MatrixDouble varGradRotAxis
MatrixDouble leviKirchhoffAtPts
MatrixDouble faceMaterialForceAtPts
auto getFTensorDivP(const int nb_gauss_pts)
MatrixDouble hybridDispAtPts
MatrixPtr getPlasticFlow()
auto getFTensorLogStretch(const int nb_gauss_pts)
MatrixPtr getRotAxisGradAtPts()
auto getFTensorApproxP0(const int nb_gauss_pts)
MatrixPtr getMatInvDPtr()
auto getFTensorGradLogStretchDot(const int nb_gauss_pts)
auto getFTensorPlasticF(const int nb_gauss_pts)
auto getFTensorStretchH1(const int nb_gauss_pts)
boost::shared_ptr< AuxiliaryLogarithmicStressData > auxiliaryData
boost::shared_ptr< PhysicalEquations > physicsPtr
auto getFTensorAdjointPdUdP(const int nb_gauss_pts)
static auto getFTensor(MatrixPtr m, const int nb_gauss_pts)
auto getFTensorDiffStretch(const int nb_gauss_pts)
boost::shared_ptr< AuxiliaryLogarithmicStressMaterialData > auxiliaryMaterialData
MatrixDouble contactL2AtPts
std::string loadHistoryFile
boost::shared_ptr< MatOps::MatOpsData > matOpsData
MatOpsDataAtIntegrationPts()
OpPostProcMapInMoab< SPACE_DIM, SPACE_DIM > Map
Map::DataMapMat vectorFields
Map::DataMapMat symmetricFields
Map::DataMapVec scalarFields
std::string loadHistoryFile
MoFEMErrorCode pushMaterialRates(const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
static const Features noStretchMask
virtual MoFEMErrorCode pushHelmholtzStateGradient(const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
Assemble the physical Helmholtz state derivative at equilibrium.
MoFEMErrorCode pushMaterialFields(const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, FieldState state=CURRENT)
Evaluate the selected fields, or recover stretch from the matching stress.
std::vector< FieldDefinition > getMaterialFieldDefinitions(const EshelbianCore &ep) const
bool usesStressBasedStrain() const
virtual VolUserDataOperator * returnOpCalculateExternalPressure(VectorPtr external_pressure_ptr, boost::shared_ptr< ExternalStrainVec > external_strain_vec_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv)
std::vector< std::pair< std::string, std::string > > getMaterialEmptyBlocks(const EshelbianCore &ep) const
MoFEMErrorCode pushPostProcResidual(const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, SmartPetscObj< Vec > residual, MaterialPostProcData &output)
virtual VolUserDataOperator * returnOpCalculateVarStretchFromStress(boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr)
MoFEMErrorCode pushEnergyEvaluation(const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< double > total_energy_ptr)
MoFEMErrorCode checkSetup(const EshelbianCore &ep) const
Check material capabilities after geometry and boundary setup.
MoFEMErrorCode pushMaterialEvaluation(const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, bool rhs, bool lhs)
Evaluate constitutive data after kinematics and before material assembly.
MoFEMErrorCode pushMaterialResidual(const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
@ CURRENT
Current state of the field.
@ PREVIOUS
Previous state of the field.
virtual UserDataOperator * returnOpJacobian(const bool eval_rhs, const bool eval_lhs, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr)
virtual VolUserDataOperator * returnOpSpatialPhysical(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const double alpha_u)
virtual VolUserDataOperator * returnOpSpatialPhysicalExternalStrain(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< ExternalStrainVec > external_strain_vec_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv)
virtual VolUserDataOperator * returnOpCalculateHelmholtzFreeEnergy(boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< double > total_helmholtz_free_energy_ptr)
const Features & getFeatures() const
static MoFEMErrorCode create(EshelbianCore &ep)
Select and configure the material before registering fields and DMs.
virtual MoFEMErrorCode pushAuxiliaryLogarithmicStressOps(const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, bool lhs)
Assemble the selected material field group after kinematic reconstruction.
MoFEMErrorCode pushMaterialTangent(const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MaterialModel getMaterialModel() const
std::bitset< LAST_FEATURE > Features
MoFEMErrorCode pushSkeletonEvaluation(const EshelbianCore &ep, VolumeElementForcesAndSourcesCoreOnSide &fe, boost::shared_ptr< DataAtIntegrationPts > data_ptr, SmartPetscObj< Vec > residual, MaterialPostProcData &output)
MoFEMErrorCode pushMaterialForceFields(const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
std::vector< std::string > getMaterialFields(const EshelbianCore &ep) const
Active material unknowns used by the element, DMs and field split.
virtual bool providesHelmholtzFreeEnergy() const
MaterialModel materialModel
Features materialFeatures
PhysicalEquations(MaterialModel model, Features features)
virtual VolUserDataOperator * returnOpTopoSpatialPhysical(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, SmartPetscObj< Vec > assemble_vec, boost::shared_ptr< TopologicalData > topo_ptr, const double alpha_u, boost::shared_ptr< double > J_ptr)
@ NO_STRETCH_LINEAR
No-stretch linear formulation.
@ DIRECT_STRETCH
Direct stretch formulation.
@ AUXILIARY_LOGARITHMIC_STRESS
Auxiliary logarithmic stress formulation.
@ NO_STRETCH_NONLINEAR
No-stretch nonlinear formulation.
@ NON_HOMOGENEOUS_MATERIAL
virtual MoFEMErrorCode pushAuxiliaryLogarithmicMaterialEvaluation(const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, bool lhs=false)
Evaluate the auxiliary material copy and energies without assembly.
virtual VolUserDataOperator * returnOpCalculateStretchFromStress(boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr, boost::shared_ptr< MatrixDouble > strain_ptr=nullptr)
static MoFEMErrorCode checkOptions(const EshelbianCore &ep, MaterialModel material_model, Features features)
virtual ~PhysicalEquations()=default
std::vector< std::pair< std::string, std::string > > getMaterialCouplings(const EshelbianCore &ep) const
Material-dependent blocks; each pair also represents its transpose.
virtual VolUserDataOperator * returnOpSpatialPhysical_du_du(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const double alpha)
MoFEMErrorCode pushStretchFromStress(const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< MatrixDouble > strain_ptr=nullptr, boost::shared_ptr< MatrixDouble > stress_ptr=nullptr)
MoFEMErrorCode pushPostProc(const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, MaterialPostProcData &output)
MoFEMErrorCode pushMaterialVariation(const EshelbianCore &ep, boost::ptr_deque< UserDataOperator > &pipeline, boost::shared_ptr< DataAtIntegrationPts > data_ptr, SmartPetscObj< Vec > variation, MaterialPostProcData *output=nullptr)
std::string loadHistoryFile
double tangentialStiffness
std::string loadHistoryFile
Data on single entity (This is passed as argument to DataOperator::doWork)