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