Program listing for file kernel/src/simulationTools/RollingFrictionContact.hpp#
Return to documentation for this file
1#ifndef RollingFrictionContact_H
2#define RollingFrictionContact_H
3
4#include "LinearOSNS.hpp"
5
6#include <Friction_cst.h>
7#include <RollingFrictionContactProblem.h>
8
9typedef int (*RollingDriver)(RollingFrictionContactProblem *, double *,
10 double *, SolverOptions *);
11TYPEDEF_SPTR(RollingFrictionContactProblem)
12
13
14class RollingFrictionContact : public LinearOSNS {
15protected:
16
17 ACCEPT_SERIALIZATION(RollingFrictionContact);
18
19
20 int _contactProblemDim;
21
22
23 SP::MuStorage _mu;
24
25
26 SP::MuStorage _muR;
27
28
29 RollingDriver _rolling_frictionContact_driver;
30
31 RollingFrictionContactProblem _numerics_problem;
32
33public:
34
35 RollingFrictionContact(
36 int dimPb = 5, int numericsSolverId = SICONOS_ROLLING_FRICTION_3D_NSGS);
37
38
39 RollingFrictionContact(int dimPb, SP::SolverOptions options);
40
41
42 virtual ~RollingFrictionContact(){};
43
44
45
46
47 inline int getRollingFrictionContactDim() const { return _contactProblemDim; }
48
49
50
51 inline const MuStorage getMu() const { return *_mu; }
52
53
54
55 inline SP::MuStorage mu() const { return _mu; }
56
57
58 inline double getMu(unsigned int i) const { return (*_mu)[i]; }
59
60
61 void updateMu();
62
63
64 inline void setNumericsDriver(RollingDriver newFunction)
65 {
66 _rolling_frictionContact_driver = newFunction;
67 };
68
69
70
71
72 void initialize(SP::Simulation simulation) override;
73
74
75 SP::RollingFrictionContactProblem frictionContactProblem();
76
77
78 RollingFrictionContactProblem *frictionContactProblemPtr();
79
80
81 int solve(SP::RollingFrictionContactProblem problem =
82 SP::RollingFrictionContactProblem());
83
84
85 int compute(double time) override;
86
87
88 void display() const override;
89
90
91 bool checkCompatibleNSLaw(NonSmoothLaw &nslaw) override;
92
93 ACCEPT_STD_VISITORS();
94};
95
96#endif