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
  • 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
  • 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
  • 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: