File numerics/src/FrictionContact/gfc3d_Solvers.h#

Go to the source code of this file

Subroutines for the resolution of contact problems with friction (3-dimensional case).

Typedefs

typedef void (*SolverGlobalPtr)(int, int, double*, int*, double*)#
typedef void (*PostSolverGlobalPtr)(int, double*)#
typedef void (*FreeSolverGlobalPtr)(GlobalFrictionContactProblem*)#
typedef void (*ComputeErrorGlobalPtr)(GlobalFrictionContactProblem*, double*, double*, double*, double, SolverOptions*, double, double, double*)#

pointer to function used to update velocity and compute error

Functions

void gfc3d_set_internalsolver_tolerance(GlobalFrictionContactProblem *problem, SolverOptions *options, SolverOptions *internalsolver_options, double error)#
int gfc3d_checkTrivialCaseGlobal(int dim, double *q, double *velocity, double *reaction, double *globalVelocity, SolverOptions *options)#

Check for trivial solution in the friction-contact 3D problem.

Parameters:
  • dim – of the problem

  • q – global vector (n)

  • velocity – global vector (n), in-out parameter

  • reaction – global vector (n), in-out parameters

  • globalVelocity – the velocity in global coordinates

  • options – the pointer to the array of options to set

Returns:

int =0 if a trivial solution has been found, else = -1

void gfc3d_nsgs_wr(GlobalFrictionContactProblem *problem, double *reaction, double *velocity, double *globalVelocity, int *info, SolverOptions *options)#

Non-Smooth Gauss Seidel solver with reformulation for friction-contact 3D problem.

Parameters:
  • problem – the friction-contact 3D problem to solve

  • velocity – global vector (n), in-out parameter

  • reaction – global vector (n), in-out parameters

  • globalVelocity – global vector (m), in-out parameters

  • info – return 0 if the solution is found

  • options – the solver options : iparam[0] : Maximum iteration number iparam[4] : localsolver choice

    • 0: projection on Cone,

    • 1: Newton/AlartCurnier,

    • 2: projection on Cone with local iteration, dparam[0] : tolerance dparam[2] : localtolerance dparam[1] : (out) error

void gfc3d_admm_wr(GlobalFrictionContactProblem *problem, double *reaction, double *velocity, double *globalVelocity, int *info, SolverOptions *options)#
void gfc3d_nonsmooth_Newton_AlartCurnier_wr(GlobalFrictionContactProblem *problem, double *reaction, double *velocity, double *globalVelocity, int *info, SolverOptions *options)#
void gfc3d_proximal_wr(GlobalFrictionContactProblem *problem, double *reaction, double *velocity, double *globalVelocity, int *info, SolverOptions *options)#

Proximal point solver with reformulation for friction-contact 3D problem.

Parameters:
  • problem – the friction-contact 3D problem to solve

  • velocity – global vector (n), in-out parameter

  • reaction – global vector (n), in-out parameters

  • globalVelocity – global vector (m), in-out parameters

  • info – return 0 if the solution is found

  • options – the solver options : iparam[0] : Maximum iteration number iparam[4] : localsolver choice 0: projection on Cone, 1: Newton/AlartCurnier, 2: projection on Cone with local iteration, 2: projection on Disk with diagonalization, dparam[0] : tolerance dparam[2] : localtolerance dparam[1] : (out) error

void gfc3d_DeSaxceFixedPoint_wr(GlobalFrictionContactProblem *problem, double *reaction, double *velocity, double *globalVelocity, int *info, SolverOptions *options)#

Fixed Point iteration on De Saxe formulation solver with reformulation for friction-contact 3D problem.

Parameters:
  • problem – the friction-contact 3D problem to solve

  • velocity – global vector (n), in-out parameter

  • reaction – global vector (n), in-out parameters

  • globalVelocity – global vector (m), in-out parameters

  • info – return 0 if the solution is found

  • options – the solver options : iparam[0] : Maximum iteration number dparam[0] : tolerance dparam[2] : localtolerance dparam[1] : (out) error

void gfc3d_TrescaFixedPoint_wr(GlobalFrictionContactProblem *problem, double *reaction, double *velocity, double *globalVelocity, int *info, SolverOptions *options)#

Fixed Point iteration on Tresca Friction Cylinder with reformulation for friction-contact 3D problem.

Parameters:
  • problem – the friction-contact 3D problem to solve

  • velocity – global vector (n), in-out parameter

  • reaction – global vector (n), in-out parameters

  • globalVelocity – global vector (m), in-out parameters

  • info – return 0 if the solution is found

  • options – the solver options : iparam[0] : Maximum iteration number dparam[0] : tolerance dparam[2] : localtolerance dparam[1] : (out) error

