6#ifndef MOFEM_PLASTIC_INCREMENTAL_OPTIMIZATION_HPP
7#define MOFEM_PLASTIC_INCREMENTAL_OPTIMIZATION_HPP
23 SmartPetscObj<TS> ts);
25 std::string
getName()
const override;
30 SmartPetscObj<Vec> &candidate_control)
override;
34 Vec multipliers)
override;
36 Vec reference_control)
override;
43 Vec objective_gradient)
override;
46 Vec constraints)
override;
48 Mat jacobian)
override;
50 Vec control, Mat jacobian)
override;
53 DM constraint_dm, Vec control, Vec smooth_gradient,
54 Vec inequality_multipliers, PetscReal gradient_tolerance,
55 PetscReal constraint_tolerance, std::string &diagnostics)
override;
56 MoFEMErrorCode
commit(Vec solution, Vec equilibrated_state,
57 Vec committed_control, Vec candidate_control,
58 Vec reference_control)
override;
74 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline)
const;
86boost::shared_ptr<IncrementalOptimizationContext>
89 SmartPetscObj<Vec>
state);
92 const boost::shared_ptr<IncrementalOptimizationContext> &
context);
127 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
129 boost::shared_ptr<MatrixDouble> tensor_values,
130 const EntityType zero_type = MBTET, SmartPetscObj<DM> data_dm = {},
131 SmartPetscObj<Vec> data_vector = {});
142 double &conjugate_work);
boost::shared_ptr< IncrementalOptimizationContext > context
Physics-independent incremental optimization API.
constexpr int plasticLogarithmicStretchCoordinateSize
MoFEMErrorCode validateEquilibratedMechanicalValueScope(EshelbianCore &ep)
boost::shared_ptr< IncrementalOptimizationContext > createPlasticIncrementalOptimizationContext(EshelbianCore &ep, SmartPetscObj< TS > ts, SmartPetscObj< Vec > state)
MoFEMErrorCode testIncrementalOptimizationLayout(EshelbianCore &ep, TS ts, Vec state)
MoFEMErrorCode solveEquilibriumStateTS(TopologicalTAOCtxImpl *ctx_impl_ptr)
MoFEMErrorCode testIncrementalOptimizationConstraintDerivative(EshelbianCore &ep, TS ts, Vec state)
MoFEMErrorCode testIncrementalOptimizationTransaction(EshelbianCore &ep, TS ts, Vec state)
MoFEMErrorCode evaluateEquilibratedMechanicalValue(EshelbianCore &ep, TS ts, double &value)
MoFEMErrorCode testIncrementalOptimizationObjectiveDerivative(EshelbianCore &ep, TS ts, Vec state)
MoFEMErrorCode evaluatePlasticConjugateWork(EshelbianCore &ep, const FTensor::Tensor2_symmetric< double, SPACE_DIM > &t_direction, double &conjugate_work)
MoFEMErrorCode testEquilibratedMechanicalValue(EshelbianCore &ep, TS ts, Vec state)
PlasticIncrementalOptimizationProblem & getPlasticIncrementalOptimizationProblem(const boost::shared_ptr< IncrementalOptimizationContext > &context)
MoFEMErrorCode addCalculatePlasticLogarithmicStretchFieldValues(boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline, const std::string &field_name, boost::shared_ptr< MatrixDouble > tensor_values, const EntityType zero_type, SmartPetscObj< DM > data_dm, SmartPetscObj< Vec > data_vector)
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
constexpr auto field_name
double getDissipationRegularizationEpsilon() const
double dissipationRegularizationEpsilon
double initialYieldStress
SmartPetscObj< TS > timeSolver
MoFEMErrorCode initialiseInequalityMultipliers(DM constraint_dm, Vec multipliers) override
MoFEMErrorCode assembleConservativeGradient(Vec smooth_gradient) override
const std::string & getPlasticKappaFieldName() const
double getIsotropicHardeningModulus() const
const std::string & getVolumeElementName() const
MoFEMErrorCode initialiseReferenceControl(Vec committed_control, Vec reference_control) override
MoFEMErrorCode createControlData(SmartPetscObj< Vec > &committed_control, SmartPetscObj< Vec > &candidate_control) override
const std::string & getPlasticFlowFieldName() const
SmartPetscObj< Vec > fallbackJacobianSmoothGradient
MoFEMErrorCode assembleObjectiveGradient(Vec control, Vec smooth_gradient, Vec objective_gradient) override
MoFEMErrorCode solveState(Vec state, EquilibriumSolveReport &report) override
MoFEMErrorCode evaluateInequalityConstraints(Vec control, Vec constraints) override
MoFEMErrorCode commit(Vec solution, Vec equilibrated_state, Vec committed_control, Vec candidate_control, Vec reference_control) override
std::string getName() const override
MoFEMErrorCode evaluateConservativeValue(double &value) override
MoFEMErrorCode validateSolution(DM constraint_dm, Vec control, Vec smooth_gradient, Vec inequality_multipliers, PetscReal gradient_tolerance, PetscReal constraint_tolerance, std::string &diagnostics) override
DM getControlDM() const override
MoFEMErrorCode configureConstraintDM(DM constraint_dm) override
double getInitialYieldStress() const
MoFEMErrorCode evaluateDissipation(Vec control, double &value) override
MoFEMErrorCode restoreState(Vec state) override
MoFEMErrorCode assembleInequalityJacobian(Vec control, Vec smooth_gradient, Mat jacobian) override
MoFEMErrorCode assembleInequalityJacobianWithoutSmoothGradient(Vec control, Mat jacobian) override
MoFEMErrorCode addConstitutiveGeometryOperators(boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline) const
MoFEMErrorCode validate() override
double isotropicHardeningModulus