Skip to content

Commit 5311ac5

Browse files
committed
Refactor tangential collisions to use normal potential
1 parent c1eea44 commit 5311ac5

18 files changed

+78
-74
lines changed

src/ipc/collisions/tangential/edge_edge.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ EdgeEdgeTangentialCollision::EdgeEdgeTangentialCollision(
1818
EdgeEdgeTangentialCollision::EdgeEdgeTangentialCollision(
1919
const EdgeEdgeNormalCollision& collision,
2020
const VectorMax12d& positions,
21-
const BarrierPotential& barrier_potential,
22-
const double barrier_stiffness)
21+
const NormalPotential& normal_potential,
22+
const double normal_stiffness)
2323
: EdgeEdgeTangentialCollision(collision)
2424
{
2525
TangentialCollision::init(
26-
collision, positions, barrier_potential, barrier_stiffness);
26+
collision, positions, normal_potential, normal_stiffness);
2727
}
2828

2929
// ============================================================================

src/ipc/collisions/tangential/edge_edge.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ class EdgeEdgeTangentialCollision : public EdgeEdgeCandidate,
1616
EdgeEdgeTangentialCollision(
1717
const EdgeEdgeNormalCollision& collision,
1818
const VectorMax12d& positions,
19-
const BarrierPotential& barrier_potential,
20-
const double barrier_stiffness);
19+
const NormalPotential& normal_potential,
20+
const double normal_stiffness);
2121

2222
protected:
2323
EdgeEdgeDistanceType known_dtype() const override

src/ipc/collisions/tangential/edge_vertex.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ EdgeVertexTangentialCollision::EdgeVertexTangentialCollision(
1818
EdgeVertexTangentialCollision::EdgeVertexTangentialCollision(
1919
const EdgeVertexNormalCollision& collision,
2020
const VectorMax12d& positions,
21-
const BarrierPotential& barrier_potential,
22-
const double barrier_stiffness)
21+
const NormalPotential& normal_potential,
22+
const double normal_stiffness)
2323
: EdgeVertexTangentialCollision(collision)
2424
{
2525
TangentialCollision::init(
26-
collision, positions, barrier_potential, barrier_stiffness);
26+
collision, positions, normal_potential, normal_stiffness);
2727
}
2828

2929
// ============================================================================

src/ipc/collisions/tangential/edge_vertex.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ class EdgeVertexTangentialCollision : public EdgeVertexCandidate,
1616
EdgeVertexTangentialCollision(
1717
const EdgeVertexNormalCollision& collision,
1818
const VectorMax12d& positions,
19-
const BarrierPotential& barrier_potential,
20-
const double barrier_stiffness);
19+
const NormalPotential& normal_potential,
20+
const double normal_stiffness);
2121

2222
protected:
2323
MatrixMax<double, 3, 2>

src/ipc/collisions/tangential/face_vertex.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ FaceVertexTangentialCollision::FaceVertexTangentialCollision(
1818
FaceVertexTangentialCollision::FaceVertexTangentialCollision(
1919
const FaceVertexNormalCollision& collision,
2020
const VectorMax12d& positions,
21-
const BarrierPotential& barrier_potential,
22-
const double barrier_stiffness)
21+
const NormalPotential& normal_potential,
22+
const double normal_stiffness)
2323
: FaceVertexTangentialCollision(collision)
2424
{
2525
TangentialCollision::init(
26-
collision, positions, barrier_potential, barrier_stiffness);
26+
collision, positions, normal_potential, normal_stiffness);
2727
}
2828

2929
// ============================================================================

src/ipc/collisions/tangential/face_vertex.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ class FaceVertexTangentialCollision : public FaceVertexCandidate,
1616
FaceVertexTangentialCollision(
1717
const FaceVertexNormalCollision& collision,
1818
const VectorMax12d& positions,
19-
const BarrierPotential& barrier_potential,
20-
const double barrier_stiffness);
19+
const NormalPotential& normal_potential,
20+
const double normal_stiffness);
2121

2222
protected:
2323
MatrixMax<double, 3, 2>

