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 :
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
can be interpreted in a more usual form
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
)#
Driver: gfc3d_nonsmooth_Newton_AlartCurnier_wr()
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
)#
Driver: gfc3d_AVI_gams_path()
Parameters: same as :enumerate:`SICONOS_FRICTION_3D_GAMS_PATH`.
PATHVI (GAMS) (SICONOS_GLOBAL_FRICTION_3D_GAMS_PATHVI
)#
Driver: gfc3d_AVI_gams_pathvi()
Parameters: same as :enumerate:`SICONOS_FRICTION_3D_GAMS_PATHVI`.
Fixed-Point projection (VI reformulation) (SICONOS_GLOBAL_FRICTION_3D_VI_FPP
)#
Driver: gfc3d_VI_FixedPointProjection()
Parameters: same as :enumerate:`SICONOS_FRICTION_3D_VI_FPP`.
Extra-Gradient (VI reformulation) (SICONOS_GLOBAL_FRICTION_3D_VI_EG
)#
Driver: gfc3d_VI_ExtraGradient()
Parameters: same as :enumerate:`SICONOS_FRICTION_3D_VI_EG`.
ACLM Fixed point (SICONOS_GLOBAL_FRICTION_3D_ACLMFP
)#
Driver: gfc3d_ACLMFixedPoint()
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.
Driver: gfc3d_nsgs_velocity_wr()
Parameters: same as :enumerate:`SICONOS_FRICTION_3D_NSGSV`.
Proximal point, with reformulation (SICONOS_GLOBAL_FRICTION_3D_PROX_WR
)#
Driver: gfc3d_proximal_wr()
Parameters: same as :enumerate:`SICONOS_FRICTION_3D_PROX`.
DeSaxce FixedPoint, with reformulation (SICONOS_GLOBAL_FRICTION_3D_DSFP_WR
)#
Driver: gfc3d_DeSaxceFixedPoint_wr()
Parameters: same as :enumerate:`SICONOS_FRICTION_3D_DSFP`.
Tresca FixedPoint, with reformulation (SICONOS_GLOBAL_FRICTION_3D_TFP_WR
)#
Driver: gfc3d_TrescaFixedPoint_wr()
Parameters: same as :enumerate:`SICONOS_FRICTION_3D_TFP`.
Nonsmooth Newton, Alart-Curnier, with reformulation (SICONOS_GLOBAL_FRICTION_3D_NSN_AC_WR
)#
Driver: gfc3d_nonsmooth_Newton_AlartCurnier_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`.