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 namespace legacy
12 {
13 class State;
14 }
15} // namespace polyfem
16
17namespace polyfem::solver
18{
20 {
21 public:
22 ParametrizationForm(CompositeParametrization &&parametrizations) : AdjointForm({}), parametrizations_(parametrizations) {}
24
25 virtual void init(const Eigen::VectorXd &x) final override;
26 virtual bool is_step_valid(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const final override;
27 virtual double max_step_size(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const final;
28 virtual void line_search_begin(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) final override;
29 virtual void line_search_end() final override;
30 virtual void post_step(const polysolve::nonlinear::PostStepData &data) final override;
31 virtual void solution_changed(const Eigen::VectorXd &new_x) final override;
32 virtual bool is_step_collision_free(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const final override;
33
34 protected:
35 virtual double value_unweighted(const Eigen::VectorXd &x) const final override;
36 virtual void compute_partial_gradient(const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const final override;
37
38 virtual void init_with_param(const Eigen::VectorXd &x) {}
39 virtual bool is_step_valid_with_param(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const { return true; }
40 virtual double max_step_size_with_param(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const { return 1; }
41 virtual void line_search_begin_with_param(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) {}
43 virtual void post_step_with_param(const polysolve::nonlinear::PostStepData &data) {}
44 virtual void solution_changed_with_param(const Eigen::VectorXd &new_x) {}
45 virtual bool is_step_collision_free_with_param(const Eigen::VectorXd &x0, const Eigen::VectorXd &x1) const { return true; }
46 virtual double value_unweighted_with_param(const Eigen::VectorXd &x) const { return 0; }
47 virtual void compute_partial_gradient_with_param(const Eigen::VectorXd &x, Eigen::VectorXd &gradv) const = 0;
48
49 private:
51
52 inline Eigen::VectorXd apply_parametrizations(const Eigen::VectorXd &x) const
53 {
54 return parametrizations_.eval(x);
55 }
56 };
57} // 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.
polyfem::legacy::State State
Definition Remesher.hpp:19