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

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

  1#ifndef GlobalRollingFrictionContact_H
  2#define GlobalRollingFrictionContact_H
  3
  4#include "GlobalFrictionContact.hpp"
  5#include "SiconosVector.hpp"
  6#include "SimpleMatrix.hpp"
  7#include "GlobalRollingFrictionContactProblem.h"
  8#include "Friction_cst.h"
  9
 10
 11typedef int (*GRFC3D_Driver)(GlobalRollingFrictionContactProblem*, double*, double*, double*, SolverOptions*);
 12TYPEDEF_SPTR(GlobalRollingFrictionContactProblem)
 13
 14
 15class GlobalRollingFrictionContact : public GlobalFrictionContact
 16{
 17private:
 18
 19  GlobalRollingFrictionContact() = default;
 20
 21protected:
 22
 23  ACCEPT_SERIALIZATION(GlobalRollingFrictionContact);
 24
 25
 26  int _contactProblemDim = 5;
 27
 28
 29  SP::MuStorage _mu_r;
 30
 31
 32  GRFC3D_Driver _g_rolling_driver;
 33
 34  GlobalRollingFrictionContactProblem _numerics_problem;
 35public:
 36
 37
 38  GlobalRollingFrictionContact(int dimPb, int numericsSolverId = SICONOS_GLOBAL_ROLLING_FRICTION_3D_NSGS_WR);
 39
 40
 41  GlobalRollingFrictionContact(int dimPb, SP::SolverOptions options);
 42
 43
 44  virtual ~GlobalRollingFrictionContact(){};
 45
 46
 47
 48
 49  inline int getGlobalRollingFrictionContactDim() const
 50  {
 51    return _contactProblemDim;
 52  }
 53
 54
 55  inline size_t getGlobalSizeOutput() const
 56  {
 57    return _sizeGlobalOutput;
 58  }
 59
 60
 61  inline SP::MuStorage mur() const
 62  {
 63    return _mu_r;
 64  }
 65
 66
 67  inline double getMur(unsigned int i) const
 68  {
 69    return (*_mu_r)[i];
 70  }
 71
 72
 73
 74
 75   void initialize(SP::Simulation sim);
 76
 77
 78  SP::GlobalRollingFrictionContactProblem globalRollingFrictionContactProblem();
 79
 80
 81  GlobalRollingFrictionContactProblem *globalRollingFrictionContactProblemPtr();
 82
 83
 84  int solve(SP::GlobalRollingFrictionContactProblem problem = SP::GlobalRollingFrictionContactProblem());
 85
 86
 87  virtual bool preCompute(double time);
 88
 89
 90  virtual int compute(double time);
 91
 92
 93  bool checkCompatibleNSLaw(NonSmoothLaw& nslaw);
 94
 95  void updateMu();
 96  void updateMur();
 97  void display() const;
 98};
 99
100#endif