Loading [MathJax]/extensions/tex2jax.js
PolyFEM
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
AugmentedLagrangianForm.hpp
Go to the documentation of this file.
1#pragma once
2
4
5namespace polyfem::solver
6{
9 {
10
11 public:
13
15
16 virtual void update_lagrangian(const Eigen::VectorXd &x, const double k_al) = 0;
17
18 virtual double compute_error(const Eigen::VectorXd &x) const = 0;
19
20 inline void set_initial_weight(const double k_al) { k_al_ = k_al; }
21
22 inline double lagrangian_weight() const { return k_al_; }
23
24 inline const StiffnessMatrix &constraint_matrix() const { return A_; }
25 inline const Eigen::MatrixXd &constraint_value() const { return b_; }
26
27 inline const StiffnessMatrix &constraint_projection_matrix() const { return A_proj_; }
28 inline const Eigen::MatrixXd &constraint_projection_vector() const { return b_proj_; }
29
30 inline bool has_projection() const { return A_proj_.rows() > 0; }
31
32 virtual bool can_project() const { return false; }
33 virtual void project_gradient(Eigen::VectorXd &grad) const { assert(false); }
34 virtual void project_hessian(StiffnessMatrix &hessian) const { assert(false); }
35
38 void set_scale(const double scale) override { k_scale_ = scale; }
39
40 protected:
41 inline double L_weight() const { return 1 / k_scale_; }
42 inline double A_weight() const { return k_al_ / k_scale_; }
43
44 double k_al_;
45
46 Eigen::VectorXd lagr_mults_;
47
49 Eigen::MatrixXd b_;
50
52 Eigen::MatrixXd b_proj_;
53 private:
54 double k_scale_ = 1;
55 };
56} // namespace polyfem::solver
int x
virtual void project_hessian(StiffnessMatrix &hessian) const
virtual void project_gradient(Eigen::VectorXd &grad) const
virtual double compute_error(const Eigen::VectorXd &x) const =0
virtual void update_lagrangian(const Eigen::VectorXd &x, const double k_al)=0
const StiffnessMatrix & constraint_projection_matrix() const
Eigen::VectorXd lagr_mults_
vector of lagrange multipliers
const Eigen::MatrixXd & constraint_value() const
StiffnessMatrix A_proj_
Constraints projection matrix.
void set_scale(const double scale) override
sets the scale for the form
Eigen::MatrixXd b_proj_
Constraints projection value.
const Eigen::MatrixXd & constraint_projection_vector() const
const StiffnessMatrix & constraint_matrix() const
Eigen::SparseMatrix< double, Eigen::ColMajor > StiffnessMatrix
Definition Types.hpp:22