ESyS-Particle  4.0.1
ASubLattice.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 __ASUBLATTICE_H
14 #define __ASUBLATTICE_H
15 
16 // -- project includes --
17 #include "Model/EWallInteractionGroup.h"
18 #include "Model/BWallInteractionGroup.h"
19 #include "Model/SoftBWallInteractionGroup.h"
20 #include "Model/ViscWallIG.h"
21 #include "Parallel/CheckPointable.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 initNeighborTable(const Vec3&,const Vec3&)=0;
71  virtual void initNeighborTable(const Vec3&,const Vec3&,const vector<bool>&)=0;
72  virtual void addPairIG()=0;
73  virtual void addTaggedPairIG()=0;
74  virtual void addTriMesh()=0;
75  virtual void addTriMeshIG()=0;
76  virtual void addBondedTriMeshIG()=0;
77  virtual void addMesh2D()=0;
78  virtual void addMesh2DIG()=0;
79  virtual void addBondedMesh2DIG()=0;
80  virtual void addSingleIG()=0;
81  virtual void addBondedIG()=0;
82  virtual void addCappedBondedIG()=0;
83  virtual void addShortBondedIG()=0;
84  virtual void addRotBondedIG()=0;
85  virtual void addRotThermBondedIG()=0;
86  virtual void addDamping()=0;
87  //virtual void addRotDamping()=0;
88  virtual void setExIG()=0;
89  virtual void initComplex();
90  virtual void removeIG()=0;
91  virtual void getWallPos()=0;
92  virtual void getWallForce()=0;
93 
94  virtual const MPI_Comm &getWorkerComm() const = 0;
95 
96  virtual void rebuildParticleArray()=0;
97  virtual void rebuildInteractions()=0;
98  virtual void searchNeighbors()=0;
99  virtual void checkNeighbors()=0;
100 
101  virtual void updateInteractions()=0;
102 
103  virtual int getNumParticles() = 0;
104 
105  virtual std::pair<double, int> findParticleNearestTo(const Vec3 &pt) = 0;
106 
107  virtual std::pair<int, Vec3> getParticlePosn(int particleId) = 0;
108 
109 // virtual ParticleIdPairVector getBondGroupIdPairs(const std::string &groupName) = 0;
110 
111  virtual void oneStep()=0;
112  virtual void exchangePos()=0;
113 
114  // moving stuff around
115  virtual void moveParticleTo()=0;
116  virtual void moveTaggedParticlesBy() = 0;
117  virtual void moveSingleParticleTo(int particleId, const Vec3 &posn)=0;
118  virtual void moveWallBy()=0;
119  virtual void setWallNormal()=0;
120  virtual void applyForceToWall()=0;
121  virtual void setVelocityOfWall()=0;
122  virtual void setParticleVelocity()=0;
123  virtual void setParticleDensity()=0;
124  virtual void setTaggedParticleVel()=0;
125  virtual void setParticleAngularVelocity(){};
126  virtual void setParticleNonDynamic()=0;
127  virtual void setParticleNonRot()=0;
128  virtual void tagParticleNearestTo()=0;
129  virtual void moveSingleNode()=0;
130  virtual void moveTaggedNodes()=0;
131  virtual void translateMeshBy(const std::string &meshName, const Vec3 &translation)=0;
132 
133  virtual void setTimer(MpiWTimers &timers) = 0;
134 
135  virtual void do2dCalculations(bool do2d) = 0;
136 
137  // field functions
138  virtual void countParticles()=0;
139 
140  // "new" field functions
141  virtual void addScalarParticleField()=0;
142  virtual void addVectorParticleField()=0;
143  virtual void addScalarInteractionField()=0;
144  virtual void addVectorInteractionField()=0;
145  virtual void addVectorTriangleField()=0;
146  virtual void addScalarTriangleField()=0;
147  virtual void sendFieldData()=0;
148  virtual void addVectorWallField()=0;
149 
150  // output
151  virtual void printStruct()=0;
152  virtual void printData()=0;
153  virtual void printTimes()=0;
154 
155  // -- mesh data exchange --
156  virtual void getMeshNodeRef()=0;
157  virtual void getMeshFaceRef()=0;
158  virtual void getMesh2DStress()=0;
159  virtual void getTriMeshForce()=0;
160  virtual void getParticleData(const IdVector &particleIdVector)=0;
161 
162  // checkpointing
163  virtual void loadCheckPointData(std::istream&){};
164 };
165 
166 #endif //__ASUBLATTICE_H