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

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

  • [inout] 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)