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

Form for quadratic soft constraints. More...

#include <QuadraticPenaltyForm.hpp>

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

Public Member Functions

 QuadraticPenaltyForm (const StiffnessMatrix &A, const Eigen::MatrixXd &b, const double weight)
 Construct a new QuadraticPenaltyForm object for the constraints Ax = b.
 
std::string name () const override
 
double weight () const override
 Get the form's multiplicative constant weight.
 
double value_unweighted (const Eigen::VectorXd &x) const override
 Compute the value of the form.
 
void first_derivative_unweighted (const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const override
 Compute the first derivative of the value wrt x.
 
void second_derivative_unweighted (const Eigen::VectorXd &x, StiffnessMatrix &hessian) const override
 Compute the second derivative of the value wrt x.
 
- Public Member Functions inherited from polyfem::solver::Form
virtual ~Form ()
 
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.
 
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)
 
virtual void set_scale (const double scale)
 sets the scale for the form
 

Private Attributes

StiffnessMatrix A_
 Constraints matrix.
 
Eigen::MatrixXd b_
 Constraints value.
 
StiffnessMatrix AtA_
 
Eigen::VectorXd Atb_
 
const double penalty_weight_
 

Additional Inherited Members

- Protected Member Functions inherited from polyfem::solver::Form
std::string resolve_output_path (const std::string &path) const
 
virtual Eigen::VectorXd value_per_element_unweighted (const Eigen::VectorXd &x) const
 Compute the value of the form multiplied per element.
 
- 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_
 

Detailed Description

Form for quadratic soft constraints.

Definition at line 10 of file QuadraticPenaltyForm.hpp.

Constructor & Destructor Documentation

◆ QuadraticPenaltyForm()

polyfem::solver::QuadraticPenaltyForm::QuadraticPenaltyForm ( const StiffnessMatrix A,
const Eigen::MatrixXd &  b,
const double  weight 
)

Construct a new QuadraticPenaltyForm object for the constraints Ax = b.

Parameters
AConstraints matrix
bConstraints value
weigthweigth of the penalty

Definition at line 8 of file QuadraticPenaltyForm.cpp.

References A_, AtA_, Atb_, and b_.

Member Function Documentation

◆ first_derivative_unweighted()

void polyfem::solver::QuadraticPenaltyForm::first_derivative_unweighted ( const Eigen::VectorXd &  x,
Eigen::VectorXd &  gradv 
) const
overridevirtual

Compute the first derivative of the value wrt x.

Parameters
[in]xCurrent solution
[out]gradvOutput gradient of the value wrt x

Implements polyfem::solver::Form.

Definition at line 25 of file QuadraticPenaltyForm.cpp.

References AtA_, Atb_, and x.

◆ name()

std::string polyfem::solver::QuadraticPenaltyForm::name ( ) const
inlineoverridevirtual

Implements polyfem::solver::Form.

Definition at line 21 of file QuadraticPenaltyForm.hpp.

◆ second_derivative_unweighted()

void polyfem::solver::QuadraticPenaltyForm::second_derivative_unweighted ( const Eigen::VectorXd &  x,
StiffnessMatrix hessian 
) const
overridevirtual

Compute the second derivative of the value wrt x.

Parameters
[in]xCurrent solution
[out]hessianOutput Hessian of the value wrt x

Implements polyfem::solver::Form.

Definition at line 30 of file QuadraticPenaltyForm.cpp.

References AtA_.

◆ value_unweighted()

double polyfem::solver::QuadraticPenaltyForm::value_unweighted ( const Eigen::VectorXd &  x) const
overridevirtual

Compute the value of the form.

Parameters
xCurrent solution
Returns
Computed value

Implements polyfem::solver::Form.

Definition at line 19 of file QuadraticPenaltyForm.cpp.

References A_, b_, val, and x.

◆ weight()

double polyfem::solver::QuadraticPenaltyForm::weight ( ) const
inlineoverridevirtual

Get the form's multiplicative constant weight.

Reimplemented from polyfem::solver::Form.

Definition at line 23 of file QuadraticPenaltyForm.hpp.

References penalty_weight_, and polyfem::solver::Form::weight_.

Member Data Documentation

◆ A_

StiffnessMatrix polyfem::solver::QuadraticPenaltyForm::A_
private

Constraints matrix.

Definition at line 41 of file QuadraticPenaltyForm.hpp.

Referenced by QuadraticPenaltyForm(), and value_unweighted().

◆ AtA_

StiffnessMatrix polyfem::solver::QuadraticPenaltyForm::AtA_
private

◆ Atb_

Eigen::VectorXd polyfem::solver::QuadraticPenaltyForm::Atb_
private

Definition at line 45 of file QuadraticPenaltyForm.hpp.

Referenced by first_derivative_unweighted(), and QuadraticPenaltyForm().

◆ b_

Eigen::MatrixXd polyfem::solver::QuadraticPenaltyForm::b_
private

Constraints value.

Definition at line 42 of file QuadraticPenaltyForm.hpp.

Referenced by QuadraticPenaltyForm(), and value_unweighted().

◆ penalty_weight_

const double polyfem::solver::QuadraticPenaltyForm::penalty_weight_
private

Definition at line 47 of file QuadraticPenaltyForm.hpp.

Referenced by weight().


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