PolyFEM
Loading...
Searching...
No Matches
InflatedPeriodicShapeVariableToSimulation.hpp
Go to the documentation of this file.
1#pragma once
2
6#include <inflator/Inflator.hpp>
7
8namespace polyfem::solver
9{
12 {
13 public:
15 std::vector<std::shared_ptr<varform::DifferentiableVarForm>> varforms,
16 std::vector<std::shared_ptr<DiffCache>> diff_caches,
17 CompositeParametrization parametrization, const json &settings, const io::ResourceIO &resources);
18
19 std::string name() const override { return "inflated-periodic-shape"; }
21 bool affects_varform(const varform::DifferentiableVarForm &target) const override;
22 void update(const Eigen::VectorXd &variables) override;
23 void update_state_variables(const Eigen::VectorXd &variables, Eigen::VectorXd &state_variables) const override;
24 Eigen::VectorXd compute_adjoint_term(const Eigen::VectorXd &variables) const override;
25 int inverse_dof() const override;
26 Eigen::VectorXd inverse_eval() const override;
27 Eigen::VectorXd apply_parametrization_jacobian(const Eigen::VectorXd &term, const Eigen::VectorXd &variables) const override;
28
29 private:
30 std::vector<std::shared_ptr<varform::DifferentiableVarForm>> varforms_;
31 std::vector<std::shared_ptr<DiffCache>> diff_caches_;
34 std::filesystem::path wire_;
35 std::string work_directory_;
37 inflator::Options options_;
38 int generation_ = 0;
39 Eigen::VectorXd initial_;
40 Eigen::VectorXd last_parameters_;
41 Eigen::VectorXd periodic_parameters_;
43 Eigen::MatrixXd shape_jacobian_;
45 Eigen::MatrixXd periodic_jacobian_;
46 std::unique_ptr<PeriodicMeshToMesh> periodic_map_;
47 };
48} // namespace polyfem::solver
Read-only interface to a hierarchical collection of simulation resources.
Regenerate periodic meshes from [cell width, inflator parameters] and map shape derivatives back to d...
Eigen::MatrixXd shape_jacobian_
Rows are design parameters; columns are interleaved physical vertex coordinates.
Eigen::VectorXd inverse_eval() const override
Compute optimization variables from forward simulation varform::DifferentiableVarForm.
Eigen::MatrixXd periodic_jacobian_
Rows are design parameters; columns are periodic coordinates followed by the cell matrix.
void update(const Eigen::VectorXd &variables) override
Update forward simulation varforms from optimization variables.
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.
std::vector< std::shared_ptr< varform::DifferentiableVarForm > > varforms_
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.
bool affects_varform(const varform::DifferentiableVarForm &target) const override
Return true if current var2sim maps to target varform.
Maps optimization variables to forward simulation varform::DifferentiableVarForm variables.
Optimization-facing interface implemented by differentiated VarForm adapters.
nlohmann::json json
Definition Common.hpp:9