File numerics/src/FrictionContact/fc3d_projection.h

Go to the source code of this file

Typedef and functions declarations related to projection solver for 3 dimension frictional contact problems.

Each solver must have 4 functions in its interface:

  • initialize: link global static variables to the considered problem (M,q,…)
  • update: link/fill the local variables corresponding to sub-blocks of the full problem, for a specific contact
  • solve: solve the local problem
  • free We consider a “global” (ie for several contacts) problem, used to initialize the static global variables. Then a “local” (ie for one contact => size = 3) problem is built (update function) and solved (solve function).

Two different storages are available for M: dense and sparse block.

Functions

void fc3d_projection_free(FrictionContactProblem *problem, FrictionContactProblem *localproblem, SolverOptions *localsolver_options)

free memory for friction contact 3D projection solver

Parameters
  • problem: : the problem to free
  • localproblem: : the problem to free
  • localsolver_options:

void fc3d_projection_initialize(FrictionContactProblem *problem, FrictionContactProblem *localproblem)

Initialize friction-contact 3D projection.

Parameters
  • problem: : the global problem to solve
  • localproblem: : the local problem to initialize

void fc3d_projection_initialize_with_regularization(FrictionContactProblem *problem, FrictionContactProblem *localproblem)

Initialize friction-contact 3D projection with regularization.

Parameters
  • problem: : the global problem to solve
  • localproblem: : the local problem to initialize

void fc3d_projection_update(int number, FrictionContactProblem *problem, FrictionContactProblem *localproblem, double *reaction, SolverOptions *options)

Update friction-contact 3D projection solver: formalize local problem for one contact.

Parameters
  • number: (position in global matrix) of the considered contact
  • problem: : the global problem to solve
  • localproblem: : the local problem to initialize
  • reaction: (only the block corresponding to the current contact will be modified, the rest is used to formalize the local problem)
  • options:

void fc3d_projection_update_with_regularization(int number, FrictionContactProblem *problem, FrictionContactProblem *localproblem, double *reaction, SolverOptions *options)

Update friction-contact 3D projection solver: formalize local problem for one contact.

Parameters
  • number: (position in global matrix) of the considered contact
  • problem: : the global problem to solve
  • localproblem: : the local problem to initialize
  • reaction: (only the block corresponding to the current contact will be modified, the rest is used to formalize the local problem)
  • options:

void fc3d_projection_with_regularization_free(FrictionContactProblem *problem, FrictionContactProblem *localproblem, SolverOptions *localsolver_options)

free memory for friction contact 3D projection solver

Parameters
  • problem: : the problem to free
  • localproblem: : the problem to free
  • localsolver_options:

int fc3d_projectionOnCone_setDefaultSolverOptions(SolverOptions *options)
int fc3d_projectionOnCone_solve(FrictionContactProblem *localproblem, double *reaction, SolverOptions *options)

solve friction-contact 3D problem with projection on the Cone

Return
0 if successfull
Parameters
  • localproblem: : the local problem to initialize
  • reaction:
  • options:

int fc3d_projectionOnCone_velocity_setDefaultSolverOptions(SolverOptions *options)

solve friction-contact 3D problem with projection on the (Tresca Cylinder)

Return
0 if successfull
Parameters
  • options:

int fc3d_projectionOnCone_velocity_solve(FrictionContactProblem *localproblem, double *reaction, SolverOptions *options)

solve friction-contact 3D problem with projection on the Cone

Return
0 if successfull
Parameters
  • localproblem: : the local problem to initialize
  • reaction:
  • options:

int fc3d_projectionOnConeWithDiagonalization_setDefaultSolverOptions(SolverOptions *options)
void fc3d_projectionOnConeWithLocalIteration_free(FrictionContactProblem *problem, FrictionContactProblem *localproblem, SolverOptions *localsolver_options)
void fc3d_projectionOnConeWithLocalIteration_initialize(FrictionContactProblem *problem, FrictionContactProblem *localproblem, SolverOptions *localsolver_options)
int fc3d_projectionOnConeWithLocalIteration_setDefaultSolverOptions(SolverOptions *options)
int fc3d_projectionOnConeWithLocalIteration_solve(FrictionContactProblem *localproblem, double *reaction, SolverOptions *options)

solve friction-contact 3D problem with projection on the Cone with local iteration up to convergence of the local problem

Return
0 if successfull
Parameters
  • localproblem: : the local problem to initialize
  • reaction:
  • options:

int fc3d_projectionOnConeWithRegularization_setDefaultSolverOptions(SolverOptions *options)
void fc3d_projectionOnCylinder_free(FrictionContactProblem *problem, FrictionContactProblem *localproblem, SolverOptions *localsolver_options)
void fc3d_projectionOnCylinder_initialize(FrictionContactProblem *problem, FrictionContactProblem *localproblem, SolverOptions *options)
int fc3d_projectionOnCylinder_setDefaultSolverOptions(SolverOptions *options)
int fc3d_projectionOnCylinder_solve(FrictionContactProblem *localproblem, double *reaction, SolverOptions *options)
void fc3d_projectionOnCylinder_update(int number, FrictionContactProblem *problem, FrictionContactProblem *localproblem, double *reaction, SolverOptions *options)

Update friction-contact 3D projection solver: formalize local problem for one contact.

Parameters
  • number: (position in global matrix) of the considered contact
  • problem: : the global problem to solve
  • localproblem: : the local problem to initialize
  • reaction: (only the block corresponding to the current contact will be modified, the rest is used to formalize the local problem)
  • options:

void fc3d_projectionOnCylinderWithLocalIteration_free(FrictionContactProblem *problem, FrictionContactProblem *localproblem, SolverOptions *localsolver_options)
void fc3d_projectionOnCylinderWithLocalIteration_initialize(FrictionContactProblem *problem, FrictionContactProblem *localproblem, SolverOptions *options, SolverOptions *localsolver_options)
int fc3d_projectionOnCylinderWithLocalIteration_setDefaultSolverOptions(SolverOptions *options)
int fc3d_projectionOnCylinderWithLocalIteration_solve(FrictionContactProblem *localproblem, double *reaction, SolverOptions *options)

solve friction-contact 3D problem with projection on the (Tresca Cylinder)

Return
0 if successfull
Parameters
  • localproblem: : the local problem to initialize
  • reaction:
  • options:

int fc3d_projectionWithDiagonalization_solve(FrictionContactProblem *localproblem, double *reaction, SolverOptions *options)

solve friction-contact 3D problem with projection assuming that M is diagonal

Return
0 if successfull
Parameters
  • localproblem: : the local problem to initialize
  • reaction:
  • options:

void fc3d_projectionWithDiagonalization_update(int number, FrictionContactProblem *problem, FrictionContactProblem *localproblem, double *reaction, SolverOptions *options)

Update friction-contact 3D projection solver: formalize local problem for one contact.

Parameters
  • number: (position in global matrix) of the considered contact
  • problem: : the global problem to solve
  • localproblem: : the local problem to initialize
  • reaction: (only the block corresponding to the current contact will be modified, the rest is used to formalize the local problem)
  • options: