# Global-Friction-contact problems (2D or 3D)#

## Problem statement#

Given

• a symmetric positive semi definite matrix $${M} \in {{\mathrm{I\!R}}}^{n \times n}$$

• a matrix $${H} \in {{\mathrm{I\!R}}}^{n \times {d\, n_c}}$$

• a vector $${q} \in {{\mathrm{I\!R}}}^n$$

• a vector $${b} \in {{\mathrm{I\!R}}}^{d\, n_c}$$

• a vector of coefficients of friction $$\mu \in{{\mathrm{I\!R}}}^{n_c}$$

the global frictional contact problem denoted by $$\mathrm{PFC}(M,H,q,b,\mu)$$ consists in finding three vectors,

• the global velocity $$v\in{{\mathrm{I\!R}}}^n$$,

• the relative local velocity $$u\in{{\mathrm{I\!R}}}^{d\,n_c}$$,

• the contact forces $$r\in {{\mathrm{I\!R}}}^{d,n_c}$$,

such that :

$\begin{split}\begin{eqnarray*} \begin{cases} M v = q + H r \\ u = H^\top v + b \\ \hat u = u +\left[ \left[\begin{array}{c} \mu^\alpha \|u^\alpha_{T}\|\\ 0 \\ 0 \end{array}\right]^T, \alpha = 1 \ldots n_c \right]^T \\ \ \ C^\star_{\mu} \ni {\hat u} \perp r \in C_{\mu} \end{cases} \end{eqnarray*}\end{split}$

where the Coulomb friction cone is defined by $$C_{\mu} = \prod\limits_{\alpha=1\ldots n_c} C^{\alpha}_{\mu^\alpha}$$

with $$C^{\alpha}_{\mu^\alpha} =\{ r^\alpha, \|r_{t}\| \leq \mu_{\alpha} |r^\alpha_{n}|\}$$ , and the set $$C^{\alpha,\star}_{\mu^\alpha}$$ its dual.

The modified local velocity $$\widehat u$$ is not considered as an unknown since it can be obtained uniquely from the local velocity $$u$$.

Coulomb’s friction law with Signorini’s condition for the unilateral contact written in terms of second order complementarity condition

$\begin{eqnarray} C^\star_{\mu} \ni {\hat u} \perp r \in C_{\mu} \end{eqnarray}$

can be interpreted in a more usual form

$\begin{split}\begin{eqnarray} \begin{cases} 0 \leq u_{N} \perp r_N \geq 0 \quad\quad\text{ Signorini condition}\\ u_T = 0 \Rightarrow \|r_T\| \leq \mu |r_n| \quad\quad\text{ Sticking mode} \\ u_T \neq 0 \Rightarrow r_T = - \mu |r_n| \frac{u_T }{\|u_T\|} \quad\quad\text{ Sliding mode} \end{cases} \end{eqnarray}\end{split}$

This problem models any instance of discretized frictional contact problem obtained from

• the time-discretization of dynamics contact problems with event-capturing of event-tracking schemes,

• the time-discretization of quasi-static contact problems,

• the modeling of static contact problems. In this last case, $$u$$ plays the role of the relative displacement at contact

## Implementation in numerics#

Structure to define the problem: GlobalFrictionContactProblem.

Solvers list : FRICTION_SOLVER, id containing ‘GLOBAL_FRICTION_3D’

The generic drivers for global friction-contact problems is gfc3d_driver().

## Error strategy#

To set internal solver tolerance (when it makes sense!) use gfc3d_set_internalsolver_tolerance().

Check details in Error strategy

## Global Friction 3D available solvers#

### NSGS (SICONOS_GLOBAL_FRICTION_3D_NSGS)#

Non-Smooth Gauss Seidel solver with reformulation.

Driver: gfc3d_nsgs()

Parameters: same as :enumerate:SICONOS_FRICTION_3D_NSGS.

Warning : default iparam[SICONOS_FRICTION_3D_IPARAM_ERROR_EVALUATION_FREQUENCY] is 0, which may lead to very expensive computation for error checking. Increase this value to improve performances.

### Nonsmooth Newton, Alart-Curnier, (SICONOS_GLOBAL_FRICTION_3D_NSN_AC)#

Parameters: same as :enumerate:SICONOS_FRICTION_3D_NSN_AC.

