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;
67struct AnalyticalExprPython;
70 :
public boost::enable_shared_from_this<MatOpsDataAtIntegrationPts> {
79 matOpsData->insertCommonData(
"wL2DotDotAtPts");
80 matOpsData->insertCommonData(
"logStretchTensorAtPts");
81 matOpsData->insertCommonData(
"logStretchTensor0AtPts");
82 matOpsData->insertCommonData(
"logStretchDotTensorAtPts");
83 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");
115 boost::shared_ptr<AuxiliaryLogarithmicStressMaterialData>
184 template <
class Tensor>
185 static inline auto getFTensor(MatrixDouble &
m,
const int nb_gauss_pts) {
186 return MatrixSizeHelper<Tensor, DL>::get(
m, nb_gauss_pts)();
189 template <
class Tensor>
191 return getFTensor<Tensor>(*
m, nb_gauss_pts);
196 matOpsData->getCommonDataPtr(
"approxPAtPts"), nb_gauss_pts);
201 matOpsData->getCommonDataPtr(
"approxP0AtPts"), nb_gauss_pts);
206 matOpsData->getCommonDataPtr(
"divPAtPts"), nb_gauss_pts);
211 matOpsData->getCommonDataPtr(
"wL2AtPts"), nb_gauss_pts);
216 matOpsData->getCommonDataPtr(
"wL2DotAtPts"), nb_gauss_pts);
221 matOpsData->getCommonDataPtr(
"wL2DotDotAtPts"), nb_gauss_pts);
226 matOpsData->getCommonDataPtr(
"logStretchTensorAtPts"), nb_gauss_pts);
231 matOpsData->getCommonDataPtr(
"logStretchTensor0AtPts"), nb_gauss_pts);
236 matOpsData->getCommonDataPtr(
"logStretchDotTensorAtPts"), nb_gauss_pts);
241 matOpsData->getCommonDataPtr(
"gradLogStretchDotTensorAtPts"),
247 matOpsData->getCommonDataPtr(
"rotAxisAtPts"), nb_gauss_pts);
252 matOpsData->getCommonDataPtr(
"rotAxisGradAtPts"), nb_gauss_pts);
257 matOpsData->getCommonDataPtr(
"rotAxisDotAtPts"), nb_gauss_pts);
262 matOpsData->getCommonDataPtr(
"rotAxisGradDotAtPts"), nb_gauss_pts);
267 matOpsData->getCommonDataPtr(
"stretchH1AtPts"), nb_gauss_pts);
272 matOpsData->getCommonDataPtr(
"wGradH1AtPts"), nb_gauss_pts);
277 matOpsData->getCommonDataPtr(
"stretchTensorAtPts"), nb_gauss_pts);
283 matOpsData->getCommonDataPtr(
"diffStretchH1AtPts"), nb_gauss_pts);
288 matOpsData->getCommonDataPtr(
"diffStretchTensorAtPts"), nb_gauss_pts);
293 matOpsData->getCommonDataPtr(
"hAtPts"), nb_gauss_pts);
298 matOpsData->getCommonDataPtr(
"plasticH"), nb_gauss_pts);
303 matOpsData->getCommonDataPtr(
"plasticF"), nb_gauss_pts);
308 matOpsData->getCommonDataPtr(
"invPlasticF"), nb_gauss_pts);
313 matOpsData->getCommonDataPtr(
"adjointPdstretchAtPts"), nb_gauss_pts);
318 matOpsData->getCommonDataPtr(
"adjointPdUAtPts"), nb_gauss_pts);
323 const int point = 0) {
324 return GetFTensor2FromMatImpl<3, SizeSymm, -1, DL, MatrixDouble>::get(
333 matOpsData->getCommonDataPtr(
"adjointPdUdPAtPts"), nb_gauss_pts);
338 matOpsData->getCommonDataPtr(
"eigenVals"), nb_gauss_pts);
343 matOpsData->getCommonDataPtr(
"eigenVecs"), nb_gauss_pts);
347 return matOpsData->getCommonDataPtr(
"approxPAtPts");
351 return matOpsData->getCommonDataPtr(
"approxP0AtPts");
355 return matOpsData->getCommonDataPtr(
"PAtPts");
359 return matOpsData->getCommonDataPtr(
"diffStretchH1AtPts");
363 return matOpsData->getCommonDataPtr(
"stretchH1AtPts");
367 return matOpsData->getCommonDataPtr(
"adjointPdstretchAtPts");
371 return matOpsData->getCommonDataPtr(
"adjointPdUAtPts");
375 return matOpsData->getCommonDataPtr(
"adjointPdUdOmegaAtPts");
379 return matOpsData->getCommonDataPtr(
"adjointPdUdPAtPts");
383 return matOpsData->getCommonDataPtr(
"eigenVals");
387 return matOpsData->getCommonDataPtr(
"eigenVecs");
391 return matOpsData->getCommonDataPtr(
"divPAtPts");
395 return matOpsData->getCommonDataPtr(
"wL2AtPts");
399 return matOpsData->getCommonDataPtr(
"wL2DotAtPts");
403 return matOpsData->getCommonDataPtr(
"wL2DotDotAtPts");
407 return matOpsData->getCommonDataPtr(
"logStretchTensorAtPts");
411 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
416 return matOpsData->getCommonDataPtr(
"logStretchTensor0AtPts");
420 return matOpsData->getCommonDataPtr(
"stretchTensorAtPts");
424 return matOpsData->getCommonDataPtr(
"diffStretchTensorAtPts");
428 return matOpsData->getCommonDataPtr(
"hAtPts");
432 return matOpsData->getCommonDataPtr(
"plasticH");
436 return matOpsData->getCommonDataPtr(
"plasticFlow");
440 return matOpsData->getCommonDataPtr(
"plasticF");
444 return matOpsData->getCommonDataPtr(
"invPlasticF");
448 return matOpsData->getCommonDataPtr(
"logStretchDotTensorAtPts");
452 return matOpsData->getCommonDataPtr(
"gradLogStretchDotTensorAtPts");
456 return matOpsData->getCommonDataPtr(
"rotAxisAtPts");
460 return matOpsData->getCommonDataPtr(
"rotAxisGradAtPts");
464 return matOpsData->getCommonDataPtr(
"rotAxisDotAtPts");
468 return matOpsData->getCommonDataPtr(
"rotAxisGradDotAtPts");
472 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matD);
476 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matInvD);
480 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wH1AtPts);
484 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
XH1AtPts);
488 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
contactL2AtPts);
492 return matOpsData->getCommonDataPtr(
"wGradH1AtPts");
496 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
501 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varRotAxis);
505 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varGradRotAxis);
509 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varLogStreach);
513 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varPiola);
517 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varDivPiola);
521 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varWL2);
525 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
530 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
535 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
540 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
545 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
gradientAtPts);
549 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
rotMatAtPts);
578 const int point = 0) {
579 return GetFTensor3FromMatImpl<3, 3, 3, -1, DL, MatrixDouble>::get(
590 const int mode = 1,
const int point = 0) {
591 return GetFTensor1FromMatImpl<3, -1, DL, MatrixDouble>::get(
598 const int point = 0) {
599 return GetFTensor1FromMatImpl<3, -1, DL, MatrixDouble>::get(
605 const int row_mode = 1,
606 const int col_mode = 1,
607 const int point = 0) {
612 return GetFTensor2FromMatImpl<3, 3, -1, DL, MatrixDouble>::get(matrix,
618 const int point = 0) {
619 return GetFTensor2FromMatImpl<3, SizeSymm, -1, DL, MatrixDouble>::get(
627 const int point = 0) {
628 return GetFTensor3FromMatImpl<3, 3, 3, -1, DL, MatrixDouble>::get(
708 using Map = OpPostProcMapInMoab<SPACE_DIM, SPACE_DIM>;
767 std::vector<FieldDefinition>
774 std::vector<std::pair<std::string, std::string>>
776 std::vector<std::pair<std::string, std::string>>
782 boost::ptr_deque<UserDataOperator> &pipeline,
783 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
788 boost::ptr_deque<UserDataOperator> &pipeline,
789 boost::shared_ptr<DataAtIntegrationPts> data_ptr);
793 const EshelbianCore &ep, boost::ptr_deque<UserDataOperator> &pipeline,
794 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
bool rhs,
bool lhs);
799 virtual MoFEMErrorCode
813 virtual MoFEMErrorCode
815 boost::ptr_deque<UserDataOperator> &pipeline,
816 boost::shared_ptr<DataAtIntegrationPts> data_ptr);
820 boost::ptr_deque<UserDataOperator> &pipeline,
821 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
822 boost::shared_ptr<MatrixDouble> strain_ptr =
nullptr,
823 boost::shared_ptr<MatrixDouble> stress_ptr =
nullptr);
827 boost::ptr_deque<UserDataOperator> &pipeline,
828 boost::shared_ptr<DataAtIntegrationPts> data_ptr);
832 boost::ptr_deque<UserDataOperator> &pipeline,
833 boost::shared_ptr<DataAtIntegrationPts> data_ptr);
837 boost::ptr_deque<UserDataOperator> &pipeline,
838 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
839 boost::shared_ptr<double> total_energy_ptr);
843 boost::ptr_deque<UserDataOperator> &pipeline,
844 boost::shared_ptr<DataAtIntegrationPts> data_ptr);
847 boost::ptr_deque<UserDataOperator> &pipeline,
848 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
852 const EshelbianCore &ep, boost::ptr_deque<UserDataOperator> &pipeline,
853 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
857 const EshelbianCore &ep, boost::ptr_deque<UserDataOperator> &pipeline,
858 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
862 const EshelbianCore &ep, VolumeElementForcesAndSourcesCoreOnSide &fe,
863 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
868 const EshelbianCore &ep, boost::ptr_deque<UserDataOperator> &pipeline,
869 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
bool lhs);
873 const EshelbianCore &ep, boost::ptr_deque<UserDataOperator> &pipeline,
874 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
bool lhs =
false);
878 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
879 boost::shared_ptr<PhysicalEquations> physics_ptr);
883 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
884 const double alpha_u);
888 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
889 boost::shared_ptr<ExternalStrainVec> external_strain_vec_ptr,
890 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv);
893 std::string row_field, std::string col_field,
894 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
const double alpha);
898 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
899 SmartPetscObj<Vec> assemble_vec,
900 boost::shared_ptr<TopologicalData> topo_ptr,
901 const double alpha_u,
902 boost::shared_ptr<double> J_ptr);
905 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
906 boost::shared_ptr<double> total_helmholtz_free_energy_ptr);
912 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
913 boost::shared_ptr<PhysicalEquations> physics_ptr,
914 boost::shared_ptr<MatrixDouble> strain_ptr =
nullptr);
917 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
918 boost::shared_ptr<PhysicalEquations> physics_ptr,
919 boost::shared_ptr<MatrixDouble> strain_ptr,
923 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
924 boost::shared_ptr<PhysicalEquations> physics_ptr,
925 boost::shared_ptr<MatrixDouble> strain_ptr,
926 boost::shared_ptr<MatrixDouble> stress_ptr,
931 boost::shared_ptr<ExternalStrainVec> external_strain_vec_ptr,
932 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv);
935 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
936 boost::shared_ptr<PhysicalEquations> physics_ptr);
954 std::string load_history_file =
"");
965 std::string load_history_file =
"");
978 std::string load_history_file =
"");
989 std::string load_history_file =
"");
1008 Range faces, std::string load_history_file =
"");
1017 std::string load_history_file =
"");
1026 std::string load_history_file =
"");
1036 std::string load_history_file =
"");
1044template <
typename OP_PTR>
1045std::tuple<std::string, MatrixDouble>
1047 const std::string block_name);
1049template <
typename OP_PTR>
1050std::tuple<std::string, VectorDouble>
1052 const std::string block_name);
1054template <
typename OP_PTR>
1059 MatrixDouble &m_ref_coords,
1060 MatrixDouble &m_ref_normals,
1061 const std::string block_name);
1065 MatrixDouble &m_ref_coords,
1066 const std::string block_name);
1070 MatrixDouble &m_ref_coords,
1071 const std::string block_name);
Analytical expression Python bridge.
boost::shared_ptr< DataAtIntegrationPts > data
SmartPetscObj< Vec > residual
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
MatrixDouble stretchRotation
MatrixDouble previousWork
auto getFTensorLeviKirchhoff(const int nb_gauss_pts, const int mode=1, const int point=0)
MatrixPtr getAdjointPdUdOmegaAtPts()
MatrixPtr getAdjointPdstretchAtPts()
MatrixPtr getHybridDispAtPts()
MatrixPtr constantRotation
auto getFTensorSmallWH1(const int nb_gauss_pts)
MatrixPtr getApproxP0AtPts()
auto getFTensorAdjointPdUdOmega(const int nb_gauss_pts, const int mode=1, const int point=0)
MatrixPtr getLogStretchTensorAtPts()
VectorDouble normalPressureAtPts
MatrixDouble matDeviatorD
auto getFTensorStretch(const int nb_gauss_pts)
auto getFTensorLogStretchDot(const int nb_gauss_pts)
MatrixDouble logStretchTotalTensorAtPts
auto getFTensorLeviKirchhoffP(const int nb_gauss_pts, const int mode=1, const int point=0)
auto getFTensorLeviKirchhoffdLogStretch(const int nb_gauss_pts, const int mode=1, const int point=0)
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
MatrixPtr varHigherRotation
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 getLeviKirchhoffAtPts()
MatrixPtr getSmallWL2DotDotAtPts()
MatrixPtr getRotAxisGradDotAtPts()
MatrixPtr getRotMatAtPts()
MatrixPtr previousHigherRotation
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()
auto getFTensorSmallHdOmega(const int nb_gauss_pts, const int mode=1, const int point=0)
MatrixPtr getLogStretchTensor0AtPts()
MatrixPtr getLogStretchDotTensorAtPts()
MatrixPtr getContactL2AtPts()
auto getFTensorRotMat(const int nb_gauss_pts)
auto getFTensorLeviKirchhoff0(const int nb_gauss_pts, const int mode=1, const int point=0)
auto getFTensorInternalStressVec(const int nb_gauss_pts)
MatrixPtr getApproxPAtPts()
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 getFTensorLeviKirchhoffdOmega(const int nb_gauss_pts, const int row_mode=1, const int col_mode=1, const int point=0)
auto getFTensorLogStretchTotal(const int nb_gauss_pts)
MatrixPtr getDiffStretchH1AtPts()
MatrixPtr getVarRotAxisPts()
MatrixDouble constantRotationSecond
MatrixDouble hdLogStretchAtPts
MatrixPtr getVarPiolaPts()
MatrixPtr getLargeXH1AtPts()
MatrixDouble higherConstantRotationSecond
static auto getFTensor(MatrixDouble &m, const int nb_gauss_pts)
MatrixPtr getVarHybridDispAtPts()
MatrixPtr getDeformationGradient()
MatrixPtr getSmallWL2DotAtPts()
auto getFTensorDiffStretchH1(const int nb_gauss_pts)
auto getFTensorFaceMaterialForce(const int nb_gauss_pts)
MatrixPtr varConstantRotation
auto getFTensorLogStretch2H1(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()
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
MatrixPtr previousConstantRotation
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)
MatrixDouble constantHigherRotationSecond
RotationLinearization constantRotationLinearization
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
virtual MoFEMErrorCode evaluateElasticLogarithmicMaterialHessian(EntityHandle entity, int gauss_point, DataAtIntegrationPts &data, const FTensor::Tensor2_symmetric< double, 3 > &elastic_log_stretch, FTensor::Tensor2< double, 5, 5 > &hessian)
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
virtual bool providesHelmholtzCurvature() const
Contract material curvature for the incremental material-energy adjoint.
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 MoFEMErrorCode evaluateHelmholtzCurvature(EntityHandle entity, int gauss_point, DataAtIntegrationPts &data, LogarithmicMaterialCurvature &curvature)
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)