1 #ifndef __FULLSPACE_STEP_H__ 2 #define __FULLSPACE_STEP_H__ 4 #include "ROL_Types.hpp" 5 #include "ROL_Step.hpp" 6 #include "ROL_LineSearch.hpp" 9 #include "ROL_GradientStep.hpp" 10 #include "ROL_NonlinearCGStep.hpp" 11 #include "ROL_SecantStep.hpp" 12 #include "ROL_NewtonStep.hpp" 13 #include "ROL_NewtonKrylovStep.hpp" 18 #include <deal.II/lac/precondition.h> 19 #include <deal.II/lac/solver_gmres.h> 20 #include <deal.II/lac/solver_control.h> 22 #include "optimization/rol_to_dealii_vector.hpp" 23 #include "optimization/dealii_solver_rol_vector.hpp" 24 #include "optimization/flow_constraints.hpp" 25 #include "optimization/rol_objective.hpp" 27 #include "optimization/kkt_operator.hpp" 28 #include "optimization/kkt_birosghattas_preconditioners.hpp" 116 ROL::ParameterList &parlist,
117 const ROL::Ptr<LineSearch<Real> > &lineSearch = ROL::nullPtr,
118 const ROL::Ptr<Secant<Real> > &secant = ROL::nullPtr);
123 Vector<Real> &lagrangian_gradient,
124 const Vector<Real> &design_variables,
125 const Vector<Real> &lagrange_mult,
126 const Vector<Real> &objective_gradient,
127 Constraint<Real> &equal_constraints)
const;
135 Vector<Real> &lagrange_mult,
136 const Vector<Real> &design_variables,
137 const Vector<Real> &objective_gradient,
138 Constraint<Real> &equal_constraints)
const;
145 Vector<Real> &design_variables,
146 const Vector<Real> &gradient,
147 Vector<Real> &lagrange_mult,
148 const Vector<Real> &equal_constraints_values,
149 Objective<Real> &objective,
150 Constraint<Real> &equal_constraints,
151 AlgorithmState<Real> &algo_state )
override;
158 Vector<Real> &design_variables,
159 const Vector<Real> &gradient,
160 Vector<Real> &lagrange_mult,
161 const Vector<Real> &equal_constraints_values,
162 Objective<Real> &objective,
163 Constraint<Real> &equal_constraints,
164 BoundConstraint<Real> &bound_constraints,
165 AlgorithmState<Real> &algo_state )
override;
169 const Vector<Real> &search_direction,
170 const Vector<Real> &lagrange_mult_search_direction,
171 const Vector<Real> &design_variables,
172 const Vector<Real> &objective_gradient,
173 const Vector<Real> &equal_constraints_values,
174 const Vector<Real> &adjoint_jacobian_lagrange,
175 Constraint<Real> &equal_constraints,
179 template<
typename MatrixType,
typename VectorType,
typename PreconditionerType>
182 MatrixType &matrix_A,
183 VectorType &right_hand_side,
184 VectorType &solution,
185 PreconditionerType &preconditioner);
190 Vector<Real> &search_direction,
191 Vector<Real> &lag_search_direction,
192 const Vector<Real> &design_variables,
193 const Vector<Real> &lagrange_mult,
194 Objective<Real> &objective,
195 Constraint<Real> &equal_constraints);
201 Vector<Real> &search_direction,
202 const Vector<Real> &design_variables,
203 const Vector<Real> &lagrange_mult,
204 Objective<Real> &objective,
205 Constraint<Real> &equal_constraints,
206 AlgorithmState<Real> &algo_state )
override;
210 Vector<Real> &search_direction,
211 const Vector<Real> &design_variables,
212 const Vector<Real> &lagrange_mult,
213 Objective<Real> &objective,
214 Constraint<Real> &equal_constraints,
215 BoundConstraint<Real> &bound_constraints,
216 AlgorithmState<Real> &algo_state )
override;
231 Vector<Real> &design_variables,
232 Vector<Real> &lagrange_mult,
233 const Vector<Real> &search_direction,
234 Objective<Real> &objective,
235 Constraint<Real> &equal_constraints,
236 AlgorithmState<Real> &algo_state )
override;
252 Vector<Real> &design_variables,
253 Vector<Real> &lagrange_mult,
254 const Vector<Real> &search_direction,
255 Objective<Real> &objective,
256 Constraint<Real> &equal_constraints,
257 BoundConstraint< Real > &bound_constraints,
258 AlgorithmState<Real> &algo_state )
override;
270 std::string
printName(
void )
const override;
279 std::string
print( AlgorithmState<Real> & algo_state,
bool print_header =
false )
const override;
Real penalty_value_
Penalty value of the augmented Lagrangian.
std::string print(AlgorithmState< Real > &algo_state, bool print_header=false) const override
Print iterate status.
virtual void initialize(Vector< Real > &design_variables, const Vector< Real > &gradient, Vector< Real > &lagrange_mult, const Vector< Real > &equal_constraints_values, Objective< Real > &objective, Constraint< Real > &equal_constraints, AlgorithmState< Real > &algo_state) override
Initialize with objective and equality constraints.
ROL::Ptr< Secant< Real > > secant_
Secant object (used for quasi-Newton preconditioner).
ROL::Ptr< LineSearch< Real > > lineSearch_
Line-search object for globalization.
std::string preconditioner_name_
Preconditioner name.
ROL::Ptr< Vector< Real > > lagrange_mult_search_direction_
Lagrange multipliers search direction.
double search_adj_norm
Norm of the adjoint search direction.
ROL::Ptr< Vector< Real > > lagrange_variable_cloner_
Vector used to clone a vector like the Lagrange variables' / constraints size and parallel distributi...
bool acceptLastAlpha_
Whether the last line search's step length is accepted when the maximum iterations is reached...
ROL::Ptr< Objective< Real > > merit_function_
Merit function used within the line search.
int verbosity_
Print verbosity.
std::string printHeader(void) const override
Print iterate header.
std::string secantName_
Name of secant used as a reduced-Hessian preconditioner.
std::vector< double > solve_linear(MatrixType &matrix_A, VectorType &right_hand_side, VectorType &solution, PreconditionerType &preconditioner)
Solve a linear system using deal.II's F/GMRES solver.
std::string lineSearchName_
Line search name.
void compute(Vector< Real > &search_direction, const Vector< Real > &design_variables, const Vector< Real > &lagrange_mult, Objective< Real > &objective, Constraint< Real > &equal_constraints, AlgorithmState< Real > &algo_state) override
Computes the search directions.
ROL::ParameterList parlist_
Parameter list.
ESecant esec_
Enum determines type of secant to use as reduced Hessian preconditioner.
dealii::ConditionalOStream pcout
Parallel std::cout that only outputs on mpi_rank==0.
FullSpace_BirosGhattas(ROL::ParameterList &parlist, const ROL::Ptr< LineSearch< Real > > &lineSearch=ROL::nullPtr, const ROL::Ptr< Secant< Real > > &secant=ROL::nullPtr)
< See base class.
int n_linesearches
Number of line searches used in the last design cycle.
bool use_approximate_full_space_preconditioner_
Use the Tilde{P} version of Biros and Ghattas' preconditioner.
ROL::Ptr< Vector< Real > > previous_reduced_gradient_
Store previous gradient for secant method.
ECurvatureCondition econd_
Enum determines type of curvature condition.
std::vector< Real > solve_KKT_system(Vector< Real > &search_direction, Vector< Real > &lag_search_direction, const Vector< Real > &design_variables, const Vector< Real > &lagrange_mult, Objective< Real > &objective, Constraint< Real > &equal_constraints)
Setup and solve the large KKT system.
Real computeAugmentedLagrangianPenalty(const Vector< Real > &search_direction, const Vector< Real > &lagrange_mult_search_direction, const Vector< Real > &design_variables, const Vector< Real > &objective_gradient, const Vector< Real > &equal_constraints_values, const Vector< Real > &adjoint_jacobian_lagrange, Constraint< Real > &equal_constraints, const Real offset)
Evaluates the penalty of the augmented Lagrangian function using Biros and Ghattas' lower bound...
void computeInitialLagrangeMultiplier(Vector< Real > &lagrange_mult, const Vector< Real > &design_variables, const Vector< Real > &objective_gradient, Constraint< Real > &equal_constraints) const
void computeLagrangianGradient(Vector< Real > &lagrangian_gradient, const Vector< Real > &design_variables, const Vector< Real > &lagrange_mult, const Vector< Real > &objective_gradient, Constraint< Real > &equal_constraints) const
double search_ctl_norm
Norm of the control search direction.
double search_sim_norm
Norm of the simulation search direction.
std::string printName(void) const override
Print step name.
void update(Vector< Real > &design_variables, Vector< Real > &lagrange_mult, const Vector< Real > &search_direction, Objective< Real > &objective, Constraint< Real > &equal_constraints, AlgorithmState< Real > &algo_state) override
Update step, if successful.
ROL::Ptr< Vector< Real > > design_variable_cloner_
Vector used to clone a vector like the design variables' size and parallel distribution.
ELineSearch els_
Enum determines type of line search.