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 |
![]() | |
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_ |
![]() | |
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 91 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 106 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 620 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 564 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 586 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 500 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 519 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 419 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 477 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 467 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 449 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 457 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 123 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 543 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 597 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 146 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 535 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 345 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 427 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 435 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 487 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().