From 78c8bc6cdef26d14c57d0eeb23188cba592961bf Mon Sep 17 00:00:00 2001 From: Sébastien Crozet Date: Sun, 23 Jan 2022 16:50:02 +0100 Subject: Improve cfm configuration using the critical damping factor --- src/dynamics/solver/generic_velocity_constraint_element.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/dynamics/solver/generic_velocity_constraint_element.rs') 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 { #[inline] pub fn generic_solve( &mut self, + cfm_factor: Real, j_id: usize, jacobians: &DVector, dir1: &Vector, @@ -261,7 +262,7 @@ impl VelocityConstraintNormalPart { + 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 { impl VelocityConstraintElement { #[inline] pub fn generic_solve_group( + cfm_factor: Real, elements: &mut [Self], jacobians: &DVector, dir1: &Vector, @@ -318,8 +320,8 @@ impl VelocityConstraintElement { 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; } -- cgit