DART  6.10.1
dart::constraint::BoxedLcpSolver Class Referenceabstract

#include <BoxedLcpSolver.hpp>

Inheritance diagram for dart::constraint::BoxedLcpSolver:
dart::constraint::DantzigBoxedLcpSolver dart::constraint::PgsBoxedLcpSolver

Public Member Functions

virtual ~BoxedLcpSolver ()=default
 Destructor. More...
 
virtual const std::string & getType () const =0
 Returns the type. More...
 
template<typename BoxedLcpSolverT >
bool is () const
 Returns true if this solver and the template parameter (a solver class) are the same type. More...
 
virtual bool solve (int n, double *A, double *x, double *b, int nub, double *lo, double *hi, int *findex, bool earlyTermination=false)=0
 Solves constriant impulses for a constrained group. More...
 
virtual bool canSolve (int n, const double *A)=0
 

Constructor & Destructor Documentation

◆ ~BoxedLcpSolver()

virtual dart::constraint::BoxedLcpSolver::~BoxedLcpSolver ( )
virtualdefault

Destructor.

Member Function Documentation

◆ canSolve()

virtual bool dart::constraint::BoxedLcpSolver::canSolve ( int  n,
const double *  A 
)
pure virtual

◆ getType()

virtual const std::string& dart::constraint::BoxedLcpSolver::getType ( ) const
pure virtual

◆ is()

template<typename BoxedLcpSolverT >
bool dart::constraint::BoxedLcpSolver::is

Returns true if this solver and the template parameter (a solver class) are the same type.

This function is a syntactic sugar, which is identical to:

getType() == BoxedLcpSolver::getStaticType()
virtual const std::string & getType() const =0
Returns the type.

.

Example code:

auto lcpSolver = constraintSolver->getBoxedLcpSolver();
if (shape->is<DantzigBoxedLcpSolver>())
std::cout << "The LCP solver type is Dantzig!\n";
See also
getType()

◆ solve()

virtual bool dart::constraint::BoxedLcpSolver::solve ( int  n,
double *  A,
double *  x,
double *  b,
int  nub,
double *  lo,
double *  hi,
int *  findex,
bool  earlyTermination = false 
)
pure virtual

Solves constriant impulses for a constrained group.

The LCP formulation setting that this function solve is A*x = b + w where each x[i], w[i] satisfies one of (1) x = lo, w >= 0 (2) x = hi, w <= 0 (3) lo < x < hi, w = 0

Parameters
[in]nDimension of constraints.
[in]AA term of the LCP formulation.
[in]xx term of the LCP formulation.
[in]bb term of the LCP formulation.
[in]nubNumber of the first unbounded constraints.
[in]loLower bound of x where it's restricted to be lo <= 0.
[in]hiUpper bound of x where it's enforced to be hi >= 0.
[in]findexIndices to corresponding normal contact constraint. Set the index to itself (e.g., findex[k] = k) for normal contacts or non-contact constraints. For friction constraint, set the cooresponding normal contact constraint.
[in]earlyTerminationSet true to return false as soon as the solver find the solution doesn't exist. Otherwise, the solver will continue to push hard to solve the problem using some hacks.
Returns
Success.

Implemented in dart::constraint::PgsBoxedLcpSolver, and dart::constraint::DantzigBoxedLcpSolver.