PolyFEM
Loading...
Searching...
No Matches
DirichletBoundaryVariableToSimulation.hpp
Go to the documentation of this file.
1#pragma once
2
4
5#include <Eigen/Core>
6
7#include <memory>
8#include <string>
9#include <vector>
10
11namespace polyfem::solver
12{
30 {
31 public:
32 using StatePtrs = std::vector<std::shared_ptr<legacy::State>>;
33 using DiffCachePtrs = std::vector<std::shared_ptr<DiffCache>>;
34
43 StatePtrs states,
44 DiffCachePtrs diff_caches,
45 CompositeParametrization parametrizations,
46 Eigen::VectorXi active_boundary_ids,
47 Eigen::VectorXi active_time_slices);
48
49 std::string name() const override;
50 ParameterType parameter_type() const override;
51 bool affect_state(const legacy::State &target) const override;
52 void update(const Eigen::VectorXd &x) override;
53 void update_state_variables(const Eigen::VectorXd &x, Eigen::VectorXd &state_variables) const override;
54 Eigen::VectorXd compute_adjoint_term(const Eigen::VectorXd &x) const override;
55 int inverse_dof() const override;
56 Eigen::VectorXd inverse_eval() const override;
57 Eigen::VectorXd apply_parametrization_jacobian(const Eigen::VectorXd &term, const Eigen::VectorXd &x) const override;
58
59 private:
61 using BoundaryNodeMap = std::vector<std::vector<std::vector<int>>>;
62
63 int dim_;
65
69
70 Eigen::VectorXi active_boundary_ids_;
71 Eigen::VectorXi active_time_slices_;
72
74 std::vector<BoundaryNodeMap> boundary_node_maps_;
75
76 int para_out_dof() const;
78 };
79
80} // namespace polyfem::solver
int x
main class that contains the polyfem solver and all its state
Definition State.hpp:114
std::vector< BoundaryNodeMap > boundary_node_maps_
boundary node map per state.
void update(const Eigen::VectorXd &x) override
Update forward simulation states from optimization variables.
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.
int inverse_dof() const override
Compute optimization variables dof.
bool affect_state(const legacy::State &target) const override
Return true if current var2sim maps to target state.
Eigen::VectorXd inverse_eval() const override
Compute optimization variables from forward simulation legacy::State.
Eigen::VectorXd compute_adjoint_term(const Eigen::VectorXd &x) const override
Compute adjoint contribution of objective gradient.
std::vector< std::vector< std::vector< int > > > BoundaryNodeMap
boundary order in this var2sim -> component (dim) -> offset in state.boundary_nodes
void update_state_variables(const Eigen::VectorXd &x, Eigen::VectorXd &state_variables) const override
Update state variables from optimization variables.
Maps optimization variables to forward simulation legacy::State variables.