ESyS-Particle  2.3
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 
95  virtual const MPI_Comm &getWorkerComm() const = 0;
96 
97  virtual void rebuildParticleArray()=0;
98  virtual void rebuildInteractions()=0;
99  virtual void searchNeighbors()=0;
100  virtual void checkNeighbors()=0;
101 
102  virtual void updateInteractions()=0;
103 
104  virtual int getNumParticles() = 0;
105 
106  virtual std::pair<double, int> findParticleNearestTo(const Vec3 &pt) = 0;
107 
108  virtual std::pair<int, Vec3> getParticlePosn(int particleId) = 0;
109 
110 // virtual ParticleIdPairVector getBondGroupIdPairs(const std::string &groupName) = 0;
111 
112  virtual void oneStep()=0;
113  virtual void exchangePos()=0;
114 
115  // moving stuff around
116  virtual void moveParticleTo()=0;
117  virtual void moveTaggedParticlesBy() = 0;
118  virtual void moveSingleParticleTo(int particleId, const Vec3 &posn)=0;
119  virtual void moveWallBy()=0;
120  virtual void setWallNormal()=0;
121  virtual void applyForceToWall()=0;
122  virtual void setVelocityOfWall()=0;
123  virtual void setParticleVelocity()=0;
124  virtual void setParticleDensity()=0;
125  virtual void setTaggedParticleVel()=0;
126  virtual void setParticleAngularVelocity(){};
127  virtual void setParticleNonDynamic()=0;
128  virtual void setParticleNonRot()=0;
129  virtual void tagParticleNearestTo()=0;
130  virtual void moveSingleNode()=0;
131  virtual void moveTaggedNodes()=0;
132  virtual void translateMeshBy(const std::string &meshName, const Vec3 &translation)=0;
133 
134  virtual void setTimer(MpiWTimers &timers) = 0;
135 
136  virtual void do2dCalculations(bool do2d) = 0;
137 
138  // field functions
139  virtual void countParticles()=0;
140 
141  // "new" field functions
142  virtual void addScalarParticleField()=0;
143  virtual void addVectorParticleField()=0;
144  virtual void addScalarInteractionField()=0;
145  virtual void addVectorInteractionField()=0;
146  virtual void addVectorTriangleField()=0;
147  virtual void addScalarTriangleField()=0;
148  virtual void sendFieldData()=0;
149  virtual void addVectorWallField()=0;
150 
151  // output
152  virtual void printStruct()=0;
153  virtual void printData()=0;
154  virtual void printTimes()=0;
155 
156  // -- mesh data exchange --
157  virtual void getMeshNodeRef()=0;
158  virtual void getMeshFaceRef()=0;
159  virtual void getMesh2DStress()=0;
160  virtual void getTriMeshForce()=0;
161  virtual void getParticleData(const IdVector &particleIdVector)=0;
162 
163  // checkpointing
164  virtual void loadCheckPointData(std::istream&){};
165 };
166 
167 #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:126
virtual void setExIG()=0
virtual void addPairIG()=0
virtual ~ASubLattice()
Definition: ASubLattice.cpp:17
virtual void moveSingleNode()=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:164
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 setParticleDensity()=0
virtual void setParticleType(const std::string &particleType)
Definition: ASubLattice.h:52
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 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 addTaggedElasticWIG()=0