|
PolyFEM
|
Map per body to per element in dim major layout (x1 x2 ... y1 y1 ... z1 z2 ...) More...
#include <Parametrizations.hpp>
Public Member Functions | |
| PerBody2PerElem (const mesh::Mesh &mesh) | |
| int | size (const int x_size) const override |
| Compute DOF of y given DOF of x. | |
| int | inverse_size (int y_size) const override |
| Compute DOF of x given DOF of y. | |
| Eigen::VectorXd | inverse_eval (const Eigen::VectorXd &y) const override |
| Eval x = f^-1 (y). | |
| Eigen::VectorXd | eval (const Eigen::VectorXd &x) const override |
| Eval y = f(x). | |
| Eigen::VectorXd | apply_jacobian (const Eigen::VectorXd &grad, const Eigen::VectorXd &x) const override |
| Apply jacobian for chain rule. | |
Public Member Functions inherited from polyfem::solver::Parametrization | |
| virtual | ~Parametrization ()=default |
Private Attributes | |
| const mesh::Mesh & | mesh_ |
| int | full_size_ |
| int | reduced_size_ |
| Element num. | |
| Eigen::VectorXi | compacted_body_elem_num_ |
| Body num. | |
| Eigen::VectorXi | elem_id_to_compacted_body_id_ |
| Number if elements of a body. | |
Map per body to per element in dim major layout (x1 x2 ... y1 y1 ... z1 z2 ...)
Definition at line 105 of file Parametrizations.hpp.
| polyfem::solver::PerBody2PerElem::PerBody2PerElem | ( | const mesh::Mesh & | mesh | ) |
Definition at line 383 of file Parametrizations.cpp.
References compacted_body_elem_num_, elem_id_to_compacted_body_id_, full_size_, polyfem::mesh::Mesh::get_body_id(), polyfem::logger(), mesh_, polyfem::mesh::Mesh::n_elements(), and reduced_size_.
|
overridevirtual |
Apply jacobian for chain rule.
Let g(y) = g(f(x)). Given ∂g/∂y, compute ∂g/∂x = ∂g/∂y * ∂y/∂x.
| [in] | grad_full | ∂g/∂y. |
| [in] | x | Where ∂g/∂x is evaluated. |
Implements polyfem::solver::Parametrization.
Definition at line 461 of file Parametrizations.cpp.
References elem_id_to_compacted_body_id_, full_size_, mesh_, polyfem::mesh::Mesh::n_elements(), reduced_size_, size(), and x.
|
overridevirtual |
Eval y = f(x).
| [in] | x | x. |
Implements polyfem::solver::Parametrization.
Definition at line 441 of file Parametrizations.cpp.
References elem_id_to_compacted_body_id_, full_size_, mesh_, polyfem::mesh::Mesh::n_elements(), reduced_size_, size(), x, and y.
|
overridevirtual |
Eval x = f^-1 (y).
This is not a strict inverse in mathematical sense, one may choose "reasonable" x even if f is not one-to-one.
| [in] | y | y. |
| std::runtime_error | Throw if inverse not implemented or is impossible. |
Implements polyfem::solver::Parametrization.
Definition at line 420 of file Parametrizations.cpp.
References compacted_body_elem_num_, elem_id_to_compacted_body_id_, full_size_, inverse_size(), mesh_, polyfem::mesh::Mesh::n_elements(), reduced_size_, x, and y.
|
overridevirtual |
Compute DOF of x given DOF of y.
| [in] | y_size | DOF of y. |
| std::runtime_error | Throw if inverse not impossible or y_size is invalid. |
Implements polyfem::solver::Parametrization.
Definition at line 409 of file Parametrizations.cpp.
References full_size_, polyfem::log_and_throw_adjoint_error(), and reduced_size_.
Referenced by inverse_eval().
|
overridevirtual |
Compute DOF of y given DOF of x.
| [in] | x_size | The DOF of x. |
Implements polyfem::solver::Parametrization.
Definition at line 455 of file Parametrizations.cpp.
References full_size_, and reduced_size_.
Referenced by apply_jacobian(), and eval().
|
private |
Body num.
Definition at line 120 of file Parametrizations.hpp.
Referenced by inverse_eval(), and PerBody2PerElem().
|
private |
Number if elements of a body.
Definition at line 121 of file Parametrizations.hpp.
Referenced by apply_jacobian(), eval(), inverse_eval(), and PerBody2PerElem().
|
private |
Definition at line 118 of file Parametrizations.hpp.
Referenced by apply_jacobian(), eval(), inverse_eval(), inverse_size(), PerBody2PerElem(), and size().
|
private |
Definition at line 117 of file Parametrizations.hpp.
Referenced by apply_jacobian(), eval(), inverse_eval(), and PerBody2PerElem().
|
private |
Element num.
Definition at line 119 of file Parametrizations.hpp.
Referenced by apply_jacobian(), eval(), inverse_eval(), inverse_size(), PerBody2PerElem(), and size().