src/ipc/collisions/tangential/tangential_collision.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ void TangentialCollision::init(
1010
const NormalCollision& collision,
1111
const VectorMax12d& positions,
1212
const NormalPotential& normal_potential,
13-
const double barrier_stiffness)
13+
const double normal_stiffness)
1414
{
1515
// do this to initialize dim()
1616
const int dim = collision.dim(positions.size());
@@ -19,7 +19,7 @@ void TangentialCollision::init(
1919
closest_point = compute_closest_point(positions);
2020
tangent_basis = compute_tangent_basis(positions);
2121
normal_force_magnitude = normal_potential.force_magnitude(
22-
compute_distance(positions), collision.dmin, barrier_stiffness);
22+
compute_distance(positions), collision.dmin, normal_stiffness);
2323
}
2424

2525
} // namespace ipc

src/ipc/collisions/tangential/tangential_collision.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#pragma once
22

33
#include <ipc/friction/smooth_friction_mollifier.hpp>
4-
#include <ipc/potentials/barrier_potential.hpp>
4+
#include <ipc/potentials/normal_potential.hpp>
55
#include <ipc/tangent/relative_velocity.hpp>
66
#include <ipc/utils/eigen_ext.hpp>
77

@@ -12,13 +12,13 @@ class TangentialCollision : virtual public CollisionStencil {
1212
/// @brief Initialize the collision.
1313
/// @param collision NormalCollision stencil.
1414
/// @param positions Collision stencil's vertex positions.
15-
/// @param normal_potential Barrier potential used for normal force.
16-
/// @param barrier_stiffness Barrier potential stiffness.
15+
/// @param normal_potential Normal potential used for normal force.
16+
/// @param normal_stiffness Normal potential stiffness.
1717
void init(
1818
const NormalCollision& collision,
1919
const VectorMax12d& positions,
2020
const NormalPotential& normal_potential,
21-
const double barrier_stiffness);
21+
const double normal_stiffness);
2222

2323
public:
2424
virtual ~TangentialCollision() = default;

