aboutsummaryrefslogtreecommitdiff
path: root/src/dynamics/solver/generic_velocity_constraint_element.rs
diff options
context:
space:
mode:
authorSébastien Crozet <developer@crozet.re>2022-01-23 08:56:27 -0800
committerGitHub <noreply@github.com>2022-01-23 08:56:27 -0800
commit1608a1323ed76cdf33644cfea599cea715acf7a9 (patch)
tree07b975a2b22b31f74a5efcbaa3d2a30aea31ae47 /src/dynamics/solver/generic_velocity_constraint_element.rs
parentca635674fc72071d7ff546a749ac22766579b280 (diff)
parentb3b675d2de64d4437748ad46e41cca90c691de1a (diff)
downloadrapier-1608a1323ed76cdf33644cfea599cea715acf7a9.tar.gz
rapier-1608a1323ed76cdf33644cfea599cea715acf7a9.tar.bz2
rapier-1608a1323ed76cdf33644cfea599cea715acf7a9.zip
Merge pull request #282 from dimforge/critical-damping
Improve the CFM implementation
Diffstat (limited to 'src/dynamics/solver/generic_velocity_constraint_element.rs')
-rw-r--r--src/dynamics/solver/generic_velocity_constraint_element.rs8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/dynamics/solver/generic_velocity_constraint_element.rs b/src/dynamics/solver/generic_velocity_constraint_element.rs
index e75dd01..19fba43 100644
--- a/src/dynamics/solver/generic_velocity_constraint_element.rs
+++ b/src/dynamics/solver/generic_velocity_constraint_element.rs
@@ -243,6 +243,7 @@ impl VelocityConstraintNormalPart<Real> {
#[inline]
pub fn generic_solve(
&mut self,
+ cfm_factor: Real,
j_id: usize,
jacobians: &DVector<Real>,
dir1: &Vector<Real>,
@@ -261,7 +262,7 @@ impl VelocityConstraintNormalPart<Real> {
+ mj_lambda2.dvel(j_id2, ndofs2, jacobians, &-dir1, &self.gcross2, mj_lambdas)
+ self.rhs;
- let new_impulse = (self.impulse - self.r * dvel).max(0.0);
+ let new_impulse = cfm_factor * (self.impulse - self.r * dvel).max(0.0);
let dlambda = new_impulse - self.impulse;
self.impulse = new_impulse;
@@ -291,6 +292,7 @@ impl VelocityConstraintNormalPart<Real> {
impl VelocityConstraintElement<Real> {
#[inline]
pub fn generic_solve_group(
+ cfm_factor: Real,
elements: &mut [Self],
jacobians: &DVector<Real>,
dir1: &Vector<Real>,
@@ -318,8 +320,8 @@ impl VelocityConstraintElement<Real> {
for element in elements.iter_mut() {
element.normal_part.generic_solve(
- nrm_j_id, jacobians, &dir1, im1, im2, ndofs1, ndofs2, mj_lambda1, mj_lambda2,
- mj_lambdas,
+ cfm_factor, nrm_j_id, jacobians, &dir1, im1, im2, ndofs1, ndofs2, mj_lambda1,
+ mj_lambda2, mj_lambdas,
);
nrm_j_id += j_step;
}