ESyS-Particle  4.0.1
Interaction.h
1 
2 // //
3 // Copyright (c) 2003-2011 by The University of Queensland //
4 // Earth Systems Science Computational Centre (ESSCC) //
5 // http://www.uq.edu.au/esscc //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 #ifndef __INTERACTION_H
14 #define __INTERACTION_H
15 
16 // -- project includes --
17 #include "Model/Particle.h"
18 #include "Foundation/quintuple.h"
19 
20 // -- STL includes --
21 #include <utility>
22 #include <vector>
23 using std::vector;
24 using std::pair;
25 using std::make_pair;
26 
27 
37 {
38  protected:
39  vector<int> m_id;
40  int m_iid;
41  bool m_init;
42 
43  public:
44  AInteraction();
45  virtual ~AInteraction();
46 
47  bool initialized() const;
48  virtual void calcForces()=0;
49  virtual void calcHeatTrans() {};
50  virtual void calcHeatFrict() {};
51  vector<int> getAllID() const;
52  int getID(){return m_iid;};
53  virtual bool hasTag(int,int) const=0;
54  virtual Vec3 getPosFirst() const=0;
55  virtual Vec3 getPosSecond() const{return Vec3(0.0,0.0,0.0);};
56  inline double Count() const {return 1.0;};
57 };
58 
59 
69 {
70  protected:
71  CParticle *m_p1,*m_p2;
72 
73  public:
74  // functions
77  virtual ~APairInteraction();
78 
79  inline const CParticle* first()const {return m_p1;}
80  inline const CParticle* second()const {return m_p2;}
81  inline CParticle* first() {return m_p1;}
82  inline CParticle* second() {return m_p2;}
83 
84  inline pair<int,int> getPairID() const {return make_pair(m_p1->getID(),m_p2->getID());};
85  virtual Vec3 getPos() const = 0;
86  virtual void calcForces() = 0;
87  void setPP(CParticle*,CParticle*);
88  void checkIDs();
89  virtual bool hasTag(int,int) const;
90  virtual Vec3 getPosFirst() const {return m_p1->getPos();};
91  virtual Vec3 getPosSecond() const{return m_p2->getPos();};
92 
94  {
95  return
97  m_p1->getPos(),
98  m_p1->getRad(),
99  m_p2->getPos(),
100  m_p2->getRad(),
101  getPos()
102  );
103  }
104 
105  template <class TmplParticle> void setPP(const vector<TmplParticle *> &pp)
106  {
107  m_p1=pp[0];
108  m_p2=pp[1];
109  m_id.clear();
110  m_id.push_back(m_p1->getID());
111  m_id.push_back(m_p2->getID());
112  }
113 
114  // dummy implementations for save/load of restart parameters
115  virtual void saveRestartData(std::ostream &oStream){};
116  virtual void loadRestartData(std::istream &iStream){};
117 };
118 #endif