The contact force problem generated by Jinngine is ultimately a non-linear complementarity problem. In fact, when disregarding the coupling between friction forces and normal forces, the problem becomes a mixed linear complimentarity problem, or MLCP for short. The MLCP is on the form
Given the matrix A, the vector b, and the solution limit vectors l and u, Find x, such that
w = A x + b
where
if x_i=u_i then w_i<=0
if x_i in (l_i,u_i) then w_i = 0
if x_i=l_i then w_i>=0
A is the matrix J M^(-1) J^T which describes constraint relations, and b is the vector of desired change in velocities.
This problem class can model normal-component contact forces and various joint types. The reason why this becomes a NCP when contact friction is introduced, is that we allow u and l to depend on the magnitude of some x_i vales, namely the x_i's that represent normal contact forces, so
l_i = -|mu * x_j| and u_i = |mu*x_j|
where i is the index of a friction constraint, j is the index of the normal force, and mu is the friction coefficient. constraint to which the friction constraint is coupled. This coupling is done to model an approximation to Coulomb's law of friction.
Solver employs Maven 2 transitive dependency resolution based on "nearness" and declaration order using a 2-pass scheme. Pass one recursively retrieves all referenced POMs. Pass two analyzes each retrieved POM for a particular solving scope and builds a flat dependency list with ring scores.
Ring-0 is the project itself. Ring-1 are direct named dependencies. Ring > 1 are solved transitive dependencies. Dependency conflicts are resolved by choosing the dependency in the lowest ring OR the first declaration, if the rings are equal.
Linked projects are treated as source folders of the build project. Therefore the dependencies linked projects are assimilated into the build project's dependencies.
Solver
is the header component of Constraint Programming. It embeds the list of Variable
(and their Domain
), the Constraint
's network, and a IPropagationEngine
to pilot the propagation.Solver
includes a AbstractSearchLoop
to guide the search loop: apply decisions and propagate, run backups and rollbacks and store solutions.
@author Xavier Lorca
@author Charles Prud'homme
@version 0.01, june 2010
@see solver.variables.Variable
@see solver.constraints.Constraint
@since 0.01
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|