# File kernel/src/simulationTools/GlobalFrictionContact.hpp¶

Go to the source code of this file

Primal Fricton-Contact Non-Smooth Problem.

Typedefs

typedef int (*GFC3D_Driver)(GlobalFrictionContactProblem *, double *, double *, double *, SolverOptions *)

Pointer to function of the type used for drivers for GlobalFrictionContact problems in Numerics.

class GlobalFrictionContact : public LinearOSNS
#include <GlobalFrictionContact.hpp>

Formalization and Resolution of a Friction-Contact Problem.

This class is devoted to the formalization and the resolution of primal friction contact problems defined by :

$\begin{split}M velocity = q + H reaction \\ globalVelocities = H^T velocity + tildeGlobalVelocities\end{split}$

and $$globalVelocities, reaction$$ belongs to the Coulomb friction law with unilateral contact.

With:

• $$velocity \in R^{n}$$ and $$reaction \in R^{n}$$ the unknowns,

• $$M \in R^{n \times n }$$ and $$q \in R^{n}$$

• $$globalVelocities \in R^{m}$$ and $$reaction \in R^{m}$$ the unknowns,

• $$tildeGlobalVelocities \in R^{m}$$ is the modified local velocity ( $$e U_{N,k}$$)

• $$M \in R^{n \times n }$$ and $$q \in R^{n}$$

• $$H \in R^{n \times m }$$

The dimension of the problem (2D or 3D) is given by the variable contactProblemDim and the right Numerics driver will be called according to this value.

Construction:

• Constructor from data (inputs = Simulations*, id, SP::NonSmoothSolver) - The solver is optional. Main functions:

Main functions:

• formalization of the problem: computes M,q using the set of “active” Interactions from the simulation and

the interactionBlock-matrices saved in the field interactionBlocks.

Functions:

initialize(), computeInteractionBlock(), preCompute()

• solving of the GlobalFrictionContact problem: function compute(), used to call solvers from Numerics through

the frictionContact2D_driver() or frictionContact3D_driver() interface of Numerics.

• post-treatment of data: set values of y/lambda variables of the active Interaction (ie Interactions) using

ouput results from the solver (velocity,reaction); function

postCompute().

Public Functions

GlobalFrictionContact(int dimPb, int numericsSolverId = SICONOS_GLOBAL_FRICTION_3D_NSGS)

constructor (solver id and dimension)

Parameters

GlobalFrictionContact(int dimPb, SP::SolverOptions options)

constructor from a pre-defined solver options set.

Parameters

virtual ~GlobalFrictionContact()

destructor

virtual int compute(double time)

Compute the unknown reaction and velocity and update the Interaction (y and lambda )

Parameters
• time: current time

void display() const

print the data to the screen

int getGlobalFrictionContactDim() const

get the type of GlobalFrictionContact problem (2D or 3D)

Return

an int (2 or 3)

unsigned int getGlobalSizeOutput() const

get dimension of the problem

Return

an unsigned ing

double getMu(unsigned int i) const

get the value of the component number i of mu, the vector of the friction coefficients

Return

the friction coefficient for the ith contact

SP::GlobalFrictionContactProblem globalFrictionContactProblem()

Return

the friction contact problem from Numerics

GlobalFrictionContactProblem *globalFrictionContactProblemPtr()

Return

the friction contact problem from Numerics (raw ptr, do not free)

SP::SiconosVector globalVelocities() const

get globalVelocities

Return

pointer on a SiconosVector

SP::OSNSMatrix H() const

get H

Return

pointer on a OSNSMatrix

virtual void initialize(SP::Simulation sim)

initialize the GlobalFrictionContact problem(compute topology …)

Parameters
• sim: the simulation, owner of this OSNSPB

virtual void initOSNSMatrix()

initialize the _M and _H matrix

void initVectorsMemory()

Memory allocation or resizing for z,w,q,b, globalVelocities.

SP::MuStorage mu() const

get a pointer to mu, the list of the friction coefficients

Return

pointer on a std::vector<double>

virtual void postCompute()

post-treatment of output from Numerics solver:

set values of the unknowns of Interactions using (velocity,reaction)

virtual bool preCompute(double time)

Construction of the problem.

Parameters
• time: current time

void setGlobalVelocities(SP::SiconosVector newPtr)

set globalVelocities to pointer newPtr

Parameters
• newPtr: the new vector

void setH(SP::OSNSMatrix H)

set the value of H

Parameters
• H: the new matrix

int solve(SP::GlobalFrictionContactProblem problem = SP::GlobalFrictionContactProblem())

solve a friction contact problem

Return

info solver information result

Parameters
• problem: the friction contact problem

void updateMu()

Protected Functions

ACCEPT_SERIALIZATION(GlobalFrictionContact)

serialization hooks

Protected Attributes

SP::SiconosVector _b

contains the impact contributions

int _contactProblemDim = 3

Type (dimension) of the contact problem (2D or 3D)

GFC3D_Driver _gfc_driver

Pointer to the function used to call the Numerics driver to solve the problem.

SP::SiconosVector _globalVelocities

contains the vector globalVelocities of a GlobalFrictionContact system

SP::OSNSMatrix _H

contains the matrix H of a GlobalFrictionContact system

SP::MuStorage _mu

friction coefficients

GlobalFrictionContactProblem _numerics_problem
size_t _sizeGlobalOutput = 0

size of the local problem to solve

Private Functions

GlobalFrictionContact()

default constructor