Wildmeshing Toolkit
Loading...
Searching...
No Matches
AMIPSEnergy.hpp
1#pragma once
2
3#include <polysolve/nonlinear/Problem.hpp>
4#include <wmtk/Types.hpp>
5
6namespace wmtk::optimization {
7
8class AMIPSEnergy2D : public polysolve::nonlinear::Problem
9{
10public:
11 using typename polysolve::nonlinear::Problem::Scalar;
12 using typename polysolve::nonlinear::Problem::THessian;
13 using typename polysolve::nonlinear::Problem::TVector;
14
22 AMIPSEnergy2D(std::vector<std::array<double, 6>>& cells);
23
24 TVector initial_position() const;
25
26 double value(const TVector& x) override;
27 void gradient(const TVector& x, TVector& gradv) override;
28 void hessian(const TVector& x, THessian& hessian) override
29 {
30 log_and_throw_error("Sparse functions do not exist, use dense solver");
31 }
32 void hessian(const TVector& x, MatrixXd& hessian) override;
33
34 void solution_changed(const TVector& new_x) override;
35
36 bool is_step_valid(const TVector& x0, const TVector& x1) override;
37
38private:
39 std::vector<std::array<double, 6>> m_cells;
40};
41
42} // namespace wmtk::optimization
Definition AMIPSEnergy.hpp:9