void gfc3d_nsgs_velocity_wr(GlobalFrictionContactProblem *problem, double *reaction, double *velocity, double *globalVelocity, int *info, SolverOptions *options)#

Non-Smooth Gauss Seidel solver for friction-contact 3D problem with iteration on velocities.

Parameters:
  • problem – the friction-contact 3D problem to solve

  • velocity – global vector (n), in-out parameter

  • reaction – global vector (n), in-out parameters

  • globalVelocity – global vector (m), in-out parameters

  • info – return 0 if the solution is found

  • options – the solver options : iparam[0] : Maximum iteration number dparam[0] : tolerance dparam[2] : localtolerance dparam[1] : (out) error

void gfc3d_nsgs(GlobalFrictionContactProblem *problem, double *reaction, double *velocity, double *globalVelocity, int *info, SolverOptions *options)#

Non-Smooth Gauss Seidel solver for friction-contact 3D problem.

Todo:

Implement ProdTransSBM

Improve the splitting Algorithm with a smaller granularity

Use a global projection perhaps

Parameters:
  • problem – the friction-contact 3D problem to solve

  • velocity – global vector (n), in-out parameter

  • reaction – global vector (n), in-out parameters

  • globalVelocity – global vector (m), in-out parameters

  • info – return 0 if the solution is found

  • options – the solver options : iparam[0] : Maximum iteration number iparam[4] ; local strategy dparam[0] : tolerance dparam[2] : localtolerance dparam[1] : (out) error

void gfc3d_ACLMFixedPoint(GlobalFrictionContactProblem *problem, double *reaction, double *velocity, double *globalVelocity, int *info, SolverOptions *options)#

Solver based on the fixed-point iteration proposed by Cadoux for friction-contact 3D problem.

Parameters:
  • problem – the friction-contact 3D problem to solve

  • velocity – global vector (n), in-out parameter

  • reaction – global vector (n), in-out parameters

  • globalVelocity – global vector (m), in-out parameters

  • info – return 0 if the solution is found

  • options – the solver options : iparam[0] : Maximum iteration number iparam[4] ; local strategy dparam[0] : tolerance dparam[2] : localtolerance dparam[1] : (out) error

void gfc3d_AVI_gams_path(GlobalFrictionContactProblem *problem, double *reaction, double *velocity, int *info, SolverOptions *options)#

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

Parameters:
  • problem – the friction-contact 3D problem to solve

  • velocity – global vector (n), in-out parameter

  • reaction – global vector (n), in-out parameters

  • info – return 0 if the solution is found

  • options – the solver options

void gfc3d_AVI_gams_pathvi(GlobalFrictionContactProblem *problem, double *reaction, double *velocity, int *info, SolverOptions *options)#

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

Parameters:
  • problem – the friction-contact 3D problem to solve

  • velocity – global vector (n), in-out parameter

  • reaction – global vector (n), in-out parameters

  • info – return 0 if the solution is found

  • options – the solver options

void gfc3d_nonsmooth_Newton_AlartCurnier(GlobalFrictionContactProblem *problem, double *reaction, double *velocity, double *globalVelocity, int *info, SolverOptions *options)#
void gfc3d_VI_ExtraGradient(GlobalFrictionContactProblem *problem, double *reaction, double *velocity, double *globalVelocity, int *info, SolverOptions *options)#
void gfc3d_VI_FixedPointProjection(GlobalFrictionContactProblem *problem, double *reaction, double *velocity, double *globalVelocity, int *info, SolverOptions *options)#
void gfc3d_ADMM(GlobalFrictionContactProblem *problem, double *reaction, double *velocity, double *globalVelocity, int *info, SolverOptions *options)#
void gfc3d_ADMM_init(GlobalFrictionContactProblem *problem, SolverOptions *options)#
void gfc3d_ADMM_free(GlobalFrictionContactProblem *problem, SolverOptions *options)#
void gfc3d_IPM(GlobalFrictionContactProblem *problem, double *reaction, double *velocity, double *globalVelocity, int *info, SolverOptions *options)#

solver based on Interior Point Method (IPM) for friction-contact 3D problem based on an AVI reformulation Vincent Acary, Paul Armand, Hoang Minh NGUYEN.

High-accuracy computation of rolling friction contact problems. 2022. https://hal.inria.fr/hal-03741048

void gfc3d_IPM_init(GlobalFrictionContactProblem *problem, SolverOptions *options)#
void gfc3d_IPM_free(GlobalFrictionContactProblem *problem, SolverOptions *options)#
void gfc3d_ipm_set_default(SolverOptions *options)#
void gfc3d_nsn_ac_set_default(SolverOptions *options)#
void gfc3d_aclmfp_set_default(SolverOptions *options)#
void gfc3d_admm_set_default(SolverOptions *options)#