PolyFEM
Loading...
Searching...
No Matches
ParametrizationForm.cpp
Go to the documentation of this file.
2
3#include <polyfem/State.hpp>
4
5#include <Eigen/Core>
6
7namespace polyfem::solver
8{
9 void ParametrizationForm::init(const Eigen::VectorXd &x)
10 {
12 }
13
14 bool ParametrizationForm::is_step_valid(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
15 {
17 }
18
19 double ParametrizationForm::max_step_size(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
20 {
22 }
23
24 void ParametrizationForm::line_search_begin(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1)
25 {
27 }
28
33
34 void ParametrizationForm::post_step(const polysolve::nonlinear::PostStepData &data)
35 {
36 post_step_with_param(polysolve::nonlinear::PostStepData(
37 data.iter_num,
38 data.solver_info,
40 parametrizations_.apply_jacobian(data.grad, data.x)));
41 }
42
43 double ParametrizationForm::value_unweighted(const Eigen::VectorXd &x) const
44 {
45 Eigen::VectorXd y = apply_parametrizations(x);
47 }
48
49 void ParametrizationForm::solution_changed(const Eigen::VectorXd &new_x)
50 {
52 }
53
54 void ParametrizationForm::compute_partial_gradient(const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const
55 {
57 gradv = parametrizations_.apply_jacobian(gradv, x);
58 }
59
60 bool ParametrizationForm::is_step_collision_free(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
61 {
63 }
64} // namespace polyfem::solver
int y
int x
Eigen::VectorXd apply_jacobian(const Eigen::VectorXd &grad_full, const Eigen::VectorXd &x) const override
Apply jacobian for chain rule.
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(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const final override
Checks if the step is collision free.
virtual void line_search_begin_with_param(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1)
virtual bool is_step_collision_free_with_param(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
virtual bool is_step_valid_with_param(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const
virtual void solution_changed(const Eigen::VectorXd &new_x) final override
Update cached fields upon a change in the solution.
virtual double value_unweighted(const Eigen::VectorXd &x) const final override
Compute the value of the form.
virtual void init(const Eigen::VectorXd &x) final override
Initialize the form.
virtual void post_step(const polysolve::nonlinear::PostStepData &data) final override
Update fields after a step in the optimization.
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 double max_step_size_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
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_end() final override
Clear variables used during the line search.
Eigen::VectorXd apply_parametrizations(const Eigen::VectorXd &x) const
virtual void line_search_begin(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) final override
Initialize variables used during the line search.
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.