20#include "libmesh/petsc_vector.h"
21#include "libmesh/petsc_matrix.h"
34 virtual bool solve()
override;
51 std::vector<double> & gnorm,
52 std::vector<int> & obj_iters,
53 std::vector<double> & cnorm,
54 std::vector<int> & grad_iters,
55 std::vector<double> & xdiff,
56 std::vector<int> & hess_iters,
57 std::vector<double> &
f,
58 std::vector<int> & tot_solves)
const;
141 static PetscErrorCode
144 static PetscErrorCode
monitor(Tao tao,
void * ctx);
146 static PetscErrorCode
149 static PetscErrorCode
Real f(Real x)
Test function for Brents method.
const std::vector< double > x
Base class for optimization objects, implements routines for calculating misfit.
solveObject to interface with Petsc Tao
static PetscErrorCode objectiveFunctionWrapper(Tao tao, Vec x, Real *objective, void *ctx)
static PetscErrorCode equalityFunctionWrapper(Tao tao, Vec x, Vec ce, void *ctx)
Mat _gradient_e
Equality constraint gradient.
std::vector< double > _f_vec
objective value per iteration
dof_id_type _ndof
Number of parameters being optimized.
std::vector< int > _grad_iterate_vec
gradient solves per iteration
virtual Real objectiveFunction()
Objective routine.
virtual bool solve() override
Moose::PetscSupport::PetscOptions _petsc_options
const libMesh::Parallel::Communicator _my_comm
Communicator used for operations.
std::vector< int > _obj_iterate_vec
number of objective solves per iteration
static PetscErrorCode monitor(Tao tao, void *ctx)
void getTaoSolutionStatus(std::vector< int > &tot_iters, std::vector< double > &gnorm, std::vector< int > &obj_iters, std::vector< double > &cnorm, std::vector< int > &grad_iters, std::vector< double > &xdiff, std::vector< int > &hess_iters, std::vector< double > &f, std::vector< int > &tot_solves) const
Record tao TaoGetSolutionStatus data for output by a reporter.
Mat _gradient_i
Inequality constraint gradient.
Vec _ce
Equality constraint vector.
std::vector< int > _hess_iterate_vec
Hessian solves per iteration.
virtual PetscErrorCode variableBounds(Tao tao)
Bounds routine.
OptimizationReporterBase * getObjFunction()
function to get the objective reporter
std::vector< double > _xdiff_vec
step length per iteration
virtual void gradientFunction(libMesh::PetscVector< Number > &gradient)
Gradient routine.
std::unique_ptr< libMesh::PetscVector< Number > > _parameters
Parameters (solution) given to TAO.
void setTaoSolutionStatus(double f, int its, double gnorm, double cnorm, double xdiff)
output optimization iteration solve data
const ExecFlagEnum & _solve_on
List of execute flags for when to solve the system.
static PetscErrorCode inequalityGradientFunctionWrapper(Tao tao, Vec x, Mat gradient_i, Mat gradient_ipre, void *ctx)
TaoSolverEnum
Enum of tao solver types.
@ BOUNDED_NEWTON_TRUST_LINE
@ BOUNDED_QUASI_NEWTON_LINE_SEARCH
@ AUGMENTED_LAGRANGIAN_MULTIPLIER_METHOD
@ BOUNDED_NEWTON_TRUST_REGION
@ BOUNDED_CONJUGATE_GRADIENT
@ BOUNDED_QUASI_NEWTON_TRUST_REGION
@ GRADIENT_PROJECTION_CONJUGATE_GRADIENT
@ BOUNDED_NEWTON_LINE_SEARCH
std::vector< int > _total_iterate_vec
total solves per iteration
bool _verbose
control optimization executioner output
static PetscErrorCode applyHessianWrapper(Mat H, Vec s, Vec Hs)
std::vector< double > _cnorm_vec
infeasibility norm per iteration
virtual PetscErrorCode applyHessian(libMesh::PetscVector< Number > &s, libMesh::PetscVector< Number > &Hs)
Hessian application routine.
static PetscErrorCode equalityGradientFunctionWrapper(Tao tao, Vec x, Mat gradient_e, Mat gradient_epre, void *ctx)
static PetscErrorCode inequalityFunctionWrapper(Tao tao, Vec x, Vec ci, void *ctx)
static PetscErrorCode variableBoundsWrapper(Tao, Vec xl, Vec xu, void *ctx)
Mat _hessian
Hessian (matrix) - usually a matrix-free representation.
enum OptimizeSolve::TaoSolverEnum _tao_solver_enum
bool _output_opt_iters
Use time step as the iteration counter for purposes of outputting.
PetscErrorCode taoALCreate()
Used for creating petsc structures when using the ALMM algorithm.
std::vector< int > _function_solve_vec
total solves per iteration
std::vector< double > _gnorm_vec
gradient norm per iteration
const OptimizationReporterBase & getOptimizationReporter() const
static PetscErrorCode hessianFunctionWrapper(Tao tao, Vec x, Mat hessian, Mat pc, void *ctx)
OptimizationReporterBase * _obj_function
objective function defining objective, gradient, and hessian
static InputParameters validParams()
static PetscErrorCode objectiveAndGradientFunctionWrapper(Tao tao, Vec x, Real *objective, Vec gradient, void *ctx)
Tao _tao
Tao optimization object.
PetscErrorCode taoSolve()
Here is where we call tao and solve.
Vec _ci
Inequality constraint vector.
PetscErrorCode taoALDestroy()
Used for destroying petsc structures when using the ALMM algorithm.
SolverParams _solver_params