8#include <ipc/collisions/normal/normal_collisions.hpp>
9#include <ipc/collision_mesh.hpp>
10#include <ipc/broad_phase/broad_phase.hpp>
11#include <ipc/potentials/potential.hpp>
17 NLOHMANN_JSON_SERIALIZE_ENUM(
18 ipc::BroadPhaseMethod,
19 {{ipc::BroadPhaseMethod::HASH_GRID,
"hash_grid"},
20 {ipc::BroadPhaseMethod::HASH_GRID,
"HG"},
21 {ipc::BroadPhaseMethod::BRUTE_FORCE,
"brute_force"},
22 {ipc::BroadPhaseMethod::BRUTE_FORCE,
"BF"},
23 {ipc::BroadPhaseMethod::SPATIAL_HASH,
"spatial_hash"},
24 {ipc::BroadPhaseMethod::SPATIAL_HASH,
"SH"},
25 {ipc::BroadPhaseMethod::BVH,
"bvh"},
26 {ipc::BroadPhaseMethod::BVH,
"BVH"},
27 {ipc::BroadPhaseMethod::SWEEP_AND_TINIEST_QUEUE,
"sweep_and_tiniest_queue"},
28 {ipc::BroadPhaseMethod::SWEEP_AND_TINIEST_QUEUE,
"STQ"}})
46 ContactForm(
const ipc::CollisionMesh &collision_mesh,
48 const double avg_mass,
50 const bool is_time_dependent,
52 const ipc::BroadPhaseMethod broad_phase_method,
53 const double ccd_tolerance,
54 const int ccd_max_iterations);
57 virtual std::string
name()
const override {
return "contact"; }
61 virtual void init(
const Eigen::VectorXd &
x)
override;
73 virtual double max_step_size(
const Eigen::VectorXd &x0,
const Eigen::VectorXd &x1)
const override;
78 virtual void line_search_begin(
const Eigen::VectorXd &x0,
const Eigen::VectorXd &x1)
override;