ESyS-Particle  2.3.4
MacroFrictionCalculator.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2017 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.apache.org/licenses/LICENSE-2.0 //
10 // //
12 
13 
14 #ifndef ESYS_LSMMACROFRICTIONCALCULATOR_H
15 #define ESYS_LSMMACROFRICTIONCALCULATOR_H
16 
17 #include "Foundation/vec3.h"
18 
19 #include <vector>
20 
21 namespace esys
22 {
23  namespace lsm
24  {
26  {
27  public:
28  typedef std::pair<Vec3,Vec3> WallForcePair;
29  typedef std::vector<double> FrictionVector;
30 
31  MacroFrictionCalculator(int normalDimIndex, int shearDimIndex)
32  : m_normalDimIndex(normalDimIndex),
33  m_shearDimIndex(shearDimIndex),
35  {
36  }
37 
38  double getFriction(const WallForcePair &forcePair) const
39  {
40  const double normalStress = (forcePair.first[m_normalDimIndex] - forcePair.second[m_normalDimIndex]);
41  if (normalStress != 0.0) {
42  const double shearStress = forcePair.first[m_shearDimIndex] - forcePair.second[m_shearDimIndex];
43  return shearStress/normalStress;
44  }
45  return 0.0;
46  }
47 
48  void add(const WallForcePair &forcePair)
49  {
50  m_frictionVector.push_back(getFriction(forcePair));
51  }
52 
53  template<typename TmplIterator>
54  void add(TmplIterator it)
55  {
56  while (it.hasNext())
57  {
58  add(it.next());
59  }
60  }
61 
63  {
64  return m_frictionVector;
65  }
66 
67  private:
71  };
72  }
73 }
74 
75 #endif
esys::lsm::MacroFrictionCalculator::getFrictionVector
const FrictionVector & getFrictionVector() const
Definition: MacroFrictionCalculator.h:62
esys::lsm::MacroFrictionCalculator::WallForcePair
std::pair< Vec3, Vec3 > WallForcePair
Definition: MacroFrictionCalculator.h:28
esys::lsm::MacroFrictionCalculator::FrictionVector
std::vector< double > FrictionVector
Definition: MacroFrictionCalculator.h:29
esys::lsm::MacroFrictionCalculator::add
void add(TmplIterator it)
Definition: MacroFrictionCalculator.h:54
esys::lsm::MacroFrictionCalculator::add
void add(const WallForcePair &forcePair)
Definition: MacroFrictionCalculator.h:48
esys::lsm::MacroFrictionCalculator
Definition: MacroFrictionCalculator.h:26
esys
Definition: CheckPointable.cpp:17
esys::lsm::MacroFrictionCalculator::m_shearDimIndex
int m_shearDimIndex
Definition: MacroFrictionCalculator.h:69
MacroFrictionCalculator.h
esys::lsm::MacroFrictionCalculator::m_frictionVector
FrictionVector m_frictionVector
Definition: MacroFrictionCalculator.h:70
esys::lsm::MacroFrictionCalculator::getFriction
double getFriction(const WallForcePair &forcePair) const
Definition: MacroFrictionCalculator.h:38
esys::lsm::MacroFrictionCalculator::MacroFrictionCalculator
MacroFrictionCalculator(int normalDimIndex, int shearDimIndex)
Definition: MacroFrictionCalculator.h:31
vec3.h
esys::lsm::MacroFrictionCalculator::m_normalDimIndex
int m_normalDimIndex
Definition: MacroFrictionCalculator.h:68