1111
1212namespace ipc {
1313
14- template <int dim>
1514void TangentialCollisions::build_for_smooth_contact (
1615 const CollisionMesh& mesh,
1716 const Eigen::MatrixXd& vertices,
18- const SmoothCollisions<dim> & collisions,
17+ const SmoothCollisions& collisions,
1918 const ParameterType& params,
2019 const double barrier_stiffness,
2120 const Eigen::VectorXd& mus,
@@ -35,16 +34,16 @@ void TangentialCollisions::build_for_smooth_contact(
3534 for (size_t i = 0 ; i < collisions.size (); i++) {
3635 const auto & cc = collisions[i];
3736 Eigen::VectorXd contact_potential_grad =
38- cc.gradient (cc.dof (vertices, edges, faces ), params);
37+ cc.gradient (cc.dof (vertices), params);
3938 const double contact_force =
4039 barrier_stiffness * contact_potential_grad.norm ();
4140
42- if constexpr ( dim == 3 ) {
41+ if (mesh. dim () == 3 ) {
4342 TangentialCollision* ptr = nullptr ;
4443 if (const auto cvv = dynamic_cast <const SmoothCollisionTemplate<
45- max_vert_3d, Point3, Point3>*>(&cc)) {
44+ Point3, Point3>*>(&cc)) {
4645 Eigen::VectorXd collision_points =
47- cvv->core_dof (vertices, edges, faces );
46+ cvv->core_dof (vertices);
4847 FC_vv.emplace_back (
4948 VertexVertexNormalCollision (
5049 cc[0 ], cc[1 ], 1 ., Eigen::SparseVector<double >()),
@@ -56,10 +55,10 @@ void TangentialCollisions::build_for_smooth_contact(
5655 ptr = &(FC_vv.back ());
5756 } else if (
5857 const auto cev = dynamic_cast <
59- const SmoothCollisionTemplate<max_vert_3d, Edge3, Point3>*>(
58+ const SmoothCollisionTemplate<Edge3, Point3>*>(
6059 &cc)) {
6160 Eigen::VectorXd collision_points =
62- cev->core_dof (vertices, edges, faces );
61+ cev->core_dof (vertices);
6362 collision_points =
6463 collision_points ({ 6 , 7 , 8 , 0 , 1 , 2 , 3 , 4 , 5 })
6564 .eval (); // {edge, point} -> {point, edge}
@@ -77,11 +76,11 @@ void TangentialCollisions::build_for_smooth_contact(
7776 ptr = &(FC_ev.back ());
7877 } else if (
7978 const auto cee = dynamic_cast <
80- const SmoothCollisionTemplate<max_vert_3d, Edge3, Edge3>*>(
79+ const SmoothCollisionTemplate<Edge3, Edge3>*>(
8180 &cc)) {
8281 Eigen::VectorXd collision_points =
83- cee->core_dof (vertices, edges, faces );
84- const auto vert_ids = cee->core_vertex_ids (edges, faces );
82+ cee->core_dof (vertices);
83+ const auto vert_ids = cee->core_vertex_ids ();
8584 const Eigen::Vector3d ea0 = vertices.row (vert_ids[0 ]);
8685 const Eigen::Vector3d ea1 = vertices.row (vert_ids[1 ]);
8786 const Eigen::Vector3d eb0 = vertices.row (vert_ids[2 ]);
@@ -108,10 +107,10 @@ void TangentialCollisions::build_for_smooth_contact(
108107 ptr = &(FC_ee.back ());
109108 } else if (
110109 const auto cfv = dynamic_cast <
111- const SmoothCollisionTemplate<max_vert_3d, Face, Point3>*>(
110+ const SmoothCollisionTemplate<Face, Point3>*>(
112111 &cc)) {
113112 Eigen::VectorXd collision_points =
114- cfv->core_dof (vertices, edges, faces );
113+ cfv->core_dof (vertices);
115114 collision_points =
116115 collision_points ({ 9 , 10 , 11 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 })
117116 .eval (); // {face, point} -> {point, face}
@@ -129,13 +128,13 @@ void TangentialCollisions::build_for_smooth_contact(
129128 ptr = &(FC_fv.back ());
130129 }
131130 if (ptr)
132- ptr->smooth_collision_3d = collisions.collisions [i];
131+ ptr->smooth_collision = collisions.collisions [i];
133132 } else {
134133 TangentialCollision* ptr = nullptr ;
135134 if (const auto cvv = dynamic_cast <const SmoothCollisionTemplate<
136- max_vert_2d, Point2, Point2>*>(&cc)) {
135+ Point2, Point2>*>(&cc)) {
137136 Eigen::VectorXd collision_points =
138- cvv->core_dof (vertices, edges, faces );
137+ cvv->core_dof (vertices);
139138 FC_vv.emplace_back (
140139 VertexVertexNormalCollision (
141140 cc[0 ], cc[1 ], 1 ., Eigen::SparseVector<double >()),
@@ -147,10 +146,10 @@ void TangentialCollisions::build_for_smooth_contact(
147146 ptr = &(FC_vv.back ());
148147 } else if (
149148 const auto cev = dynamic_cast <
150- const SmoothCollisionTemplate<max_vert_2d, Edge2, Point2>*>(
149+ const SmoothCollisionTemplate<Edge2, Point2>*>(
151150 &cc)) {
152151 Eigen::VectorXd collision_points =
153- cev->core_dof (vertices, edges, faces );
152+ cev->core_dof (vertices);
154153 collision_points =
155154 collision_points ({ 4 , 5 , 0 , 1 , 2 , 3 })
156155 .eval (); // {edge, point} -> {point, edge}
@@ -168,29 +167,11 @@ void TangentialCollisions::build_for_smooth_contact(
168167 ptr = &(FC_ev.back ());
169168 }
170169 if (ptr)
171- ptr->smooth_collision_2d = collisions.collisions [i];
170+ ptr->smooth_collision = collisions.collisions [i];
172171 }
173172 }
174173}
175174
176- template void TangentialCollisions::build_for_smooth_contact<2 >(
177- const CollisionMesh& mesh,
178- const Eigen::MatrixXd& vertices,
179- const SmoothCollisions<2 >& collisions,
180- const ParameterType& params,
181- const double barrier_stiffness,
182- const Eigen::VectorXd& mus,
183- const std::function<double (double , double )>& blend_mu);
184-
185- template void TangentialCollisions::build_for_smooth_contact<3 >(
186- const CollisionMesh& mesh,
187- const Eigen::MatrixXd& vertices,
188- const SmoothCollisions<3 >& collisions,
189- const ParameterType& params,
190- const double barrier_stiffness,
191- const Eigen::VectorXd& mus,
192- const std::function<double (double , double )>& blend_mu);
193-
194175void TangentialCollisions::build (
195176 const CollisionMesh& mesh,
196177 Eigen::ConstRef<Eigen::MatrixXd> vertices,
0 commit comments