• iparam[SICONOS_IPARAM_MAX_ITER] = 200;

• iparam[SICONOS_FRICTION_3D_NSN_FORMULATION]

• SICONOS_FRICTION_3D_NSN_FORMULATION_ALARTCURNIER_STD (default)

• SICONOS_FRICTION_3D_NSN_FORMULATION_JEANMOREAU_STD

• SICONOS_FRICTION_3D_NSN_FORMULATION_ALARTCURNIER_GENERATED,

• SICONOS_FRICTION_3D_NSN_FORMULATION_JEANMOREAU_GENERATED

• SICONOS_FRICTION_3D_NSN_FORMULATION_NULL

• iparam[SICONOS_FRICTION_3D_NSN_MEMORY_ALLOCATED] = 0, 0 if memory for internal work arrays must be allocated, else 1.

• iparam[SICONOS_FRICTION_3D_NSN_LINESEARCH]

• SICONOS_FRICTION_3D_NSN_LINESEARCH_GOLDSTEINPRICE (default)

• SICONOS_FRICTION_3D_NSN_LINESEARCH_ARMIJO

• SICONOS_FRICTION_3D_NSN_LINESEARCH_NO

• iparam[SICONOS_FRICTION_3D_NSN_LINESEARCH_MAX_ITER] = 100 maximum number of iterations allowed for the line search.

• iparam[SICONOS_FRICTION_3D_NSN_MPI_COM] = -1

• dparam[SICONOS_DPARAM_TOL] = 1e-10

• dparam[SICONOS_FRICTION_3D_NSN_RHO] = 1.

• iparam[SICONOS_FRICTION_3D_IPARAM_ERROR_EVALUATION_FREQUENCY] = 1

### PATH (GAMS) (SICONOS_GLOBAL_FRICTION_3D_GAMS_PATH)#

Parameters: same as :enumerate:SICONOS_FRICTION_3D_GAMS_PATH.

### PATHVI (GAMS) (SICONOS_GLOBAL_FRICTION_3D_GAMS_PATHVI)#

Parameters: same as :enumerate:SICONOS_FRICTION_3D_GAMS_PATHVI.

### Fixed-Point projection (VI reformulation) (SICONOS_GLOBAL_FRICTION_3D_VI_FPP)#

Parameters: same as :enumerate:SICONOS_FRICTION_3D_VI_FPP.

### Extra-Gradient (VI reformulation) (SICONOS_GLOBAL_FRICTION_3D_VI_EG)#

Parameters: same as :enumerate:SICONOS_FRICTION_3D_VI_EG.

### ACLM Fixed point (SICONOS_GLOBAL_FRICTION_3D_ACLMFP)#

Parameters:

• iparam[SICONOS_IPARAM_MAX_ITER] = 1000;

• iparam[SICONOS_FRICTION_3D_IPARAM_INTERNAL_ERROR_STRATEGY] = SICONOS_FRICTION_3D_INTERNAL_ERROR_STRATEGY_ADAPTIVE

• dparam[SICONOS_DPARAM_TOL] = 1e-4;

• dparam[SICONOS_FRICTION_3D_DPARAM_INTERNAL_ERROR_RATIO] = 2.0

Internal solver: SICONOS_CONVEXQP_ADMM, see Available solvers.

### ADMM (SICONOS_GLOBAL_FRICTION_3D_ADMM)#

Solver based on ADMM method.

Driver: gfc3d_ADMM()

Parameters:

• iparam[SICONOS_IPARAM_MAX_ITER] = 20000;

• iparam[SICONOS_FRICTION_3D_ADMM_IPARAM_ACCELERATION]

• SICONOS_FRICTION_3D_ADMM_ACCELERATION

• SICONOS_FRICTION_3D_ADMM_ACCELERATION_AND_RESTART (default)

• SICONOS_FRICTION_3D_ADMM_NO_ACCELERATION

• iparam[SICONOS_FRICTION_3D_ADMM_IPARAM_SPARSE_STORAGE]

• SICONOS_FRICTION_3D_ADMM_FORCED_SPARSE_STORAGE

• SICONOS_FRICTION_3D_ADMM_KEEP_STORAGE (default)

• iparam[SICONOS_FRICTION_3D_ADMM_IPARAM_INITIAL_RHO] =

