11 const ipc::CollisionMesh &collision_mesh,
12 const std::shared_ptr<time_integrator::ImplicitTimeIntegrator> time_integrator,
15 const ipc::BroadPhaseMethod broad_phase_method,
17 const int n_lagging_iters)
18 : collision_mesh_(collision_mesh),
19 time_integrator_(time_integrator),
22 broad_phase_method_(broad_phase_method),
23 n_lagging_iters_(n_lagging_iters < 0 ? std::numeric_limits<int>::max() : n_lagging_iters),
24 contact_form_(contact_form),
25 friction_potential_(epsv)
31 const Eigen::MatrixXd &prev_solution,
32 const Eigen::MatrixXd &solution,
33 const Eigen::MatrixXd &adjoint,
34 const ipc::TangentialCollisions &friction_constraints_set,
35 Eigen::VectorXd &term)
47 friction_constraints_set,
50 barrier_contact->barrier_potential(),
51 barrier_contact->barrier_stiffness(),
52 ipc::FrictionPotential::DiffWRT::REST_POSITIONS);
91 ipc::PSDProjectionMethod psd_projection_method;
95 psd_projection_method = ipc::PSDProjectionMethod::CLAMP;
99 psd_projection_method = ipc::PSDProjectionMethod::NONE;
115 ipc::NormalCollisions collision_set;
116 collision_set.set_use_area_weighting(barrier_contact->use_area_weighting());
117 collision_set.set_use_improved_max_approximator(barrier_contact->use_improved_max_operator());
119 collision_set.set_enable_shape_derivatives(barrier_contact->enable_shape_derivatives());
121 collision_mesh_, displaced_surface, barrier_contact->dhat(), 0, broad_phase);
125 barrier_contact->barrier_potential(), barrier_contact->barrier_stiffness(), Eigen::VectorXd::Ones(
collision_mesh_.num_vertices()) *
mu_);
129 ipc::SmoothCollisions collision_set;
130 if (smooth_contact->using_adaptive_dhat())
134 smooth_contact->using_adaptive_dhat(), broad_phase);
142 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