summaryrefslogtreecommitdiff
path: root/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.h
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.h')
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.h187
1 files changed, 0 insertions, 187 deletions
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.h
deleted file mode 100644
index 77fdb86bb9..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2018 Google Inc. http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_MULTIBODY_MLCP_CONSTRAINT_SOLVER_H
-#define BT_MULTIBODY_MLCP_CONSTRAINT_SOLVER_H
-
-#include "LinearMath/btMatrixX.h"
-#include "LinearMath/btThreads.h"
-#include "BulletDynamics/Featherstone/btMultiBodyConstraintSolver.h"
-
-class btMLCPSolverInterface;
-class btMultiBody;
-
-class btMultiBodyMLCPConstraintSolver : public btMultiBodyConstraintSolver
-{
-protected:
- /// \name MLCP Formulation for Rigid Bodies
- /// \{
-
- /// A matrix in the MLCP formulation
- btMatrixXu m_A;
-
- /// b vector in the MLCP formulation.
- btVectorXu m_b;
-
- /// Constraint impulse, which is an output of MLCP solving.
- btVectorXu m_x;
-
- /// Lower bound of constraint impulse, \c m_x.
- btVectorXu m_lo;
-
- /// Upper bound of constraint impulse, \c m_x.
- btVectorXu m_hi;
-
- /// \}
-
- /// \name Cache Variables for Split Impulse for Rigid Bodies
- /// When using 'split impulse' we solve two separate (M)LCPs
- /// \{
-
- /// Split impulse Cache vector corresponding to \c m_b.
- btVectorXu m_bSplit;
-
- /// Split impulse cache vector corresponding to \c m_x.
- btVectorXu m_xSplit;
-
- /// \}
-
- /// \name MLCP Formulation for Multibodies
- /// \{
-
- /// A matrix in the MLCP formulation
- btMatrixXu m_multiBodyA;
-
- /// b vector in the MLCP formulation.
- btVectorXu m_multiBodyB;
-
- /// Constraint impulse, which is an output of MLCP solving.
- btVectorXu m_multiBodyX;
-
- /// Lower bound of constraint impulse, \c m_x.
- btVectorXu m_multiBodyLo;
-
- /// Upper bound of constraint impulse, \c m_x.
- btVectorXu m_multiBodyHi;
-
- /// \}
-
- /// Indices of normal contact constraint associated with frictional contact constraint for rigid bodies.
- ///
- /// This is used by the MLCP solver to update the upper bounds of frictional contact impulse given intermediate
- /// normal contact impulse. For example, i-th element represents the index of a normal constraint that is
- /// accosiated with i-th frictional contact constraint if i-th constraint is a frictional contact constraint.
- /// Otherwise, -1.
- btAlignedObjectArray<int> m_limitDependencies;
-
- /// Indices of normal contact constraint associated with frictional contact constraint for multibodies.
- ///
- /// This is used by the MLCP solver to update the upper bounds of frictional contact impulse given intermediate
- /// normal contact impulse. For example, i-th element represents the index of a normal constraint that is
- /// accosiated with i-th frictional contact constraint if i-th constraint is a frictional contact constraint.
- /// Otherwise, -1.
- btAlignedObjectArray<int> m_multiBodyLimitDependencies;
-
- /// Array of all the rigid body constraints
- btAlignedObjectArray<btSolverConstraint*> m_allConstraintPtrArray;
-
- /// Array of all the multibody constraints
- btAlignedObjectArray<btMultiBodySolverConstraint*> m_multiBodyAllConstraintPtrArray;
-
- /// MLCP solver
- btMLCPSolverInterface* m_solver;
-
- /// Count of fallbacks of using btSequentialImpulseConstraintSolver, which happens when the MLCP solver fails.
- int m_fallback;
-
- /// \name MLCP Scratch Variables
- /// The following scratch variables are not stateful -- contents are cleared prior to each use.
- /// They are only cached here to avoid extra memory allocations and deallocations and to ensure
- /// that multiple instances of the solver can be run in parallel.
- ///
- /// \{
-
- /// Cache variable for constraint Jacobian matrix.
- btMatrixXu m_scratchJ3;
-
- /// Cache variable for constraint Jacobian times inverse mass matrix.
- btMatrixXu m_scratchJInvM3;
-
- /// Cache variable for offsets.
- btAlignedObjectArray<int> m_scratchOfs;
-
- /// \}
-
- /// Constructs MLCP terms, which are \c m_A, \c m_b, \c m_lo, and \c m_hi.
- virtual void createMLCPFast(const btContactSolverInfo& infoGlobal);
-
- /// Constructs MLCP terms for constraints of two rigid bodies
- void createMLCPFastRigidBody(const btContactSolverInfo& infoGlobal);
-
- /// Constructs MLCP terms for constraints of two multi-bodies or one rigid body and one multibody
- void createMLCPFastMultiBody(const btContactSolverInfo& infoGlobal);
-
- /// Solves MLCP and returns the success
- virtual bool solveMLCP(const btContactSolverInfo& infoGlobal);
-
- // Documentation inherited
- btScalar solveGroupCacheFriendlySetup(
- btCollisionObject** bodies,
- int numBodies,
- btPersistentManifold** manifoldPtr,
- int numManifolds,
- btTypedConstraint** constraints,
- int numConstraints,
- const btContactSolverInfo& infoGlobal,
- btIDebugDraw* debugDrawer) BT_OVERRIDE;
-
- // Documentation inherited
- btScalar solveGroupCacheFriendlyIterations(
- btCollisionObject** bodies,
- int numBodies,
- btPersistentManifold** manifoldPtr,
- int numManifolds,
- btTypedConstraint** constraints,
- int numConstraints,
- const btContactSolverInfo& infoGlobal,
- btIDebugDraw* debugDrawer) ;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR()
-
- /// Constructor
- ///
- /// \param[in] solver MLCP solver. Assumed it's not null.
- /// \param[in] maxLCPSize Maximum size of LCP to solve using MLCP solver. If the MLCP size exceeds this number, sequaltial impulse method will be used.
- explicit btMultiBodyMLCPConstraintSolver(btMLCPSolverInterface* solver);
-
- /// Destructor
- virtual ~btMultiBodyMLCPConstraintSolver();
-
- /// Sets MLCP solver. Assumed it's not null.
- void setMLCPSolver(btMLCPSolverInterface* solver);
-
- /// Returns the number of fallbacks of using btSequentialImpulseConstraintSolver, which happens when the MLCP
- /// solver fails.
- int getNumFallbacks() const;
-
- /// Sets the number of fallbacks. This function may be used to reset the number to zero.
- void setNumFallbacks(int num);
-
- /// Returns the constraint solver type.
- virtual btConstraintSolverType getSolverType() const;
-};
-
-#endif // BT_MULTIBODY_MLCP_CONSTRAINT_SOLVER_H