PolyFEM
Loading...
Searching...
No Matches
polyfem::solver::RayleighDampingForm Class Reference

Tikonov regularization form between x and x_lagged. More...

#include <RayleighDampingForm.hpp>

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

Public Member Functions

 RayleighDampingForm (const Form &form_to_damp, const time_integrator::ImplicitTimeIntegrator &time_integrator, const bool use_stiffness_as_ratio, const double stiffness, const int n_lagging_iters)
 Construct a new Lagged Regularization Form object.
 
std::string name () const override
 
void init_lagging (const Eigen::VectorXd &x) override
 Initialize lagged fields.
 
void update_lagging (const Eigen::VectorXd &x, const int iter_num) override
 Update lagged fields.
 
int max_lagging_iterations () const override
 Get the maximum number of lagging iteration allowable.
 
bool uses_lagging () const override
 Does this form require lagging?
 
double stiffness () const
 Get the stiffness of the form.
 
- 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.
 
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)
 

Static Public Member Functions

static std::shared_ptr< RayleighDampingFormcreate (const json &params, const std::unordered_map< std::string, std::shared_ptr< Form > > &forms, const time_integrator::ImplicitTimeIntegrator &time_integrator)
 

Protected Member Functions

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.
 
- 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 Attributes

const Formform_to_damp_
 Reference to the form we are damping.
 
const time_integrator::ImplicitTimeIntegratortime_integrator_
 Reference to the time integrator.
 
const bool use_stiffness_as_ratio_
 Whether to use the stiffness ratio or the stiffness value.
 
const double stiffness_
 Damping stiffness coefficient.
 
const int n_lagging_iters_
 Number of iterations to lag for.
 
StiffnessMatrix lagged_stiffness_matrix_
 The lagged stiffness matrix.
 

Additional Inherited Members

- 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

Tikonov regularization form between x and x_lagged.

Definition at line 12 of file RayleighDampingForm.hpp.

Constructor & Destructor Documentation

◆ RayleighDampingForm()

polyfem::solver::RayleighDampingForm::RayleighDampingForm ( const Form form_to_damp,
const time_integrator::ImplicitTimeIntegrator time_integrator,
const bool  use_stiffness_as_ratio,
const double  stiffness,
const int  n_lagging_iters 
)

Construct a new Lagged Regularization Form object.

Definition at line 7 of file RayleighDampingForm.cpp.

References n_lagging_iters_, and stiffness().

Here is the call graph for this function:

Member Function Documentation

◆ create()

std::shared_ptr< RayleighDampingForm > polyfem::solver::RayleighDampingForm::create ( const json params,
const std::unordered_map< std::string, std::shared_ptr< Form > > &  forms,
const time_integrator::ImplicitTimeIntegrator time_integrator 
)
static

Definition at line 23 of file RayleighDampingForm.cpp.

References polyfem::log_and_throw_error(), and stiffness().

Referenced by polyfem::solver::SolveData::init_forms().

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

◆ first_derivative_unweighted()

void polyfem::solver::RayleighDampingForm::first_derivative_unweighted ( const Eigen::VectorXd &  x,
Eigen::VectorXd &  gradv 
) const
overrideprotectedvirtual

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 50 of file RayleighDampingForm.cpp.

References polyfem::time_integrator::ImplicitTimeIntegrator::compute_velocity(), lagged_stiffness_matrix_, stiffness(), time_integrator_, and x.

Here is the call graph for this function:

◆ init_lagging()

void polyfem::solver::RayleighDampingForm::init_lagging ( const Eigen::VectorXd &  x)
overridevirtual

Initialize lagged fields.

Parameters
xCurrent solution

Reimplemented from polyfem::solver::Form.

Definition at line 62 of file RayleighDampingForm.cpp.

References update_lagging(), and x.

Here is the call graph for this function:

◆ max_lagging_iterations()

int polyfem::solver::RayleighDampingForm::max_lagging_iterations ( ) const
inlineoverridevirtual

Get the maximum number of lagging iteration allowable.

Reimplemented from polyfem::solver::Form.

Definition at line 57 of file RayleighDampingForm.hpp.

References n_lagging_iters_.

◆ name()

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

Implements polyfem::solver::Form.

