File numerics/src/FrictionContact/fc3d_onecontact_nonsmooth_Newton_solvers.h

Go to the source code of this file

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

Each solver must have 4 functions in its interface:

  • initialize: link local static variables to the global ones (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


typedef void (*computeNonsmoothFunction)(double *, double *, double, double *, double *, double *, double *)


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

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

the rest is used to formalize the local problem)

  • problem: the global problem to solve
  • localproblem: the local problem to solve
  • number: (position in global matrix) of the considered contact
  • reaction: global reaction (only the block corresponding to the current contact will be modified
  • options: of the solver

int fc3d_onecontact_nonsmooth_Newton_gp_setDefaultSolverOptions(SolverOptions *options)
int fc3d_onecontact_nonsmooth_Newton_setDefaultSolverOptions(SolverOptions *options)
void fc3d_onecontact_nonsmooth_Newton_solvers_computeError(int dimension, double *velocity, double *reaction, double *output_error)

compute error for friction-contact 3D problem with Newton

  • dimension: of the global problem
  • velocity: vector
  • reaction: global reaction vector
  • output_error:

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

free memory for friction contact 3D Newton solver

  • problem: the global problem to solve
  • localproblem: for freeing matrix0
  • localsolver_options: options of the solver

void fc3d_onecontact_nonsmooth_Newton_solvers_initialize(FrictionContactProblem *problem, FrictionContactProblem *localproblem, SolverOptions *options)

initialize friction-contact 3D Newton solver

  • problem: to solve
  • localproblem: to solve
  • options: of the solver

int fc3d_onecontact_nonsmooth_Newton_solvers_solve(FrictionContactProblem *localproblem, double *, SolverOptions *options)

solve friction-contact 3D problem with Newton

0 iff successful.
  • localproblem: to solve
  • options: of the solver

int fc3d_onecontact_nonsmooth_Newton_solvers_solve_damped(FrictionContactProblem *localproblem, double *R, SolverOptions *options)
int fc3d_onecontact_nonsmooth_Newton_solvers_solve_direct(FrictionContactProblem *localproblem, double *R, SolverOptions *options)
int fc3d_onecontact_nonsmooth_Newton_solvers_solve_hybrid(FrictionContactProblem *localproblem, double *local_reaction, SolverOptions *options)