20 Eigen::VectorXi active_dimensions,
21 Eigen::VectorXi active_geom_nodes)
22 : dim_(states[0]->mesh->dimension()),
23 vertex_num_(states[0]->mesh->n_vertices()),
24 states_(std::move(states)),
25 diff_caches_(std::move(diff_caches)),
26 parametrization_(std::move(parametrizations)),
27 active_dimensions_(std::move(active_dimensions)),
28 active_geom_nodes_(std::move(active_geom_nodes))
69 if (s.get() == &target)
88 Eigen::VectorXd p = s->mesh->point(node_id);
92 p(d) =
y(ni * active_dim_num + di);
94 s->mesh->set_point(node_id, p);
113 state_variables(vertex_id *
dim_ + d) =
y(ni * active_dim_num + di);
120 Eigen::VectorXd term, cur_term;
121 for (
int i = 0; i <
states_.size(); ++i)
126 if (state->problem->is_time_dependent())
132 else if (state->is_homogenization())
151 if (term.size() != cur_term.size())
171 active_term(i * active_dim_num + di) = term(vertex_id *
dim_ + d);
194 x(i * active_dim_num + di) = p(d);
214 active_term(i * active_dim_num + di) = term(vertex_id *
dim_ + d);
main class that contains the polyfem solver and all its state
Eigen::VectorXd apply_jacobian(const Eigen::VectorXd &grad_full, const Eigen::VectorXd &x) const override
Apply jacobian for chain rule.
Eigen::VectorXd inverse_eval(const Eigen::VectorXd &y) const override
Eval x = f^-1 (y).
int inverse_size(int y_size) const override
Compute DOF of x given DOF of y.
Eigen::VectorXd eval(const Eigen::VectorXd &x) const override
Eval y = f(x).
Eigen::VectorXi active_geom_nodes_
ParameterType parameter_type() const override
void update_state_variables(const Eigen::VectorXd &x, Eigen::VectorXd &state_variables) const override
Update state variables from optimization variables.
int inverse_dof() const override
Compute optimization variables dof.
std::vector< std::shared_ptr< DiffCache > > DiffCachePtrs
std::vector< std::shared_ptr< legacy::State > > StatePtrs
bool affect_state(const legacy::State &target) const override
Return true if current var2sim maps to target state.
Eigen::VectorXd compute_adjoint_term(const Eigen::VectorXd &x) const override
Compute adjoint contribution of objective gradient.
Eigen::VectorXi active_dimensions_
Eigen::VectorXd inverse_eval() const override
Compute optimization variables from forward simulation legacy::State.
CompositeParametrization parametrization_
int para_out_dof() const
Return variable dof after parametrization mapping.
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.
std::string name() const override
ShapeVariableToSimulation(StatePtrs states, DiffCachePtrs diff_caches, CompositeParametrization parametrizations, Eigen::VectorXi active_dimensions, Eigen::VectorXi active_geom_nodes)
Construct ShapeVariableToSimulation.
DiffCachePtrs diff_caches_
void update(const Eigen::VectorXd &x) override
Update forward simulation states from optimization variables.
bool is_active_geom_nodes_valid(const Eigen::VectorXi &active_geom_nodes, const std::vector< std::shared_ptr< legacy::State > > &states, std::string &reason)
Validate active geometry nodes selection given states.
bool is_active_dims_valid(const Eigen::VectorXi &active_dimensions, const std::vector< std::shared_ptr< legacy::State > > &states, std::string &reason)
Validate active dimensions selection given states.
void log_and_throw_adjoint_error(const std::string &msg)
Eigen::MatrixXd get_adjoint_mat(const legacy::State &state, const DiffCache &diff_cache, int type)
Get adjoint parameter nu or p.