13 #ifndef __LATTICEMASTER_H
14 #define __LATTICEMASTER_H
18 #include "Parallel/mpibuf.h"
19 #include "Parallel/mpivbuf.h"
20 #include "Parallel/LatticeParam.h"
21 #include "Parallel/RankAndComm.h"
22 #include "Parallel/sublattice_cmd.h"
26 #include "Foundation/console.h"
27 #include "Foundation/Runnable.h"
29 #include "Fields/FieldMaster.h"
30 #include "Fields/MaxTrigger.h"
32 #include "Model/Damping.h"
33 #include "Model/LocalDamping.h"
34 #include "Model/ABCDampingIGP.h"
35 #include "Model/Particle.h"
36 #include "Model/RotParticle.h"
37 #include "Model/RotParticleVi.h"
38 #include "Model/RotThermParticle.h"
39 #include "Model/ElasticInteraction.h"
40 #include "Model/FrictionInteraction.h"
41 #include "Model/FractalFriction.h"
42 #include "Model/AdhesiveFriction.h"
43 #include "Model/HertzianElasticInteraction.h"
44 #include "Model/HertzianViscoElasticFrictionInteraction.h"
45 #include "Model/HertzianViscoElasticInteraction.h"
46 #include "Model/LinearDashpotInteraction.h"
47 #include "Model/MeshData.h"
48 #include "Model/ETriMeshIP.h"
49 #include "Model/BTriMeshIP.h"
50 #include "Model/BMesh2DIP.h"
51 #include "Model/BondedInteraction.h"
52 #include "Model/CappedBondedInteraction.h"
53 #include "Model/RotFricInteraction.h"
54 #include "Model/RotBondedInteraction.h"
55 #include "Model/RotElasticInteraction.h"
56 #include "Model/RotThermFricInteraction.h"
57 #include "Model/RotThermBondedInteraction.h"
58 #include "Model/RotThermElasticInteraction.h"
59 #include "Model/BodyForceGroup.h"
60 #include "Model/EWallInteractionGroup.h"
61 #include "Model/BWallInteractionGroup.h"
62 #include "Model/ViscWallIG.h"
63 #include "Model/SoftBWallInteractionGroup.h"
65 #include <boost/filesystem/path.hpp>
71 #include "tml/comm/comm_world.h"
106 typedef std::vector<int> IntVector;
113 typedef std::vector<std::string> StringVector;
117 const std::string &getExe()
const;
119 boost::filesystem::path getExePath()
const;
121 void setExe(
const std::string &exeName);
123 const StringVector &getArgVector()
const;
125 void setArgVector(
const StringVector &argVector);
127 std::string getCmdLine()
const;
130 std::string m_exeName;
131 StringVector m_argVector;
137 typedef std::vector<esys::lsm::Runnable *> RunnableVector;
138 typedef std::pair<int, int> ParticleIdPair;
139 typedef std::vector<ParticleIdPair> ParticleIdPairVector;
140 typedef std::vector<MeshNodeData> MeshNodeDataVector;
141 typedef std::vector<MeshTriData> MeshTriDataVector;
142 typedef std::pair<MeshNodeDataVector,MeshTriDataVector> TriMeshDataPair;
145 static std::string s_workerExeName;
147 std::string m_timingFileName;
151 esys::lsm::CLatticeParam::ProcessDims m_processDims;
154 typedef std::vector<int> ConnIdVector;
155 map<int,ConnIdVector> m_temp_conn;
156 vector<AFieldMaster*> m_save_fields;
158 double m_x_max,m_x_min,m_y_max,m_y_min,m_z_max,m_z_min;
166 bool m_isInitialized ;
168 std::string m_particle_type;
170 RunnableVector m_preRunnableVector;
171 RunnableVector m_postRunnableVector;
174 MPI_Comm m_global_comm;
176 void runRunnables(RunnableVector::iterator begin, RunnableVector::iterator end);
177 void runPreRunnables();
178 void runPostRunnables();
182 void saveTimingData();
183 TriMeshDataPair
readTriMesh(
const std::string &fileName,
int);
184 TriMeshDataPair
readTriMesh(
const std::string &fileName);
192 void disconnectWorkerProcesses();
198 std::string getLsmVersion()
const
200 return std::string(PACKAGE_VERSION);
203 int getNumWorkerProcesses()
const;
205 int getTimeStep()
const {
return m_t;}
206 double getTimeStepSize()
const {
return m_dt;}
207 void setTimeStepSize(
double dt);
241 void updateInteractions();
259 void addTaggedPairIG(
const CFrictionIGP &prms,
int,
int,
int,
int);
265 void addTaggedPairIG(
const CElasticIGP &prms,
int,
int,
int,
int);
272 const std::string &meshName,
273 const MeshNodeDataVector &mndVector,
274 const MeshTriDataVector &mtdVector
276 void addMesh2D(
const std::string&,
const std::string&,
int);
278 void addTriMesh(
const std::string &meshName,
const std::string &fileName);
291 void addExIG(
const std::string&,
const std::string&);
292 void setNumSteps(
int s);
293 int getNumSteps()
const {
return m_max_ts;};
294 int getSteps()
const {
return m_t;};
296 void addRotBondedIG(
int,
const std::string&,
double,
double,
double,
double,
double,
double,
double,
double,
bool);
315 void moveSingleParticleTo(
int particleId,
const Vec3 &posn);
316 Vec3 getParticlePosn(
int particleId);
339 void saveTimingDataToFile(
const std::string &fileNamePrefix);
355 void setProcessDims(
const esys::lsm::CLatticeParam::ProcessDims &dims);
357 const esys::lsm::CLatticeParam::ProcessDims &getProcessDims()
const;
374 const std::string &getParticleType()
const
376 return m_particle_type;
379 int getNumParticles();
386 void addScalarInteractionSaveField(
const std::string&,
const std::string&,
const std::string&,
const std::string&,
const std::string&,
int,
int,
int,
bool checked=
false);
387 void addVectorInteractionSaveField(
const std::string&,
const std::string&,
const std::string&,
const std::string&,
const std::string&,
int,
int,
int,
bool checked=
false);
388 void addTaggedScalarInteractionSaveField(
const std::string&,
const std::string&,
const std::string&,
const std::string&,
const std::string&,
int,
int,
int,
int,
int,
bool);
389 void addTaggedScalarParticleDistributionSaver(
const std::string&,
const std::string&,
const std::string&,
int,
int,
int,
int,
int,
int,
double,
double,
int);
392 void addVectorWallField(
const string&,
const string&,vector<string>,
const string&,
int,
int,
int);
407 const std::string &fileNamePrefix,
425 const std::string &fileNamePrefix,
435 const char *particleType,
441 const char *particleType,
458 return m_preRunnableVector;
466 return m_preRunnableVector;
480 return m_postRunnableVector;
488 return m_postRunnableVector;
500 const Vec3 &minBBoxPt,
501 const Vec3 &maxBBoxPt,
502 const esys::lsm::IntVector &circDimVector
531 template <
class TmplParticle>
558 template <
class TmplIterator,
class TmplParticle>
569 template <
class TmplIterator>
573 template <
typename TmplVisitor>
574 void visitMeshFaceReferences(
const string &meshName);
576 template <
typename TmplVisitor>
577 void visitMesh2dNodeReferences(
const string &meshName, TmplVisitor &visitor);
579 template <
typename TmplVisitor>
580 void visitMesh2dEdgeStress(
const string &meshName, TmplVisitor &visitor);
582 template <
typename TmplVisitor>
583 void visitTriMeshFaceForce(
584 const string &meshName,
588 typedef std::vector<int> IdVector;
590 template <
typename TmplVisitor,
typename TmplParticle>
591 void visitParticlesOfType(
592 const IdVector &particleIdVector,
596 template <
typename TmplVisitor>
597 void visitParticles(
const IdVector &particleIdVector, TmplVisitor &visitor);
602 #include "Parallel/LatticeMaster.hpp"