aboutsummaryrefslogtreecommitdiff
path: root/src/dynamics/solver
diff options
context:
space:
mode:
authorSébastien Crozet <sebcrozet@dimforge.com>2024-01-27 16:49:53 +0100
committerSébastien Crozet <sebastien@crozet.re>2024-01-27 17:13:08 +0100
commitda92e5c2837b27433286cf0dd9d887fd44dda254 (patch)
tree00428ce290288f5c64e53dee13d88ffdde4df0ca /src/dynamics/solver
parentaef873f20e7a1ee66b9d4c066884fa794048587b (diff)
downloadrapier-da92e5c2837b27433286cf0dd9d887fd44dda254.tar.gz
rapier-da92e5c2837b27433286cf0dd9d887fd44dda254.tar.bz2
rapier-da92e5c2837b27433286cf0dd9d887fd44dda254.zip
Fix clippy and enable clippy on CI
Diffstat (limited to 'src/dynamics/solver')
-rw-r--r--src/dynamics/solver/contact_constraint/contact_constraints_set.rs16
-rw-r--r--src/dynamics/solver/contact_constraint/generic_one_body_constraint.rs4
-rw-r--r--src/dynamics/solver/contact_constraint/generic_two_body_constraint.rs12
-rw-r--r--src/dynamics/solver/contact_constraint/generic_two_body_constraint_element.rs20
-rw-r--r--src/dynamics/solver/contact_constraint/one_body_constraint.rs6
-rw-r--r--src/dynamics/solver/contact_constraint/one_body_constraint_element.rs4
-rw-r--r--src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs12
-rw-r--r--src/dynamics/solver/contact_constraint/two_body_constraint.rs8
-rw-r--r--src/dynamics/solver/contact_constraint/two_body_constraint_element.rs4
-rw-r--r--src/dynamics/solver/contact_constraint/two_body_constraint_simd.rs24
-rw-r--r--src/dynamics/solver/interaction_groups.rs6
-rw-r--r--src/dynamics/solver/joint_constraint/joint_constraints_set.rs12
-rw-r--r--src/dynamics/solver/joint_constraint/joint_generic_constraint_builder.rs1
-rw-r--r--src/dynamics/solver/joint_constraint/joint_velocity_constraint.rs48
-rw-r--r--src/dynamics/solver/mod.rs14
-rw-r--r--src/dynamics/solver/velocity_solver.rs6
16 files changed, 87 insertions, 110 deletions
diff --git a/src/dynamics/solver/contact_constraint/contact_constraints_set.rs b/src/dynamics/solver/contact_constraint/contact_constraints_set.rs
index 4d02270..b5fdb6d 100644
--- a/src/dynamics/solver/contact_constraint/contact_constraints_set.rs
+++ b/src/dynamics/solver/contact_constraint/contact_constraints_set.rs
@@ -192,7 +192,7 @@ impl ContactConstraintsSet {
.interaction_groups
.simd_interactions
.chunks_exact(SIMD_WIDTH)
- .map(|i| ConstraintsCounts::from_contacts(&manifolds_all[i[0]]).num_constraints)
+ .map(|i| ConstraintsCounts::from_contacts(manifolds_all[i[0]]).num_constraints)
.sum();
unsafe {
@@ -211,7 +211,7 @@ impl ContactConstraintsSet {
.chunks_exact(SIMD_WIDTH)
{
let num_to_add =
- ConstraintsCounts::from_contacts(&manifolds_all[manifolds_i[0]]).num_constraints;
+ ConstraintsCounts::from_contacts(manifolds_all[manifolds_i[0]]).num_constraints;
let manifold_id = gather![|ii| manifolds_i[ii]];
let manifolds = gather![|ii| &*manifolds_all[manifolds_i[ii]]];
@@ -238,7 +238,7 @@ impl ContactConstraintsSet {
.interaction_groups
.nongrouped_interactions
.iter()
- .map(|i| ConstraintsCounts::from_contacts(&manifolds_all[*i]).num_constraints)
+ .map(|i| ConstraintsCounts::from_contacts(manifolds_all[*i]).num_constraints)
.sum();
unsafe {
@@ -278,7 +278,7 @@ impl ContactConstraintsSet {
let total_num_constraints = self
.generic_two_body_interactions
.iter()
- .map(|i| ConstraintsCounts::from_contacts(&manifolds_all[*i]).num_constraints)
+ .map(|i| ConstraintsCounts::from_contacts(manifolds_all[*i]).num_constraints)
.sum();
self.generic_velocity_constraints_builder.resize(
@@ -321,7 +321,7 @@ impl ContactConstraintsSet {
let total_num_constraints = self
.generic_one_body_interactions
.iter()
- .map(|i| ConstraintsCounts::from_contacts(&manifolds_all[*i]).num_constraints)
+ .map(|i| ConstraintsCounts::from_contacts(manifolds_all[*i]).num_constraints)
.sum();
self.generic_velocity_one_body_constraints_builder.resize(
total_num_constraints,
@@ -362,7 +362,7 @@ impl ContactConstraintsSet {
.one_body_interaction_groups
.simd_interactions
.chunks_exact(SIMD_WIDTH)
- .map(|i| ConstraintsCounts::from_contacts(&manifolds_all[i[0]]).num_constraints)
+ .map(|i| ConstraintsCounts::from_contacts(manifolds_all[i[0]]).num_constraints)
.sum();
unsafe {
@@ -384,7 +384,7 @@ impl ContactConstraintsSet {
.chunks_exact(SIMD_WIDTH)
{
let num_to_add =
- ConstraintsCounts::from_contacts(&manifolds_all[manifolds_i[0]]).num_constraints;
+ ConstraintsCounts::from_contacts(manifolds_all[manifolds_i[0]]).num_constraints;
let manifold_id = gather![|ii| manifolds_i[ii]];
let manifolds = gather![|ii| &*manifolds_all[manifolds_i[ii]]];
SimdOneBodyConstraintBuilder::generate(
@@ -408,7 +408,7 @@ impl ContactConstraintsSet {
.one_body_interaction_groups
.nongrouped_interactions
.iter()
- .map(|i| ConstraintsCounts::from_contacts(&manifolds_all[*i]).num_constraints)
+ .map(|i| ConstraintsCounts::from_contacts(manifolds_all[*i]).num_constraints)
.sum();
unsafe {
diff --git a/src/dynamics/solver/contact_constraint/generic_one_body_constraint.rs b/src/dynamics/solver/contact_constraint/generic_one_body_constraint.rs
index 7c39eab..7b1f8ea 100644
--- a/src/dynamics/solver/contact_constraint/generic_one_body_constraint.rs
+++ b/src/dynamics/solver/contact_constraint/generic_one_body_constraint.rs
@@ -59,7 +59,7 @@ impl GenericOneBodyConstraintBuilder {
let rb1 = handle1
.map(|h| SolverBody::from(&bodies[h]))
- .unwrap_or_else(SolverBody::default);
+ .unwrap_or_default();
let rb2 = &bodies[handle2.unwrap()];
let (vels2, mprops2) = (&rb2.vels, &rb2.mprops);
@@ -265,7 +265,7 @@ impl GenericOneBodyConstraint {
solve_restitution: bool,
solve_friction: bool,
) {
- let solver_vel2 = self.inner.solver_vel2 as usize;
+ let solver_vel2 = self.inner.solver_vel2;
let elements = &mut self.inner.elements[..self.inner.num_contacts as usize];
OneBodyConstraintElement::generic_solve_group(
diff --git a/src/dynamics/solver/contact_constraint/generic_two_body_constraint.rs b/src/dynamics/solver/contact_constraint/generic_two_body_constraint.rs
index a4924fe..073f585 100644
--- a/src/dynamics/solver/contact_constraint/generic_two_body_constraint.rs
+++ b/src/dynamics/solver/contact_constraint/generic_two_body_constraint.rs
@@ -382,15 +382,15 @@ impl GenericTwoBodyConstraint {
solve_friction: bool,
) {
let mut solver_vel1 = if self.generic_constraint_mask & 0b01 == 0 {
- GenericRhs::SolverVel(solver_vels[self.inner.solver_vel1 as usize])
+ GenericRhs::SolverVel(solver_vels[self.inner.solver_vel1])
} else {
- GenericRhs::GenericId(self.inner.solver_vel1 as usize)
+ GenericRhs::GenericId(self.inner.solver_vel1)
};
let mut solver_vel2 = if self.generic_constraint_mask & 0b10 == 0 {
- GenericRhs::SolverVel(solver_vels[self.inner.solver_vel2 as usize])
+ GenericRhs::SolverVel(solver_vels[self.inner.solver_vel2])
} else {
- GenericRhs::GenericId(self.inner.solver_vel2 as usize)
+ GenericRhs::GenericId(self.inner.solver_vel2)
};
let elements = &mut self.inner.elements[..self.inner.num_contacts as usize];
@@ -415,11 +415,11 @@ impl GenericTwoBodyConstraint {
);
if let GenericRhs::SolverVel(solver_vel1) = solver_vel1 {
- solver_vels[self.inner.solver_vel1 as usize] = solver_vel1;
+ solver_vels[self.inner.solver_vel1] = solver_vel1;
}
if let GenericRhs::SolverVel(solver_vel2) = solver_vel2 {
- solver_vels[self.inner.solver_vel2 as usize] = solver_vel2;
+ solver_vels[self.inner.solver_vel2] = solver_vel2;
}
}
diff --git a/src/dynamics/solver/contact_constraint/generic_two_body_constraint_element.rs b/src/dynamics/solver/contact_constraint/generic_two_body_constraint_element.rs
index f3bd3a0..40740a0 100644
--- a/src/dynamics/solver/contact_constraint/generic_two_body_constraint_element.rs
+++ b/src/dynamics/solver/contact_constraint/generic_two_body_constraint_element.rs
@@ -114,7 +114,7 @@ impl TwoBodyConstraintTangentPart<Real> {
j_id1,
ndofs1,
jacobians,
- &tangents1[0],
+ tangents1[0],
&self.gcross1[0],
solver_vels,
) + solver_vel2.dvel(
@@ -135,7 +135,7 @@ impl TwoBodyConstraintTangentPart<Real> {
ndofs1,
dlambda,
jacobians,
- &tangents1[0],
+ tangents1[0],
&self.gcross1[0],
solver_vels,
im1,
@@ -158,7 +158,7 @@ impl TwoBodyConstraintTangentPart<Real> {
j_id1,
ndofs1,
jacobians,
- &tangents1[0],
+ tangents1[0],
&self.gcross1[0],
solver_vels,
) + solver_vel2.dvel(
@@ -173,7 +173,7 @@ impl TwoBodyConstraintTangentPart<Real> {
j_id1 + j_step,
ndofs1,
jacobians,
- &tangents1[1],
+ tangents1[1],
&self.gcross1[1],
solver_vels,
) + solver_vel2.dvel(
@@ -199,7 +199,7 @@ impl TwoBodyConstraintTangentPart<Real> {
ndofs1,
dlambda[0],
jacobians,
- &tangents1[0],
+ tangents1[0],
&self.gcross1[0],
solver_vels,
im1,
@@ -209,7 +209,7 @@ impl TwoBodyConstraintTangentPart<Real> {
ndofs1,
dlambda[1],
jacobians,
- &tangents1[1],
+ tangents1[1],
&self.gcross1[1],
solver_vels,
im1,
@@ -258,7 +258,7 @@ impl TwoBodyConstraintNormalPart<Real> {
let j_id1 = j_id1(j_id, ndofs1, ndofs2);
let j_id2 = j_id2(j_id, ndofs1, ndofs2);
- let dvel = solver_vel1.dvel(j_id1, ndofs1, jacobians, &dir1, &self.gcross1, solver_vels)
+ let dvel = solver_vel1.dvel(j_id1, ndofs1, jacobians, dir1, &self.gcross1, solver_vels)
+ solver_vel2.dvel(j_id2, ndofs2, jacobians, &-dir1, &self.gcross2, solver_vels)
+ self.rhs;
@@ -271,7 +271,7 @@ impl TwoBodyConstraintNormalPart<Real> {
ndofs1,
dlambda,
jacobians,
- &dir1,
+ dir1,
&self.gcross1,
solver_vels,
im1,
@@ -323,7 +323,7 @@ impl TwoBodyConstraintElement<Real> {
cfm_factor,
nrm_j_id,
jacobians,
- &dir1,
+ dir1,
im1,
im2,
ndofs1,
@@ -339,7 +339,7 @@ impl TwoBodyConstraintElement<Real> {
// Solve friction.
if solve_friction {
#[cfg(feature = "dim3")]
- let tangents1 = [tangent1, &dir1.cross(&tangent1)];
+ let tangents1 = [tangent1, &dir1.cross(tangent1)];
#[cfg(feature = "dim2")]
let tangents1 = [&dir1.orthonormal_vector()];
let mut tng_j_id = tangent_j_id(j_id, ndofs1, ndofs2);
diff --git a/src/dynamics/solver/contact_constraint/one_body_constraint.rs b/src/dynamics/solver/contact_constraint/one_body_constraint.rs
index 57931cd..be108a4 100644
--- a/src/dynamics/solver/contact_constraint/one_body_constraint.rs
+++ b/src/dynamics/solver/contact_constraint/one_body_constraint.rs
@@ -76,7 +76,7 @@ impl OneBodyConstraintBuilder {
let rb1 = handle1
.map(|h| SolverBody::from(&bodies[h]))
- .unwrap_or_else(SolverBody::default);
+ .unwrap_or_default();
let rb2 = &bodies[handle2.unwrap()];
let vels2 = &rb2.vels;
@@ -334,7 +334,7 @@ impl OneBodyConstraint {
solve_normal: bool,
solve_friction: bool,
) {
- let mut solver_vel2 = solver_vels[self.solver_vel2 as usize];
+ let mut solver_vel2 = solver_vels[self.solver_vel2];
OneBodyConstraintElement::solve_group(
self.cfm_factor,
@@ -349,7 +349,7 @@ impl OneBodyConstraint {
solve_friction,
);
- solver_vels[self.solver_vel2 as usize] = solver_vel2;
+ solver_vels[self.solver_vel2] = solver_vel2;
}
// FIXME: duplicated code. This is exactly the same as in the two-body velocity constraint.
diff --git a/src/dynamics/solver/contact_constraint/one_body_constraint_element.rs b/src/dynamics/solver/contact_constraint/one_body_constraint_element.rs
index c5c0944..d9ff7f4 100644
--- a/src/dynamics/solver/contact_constraint/one_body_constraint_element.rs
+++ b/src/dynamics/solver/contact_constraint/one_body_constraint_element.rs
@@ -204,7 +204,7 @@ impl<N: SimdRealCopy> OneBodyConstraintElement<N> {
AngVector<N>: SimdDot<AngVector<N>, Result = N>,
{
#[cfg(feature = "dim3")]
- let tangents1 = [tangent1, &dir1.cross(&tangent1)];
+ let tangents1 = [tangent1, &dir1.cross(tangent1)];
#[cfg(feature = "dim2")]
let tangents1 = [&dir1.orthonormal_vector()];
@@ -213,7 +213,7 @@ impl<N: SimdRealCopy> OneBodyConstraintElement<N> {
for element in elements.iter_mut() {
element
.normal_part
- .solve(cfm_factor, &dir1, im2, solver_vel2);
+ .solve(cfm_factor, dir1, im2, solver_vel2);
let limit = limit * element.normal_part.impulse;
let part = &mut element.tangent_part;
part.apply_limit(tangents1, im2, limit, solver_vel2);
diff --git a/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs b/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs
index 33e0d77..cd2ea56 100644
--- a/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs
+++ b/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs
@@ -308,12 +308,8 @@ impl OneBodyConstraintSimd {
solve_friction: bool,
) {
let mut solver_vel2 = SolverVel {
- linear: Vector::from(gather![
- |ii| solver_vels[self.solver_vel2[ii] as usize].linear
- ]),
- angular: AngVector::from(gather![
- |ii| solver_vels[self.solver_vel2[ii] as usize].angular
- ]),
+ linear: Vector::from(gather![|ii| solver_vels[self.solver_vel2[ii]].linear]),
+ angular: AngVector::from(gather![|ii| solver_vels[self.solver_vel2[ii]].angular]),
};
OneBodyConstraintElement::solve_group(
@@ -330,8 +326,8 @@ impl OneBodyConstraintSimd {
);
for ii in 0..SIMD_WIDTH {
- solver_vels[self.solver_vel2[ii] as usize].linear = solver_vel2.linear.extract(ii);
- solver_vels[self.solver_vel2[ii] as usize].angular = solver_vel2.angular.extract(ii);
+ solver_vels[self.solver_vel2[ii]].linear = solver_vel2.linear.extract(ii);
+ solver_vels[self.solver_vel2[ii]].angular = solver_vel2.angular.extract(ii);
}
}
diff --git a/src/dynamics/solver/contact_constraint/two_body_constraint.rs b/src/dynamics/solver/contact_constraint/two_body_constraint.rs
index 9b552ca..0a0ebd6 100644
--- a/src/dynamics/solver/contact_constraint/two_body_constraint.rs
+++ b/src/dynamics/solver/contact_constraint/two_body_constraint.rs
@@ -380,8 +380,8 @@ impl TwoBodyConstraint {
solve_normal: bool,
solve_friction: bool,
) {
- let mut solver_vel1 = solver_vels[self.solver_vel1 as usize];
- let mut solver_vel2 = solver_vels[self.solver_vel2 as usize];
+ let mut solver_vel1 = solver_vels[self.solver_vel1];
+ let mut solver_vel2 = solver_vels[self.solver_vel2];
TwoBodyConstraintElement::solve_group(
self.cfm_factor,
@@ -398,8 +398,8 @@ impl TwoBodyConstraint {
solve_friction,
);
- solver_vels[self.solver_vel1 as usize] = solver_vel1;
- solver_vels[self.solver_vel2 as usize] = solver_vel2;
+ solver_vels[self.solver_vel1] = solver_vel1;
+ solver_vels[self.solver_vel2] = solver_vel2;
}
pub fn writeback_impulses(&self, manifolds_all: &mut [&mut ContactManifold]) {
diff --git a/src/dynamics/solver/contact_constraint/two_body_constraint_element.rs b/src/dynamics/solver/contact_constraint/two_body_constraint_element.rs
index a8c0037..8c720b9 100644
--- a/src/dynamics/solver/contact_constraint/two_body_constraint_element.rs
+++ b/src/dynamics/solver/contact_constraint/two_body_constraint_element.rs
@@ -243,7 +243,7 @@ impl<N: SimdRealCopy> TwoBodyConstraintElement<N> {
AngVector<N>: SimdDot<AngVector<N>, Result = N>,
{
#[cfg(feature = "dim3")]
- let tangents1 = [tangent1, &dir1.cross(&tangent1)];
+ let tangents1 = [tangent1, &dir1.cross(tangent1)];
#[cfg(feature = "dim2")]
let tangents1 = [&dir1.orthonormal_vector()];
@@ -252,7 +252,7 @@ impl<N: SimdRealCopy> TwoBodyConstraintElement<N> {
for element in elements.iter_mut() {
element
.normal_part
- .solve(cfm_factor, &dir1, im1, im2, solver_vel1, solver_vel2);
+ .solve(cfm_factor, dir1, im1, im2, solver_vel1, solver_vel2);
let limit = limit * element.normal_part.impulse;
let part = &mut element.tangent_part;
part.apply_limit(tangents1, im1, im2, limit, solver_vel1, solver_vel2);
diff --git a/src/dynamics/solver/contact_constraint/two_body_constraint_simd.rs b/src/dynamics/solver/contact_constraint/two_body_constraint_simd.rs
index b9f3e52..ee176d6 100644
--- a/src/dynamics/solver/contact_constraint/two_body_constraint_simd.rs
+++ b/src/dynamics/solver/contact_constraint/two_body_constraint_simd.rs
@@ -292,21 +292,13 @@ impl TwoBodyConstraintSimd {
solve_friction: bool,
) {
let mut solver_vel1 = SolverVel {
- linear: Vector::from(gather![
- |ii| solver_vels[self.solver_vel1[ii] as usize].linear
- ]),
- angular: AngVector::from(gather![
- |ii| solver_vels[self.solver_vel1[ii] as usize].angular
- ]),
+ linear: Vector::from(gather![|ii| solver_vels[self.solver_vel1[ii]].linear]),
+ angular: AngVector::from(gather![|ii| solver_vels[self.solver_vel1[ii]].angular]),
};
let mut solver_vel2 = SolverVel {
- linear: Vector::from(gather![
- |ii| solver_vels[self.solver_vel2[ii] as usize].linear
- ]),
- angular: AngVector::from(gather![
- |ii| solver_vels[self.solver_vel2[ii] as usize].angular
- ]),
+ linear: Vector::from(gather![|ii| solver_vels[self.solver_vel2[ii]].linear]),
+ angular: AngVector::from(gather![|ii| solver_vels[self.solver_vel2[ii]].angular]),
};
TwoBodyConstraintElement::solve_group(
@@ -325,12 +317,12 @@ impl TwoBodyConstraintSimd {
);
for ii in 0..SIMD_WIDTH {
- solver_vels[self.solver_vel1[ii] as usize].linear = solver_vel1.linear.extract(ii);
- solver_vels[self.solver_vel1[ii] as usize].angular = solver_vel1.angular.extract(ii);
+ solver_vels[self.solver_vel1[ii]].linear = solver_vel1.linear.extract(ii);
+ solver_vels[self.solver_vel1[ii]].angular = solver_vel1.angular.extract(ii);
}
for ii in 0..SIMD_WIDTH {
- solver_vels[self.solver_vel2[ii] as usize].linear = solver_vel2.linear.extract(ii);
- solver_vels[self.solver_vel2[ii] as usize].angular = solver_vel2.angular.extract(ii);
+ solver_vels[self.solver_vel2[ii]].linear = solver_vel2.linear.extract(ii);
+ solver_vels[self.solver_vel2[ii]].angular = solver_vel2.angular.extract(ii);
}
}
diff --git a/src/dynamics/solver/interaction_groups.rs b/src/dynamics/solver/interaction_groups.rs
index d654a59..1e834e6 100644
--- a/src/dynamics/solver/interaction_groups.rs
+++ b/src/dynamics/solver/interaction_groups.rs
@@ -25,7 +25,7 @@ impl<'a> PairInteraction for &'a mut ContactManifold {
}
#[cfg(feature = "parallel")]
-impl<'a> PairInteraction for JointGraphEdge {
+impl PairInteraction for JointGraphEdge {
fn body_pair(&self) -> (Option<RigidBodyHandle>, Option<RigidBodyHandle>) {
(Some(self.weight.body1), Some(self.weight.body2))
}
@@ -470,11 +470,11 @@ impl InteractionGroups {
(bucket.0)[SIMD_LAST_INDEX] = *interaction_i;
self.simd_interactions.extend_from_slice(&bucket.0);
bucket.1 = 0;
- occupied_mask = occupied_mask & (!target_mask_bit);
+ occupied_mask &= !target_mask_bit;
} else {
(bucket.0)[bucket.1] = *interaction_i;
bucket.1 += 1;
- occupied_mask = occupied_mask | target_mask_bit;
+ occupied_mask |= target_mask_bit;
}
// NOTE: fixed bodies don't transmit forces. Therefore they don't
diff --git a/src/dynamics/solver/joint_constraint/joint_constraints_set.rs b/src/dynamics/solver/joint_constraint/joint_constraints_set.rs
index 21b6459..64c1e83 100644
--- a/src/dynamics/solver/joint_constraint/joint_constraints_set.rs
+++ b/src/dynamics/solver/joint_constraint/joint_constraints_set.rs
@@ -399,7 +399,7 @@ impl JointConstraintsSet {
) {
for builder in &mut self.generic_velocity_constraints_builder {
builder.update(
- &params,
+ params,
multibodies,
solver_bodies,
&mut self.generic_jacobians,
@@ -409,7 +409,7 @@ impl JointConstraintsSet {
for builder in &mut self.generic_velocity_one_body_constraints_builder {
builder.update(
- &params,
+ params,
multibodies,
solver_bodies,
&mut self.generic_jacobians,
@@ -418,17 +418,17 @@ impl JointConstraintsSet {
}
for builder in &mut self.velocity_constraints_builder {
- builder.update(&params, solver_bodies, &mut self.velocity_constraints);
+ builder.update(params, solver_bodies, &mut self.velocity_constraints);
}
#[cfg(feature = "simd-is-enabled")]
for builder in &mut self.simd_velocity_constraints_builder {
- builder.update(&params, solver_bodies, &mut self.simd_velocity_constraints);
+ builder.update(params, solver_bodies, &mut self.simd_velocity_constraints);
}
for builder in &mut self.velocity_one_body_constraints_builder {
builder.update(
- &params,
+ params,
solver_bodies,
&mut self.velocity_one_body_constraints,
);
@@ -437,7 +437,7 @@ impl JointConstraintsSet {
#[cfg(feature = "simd-is-enabled")]
for builder in &mut self.simd_velocity_one_body_constraints_builder {
builder.update(
- &params,
+ params,
solver_bodies,
&mut self.simd_velocity_one_body_constraints,
);
diff --git a/src/dynamics/solver/joint_constraint/joint_generic_constraint_builder.rs b/src/dynamics/solver/joint_constraint/joint_generic_constraint_builder.rs
index 5523962..34256a2 100644
--- a/src/dynamics/solver/joint_constraint/joint_generic_constraint_builder.rs
+++ b/src/dynamics/solver/joint_constraint/joint_generic_constraint_builder.rs
@@ -219,6 +219,7 @@ impl JointGenericTwoBodyConstraintBuilder {
}
#[derive(Copy, Clone)]
+#[allow(clippy::large_enum_variant)]
pub enum JointGenericOneBodyConstraintBuilder {
Internal(JointGenericVelocityOneBodyInternalConstraintBuilder),
External(JointGenericVelocityOneBodyExternalConstraintBuilder),
diff --git a/src/dynamics/solver/joint_constraint/joint_velocity_constraint.rs b/src/dynamics/solver/joint_constraint/joint_velocity_constraint.rs
index 274e94e..e184e3d 100644
--- a/src/dynamics/solver/joint_constraint/joint_velocity_constraint.rs
+++ b/src/dynamics/solver/joint_constraint/joint_velocity_constraint.rs
@@ -332,13 +332,13 @@ impl JointTwoBodyConstraint<Real, 1> {
}
pub fn solve(&mut self, solver_vels: &mut [SolverVel<Real>]) {
- let mut solver_vel1 = solver_vels[self.solver_vel1[0] as usize];
- let mut solver_vel2 = solver_vels[self.solver_vel2[0] as usize];
+ let mut solver_vel1 = solver_vels[self.solver_vel1[0]];
+ let mut solver_vel2 = solver_vels[self.solver_vel2[0]];
self.solve_generic(&mut solver_vel1, &mut solver_vel2);
- solver_vels[self.solver_vel1[0] as usize] = solver_vel1;
- solver_vels[self.solver_vel2[0] as usize] = solver_vel2;
+ solver_vels[self.solver_vel1[0]] = solver_vel1;
+ solver_vels[self.solver_vel2[0]] = solver_vel2;
}
pub fn writeback_impulses(&self, joints_all: &mut [JointGraphEdge]) {
@@ -399,29 +399,21 @@ impl JointTwoBodyConstraint<SimdReal, SIMD_WIDTH> {
pub fn solve(&mut self, solver_vels: &mut [SolverVel<Real>]) {
let mut solver_vel1 = SolverVel {
- linear: Vector::from(gather![
- |ii| solver_vels[self.solver_vel1[ii] as usize].linear
- ]),
- angular: AngVector::from(gather![
- |ii| solver_vels[self.solver_vel1[ii] as usize].angular
- ]),
+ linear: Vector::from(gather![|ii| solver_vels[self.solver_vel1[ii]].linear]),
+ angular: AngVector::from(gather![|ii| solver_vels[self.solver_vel1[ii]].angular]),
};
let mut solver_vel2 = SolverVel {
- linear: Vector::from(gather![
- |ii| solver_vels[self.solver_vel2[ii] as usize].linear
- ]),
- angular: AngVector::from(gather![
- |ii| solver_vels[self.solver_vel2[ii] as usize].angular
- ]),
+ linear: Vector::from(gather![|ii| solver_vels[self.solver_vel2[ii]].linear]),
+ angular: AngVector::from(gather![|ii| solver_vels[self.solver_vel2[ii]].angular]),
};
self.solve_generic(&mut solver_vel1, &mut solver_vel2);
for ii in 0..SIMD_WIDTH {
- solver_vels[self.solver_vel1[ii] as usize].linear = solver_vel1.linear.extract(ii);
- solver_vels[self.solver_vel1[ii] as usize].angular = solver_vel1.angular.extract(ii);
- solver_vels[self.solver_vel2[ii] as usize].linear = solver_vel2.linear.extract(ii);
- solver_vels[self.solver_vel2[ii] as usize].angular = solver_vel2.angular.extract(ii);
+ solver_vels[self.solver_vel1[ii]].linear = solver_vel1.linear.extract(ii);
+ solver_vels[self.solver_vel1[ii]].angular = solver_vel1.angular.extract(ii);
+ solver_vels[self.solver_vel2[ii]].linear = solver_vel2.linear.extract(ii);
+ solver_vels[self.solver_vel2[ii]].angular = solver_vel2.angular.extract(ii);
}
}
@@ -682,9 +674,9 @@ impl JointOneBodyConstraint<Real, 1> {
}
pub fn solve(&mut self, solver_vels: &mut [SolverVel<Real>]) {
- let mut solver_vel2 = solver_vels[self.solver_vel2[0] as usize];
+ let mut solver_vel2 = solver_vels[self.solver_vel2[0]];
self.solve_generic(&mut solver_vel2);
- solver_vels[self.solver_vel2[0] as usize] = solver_vel2;
+ solver_vels[self.solver_vel2[0]] = solver_vel2;
}
pub fn writeback_impulses(&self, joints_all: &mut [JointGraphEdge]) {
@@ -751,19 +743,15 @@ impl JointOneBodyConstraint<SimdReal, SIMD_WIDTH> {
pub fn solve(&mut self, solver_vels: &mut [SolverVel<Real>]) {
let mut solver_vel2 = SolverVel {
- linear: Vector::from(gather![
- |ii| solver_vels[self.solver_vel2[ii] as usize].linear
- ]),
- angular: AngVector::from(gather![
- |ii| solver_vels[self.solver_vel2[ii] as usize].angular
- ]),
+ linear: Vector::from(gather![|ii| solver_vels[self.solver_vel2[ii]].linear]),
+ angular: AngVector::from(gather![|ii| solver_vels[self.solver_vel2[ii]].angular]),
};
self.solve_generic(&mut solver_vel2);
for ii in 0..SIMD_WIDTH {
- solver_vels[self.solver_vel2[ii] as usize].linear = solver_vel2.linear.extract(ii);
- solver_vels[self.solver_vel2[ii] as usize].angular = solver_vel2.angular.extract(ii);
+ solver_vels[self.solver_vel2[ii]].linear = solver_vel2.linear.extract(ii);
+ solver_vels[self.solver_vel2[ii]].angular = solver_vel2.angular.extract(ii);
}
}
diff --git a/src/dynamics/solver/mod.rs b/src/dynamics/solver/mod.rs
index 5b11545..37585a2 100644
--- a/src/dynamics/solver/mod.rs
+++ b/src/dynamics/solver/mod.rs
@@ -7,17 +7,17 @@ pub(crate) use self::island_solver::IslandSolver;
// #[cfg(feature = "parallel")]
// pub(self) use self::parallel_velocity_solver::ParallelVelocitySolver;
// #[cfg(not(feature = "parallel"))]
-pub(self) use self::solver_constraints_set::SolverConstraintsSet;
+use self::solver_constraints_set::SolverConstraintsSet;
// #[cfg(not(feature = "parallel"))]
-pub(self) use self::velocity_solver::VelocitySolver;
+use self::velocity_solver::VelocitySolver;
-pub(self) use contact_constraint::*;
-pub(self) use interaction_groups::*;
+use contact_constraint::*;
+use interaction_groups::*;
pub(crate) use joint_constraint::MotorParameters;
pub use joint_constraint::*;
-pub(self) use solver_body::SolverBody;
-pub(self) use solver_constraints_set::{AnyConstraintMut, ConstraintTypes};
-pub(self) use solver_vel::SolverVel;
+use solver_body::SolverBody;
+use solver_constraints_set::{AnyConstraintMut, ConstraintTypes};
+use solver_vel::SolverVel;
mod categorization;
mod contact_constraint;
diff --git a/src/dynamics/solver/velocity_solver.rs b/src/dynamics/solver/velocity_solver.rs
index 1d4a0ae..928b427 100644
--- a/src/dynamics/solver/velocity_solver.rs
+++ b/src/dynamics/solver/velocity_solver.rs
@@ -175,8 +175,8 @@ impl VelocitySolver {
/*
* Update & solve constraints.
*/
- joint_constraints.update(&params, multibodies, &self.solver_bodies);
- contact_constraints.update(&params, substep_id, multibodies, &self.solver_bodies);
+ joint_constraints.update(params, multibodies, &self.solver_bodies);
+ contact_constraints.update(params, substep_id, multibodies, &self.solver_bodies);
for _ in 0..params.num_internal_pgs_iterations {
joint_constraints.solve(&mut self.solver_vels, &mut self.generic_solver_vels);
@@ -196,7 +196,7 @@ impl VelocitySolver {
/*
* Integrate positions.
*/
- self.integrate_positions(&params, is_last_substep, bodies, multibodies);
+ self.integrate_positions(params, is_last_substep, bodies, multibodies);
/*
* Resolution without bias.