20 using typename polysolve::nonlinear::Problem::Scalar;
21 using typename polysolve::nonlinear::Problem::THessian;
22 using typename polysolve::nonlinear::Problem::TVector;
36 const double weight = 1);
38 TVector initial_position()
const;
40 void replace_vid(
const size_t vid);
42 MatrixXd& V() {
return m_V; }
44 double value(
const TVector& x)
override;
45 void gradient(
const TVector& x, TVector& gradv)
override;
46 void hessian(
const TVector& x, THessian& hessian)
override
48 log_and_throw_error(
"Sparse functions do not exist, use dense solver");
50 void hessian(
const TVector& x, MatrixXd& hessian)
override;
52 void solution_changed(
const TVector& new_x)
override {}
54 bool is_step_valid(
const TVector& x0,
const TVector& x1)
override {
return true; }
56 void update_collisions(
const TVector& x);
59 ipc::CollisionMesh m_collision_mesh;
61#ifdef WMTK_SMOOTH_BARRIER
62 ipc::SmoothContactParameters m_params;
63 ipc::SmoothCollisions m_smooth_collisions;
64 ipc::SmoothContactPotential m_smooth_B;
66 ipc::NormalCollisions m_collisions;
67 ipc::BarrierPotential m_B;
80 using typename polysolve::nonlinear::Problem::Scalar;
81 using typename polysolve::nonlinear::Problem::THessian;
82 using typename polysolve::nonlinear::Problem::TVector;
97 const double weight = 1);
99 TVector initial_position()
const;
101 void replace_vid(
const size_t vid);
103 MatrixXd& V() {
return m_V; }
105 double value(
const TVector& x)
override;
106 void gradient(
const TVector& x, TVector& gradv)
override;
107 void hessian(
const TVector& x, THessian& hessian)
override
109 log_and_throw_error(
"Sparse functions do not exist, use dense solver");
111 void hessian(
const TVector& x, MatrixXd& hessian)
override;
113 void solution_changed(
const TVector& new_x)
override {}
115 bool is_step_valid(
const TVector& x0,
const TVector& x1)
override {
return true; }
117 void update_collisions(
const TVector& x);
120 ipc::CollisionMesh m_collision_mesh;
122 ipc::NormalCollisions m_collisions;
123 ipc::BarrierPotential m_B;