8#include <ipc/collisions/normal/normal_collisions.hpp>
9#include <ipc/collision_mesh.hpp>
10#include <ipc/broad_phase/create_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"}
47 ContactForm(
const ipc::CollisionMesh &collision_mesh,
49 const double avg_mass,
51 const bool is_time_dependent,
53 const ipc::BroadPhaseMethod broad_phase_method,
54 const double ccd_tolerance,
55 const int ccd_max_iterations);
58 virtual std::string
name()
const override {
return "contact"; }
62 virtual void init(
const Eigen::VectorXd &
x)
override;
74 virtual double max_step_size(
const Eigen::VectorXd &x0,
const Eigen::VectorXd &x1)
const override;
79 virtual void line_search_begin(
const Eigen::VectorXd &x0,
const Eigen::VectorXd &x1)
override;