ESyS-Particle  2.3.4
ContactCollection.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_LSMCONTACTCOLLECTION_H
15 #define ESYS_LSMCONTACTCOLLECTION_H
16 
17 #include "Foundation/vec3.h"
18 #include "Foundation/StlIterator.h"
21 
22 #include <vector>
23 #include <map>
24 
25 namespace esys
26 {
27  namespace lsm
28  {
30  {
31  public:
34  typedef std::vector<Contact> ContactVector;
36  typedef std::map<Vec3, ContactVector, Vec3Comparer> ContactMap;
37 
39  {
40  public:
44  {
45  }
46 
47  bool hasNext() const
48  {
50  }
51 
53  {
54  return ContactIterator(m_contactMapIterator.next().second);
55  }
56 
58  {
60  }
61 
62  private:
64  };
65 
66 
68  : m_contactMap()
69  {
70  }
71 
72  void addContact(const Contact &contact)
73  {
74  ContactMap::iterator it = m_contactMap.find(contact.getCentrePos1());
75  if (it == m_contactMap.end()) {
76  it = (m_contactMap.insert(ContactMap::value_type(contact.getCentrePos1(), ContactVector()))).first;
77  }
78  it->second.push_back(contact);
79  }
80 
81  void addContactWithReverse(const Contact &contact)
82  {
83  addContact(contact);
84  addContact(
85  Contact(
86  contact.getParticle2(),
87  contact.getParticle1(),
88  contact.getForcePos(),
89  contact.getForce()*-1.0
90  )
91  );
92  }
93 
94  template <typename TmplInteractionData>
95  void addInteraction(const TmplInteractionData &interactionData)
96  {
97  if (interactionData.getForce() != Vec3::ZERO) {
99  Contact(
100  interactionData.getParticle1(),
101  interactionData.getParticle2(),
102  interactionData.getForcePos(),
103  interactionData.getForce()
104  )
105  );
106  }
107  }
108 
109  template <typename TmplIterator>
110  void addInteractions(TmplIterator &iterator)
111  {
112  while (iterator.hasNext())
113  {
114  addInteraction(iterator.next());
115  }
116  }
117 
118  ContactVector getContactVector(const Vec3 &centrePt) const
119  {
120  ContactMap::const_iterator it = m_contactMap.find(centrePt);
121  if (it != m_contactMap.end()) {
122  return it->second;
123  }
124  return ContactVector();
125  }
126 
128  {
130  }
131 
132  private:
134  };
135  }
136 }
137 
138 #endif
esys::lsm::Contact::getForce
const Vec3 & getForce() const
Definition: Contact.h:182
esys::lsm::ContactCollection::ContactIteratorIterator::next
ContactIterator next()
Definition: ContactCollection.h:52
esys::lsm::ContactCollection::ContactIteratorIterator::m_contactMapIterator
ContactMapIterator m_contactMapIterator
Definition: ContactCollection.h:63
esys::lsm::Contact::getForcePos
const Vec3 & getForcePos() const
Definition: Contact.h:177
esys::lsm::ContactCollection::ContactCollection
ContactCollection()
Definition: ContactCollection.h:67
Vec3Comparer.h
StlIterator.h
esys::lsm::ForwardIterator::current
reference current() const
Definition: StlIterator.h:53
esys::lsm::ContactCollection::getContactIteratorIterator
ContactIteratorIterator getContactIteratorIterator()
Definition: ContactCollection.h:127
esys::lsm::ForwardIterator::hasNext
bool hasNext() const
Definition: StlIterator.h:48
esys::lsm::Contact::getCentrePos1
const Vec3 & getCentrePos1() const
Definition: Contact.h:157
esys::lsm::ForwardIterator::next
reference next()
Definition: StlIterator.h:60
esys::lsm::ContactCollection::ContactIteratorIterator::ContactMapIterator
ForwardIterator< ContactMap > ContactMapIterator
Definition: ContactCollection.h:41
esys::lsm::ContactCollection
Definition: ContactCollection.h:30
esys::lsm::Vec3XyzComparer
Definition: Vec3Comparer.h:24
esys
Definition: CheckPointable.cpp:17
esys::lsm::Contact::getParticle1
const ParticleData & getParticle1() const
Definition: Contact.h:147
esys::lsm::Contact
Definition: Contact.h:120
esys::lsm::ContactCollection::ContactIterator
ForwardIterator< ContactVector > ContactIterator
Definition: ContactCollection.h:35
esys::lsm::ContactCollection::m_contactMap
ContactMap m_contactMap
Definition: ContactCollection.h:133
esys::lsm::ContactCollection::getContactVector
ContactVector getContactVector(const Vec3 &centrePt) const
Definition: ContactCollection.h:118
esys::lsm::ContactCollection::addInteractions
void addInteractions(TmplIterator &iterator)
Definition: ContactCollection.h:110
esys::lsm::ContactCollection::ContactVector
std::vector< Contact > ContactVector
Definition: ContactCollection.h:34
esys::lsm::ContactCollection::ContactIteratorIterator::current
ContactIterator current() const
Definition: ContactCollection.h:57
esys::lsm::ContactCollection::ContactIteratorIterator::ContactIteratorIterator
ContactIteratorIterator(ContactMap &map)
Definition: ContactCollection.h:42
esys::lsm::ContactCollection::addInteraction
void addInteraction(const TmplInteractionData &interactionData)
Definition: ContactCollection.h:95
esys::lsm::ContactCollection::addContact
void addContact(const Contact &contact)
Definition: ContactCollection.h:72
esys::lsm::ContactCollection::ContactIteratorIterator
Definition: ContactCollection.h:39
Vec3
Definition: vec3.h:47
esys::lsm::ForwardIterator
Definition: StlIterator.h:30
vec3.h
ContactCollection.h
esys::lsm::ContactCollection::ContactIteratorIterator::hasNext
bool hasNext() const
Definition: ContactCollection.h:47
Vec3::ZERO
static const Vec3 ZERO
Definition: vec3.h:52
esys::lsm::ContactCollection::ContactMap
std::map< Vec3, ContactVector, Vec3Comparer > ContactMap
Definition: ContactCollection.h:36
esys::lsm::ContactCollection::Contact
esys::lsm::Contact Contact
Definition: ContactCollection.h:32
esys::lsm::ContactCollection::addContactWithReverse
void addContactWithReverse(const Contact &contact)
Definition: ContactCollection.h:81
Contact.h
esys::lsm::ContactCollection::Vec3Comparer
esys::lsm::Vec3XyzComparer Vec3Comparer
Definition: ContactCollection.h:33
esys::lsm::Contact::getParticle2
const ParticleData & getParticle2() const
Definition: Contact.h:152