ESyS-Particle  2.3.2
ASubLattice.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2014 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.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 #ifndef __ASUBLATTICE_H
14 #define __ASUBLATTICE_H
15 
16 // -- project includes --
20 #include "Model/ViscWallIG.h"
22 #include "Foundation/vec3.h"
23 
24 // -- system includes --
25 #include <string>
26 #include <utility>
27 
28 using std::string;
29 
30 class MpiWTimers;
31 class TML_Comm;
32 
37 {
38 private:
39  std::string m_particleType;
40 
41 protected:
42 
43  // -- neighbortable --
44 
45 public:
46  typedef std::pair<int,int> ParticleIdPair;
47  typedef std::vector<ParticleIdPair> ParticleIdPairVector;
48  typedef std::vector<int> IdVector;
49 
50  virtual ~ASubLattice();
51  void setNTSize(int);
52  virtual void setParticleType(const std::string &particleType)
53  {
54  m_particleType = particleType;
55  }
56  virtual const std::string &getParticleType() const
57  {
58  return m_particleType;
59  }
60  virtual void setTimeStepSize(double dt) = 0;
61  virtual vector<int> getCommCoords() const=0;
62  virtual vector<int> getCommDims() const=0;
63  virtual void receiveParticles()=0;
64  virtual void receiveConnections()=0;
65  virtual void addWall()=0;
66  virtual void addElasticWIG()=0;
67  virtual void addBondedWIG()=0;
68  virtual void addDirBondedWIG()=0;
69  virtual void addViscWIG()=0;
70  virtual void addTaggedElasticWIG()=0;
71  virtual void initNeighborTable(const Vec3&,const Vec3&)=0;
72  virtual void initNeighborTable(const Vec3&,const Vec3&,const vector<bool>&)=0;
73  virtual void addPairIG()=0;
74  virtual void addTaggedPairIG()=0;
75  virtual void addTriMesh()=0;
76  virtual void addTriMeshIG()=0;
77  virtual void addBondedTriMeshIG()=0;
78  virtual void addMesh2D()=0;
79  virtual void addMesh2DIG()=0;
80  virtual void addBondedMesh2DIG()=0;
81  virtual void addSingleIG()=0;
82  virtual void addBondedIG()=0;
83  virtual void addCappedBondedIG()=0;
84  virtual void addShortBondedIG()=0;
85  virtual void addRotBondedIG()=0;
86  virtual void addRotThermBondedIG()=0;
87  virtual void addDamping()=0;
88  //virtual void addRotDamping()=0;
89  virtual void setExIG()=0;
90  virtual void initComplex();
91  virtual void removeIG()=0;
92  virtual void getWallPos()=0;
93  virtual void getWallForce()=0;
94  virtual void addSphereBody()=0;
95  virtual void addESphereBodyIG()=0;
96  virtual void getSphereBodyPos()=0;
97  virtual void getSphereBodyForce()=0;
98 
99  virtual const MPI_Comm &getWorkerComm() const = 0;
100 
101  virtual void rebuildParticleArray()=0;
102  virtual void rebuildInteractions()=0;
103  virtual void searchNeighbors()=0;
104  virtual void checkNeighbors()=0;
105 
106  virtual void updateInteractions()=0;
107 
108  virtual int getNumParticles() = 0;
109 
110  virtual std::pair<double, int> findParticleNearestTo(const Vec3 &pt) = 0;
111 
112  virtual std::pair<int, Vec3> getParticlePosn(int particleId) = 0;
113 
114 // virtual ParticleIdPairVector getBondGroupIdPairs(const std::string &groupName) = 0;
115 
116  virtual void oneStep()=0;
117  virtual void exchangePos()=0;
118 
119  // moving stuff around
120  virtual void moveParticleTo()=0;
121  virtual void moveTaggedParticlesBy() = 0;
122  virtual void moveSingleParticleTo(int particleId, const Vec3 &posn)=0;
123  virtual void moveWallBy()=0;
124  virtual void moveSphereBodyBy()=0;
125  virtual void setWallNormal()=0;
126  virtual void applyForceToWall()=0;
127  virtual void setVelocityOfWall()=0;
128  virtual void setParticleVelocity()=0;
129  virtual void setParticleDensity()=0;
130  virtual void setTaggedParticleVel()=0;
131  virtual void setParticleAngularVelocity(){};
132  virtual void setParticleNonDynamic()=0;
133  virtual void setParticleNonRot()=0;
134  virtual void tagParticleNearestTo()=0;
135  virtual void moveSingleNode()=0;
136  virtual void moveTaggedNodes()=0;
137  virtual void translateMeshBy(const std::string &meshName, const Vec3 &translation)=0;
138 
139  virtual void setTimer(MpiWTimers &timers) = 0;
140 
141  virtual void do2dCalculations(bool do2d) = 0;
142 
143  // field functions
144  virtual void countParticles()=0;
145 
146  // "new" field functions
147  virtual void addScalarParticleField()=0;
148  virtual void addVectorParticleField()=0;
149  virtual void addScalarInteractionField()=0;
150  virtual void addScalarHistoryInteractionField()=0;
151  virtual void addVectorInteractionField()=0;
152  virtual void addVectorTriangleField()=0;
153  virtual void addScalarTriangleField()=0;
154  virtual void sendFieldData()=0;
155  virtual void addVectorWallField()=0;
156 
157  // output
158  virtual void printStruct()=0;
159  virtual void printData()=0;
160  virtual void printTimes()=0;
161 
162  // -- mesh data exchange --
163  virtual void getMeshNodeRef()=0;
164  virtual void getMeshFaceRef()=0;
165  virtual void getMesh2DStress()=0;
166  virtual void getTriMeshForce()=0;
167  virtual void getParticleData(const IdVector &particleIdVector)=0;
168 
169  // checkpointing
170  virtual void loadCheckPointData(std::istream&){};
171 };
172 
173 #endif //__ASUBLATTICE_H
virtual void addMesh2DIG()=0
virtual std::pair< int, Vec3 > getParticlePosn(int particleId)=0
virtual void checkNeighbors()=0
virtual void addShortBondedIG()=0
std::pair< int, int > ParticleIdPair
Definition: ASubLattice.h:46
virtual void getMeshNodeRef()=0
Definition: vec3.h:46
virtual void setTimeStepSize(double dt)=0
virtual void setParticleNonRot()=0
virtual void oneStep()=0
virtual void receiveConnections()=0
virtual void addTriMeshIG()=0
virtual int getNumParticles()=0
virtual void addTaggedPairIG()=0
virtual void setTimer(MpiWTimers &timers)=0
virtual void getParticleData(const IdVector &particleIdVector)=0
virtual void setParticleVelocity()=0
virtual void addVectorTriangleField()=0
virtual void getTriMeshForce()=0
virtual void exchangePos()=0
virtual void moveTaggedNodes()=0
void setNTSize(int)
Definition: ASubLattice.cpp:25
virtual void addTriMesh()=0
virtual void addElasticWIG()=0
virtual void printStruct()=0
virtual void setParticleAngularVelocity()
Definition: ASubLattice.h:131
virtual void setExIG()=0
virtual void addPairIG()=0
virtual ~ASubLattice()
Definition: ASubLattice.cpp:17
virtual void moveSingleNode()=0
virtual void addESphereBodyIG()=0
virtual void moveParticleTo()=0
virtual void translateMeshBy(const std::string &meshName, const Vec3 &translation)=0
virtual void addRotBondedIG()=0
std::vector< ParticleIdPair > ParticleIdPairVector
Definition: ASubLattice.h:47
virtual void getWallForce()=0
virtual void addBondedIG()=0
virtual void loadCheckPointData(std::istream &)
Definition: ASubLattice.h:170
virtual void applyForceToWall()=0
virtual void printTimes()=0
virtual void addRotThermBondedIG()=0
virtual void do2dCalculations(bool do2d)=0
virtual void updateInteractions()=0
virtual void initComplex()
Definition: ASubLattice.cpp:33
virtual void receiveParticles()=0
virtual void addWall()=0
virtual void printData()=0
virtual void moveSphereBodyBy()=0
virtual void setParticleDensity()=0
virtual void setParticleType(const std::string &particleType)
Definition: ASubLattice.h:52
virtual void addSphereBody()=0
virtual void getMeshFaceRef()=0
virtual const MPI_Comm & getWorkerComm() const =0
virtual void addBondedWIG()=0
virtual void setTaggedParticleVel()=0
abstract base class for communicator
Definition: comm.h:46
virtual void addBondedMesh2DIG()=0
virtual void sendFieldData()=0
virtual void moveSingleParticleTo(int particleId, const Vec3 &posn)=0
virtual void addScalarTriangleField()=0
virtual void moveWallBy()=0
virtual void initNeighborTable(const Vec3 &, const Vec3 &)=0
virtual void addDamping()=0
virtual void addVectorParticleField()=0
virtual void removeIG()=0
virtual void addMesh2D()=0
virtual std::pair< double, int > findParticleNearestTo(const Vec3 &pt)=0
virtual void getWallPos()=0
virtual void addDirBondedWIG()=0
virtual void setVelocityOfWall()=0
virtual vector< int > getCommDims() const =0
virtual void addBondedTriMeshIG()=0
virtual void countParticles()=0
Definition: CheckPointable.h:26
virtual void setWallNormal()=0
virtual const std::string & getParticleType() const
Definition: ASubLattice.h:56
Abstract base class for sublattices.
Definition: ASubLattice.h:36
virtual void tagParticleNearestTo()=0
virtual void rebuildParticleArray()=0
virtual void getMesh2DStress()=0
virtual vector< int > getCommCoords() const =0
Definition: Timer.h:86
virtual void getSphereBodyForce()=0
virtual void moveTaggedParticlesBy()=0
virtual void setParticleNonDynamic()=0
virtual void addCappedBondedIG()=0
std::string m_particleType
Definition: ASubLattice.h:39
std::vector< int > IdVector
Definition: ASubLattice.h:48
virtual void searchNeighbors()=0
virtual void addScalarInteractionField()=0
virtual void addScalarParticleField()=0
virtual void addVectorInteractionField()=0
virtual void addSingleIG()=0
virtual void addVectorWallField()=0
virtual void rebuildInteractions()=0
virtual void addViscWIG()=0
virtual void getSphereBodyPos()=0
virtual void addScalarHistoryInteractionField()=0
virtual void addTaggedElasticWIG()=0