# File numerics/src/FrictionContact/fc3d_2NCP_Glocker.h¶

Go to the source code of this file

interface to functions used to write the Friction-Contact 3D problem as a NCP, using Glocker formulation.

The idea is to write the Friction Contact problem as a NCP: The input problem looks like:

$velocity = M.reaction +q$
velocity, reaction (the unknowns) and q are vectors of size n. M is a nXn matrix.

and is formulate as: Find $$reaction_G \in \mathcal{R}^5$$ such that: $$0 \le F_G(reaction_G) \perp reaction_G \ge 0 \\$$ with $$F_G(reaction_G) = M_G.reaction_G + g(reaction_G) + q_G$$ index $$G$$ stands for “Glocker” in all related operators.

The relations between $_G$ operators and input Friction-Contact problem, plus all other details, are given in: Acary, V. and B. Brogliato (2008). Numerical Methods for Nonsmooth Dynamical Systems: Applications in Mechanics and Electronics. Vol. 35 of LNACM. Springer Verlag. Chapter 13, part 4.3 p 420.

Functions

double Compute_NCP_error1(int contact, double error)

compute NCP error for Fischer-Burmeister formulation

Return

error ?

Parameters
• contact:

• error:

double Compute_NCP_error2(int contact, double error)

compute NCP error for Fischer-Burmeister formulation

Return

error ?

Parameters
• contact:

• error:

void compute_Z_GlockerFixedP(int contact, double *reactionstep)

compute Fixed Point Solution for the NCP formulation

Parameters
• contact:

• reactionstep:

void computeFGlocker(double **FOut, int up2Date)

To compute F.

Parameters
• [inout] FOut: the resulting FOut (warning: must be null on input)

• up2Date: boolean variable to avoid recomputation of some parameters: true if F or jacobianF has been computed and if the considered local problem has not changed, else false.

void computeJacobianFGlocker(double **jacobianFOut, int up2Date)

To compute jacobianF.

Parameters
• [inout] jacobianFOut: the resulting (warning: must be null on input)

• up2Date: Boolean variable to avoid recomputation of some parameters: true if F or jacobianF has been computed and if the considered local problem has not changed, else false.

void NCPGlocker_free(void)

free memory for friction contact to NCP-Glocker

void NCPGlocker_initialize(FrictionContactProblem *problem, FrictionContactProblem *localproblem)

Initialize some parameters required for the formulation as the size of the problem (number of contacts X 3), n the the global matrix M the the global vector q the global vector mu of the friction coefficients (size = n/3)

Parameters
• problem: the global problem

• localproblem: the local problem

void NCPGlocker_post(int contactnumber, double *reaction)

Retrieve global reaction values after solving, from computed “reactionGlocker”.

Parameters
• contactnumber: the number of the considered contact

• [inout] reaction: he global reaction (in-out parameter)

void NCPGlocker_update(int, FrictionContactProblem *problem, FrictionContactProblem *localproblem, double *pos, SolverOptions *options)

Pick the required sub-blocks in q, M …

according to the considered contact and write the operators required for the Glocker formulation

Parameters
• problem: the global problem

• localproblem: the local problem

• pos: the number of the considered contact (its position in global M)

• options: