Loading [MathJax]/extensions/tex2jax.js
PolyFEM
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
polyfem::solver::AugmentedLagrangianForm Class Referenceabstract

Form of the augmented lagrangian. More...

#include <AugmentedLagrangianForm.hpp>

Inheritance diagram for polyfem::solver::AugmentedLagrangianForm:
[legend]
Collaboration diagram for polyfem::solver::AugmentedLagrangianForm:
[legend]

Public Member Functions

 AugmentedLagrangianForm ()
 
virtual ~AugmentedLagrangianForm ()
 
virtual void update_lagrangian (const Eigen::VectorXd &x, const double k_al)=0
 
virtual double compute_error (const Eigen::VectorXd &x) const =0
 
void set_initial_weight (const double k_al)
 
double lagrangian_weight () const
 
const StiffnessMatrixconstraint_matrix () const
 
const Eigen::MatrixXd & constraint_value () const
 
const StiffnessMatrixconstraint_projection_matrix () const
 
const Eigen::MatrixXd & constraint_projection_vector () const
 
bool has_projection () const
 
virtual bool can_project () const
 
virtual void project_gradient (Eigen::VectorXd &grad) const
 
virtual void project_hessian (StiffnessMatrix &hessian) const
 
void set_scale (const double scale) override
 sets the scale for the form
 
- Public Member Functions inherited from polyfem::solver::Form
virtual ~Form ()
 
virtual std::string name () const =0
 
virtual void init (const Eigen::VectorXd &x)
 Initialize the form.
 
virtual void finish ()
 
virtual double value (const Eigen::VectorXd &x) const
 Compute the value of the form multiplied with the weigth.
 
Eigen::VectorXd value_per_element (const Eigen::VectorXd &x) const
 Compute the value of the form multiplied with the weigth.
 
virtual void first_derivative (const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const
 Compute the first derivative of the value wrt x multiplied with the weigth.
 
void second_derivative (const Eigen::VectorXd &x, StiffnessMatrix &hessian) const
 Compute the second derivative of the value wrt x multiplied with the weigth.
 
virtual bool is_step_valid (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
 Determine if a step from solution x0 to solution x1 is allowed.
 
virtual double max_step_size (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
 Determine the maximum step size allowable between the current and next solution.
 
virtual void line_search_begin (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1)
 Initialize variables used during the line search.
 
virtual void line_search_end ()
 Clear variables used during the line search.
 
virtual void post_step (const polysolve::nonlinear::PostStepData &data)
 Update fields after a step in the optimization.
 
virtual void solution_changed (const Eigen::VectorXd &new_x)
 Update cached fields upon a change in the solution.
 
virtual void update_quantities (const double t, const Eigen::VectorXd &x)
 Update time-dependent fields.
 
virtual void init_lagging (const Eigen::VectorXd &x)
 Initialize lagged fields TODO: more than one step.
 
virtual void update_lagging (const Eigen::VectorXd &x, const int iter_num)
 Update lagged fields.
 
virtual int max_lagging_iterations () const
 Get the maximum number of lagging iteration allowable.
 
virtual bool uses_lagging () const
 Does this form require lagging?
 
void set_project_to_psd (bool val)
 Set project to psd.
 
bool is_project_to_psd () const
 Get if the form's second derivative is projected to psd.
 
void enable ()
 Enable the form.
 
void disable ()
 Disable the form.
 
void set_enabled (const bool enabled)
 Set if the form is enabled.
 
bool enabled () const
 Determine if the form is enabled.
 
virtual double weight () const
 Get the form's multiplicative constant weight.
 
void set_weight (const double weight)
 Set the form's multiplicative constant weight.
 
virtual bool is_step_collision_free (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
 Checks if the step is collision free.
 
void set_output_dir (const std::string &output_dir)
 

Protected Member Functions

double L_weight () const
 
double A_weight () const
 
- Protected Member Functions inherited from polyfem::solver::Form
std::string resolve_output_path (const std::string &path) const
 
virtual double value_unweighted (const Eigen::VectorXd &x) const =0
 Compute the value of the form.
 
virtual Eigen::VectorXd value_per_element_unweighted (const Eigen::VectorXd &x) const
 Compute the value of the form multiplied per element.
 
virtual void first_derivative_unweighted (const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const =0
 Compute the first derivative of the value wrt x.
 
virtual void second_derivative_unweighted (const Eigen::VectorXd &x, StiffnessMatrix &hessian) const =0
 Compute the second derivative of the value wrt x.
 

Protected Attributes

double k_al_
 penalty parameter
 
Eigen::VectorXd lagr_mults_
 vector of lagrange multipliers
 
StiffnessMatrix A_
 Constraints matrix.
 
Eigen::MatrixXd b_
 Constraints value.
 
StiffnessMatrix A_proj_
 Constraints projection matrix.
 
Eigen::MatrixXd b_proj_
 Constraints projection value.
 
- Protected Attributes inherited from polyfem::solver::Form
bool project_to_psd_ = false
 If true, the form's second derivative is projected to be positive semidefinite.
 
double weight_ = 1
 weight of the form (e.g., AL penalty weight or Δt²)
 
bool enabled_ = true
 If true, the form is enabled.
 
std::string output_dir_
 

Private Attributes

double k_scale_ = 1
 

Detailed Description

Form of the augmented lagrangian.

Definition at line 8 of file AugmentedLagrangianForm.hpp.

Constructor & Destructor Documentation

◆ AugmentedLagrangianForm()

polyfem::solver::AugmentedLagrangianForm::AugmentedLagrangianForm ( )
inline

Definition at line 12 of file AugmentedLagrangianForm.hpp.

◆ ~AugmentedLagrangianForm()

virtual polyfem::solver::AugmentedLagrangianForm::~AugmentedLagrangianForm ( )
inlinevirtual

Definition at line 14 of file AugmentedLagrangianForm.hpp.

Member Function Documentation

◆ A_weight()

◆ can_project()

virtual bool polyfem::solver::AugmentedLagrangianForm::can_project ( ) const
inlinevirtual

◆ compute_error()

virtual double polyfem::solver::AugmentedLagrangianForm::compute_error ( const Eigen::VectorXd &  x) const
pure virtual

◆ constraint_matrix()

const StiffnessMatrix & polyfem::solver::AugmentedLagrangianForm::constraint_matrix ( ) const
inline

Definition at line 24 of file AugmentedLagrangianForm.hpp.

References A_.

◆ constraint_projection_matrix()

const StiffnessMatrix & polyfem::solver::AugmentedLagrangianForm::constraint_projection_matrix ( ) const
inline

Definition at line 27 of file AugmentedLagrangianForm.hpp.

References A_proj_.

◆ constraint_projection_vector()

const Eigen::MatrixXd & polyfem::solver::AugmentedLagrangianForm::constraint_projection_vector ( ) const
inline

Definition at line 28 of file AugmentedLagrangianForm.hpp.

References b_proj_.

◆ constraint_value()

const Eigen::MatrixXd & polyfem::solver::AugmentedLagrangianForm::constraint_value ( ) const
inline

Definition at line 25 of file AugmentedLagrangianForm.hpp.

References b_.

◆ has_projection()

bool polyfem::solver::AugmentedLagrangianForm::has_projection ( ) const
inline

Definition at line 30 of file AugmentedLagrangianForm.hpp.

References A_proj_.

◆ L_weight()

◆ lagrangian_weight()

double polyfem::solver::AugmentedLagrangianForm::lagrangian_weight ( ) const
inline

Definition at line 22 of file AugmentedLagrangianForm.hpp.

References k_al_.

◆ project_gradient()

virtual void polyfem::solver::AugmentedLagrangianForm::project_gradient ( Eigen::VectorXd &  grad) const
inlinevirtual

◆ project_hessian()

virtual void polyfem::solver::AugmentedLagrangianForm::project_hessian ( StiffnessMatrix hessian) const
inlinevirtual

◆ set_initial_weight()

void polyfem::solver::AugmentedLagrangianForm::set_initial_weight ( const double  k_al)
inline

Definition at line 20 of file AugmentedLagrangianForm.hpp.

References k_al_.

◆ set_scale()

void polyfem::solver::AugmentedLagrangianForm::set_scale ( const double  scale)
inlineoverridevirtual

sets the scale for the form

Parameters
scale

Reimplemented from polyfem::solver::Form.

Definition at line 38 of file AugmentedLagrangianForm.hpp.

References k_scale_.

◆ update_lagrangian()

virtual void polyfem::solver::AugmentedLagrangianForm::update_lagrangian ( const Eigen::VectorXd &  x,
const double  k_al 
)
pure virtual

Member Data Documentation

◆ A_

◆ A_proj_

◆ b_

◆ b_proj_

◆ k_al_

◆ k_scale_

double polyfem::solver::AugmentedLagrangianForm::k_scale_ = 1
private

Definition at line 54 of file AugmentedLagrangianForm.hpp.

Referenced by A_weight(), L_weight(), and set_scale().

◆ lagr_mults_


The documentation for this class was generated from the following file: