PolyFEM
Loading...
Searching...
No Matches
polyfem::solver::ParametrizationForm Class Referenceabstract

#include <ParametrizationForm.hpp>

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

Public Member Functions

 ParametrizationForm (CompositeParametrization &&parametrizations)
 
virtual ~ParametrizationForm ()
 
virtual void init (const Eigen::VectorXd &x) final override
 Initialize the form.
 
virtual bool is_step_valid (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const final override
 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 final
 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) final override
 Initialize variables used during the line search.
 
virtual void line_search_end () final override
 Clear variables used during the line search.
 
virtual void post_step (const polysolve::nonlinear::PostStepData &data) final override
 Update fields after a step in the optimization.
 
virtual void solution_changed (const Eigen::VectorXd &new_x) final override
 Update cached fields upon a change in the solution.
 
virtual bool is_step_collision_free (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const final override
 Checks if the step is collision free.
 
- Public Member Functions inherited from polyfem::solver::AdjointForm
 AdjointForm (const VariableToSimulationGroup &variable_to_simulations)
 
virtual ~AdjointForm ()
 
virtual std::string name () const override
 
void enable_energy_print (const std::string &print_energy_keyword)
 
double value (const Eigen::VectorXd &x) const override
 Compute the value of the form multiplied with the weigth.
 
const VariableToSimulationGroupget_variable_to_simulations () const
 
virtual Eigen::MatrixXd compute_reduced_adjoint_rhs (const Eigen::VectorXd &x, const State &state) const
 
virtual void first_derivative (const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const final override
 Compute the first derivative of the value wrt x multiplied with the weigth.
 
virtual Eigen::MatrixXd compute_adjoint_rhs (const Eigen::VectorXd &x, const State &state) const
 
virtual void update_quantities (const double t, const Eigen::VectorXd &x) final override
 Update time-dependent fields.
 
virtual void init_lagging (const Eigen::VectorXd &x) final override
 Initialize lagged fields TODO: more than one step.
 
virtual void update_lagging (const Eigen::VectorXd &x, const int iter_num) final override
 Update lagged fields.
 
- Public Member Functions inherited from polyfem::solver::Form
virtual ~Form ()
 
virtual void finish ()
 
Eigen::VectorXd value_per_element (const Eigen::VectorXd &x) const
 Compute the value of the form 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 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.
 
void set_output_dir (const std::string &output_dir)
 

Protected Member Functions

virtual double value_unweighted (const Eigen::VectorXd &x) const final override
 Compute the value of the form.
 
virtual void compute_partial_gradient (const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const final override
 
virtual void init_with_param (const Eigen::VectorXd &x)
 
virtual bool is_step_valid_with_param (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
 
virtual double max_step_size_with_param (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
 
virtual void line_search_begin_with_param (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1)
 
virtual void line_search_end_with_param ()
 
virtual void post_step_with_param (const polysolve::nonlinear::PostStepData &data)
 
virtual void solution_changed_with_param (const Eigen::VectorXd &new_x)
 
virtual bool is_step_collision_free_with_param (const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
 
virtual double value_unweighted_with_param (const Eigen::VectorXd &x) const
 
virtual void compute_partial_gradient_with_param (const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const =0
 
- Protected Member Functions inherited from polyfem::solver::AdjointForm
virtual void first_derivative_unweighted (const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const final override
 Compute the first derivative of the value wrt x.
 
virtual void second_derivative_unweighted (const Eigen::VectorXd &x, StiffnessMatrix &hessian) const final override
 Compute the second derivative of the value wrt x.
 
- 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.
 

Private Member Functions

Eigen::VectorXd apply_parametrizations (const Eigen::VectorXd &x) const
 

Private Attributes

CompositeParametrization parametrizations_
 

Additional Inherited Members

- Protected Types inherited from polyfem::solver::AdjointForm
enum class  PrintStage { Inactive , AlreadyPrinted , ToPrint }
 
- Protected Attributes inherited from polyfem::solver::AdjointForm
const VariableToSimulationGroup variable_to_simulations_
 
PrintStage print_energy_ = PrintStage::Inactive
 
std::string print_energy_keyword_
 
- 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

Definition at line 14 of file ParametrizationForm.hpp.

Constructor & Destructor Documentation

◆ ParametrizationForm()

polyfem::solver::ParametrizationForm::ParametrizationForm ( CompositeParametrization &&  parametrizations)
inline

Definition at line 17 of file ParametrizationForm.hpp.

◆ ~ParametrizationForm()

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

Definition at line 18 of file ParametrizationForm.hpp.

Member Function Documentation

◆ apply_parametrizations()

Eigen::VectorXd polyfem::solver::ParametrizationForm::apply_parametrizations ( const Eigen::VectorXd &  x) const
inlineprivate

Definition at line 47 of file ParametrizationForm.hpp.

References polyfem::solver::CompositeParametrization::eval(), parametrizations_, and x.

Referenced by compute_partial_gradient(), init(), is_step_collision_free(), is_step_valid(), line_search_begin(), max_step_size(), post_step(), solution_changed(), and value_unweighted().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ compute_partial_gradient()

void polyfem::solver::ParametrizationForm::compute_partial_gradient ( const Eigen::VectorXd &  x,
Eigen::VectorXd &  gradv 
) const
finaloverrideprotectedvirtual

Reimplemented from polyfem::solver::AdjointForm.

Definition at line 51 of file ParametrizationForm.cpp.

References polyfem::solver::CompositeParametrization::apply_jacobian(), apply_parametrizations(), compute_partial_gradient_with_param(), parametrizations_, and x.

Here is the call graph for this function:

◆ compute_partial_gradient_with_param()

virtual void polyfem::solver::ParametrizationForm::compute_partial_gradient_with_param ( const Eigen::VectorXd &  x,
Eigen::VectorXd &  gradv 
) const
protectedpure virtual

Implemented in polyfem::solver::ParametrizedProductForm, and polyfem::solver::WeightedVolumeForm.

Referenced by compute_partial_gradient().

Here is the caller graph for this function:

◆ init()

void polyfem::solver::ParametrizationForm::init ( const Eigen::VectorXd &  x)
finaloverridevirtual

Initialize the form.

Parameters
xCurrent solution

Reimplemented from polyfem::solver::Form.

Definition at line 6 of file ParametrizationForm.cpp.

References apply_parametrizations(), init_with_param(), and x.

Here is the call graph for this function:

◆ init_with_param()

virtual void polyfem::solver::ParametrizationForm::init_with_param ( const Eigen::VectorXd &  x)
inlineprotectedvirtual

Definition at line 33 of file ParametrizationForm.hpp.

Referenced by init().

Here is the caller graph for this function:

◆ is_step_collision_free()

bool polyfem::solver::ParametrizationForm::is_step_collision_free ( const Eigen::VectorXd &  x0,
const Eigen::VectorXd &  x1 
) const
finaloverridevirtual

Checks if the step is collision free.

Returns
True if the step is collision free else false

Reimplemented from polyfem::solver::Form.

Definition at line 57 of file ParametrizationForm.cpp.

References apply_parametrizations(), and is_step_collision_free_with_param().

Here is the call graph for this function:

◆ is_step_collision_free_with_param()

virtual bool polyfem::solver::ParametrizationForm::is_step_collision_free_with_param ( const Eigen::VectorXd &  x0,
const Eigen::VectorXd &  x1 
) const
inlineprotectedvirtual

Definition at line 40 of file ParametrizationForm.hpp.

Referenced by is_step_collision_free().

Here is the caller graph for this function:

◆ is_step_valid()

bool polyfem::solver::ParametrizationForm::is_step_valid ( const Eigen::VectorXd &  x0,
const Eigen::VectorXd &  x1 
) const
finaloverridevirtual

Determine if a step from solution x0 to solution x1 is allowed.

Parameters
x0Current solution
x1Proposed next solution
Returns
True if the step is allowed

Reimplemented from polyfem::solver::Form.

Definition at line 11 of file ParametrizationForm.cpp.

References apply_parametrizations(), and is_step_valid_with_param().

Here is the call graph for this function:

◆ is_step_valid_with_param()

virtual bool polyfem::solver::ParametrizationForm::is_step_valid_with_param ( const Eigen::VectorXd &  x0,
const Eigen::VectorXd &  x1 
) const
inlineprotectedvirtual

Definition at line 34 of file ParametrizationForm.hpp.

Referenced by is_step_valid().

Here is the caller graph for this function:

◆ line_search_begin()

void polyfem::solver::ParametrizationForm::line_search_begin ( const Eigen::VectorXd &  x0,
const Eigen::VectorXd &  x1 
)
finaloverridevirtual

Initialize variables used during the line search.

Parameters
x0Current solution
x1Next solution

Reimplemented from polyfem::solver::Form.

Definition at line 21 of file ParametrizationForm.cpp.

References apply_parametrizations(), and line_search_begin_with_param().

Here is the call graph for this function:

◆ line_search_begin_with_param()

virtual void polyfem::solver::ParametrizationForm::line_search_begin_with_param ( const Eigen::VectorXd &  x0,
const Eigen::VectorXd &  x1 
)
inlineprotectedvirtual

Definition at line 36 of file ParametrizationForm.hpp.

Referenced by line_search_begin().

Here is the caller graph for this function:

◆ line_search_end()

void polyfem::solver::ParametrizationForm::line_search_end ( )
finaloverridevirtual

Clear variables used during the line search.

Reimplemented from polyfem::solver::Form.

Definition at line 26 of file ParametrizationForm.cpp.

References line_search_end_with_param().

Here is the call graph for this function:

◆ line_search_end_with_param()

virtual void polyfem::solver::ParametrizationForm::line_search_end_with_param ( )
inlineprotectedvirtual

Definition at line 37 of file ParametrizationForm.hpp.

Referenced by line_search_end().

Here is the caller graph for this function:

◆ max_step_size()

double polyfem::solver::ParametrizationForm::max_step_size ( const Eigen::VectorXd &  x0,
const Eigen::VectorXd &  x1 
) const
finalvirtual

Determine the maximum step size allowable between the current and next solution.

Parameters
x0Current solution (step size = 0)
x1Next solution (step size = 1)
Returns
Maximum allowable step size

Reimplemented from polyfem::solver::Form.

Definition at line 16 of file ParametrizationForm.cpp.

References apply_parametrizations(), and max_step_size_with_param().

Here is the call graph for this function:

◆ max_step_size_with_param()

virtual double polyfem::solver::ParametrizationForm::max_step_size_with_param ( const Eigen::VectorXd &  x0,
const Eigen::VectorXd &  x1 
) const
inlineprotectedvirtual

Definition at line 35 of file ParametrizationForm.hpp.

Referenced by max_step_size().

Here is the caller graph for this function:

◆ post_step()

void polyfem::solver::ParametrizationForm::post_step ( const polysolve::nonlinear::PostStepData &  data)
finaloverridevirtual

Update fields after a step in the optimization.

Parameters
iter_numOptimization iteration number
xCurrent solution
dataData containing info about the current iteration

Reimplemented from polyfem::solver::Form.

Definition at line 31 of file ParametrizationForm.cpp.

References polyfem::solver::CompositeParametrization::apply_jacobian(), apply_parametrizations(), parametrizations_, and post_step_with_param().

Here is the call graph for this function:

◆ post_step_with_param()

virtual void polyfem::solver::ParametrizationForm::post_step_with_param ( const polysolve::nonlinear::PostStepData &  data)
inlineprotectedvirtual

Definition at line 38 of file ParametrizationForm.hpp.

Referenced by post_step().

Here is the caller graph for this function:

◆ solution_changed()

void polyfem::solver::ParametrizationForm::solution_changed ( const Eigen::VectorXd &  new_x)
finaloverridevirtual

Update cached fields upon a change in the solution.

Parameters
new_xNew solution

Reimplemented from polyfem::solver::AdjointForm.

Definition at line 46 of file ParametrizationForm.cpp.

References apply_parametrizations(), and solution_changed_with_param().

Here is the call graph for this function:

◆ solution_changed_with_param()

virtual void polyfem::solver::ParametrizationForm::solution_changed_with_param ( const Eigen::VectorXd &  new_x)
inlineprotectedvirtual

Definition at line 39 of file ParametrizationForm.hpp.

Referenced by solution_changed().

Here is the caller graph for this function:

◆ value_unweighted()

double polyfem::solver::ParametrizationForm::value_unweighted ( const Eigen::VectorXd &  x) const
finaloverrideprotectedvirtual

Compute the value of the form.

Parameters
xCurrent solution
Returns
Computed value

Implements polyfem::solver::Form.

Definition at line 40 of file ParametrizationForm.cpp.

References apply_parametrizations(), value_unweighted_with_param(), x, and y.

Here is the call graph for this function:

◆ value_unweighted_with_param()

virtual double polyfem::solver::ParametrizationForm::value_unweighted_with_param ( const Eigen::VectorXd &  x) const
inlineprotectedvirtual

Reimplemented in polyfem::solver::ParametrizedProductForm, and polyfem::solver::WeightedVolumeForm.

Definition at line 41 of file ParametrizationForm.hpp.

Referenced by value_unweighted().

Here is the caller graph for this function:

Member Data Documentation

◆ parametrizations_

CompositeParametrization polyfem::solver::ParametrizationForm::parametrizations_
private

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