8class EnergySum :
public polysolve::nonlinear::Problem
11 using Problem = polysolve::nonlinear::Problem;
13 using typename Problem::Scalar;
14 using typename Problem::THessian;
15 using typename Problem::TVector;
25 void add_energy(
const std::shared_ptr<Problem>& energy,
const double weight = 1);
27 double value(
const TVector& x)
override;
28 void gradient(
const TVector& x, TVector& gradv)
override;
29 void hessian(
const TVector& x, THessian& hessian)
override
31 log_and_throw_error(
"Sparse functions do not exist, use dense solver");
33 void hessian(
const TVector& x, MatrixXd& hessian)
override;
35 void solution_changed(
const TVector& new_x)
override;
37 bool is_step_valid(
const TVector& x0,
const TVector& x1)
override;
40 std::vector<std::shared_ptr<Problem>> m_energies;
41 std::vector<double> m_weights;
void add_energy(const std::shared_ptr< Problem > &energy, const double weight=1)
Add an energy term to the sum of energies.
Definition EnergySum.cpp:7