Definition at line 28 of file RayleighDampingForm.hpp.

◆ second_derivative_unweighted()

void polyfem::solver::RayleighDampingForm::second_derivative_unweighted ( const Eigen::VectorXd &  x,
StiffnessMatrix hessian 
) const
overrideprotectedvirtual

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 56 of file RayleighDampingForm.cpp.

References polyfem::time_integrator::ImplicitTimeIntegrator::dv_dx(), lagged_stiffness_matrix_, stiffness(), and time_integrator_.

Here is the call graph for this function:

◆ stiffness()

double polyfem::solver::RayleighDampingForm::stiffness ( ) const

Get the stiffness of the form.

Definition at line 74 of file RayleighDampingForm.cpp.

References polyfem::time_integrator::ImplicitTimeIntegrator::dt(), stiffness_, time_integrator_, and use_stiffness_as_ratio_.

Referenced by create(), first_derivative_unweighted(), RayleighDampingForm(), second_derivative_unweighted(), and value_unweighted().

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

◆ update_lagging()

void polyfem::solver::RayleighDampingForm::update_lagging ( const Eigen::VectorXd &  x,
const int  iter_num 
)
overridevirtual

Update lagged fields.

Parameters
xCurrent solution
Returns
True if the lagged fields have been updated

Reimplemented from polyfem::solver::Form.

Definition at line 67 of file RayleighDampingForm.cpp.

References form_to_damp_, lagged_stiffness_matrix_, polyfem::solver::Form::second_derivative(), polyfem::solver::Form::weight(), and x.

Referenced by init_lagging().

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

◆ uses_lagging()

bool polyfem::solver::RayleighDampingForm::uses_lagging ( ) const
inlineoverridevirtual

Does this form require lagging?

Returns
True if the form requires lagging

Reimplemented from polyfem::solver::Form.

Definition at line 61 of file RayleighDampingForm.hpp.

◆ value_unweighted()

double polyfem::solver::RayleighDampingForm::value_unweighted ( const Eigen::VectorXd &  x) const
overrideprotectedvirtual

Compute the value of the form.

Parameters
xCurrent solution
Returns
Computed value

Implements polyfem::solver::Form.

Definition at line 44 of file RayleighDampingForm.cpp.

References polyfem::time_integrator::ImplicitTimeIntegrator::compute_velocity(), polyfem::time_integrator::ImplicitTimeIntegrator::dv_dx(), lagged_stiffness_matrix_, stiffness(), time_integrator_, and x.

Here is the call graph for this function:

Member Data Documentation

◆ form_to_damp_

const Form& polyfem::solver::RayleighDampingForm::form_to_damp_
private

Reference to the form we are damping.

Definition at line 67 of file RayleighDampingForm.hpp.

Referenced by update_lagging().

◆ lagged_stiffness_matrix_

StiffnessMatrix polyfem::solver::RayleighDampingForm::lagged_stiffness_matrix_
private

The lagged stiffness matrix.

Definition at line 73 of file RayleighDampingForm.hpp.

Referenced by first_derivative_unweighted(), second_derivative_unweighted(), update_lagging(), and value_unweighted().

◆ n_lagging_iters_

const int polyfem::solver::RayleighDampingForm::n_lagging_iters_
private

Number of iterations to lag for.

Definition at line 71 of file RayleighDampingForm.hpp.

Referenced by max_lagging_iterations(), and RayleighDampingForm().

◆ stiffness_

const double polyfem::solver::RayleighDampingForm::stiffness_
private

Damping stiffness coefficient.

Definition at line 70 of file RayleighDampingForm.hpp.

Referenced by stiffness().

◆ time_integrator_

const time_integrator::ImplicitTimeIntegrator& polyfem::solver::RayleighDampingForm::time_integrator_
private

Reference to the time integrator.

Definition at line 68 of file RayleighDampingForm.hpp.

Referenced by first_derivative_unweighted(), second_derivative_unweighted(), stiffness(), and value_unweighted().

◆ use_stiffness_as_ratio_

const bool polyfem::solver::RayleighDampingForm::use_stiffness_as_ratio_
private

Whether to use the stiffness ratio or the stiffness value.

Definition at line 69 of file RayleighDampingForm.hpp.

Referenced by stiffness().


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