ESyS-Particle  2.3
SubLattice.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 __SUBLATTICE_H
14 #define __SUBLATTICE_H
15 
16 // -- project includes --
17 
18 #include "Parallel/mpibuf.h"
19 #include "Parallel/mpivbuf.h"
20 #include "Parallel/ASubLattice.h"
21 #include "Parallel/LatticeParam.h"
22 
23 #include "Foundation/Timer.h"
24 
25 #include "Model/TriMesh.h"
26 #include "Model/Mesh2D.h"
27 
28 // -- interactions --
29 #include "Model/Interaction.h"
32 #include "Model/ViscWallIG.h"
34 
38 
39 // -- fields --
40 #include "Fields/FieldSlave.h"
44 
45 //--- TML includes ---
46 #include "tml/comm/comm.h"
47 #include "tml/comm/comm_world.h"
48 
49 //--- MPI includes ---
50 #include <mpi.h>
51 
52 //--- STL includes ---
53 #include <vector>
54 #include <map>
55 #include <string>
56 
57 using std::vector;
58 using std::map;
59 using std::string;
60 
61 template <class T> class ParallelParticleArray;
63 
67 template <typename T>
68 class TSubLattice : public ASubLattice
69 {
70  protected:
72  // -- particles storage--
73  ParticleArray *m_ppa;
74 
75  // -- interaction storage --
76  map<string,AParallelInteractionStorage*> m_dpis;
77  map<string,AParallelInteractionStorage*> m_bpis;
78 
79  typedef map<string,AInteractionGroup<T>*> NameIGroupMap;
81 
82  // -- special interaction groups --
83  map<string,AParallelInteractionStorage*> m_damping;
84  map<string,AWallInteractionGroup<T>*> m_WIG;
85  map<string,CWall*> m_walls;
86  map<string,TriMesh*> m_mesh;
87  map<string,Mesh2D*> m_mesh2d;
88 
89  // -- parameters --
90  double m_dt; // time step for integration
91  double m_nrange; // search range for neighbor table
92  // double m_rmax; // max. particle radius
93  double m_alpha; // search range padding
94 
95  int m_last_ns; // timestamp of last neighborsearch
96 
97  // Temporary storage of connections
98  map<int, vector<int> > m_temp_conn;
99 
100  // -- MPI --
101  int m_rank;
102  MPI_Comm m_comm;
104  MPI_Comm m_worker_comm;
106  // int m_num_workers;
112 
113  // -- times --
114  double packtime;
115  double unpacktime;
116  double commtime;
117  double forcetime;
118 
119  // -- fields --
120 
121  // -- "new" fields --
122  map<int,AFieldSlave*> m_field_slaves;
123 
125 
126  // -- private functions --
127  void calcForces();
128  void zeroForces();
129  void integrate(double);
130  void integrateTherm(double dt);
131  void zeroHeat();
132  void thermExpansion();
133  void calcHeatFrict();
134  void calcHeatTrans();
135 
136  // functions doing the actual work adding interaction groups
137  virtual bool doAddPIG(const string&,const string&,CVarMPIBuffer&,bool tagged=false);
138  virtual bool doAddDamping(const string&,CVarMPIBuffer&);
139 
140  public:
141  TSubLattice(const esys::lsm::CLatticeParam &prm, int rank, MPI_Comm comm, MPI_Comm worker_comm);
142  virtual ~TSubLattice();
143 
144  virtual void setTimeStepSize(double dt);
145 
146  virtual vector<int> getCommCoords() const {return m_ppa->getCommCoords();};
147  virtual vector<int> getCommDims() const {return m_ppa->getCommDims();};
148 
149  virtual void receiveParticles();
150  virtual void receiveConnections();
151 
152  virtual const MPI_Comm &getWorkerComm() const {return m_worker_comm;}
153 
154  virtual void initNeighborTable(const Vec3&,const Vec3&);
155  virtual void initNeighborTable(const Vec3&,const Vec3&,const vector<bool>&);
156  virtual void addWall();
157  virtual void addElasticWIG();
158  virtual void addBondedWIG();
159  virtual void addDirBondedWIG();
160  virtual void addViscWIG();
161  virtual void addTaggedElasticWIG();
162  virtual void addTriMesh();
163  virtual void addTriMeshIG();
164  virtual void addBondedTriMeshIG();
165  virtual void addMesh2D();
166  virtual void addMesh2DIG();
167  virtual void addBondedMesh2DIG();
168  virtual void addPairIG();
169  virtual void addTaggedPairIG();
170  virtual void addSingleIG();
171  virtual void addBondedIG();
172  virtual void addCappedBondedIG();
173  virtual void addShortBondedIG();
174  virtual void addRotBondedIG();
175  virtual void addRotThermBondedIG();
176  virtual void addDamping();
177  virtual void setExIG();
178  virtual void removeIG();
179  virtual void getWallPos();
180  virtual void getWallForce();
181 
182  virtual void oneStep();
183  virtual void oneStepTherm();
184  virtual void exchangePos();
185  void setTimeStep(double dt){m_dt=dt;};
186 
187  virtual void rebuildParticleArray();
188  virtual void rebuildInteractions();
189  virtual void searchNeighbors();
190  virtual void updateInteractions();
191  virtual void checkNeighbors();
192  void resetDisplacements();
193 
194  virtual void do2dCalculations(bool do2d);
195  virtual int getNumParticles();
196 
197  std::pair<double, int> findParticleNearestTo(const Vec3 &pt);
198 
199  std::pair<int, Vec3> getParticlePosn(int particleId);
200 
201  AParallelInteractionStorage *findPis(const std::string &groupName);
202 
203 // virtual ParticleIdPairVector getBondGroupIdPairs(const std::string &groupName);
204 
205  template <typename TmplPis>
206  ParticleIdPairVector getBondGroupIdPairs(TmplPis *pBondPis);
207 
208  virtual void moveParticleTo();
209  virtual void moveTaggedParticlesBy();
210  virtual void moveSingleParticleTo(int particleId, const Vec3 &posn);
211  virtual void moveWallBy();
212  virtual void setWallNormal();
213  virtual void applyForceToWall();
214  virtual void setParticleVelocity();
215  virtual void setVelocityOfWall();
216  virtual void setParticleNonDynamic();
217  virtual void setParticleNonRot();
218  virtual void setParticleNonTrans();
219  virtual void setParticleDensity();
220  virtual void setTaggedParticleVel();
221  virtual void tagParticleNearestTo();
222  virtual void moveSingleNode();
223  virtual void moveTaggedNodes();
224  virtual void translateMeshBy(const std::string &meshName, const Vec3 &translation);
225 
226  virtual void sendDataToMaster();
227  virtual void countParticles();
228 
229  virtual void printStruct();
230  virtual void printData();
231  virtual void printTimes();
232 
233  //-- "new" field functions --
234  virtual void addScalarParticleField();
235  virtual void addVectorParticleField();
236  virtual void addScalarInteractionField();
237  virtual void addVectorInteractionField();
238  virtual void addScalarTriangleField();
239  virtual void addVectorTriangleField();
240  virtual void sendFieldData();
241  virtual void addVectorWallField();
242 
243  // -- checkpointing --
244  virtual void saveSnapShotData(std::ostream &oStream);
245  virtual void saveCheckPointData(std::ostream &oStream);
246  virtual void loadCheckPointData(std::istream &iStream);
247 
248  // -- timer --
249  virtual void setTimer(MpiWTimers &timers) {m_pTimers = &timers;}
250 
251  // -- mesh data exchange --
252  virtual void getMeshNodeRef();
253  virtual void getMeshFaceRef();
254  virtual void getMesh2DStress();
255  virtual void getTriMeshForce();
256  virtual void getParticleData(const IdVector &particleIdVector);
257 };
258 
259 #include "Parallel/SubLattice.hpp"
260 
261 #endif
virtual void addBondedWIG()
Definition: SubLattice.hpp:468
virtual void moveSingleNode()
Definition: SubLattice.hpp:2043
Definition: LatticeParam.h:29
map< string, AParallelInteractionStorage * > m_bpis
dynamic interactions
Definition: SubLattice.h:77
virtual void printData()
Definition: SubLattice.hpp:2453
virtual void addScalarParticleField()
Definition: SubLattice.hpp:2476
virtual void printTimes()
Definition: SubLattice.hpp:2460
virtual void addDirBondedWIG()
Definition: SubLattice.hpp:496
virtual void addScalarTriangleField()
Definition: SubLattice.hpp:2737
virtual void getWallForce()
Definition: SubLattice.hpp:555
virtual void addSingleIG()
Definition: SubLattice.hpp:1184
double m_alpha
Definition: SubLattice.h:93
virtual void setTimer(MpiWTimers &timers)
Definition: SubLattice.h:249
virtual ~TSubLattice()
Definition: SubLattice.hpp:171
int m_last_ns
Definition: SubLattice.h:95
virtual int getNumParticles()
Definition: SubLattice.hpp:231
Definition: vec3.h:46
TML_Comm m_tml_comm
Definition: SubLattice.h:103
virtual void addScalarInteractionField()
Definition: SubLattice.hpp:2549
double commtime
Definition: SubLattice.h:116
void resetDisplacements()
Definition: SubLattice.hpp:1985
double m_dt
Definition: SubLattice.h:90
virtual void addShortBondedIG()
Definition: SubLattice.hpp:1421
virtual void addVectorWallField()
Definition: SubLattice.hpp:2767
virtual bool doAddPIG(const string &, const string &, CVarMPIBuffer &, bool tagged=false)
Definition: SubLattice.hpp:660
virtual void exchangePos()
Definition: SubLattice.hpp:1546
virtual void moveParticleTo()
Definition: SubLattice.hpp:2002
void integrate(double)
Definition: SubLattice.hpp:1683
void setTimeStep(double dt)
Definition: SubLattice.h:185
MPI_Comm m_comm
Definition: SubLattice.h:102
TSubLattice(const esys::lsm::CLatticeParam &prm, int rank, MPI_Comm comm, MPI_Comm worker_comm)
Definition: SubLattice.hpp:110
virtual void addMesh2D()
Definition: SubLattice.hpp:1038
ParallelParticleArray< T > ParticleArray
Definition: SubLattice.h:71
double packtime
Definition: SubLattice.h:114
std::vector< unsigned int > ProcessDims
Definition: LatticeParam.h:32
map< int, vector< int > > m_temp_conn
Definition: SubLattice.h:98
virtual void setParticleNonTrans()
Definition: SubLattice.hpp:2265
MpiWTimers * m_pTimers
Definition: SubLattice.h:124
virtual void addCappedBondedIG()
Definition: SubLattice.hpp:1347
vector< int > getCommDims() const
Definition: pp_array.h:103
ParticleIdPairVector getBondGroupIdPairs(TmplPis *pBondPis)
map< string, AParallelInteractionStorage * > m_dpis
Definition: SubLattice.h:76
virtual void rebuildParticleArray()
Definition: SubLattice.hpp:1820
virtual void addElasticWIG()
Definition: SubLattice.hpp:390
parrallel particle storage array with neighborsearch and variable exchange
Definition: SubLattice.h:61
virtual void checkNeighbors()
Definition: SubLattice.hpp:1933
NameIGroupMap m_singleParticleInteractions
Definition: SubLattice.h:80
std::vector< ParticleIdPair > ParticleIdPairVector
Definition: ASubLattice.h:47
virtual void addVectorParticleField()
Definition: SubLattice.hpp:2511
virtual void setVelocityOfWall()
Definition: SubLattice.hpp:2354
void thermExpansion()
Definition: SubLattice.hpp:1735
virtual void setTaggedParticleVel()
Definition: SubLattice.hpp:2280
virtual void setParticleDensity()
Definition: SubLattice.hpp:2389
virtual void receiveParticles()
Definition: SubLattice.hpp:317
virtual void getMeshNodeRef()
Definition: SubLattice.hpp:3089
virtual void setParticleNonRot()
Definition: SubLattice.hpp:2249
virtual void applyForceToWall()
Definition: SubLattice.hpp:2334
virtual void setTimeStepSize(double dt)
Definition: SubLattice.hpp:1639
MPI_Comm m_worker_comm
MPI communicator between workers (excl. master)
Definition: SubLattice.h:104
map< string, AParallelInteractionStorage * > m_damping
Body/gravitational force interactions.
Definition: SubLattice.h:83
virtual void addTriMesh()
Definition: SubLattice.hpp:897
virtual void initNeighborTable(const Vec3 &, const Vec3 &)
Definition: SubLattice.hpp:199
double unpacktime
Definition: SubLattice.h:115
AParallelInteractionStorage * findPis(const std::string &groupName)
void calcHeatTrans()
Definition: SubLattice.hpp:1789
virtual const MPI_Comm & getWorkerComm() const
Definition: SubLattice.h:152
virtual void addPairIG()
Definition: SubLattice.hpp:614
virtual void sendDataToMaster()
Definition: SubLattice.hpp:2407
map< string, AInteractionGroup< T > * > NameIGroupMap
persistent interactions
Definition: SubLattice.h:79
virtual void moveWallBy()
Definition: SubLattice.hpp:2296
virtual void addTaggedPairIG()
Definition: SubLattice.hpp:635
abstract base class for parallel interaction storage array
Definition: pi_storage.h:44
virtual void translateMeshBy(const std::string &meshName, const Vec3 &translation)
Definition: SubLattice.hpp:2096
virtual void addRotThermBondedIG()
Definition: SubLattice.hpp:1411
virtual void countParticles()
Definition: SubLattice.hpp:2429
virtual void getTriMeshForce()
Definition: SubLattice.hpp:3203
virtual void addBondedMesh2DIG()
Definition: SubLattice.hpp:1125
virtual vector< int > getCommCoords() const
Definition: SubLattice.h:146
virtual void addBondedTriMeshIG()
Definition: SubLattice.hpp:982
virtual void saveCheckPointData(std::ostream &oStream)
Definition: SubLattice.hpp:2925
abstract base class for communicator
Definition: comm.h:46
map< string, AWallInteractionGroup< T > * > m_WIG
Definition: SubLattice.h:84
virtual void addMesh2DIG()
Definition: SubLattice.hpp:1077
void zeroHeat()
Definition: SubLattice.hpp:1747
map< int, AFieldSlave * > m_field_slaves
Definition: SubLattice.h:122
ParticleArray * m_ppa
Definition: SubLattice.h:73
MPI send/recv buffer with automagically adjusted size.
Definition: mpivbuf.h:34
virtual void removeIG()
Definition: SubLattice.hpp:1510
double forcetime
Definition: SubLattice.h:117
virtual void oneStepTherm()
Definition: SubLattice.hpp:1711
virtual void searchNeighbors()
Definition: SubLattice.hpp:1864
void calcForces()
Definition: SubLattice.hpp:1595
virtual void addTaggedElasticWIG()
Definition: SubLattice.hpp:426
void integrateTherm(double dt)
Definition: SubLattice.hpp:1726
virtual void sendFieldData()
Definition: SubLattice.hpp:2852
virtual void addDamping()
Definition: SubLattice.hpp:1234
virtual void saveSnapShotData(std::ostream &oStream)
Definition: SubLattice.hpp:2877
virtual void receiveConnections()
Definition: SubLattice.hpp:340
virtual void addRotBondedIG()
Definition: SubLattice.hpp:1405
TML_Comm m_tml_worker_comm
TML version of the communicator between workers (excl. master)
Definition: SubLattice.h:105
virtual void updateInteractions()
Definition: SubLattice.hpp:1885
virtual void addBondedIG()
Definition: SubLattice.hpp:1300
virtual void addWall()
Definition: SubLattice.hpp:371
esys::lsm::CLatticeParam::ProcessDims m_dims
Definition: SubLattice.h:111
map< string, Mesh2D * > m_mesh2d
Definition: SubLattice.h:87
virtual void rebuildInteractions()
Definition: SubLattice.hpp:1829
vector< int > getCommCoords() const
Definition: pp_array.h:102
virtual void addTriMeshIG()
Definition: SubLattice.hpp:935
virtual void loadCheckPointData(std::istream &iStream)
Definition: SubLattice.hpp:2991
virtual void getMesh2DStress()
Definition: SubLattice.hpp:3173
void calcHeatFrict()
Definition: SubLattice.hpp:1771
virtual void do2dCalculations(bool do2d)
Definition: SubLattice.hpp:225
virtual void setWallNormal()
Definition: SubLattice.hpp:2315
int m_rank
rank in m_comm
Definition: SubLattice.h:101
virtual void addVectorInteractionField()
Definition: SubLattice.hpp:2618
virtual void moveTaggedNodes()
Definition: SubLattice.hpp:2072
Abstract base class for sublattices.
Definition: ASubLattice.h:36
std::pair< int, Vec3 > getParticlePosn(int particleId)
Definition: SubLattice.hpp:2142
virtual void setExIG()
Definition: SubLattice.hpp:1477
virtual void getMeshFaceRef()
Definition: SubLattice.hpp:3131
virtual void printStruct()
Definition: SubLattice.hpp:2443
Definition: Timer.h:86
virtual void setParticleNonDynamic()
Definition: SubLattice.hpp:2233
map< string, TriMesh * > m_mesh
Definition: SubLattice.h:86
virtual vector< int > getCommDims() const
Definition: SubLattice.h:147
virtual void addVectorTriangleField()
Definition: SubLattice.hpp:2692
virtual void addViscWIG()
Definition: SubLattice.hpp:586
Class for a Sublattice.
Definition: SubLattice.h:68
std::pair< double, int > findParticleNearestTo(const Vec3 &pt)
Definition: SubLattice.hpp:2109
std::vector< int > IdVector
Definition: ASubLattice.h:48
virtual void moveTaggedParticlesBy()
Definition: SubLattice.hpp:2019
void zeroForces()
Definition: SubLattice.hpp:1559
virtual bool doAddDamping(const string &, CVarMPIBuffer &)
Definition: SubLattice.hpp:1257
double m_nrange
Definition: SubLattice.h:91
virtual void oneStep()
Definition: SubLattice.hpp:1695
virtual void moveSingleParticleTo(int particleId, const Vec3 &posn)
Definition: SubLattice.hpp:2033
virtual void setParticleVelocity()
Definition: SubLattice.hpp:2373
virtual void tagParticleNearestTo()
Definition: SubLattice.hpp:2206
map< string, CWall * > m_walls
Definition: SubLattice.h:85
virtual void getParticleData(const IdVector &particleIdVector)
Definition: SubLattice.hpp:2166
virtual void getWallPos()
Definition: SubLattice.hpp:524