|
PolyFEM
|
#include <NLProblem.hpp>
Public Member Functions | |
| NLProblem (const int full_size, const std::shared_ptr< utils::PeriodicBoundary > &periodic_bc, const double t, const std::vector< std::shared_ptr< Form > > &forms, const std::vector< std::shared_ptr< AugmentedLagrangianForm > > &penalty_forms, const std::shared_ptr< polysolve::linear::Solver > &solver) | |
| virtual | ~NLProblem ()=default |
| virtual double | value (const TVector &x) override |
| virtual void | gradient (const TVector &x, TVector &gradv) override |
| virtual void | hessian (const TVector &x, THessian &hessian) override |
| virtual bool | is_step_valid (const TVector &x0, const TVector &x1) override |
| virtual bool | is_step_collision_free (const TVector &x0, const TVector &x1) override |
| virtual double | max_step_size (const TVector &x0, const TVector &x1) override |
| void | line_search_begin (const TVector &x0, const TVector &x1) override |
| virtual void | post_step (const polysolve::nonlinear::PostStepData &data) override |
| void | solution_changed (const TVector &new_x) override |
| void | init_lagging (const TVector &x) override |
| void | update_lagging (const TVector &x, const int iter_num) override |
| virtual void | update_quantities (const double t, const TVector &x) |
| int | full_size () const |
| int | reduced_size () const |
| void | use_full_size () |
| void | use_reduced_size () |
| TVector | full_to_reduced (const TVector &full) const |
| virtual TVector | full_to_reduced_grad (const TVector &full) const |
| TVector | reduced_to_full (const TVector &reduced) const |
| void | full_hessian_to_reduced_hessian (StiffnessMatrix &hessian) const |
| double | normalize_forms () override |
Public Member Functions inherited from polyfem::solver::FullNLProblem | |
| FullNLProblem (const std::vector< std::shared_ptr< Form > > &forms) | |
| virtual | ~FullNLProblem ()=default |
| virtual void | init (const TVector &x0) override |
| virtual void | line_search_end () override |
| virtual void | set_project_to_psd (bool val) override |
| int | max_lagging_iterations () const |
| bool | uses_lagging () const |
| std::vector< std::shared_ptr< Form > > & | forms () |
| virtual bool | stop (const TVector &x) override |
| void | finish () |
Protected Types | |
| enum class | CurrentSize { FULL_SIZE , REDUCED_SIZE } |
Protected Member Functions | |
| NLProblem (const int full_size, const std::vector< std::shared_ptr< Form > > &forms, const std::vector< std::shared_ptr< AugmentedLagrangianForm > > &penalty_forms, const std::shared_ptr< polysolve::linear::Solver > &solver) | |
| int | current_size () const |
| void | setup_constraints () |
| void | update_constraint_values () |
Protected Attributes | |
| const int | full_size_ |
| Size of the full problem. | |
| int | reduced_size_ |
| Size of the reduced problem. | |
| CurrentSize | current_size_ |
| Current size of the problem (either full or reduced size) | |
| double | t_ |
| std::vector< std::shared_ptr< AugmentedLagrangianForm > > | penalty_forms_ |
| StiffnessMatrix | Q1_ |
| Q1 block of the QR decomposition of the constraints matrix. | |
| StiffnessMatrix | Q2_ |
| Q2 block of the QR decomposition of the constraints matrix. | |
| StiffnessMatrix | Q2t_ |
| Q2 transpose. | |
| StiffnessMatrix | R1_ |
| R1 block of the QR decomposition of the constraints matrix. | |
| Eigen::PermutationMatrix< Eigen::Dynamic, Eigen::Dynamic > | P_ |
| Permutation matrix of the QR decomposition of the constraints matrix. | |
| TVector | Q1R1iTb_ |
| Q1_ * (R1_.transpose().triangularView<Eigen::Upper>().solve(constraint_values_)) | |
| std::shared_ptr< polysolve::linear::Solver > | solver_ |
| std::shared_ptr< FullNLProblem > | penalty_problem_ |
| int | num_penalty_constraints_ |
Protected Attributes inherited from polyfem::solver::FullNLProblem | |
| std::vector< std::shared_ptr< Form > > | forms_ |
Definition at line 14 of file NLProblem.hpp.
|
strongprotected |
| Enumerator | |
|---|---|
| FULL_SIZE | |
| REDUCED_SIZE | |
Definition at line 74 of file NLProblem.hpp.
|
protected |
Definition at line 96 of file NLProblem.cpp.
References setup_constraints(), and use_reduced_size().
| polyfem::solver::NLProblem::NLProblem | ( | const int | full_size, |
| const std::shared_ptr< utils::PeriodicBoundary > & | periodic_bc, | ||
| const double | t, | ||
| const std::vector< std::shared_ptr< Form > > & | forms, | ||
| const std::vector< std::shared_ptr< AugmentedLagrangianForm > > & | penalty_forms, | ||
| const std::shared_ptr< polysolve::linear::Solver > & | solver | ||
| ) |
Definition at line 111 of file NLProblem.cpp.
References setup_constraints(), and use_reduced_size().
|
virtualdefault |
|
inlineprotected |
Definition at line 80 of file NLProblem.hpp.
References current_size_, full_size(), FULL_SIZE, and reduced_size().
Referenced by full_to_reduced(), polyfem::solver::NLHomoProblem::gradient(), gradient(), hessian(), init_lagging(), is_step_collision_free(), is_step_valid(), line_search_begin(), max_step_size(), post_step(), reduced_to_full(), solution_changed(), update_lagging(), polyfem::solver::NLHomoProblem::value(), and value().
| void polyfem::solver::NLProblem::full_hessian_to_reduced_hessian | ( | StiffnessMatrix & | hessian | ) | const |
Definition at line 627 of file NLProblem.cpp.
References hessian(), penalty_forms_, Q2_, Q2t_, and value().
Referenced by hessian().
|
inline |
Definition at line 56 of file NLProblem.hpp.
References full_size_.
Referenced by current_size(), polyfem::solver::NLHomoProblem::full_hessian_to_reduced_hessian(), full_to_reduced(), polyfem::solver::NLHomoProblem::gradient(), gradient(), hessian(), init_lagging(), is_step_collision_free(), is_step_valid(), line_search_begin(), max_step_size(), post_step(), reduced_to_full(), solution_changed(), polyfem::solver::ALSolver::solve_al(), polyfem::solver::ALSolver::solve_reduced(), update_lagging(), polyfem::solver::NLHomoProblem::value(), and value().
| NLProblem::TVector polyfem::solver::NLProblem::full_to_reduced | ( | const TVector & | full | ) | const |
Definition at line 571 of file NLProblem.cpp.
References current_size(), full_size(), Q1R1iTb_, Q2_, Q2t_, reduced_size(), and solver_.
Referenced by polyfem::solver::NLHomoProblem::extended_to_reduced(), polyfem::solver::NLHomoProblem::full_to_reduced(), polyfem::solver::ALSolver::solve_al(), polyfem::solver::ALSolver::solve_reduced(), and polyfem::State::solve_tensor_nonlinear().
|
virtual |
Reimplemented in polyfem::solver::NLHomoProblem.
Definition at line 593 of file NLProblem.cpp.
References penalty_forms_, and Q2t_.
Referenced by polyfem::solver::NLHomoProblem::extended_to_reduced_grad(), and polyfem::solver::NLHomoProblem::full_to_reduced_grad().
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Reimplemented in polyfem::solver::NLHomoProblem.
Definition at line 507 of file NLProblem.cpp.
References current_size(), full_size(), polyfem::solver::FullNLProblem::gradient(), penalty_forms_, penalty_problem_, Q2t_, reduced_to_full(), and x.
Referenced by polyfem::State::solve_tensor_nonlinear().
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Reimplemented in polyfem::solver::NLHomoProblem.
Definition at line 526 of file NLProblem.cpp.
References current_size(), full_hessian_to_reduced_hessian(), full_size(), polyfem::solver::FullNLProblem::hessian(), hessian(), penalty_problem_, reduced_to_full(), and x.
Referenced by full_hessian_to_reduced_hessian(), and hessian().
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Definition at line 426 of file NLProblem.cpp.
References current_size(), full_size(), polyfem::solver::FullNLProblem::init_lagging(), penalty_problem_, reduced_to_full(), and x.
Referenced by polyfem::solver::NLHomoProblem::init_lagging(), and polyfem::State::solve_tensor_nonlinear().
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Reimplemented in polyfem::solver::NLHomoProblem.
Definition at line 484 of file NLProblem.cpp.
References current_size(), full_size(), polyfem::solver::FullNLProblem::is_step_collision_free(), penalty_problem_, and reduced_to_full().
Referenced by polyfem::solver::NLHomoProblem::is_step_collision_free(), polyfem::solver::ALSolver::solve_al(), and polyfem::solver::ALSolver::solve_reduced().
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Reimplemented in polyfem::solver::NLHomoProblem.
Definition at line 474 of file NLProblem.cpp.
References current_size(), full_size(), polyfem::solver::FullNLProblem::is_step_valid(), penalty_problem_, and reduced_to_full().
Referenced by polyfem::solver::NLHomoProblem::is_step_valid(), polyfem::solver::ALSolver::solve_al(), and polyfem::solver::ALSolver::solve_reduced().
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Definition at line 456 of file NLProblem.cpp.
References current_size(), full_size(), polyfem::solver::FullNLProblem::line_search_begin(), penalty_problem_, and reduced_to_full().
Referenced by polyfem::solver::NLHomoProblem::line_search_begin(), polyfem::solver::ALSolver::solve_al(), and polyfem::solver::ALSolver::solve_reduced().
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Reimplemented in polyfem::solver::NLHomoProblem.
Definition at line 464 of file NLProblem.cpp.
References current_size(), full_size(), polyfem::solver::FullNLProblem::max_step_size(), penalty_problem_, and reduced_to_full().
Referenced by polyfem::solver::NLHomoProblem::max_step_size().
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Definition at line 128 of file NLProblem.cpp.
Referenced by polyfem::solver::ALSolver::solve_al(), polyfem::solver::ALSolver::solve_reduced(), and polyfem::State::solve_tensor_nonlinear().
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Reimplemented in polyfem::solver::NLHomoProblem.
Definition at line 550 of file NLProblem.cpp.
References current_size(), full_size(), penalty_problem_, polyfem::solver::FullNLProblem::post_step(), and reduced_to_full().
Referenced by polyfem::solver::NLHomoProblem::post_step().
|
inline |
Definition at line 57 of file NLProblem.hpp.
References reduced_size_.
Referenced by current_size(), polyfem::solver::NLHomoProblem::extended_hessian_to_reduced_hessian(), polyfem::solver::NLHomoProblem::extended_to_reduced(), polyfem::solver::NLHomoProblem::extended_to_reduced_grad(), polyfem::solver::NLHomoProblem::full_hessian_to_reduced_hessian(), full_to_reduced(), polyfem::solver::NLHomoProblem::full_to_reduced(), polyfem::solver::NLHomoProblem::full_to_reduced_grad(), polyfem::solver::NLHomoProblem::init_lagging(), polyfem::solver::NLHomoProblem::is_step_collision_free(), polyfem::solver::NLHomoProblem::is_step_valid(), polyfem::solver::NLHomoProblem::line_search_begin(), polyfem::solver::NLHomoProblem::max_step_size(), polyfem::solver::NLHomoProblem::post_step(), polyfem::solver::NLHomoProblem::reduced_to_disp_grad(), polyfem::solver::NLHomoProblem::reduced_to_extended(), polyfem::solver::NLHomoProblem::reduced_to_full(), polyfem::solver::NLHomoProblem::solution_changed(), polyfem::solver::ALSolver::solve_al(), polyfem::solver::NLHomoProblem::update_lagging(), and polyfem::solver::NLHomoProblem::update_quantities().
| NLProblem::TVector polyfem::solver::NLProblem::reduced_to_full | ( | const TVector & | reduced | ) | const |
Definition at line 604 of file NLProblem.cpp.
References current_size(), full_size(), penalty_forms_, Q1R1iTb_, and Q2_.
Referenced by gradient(), hessian(), init_lagging(), is_step_collision_free(), is_step_valid(), line_search_begin(), max_step_size(), post_step(), polyfem::solver::NLHomoProblem::reduced_to_extended(), polyfem::solver::NLHomoProblem::reduced_to_full(), solution_changed(), polyfem::solver::ALSolver::solve_reduced(), polyfem::State::solve_tensor_nonlinear(), update_lagging(), update_quantities(), and value().
|
protected |
Definition at line 151 of file NLProblem.cpp.
References full_size_, polyfem::log_and_throw_error(), polyfem::logger(), num_penalty_constraints_, P_, penalty_forms_, penalty_problem_, Q1_, Q2_, Q2t_, R1_, reduced_size_, solver_, and update_constraint_values().
Referenced by NLProblem(), and NLProblem().
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Definition at line 542 of file NLProblem.cpp.
References current_size(), full_size(), penalty_problem_, reduced_to_full(), and polyfem::solver::FullNLProblem::solution_changed().
Referenced by polyfem::solver::NLHomoProblem::solution_changed().
|
protected |
Definition at line 352 of file NLProblem.cpp.
References polyfem::log_and_throw_error(), polyfem::logger(), num_penalty_constraints_, P_, penalty_forms_, Q1_, Q1R1iTb_, and R1_.
Referenced by setup_constraints(), and update_quantities().
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Definition at line 434 of file NLProblem.cpp.
References current_size(), full_size(), penalty_problem_, reduced_to_full(), polyfem::solver::FullNLProblem::update_lagging(), and x.
Referenced by polyfem::State::solve_tensor_nonlinear(), and polyfem::solver::NLHomoProblem::update_lagging().
|
virtual |
Reimplemented in polyfem::solver::NLHomoProblem.
Definition at line 442 of file NLProblem.cpp.
References polyfem::solver::FullNLProblem::forms_, full_size_, penalty_forms_, reduced_to_full(), t_, update_constraint_values(), and x.
Referenced by polyfem::solver::NLHomoProblem::update_quantities().
|
inline |
Definition at line 59 of file NLProblem.hpp.
References current_size_, and FULL_SIZE.
Referenced by polyfem::solver::ALSolver::solve_al().
|
inline |
Definition at line 60 of file NLProblem.hpp.
References current_size_, and REDUCED_SIZE.
Referenced by NLProblem(), NLProblem(), polyfem::solver::ALSolver::solve_al(), and polyfem::solver::ALSolver::solve_reduced().
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Reimplemented in polyfem::solver::NLHomoProblem.
Definition at line 494 of file NLProblem.cpp.
References current_size(), full_size(), penalty_problem_, reduced_to_full(), polyfem::solver::FullNLProblem::value(), and x.
Referenced by full_hessian_to_reduced_hessian(), polyfem::solver::ALSolver::solve_al(), and polyfem::solver::ALSolver::solve_reduced().
|
protected |
Current size of the problem (either full or reduced size)
Definition at line 79 of file NLProblem.hpp.
Referenced by current_size(), use_full_size(), and use_reduced_size().
|
protected |
Size of the full problem.
Definition at line 71 of file NLProblem.hpp.
Referenced by polyfem::solver::NLHomoProblem::constraint_grad(), polyfem::solver::NLHomoProblem::extended_hessian_to_reduced_hessian(), full_size(), setup_constraints(), and update_quantities().
|
protected |
Definition at line 99 of file NLProblem.hpp.
Referenced by setup_constraints(), and update_constraint_values().
|
protected |
Permutation matrix of the QR decomposition of the constraints matrix.
Definition at line 94 of file NLProblem.hpp.
Referenced by setup_constraints(), and update_constraint_values().
|
protected |
Definition at line 88 of file NLProblem.hpp.
Referenced by full_hessian_to_reduced_hessian(), full_to_reduced_grad(), gradient(), reduced_to_full(), setup_constraints(), update_constraint_values(), and update_quantities().
|
protected |
Definition at line 98 of file NLProblem.hpp.
Referenced by polyfem::solver::NLHomoProblem::gradient(), gradient(), hessian(), init_lagging(), is_step_collision_free(), is_step_valid(), line_search_begin(), max_step_size(), post_step(), setup_constraints(), solution_changed(), update_lagging(), polyfem::solver::NLHomoProblem::value(), and value().
|
protected |
Q1 block of the QR decomposition of the constraints matrix.
Definition at line 90 of file NLProblem.hpp.
Referenced by setup_constraints(), and update_constraint_values().
|
protected |
Q1_ * (R1_.transpose().triangularView<Eigen::Upper>().solve(constraint_values_))
Definition at line 95 of file NLProblem.hpp.
Referenced by full_to_reduced(), reduced_to_full(), and update_constraint_values().
|
protected |
Q2 block of the QR decomposition of the constraints matrix.
Definition at line 91 of file NLProblem.hpp.
Referenced by polyfem::solver::NLHomoProblem::extended_hessian_to_reduced_hessian(), full_hessian_to_reduced_hessian(), polyfem::solver::NLHomoProblem::full_hessian_to_reduced_hessian(), full_to_reduced(), reduced_to_full(), and setup_constraints().
|
protected |
Q2 transpose.
Definition at line 92 of file NLProblem.hpp.
Referenced by full_hessian_to_reduced_hessian(), full_to_reduced(), full_to_reduced_grad(), gradient(), and setup_constraints().
|
protected |
R1 block of the QR decomposition of the constraints matrix.
Definition at line 93 of file NLProblem.hpp.
Referenced by setup_constraints(), and update_constraint_values().
|
protected |
Size of the reduced problem.
Definition at line 72 of file NLProblem.hpp.
Referenced by reduced_size(), and setup_constraints().
|
protected |
Definition at line 96 of file NLProblem.hpp.
Referenced by full_to_reduced(), and setup_constraints().
|
protected |
Definition at line 85 of file NLProblem.hpp.
Referenced by polyfem::solver::NLHomoProblem::macro_reduced_to_full(), and update_quantities().