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
virtual bool solve() override
Moose::PetscSupport::PetscOptions _petsc_options
static InputParameters validParams()
Mat _gradient_e
Equality constraint gradient.
OptimizationReporterBase * getObjFunction()
function to get the objective reporter
const libMesh::Parallel::Communicator _my_comm
Communicator used for operations.
Tao _tao
Tao optimization object.
static PetscErrorCode inequalityFunctionWrapper(Tao tao, Vec x, Vec ci, void *ctx)
PetscErrorCode taoSolve()
Here is where we call tao and solve.
PetscErrorCode taoALDestroy()
Used for destroying petsc structures when using the ALMM algorithm.
Vec _ce
Equality constraint vector.
Vec _ci
Inequality constraint vector.
Mat _gradient_i
Inequality constraint gradient.
std::vector< int > _hess_iterate_vec
Hessian solves per iteration.
static PetscErrorCode applyHessianWrapper(Mat H, Vec s, Vec Hs)
static PetscErrorCode variableBoundsWrapper(Tao, Vec xl, Vec xu, void *ctx)
static PetscErrorCode objectiveAndGradientFunctionWrapper(Tao tao, Vec x, Real *objective, Vec gradient, void *ctx)
OptimizeSolve(Executioner &ex)
Base class for optimization objects, implements routines for calculating misfit.
bool _verbose
control optimization executioner output
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.
const OptimizationReporterBase & getOptimizationReporter() const
virtual PetscErrorCode applyHessian(libMesh::PetscVector< Number > &s, libMesh::PetscVector< Number > &Hs)
Hessian application routine.
const std::vector< double > x
Real f(Real x)
Test function for Brents method.
std::unique_ptr< libMesh::PetscVector< Number > > _parameters
Parameters (solution) given to TAO.
const ExecFlagEnum & _solve_on
List of execute flags for when to solve the system.
OptimizationReporterBase * _obj_function
objective function defining objective, gradient, and hessian
static PetscErrorCode monitor(Tao tao, void *ctx)
std::vector< int > _grad_iterate_vec
gradient solves per iteration
std::vector< double > _f_vec
objective value per iteration
static PetscErrorCode inequalityGradientFunctionWrapper(Tao tao, Vec x, Mat gradient_i, Mat gradient_ipre, void *ctx)
TaoSolverEnum
Enum of tao solver types.
std::vector< int > _function_solve_vec
total solves per iteration
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Mat _hessian
Hessian (matrix) - usually a matrix-free representation.
std::vector< double > _cnorm_vec
infeasibility norm per iteration
static PetscErrorCode equalityGradientFunctionWrapper(Tao tao, Vec x, Mat gradient_e, Mat gradient_epre, void *ctx)
std::vector< double > _xdiff_vec
step length per iteration
std::vector< double > _gnorm_vec
gradient norm per iteration
enum OptimizeSolve::TaoSolverEnum _tao_solver_enum
std::vector< int > _total_iterate_vec
total solves per iteration
static PetscErrorCode hessianFunctionWrapper(Tao tao, Vec x, Mat hessian, Mat pc, void *ctx)
SolverParams _solver_params
bool _output_opt_iters
Use time step as the iteration counter for purposes of outputting.
virtual void gradientFunction(libMesh::PetscVector< Number > &gradient)
Gradient routine.
static PetscErrorCode equalityFunctionWrapper(Tao tao, Vec x, Vec ce, void *ctx)
solveObject to interface with Petsc Tao
PetscErrorCode taoALCreate()
Used for creating petsc structures when using the ALMM algorithm.
std::vector< int > _obj_iterate_vec
number of objective solves per iteration
void setTaoSolutionStatus(double f, int its, double gnorm, double cnorm, double xdiff)
output optimization iteration solve data
virtual Real objectiveFunction()
Objective routine.
virtual PetscErrorCode variableBounds(Tao tao)
Bounds routine.
static PetscErrorCode objectiveFunctionWrapper(Tao tao, Vec x, Real *objective, void *ctx)
dof_id_type _ndof
Number of parameters being optimized.