ESyS-Particle  2.3.4
Interaction.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 #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:
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&){};
116  virtual void loadRestartData(std::istream&){};
117 };
118 #endif
APairInteraction::getRaw2Data
esys::lsm::quintuple< Vec3, double, Vec3, double, Vec3 > getRaw2Data() const
Definition: Interaction.h:93
APairInteraction::getPairID
pair< int, int > getPairID() const
Definition: Interaction.h:84
APairInteraction
Abstract base class for 2-particle interactions.
Definition: Interaction.h:69
AInteraction::initialized
bool initialized() const
Definition: Interaction.cpp:32
APairInteraction::m_p2
CParticle * m_p2
Definition: Interaction.h:71
AInteraction::calcHeatTrans
virtual void calcHeatTrans()
Definition: Interaction.h:49
AInteraction::~AInteraction
virtual ~AInteraction()
Definition: Interaction.cpp:23
APairInteraction::setPP
void setPP(CParticle *, CParticle *)
Definition: Interaction.cpp:67
APairInteraction::saveRestartData
virtual void saveRestartData(std::ostream &)
Definition: Interaction.h:115
AInteraction::Count
double Count() const
Definition: Interaction.h:56
APairInteraction::second
CParticle * second()
Definition: Interaction.h:82
APairInteraction::calcForces
virtual void calcForces()=0
APairInteraction::hasTag
virtual bool hasTag(int, int) const
Definition: Interaction.cpp:92
AInteraction
Abstract base class for interactions.
Definition: Interaction.h:37
AInteraction::m_iid
int m_iid
interaction id
Definition: Interaction.h:40
APairInteraction::~APairInteraction
virtual ~APairInteraction()
Definition: Interaction.cpp:37
AInteraction::calcForces
virtual void calcForces()=0
AInteraction::m_init
bool m_init
Definition: Interaction.h:41
APairInteraction::m_p1
CParticle * m_p1
Definition: Interaction.h:71
Interaction.h
AInteraction::getID
int getID()
Definition: Interaction.h:52
APairInteraction::checkIDs
void checkIDs()
Definition: Interaction.cpp:76
quintuple.h
AInteraction::AInteraction
AInteraction()
Definition: Interaction.cpp:19
CBasicParticle::getTag
int getTag() const
Definition: BasicParticle.h:74
NULL
#define NULL
Definition: t_list.h:17
mpibuf.h
APairInteraction::second
const CParticle * second() const
Definition: Interaction.h:80
APairInteraction::getPosFirst
virtual Vec3 getPosFirst() const
Definition: Interaction.h:90
APairInteraction::getPos
virtual Vec3 getPos() const =0
AInteraction::getAllID
vector< int > getAllID() const
Definition: Interaction.cpp:27
AInteraction::calcHeatFrict
virtual void calcHeatFrict()
Definition: Interaction.h:50
APairInteraction::getPosSecond
virtual Vec3 getPosSecond() const
Definition: Interaction.h:91
APairInteraction::first
const CParticle * first() const
Definition: Interaction.h:79
AInteraction::getPosSecond
virtual Vec3 getPosSecond() const
Definition: Interaction.h:55
Vec3
Definition: vec3.h:47
APairInteraction::first
CParticle * first()
Definition: Interaction.h:81
APairInteraction::loadRestartData
virtual void loadRestartData(std::istream &)
Definition: Interaction.h:116
APairInteraction::setPP
void setPP(const vector< TmplParticle * > &pp)
Definition: Interaction.h:105
AInteraction::hasTag
virtual bool hasTag(int, int) const =0
APairInteraction::APairInteraction
APairInteraction()
Definition: Interaction.cpp:41
CBasicParticle::getID
int getID() const
Definition: BasicParticle.h:65
CBasicParticle::getRad
double getRad() const
Definition: BasicParticle.h:64
AInteraction::getPosFirst
virtual Vec3 getPosFirst() const =0
CBasicParticle::getPos
Vec3 getPos() const
Definition: BasicParticle.h:62
esys::lsm::quintuple
Definition: quintuple.h:25
AInteraction::m_id
vector< int > m_id
id's of the particles involved
Definition: Interaction.h:39
CParticle
Class for a basic particle.
Definition: Particle.h:51
Particle.h