PolyFEM
Loading...
Searching...
No Matches
ParametrizationForm.hpp
Go to the documentation of this file.
1#pragma once
2
6
7namespace polyfem
8{
9 class State;
10}
11
12namespace polyfem::solver
13{
15 {
16 public:
17 ParametrizationForm(CompositeParametrization &&parametrizations) : AdjointForm({}), parametrizations_(parametrizations) {}
19
20 virtual void init(const Eigen::VectorXd &x) final override;
21 virtual bool is_step_valid(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const final override;
22 virtual double max_step_size(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const final;
23 virtual void line_search_begin(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) final override;
24 virtual void line_search_end() final override;
25 virtual void post_step(const polysolve::nonlinear::PostStepData &data) final override;
26 virtual void solution_changed(const Eigen::VectorXd &new_x) final override;
27 virtual bool is_step_collision_free(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const final override;
28
29 protected:
30 virtual double value_unweighted(const Eigen::VectorXd &x) const final override;
31 virtual void compute_partial_gradient(const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const final override;
32
33 virtual void init_with_param(const Eigen::VectorXd &x) {}
34 virtual bool is_step_valid_with_param(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const { return true; }
35 virtual double max_step_size_with_param(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const { return 1; }
36 virtual void line_search_begin_with_param(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) {}
38 virtual void post_step_with_param(const polysolve::nonlinear::PostStepData &data) {}
39 virtual void solution_changed_with_param(const Eigen::VectorXd &new_x) {}
40 virtual bool is_step_collision_free_with_param(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const { return true; }
41 virtual double value_unweighted_with_param(const Eigen::VectorXd &x) const { return 0; }
42 virtual void compute_partial_gradient_with_param(const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const = 0;
43
44 private:
46
47 inline Eigen::VectorXd apply_parametrizations(const Eigen::VectorXd &x) const
48 {
49 return parametrizations_.eval(x);
50 }
51 };
52} // namespace polyfem::solver
int x
Eigen::VectorXd eval(const Eigen::VectorXd &x) const override
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
ParametrizationForm(CompositeParametrization &&parametrizations)
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.