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