PolyFEM
Loading...
Searching...
No Matches
Parametrization.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <vector>
5
6#include <Eigen/Core>
7
8namespace polyfem::solver
9{
14 {
15 public:
17 virtual ~Parametrization() {}
18
19 virtual Eigen::VectorXd inverse_eval(const Eigen::VectorXd &y);
20
21 virtual int size(const int x_size) const = 0; // just for verification
22 virtual Eigen::VectorXd eval(const Eigen::VectorXd &x) const = 0;
23 virtual Eigen::VectorXd apply_jacobian(const Eigen::VectorXd &grad_full, const Eigen::VectorXd &x) const = 0;
24 };
25
27 {
28 public:
29 CompositeParametrization() : parametrizations_(std::vector<std::shared_ptr<Parametrization>>()) {}
30 CompositeParametrization(std::vector<std::shared_ptr<Parametrization>>&& parametrizations) : parametrizations_(parametrizations) {}
32
33 Eigen::VectorXd inverse_eval(const Eigen::VectorXd &y) override;
34
35 int size(const int x_size) const override;
36 Eigen::VectorXd eval(const Eigen::VectorXd &x) const override;
37 Eigen::VectorXd apply_jacobian(const Eigen::VectorXd &grad_full, const Eigen::VectorXd &x) const override;
38
39 private:
40 const std::vector<std::shared_ptr<Parametrization>> parametrizations_;
41 };
42} // namespace polyfem::solver
int y
int x
int size(const int x_size) const override
Eigen::VectorXd apply_jacobian(const Eigen::VectorXd &grad_full, const Eigen::VectorXd &x) const override
Eigen::VectorXd inverse_eval(const Eigen::VectorXd &y) override
const std::vector< std::shared_ptr< Parametrization > > parametrizations_
CompositeParametrization(std::vector< std::shared_ptr< Parametrization > > &&parametrizations)
Eigen::VectorXd eval(const Eigen::VectorXd &x) const override
This parameterize a function f : x -> y and provides the chain rule with respect to previous gradient...
virtual int size(const int x_size) const =0
virtual Eigen::VectorXd eval(const Eigen::VectorXd &x) const =0
virtual Eigen::VectorXd inverse_eval(const Eigen::VectorXd &y)
virtual Eigen::VectorXd apply_jacobian(const Eigen::VectorXd &grad_full, const Eigen::VectorXd &x) const =0