|
PolyFEM
|
Maps to mesh vertex position. More...
#include <ShapeVariableToSimulation.hpp>
Public Types | |
| using | StatePtrs = std::vector< std::shared_ptr< legacy::State > > |
| using | DiffCachePtrs = std::vector< std::shared_ptr< DiffCache > > |
Public Member Functions | |
| ShapeVariableToSimulation (StatePtrs states, DiffCachePtrs diff_caches, CompositeParametrization parametrizations, Eigen::VectorXi active_dimensions, Eigen::VectorXi active_geom_nodes) | |
| Construct ShapeVariableToSimulation. | |
| std::string | name () const override |
| ParameterType | parameter_type () const override |
| bool | affect_state (const legacy::State &target) const override |
| Return true if current var2sim maps to target state. | |
| void | update (const Eigen::VectorXd &x) override |
| Update forward simulation states from optimization variables. | |
| void | update_state_variables (const Eigen::VectorXd &x, Eigen::VectorXd &state_variables) const override |
| Update state variables from optimization variables. | |
| Eigen::VectorXd | compute_adjoint_term (const Eigen::VectorXd &x) const override |
| Compute adjoint contribution of objective gradient. | |
| int | inverse_dof () const override |
| Compute optimization variables dof. | |
| Eigen::VectorXd | inverse_eval () const override |
| Compute optimization variables from forward simulation legacy::State. | |
| Eigen::VectorXd | apply_parametrization_jacobian (const Eigen::VectorXd &term, const Eigen::VectorXd &x) const override |
| Apply parametrization jacobian to compute the gradient w.r.t. | |
Public Member Functions inherited from polyfem::solver::VariableToSimulation | |
| virtual | ~VariableToSimulation ()=default |
Private Member Functions | |
| int | para_out_dof () const |
| Return variable dof after parametrization mapping. | |
Private Attributes | |
| int | dim_ |
| int | vertex_num_ |
| StatePtrs | states_ |
| DiffCachePtrs | diff_caches_ |
| CompositeParametrization | parametrization_ |
| Eigen::VectorXi | active_dimensions_ |
| Eigen::VectorXi | active_geom_nodes_ |
Maps to mesh vertex position.
Expect optimization variable layout: [vertex 0 position] [vertex 1 position] ...
Definition at line 15 of file ShapeVariableToSimulation.hpp.
| using polyfem::solver::ShapeVariableToSimulation::DiffCachePtrs = std::vector<std::shared_ptr<DiffCache> > |
Definition at line 19 of file ShapeVariableToSimulation.hpp.
| using polyfem::solver::ShapeVariableToSimulation::StatePtrs = std::vector<std::shared_ptr<legacy::State> > |
Definition at line 18 of file ShapeVariableToSimulation.hpp.
| polyfem::solver::ShapeVariableToSimulation::ShapeVariableToSimulation | ( | StatePtrs | states, |
| DiffCachePtrs | diff_caches, | ||
| CompositeParametrization | parametrizations, | ||
| Eigen::VectorXi | active_dimensions, | ||
| Eigen::VectorXi | active_geom_nodes | ||
| ) |
Construct ShapeVariableToSimulation.
| [in] | states | Shared ptr to all forward sim states. |
| [in] | diff_caches | Shared ptr to all diff caches. |
| [in] | parametrizations | Parametrizations. |
| [in] | active_dimensions | Vector of active dimensions per mesh node. Empty implies all active. |
| [in] | active_geom_nodes | Vector of active nodes. Empty implies all active. |
| std::runtime_error | Throw if input is invalid. |
Definition at line 17 of file ShapeVariableToSimulation.cpp.
References active_dimensions_, active_geom_nodes_, diff_caches_, dim_, polyfem::solver::is_active_dims_valid(), polyfem::solver::is_active_geom_nodes_valid(), polyfem::log_and_throw_adjoint_error(), states_, and vertex_num_.
|
overridevirtual |
Return true if current var2sim maps to target state.
Implements polyfem::solver::VariableToSimulation.
Definition at line 65 of file ShapeVariableToSimulation.cpp.
References states_.
|
overridevirtual |
Apply parametrization jacobian to compute the gradient w.r.t.
to optimization variables.
| term | Gradient w.r.t. to full inherent dof (Ex. all vertices for shape var2sim) |
| x | Optimization variables. |
Implements polyfem::solver::VariableToSimulation.
Definition at line 201 of file ShapeVariableToSimulation.cpp.
References active_dimensions_, active_geom_nodes_, polyfem::solver::CompositeParametrization::apply_jacobian(), dim_, para_out_dof(), parametrization_, vertex_num_, and x.
|
overridevirtual |
Compute adjoint contribution of objective gradient.
See arXiv:2205.13643.
Let objective function be J and optimization variable be x. This method computes all adjoint related terms in dJ/dx. For static case (E.q. 11), it's the second term. For dynamic case (E.q. 15), it's everything except ∂qJ.
| x[in] | Optimization variables. |
Implements polyfem::solver::VariableToSimulation.
Definition at line 118 of file ShapeVariableToSimulation.cpp.
References active_dimensions_, active_geom_nodes_, polyfem::solver::CompositeParametrization::apply_jacobian(), diff_caches_, dim_, polyfem::solver::AdjointTools::dJ_shape_homogenization_adjoint_term(), polyfem::solver::AdjointTools::dJ_shape_static_adjoint_term(), polyfem::solver::AdjointTools::dJ_shape_transient_adjoint_term(), polyfem::get_adjoint_mat(), para_out_dof(), parametrization_, states_, vertex_num_, and x.
|
overridevirtual |
Compute optimization variables dof.
| std::runtime_error | Throw if not implemented. |
Implements polyfem::solver::VariableToSimulation.
Definition at line 179 of file ShapeVariableToSimulation.cpp.
References polyfem::solver::CompositeParametrization::inverse_size(), para_out_dof(), and parametrization_.
|
overridevirtual |
Compute optimization variables from forward simulation legacy::State.
| std::runtime_error | Throw if not implemented. |
Implements polyfem::solver::VariableToSimulation.
Definition at line 184 of file ShapeVariableToSimulation.cpp.
References active_dimensions_, active_geom_nodes_, polyfem::solver::CompositeParametrization::inverse_eval(), para_out_dof(), parametrization_, states_, and x.
|
overridevirtual |
Implements polyfem::solver::VariableToSimulation.
Definition at line 55 of file ShapeVariableToSimulation.cpp.
|
private |
Return variable dof after parametrization mapping.
Definition at line 220 of file ShapeVariableToSimulation.cpp.
References active_dimensions_, and active_geom_nodes_.
Referenced by apply_parametrization_jacobian(), compute_adjoint_term(), inverse_dof(), inverse_eval(), update(), and update_state_variables().
|
overridevirtual |
Implements polyfem::solver::VariableToSimulation.
Definition at line 60 of file ShapeVariableToSimulation.cpp.
References polyfem::solver::Shape.
|
overridevirtual |
Update forward simulation states from optimization variables.
| [in] | x | Optimization variables. |
Implements polyfem::solver::VariableToSimulation.
Definition at line 77 of file ShapeVariableToSimulation.cpp.
References active_dimensions_, active_geom_nodes_, polyfem::solver::CompositeParametrization::eval(), para_out_dof(), parametrization_, states_, x, and y.
|
overridevirtual |
Update state variables from optimization variables.
Compared to update() this method update abstract state variables instead of writing directly to state.
| [in] | x | Optimization variables. |
| [out] | state_variables | Abstract state variables update dst. |
Implements polyfem::solver::VariableToSimulation.
Definition at line 99 of file ShapeVariableToSimulation.cpp.
References active_dimensions_, active_geom_nodes_, dim_, polyfem::solver::CompositeParametrization::eval(), para_out_dof(), parametrization_, vertex_num_, x, and y.
|
private |
Definition at line 50 of file ShapeVariableToSimulation.hpp.
Referenced by apply_parametrization_jacobian(), compute_adjoint_term(), inverse_eval(), para_out_dof(), ShapeVariableToSimulation(), update(), and update_state_variables().
|
private |
Definition at line 51 of file ShapeVariableToSimulation.hpp.
Referenced by apply_parametrization_jacobian(), compute_adjoint_term(), inverse_eval(), para_out_dof(), ShapeVariableToSimulation(), update(), and update_state_variables().
|
private |
Definition at line 48 of file ShapeVariableToSimulation.hpp.
Referenced by compute_adjoint_term(), and ShapeVariableToSimulation().
|
private |
Definition at line 45 of file ShapeVariableToSimulation.hpp.
Referenced by apply_parametrization_jacobian(), compute_adjoint_term(), ShapeVariableToSimulation(), and update_state_variables().
|
private |
Definition at line 49 of file ShapeVariableToSimulation.hpp.
Referenced by apply_parametrization_jacobian(), compute_adjoint_term(), inverse_dof(), inverse_eval(), update(), and update_state_variables().
|
private |
Definition at line 47 of file ShapeVariableToSimulation.hpp.
Referenced by affect_state(), compute_adjoint_term(), inverse_eval(), ShapeVariableToSimulation(), and update().
|
private |
Definition at line 46 of file ShapeVariableToSimulation.hpp.
Referenced by apply_parametrization_jacobian(), compute_adjoint_term(), ShapeVariableToSimulation(), and update_state_variables().