File: rolling_friction_contact.rst

package info (click to toggle)
siconos 4.3.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 82,496 kB
  • sloc: cpp: 159,693; ansic: 108,665; fortran: 33,248; python: 20,709; xml: 1,244; sh: 385; makefile: 226
file content (118 lines) | stat: -rw-r--r-- 4,222 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
.. index::
   single: Rolling friction-contact problems

.. contents::

.. _rfc_problem:

Rolling friction-contact problems
*********************************

Problem statement
=================

...

.. _rfc_error:

Implementation in numerics
==========================

Structure to define the problem: :class:`RollingFrictionContactProblem`.

Solvers list : :enum:`FRICTION_SOLVER`  (id contains ROLLING_FRICTION_3D)

The generic drivers for friction-contact problems are:

* :func:`rolling_fc3d_driver`

Error strategy
==============

To set internal solver tolerance (when it makes sense!) use :func:`rolling_fc3d_set_internalsolver_tolerance`.

Check details in :ref:`fc_error`



.. _rfc3d_solvers:

Rolling-Friction 3D available solvers
=====================================

NSGS (:enumerator:`SICONOS_ROLLING_FRICTION_3D_NSGS`)
"""""""""""""""""""""""""""""""""""""""""""""""""""""

Non-Smooth Gauss Seidel solver.

**Driver:** :func:`rolling_fc3d_nsgs`

**Parameters:**

* iparam[SICONOS_IPARAM_MAX_ITER] = 1000 : Maximum iteration number
* iparam[SICONOS_FRICTION_3D_IPARAM_ERROR_EVALUATION] : error computation method,
  
  * SICONOS_FRICTION_3D_NSGS_ERROR_EVALUATION_FULL : Full error computation with velocity computation
  * SICONOS_FRICTION_3D_NSGS_ERROR_EVALUATION_LIGHT_WITH_FULL_FINAL (DEFAULT): Light error computation with incremental values on reaction verification of absolute error at the end
  * SICONOS_FRICTION_3D_NSGS_ERROR_EVALUATION_LIGHT : only light error computation (velocity not computed)
  * SICONOS_FRICTION_3D_NSGS_ERROR_EVALUATION_ADAPTIVE :  we adapt the frequency of the full erro evaluation.

* iparam[SICONOS_FRICTION_3D_IPARAM_ERROR_EVALUATION_FREQUENCY] = 0,  error computation frequency

* iparam[SICONOS_FRICTION_3D_IPARAM_INTERNAL_ERROR_STRATEGY] = SICONOS_FRICTION_3D_INTERNAL_ERROR_STRATEGY_GIVEN_VALUE

* iparam[SICONOS_FRICTION_3D_NSGS_SHUFFLE] : shuffle the contact indices in the loop
  
  * SICONOS_FRICTION_3D_NSGS_SHUFFLE_FALSE : no shuffle
  * SICONOS_FRICTION_3D_NSGS_SHUFFLE_TRUE : shuffle only at the beginning
  * SICONOS_FRICTION_3D_NSGS_SHUFFLE_TRUE_EACH_LOOP : shuffle in each iteration

* iparam[SICONOS_FRICTION_3D_NSGS_SHUFFLE_SEED] = 0 : seed for the random generator in shuffling  contacts

* iparam[SICONOS_FRICTION_3D_NSGS_FILTER_LOCAL_SOLUTION] : filter local solution if the local error is greater than 1.0

  * SICONOS_FRICTION_3D_NSGS_FILTER_LOCAL_SOLUTION_FALSE (default) the filter is not applied
  * SICONOS_FRICTION_3D_NSGS_FILTER_LOCAL_SOLUTION_TRUE  the filter is applied

* iparam[SICONOS_FRICTION_3D_NSGS_RELAXATION] : method uses overrelaxation

  * SICONOS_FRICTION_3D_NSGS_RELAXATION_FALSE (default) relaxation is not used,
  * SICONOS_FRICTION_3D_NSGS_RELAXATION_TRUE  relaxation is used with parameter dparam[8],

  
* dparam[SICONOS_DPARAM_TOL] = 1e-4, user tolerance on the loop
* dparam[SICONOS_FRICTION_3D_DPARAM_INTERNAL_ERROR_RATIO] = 10.0
* dparam[SICONOS_FRICTION_3D_NSGS_RELAXATION_VALUE]  the relaxation parameter omega

Default internal solver : :enumerator:`SICONOS_ROLLING_FRICTION_3D_ONECONTACT_ProjectionOnConeWithLocalIteration`.

Projection on cone (:enumerator:`SICONOS_ROLLING_FRICTION_3D_ONECONTACT_ProjectionOnCone`, ...)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""


.. csv-table:: Projection on cone solvers
   :header: "Solver id", "Driver"
   :widths: 15, 30

   ":enumerator:`SICONOS_ROLLING_FRICTION_3D_ONECONTACT_ProjectionOnCone`",":func:`rolling_fc3d_projectionOnCone_solve`"
   ":enumerator:`SICONOS_ROLLING_FRICTION_3D_ONECONTACT_ProjectionOnConeWithLocalIteration`",":func:`rolling_fc3d_projectionOnConeWithLocalIteration_solve`

**Parameters:**

* iparam[SICONOS_IPARAM_MAX_ITER] = 1000
* iparam[SICONOS_FRICTION_3D_CURRENT_CONTACT_NUMBER]
* iparam[SICONOS_FRICTION_3D_NSGS_LOCALSOLVER_IPARAM_USE_TRIVIAL_SOLUTION]

  * SICONOS_FRICTION_3D_NSGS_LOCALSOLVER_USE_TRIVIAL_SOLUTION_TRUE (default for ProjectionOnConeWithLocalIteration)
  * SICONOS_FRICTION_3D_NSGS_LOCALSOLVER_USE_TRIVIAL_SOLUTION_FALSE (default for ProjectionOnCone)

* dparam[SICONOS_DPARAM_TOL] =1e-12

out :

iparam[SICONOS_FRICTION_NUMBER_OF_CONTACTS] : number of contacts