ESyS-Particle
2.2
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
SubLattice.h
Go to the documentation of this file.
1
2
// //
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 __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
"
30
#include "
Model/EWallInteractionGroup.h
"
31
#include "
Model/BWallInteractionGroup.h
"
32
#include "
Model/ViscWallIG.h
"
33
#include "
Model/SoftBWallInteractionGroup.h
"
34
35
#include "
Model/RotBondedInteraction.h
"
36
#include "
Model/RotElasticInteraction.h
"
37
#include "
Model/RotFricInteraction.h
"
38
39
// -- fields --
40
#include "
Fields/FieldSlave.h
"
41
#include "
Fields/ScalarParticleFieldSlave.h
"
42
#include "
Fields/VectorParticleFieldSlave.h
"
43
#include "
Fields/ScalarInteractionFieldSlave.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
;
62
class
AParallelInteractionStorage
;
63
67
template
<
typename
T>
68
class
TSubLattice
:
public
ASubLattice
69
{
70
protected
:
71
typedef
ParallelParticleArray<T>
ParticleArray
;
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
;
80
NameIGroupMap
m_singleParticleInteractions
;
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
;
103
TML_Comm
m_tml_comm
;
104
MPI_Comm
m_worker_comm
;
105
TML_Comm
m_tml_worker_comm
;
106
// int m_num_workers;
111
esys::lsm::CLatticeParam::ProcessDims
m_dims
;
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
124
MpiWTimers
*
m_pTimers
;
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
addTriMesh
();
162
virtual
void
addTriMeshIG
();
163
virtual
void
addBondedTriMeshIG
();
164
virtual
void
addMesh2D
();
165
virtual
void
addMesh2DIG
();
166
virtual
void
addBondedMesh2DIG
();
167
virtual
void
addPairIG
();
168
virtual
void
addTaggedPairIG
();
169
virtual
void
addSingleIG
();
170
virtual
void
addBondedIG
();
171
virtual
void
addCappedBondedIG
();
172
virtual
void
addShortBondedIG
();
173
virtual
void
addRotBondedIG
();
174
virtual
void
addRotThermBondedIG
();
175
virtual
void
addDamping
();
176
virtual
void
setExIG
();
177
virtual
void
removeIG
();
178
virtual
void
getWallPos
();
179
virtual
void
getWallForce
();
180
181
virtual
void
oneStep
();
182
virtual
void
oneStepTherm
();
183
virtual
void
exchangePos
();
184
void
setTimeStep
(
double
dt){
m_dt
=dt;};
185
186
virtual
void
rebuildParticleArray
();
187
virtual
void
rebuildInteractions
();
188
virtual
void
searchNeighbors
();
189
virtual
void
updateInteractions
();
190
virtual
void
checkNeighbors
();
191
void
resetDisplacements
();
192
193
virtual
void
do2dCalculations
(
bool
do2d);
194
virtual
int
getNumParticles
();
195
196
std::pair<double, int>
findParticleNearestTo
(
const
Vec3
&pt);
197
198
std::pair<int, Vec3>
getParticlePosn
(
int
particleId);
199
200
AParallelInteractionStorage
*
findPis
(
const
std::string &groupName);
201
202
// virtual ParticleIdPairVector getBondGroupIdPairs(const std::string &groupName);
203
204
template
<
typename
TmplPis>
205
ParticleIdPairVector
getBondGroupIdPairs
(TmplPis *pBondPis);
206
207
virtual
void
moveParticleTo
();
208
virtual
void
moveTaggedParticlesBy
();
209
virtual
void
moveSingleParticleTo
(
int
particleId,
const
Vec3
&posn);
210
virtual
void
moveWallBy
();
211
virtual
void
setWallNormal
();
212
virtual
void
applyForceToWall
();
213
virtual
void
setParticleVelocity
();
214
virtual
void
setVelocityOfWall
();
215
virtual
void
setParticleNonDynamic
();
216
virtual
void
setParticleNonRot
();
217
virtual
void
setParticleNonTrans
();
218
virtual
void
setParticleDensity
();
219
virtual
void
setTaggedParticleVel
();
220
virtual
void
tagParticleNearestTo
();
221
virtual
void
moveSingleNode
();
222
virtual
void
moveTaggedNodes
();
223
virtual
void
translateMeshBy
(
const
std::string &meshName,
const
Vec3
&translation);
224
225
virtual
void
sendDataToMaster
();
226
virtual
void
countParticles
();
227
228
virtual
void
printStruct
();
229
virtual
void
printData
();
230
virtual
void
printTimes
();
231
232
//-- "new" field functions --
233
virtual
void
addScalarParticleField
();
234
virtual
void
addVectorParticleField
();
235
virtual
void
addScalarInteractionField
();
236
virtual
void
addVectorInteractionField
();
237
virtual
void
addScalarTriangleField
();
238
virtual
void
addVectorTriangleField
();
239
virtual
void
sendFieldData
();
240
virtual
void
addVectorWallField
();
241
242
// -- checkpointing --
243
virtual
void
saveSnapShotData
(std::ostream &oStream);
244
virtual
void
saveCheckPointData
(std::ostream &oStream);
245
virtual
void
loadCheckPointData
(std::istream &iStream);
246
247
// -- timer --
248
virtual
void
setTimer
(
MpiWTimers
&timers) {
m_pTimers
= &timers;}
249
250
// -- mesh data exchange --
251
virtual
void
getMeshNodeRef
();
252
virtual
void
getMeshFaceRef
();
253
virtual
void
getMesh2DStress
();
254
virtual
void
getTriMeshForce
();
255
virtual
void
getParticleData
(
const
IdVector
&particleIdVector);
256
};
257
258
#include "
Parallel/SubLattice.hpp
"
259
260
#endif
Parallel
SubLattice.h
Generated on Mon May 6 2013 23:26:30 for ESyS-Particle by
1.8.3.1