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

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_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

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[inout] he global reaction (in-out parameter)

void computeFGlocker(double **FOut, int up2Date)#

To compute F.

Parameters:
  • FOut[inout] 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[inout] 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.

double Compute_NCP_error1(int contact, double error)#

compute NCP error for Fischer-Burmeister formulation

Parameters:
  • contact

  • error

Returns:

error ?

double Compute_NCP_error2(int contact, double error)#

compute NCP error for Fischer-Burmeister formulation

Parameters:
  • contact

  • error

Returns:

error ?

void compute_Z_GlockerFixedP(int contact, double *reactionstep)#

compute Fixed Point Solution for the NCP formulation

Parameters:
  • contact

  • reactionstep

void NCPGlocker_free(void)#

free memory for friction contact to NCP-Glocker