aboutsummaryrefslogtreecommitdiff
path: root/src/dynamics/joint/multibody_joint/multibody.rs
diff options
context:
space:
mode:
authorSébastien Crozet <developer@crozet.re>2022-03-06 10:59:29 +0100
committerSébastien Crozet <sebastien@crozet.re>2022-03-20 21:49:16 +0100
commit815de4beff2ca31255c7fb937337602eb784ed67 (patch)
tree82b93d1fcad98f9a9a6732e2cc0208f8a44fe67b /src/dynamics/joint/multibody_joint/multibody.rs
parent2e6f133b95b614f13445722e54f28105d9664841 (diff)
downloadrapier-815de4beff2ca31255c7fb937337602eb784ed67.tar.gz
rapier-815de4beff2ca31255c7fb937337602eb784ed67.tar.bz2
rapier-815de4beff2ca31255c7fb937337602eb784ed67.zip
Complete the parallel solver fix
Diffstat (limited to 'src/dynamics/joint/multibody_joint/multibody.rs')
-rw-r--r--src/dynamics/joint/multibody_joint/multibody.rs43
1 files changed, 32 insertions, 11 deletions
diff --git a/src/dynamics/joint/multibody_joint/multibody.rs b/src/dynamics/joint/multibody_joint/multibody.rs
index f2fa623..58d11b6 100644
--- a/src/dynamics/joint/multibody_joint/multibody.rs
+++ b/src/dynamics/joint/multibody_joint/multibody.rs
@@ -971,27 +971,48 @@ impl Multibody {
}
#[inline]
+ pub fn num_active_internal_constraints_and_jacobian_lines(&self) -> (usize, usize) {
+ let num_constraints: usize = self
+ .links
+ .iter()
+ .map(|l| l.joint().num_velocity_constraints())
+ .sum();
+ (num_constraints, num_constraints)
+ }
+
+ #[inline]
pub fn generate_internal_constraints(
&self,
params: &IntegrationParameters,
j_id: &mut usize,
jacobians: &mut DVector<Real>,
out: &mut Vec<AnyJointVelocityConstraint>,
+ mut insert_at: Option<usize>,
) {
- let num_constraints: usize = self
- .links
- .iter()
- .map(|l| l.joint().num_velocity_constraints())
- .sum();
-
- let required_jacobian_len = *j_id + num_constraints * self.ndofs * 2;
- if jacobians.nrows() < required_jacobian_len {
- jacobians.resize_vertically_mut(required_jacobian_len, 0.0);
+ if !cfg!(feature = "parallel") {
+ let num_constraints: usize = self
+ .links
+ .iter()
+ .map(|l| l.joint().num_velocity_constraints())
+ .sum();
+
+ let required_jacobian_len = *j_id + num_constraints * self.ndofs * 2;
+ if jacobians.nrows() < required_jacobian_len {
+ jacobians.resize_vertically_mut(required_jacobian_len, 0.0);
+ }
}
for link in self.links.iter() {
- link.joint()
- .velocity_constraints(params, self, link, 0, j_id, jacobians, out);
+ link.joint().velocity_constraints(
+ params,
+ self,
+ link,
+ 0,
+ j_id,
+ jacobians,
+ out,
+ &mut insert_at,
+ );
}
}
}