ESyS-Particle  4.0.1
CheckPointLoader.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 ESYS_LSMCHECKPOINTLOADER_H
14 #define ESYS_LSMCHECKPOINTLOADER_H
15 
16 #include "Model/BondedInteraction.h"
17 #include "Parallel/IterativeReader.h"
18 #include "Model/Particle.h"
19 #include "Model/BondedInteractionCpData.h"
20 
21 #include <vector>
22 #include <string>
23 #include <fstream>
24 
25 namespace esys
26 {
27  namespace lsm
28  {
29  typedef std::vector<std::string> StringVector;
30 
37  {
38  public:
39  class ParticleData : public CParticle
40  {
41  public:
43  {
44  }
45 
46  void read(std::istream &iStream)
47  {
48  loadCheckPointData(iStream);
49  }
50  };
51 
53  {
54  public:
56  {
57  }
58 
59  void read(std::istream &iStream)
60  {
61  loadCheckPointData(iStream);
62  }
63  };
64 
65  class ParticleReader : public IterativeReader<IStreamIterator<ParticleData> >
66  {
67  public:
68  typedef IterativeReader<IStreamIterator<ParticleData> >::Iterator Iterator;
69 
70  ParticleReader(std::istream &iStream) : IterativeReader<IStreamIterator<ParticleData> >(iStream)
71  {
72  }
73 
74  virtual void initialise()
75  {
76  int numParticles = 0;
77  getIStream() >> numParticles;
78  setNumElements(numParticles);
80  }
81  };
82 
83  class ConnectionReader : public IterativeReader<IStreamIterator<ConnectionData> >
84  {
85  public:
86  ConnectionReader(std::istream &iStream) : IterativeReader<IStreamIterator<ConnectionData> >(iStream)
87  {
88  }
89 
90  virtual void initialise()
91  {
92  int numConnections = 0;
93  getIStream() >> numConnections;
94  setNumElements(numConnections);
96  }
97  };
98 
99  CheckPointLoader(const StringVector &fileNames) : m_fileNames(fileNames)
100  {
101  }
102 
103  template<class TmplLsmData>
104  void loadInto(TmplLsmData &lsmData)
105  {
106  for (
107  StringVector::const_iterator it = m_fileNames.begin();
108  it != m_fileNames.end();
109  it++
110  )
111  {
112  std::ifstream iStream(it->c_str());
113  ParticleReader pReader(iStream);
114  lsmData.template addParticles<ParticleReader::Iterator,CParticle>(pReader.getIterator());
115 
116  int numConnectionGroups = 0;
117  iStream >> numConnectionGroups;
118  for (int i = 0; i < numConnectionGroups; i++) {
119  ConnectionReader cReader(iStream);
120  lsmData.addConnections(cReader.getIterator());
121  }
122  }
123  }
124 
125  private:
126  StringVector m_fileNames;
127  };
128  };
129 };
130 
131 #endif