MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
friction.h
Go to the documentation of this file.
1 /* $Header: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/mbdyn/struct/friction.h,v 1.36 2017/01/12 14:46:43 masarati Exp $ */
2 /*
3  * MBDyn (C) is a multibody analysis code.
4  * http://www.mbdyn.org
5  *
6  * Copyright (C) 2003-2017
7  *
8  * Marco Morandini <morandini@aero.polimi.it>
9  *
10  * Dipartimento di Ingegneria Aerospaziale - Politecnico di Milano
11  * via La Masa, 34 - 20156 Milano, Italy
12  * http://www.aero.polimi.it
13  *
14  * Changing this copyright notice is forbidden.
15  *
16  * This program is free software; you can redistribute it and/or modify
17  * it under the terms of the GNU General Public License as published by
18  * the Free Software Foundation (version 2 of the License).
19  *
20  *
21  * This program is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24  * GNU General Public License for more details.
25  *
26  * You should have received a copy of the GNU General Public License
27  * along with this program; if not, write to the Free Software
28  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29  */
30 
31 /* Copyright (C) 2003 Marco Morandini*/
32 
33 #ifndef FRICTION_H
34 #define FRICTION_H
35 
36 #include "ScalarFunctions.h"
37 #include "simentity.h"
38 #include "elem.h"
39 #include "JacSubMatrix.h"
40 
44 private:
45  void SetValue(DataManager *pDM,
47  SimulationEntity::Hints *ph = 0) { NO_OP; };
48 public:
49 /*
50  * unsigned int iGetNumDof(void) const;
51  * DofOrder::Order GetDofType(unsigned int i) const;
52  * DofOrder::Order GetEqType (unsigned int i) const;
53  * void SetValue(VectorHandler&X, VectorHandler&XP);
54  * void BeforePredict(VectorHandler&,
55  * VectorHandler&,
56  * VectorHandler&,
57  * VectorHandler&) const;
58  * void AfterPredict(VectorHandler&X, VectorHandler&XP);
59  * void Update(const VectorHandler&XCurr, const VectorHandler&XPrimeCurr);
60  * void AfterConvergence(VectorHandler&X, VectorHandler&XP);
61  */
64  virtual void SetValue(DataManager *pDM,
67  const unsigned int solution_startdof = 0);
70  virtual doublereal fc(void) const = 0;
73  virtual void AssRes(
74  SubVectorHandler& WorkVec,
75  const unsigned int startdof,
76  const unsigned int solution_startdof,
77  const doublereal F,
78  const doublereal v,
79  const VectorHandler& X,
80  const VectorHandler& XP)
84  virtual void AssJac(
85  FullSubMatrixHandler& WorkMat,
87  const unsigned int startdof,
88  const unsigned int solution_startdof,
89  const doublereal dCoef,
90  const doublereal F,
91  const doublereal v,
92  const VectorHandler& X,
93  const VectorHandler& XP,
94  const ExpandableRowVector& dF,
95  const ExpandableRowVector& dv) const = 0;
96  virtual void AfterConvergence(
97  const doublereal F,
98  const doublereal v,
99  const VectorHandler&X,
100  const VectorHandler&XP,
101  const unsigned int solution_startdof) {};
102 };
103 
107 public:
108  virtual ~BasicShapeCoefficient(void){};
111  virtual doublereal Sh_c(void) const = 0;
114  virtual doublereal Sh_c(
115  const doublereal f,
116  const doublereal F,
117  const doublereal v) = 0;
120  virtual void dSh_c(
121  ExpandableRowVector& dShc,
122  const doublereal f,
123  const doublereal F,
124  const doublereal v,
125  const ExpandableRowVector& dfc,
126  const ExpandableRowVector& dF,
127  const ExpandableRowVector& dv) const = 0;
128 };
129 
136 private:
143  doublereal alpha(const doublereal z,
144  const doublereal v) const;
146  const doublereal v) const;
148  const doublereal v) const;
149  const doublereal fs(const doublereal&v) const;
150  const doublereal fsd(const doublereal&v) const;
151 public:
153  const doublereal sigma0,
154  const doublereal sigma1,
155  const doublereal sigma2,
156  const doublereal kappa,
157  const BasicScalarFunction *const ff);
158  void SetValue(DataManager *pDM,
160  SimulationEntity::Hints *ph = 0,
161  const unsigned int solution_startdof = 0);
162  unsigned int iGetNumDof(void) const;
163  virtual std::ostream&
164  DescribeDof(std::ostream& out,
165  const char *prefix = "",
166  bool bInitial = false) const;
167  virtual void
168  DescribeDof(std::vector<std::string>& desc,
169  bool bInitial = false,
170  int i = -1) const;
171  virtual std::ostream&
172  DescribeEq(std::ostream& out,
173  const char *prefix = "",
174  bool bInitial = false) const;
175  virtual void
176  DescribeEq(std::vector<std::string>& desc,
177  bool bInitial = false,
178  int i = -1) const;
179  DofOrder::Order GetDofType(unsigned int i) const;
180  DofOrder::Order GetEqType (unsigned int i) const;
181  doublereal fc(void) const;
182  void AssRes(
183  SubVectorHandler& WorkVec,
184  const unsigned int startdof,
185  const unsigned int solution_startdof,
186  const doublereal F,
187  const doublereal v,
188  const VectorHandler& X,
190  void AssJac(
191  FullSubMatrixHandler& WorkMat,
192  ExpandableRowVector& dfc,
193  const unsigned int startdof,
194  const unsigned int solution_startdof,
195  const doublereal dCoef,
196  const doublereal F,
197  const doublereal v,
198  const VectorHandler& X,
199  const VectorHandler& XP,
200  const ExpandableRowVector& dF,
201  const ExpandableRowVector& dv) const;
202 };
203 
208 private:
209  enum tr_type{
223  logical first_iter;
224  logical first_switch;
232 
235 public:
237  const BasicScalarFunction *const ff,
238  const doublereal s2,
239  const doublereal vr);
240  void SetValue(DataManager *pDM,
242  SimulationEntity::Hints *ph = 0,
243  const unsigned int solution_startdof = 0);
244  unsigned int iGetNumDof(void) const;
245  virtual std::ostream&
246  DescribeDof(std::ostream& out,
247  const char *prefix = "",
248  bool bInitial = false) const;
249  virtual void
250  DescribeDof(std::vector<std::string>& desc,
251  bool bInitial = false,
252  int i = -1) const;
253  virtual std::ostream&
254  DescribeEq(std::ostream& out,
255  const char *prefix = "",
256  bool bInitial = false) const;
257  virtual void
258  DescribeEq(std::vector<std::string>& desc,
259  bool bInitial = false,
260  int i = -1) const;
261  DofOrder::Order GetDofType(unsigned int i) const;
262  DofOrder::Order GetEqType (unsigned int i) const;
263  doublereal fc(void) const;
264  void AfterConvergence(
265  const doublereal F,
266  const doublereal v,
267  const VectorHandler&X,
268  const VectorHandler&XP,
269  const unsigned int solution_startdof);
270  void AssRes(
271  SubVectorHandler& WorkVec,
272  const unsigned int startdof,
273  const unsigned int solution_startdof,
274  const doublereal F,
275  const doublereal v,
276  const VectorHandler& X,
278  void AssJac(
279  FullSubMatrixHandler& WorkMat,
280  ExpandableRowVector& dfc,
281  const unsigned int startdof,
282  const unsigned int solution_startdof,
283  const doublereal dCoef,
284  const doublereal F,
285  const doublereal v,
286  const VectorHandler& X,
287  const VectorHandler& XP,
288  const ExpandableRowVector& dF,
289  const ExpandableRowVector& dv) const;
290 };
291 
292 
296 public:
297  virtual doublereal Sh_c(void) const;
298  virtual doublereal Sh_c(
299  const doublereal f,
300  const doublereal F,
301  const doublereal v);
302  virtual void dSh_c(
303  ExpandableRowVector& dShc,
304  const doublereal f,
305  const doublereal F,
306  const doublereal v,
307  const ExpandableRowVector& dfc,
308  const ExpandableRowVector& dF,
309  const ExpandableRowVector& dv) const;
310 };
311 
312 
313 
317 private:
319 public:
321  virtual doublereal Sh_c(void) const;
323  const doublereal f,
324  const doublereal F,
325  const doublereal v);
326  void dSh_c(
327  ExpandableRowVector& dShc,
328  const doublereal f,
329  const doublereal F,
330  const doublereal v,
331  const ExpandableRowVector& dfc,
332  const ExpandableRowVector& dF,
333  const ExpandableRowVector& dv) const;
334 };
335 
339 private:
341 
348 public:
350  const doublereal r,
351  const doublereal hta
352  ):
353  radius(r),
354  half_thread_angle(hta),
355  pitch_angle(0.),
357  tg_pitch(0.),
358  tg_pitch2(0.) {
359  };
361  const_cast<doublereal&>(tg_pitch) = pitch / (2. * M_PI * radius);
362  const_cast<doublereal&>(tg_pitch2) = tg_pitch * tg_pitch;
363  const_cast<doublereal&>(pitch_angle) = std::atan(tg_pitch);
364  const_cast<doublereal&>(half_thread_angle) = std::atan(
366  );
367  return radius / std::cos(pitch_angle);
368  };
369  virtual doublereal Sh_c(void) const {return shc;};
371  const doublereal f,
372  const doublereal F,
373  const doublereal v) {
374 
375  shc = radius * (f * sec_half_thread_angle * (1 + tg_pitch2)) /
376  (f * sec_half_thread_angle * tg_pitch - 1.);
377  return shc;
378  };
379  void dSh_c(
380  ExpandableRowVector& dShc,
381  const doublereal f,
382  const doublereal F,
383  const doublereal v,
384  const ExpandableRowVector& dfc,
385  const ExpandableRowVector& dF,
386  const ExpandableRowVector& dv) const {
387  doublereal dsh_fc = radius * (-sec_half_thread_angle * (1 + tg_pitch2) ) /
388  std::pow(f * sec_half_thread_angle * tg_pitch - 1., 2.);
389  dShc.ReDim(1);
390  dShc.Set(dsh_fc, 1);
391  dShc.Link(1, &dfc);
392  };
393 };
394 
395 //---------------------------------------
396 
398  DataManager * pDM);
399 
401 
402 #endif /* FRICTION_H */
403 
doublereal saved_sliding_velocity
Definition: friction.h:227
const doublereal tg_pitch2
Definition: friction.h:347
unsigned int iGetNumDof(void) const
Definition: friction.cc:86
doublereal current_friction_force
Definition: friction.h:231
#define M_PI
Definition: gradienttest.cc:67
void Set(doublereal xx, integer i, integer iidx)
Definition: JacSubMatrix.cc:95
virtual void AssRes(SubVectorHandler &WorkVec, const unsigned int startdof, const unsigned int solution_startdof, const doublereal F, const doublereal v, const VectorHandler &X, const VectorHandler &XP)=0
doublereal f
Definition: friction.h:142
virtual doublereal Sh_c(void) const
Definition: friction.cc:547
doublereal shc
Definition: friction.h:340
GradientExpression< BinaryExpr< FuncPow, LhsExpr, RhsExpr > > pow(const GradientExpression< LhsExpr > &u, const GradientExpression< RhsExpr > &v)
Definition: gradient.h:2961
DiscreteCoulombFriction(const BasicScalarFunction *const ff, const doublereal s2, const doublereal vr)
Definition: friction.cc:267
doublereal alpha(const doublereal z, const doublereal v) const
Definition: friction.cc:138
void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0, const unsigned int solution_startdof=0)
Definition: friction.cc:77
const doublereal fs(const doublereal &v) const
Definition: friction.cc:130
const doublereal radius
Definition: friction.h:342
virtual ~BasicShapeCoefficient(void)
Definition: friction.h:108
DofOrder::Order GetDofType(unsigned int i) const
Definition: friction.cc:332
void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0)
Definition: friction.h:45
const DifferentiableScalarFunction & fss
Definition: friction.h:141
virtual std::ostream & DescribeDof(std::ostream &out, const char *prefix="", bool bInitial=false) const
Definition: friction.cc:303
virtual doublereal Sh_c(void) const =0
void AssJac(FullSubMatrixHandler &WorkMat, ExpandableRowVector &dfc, const unsigned int startdof, const unsigned int solution_startdof, const doublereal dCoef, const doublereal F, const doublereal v, const VectorHandler &X, const VectorHandler &XP, const ExpandableRowVector &dF, const ExpandableRowVector &dv) const
Definition: friction.cc:224
void SetValue(DataManager *pDM, VectorHandler &X, VectorHandler &XP, SimulationEntity::Hints *ph=0, const unsigned int solution_startdof=0)
Definition: friction.cc:289
#define NO_OP
Definition: myassert.h:74
std::vector< Hint * > Hints
Definition: simentity.h:89
BasicShapeCoefficient *const ParseShapeCoefficient(MBDynParser &HP)
Definition: friction.cc:662
virtual doublereal fc(void) const =0
virtual std::ostream & DescribeEq(std::ostream &out, const char *prefix="", bool bInitial=false) const
Definition: friction.cc:106
void AfterConvergence(const doublereal F, const doublereal v, const VectorHandler &X, const VectorHandler &XP, const unsigned int solution_startdof)
Definition: friction.cc:346
const doublereal half_thread_angle
Definition: friction.h:343
const doublereal tg_pitch
Definition: friction.h:346
const doublereal pitch_angle
Definition: friction.h:344
void AssRes(SubVectorHandler &WorkVec, const unsigned int startdof, const unsigned int solution_startdof, const doublereal F, const doublereal v, const VectorHandler &X, const VectorHandler &XP)
Definition: friction.cc:374
void ReDim(const integer n)
Definition: JacSubMatrix.cc:50
const doublereal sec_half_thread_angle
Definition: friction.h:345
virtual void AfterConvergence(const doublereal F, const doublereal v, const VectorHandler &X, const VectorHandler &XP, const unsigned int solution_startdof)
Definition: friction.h:96
const doublereal sigma2
Definition: friction.h:139
DofOrder::Order GetDofType(unsigned int i) const
Definition: friction.cc:120
virtual void dSh_c(ExpandableRowVector &dShc, const doublereal f, const doublereal F, const doublereal v, const ExpandableRowVector &dfc, const ExpandableRowVector &dF, const ExpandableRowVector &dv) const
Definition: friction.cc:558
ModLugreFriction(const doublereal sigma0, const doublereal sigma1, const doublereal sigma2, const doublereal kappa, const BasicScalarFunction *const ff)
Definition: friction.cc:60
const doublereal fsd(const doublereal &v) const
Definition: friction.cc:134
virtual std::ostream & DescribeEq(std::ostream &out, const char *prefix="", bool bInitial=false) const
Definition: friction.cc:318
void AssJac(FullSubMatrixHandler &WorkMat, ExpandableRowVector &dfc, const unsigned int startdof, const unsigned int solution_startdof, const doublereal dCoef, const doublereal F, const doublereal v, const VectorHandler &X, const VectorHandler &XP, const ExpandableRowVector &dF, const ExpandableRowVector &dv) const
Definition: friction.cc:501
virtual doublereal Sh_c(void) const
Definition: friction.cc:574
doublereal saved_sliding_friction
Definition: friction.h:228
doublereal alphad_z(const doublereal z, const doublereal v) const
Definition: friction.cc:182
void AssRes(SubVectorHandler &WorkVec, const unsigned int startdof, const unsigned int solution_startdof, const doublereal F, const doublereal v, const VectorHandler &X, const VectorHandler &XP)
Definition: friction.cc:210
DofOrder::Order GetEqType(unsigned int i) const
Definition: friction.cc:337
virtual void dSh_c(ExpandableRowVector &dShc, const doublereal f, const doublereal F, const doublereal v, const ExpandableRowVector &dfc, const ExpandableRowVector &dF, const ExpandableRowVector &dv) const =0
virtual std::ostream & DescribeDof(std::ostream &out, const char *prefix="", bool bInitial=false) const
Definition: friction.cc:91
void Link(const integer i, const ExpandableRowVector *const xp, const integer rhs_block=1)
Definition: JacSubMatrix.cc:68
status_type status
Definition: friction.h:220
const DifferentiableScalarFunction & fss
Definition: friction.h:233
void dSh_c(ExpandableRowVector &dShc, const doublereal f, const doublereal F, const doublereal v, const ExpandableRowVector &dfc, const ExpandableRowVector &dF, const ExpandableRowVector &dv) const
Definition: friction.cc:586
doublereal fc(void) const
Definition: friction.cc:342
virtual void AssJac(FullSubMatrixHandler &WorkMat, ExpandableRowVector &dfc, const unsigned int startdof, const unsigned int solution_startdof, const doublereal dCoef, const doublereal F, const doublereal v, const VectorHandler &X, const VectorHandler &XP, const ExpandableRowVector &dF, const ExpandableRowVector &dv) const =0
virtual doublereal Sh_c(void) const
Definition: friction.h:369
unsigned int iGetNumDof(void) const
Definition: friction.cc:298
doublereal fc(void) const
Definition: friction.cc:206
doublereal Sh_c(const doublereal f, const doublereal F, const doublereal v)
Definition: friction.h:370
doublereal previous_switch_v
Definition: friction.h:225
ScrewJointSh_c(const doublereal r, const doublereal hta)
Definition: friction.h:349
doublereal current_velocity
Definition: friction.h:226
doublereal alphad_v(const doublereal z, const doublereal v) const
Definition: friction.cc:157
GradientExpression< UnaryExpr< FuncCos, Expr > > cos(const GradientExpression< Expr > &u)
Definition: gradient.h:2978
doublereal vel_ratio
Definition: friction.h:230
const doublereal kappa
Definition: friction.h:140
doublereal ComputePitchAngle(const doublereal pitch)
Definition: friction.h:360
GradientExpression< UnaryExpr< FuncAtan, Expr > > atan(const GradientExpression< Expr > &u)
Definition: gradient.h:2985
double doublereal
Definition: colamd.c:52
void dSh_c(ExpandableRowVector &dShc, const doublereal f, const doublereal F, const doublereal v, const ExpandableRowVector &dfc, const ExpandableRowVector &dF, const ExpandableRowVector &dv) const
Definition: friction.h:379
GradientExpression< UnaryExpr< FuncTan, Expr > > tan(const GradientExpression< Expr > &u)
Definition: gradient.h:2979
doublereal converged_v
Definition: friction.h:222
DofOrder::Order GetEqType(unsigned int i) const
Definition: friction.cc:125
BasicFriction *const ParseFriction(MBDynParser &HP, DataManager *pDM)
Definition: friction.cc:608
const doublereal sigma1
Definition: friction.h:138
const doublereal sigma0
Definition: friction.h:137