9#include <ipc/broad_phase/create_broad_phase.hpp>
10#include <ipc/collisions/normal/normal_collisions.hpp>
11#include <ipc/gcp/gcp_collisions.hpp>
23 const ipc::CollisionMesh &collision_mesh,
24 const std::shared_ptr<time_integrator::ImplicitTimeIntegrator> time_integrator,
27 const ipc::BroadPhaseMethod broad_phase_method,
29 const int n_lagging_iters)
30 : collision_mesh_(collision_mesh),
31 time_integrator_(time_integrator),
34 broad_phase_method_(broad_phase_method),
35 n_lagging_iters_(n_lagging_iters < 0 ? std::numeric_limits<int>::max() : n_lagging_iters),
36 contact_form_(contact_form),
37 friction_potential_(epsv)
75 ipc::PSDProjectionMethod psd_projection_method;
79 psd_projection_method = ipc::PSDProjectionMethod::CLAMP;
83 psd_projection_method = ipc::PSDProjectionMethod::NONE;
99 ipc::NormalCollisions collision_set;
100 collision_set.set_use_area_weighting(barrier_contact->use_area_weighting());
104 collision_set.set_collision_set_type(barrier_contact->collision_set().collision_set_type());
106 collision_set.set_enable_shape_derivatives(barrier_contact->enable_shape_derivatives());
108 collision_mesh_, displaced_surface, barrier_contact->dhat(), 0, broad_phase.get());
110 ipc::BarrierPotential bp = barrier_contact->barrier_potential();
111 bp.set_stiffness(barrier_contact->barrier_stiffness());
118 ipc::GCPCollisions collision_set;
119 if (gcp->using_adaptive_dhat())
123 gcp->using_adaptive_dhat(), broad_phase.get());
131 ipc::ESPCollisions collision_set;
144 throw std::runtime_error(
"Unknown contact form");
#define POLYFEM_SCOPED_TIMER(...)
Eigen::MatrixXd unflatten(const Eigen::VectorXd &x, int dim)
Unflatten rowwises, so every dim elements in x become a row.
Eigen::SparseMatrix< double, Eigen::ColMajor > StiffnessMatrix