ESyS-Particle  2.2.2
ASubLattice.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2013 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 --
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 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
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:125
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:163
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