src/ipc/collisions/tangential/tangential_collisions.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ void TangentialCollisions::build(
1515
const CollisionMesh& mesh,
1616
const Eigen::MatrixXd& vertices,
1717
const NormalCollisions& collisions,
18-
const BarrierPotential& barrier_potential,
19-
const double barrier_stiffness,
18+
const NormalPotential& normal_potential,
19+
const double normal_stiffness,
2020
const Eigen::VectorXd& mus,
2121
const std::function<double(double, double)>& blend_mu)
2222
{
@@ -36,8 +36,8 @@ void TangentialCollisions::build(
3636
FC_vv.reserve(C_vv.size());
3737
for (const auto& c_vv : C_vv) {
3838
FC_vv.emplace_back(
39-
c_vv, c_vv.dof(vertices, edges, faces), barrier_potential,
40-
barrier_stiffness);
39+
c_vv, c_vv.dof(vertices, edges, faces), normal_potential,
40+
normal_stiffness);
4141
const auto& [v0i, v1i, _, __] = FC_vv.back().vertex_ids(edges, faces);
4242

4343
FC_vv.back().mu = blend_mu(mus(v0i), mus(v1i));
@@ -46,8 +46,8 @@ void TangentialCollisions::build(
4646
FC_ev.reserve(C_ev.size());
4747
for (const auto& c_ev : C_ev) {
4848
FC_ev.emplace_back(
49-
c_ev, c_ev.dof(vertices, edges, faces), barrier_potential,
50-
barrier_stiffness);
49+
c_ev, c_ev.dof(vertices, edges, faces), normal_potential,
50+
normal_stiffness);
5151
const auto& [vi, e0i, e1i, _] = FC_ev.back().vertex_ids(edges, faces);
5252

5353
const double edge_mu =
@@ -69,8 +69,8 @@ void TangentialCollisions::build(
6969
}
7070

7171
FC_ee.emplace_back(
72-
c_ee, c_ee.dof(vertices, edges, faces), barrier_potential,
73-
barrier_stiffness);
72+
c_ee, c_ee.dof(vertices, edges, faces), normal_potential,
73+
normal_stiffness);
7474

7575
double ea_mu =
7676
(mus(ea1i) - mus(ea0i)) * FC_ee.back().closest_point[0] + mus(ea0i);
@@ -82,8 +82,8 @@ void TangentialCollisions::build(
8282
FC_fv.reserve(C_fv.size());
8383
for (const auto& c_fv : C_fv) {
8484
FC_fv.emplace_back(
85-
c_fv, c_fv.dof(vertices, edges, faces), barrier_potential,
86-
barrier_stiffness);
85+
c_fv, c_fv.dof(vertices, edges, faces), normal_potential,
86+
normal_stiffness);
8787
const auto& [vi, f0i, f1i, f2i] = FC_fv.back().vertex_ids(edges, faces);
8888

8989
double face_mu = mus(f0i)

src/ipc/collisions/tangential/tangential_collisions.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,21 @@ class TangentialCollisions {
2626
const CollisionMesh& mesh,
2727
const Eigen::MatrixXd& vertices,
2828
const NormalCollisions& collisions,
29-
const BarrierPotential& barrier_potential,
30-
double barrier_stiffness,
29+
const NormalPotential& normal_potential,
30+
double normal_stiffness,
3131
double mu)
3232
{
3333
this->build(
34-
mesh, vertices, collisions, barrier_potential, barrier_stiffness,
34+
mesh, vertices, collisions, normal_potential, normal_stiffness,
3535
Eigen::VectorXd::Constant(vertices.rows(), mu));
3636
}
3737

3838
void build(
3939
const CollisionMesh& mesh,
4040
const Eigen::MatrixXd& vertices,
4141
const NormalCollisions& collisions,
42-
const BarrierPotential& barrier_potential,
43-
const double barrier_stiffness,
42+
const NormalPotential& normal_potential,
43+
const double normal_stiffness,
4444
const Eigen::VectorXd& mus,
4545
const std::function<double(double, double)>& blend_mu =
4646
default_blend_mu);

src/ipc/collisions/tangential/vertex_vertex.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ VertexVertexTangentialCollision::VertexVertexTangentialCollision(
1818
VertexVertexTangentialCollision::VertexVertexTangentialCollision(
1919
const VertexVertexNormalCollision& collision,
2020
const VectorMax12d& positions,
21-
const BarrierPotential& barrier_potential,
22-
const double barrier_stiffness)
21+
const NormalPotential& normal_potential,
22+
const double normal_stiffness)
2323
: VertexVertexTangentialCollision(collision)
2424
{
2525
TangentialCollision::init(
26-
collision, positions, barrier_potential, barrier_stiffness);
26+
collision, positions, normal_potential, normal_stiffness);
2727
}
2828

2929
// ============================================================================

src/ipc/collisions/tangential/vertex_vertex.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ class VertexVertexTangentialCollision : public VertexVertexCandidate,
1717
VertexVertexTangentialCollision(
1818
const VertexVertexNormalCollision& collision,
1919
const VectorMax12d& positions,
20-
const BarrierPotential& barrier_potential,
21-
const double barrier_stiffness);
20+
const NormalPotential& normal_potential,
21+
const double normal_stiffness);
2222

2323
protected:
2424
MatrixMax<double, 3, 2>

src/ipc/potentials/tangential_potential.cpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ Eigen::VectorXd TangentialPotential::force(
1010
const Eigen::MatrixXd& rest_positions,
1111
const Eigen::MatrixXd& lagged_displacements,
1212
const Eigen::MatrixXd& velocities,
13-
const BarrierPotential& barrier_potential,
14-
const double barrier_stiffness,
13+
const NormalPotential& normal_potential,
14+
const double normal_stiffness,
1515
const double dmin,
1616
const bool no_mu) const
1717
{
@@ -37,7 +37,7 @@ Eigen::VectorXd TangentialPotential::force(
3737
collision, collision.dof(rest_positions, edges, faces),
3838
collision.dof(lagged_displacements, edges, faces),
3939
collision.dof(velocities, edges, faces), //
40-
barrier_potential, barrier_stiffness, dmin, no_mu);
40+
normal_potential, normal_stiffness, dmin, no_mu);
4141

4242
const std::array<long, 4> vis =
4343
collision.vertex_ids(mesh.edges(), mesh.faces());
@@ -57,8 +57,8 @@ Eigen::SparseMatrix<double> TangentialPotential::force_jacobian(
5757
const Eigen::MatrixXd& rest_positions,
5858
const Eigen::MatrixXd& lagged_displacements,
5959
const Eigen::MatrixXd& velocities,
60-
const BarrierPotential& barrier_potential,
61-
const double barrier_stiffness,
60+
const NormalPotential& normal_potential,
61+
const double normal_stiffness,
6262
const DiffWRT wrt,
6363
const double dmin) const
6464
{
@@ -86,7 +86,7 @@ Eigen::SparseMatrix<double> TangentialPotential::force_jacobian(
8686
collision, collision.dof(rest_positions, edges, faces),
8787
collision.dof(lagged_displacements, edges, faces),
8888
collision.dof(velocities, edges, faces), //
89-
barrier_potential, barrier_stiffness, wrt, dmin);
89+
normal_potential, normal_stiffness, wrt, dmin);
9090

9191
const std::array<long, 4> vis =
9292
collision.vertex_ids(mesh.edges(), mesh.faces());
@@ -119,7 +119,7 @@ Eigen::SparseMatrix<double> TangentialPotential::force_jacobian(
119119
collision, collision.dof(rest_positions, edges, faces),
120120
collision.dof(lagged_displacements, edges, faces),
121121
collision.dof(velocities, edges, faces), //
122-
barrier_potential, barrier_stiffness, dmin);
122+
normal_potential, normal_stiffness, dmin);
123123
assert(collision.weight != 0);
124124
local_force /= collision.weight;
125125

@@ -253,8 +253,8 @@ VectorMax12d TangentialPotential::force(
253253
const VectorMax12d& rest_positions, // = x
254254
const VectorMax12d& lagged_displacements, // = u
255255
const VectorMax12d& velocities, // = v
256-
const BarrierPotential& barrier_potential,
257-
const double barrier_stiffness,
256+
const NormalPotential& normal_potential,
257+
const double normal_stiffness,
258258
const double dmin,
259259
const bool no_mu) const
260260
{
@@ -275,8 +275,8 @@ VectorMax12d TangentialPotential::force(
275275
const VectorMax12d lagged_positions = rest_positions + lagged_displacements;
276276

277277
// Compute N(x + u)
278-
const double N = barrier_potential.force_magnitude(
279-
collision.compute_distance(lagged_positions), dmin, barrier_stiffness);
278+
const double N = normal_potential.force_magnitude(
279+
collision.compute_distance(lagged_positions), dmin, normal_stiffness);
280280

281281
// Compute P
282282
const MatrixMax<double, 3, 2> P =
@@ -309,8 +309,8 @@ MatrixMax12d TangentialPotential::force_jacobian(
309309
const VectorMax12d& rest_positions, // = x
310310
const VectorMax12d& lagged_displacements, // = u
311311
const VectorMax12d& velocities, // = v
312-
const BarrierPotential& barrier_potential,
313-
const double barrier_stiffness,
312+
const NormalPotential& normal_potential,
313+
const double normal_stiffness,
314314
const DiffWRT wrt,
315315
const double dmin) const
316316
{
@@ -337,17 +337,17 @@ MatrixMax12d TangentialPotential::force_jacobian(
337337
const bool need_jac_N_or_T = wrt != DiffWRT::VELOCITIES;
338338

339339
// Compute N
340-
const double N = barrier_potential.force_magnitude(
341-
collision.compute_distance(lagged_positions), dmin, barrier_stiffness);
340+
const double N = normal_potential.force_magnitude(
341+
collision.compute_distance(lagged_positions), dmin, normal_stiffness);
342342

343343
// Compute ∇N
344344
VectorMax12d grad_N;
345345
if (need_jac_N_or_T) {
346346
// ∇ₓN = ∇ᵤN
347-
grad_N = barrier_potential.force_magnitude_gradient(
347+
grad_N = normal_potential.force_magnitude_gradient(
348348
collision.compute_distance(lagged_positions),
349349
collision.compute_distance_gradient(lagged_positions), dmin,
350-
barrier_stiffness);
350+
normal_stiffness);
351351
assert(grad_N.array().isFinite().all());
352352
}
353353

0 commit comments

Comments
 (0)