• SICONOS_FRICTION_3D_ADMM_INITIAL_RHO_GIVEN (default)

• SICONOS_FRICTION_3D_ADMM_INITIAL_RHO_NORM_INF

• SICONOS_FRICTION_3D_ADMM_INITIAL_RHO_EIGENVALUES;

• iparam[SICONOS_FRICTION_3D_ADMM_IPARAM_RHO_STRATEGY]

• SICONOS_FRICTION_3D_ADMM_RHO_STRATEGY_RESIDUAL_BALANCING

• SICONOS_FRICTION_3D_ADMM_RHO_STRATEGY_SCALED_RESIDUAL_BALANCING

• SICONOS_FRICTION_3D_ADMM_RHO_STRATEGY_CONSTANT (default)

• iparam[SICONOS_FRICTION_3D_ADMM_IPARAM_GET_PROBLEM_INFO]

• SICONOS_FRICTION_3D_ADMM_GET_PROBLEM_INFO_NO (default)

• SICONOS_FRICTION_3D_ADMM_GET_PROBLEM_INFO_YES

• iparam[SICONOS_FRICTION_3D_ADMM_IPARAM_FULL_H] = SICONOS_FRICTION_3D_ADMM_FULL_H_NO;

• iparam[SICONOS_FRICTION_3D_ADMM_IPARAM_UPDATE_S] = SICONOS_FRICTION_3D_ADMM_UPDATE_S_YES;

• iparam[SICONOS_FRICTION_3D_IPARAM_RESCALING]

• SICONOS_FRICTION_3D_RESCALING_NO (default)

• SICONOS_FRICTION_3D_RESCALING_SCALAR,

• SICONOS_FRICTION_3D_RESCALING_BALANCING_M,

• SICONOS_FRICTION_3D_RESCALING_BALANCING_MH

• iparam[SICONOS_FRICTION_3D_IPARAM_RESCALING_CONE]=SICONOS_FRICTION_3D_RESCALING_CONE_NO;

• dparam[SICONOS_DPARAM_TOL] = 1e-6;

• dparam[SICONOS_FRICTION_3D_ADMM_RHO] = 0.1;

• dparam[SICONOS_FRICTION_3D_ADMM_RESTART_ETA] = 0.999;

• dparam[SICONOS_FRICTION_3D_ADMM_BALANCING_RESIDUAL_TAU] = 2.

• dparam[SICONOS_FRICTION_3D_ADMM_BALANCING_RESIDUAL_PHI] = 10.;

#### Solvers with reformulation#

All solvers with id ending with ‘_WR’ (which stands for With Reformulation) starts with a reformulation of the global problem into a local one, which is solved with one of the fc3d solvers.

### NSGS, with reformulation (SICONOS_GLOBAL_FRICTION_3D_NSGS_WR)#

Non-Smooth Gauss Seidel solver with reformulation.

Driver: gfc3d_nsgs_wr()

Parameters: same as :enumerate:SICONOS_FRICTION_3D_NSGS.

### NSGS, velocity, with reformulation (SICONOS_GLOBAL_FRICTION_3D_NSGS_WR)#

Non-Smooth Gauss Seidel solver with reformulation.

Parameters: same as :enumerate:SICONOS_FRICTION_3D_NSGSV.

### Proximal point, with reformulation (SICONOS_GLOBAL_FRICTION_3D_PROX_WR)#

Parameters: same as :enumerate:SICONOS_FRICTION_3D_PROX.

### DeSaxce FixedPoint, with reformulation (SICONOS_GLOBAL_FRICTION_3D_DSFP_WR)#

Parameters: same as :enumerate:SICONOS_FRICTION_3D_DSFP.

### Tresca FixedPoint, with reformulation (SICONOS_GLOBAL_FRICTION_3D_TFP_WR)#

Parameters: same as :enumerate:SICONOS_FRICTION_3D_TFP.

### Nonsmooth Newton, Alart-Curnier, with reformulation (SICONOS_GLOBAL_FRICTION_3D_NSN_AC_WR)#

Parameters: same as :enumerate:SICONOS_FRICTION_3D_NSN_AC.

### ADMM, with reformulation (SICONOS_GLOBAL_FRICTION_3D_ADMM_WR)#

Driver: gfc3d_admm_wr()

Parameters: same as :enumerate:SICONOS_FRICTION_3D_ADMM.