Friction-contact problems (2 or 3D)#

Problem statement#

Given

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

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

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

the (reduced or dual) frictional contact problem is to find two vectors \(u\in{{\mathrm{I\!R}}}^n\) , the relative local velocity and \(r\in {{\mathrm{I\!R}}}^n\) , the contact forces denoted by \(\mathrm{FC}(M,q,\mu)\) such that

\[\begin{split}\begin{eqnarray*} \begin{cases} u = M r + q \\ \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 :math:`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: FrictionContactProblem.

Solvers list FRICTION_SOLVER

The generic drivers for friction-contact problems are:

For details regarding global formulation and rolling-friction problems, see Global-Friction-contact problems (2D or 3D) or Rolling friction-contact problems.

Error strategy#

To set internal solver tolerance (when it makes sense!) use one of the following functions :

fc3d_set_internalsolver_tolerance(), gfc3d_set_internalsolver_tolerance(), rolling_fc3d_set_internalsolver_tolerance()

The computation of the tolerance depends on the value of iparam[SICONOS_FRICTION_3D_IPARAM_INTERNAL_ERROR_STRATEGY].

It can be:

  • SICONOS_FRICTION_3D_INTERNAL_ERROR_STRATEGY_ADAPTIVE

    internal solver tolerance = error/dparam[SICONOS_FRICTION_3D_DPARAM_INTERNAL_ERROR_RATIO]

  • SICONOS_FRICTION_3D_INTERNAL_ERROR_STRATEGY_ADAPTIVE_N_CONTACT

    internal solver tolerance = error/dparam[SICONOS_FRICTION_3D_DPARAM_INTERNAL_ERROR_RATIO] * number of contacts

  • SICONOS_FRICTION_3D_INTERNAL_ERROR_STRATEGY_GIVEN_VALUE

    internal solver tolerance = value provided during initialisation of the local solver.

Warning : iparam[SICONOS_FRICTION_3D_IPARAM_INTERNAL_ERROR_STRATEGY] and dparam[SICONOS_FRICTION_3D_DPARAM_INTERNAL_ERROR_RATIO] must be set properly for all solvers that are using Xfc3d_set_internal_tolerance function.

Friction 2D available solvers#

Nonsmooth Gauss-Seidel (SICONOS_FRICTION_2D_NSGS)#

direct solver for LCP based on pivoting method principle for degenerate problem: the choice of pivot variable is performed via lexicographic ordering.

Driver: fc2d_nsgs()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 1000

  • iparam[SICONOS_IPARAM_NSGS_SHUFFLE] = 0

  • iparam[SICONOS_FRICTION_3D_IPARAM_ERROR_EVALUATION] = SICONOS_FRICTION_3D_NSGS_ERROR_EVALUATION_LIGHT_WITH_FULL_FINAL;

  • dparam[SICONOS_DPARAM_TOL] = 1e-4

Conjugated projected gradient (SICONOS_FRICTION_2D_CPG)#

Driver: fc2d_cpg()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 1000

  • dparam[SICONOS_DPARAM_TOL] = 1e-4

Lemke solver (SICONOS_FRICTION_2D_LEMKE)#

Convert friction problem into a LCP and solve it using Lemke solver.

Driver: fc2d_lemke()

Parameters: same as SICONOS_LCP_LEMKE, see LCP available solvers.

Enumerative solver (SICONOS_FRICTION_2D_ENUM)#

Convert friction problem into a LCP and solve it using enumerative solver.

Driver: fc2d_enum()

Parameters: same as SICONOS_LCP_ENUM, see LCP available solvers.

Friction 3D available solvers#

Nonsmooth Gauss-Seidel (SICONOS_FRICTION_3D_NSGS)#

Driver: fc3d_nsgs()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 1000 : Maximum iteration number

  • iparam[SICONOS_FRICTION_3D_IPARAM_ERROR_EVALUATION] : error computation method,

    • SICONOS_FRICTION_3D_NSGS_ERROR_EVALUATION_FULL : Full error computation with velocity computation

    • SICONOS_FRICTION_3D_NSGS_ERROR_EVALUATION_LIGHT_WITH_FULL_FINAL (DEFAULT): Light error computation with incremental values on reaction verification of absolute error at the end

    • SICONOS_FRICTION_3D_NSGS_ERROR_EVALUATION_LIGHT : only light error computation (velocity not computed)

    • SICONOS_FRICTION_3D_NSGS_ERROR_EVALUATION_ADAPTIVE : we adapt the frequency of the full erro evaluation.

  • iparam[SICONOS_FRICTION_3D_IPARAM_ERROR_EVALUATION_FREQUENCY] = 0, error computation frequency

  • iparam[SICONOS_FRICTION_3D_IPARAM_INTERNAL_ERROR_STRATEGY] = SICONOS_FRICTION_3D_INTERNAL_ERROR_STRATEGY_GIVEN_VALUE

  • iparam[SICONOS_FRICTION_3D_NSGS_SHUFFLE] : shuffle the contact indices in the loop

    • SICONOS_FRICTION_3D_NSGS_SHUFFLE_FALSE : no shuffle

    • SICONOS_FRICTION_3D_NSGS_SHUFFLE_TRUE : shuffle only at the beginning

    • SICONOS_FRICTION_3D_NSGS_SHUFFLE_TRUE_EACH_LOOP : shuffle in each iteration

  • iparam[SICONOS_FRICTION_3D_NSGS_SHUFFLE_SEED] = 0 : seed for the random generator in shuffling contacts

  • iparam[SICONOS_FRICTION_3D_NSGS_FILTER_LOCAL_SOLUTION] : filter local solution if the local error is greater than 1.0

    • SICONOS_FRICTION_3D_NSGS_FILTER_LOCAL_SOLUTION_FALSE (default) the filter is not applied

    • SICONOS_FRICTION_3D_NSGS_FILTER_LOCAL_SOLUTION_TRUE the filter is applied

  • iparam[SICONOS_FRICTION_3D_NSGS_RELAXATION] : method uses overrelaxation

    • SICONOS_FRICTION_3D_NSGS_RELAXATION_FALSE (default) relaxation is not used,

    • SICONOS_FRICTION_3D_NSGS_RELAXATION_TRUE relaxation is used with parameter dparam[8],

  • dparam[SICONOS_DPARAM_TOL] = 1e-4, user tolerance on the loop

  • dparam[SICONOS_FRICTION_3D_DPARAM_INTERNAL_ERROR_RATIO] = 10.0

  • dparam[SICONOS_FRICTION_3D_NSGS_RELAXATION_VALUE] the relaxation parameter omega

out

  • iparam[SICONOS_IPARAM_ITER_DONE] = iter number of performed iterations

  • dparam[SICONOS_DPARAM_RESIDU] reached error

Default internal solver : SICONOS_FRICTION_3D_ONECONTACT_NSN_GP_HYBRID.

Nonsmooth Gauss-Seidel, velocity version (SICONOS_FRICTION_3D_NSGSV)#

Driver: fc3d_nsgs_velocity()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 1000 : Maximum iteration number

  • dparam[SICONOS_DPARAM_TOL] = 1e-4, user tolerance on the loop

out

  • iparam[7] as number of performed iterations

dparam[SICONOS_DPARAM_RESIDU(1)] reached error

Default internal solver : SICONOS_FRICTION_3D_ONECONTACT_NSN.

Proximal point solver (SICONOS_FRICTION_3D_PROX)#

Driver: fc3d_proximal()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 1000 : Maximum iteration number

  • iparam[SICONOS_FRICTION_3D_PROXIMAL_IPARAM_STRATEGY]

    • SICONOS_FRICTION_3D_PROXIMAL_REGULARIZATION)

    • SICONOS_FRICTION_3D_PROXIMAL_PROX (default)

  • iparam[SICONOS_FRICTION_3D_IPARAM_INTERNAL_ERROR_STRATEGY] = SICONOS_FRICTION_3D_INTERNAL_ERROR_STRATEGY_GIVEN_VALUE

  • dparam[SICONOS_FRICTION_3D_DPARAM_INTERNAL_ERROR_RATIO] = 10.0

  • dparam[SICONOS_DPARAM_TOL] = 1e-4, user tolerance on the loop

  • dparam[SICONOS_FRICTION_3D_PROXIMAL_DPARAM_ALPHA] = 1e4

  • dparam[SICONOS_FRICTION_3D_PROXIMAL_DPARAM_SIGMA] = 5.

  • dparam[SICONOS_FRICTION_3D_PROXIMAL_DPARAM_NU] = 1.

out

iparam[SICONOS_FRICTION_3D_PROXIMAL_IPARAM_CUMULATIVE_ITER_DONE]

Default internal solver : SICONOS_FRICTION_3D_NSN_AC.

Fixed-point (Tresca) (SICONOS_FRICTION_3D_TFP)#

Fixed point solver for friction-contact 3D problem based on the Tresca

problem with fixed friction threshold

Driver: fc3d_TrescaFixedPoint()

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

  • dparam[SICONOS_FRICTION_3D_DPARAM_INTERNAL_ERROR_RATIO] =10.0;

Default internal solver : SICONOS_FRICTION_3D_NSGS with SICONOS_FRICTION_3D_ONECONTACT_ProjectionOnCylinderWithLocalIteration as internal solver.

Nonsmooth Newton/ Alart-Curnier (SICONOS_FRICTION_3D_NSN_AC)#

Driver: fc3d_nonsmooth_Newton_AlartCurnier()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 200;

  • iparam[SICONOS_FRICTION_3D_NSN_FORMULATION]

    • SICONOS_FRICTION_3D_NSN_FORMULATION_ALARTCURNIER_STD

    • SICONOS_FRICTION_3D_NSN_FORMULATION_JEANMOREAU_STD

    • SICONOS_FRICTION_3D_NSN_FORMULATION_ALARTCURNIER_GENERATED, (default)

    • SICONOS_FRICTION_3D_NSN_FORMULATION_JEANMOREAU_GENERATED

    • SICONOS_FRICTION_3D_NSN_FORMULATION_NULL

  • iparam[SICONOS_FRICTION_3D_NSN_HYBRID_STRATEGY]

    • SICONOS_FRICTION_3D_NSN_HYBRID_STRATEGY_NO (default)

    • SICONOS_FRICTION_3D_NSN_HYBRID_STRATEGY_PLI_NSN_LOOP : Loop PLI-NSN strategy

    • SICONOS_FRICTION_3D_NSN_HYBRID_STRATEGY_NSN_AND_PLI_NSN_LOOP : NSN and after Loop PLI-NSN strategy for the hybrid solver

    • SICONOS_FRICTION_3D_NSN_HYBRID_STRATEGY_VI_EG_NSN : VI_EG preconditionning to NSN

  • iparam[3] = 100000; /* nzmax*/

  • iparam[5] = 1;

  • iparam[SICONOS_FRICTION_3D_NSN_RHO_STRATEGY]

    • SICONOS_FRICTION_3D_NSN_FORMULATION_RHO_STRATEGY_CONSTANT : uses constant value (dparam[SICONOS_FRICTION_3D_NSN_RHO]) for rho

    • SICONOS_FRICTION_3D_NSN_FORMULATION_RHO_STRATEGY_SPECTRAL_NORM

    • SICONOS_FRICTION_3D_NSN_FORMULATION_RHO_STRATEGY_SPLIT_SPECTRAL_NORM_COND

    • SICONOS_FRICTION_3D_NSN_FORMULATION_RHO_STRATEGY_SPLIT_SPECTRAL_NORM

    • SICONOS_FRICTION_3D_NSN_FORMULATION_RHO_STRATEGY_ADAPTIVE

  • iparam[SICONOS_FRICTION_3D_NSN_MPI_COM] = -1, mpi com fortran

  • iparam[SICONOS_FRICTION_3D_NSN_LINEAR_SOLVER] Linear solver used at each Newton iteration * SICONOS_FRICTION_3D_NSN_USE_CSLUSOL * SICONOS_FRICTION_3D_NSN_USE_MUMPS

  • iparam[SICONOS_FRICTION_3D_IPARAM_ERROR_EVALUATION_FREQUENCY] = 1; (must be > 0 !)

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

  • dparam[SICONOS_DPARAM_TOL] = 1e-3

  • dparam[SICONOS_FRICTION_3D_NSN_RHO] = 1

Nonsmooth Newton/ Alart-Curnier (test) (SICONOS_FRICTION_3D_NSN_AC_TEST)#

Driver: fc3d_nonsmooth_Newton_AlartCurnier2()

  • 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_IPARAM_LSA_SEARCH_CRITERION] = SICONOS_LSA_GOLDSTEIN;

  • iparam[SICONOS_FRICTION_3D_NSN_HYBRID_STRATEGY]

  • optionsiparam[SICONOS_IPARAM_MAX_ITER] = 1000;

  • optionsdparam[SICONOS_DPARAM_TOL] = 1e-10;

  • iparam[SICONOS_IPARAM_LSA_NONMONOTONE_LS] = 0;

  • iparam[SICONOS_IPARAM_LSA_NONMONOTONE_LS_M] = 0;

  • dparam[SICONOS_DPARAM_LSA_ALPHA_MIN] = 1e-16;

  • dparam[SICONOS_IPARAM_STOPPING_CRITERION] = SICONOS_STOPPING_CRITERION_RESIDU;

Fixed-Point (De Saxce formulation) (SICONOS_FRICTION_3D_DSFP)#

Driver: fc3d_DeSaxceFixedPoint()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 20000;

  • dparam[SICONOS_DPARAM_TOL] = 1e-3;

  • dparam[SICONOS_FRICTION_3D_NSN_RHO] = 1.;

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

Driver: fc3d_VI_FixedPointProjection()

Parameters: same as SICONOS_VI_FPP, see VI Available solvers.

Fixed-Point projection on cylinder (VI reformulation) (SICONOS_FRICTION_3D_VI_FPP_Cylinder)#

Driver: fc3d_VI_FixedPointProjection_Cylinder()

Parameters: same as SICONOS_VI_FPP, see VI Available solvers.

Extra Gradient (VI reformulation) (SICONOS_FRICTION_3D_VI_EG)#

Driver: fc3d_VI_ExtraGradient()

Parameters: same as SICONOS_VI_EG, see VI Available solvers.

Hyperplane Projection (SICONOS_FRICTION_3D_HP)#

Driver: fc3d_HyperplaneProjection()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 20000;

  • iparam[SICONOS_FRICTION_3D_NSN_LINESEARCH_MAX_ITER] = 50.;

  • dparam[SICONOS_DPARAM_TOL] = 1e-3;

  • dparam[SICONOS_FRICTION_3D_PROXIMAL_DPARAM_SIGMA] = 0.99

Fixed-Point projection (SICONOS_FRICTION_3D_FPP)#

Driver: fc3d_fixedPointProjection()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 20000;

  • dparam[SICONOS_DPARAM_TOL] = 1e-3;

  • dparam[SICONOS_FRICTION_3D_NSN_RHO] = 1.;

Extra Gradient (SICONOS_FRICTION_3D_EG)#

Driver: fc3d_ExtraGradient()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 20000;

  • dparam[SICONOS_DPARAM_TOL] = 1e-3;

  • dparam[SICONOS_FRICTION_3D_NSN_RHO] = -1.;

Nonsmooth Newton (Fischer-Burmeister formulation) (SICONOS_FRICTION_3D_NSN_FB)#

Driver: fc3d_nonsmooth_Newton_FischerBurmeister()

Parameters:

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

  • iparam[SICONOS_FRICTION_3D_IPARAM_ERROR_EVALUATION_FREQUENCY] = 1; (must be > 0 !)

  • dparam[SICONOS_DPARAM_TOL] = 1e-3;

  • dparam[SICONOS_FRICTION_3D_NSN_RHO] = 1.;

PATH (via GAMS) + AVI reformulation (SICONOS_FRICTION_3D_GAMS_PATH)#

solver using PATH (via GAMS) for friction-contact 3D problem based on an AVI reformulation

Driver: fc3d_AVI_gams_path()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 10000;

  • dparam[SICONOS_DPARAM_TOL] = 1e-9;

out

  • dparam[TOTAL_TIME_USED]

  • iparam[TOTAL_ITER]

  • iparam[LAST_MODEL_STATUS]

  • iparam[LAST_SOLVE_STATUS]

PATHVI (via GAMS) + AVI reformulation SICONOS_FRICTION_3D_GAMS_PATHVI)#

solver using PATHVI (via GAMS) for friction-contact 3D problem based on an AVI reformulation

Driver: fc3d_AVI_gams_pathvi()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 10000;

  • dparam[SICONOS_DPARAM_TOL] = 1e-9;

out

  • dparam[TOTAL_TIME_USED]

  • iparam[TOTAL_ITER]

  • iparam[LAST_MODEL_STATUS]

  • iparam[LAST_SOLVE_STATUS]

ACLM Fixed-Point (SICONOS_FRICTION_3D_ACLMFP)


Driver: fc3d_ACLMFixedPoint()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 1000;

  • iparam[SICONOS_FRICTION_3D_IPARAM_INTERNAL_ERROR_STRATEGY] = SICONOS_FRICTION_3D_INTERNAL_ERROR_STRATEGY_GIVEN_VALUE

  • dparam[SICONOS_DPARAM_TOL] = 1e-4;

  • dparam[SICONOS_FRICTION_3D_DPARAM_INTERNAL_ERROR_RATIO] = 10.0

Internal solver: SICONOS_SOCLCP_NSGS, see SOCLCP available solvers.

Nonsmooth Gauss-Seidel (SICONOS_FRICTION_3D_SOCLCP)#

Driver: fc3d_SOCLCP()

Parameters: same as SICONOS_SOCLCP_NSGS, see : ref:soclcp_solvers.

PATH (via GAMS) + LCP reformulation (SICONOS_FRICTION_3D_GAMS_LCP_PATH)#

solver using PATH (via GAMS) for friction-contact 3D problem based on an LCP reformulation

Driver: fc3d_lcp_gams_path()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 10000;

  • dparam[SICONOS_DPARAM_TOL] = 1e-9;

PATHVI (via GAMS) + LCP reformulation SICONOS_FRICTION_3D_GAMS_LCP_PATHVI)#

solver using PATHVI (via GAMS) for friction-contact 3D problem based on an LCP reformulation

Driver: fc3d_lcp_gams_pathvi()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 10000;

  • dparam[SICONOS_DPARAM_TOL] = 1e-9;

Nonsmooth Newton, Natural Map (SICONOS_FRICTION_3D_NSN_NM)#

Nonsmooth Newton solver based on the Natural–Map function for the local (reduced) frictional contact problem in the dense form.

Driver: fc3d_nonsmooth_Newton_NaturalMap()

Parameters:

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

  • iparam[SICONOS_FRICTION_3D_IPARAM_ERROR_EVALUATION_FREQUENCY] = 1;

  • dparam[SICONOS_DPARAM_TOL] = 1e-3;

  • dparam[SICONOS_FRICTION_3D_NSN_RHO] = 1.;

Fixed point, Panagiotopoulos (SICONOS_FRICTION_3D_PFP)#

Fixed point solver for friction-contact 3D problem based on the Panagiotopoulos method based on an alternative technique between the normal problem and the tangential one.

Driver: fc3d_Panagiotopoulos_FixedPoint()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 200;

  • 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] =10.0;

Two internal solvers: SICONOS_LCP_PGS and SICONOS_CONVEXQP_VI_FPP.

ADMM (SICONOS_FRICTION_3D_ADMM)#

Solver based on ADMM method.

Driver: fc3d_admm()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 20000;

  • iparam[SICONOS_FRICTION_3D_ADMM_IPARAM_SYMMETRY]

    • SICONOS_FRICTION_3D_ADMM_FORCED_SYMMETRY (default)

    • SICONOS_FRICTION_3D_ADMM_FORCED_ASYMMETRY

    • SICONOS_FRICTION_3D_ADMM_CHECK_SYMMETRY

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

  • dparam[SICONOS_FRICTION_3D_ADMM_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_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

  • dparam[SICONOS_DPARAM_TOL] = 1e-6;

  • dparam[SICONOS_FRICTION_3D_ADMM_RHO] = 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] = 2.;

“One contact” solvers#

Newton(SICONOS_FRICTION_3D_ONECONTACT_NSN, …)#

Driver: fc3d_onecontact_nonsmooth_Newton_solvers_solve()

which switches to one of the local drivers below:

Projection on cone solvers#

Solver id

Driver

SICONOS_FRICTION_3D_ONECONTACT_NSN

fc3d_onecontact_nonsmooth_Newton_solvers_solve_direc()

SICONOS_FRICTION_3D_ONECONTACT_NSN_GP

fc3d_onecontact_nonsmooth_Newton_solvers_solve_dampe()

SICONOS_FRICTION_3D_ONECONTACT_NSN_GP_HYBRID

fc3d_onecontact_nonsmooth_Newton_solvers_solve_hybrid()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 10

  • iparam[SICONOS_FRICTION_3D_CURRENT_CONTACT_NUMBER]

  • 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_RHO_STRATEGY]

    • SICONOS_FRICTION_3D_NSN_FORMULATION_RHO_STRATEGY_CONSTANT : uses constant value (dparam[SICONOS_FRICTION_3D_NSN_RHO]) for rho

    • SICONOS_FRICTION_3D_NSN_FORMULATION_RHO_STRATEGY_SPECTRAL_NORM

    • SICONOS_FRICTION_3D_NSN_FORMULATION_RHO_STRATEGY_SPLIT_SPECTRAL_NORM_COND (default for NSN)

    • SICONOS_FRICTION_3D_NSN_FORMULATION_RHO_STRATEGY_SPLIT_SPECTRAL_NORM (default for NSN_GP and NSN_GP_HYBRID)

    • SICONOS_FRICTION_3D_NSN_FORMULATION_RHO_STRATEGY_ADAPTIVE

  • iparam[SICONOS_FRICTION_3D_NSN_LINESEARCH]

    • SICONOS_FRICTION_3D_NSN_LINESEARCH_GOLDSTEINPRICE (default for NSN_GP and NSN_GP_HYBRID)

    • SICONOS_FRICTION_3D_NSN_LINESEARCH_ARMIJO

    • SICONOS_FRICTION_3D_NSN_LINESEARCH_NO (default for NSN)

  • iparam[SICONOS_FRICTION_3D_NSN_LINESEARCH_MAX_ITER] = 10;

  • iparam[SICONOS_FRICTION_3D_NSN_HYBRID_STRATEGY]

    • SICONOS_FRICTION_3D_NSN_HYBRID_STRATEGY_NO

    • SICONOS_FRICTION_3D_NSN_HYBRID_STRATEGY_PLI_NSN_LOOP (default for NSN)

    • SICONOS_FRICTION_3D_NSN_HYBRID_STRATEGY_NSN_AND_PLI_NSN_LOOP (default for NSN_GP and NSP_GP_HYBRID)

    • SICONOS_FRICTION_3D_NSN_HYBRID_STRATEGY_VI_EG_NSN

  • iparam[SICONOS_FRICTION_3D_NSN_HYBRID_MAX_LOOP] = 1;

  • iparam[SICONOS_FRICTION_3D_NSN_HYBRID_MAX_ITER] = 10 (for NSN), 100 (for NSN_GP and NSN_GP_HYBRID);

  • dparam[SICONOS_DPARAM_TOL] =1e-14;

  • dparam[SICONOS_FRICTION_3D_NSN_RHO] =1.0;

Projection on cone or cylinder (SICONOS_FRICTION_3D_ONECONTACT_ProjectionOnCone, …)#

Projection on cone solvers#

Solver id

Driver

SICONOS_FRICTION_3D_ONECONTACT_ProjectionOnCone

fc3d_projectionOnCone_solve()

SICONOS_FRICTION_3D_ONECONTACT_ProjectionOnConeWithRegularization

fc3d_projectionOnCone_solve()

SICONOS_FRICTION_3D_ONECONTACT_ProjectionOnConeWithLocalIteration

fc3d_projectionOnConeWithLocalIteration_solve()

SICONOS_FRICTION_3D_ONECONTACT_ProjectionOnConeWithDiagonalization

fc3d_projectionOnConeWithDiagonalization_solve()

SICONOS_FRICTION_3D_ONECONTACT_ProjectionOnCone_velocity

fc3d_projectionOnCone_velocity_solve()

SICONOS_FRICTION_3D_ONECONTACT_ProjectionOnCylinder

fc3d_projectionOnCylinder_solve()

SICONOS_FRICTION_3D_ONECONTACT_ProjectionOnProjectionOnCylinderWithLocalIteration

fc3d_projectionOnCylinderWithLocalIteration_solve()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 1000

  • iparam[SICONOS_FRICTION_3D_CURRENT_CONTACT_NUMBER]

  • dparam[SICONOS_DPARAM_TOL] =1e-14

  • dparam[SICONOS_FRICTION_3D_NSN_RHO] = 1., used only in the ‘with regularization’ case

NCP Fixed Point solver (SICONOS_FRICTION_3D_NCPGlockerFBFixedPoint, …)#

NCP Fixed-point solvers#

Solver id

Driver

Update

SICONOS_FRICTION_3D_NCPGlockerFBFixedPoint

fc3d_FixedP_solve()

NCPGlocker_update()

SICONOS_FRICTION_3D_NCPGlockerFBNewton

fc3d_onecontact_nonsmooth_Newton_solvers_solve()

NCPGlocker_update()

SICONOS_FRICTION_3D_NCPGlockerFBPATH

fc3d_Path_solve()

NCPGlocker_update()

Parameters:

  • iparam[SICONOS_IPARAM_MAX_ITER] = 1000

  • dparam[SICONOS_DPARAM_TOL] =1e-12

Quartic (SICONOS_FRICTION_3D_ONECONTACT_QUARTIC, …)#

ids : SICONOS_FRICTION_3D_ONECONTACT_QUARTIC, SICONOS_FRICTION_3D_ONECONTACT_QUARTIC_NU

Driver: fc3d_unitary_enumerative()

Parameters:

  • dparam[SICONOS_DPARAM_TOL] =1e-12

As Convex QP (SICONOS_FRICTION_3D_CONVEXQP_CYLINDER)#

Reformulate the problem as a convex QP and solve using SICONOS_CONVEXQP_PG.

Driver: fc3d_ConvexQP_ProjectedGradient_Cylinder()

Parameters: same as SICONOS_CONVEXQP_PG, see :ref:`convex_qp_solvers.