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(const std::vector<std::array<double, 6>>& cells, const double weight = 1);
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 double m_weight;
41};
42
43
44class AMIPSEnergy3D : public polysolve::nonlinear::Problem
45{
46public:
47 using typename polysolve::nonlinear::Problem::Scalar;
48 using typename polysolve::nonlinear::Problem::THessian;
49 using typename polysolve::nonlinear::Problem::TVector;
50
58 AMIPSEnergy3D(const std::vector<std::array<double, 12>>& cells, const double weight = 1);
59
60 TVector initial_position() const;
61
62 double value(const TVector& x) override;
63 void gradient(const TVector& x, TVector& gradv) override;
64 void hessian(const TVector& x, THessian& hessian) override
65 {
66 log_and_throw_error("Sparse functions do not exist, use dense solver");
67 }
68 void hessian(const TVector& x, MatrixXd& hessian) override;
69
70 void solution_changed(const TVector& new_x) override;
71
72 bool is_step_valid(const TVector& x0, const TVector& x1) override;
73
74private:
75 std::vector<std::array<double, 12>> m_cells;
76 double m_weight;
77};
78
79} // namespace wmtk::optimization
Definition AMIPSEnergy.hpp:9
Definition AMIPSEnergy.hpp:45