PolyFEM
Loading...
Searching...
No Matches
Parametrization.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <utility>
5#include <vector>
6
7#include <Eigen/Core>
8
9namespace polyfem::solver
10{
13 {
14 public:
15 virtual ~Parametrization() = default;
16
21 virtual int inverse_size(int y_size) const = 0;
22
31 virtual Eigen::VectorXd inverse_eval(const Eigen::VectorXd &y) const = 0;
32
36 virtual int size(const int x_size) const = 0;
37
41 virtual Eigen::VectorXd eval(const Eigen::VectorXd &x) const = 0;
42
51 virtual Eigen::VectorXd apply_jacobian(const Eigen::VectorXd &grad_full, const Eigen::VectorXd &x) const = 0;
52 };
53
55 {
56 public:
58 CompositeParametrization(std::vector<std::shared_ptr<Parametrization>> parametrizations) : parametrizations_(std::move(parametrizations)) {}
59
60 int inverse_size(int y_size) const override;
61 Eigen::VectorXd inverse_eval(const Eigen::VectorXd &y) const override;
62 int size(const int x_size) const override;
63 Eigen::VectorXd eval(const Eigen::VectorXd &x) const override;
64 Eigen::VectorXd apply_jacobian(const Eigen::VectorXd &grad_full, const Eigen::VectorXd &x) const override;
65
66 private:
67 const std::vector<std::shared_ptr<Parametrization>> parametrizations_;
68 };
69} // namespace polyfem::solver
int y
int x
int size(const int x_size) const override
Compute DOF of y given DOF of x.
Eigen::VectorXd apply_jacobian(const Eigen::VectorXd &grad_full, const Eigen::VectorXd &x) const override
Apply jacobian for chain rule.
Eigen::VectorXd inverse_eval(const Eigen::VectorXd &y) const override
Eval x = f^-1 (y).
CompositeParametrization(std::vector< std::shared_ptr< Parametrization > > parametrizations)
const std::vector< std::shared_ptr< Parametrization > > parametrizations_
int inverse_size(int y_size) const override
Compute DOF of x given DOF of y.
Eigen::VectorXd eval(const Eigen::VectorXd &x) const override
Eval y = f(x).
virtual int size(const int x_size) const =0
Compute DOF of y given DOF of x.
virtual Eigen::VectorXd eval(const Eigen::VectorXd &x) const =0
Eval y = f(x).
virtual Eigen::VectorXd inverse_eval(const Eigen::VectorXd &y) const =0
Eval x = f^-1 (y).
virtual Eigen::VectorXd apply_jacobian(const Eigen::VectorXd &grad_full, const Eigen::VectorXd &x) const =0
Apply jacobian for chain rule.
virtual ~Parametrization()=default
virtual int inverse_size(int y_size) const =0
Compute DOF of x given DOF of y.