20 #ifndef LIBMESH_TAO_OPTIMIZATION_SOLVER_H 21 #define LIBMESH_TAO_OPTIMIZATION_SOLVER_H 23 #include "libmesh/libmesh_config.h" 26 #if defined(LIBMESH_HAVE_PETSC_TAO) && !defined(LIBMESH_USE_COMPLEX_NUMBERS) 29 #include "libmesh/petsc_macro.h" 30 #include "libmesh/optimization_solver.h" 34 # define LIBMESH_SAW_I 38 # undef I // Avoid complex.h contamination 88 virtual void clear () noexcept override;
93 virtual
void init () override;
103 virtual void solve ()
override;
161 #endif // #if defined(LIBMESH_HAVE_PETSC_TAO) && !defined(LIBMESH_USE_COMPLEX_NUMBERS) 162 #endif // LIBMESH_TAO_OPTIMIZATION_SOLVER_H friend PetscErrorCode __libmesh_tao_inequality_constraints(Tao tao, Vec x, Vec cineq, void *ctx)
This class provides an interface to the Tao optimization solvers.
virtual void solve() override
Call the Tao solver.
friend PetscErrorCode __libmesh_tao_hessian(Tao tao, Vec x, Mat h, Mat pc, void *ctx)
OptimizationSystem sys_type
The type of system that we use in conjunction with this solver.
friend PetscErrorCode __libmesh_tao_equality_constraints(Tao tao, Vec x, Vec ce, void *ctx)
virtual int get_converged_reason() override
The libMesh namespace provides an interface to certain functionality in the library.
virtual void print_converged_reason() override
Prints a useful message about why the latest optimization solve con(di)verged.
friend PetscErrorCode __libmesh_tao_equality_constraints_jacobian(Tao tao, Vec x, Mat J, Mat Jpre, void *ctx)
PetscErrorCode __libmesh_tao_gradient(Tao tao, Vec x, Vec g, void *ctx)
PetscErrorCode __libmesh_tao_hessian(Tao tao, Vec x, Mat h, Mat pc, void *ctx)
Tao _tao
Optimization solver context.
TaoOptimizationSolver(sys_type &system)
Constructor.
friend PetscErrorCode __libmesh_tao_inequality_constraints_jacobian(Tao tao, Vec x, Mat J, Mat Jpre, void *ctx)
This System subclass enables us to assemble an objective function, gradient, Hessian and bounds for o...
friend PetscErrorCode __libmesh_tao_objective(Tao tao, Vec x, PetscReal *objective, void *ctx)
friend PetscErrorCode __libmesh_tao_gradient(Tao tao, Vec x, Vec g, void *ctx)
PetscErrorCode __libmesh_tao_objective(Tao tao, Vec x, PetscReal *objective, void *ctx)
virtual void clear() noexcept override
Release all memory and clear data structures.
const sys_type & system() const
~TaoOptimizationSolver()
Destructor.
TaoConvergedReason _reason
Store the reason for Tao convergence/divergence for use even after _tao has been cleared.
This base class can be inherited from to provide interfaces to optimization solvers from different pa...
PetscErrorCode __libmesh_tao_equality_constraints_jacobian(Tao tao, Vec x, Mat J, Mat Jpre, void *ctx)
PetscErrorCode __libmesh_tao_equality_constraints(Tao tao, Vec x, Vec ce, void *ctx)
PetscErrorCode __libmesh_tao_inequality_constraints_jacobian(Tao tao, Vec x, Mat J, Mat Jpre, void *ctx)
PetscErrorCode __libmesh_tao_inequality_constraints(Tao tao, Vec x, Vec cineq, void *ctx)
virtual void init() override
Initialize data structures if not done so already.
virtual void get_dual_variables() override
Get the current values of dual variables associated with inequality and equality constraints.