PolyFEM
|
#include <NLHomoProblem.hpp>
Public Member Functions | |
NLHomoProblem (const int full_size, const assembler::MacroStrainValue ¯o_strain_constraint, const State &state, const double t, const std::vector< std::shared_ptr< Form > > &forms, const std::vector< std::shared_ptr< AugmentedLagrangianForm > > &penalty_forms, const bool solve_symmetric_macro_strain, const std::shared_ptr< polysolve::linear::Solver > &solver) | |
virtual | ~NLHomoProblem ()=default |
double | value (const TVector &x) override |
void | gradient (const TVector &x, TVector &gradv) override |
void | hessian (const TVector &x, THessian &hessian) override |
void | full_hessian_to_reduced_hessian (THessian &hessian) const |
int | macro_reduced_size () const |
TVector | full_to_reduced (const TVector &full, const Eigen::MatrixXd &disp_grad) const |
TVector | full_to_reduced (const TVector &full) const |
TVector | full_to_reduced_grad (const TVector &full) const override |
TVector | reduced_to_full (const TVector &reduced) const |
TVector | reduced_to_full_shape_derivative (const Eigen::MatrixXd &disp_grad, const TVector &adjoint_full) const |
TVector | reduced_to_extended (const TVector &reduced, bool homogeneous=false) const |
TVector | extended_to_reduced (const TVector &extended) const |
TVector | extended_to_reduced_grad (const TVector &extended) const |
void | extended_hessian_to_reduced_hessian (const THessian &extended, THessian &reduced) const |
Eigen::MatrixXd | reduced_to_disp_grad (const TVector &reduced, bool homogeneous=false) const |
void | set_fixed_entry (const Eigen::VectorXi &fixed_entry) |
void | init (const TVector &x0) override |
bool | is_step_valid (const TVector &x0, const TVector &x1) override |
bool | is_step_collision_free (const TVector &x0, const TVector &x1) override |
double | max_step_size (const TVector &x0, const TVector &x1) override |
void | line_search_begin (const TVector &x0, const TVector &x1) override |
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 |
void | update_quantities (const double t, const TVector &x) override |
void | add_form (const std::shared_ptr< Form > &form) |
bool | has_symmetry_constraint () const |
![]() | |
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 |
void | line_search_begin (const TVector &x0, const TVector &x1) 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 |
int | full_size () const |
int | reduced_size () const |
void | use_full_size () |
void | use_reduced_size () |
TVector | full_to_reduced (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 | 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 () |
Private Member Functions | |
void | init_projection () |
Eigen::MatrixXd | constraint_grad () const |
TVector | macro_full_to_reduced (const TVector &full) const |
Eigen::MatrixXd | macro_full_to_reduced_grad (const Eigen::MatrixXd &full) const |
TVector | macro_reduced_to_full (const TVector &reduced, bool homogeneous=false) const |
Private Attributes | |
const State & | state_ |
const bool | only_symmetric |
const assembler::MacroStrainValue & | macro_strain_constraint_ |
Eigen::VectorXi | fixed_mask_ |
Eigen::MatrixXd | macro_mid_to_reduced_ |
Eigen::MatrixXd | macro_full_to_mid_ |
Eigen::MatrixXd | macro_mid_to_full_ |
std::vector< std::shared_ptr< Form > > | homo_forms |
Additional Inherited Members | |
![]() | |
enum class | CurrentSize { FULL_SIZE , REDUCED_SIZE } |
![]() | |
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 () |
![]() | |
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 16 of file NLHomoProblem.hpp.
polyfem::solver::NLHomoProblem::NLHomoProblem | ( | const int | full_size, |
const assembler::MacroStrainValue & | macro_strain_constraint, | ||
const State & | state, | ||
const double | t, | ||
const std::vector< std::shared_ptr< Form > > & | forms, | ||
const std::vector< std::shared_ptr< AugmentedLagrangianForm > > & | penalty_forms, | ||
const bool | solve_symmetric_macro_strain, | ||
const std::shared_ptr< polysolve::linear::Solver > & | solver | ||
) |
Definition at line 10 of file NLHomoProblem.cpp.
References init_projection().
|
virtualdefault |
|
inline |
Definition at line 71 of file NLHomoProblem.hpp.
References homo_forms.
|
private |
Definition at line 464 of file NLHomoProblem.cpp.
References polyfem::solver::NLProblem::full_size_, polyfem::io::Evaluator::get_bases_position(), macro_full_to_reduced_grad(), polyfem::State::mesh, polyfem::State::mesh_nodes, polyfem::State::n_bases, and state_.
Referenced by full_hessian_to_reduced_hessian(), and full_to_reduced_grad().
void polyfem::solver::NLHomoProblem::extended_hessian_to_reduced_hessian | ( | const THessian & | extended, |
THessian & | reduced | ||
) | const |
Definition at line 145 of file NLHomoProblem.cpp.
References entries, polyfem::solver::NLProblem::full_size_, macro_full_to_reduced_grad(), macro_reduced_size(), polyfem::State::mesh, polyfem::solver::NLProblem::Q2_, polyfem::solver::NLProblem::reduced_size(), state_, and value().
Referenced by hessian().
Eigen::VectorXd polyfem::solver::NLHomoProblem::extended_to_reduced | ( | const TVector & | extended | ) | const |
Definition at line 54 of file NLHomoProblem.cpp.
References polyfem::solver::NLProblem::full_to_reduced(), macro_full_to_reduced(), macro_reduced_size(), polyfem::State::mesh, polyfem::solver::NLProblem::reduced_size(), and state_.
Eigen::VectorXd polyfem::solver::NLHomoProblem::extended_to_reduced_grad | ( | const TVector & | extended | ) | const |
Definition at line 82 of file NLHomoProblem.cpp.
References polyfem::solver::NLProblem::full_to_reduced_grad(), macro_full_to_reduced_grad(), macro_reduced_size(), polyfem::State::mesh, polyfem::solver::NLProblem::reduced_size(), and state_.
Referenced by gradient().
void polyfem::solver::NLHomoProblem::full_hessian_to_reduced_hessian | ( | THessian & | hessian | ) | const |
Definition at line 261 of file NLHomoProblem.cpp.
References constraint_grad(), entries, polyfem::solver::NLProblem::full_size(), hessian(), macro_reduced_size(), polyfem::State::mesh, polyfem::solver::NLProblem::Q2_, polyfem::solver::NLProblem::reduced_size(), state_, and value().
Referenced by hessian().
NLHomoProblem::TVector polyfem::solver::NLHomoProblem::full_to_reduced | ( | const TVector & | full | ) | const |
Definition at line 323 of file NLHomoProblem.cpp.
References polyfem::log_and_throw_error().
NLHomoProblem::TVector polyfem::solver::NLHomoProblem::full_to_reduced | ( | const TVector & | full, |
const Eigen::MatrixXd & | disp_grad | ||
) | const |
Definition at line 329 of file NLHomoProblem.cpp.
References polyfem::utils::flatten(), polyfem::solver::NLProblem::full_to_reduced(), polyfem::io::Evaluator::generate_linear_field(), macro_full_to_reduced(), macro_reduced_size(), polyfem::State::mesh, polyfem::State::mesh_nodes, polyfem::State::n_bases, polyfem::solver::NLProblem::reduced_size(), and state_.
|
overridevirtual |
Reimplemented from polyfem::solver::NLProblem.
Definition at line 343 of file NLHomoProblem.cpp.
References constraint_grad(), polyfem::solver::NLProblem::full_to_reduced_grad(), macro_reduced_size(), polyfem::State::mesh, polyfem::solver::NLProblem::reduced_size(), and state_.
Referenced by gradient().
|
overridevirtual |
Reimplemented from polyfem::solver::NLProblem.
Definition at line 122 of file NLHomoProblem.cpp.
References polyfem::solver::NLProblem::current_size(), extended_to_reduced_grad(), polyfem::solver::NLProblem::full_size(), full_to_reduced_grad(), polyfem::solver::FullNLProblem::gradient(), homo_forms, polyfem::solver::NLProblem::penalty_problem_, reduced_to_extended(), reduced_to_full(), and x.
|
inline |
Definition at line 72 of file NLHomoProblem.hpp.
References only_symmetric.
|
overridevirtual |
Reimplemented from polyfem::solver::NLProblem.
Definition at line 222 of file NLHomoProblem.cpp.
References extended_hessian_to_reduced_hessian(), full_hessian_to_reduced_hessian(), polyfem::solver::FullNLProblem::hessian(), hessian(), homo_forms, reduced_to_extended(), reduced_to_full(), and x.
Referenced by full_hessian_to_reduced_hessian(), and hessian().
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Definition at line 389 of file NLHomoProblem.cpp.
References homo_forms, polyfem::solver::FullNLProblem::init(), reduced_to_extended(), and reduced_to_full().
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Definition at line 444 of file NLHomoProblem.cpp.
References homo_forms, polyfem::solver::NLProblem::init_lagging(), polyfem::solver::NLProblem::reduced_size(), reduced_to_extended(), and x.
|
private |
Definition at line 26 of file NLHomoProblem.cpp.
References macro_full_to_mid_, macro_mid_to_full_, macro_mid_to_reduced_, polyfem::State::mesh, only_symmetric, and state_.
Referenced by NLHomoProblem().
|
overridevirtual |
Reimplemented from polyfem::solver::NLProblem.
Definition at line 405 of file NLHomoProblem.cpp.
References homo_forms, polyfem::solver::NLProblem::is_step_collision_free(), polyfem::solver::NLProblem::reduced_size(), and reduced_to_extended().
|
overridevirtual |
Reimplemented from polyfem::solver::NLProblem.
Definition at line 396 of file NLHomoProblem.cpp.
References homo_forms, polyfem::solver::NLProblem::is_step_valid(), polyfem::solver::NLProblem::reduced_size(), and reduced_to_extended().
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Definition at line 423 of file NLHomoProblem.cpp.
References homo_forms, polyfem::solver::NLProblem::line_search_begin(), polyfem::solver::NLProblem::reduced_size(), and reduced_to_extended().
|
private |
Definition at line 370 of file NLHomoProblem.cpp.
References macro_full_to_mid_, and macro_mid_to_reduced_.
Referenced by extended_to_reduced(), and full_to_reduced().
|
private |
Definition at line 374 of file NLHomoProblem.cpp.
References macro_mid_to_full_, and macro_mid_to_reduced_.
Referenced by constraint_grad(), extended_hessian_to_reduced_hessian(), and extended_to_reduced_grad().
int polyfem::solver::NLHomoProblem::macro_reduced_size | ( | ) | const |
Definition at line 366 of file NLHomoProblem.cpp.
References macro_mid_to_reduced_.
Referenced by extended_hessian_to_reduced_hessian(), extended_to_reduced(), extended_to_reduced_grad(), full_hessian_to_reduced_hessian(), full_to_reduced(), full_to_reduced_grad(), reduced_to_disp_grad(), reduced_to_extended(), and reduced_to_full().
|
private |
Definition at line 378 of file NLHomoProblem.cpp.
References polyfem::assembler::MacroStrainValue::eval(), fixed_mask_, polyfem::utils::flatten(), macro_full_to_mid_, macro_mid_to_full_, macro_mid_to_reduced_, macro_strain_constraint_, and polyfem::solver::NLProblem::t_.
Referenced by reduced_to_disp_grad(), reduced_to_extended(), and reduced_to_full().
|
overridevirtual |
Reimplemented from polyfem::solver::NLProblem.
Definition at line 414 of file NLHomoProblem.cpp.
References homo_forms, polyfem::solver::NLProblem::max_step_size(), polyfem::solver::NLProblem::reduced_size(), and reduced_to_extended().
|
overridevirtual |
Reimplemented from polyfem::solver::NLProblem.
Definition at line 429 of file NLHomoProblem.cpp.
References homo_forms, polyfem::solver::NLProblem::post_step(), polyfem::solver::NLProblem::reduced_size(), reduced_to_extended(), and reduced_to_full().
Eigen::MatrixXd polyfem::solver::NLHomoProblem::reduced_to_disp_grad | ( | const TVector & | reduced, |
bool | homogeneous = false |
||
) | const |
Definition at line 214 of file NLHomoProblem.cpp.
References macro_reduced_size(), macro_reduced_to_full(), polyfem::State::mesh, polyfem::solver::NLProblem::reduced_size(), state_, and polyfem::utils::unflatten().
Eigen::VectorXd polyfem::solver::NLHomoProblem::reduced_to_extended | ( | const TVector & | reduced, |
bool | homogeneous = false |
||
) | const |
Definition at line 67 of file NLHomoProblem.cpp.
References macro_reduced_size(), macro_reduced_to_full(), polyfem::State::mesh, polyfem::solver::NLProblem::reduced_size(), polyfem::solver::NLProblem::reduced_to_full(), and state_.
Referenced by gradient(), hessian(), init(), init_lagging(), is_step_collision_free(), is_step_valid(), line_search_begin(), max_step_size(), post_step(), solution_changed(), update_lagging(), update_quantities(), and value().
NLHomoProblem::TVector polyfem::solver::NLHomoProblem::reduced_to_full | ( | const TVector & | reduced | ) | const |
Definition at line 356 of file NLHomoProblem.cpp.
References polyfem::io::Evaluator::generate_linear_field(), macro_reduced_size(), macro_reduced_to_full(), polyfem::State::mesh, polyfem::State::mesh_nodes, polyfem::State::n_bases, polyfem::solver::NLProblem::reduced_size(), polyfem::solver::NLProblem::reduced_to_full(), state_, and polyfem::utils::unflatten().
Referenced by gradient(), hessian(), init(), post_step(), and value().
NLHomoProblem::TVector polyfem::solver::NLHomoProblem::reduced_to_full_shape_derivative | ( | const Eigen::MatrixXd & | disp_grad, |
const TVector & | adjoint_full | ||
) | const |
Definition at line 95 of file NLHomoProblem.cpp.
References polyfem::State::basis_nodes_to_gbasis_nodes, polyfem::State::mesh, polyfem::State::n_bases, and state_.
Referenced by polyfem::solver::SpatialIntegralForm::compute_partial_gradient_step().
void polyfem::solver::NLHomoProblem::set_fixed_entry | ( | const Eigen::VectorXi & | fixed_entry | ) |
Definition at line 240 of file NLHomoProblem.cpp.
References fixed_mask_, macro_full_to_mid_, macro_mid_to_reduced_, polyfem::State::mesh, and state_.
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Definition at line 437 of file NLHomoProblem.cpp.
References homo_forms, polyfem::solver::NLProblem::reduced_size(), reduced_to_extended(), and polyfem::solver::NLProblem::solution_changed().
|
overridevirtual |
Reimplemented from polyfem::solver::FullNLProblem.
Definition at line 450 of file NLHomoProblem.cpp.
References homo_forms, polyfem::solver::NLProblem::reduced_size(), reduced_to_extended(), polyfem::solver::NLProblem::update_lagging(), and x.
|
overridevirtual |
Reimplemented from polyfem::solver::NLProblem.
Definition at line 457 of file NLHomoProblem.cpp.
References homo_forms, polyfem::solver::NLProblem::reduced_size(), reduced_to_extended(), polyfem::solver::NLProblem::update_quantities(), and x.
|
overridevirtual |
Reimplemented from polyfem::solver::NLProblem.
Definition at line 107 of file NLHomoProblem.cpp.
References polyfem::solver::NLProblem::current_size(), polyfem::solver::NLProblem::full_size(), homo_forms, polyfem::solver::NLProblem::penalty_problem_, reduced_to_extended(), reduced_to_full(), val, polyfem::solver::FullNLProblem::value(), and x.
Referenced by extended_hessian_to_reduced_hessian(), and full_hessian_to_reduced_hessian().
|
private |
Definition at line 86 of file NLHomoProblem.hpp.
Referenced by macro_reduced_to_full(), and set_fixed_entry().
|
private |
Definition at line 90 of file NLHomoProblem.hpp.
Referenced by add_form(), gradient(), hessian(), init(), init_lagging(), is_step_collision_free(), is_step_valid(), line_search_begin(), max_step_size(), post_step(), solution_changed(), update_lagging(), update_quantities(), and value().
|
private |
Definition at line 88 of file NLHomoProblem.hpp.
Referenced by init_projection(), macro_full_to_reduced(), macro_reduced_to_full(), and set_fixed_entry().
|
private |
Definition at line 88 of file NLHomoProblem.hpp.
Referenced by init_projection(), macro_full_to_reduced_grad(), and macro_reduced_to_full().
|
private |
Definition at line 87 of file NLHomoProblem.hpp.
Referenced by init_projection(), macro_full_to_reduced(), macro_full_to_reduced_grad(), macro_reduced_size(), macro_reduced_to_full(), and set_fixed_entry().
|
private |
Definition at line 84 of file NLHomoProblem.hpp.
Referenced by macro_reduced_to_full().
|
private |
Definition at line 83 of file NLHomoProblem.hpp.
Referenced by has_symmetry_constraint(), and init_projection().
|
private |
Definition at line 82 of file NLHomoProblem.hpp.
Referenced by constraint_grad(), extended_hessian_to_reduced_hessian(), extended_to_reduced(), extended_to_reduced_grad(), full_hessian_to_reduced_hessian(), full_to_reduced(), full_to_reduced_grad(), init_projection(), reduced_to_disp_grad(), reduced_to_extended(), reduced_to_full(), reduced_to_full_shape_derivative(), and set_fixed_entry().