20 : states_(std::move(states)),
21 diff_caches_(std::move(diff_caches)),
22 parametrization_(std::move(parametrizations))
29 if (!s->problem->is_time_dependent())
31 log_and_throw_adjoint_error(
"Fail to construct damping variable to simulation. Reason: Can't optimize damping for static problem.");
50 if (s.get() == &target)
68 if (!s->args[
"materials"].is_array())
70 s->args[
"materials"][
"psi"] = psi;
71 s->args[
"materials"][
"phi"] = phi;
75 for (
auto &arg : s->args[
"materials"])
82 if (s->damping_assembler)
84 json damping_param = {
88 s->damping_assembler->add_multimaterial(0, damping_param, s->units, s->root_path());
101 Eigen::VectorXd term, cur_term;
102 for (
int i = 0; i < int(
states_.size()); ++i)
107 assert(state->problem->is_time_dependent());
112 if (term.size() != cur_term.size())
135 if (material.is_array())
137 material = material[0];
140 y(0) = material[
"psi"].get<
double>();
141 y(1) = material[
"phi"].get<
double>();
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).
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.
int inverse_dof() const override
Compute optimization variables dof.
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
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.
DampingVariableToSimulation(StatePtrs states, DiffCachePtrs diff_caches, CompositeParametrization parametrizations)
Construct DampingVariableToSimulation.
std::vector< std::shared_ptr< DiffCache > > DiffCachePtrs
ParameterType parameter_type() const override
Eigen::VectorXd compute_adjoint_term(const Eigen::VectorXd &x) const override
Compute adjoint contribution of objective gradient.
CompositeParametrization parametrization_
std::vector< std::shared_ptr< legacy::State > > StatePtrs
DiffCachePtrs diff_caches_
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.