12#ifndef MOFEM_INCREMENTAL_OPTIMIZATION_HPP
13#define MOFEM_INCREMENTAL_OPTIMIZATION_HPP
69 SmartPetscObj<Vec> &committed_control,
70 SmartPetscObj<Vec> &candidate_control) = 0;
76 virtual MoFEMErrorCode
81 Vec committed_control, Vec reference_control) = 0;
89 virtual MoFEMErrorCode
93 Vec control, Vec smooth_gradient, Vec objective_gradient) = 0;
97 Vec control, Vec smooth_gradient, Mat jacobian) = 0;
100 virtual MoFEMErrorCode
106 DM constraint_dm, Vec control, Vec smooth_gradient,
107 Vec inequality_multipliers, PetscReal gradient_tolerance,
108 PetscReal constraint_tolerance, std::string &diagnostics) = 0;
116 virtual MoFEMErrorCode
commit(Vec solution, Vec equilibrated_state,
117 Vec committed_control, Vec candidate_control,
118 Vec reference_control) = 0;
153 boost::shared_ptr<IncrementalOptimizationProblem>
problem;
208boost::shared_ptr<IncrementalOptimizationContext>
210 boost::shared_ptr<IncrementalOptimizationProblem> problem,
211 SmartPetscObj<Vec>
state);
215 const boost::shared_ptr<IncrementalOptimizationContext> &
context,
220 const boost::shared_ptr<IncrementalOptimizationContext> &
context,
226 const boost::shared_ptr<IncrementalOptimizationContext> &
context,
227 Vec control, PetscReal &objective, Vec objective_gradient,
231 const boost::shared_ptr<IncrementalOptimizationContext> &
context,
232 Vec control, Vec constraints);
236 const boost::shared_ptr<IncrementalOptimizationContext> &
context,
241 const boost::shared_ptr<IncrementalOptimizationContext> &
context,
242 Vec control, Mat jacobian);
246 const boost::shared_ptr<IncrementalOptimizationContext> &
context,
boost::shared_ptr< IncrementalOptimizationContext > context
boost::shared_ptr< IncrementalOptimizationContext > createIncrementalOptimizationContext(boost::shared_ptr< IncrementalOptimizationProblem > problem, SmartPetscObj< Vec > state)
std::function< MoFEMErrorCode(Vec, EquilibriumSolveReport &)> EquilibriumSolveFunction
MoFEMErrorCode solveIncrementalOptimizationTAO(const boost::shared_ptr< IncrementalOptimizationContext > &context, Vec state)
MoFEMErrorCode evaluateIncrementalObjectiveAndGradient(const boost::shared_ptr< IncrementalOptimizationContext > &context, Vec control, IncrementalObjectiveEvaluation &evaluation)
MoFEMErrorCode assembleIncrementalOptimizationInequalityJacobianFromEvaluation(const boost::shared_ptr< IncrementalOptimizationContext > &context, Vec control, const IncrementalObjectiveEvaluation &evaluation, Mat jacobian)
MoFEMErrorCode evaluateIncrementalOptimizationTAOObjectiveAndGradient(const boost::shared_ptr< IncrementalOptimizationContext > &context, Vec control, PetscReal &objective, Vec objective_gradient, IncrementalObjectiveEvaluation &evaluation)
MoFEMErrorCode evaluateIncrementalObjective(const boost::shared_ptr< IncrementalOptimizationContext > &context, Vec control, IncrementalObjectiveEvaluation &evaluation)
MoFEMErrorCode assembleIncrementalOptimizationInequalityJacobian(const boost::shared_ptr< IncrementalOptimizationContext > &context, Vec control, Mat jacobian)
MoFEMErrorCode evaluateIncrementalOptimizationInequalityConstraints(const boost::shared_ptr< IncrementalOptimizationContext > &context, Vec control, Vec constraints)
EquilibriumSolveStatus status
MoFEMErrorCode stateSolveError
SmartPetscObj< Vec > objectiveGradient
double objectiveGradientNorm
EquilibriumSolveStatus stateStatus
double smoothGradientNorm
SmartPetscObj< Vec > smoothGradient
Generic transaction/cache data; contains no constitutive state.
SmartPetscObj< Vec > inequalityConstraints
SmartPetscObj< DM > constraintDM
MoFEMErrorCode rollbackTrial()
double equilibriumTolerance
IncrementalObjectiveEvaluation cachedEvaluation
SmartPetscObj< Vec > baselineState
SmartPetscObj< Vec > candidateControl
SmartPetscObj< Vec > objectiveGradient
SmartPetscObj< Vec > cachedControl
SmartPetscObj< Vec > equilibratedState
boost::shared_ptr< IncrementalOptimizationProblem > problem
EquilibriumSolveFunction stateSolve
double gradientAssemblySeconds
SmartPetscObj< Vec > gradient
double equilibriumSeconds
PetscInt rejectedTrialCount
SmartPetscObj< Mat > inequalityJacobian
SmartPetscObj< Vec > committedControl
SmartPetscObj< Vec > lastValidState
SmartPetscObj< Vec > referenceControl
SmartPetscObj< Vec > cachedState
double baselineConservativeValue
virtual MoFEMErrorCode assembleObjectiveGradient(Vec control, Vec smooth_gradient, Vec objective_gradient)=0
virtual MoFEMErrorCode commit(Vec solution, Vec equilibrated_state, Vec committed_control, Vec candidate_control, Vec reference_control)=0
virtual MoFEMErrorCode evaluateConservativeValue(double &value)=0
virtual MoFEMErrorCode initialiseReferenceControl(Vec committed_control, Vec reference_control)=0
virtual MoFEMErrorCode restoreState(Vec state)=0
virtual MoFEMErrorCode initialiseInequalityMultipliers(DM constraint_dm, Vec multipliers)=0
virtual MoFEMErrorCode evaluateDissipation(Vec control, double &value)=0
virtual std::string getName() const =0
virtual MoFEMErrorCode validate()=0
virtual MoFEMErrorCode assembleConservativeGradient(Vec smooth_gradient)=0
virtual MoFEMErrorCode configureConstraintDM(DM constraint_dm)=0
virtual MoFEMErrorCode createControlData(SmartPetscObj< Vec > &committed_control, SmartPetscObj< Vec > &candidate_control)=0
virtual MoFEMErrorCode assembleInequalityJacobianWithoutSmoothGradient(Vec control, Mat jacobian)=0
virtual MoFEMErrorCode validateSolution(DM constraint_dm, Vec control, Vec smooth_gradient, Vec inequality_multipliers, PetscReal gradient_tolerance, PetscReal constraint_tolerance, std::string &diagnostics)=0
virtual MoFEMErrorCode solveState(Vec state, EquilibriumSolveReport &report)=0
virtual ~IncrementalOptimizationProblem()=default
virtual MoFEMErrorCode evaluateInequalityConstraints(Vec control, Vec constraints)=0
virtual DM getControlDM() const =0
virtual MoFEMErrorCode assembleInequalityJacobian(Vec control, Vec smooth_gradient, Mat jacobian)=0