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
25 virtual Eigen::VectorXd inverse_eval(const Eigen::VectorXd &y);
26
30 virtual int size(const int x_size) const = 0;
31
35 virtual Eigen::VectorXd eval(const Eigen::VectorXd &x) const = 0;
36
45 virtual Eigen::VectorXd apply_jacobian(const Eigen::VectorXd &grad_full, const Eigen::VectorXd &x) const = 0;
46 };
47
49 {
50 public:
52 CompositeParametrization(std::vector<std::shared_ptr<Parametrization>> parametrizations) : parametrizations_(std::move(parametrizations)) {}
53
54 Eigen::VectorXd inverse_eval(const Eigen::VectorXd &y) override;
55
56 int size(const int x_size) const override;
57 Eigen::VectorXd eval(const Eigen::VectorXd &x) const override;
58 Eigen::VectorXd apply_jacobian(const Eigen::VectorXd &grad_full, const Eigen::VectorXd &x) const override;
59
60 private:
61 const std::vector<std::shared_ptr<Parametrization>> parametrizations_;
62 };
63} // 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) override
Eval x = f^-1 (y).
CompositeParametrization(std::vector< std::shared_ptr< Parametrization > > parametrizations)
const std::vector< std::shared_ptr< Parametrization > > parametrizations_
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)
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