17 using typename FullNLProblem::Scalar;
18 using typename FullNLProblem::THessian;
19 using typename FullNLProblem::TVector;
24 const std::vector<std::shared_ptr<Form>> &
forms,
25 const std::vector<std::shared_ptr<AugmentedLagrangianForm>> &penalty_forms,
26 const std::shared_ptr<polysolve::linear::Solver> &solver);
30 const std::shared_ptr<utils::PeriodicBoundary> &periodic_bc,
32 const std::vector<std::shared_ptr<Form>> &
forms,
33 const std::vector<std::shared_ptr<AugmentedLagrangianForm>> &penalty_forms,
34 const std::shared_ptr<polysolve::linear::Solver> &solver);
37 virtual double value(
const TVector &
x)
override;
38 virtual void gradient(
const TVector &
x, TVector &gradv)
override;
41 virtual bool is_step_valid(
const TVector &x0,
const TVector &x1)
override;
43 virtual double max_step_size(
const TVector &x0,
const TVector &x1)
override;
45 virtual void post_step(
const polysolve::nonlinear::PostStepData &data)
override;
94 Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic>
P_;
96 std::shared_ptr<polysolve::linear::Solver>
solver_;
std::vector< std::shared_ptr< Form > > & forms()
const int full_size_
Size of the full problem.
StiffnessMatrix R1_
R1 block of the QR decomposition of the constraints matrix.
void line_search_begin(const TVector &x0, const TVector &x1) override
Eigen::PermutationMatrix< Eigen::Dynamic, Eigen::Dynamic > P_
Permutation matrix of the QR decomposition of the constraints matrix.
double normalize_forms() override
StiffnessMatrix Q2_
Q2 block of the QR decomposition of the constraints matrix.
virtual bool is_step_valid(const TVector &x0, const TVector &x1) override
int reduced_size_
Size of the reduced problem.
virtual void post_step(const polysolve::nonlinear::PostStepData &data) override
virtual TVector full_to_reduced_grad(const TVector &full) const
StiffnessMatrix Q2t_
Q2 transpose.
TVector full_to_reduced(const TVector &full) const
virtual void update_quantities(const double t, const TVector &x)
virtual void gradient(const TVector &x, TVector &gradv) override
void init_lagging(const TVector &x) override
virtual bool is_step_collision_free(const TVector &x0, const TVector &x1) override
TVector reduced_to_full(const TVector &reduced) const
void update_lagging(const TVector &x, const int iter_num) override
void update_constraint_values()
std::vector< std::shared_ptr< AugmentedLagrangianForm > > penalty_forms_
virtual double value(const TVector &x) override
StiffnessMatrix Q1_
Q1 block of the QR decomposition of the constraints matrix.
virtual double max_step_size(const TVector &x0, const TVector &x1) override
virtual ~NLProblem()=default
virtual void hessian(const TVector &x, THessian &hessian) override
std::shared_ptr< polysolve::linear::Solver > solver_
void solution_changed(const TVector &new_x) override
std::shared_ptr< FullNLProblem > penalty_problem_
int num_penalty_constraints_
CurrentSize current_size_
Current size of the problem (either full or reduced size)
TVector Q1R1iTb_
Q1_ * (R1_.transpose().triangularView<Eigen::Upper>().solve(constraint_values_))
void full_hessian_to_reduced_hessian(StiffnessMatrix &hessian) const
Eigen::SparseMatrix< double, Eigen::ColMajor > StiffnessMatrix