Program listing for file kernel/src/simulationTools/RollingFrictionContact.hpp

Program listing for file kernel/src/simulationTools/RollingFrictionContact.hpp#

 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