|
PolyFEM
|
Regenerate periodic meshes from [cell width, inflator parameters] and map shape derivatives back to design variables. More...
#include <InflatedPeriodicShapeVariableToSimulation.hpp>
Public Member Functions | |
| InflatedPeriodicShapeVariableToSimulation (std::vector< std::shared_ptr< varform::DifferentiableVarForm > > varforms, std::vector< std::shared_ptr< DiffCache > > diff_caches, CompositeParametrization parametrization, const json &settings, const io::ResourceIO &resources) | |
| std::string | name () const override |
| ParameterType | parameter_type () const override |
| bool | affects_varform (const varform::DifferentiableVarForm &target) const override |
| Return true if current var2sim maps to target varform. | |
| void | update (const Eigen::VectorXd &variables) override |
| Update forward simulation varforms from optimization variables. | |
| void | update_state_variables (const Eigen::VectorXd &variables, Eigen::VectorXd &state_variables) const override |
| Update varform variables from optimization variables. | |
| Eigen::VectorXd | compute_adjoint_term (const Eigen::VectorXd &variables) 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 varform::DifferentiableVarForm. | |
| Eigen::VectorXd | apply_parametrization_jacobian (const Eigen::VectorXd &term, const Eigen::VectorXd &variables) const override |
| Apply parametrization jacobian to compute the gradient w.r.t. | |
Public Member Functions inherited from polyfem::solver::VariableToSimulation | |
| virtual | ~VariableToSimulation ()=default |
Private Attributes | |
| std::vector< std::shared_ptr< varform::DifferentiableVarForm > > | varforms_ |
| std::vector< std::shared_ptr< DiffCache > > | diff_caches_ |
| CompositeParametrization | parametrization_ |
| int | dimension_ |
| std::filesystem::path | wire_ |
| std::string | work_directory_ |
| json | meshing_ |
| inflator::Options | options_ |
| int | generation_ = 0 |
| Eigen::VectorXd | initial_ |
| Eigen::VectorXd | last_parameters_ |
| Eigen::VectorXd | periodic_parameters_ |
| Eigen::MatrixXd | shape_jacobian_ |
| Rows are design parameters; columns are interleaved physical vertex coordinates. | |
| Eigen::MatrixXd | periodic_jacobian_ |
| Rows are design parameters; columns are periodic coordinates followed by the cell matrix. | |
| std::unique_ptr< PeriodicMeshToMesh > | periodic_map_ |
Regenerate periodic meshes from [cell width, inflator parameters] and map shape derivatives back to design variables.
Definition at line 11 of file InflatedPeriodicShapeVariableToSimulation.hpp.
| polyfem::solver::InflatedPeriodicShapeVariableToSimulation::InflatedPeriodicShapeVariableToSimulation | ( | std::vector< std::shared_ptr< varform::DifferentiableVarForm > > | varforms, |
| std::vector< std::shared_ptr< DiffCache > > | diff_caches, | ||
| CompositeParametrization | parametrization, | ||
| const json & | settings, | ||
| const io::ResourceIO & | resources | ||
| ) |
Definition at line 15 of file InflatedPeriodicShapeVariableToSimulation.cpp.
References dimension_, initial_, polyfem::log_and_throw_adjoint_error(), polyfem::io::ResourceIO::materialize(), meshing_, options_, varforms_, wire_, and work_directory_.
|
overridevirtual |
Return true if current var2sim maps to target varform.
Implements polyfem::solver::VariableToSimulation.
Definition at line 75 of file InflatedPeriodicShapeVariableToSimulation.cpp.
References varforms_.
|
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 237 of file InflatedPeriodicShapeVariableToSimulation.cpp.
References polyfem::solver::CompositeParametrization::apply_jacobian(), parametrization_, and shape_jacobian_.
|
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 207 of file InflatedPeriodicShapeVariableToSimulation.cpp.
References polyfem::solver::CompositeParametrization::apply_jacobian(), diff_caches_, polyfem::solver::AdjointTools::dJ_periodic_shape_adjoint_term(), polyfem::get_adjoint_mat(), initial_, parametrization_, periodic_jacobian_, periodic_map_, periodic_parameters_, and varforms_.
|
overridevirtual |
Compute optimization variables dof.
| std::runtime_error | Throw if not implemented. |
Implements polyfem::solver::VariableToSimulation.
Definition at line 227 of file InflatedPeriodicShapeVariableToSimulation.cpp.
References initial_, polyfem::solver::CompositeParametrization::inverse_size(), and parametrization_.
|
overridevirtual |
Compute optimization variables from forward simulation varform::DifferentiableVarForm.
| std::runtime_error | Throw if not implemented. |
Implements polyfem::solver::VariableToSimulation.
Definition at line 232 of file InflatedPeriodicShapeVariableToSimulation.cpp.
References initial_, polyfem::solver::CompositeParametrization::inverse_eval(), and parametrization_.
|
inlineoverridevirtual |
Implements polyfem::solver::VariableToSimulation.
Definition at line 19 of file InflatedPeriodicShapeVariableToSimulation.hpp.
|
inlineoverridevirtual |
Implements polyfem::solver::VariableToSimulation.
Definition at line 20 of file InflatedPeriodicShapeVariableToSimulation.hpp.
References polyfem::solver::PeriodicShape.
|
overridevirtual |
Update forward simulation varforms from optimization variables.
| [in] | x | Optimization variables. |
Implements polyfem::solver::VariableToSimulation.
Definition at line 80 of file InflatedPeriodicShapeVariableToSimulation.cpp.
References polyfem::adjoint_logger(), diff_caches_, dimension_, polyfem::solver::CompositeParametrization::eval(), polyfem::utils::flatten(), generation_, initial_, last_parameters_, polyfem::log_and_throw_adjoint_error(), options_, parametrization_, periodic_jacobian_, periodic_map_, periodic_parameters_, shape_jacobian_, varforms_, wire_, work_directory_, and polyfem::io::MshWriter::write().
|
overridevirtual |
Update varform variables from optimization variables.
Compared to update() this method update abstract varform variables instead of writing directly to varform.
| [in] | x | Optimization variables. |
| [out] | state_variables | Abstract varform variables update dst. |
Implements polyfem::solver::VariableToSimulation.
Definition at line 202 of file InflatedPeriodicShapeVariableToSimulation.cpp.
References polyfem::log_and_throw_adjoint_error().
|
private |
Definition at line 31 of file InflatedPeriodicShapeVariableToSimulation.hpp.
Referenced by compute_adjoint_term(), and update().
|
private |
Definition at line 33 of file InflatedPeriodicShapeVariableToSimulation.hpp.
Referenced by InflatedPeriodicShapeVariableToSimulation(), and update().
|
private |
Definition at line 38 of file InflatedPeriodicShapeVariableToSimulation.hpp.
Referenced by update().
|
private |
Definition at line 39 of file InflatedPeriodicShapeVariableToSimulation.hpp.
Referenced by compute_adjoint_term(), InflatedPeriodicShapeVariableToSimulation(), inverse_dof(), inverse_eval(), and update().
|
private |
Definition at line 40 of file InflatedPeriodicShapeVariableToSimulation.hpp.
Referenced by update().
|
private |
Definition at line 36 of file InflatedPeriodicShapeVariableToSimulation.hpp.
Referenced by InflatedPeriodicShapeVariableToSimulation().
|
private |
Definition at line 37 of file InflatedPeriodicShapeVariableToSimulation.hpp.
Referenced by InflatedPeriodicShapeVariableToSimulation(), and update().
|
private |
Definition at line 32 of file InflatedPeriodicShapeVariableToSimulation.hpp.
Referenced by apply_parametrization_jacobian(), compute_adjoint_term(), inverse_dof(), inverse_eval(), and update().
|
private |
Rows are design parameters; columns are periodic coordinates followed by the cell matrix.
Definition at line 45 of file InflatedPeriodicShapeVariableToSimulation.hpp.
Referenced by compute_adjoint_term(), and update().
|
private |
Definition at line 46 of file InflatedPeriodicShapeVariableToSimulation.hpp.
Referenced by compute_adjoint_term(), and update().
|
private |
Definition at line 41 of file InflatedPeriodicShapeVariableToSimulation.hpp.
Referenced by compute_adjoint_term(), and update().
|
private |
Rows are design parameters; columns are interleaved physical vertex coordinates.
Definition at line 43 of file InflatedPeriodicShapeVariableToSimulation.hpp.
Referenced by apply_parametrization_jacobian(), and update().
|
private |
Definition at line 30 of file InflatedPeriodicShapeVariableToSimulation.hpp.
Referenced by affects_varform(), compute_adjoint_term(), InflatedPeriodicShapeVariableToSimulation(), and update().
|
private |
Definition at line 34 of file InflatedPeriodicShapeVariableToSimulation.hpp.
Referenced by InflatedPeriodicShapeVariableToSimulation(), and update().
|
private |
Definition at line 35 of file InflatedPeriodicShapeVariableToSimulation.hpp.
Referenced by InflatedPeriodicShapeVariableToSimulation(), and update().