ESyS-Particle  2.3
GeometryReader.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 
14 #ifndef ESYS_LSMGEOMETRYREADER_H
15 #define ESYS_LSMGEOMETRYREADER_H
16 
17 #include "Foundation/vec3.h"
19 #include "Geometry/GeometryInfo.h"
21 
22 #include <string>
23 #include <vector>
24 #include <iostream>
25 
26 typedef std::vector<bool> BoolVector;
27 typedef std::vector<int> IntVector;
28 typedef std::vector<Vec3> Vec3Vector;
29 
33 namespace esys
34 {
38  namespace lsm
39  {
40  class ParticleIterator : public IStreamIterator<SimpleParticleData>
41  {
42  public:
44 
45  ParticleIterator(std::istream &iStream, int numElements, bool is2d = true)
46  : IStreamIterator<SimpleParticleData>(iStream, numElements),
47  m_is2d(is2d)
48  {
49  }
50 
51  protected:
52  virtual void readDataFromStream()
53  {
55 
56  double mass = M_PI*m_data.getRadius() * m_data.getRadius();
57  if (!m_is2d)
58  {
59  mass *= (4.0/3.0)*m_data.getRadius();
60  }
61  m_data.setMass(mass);
62  }
63 
64  private:
65  bool m_is2d;
66  };
67 
71  class ParticleReader : public IterativeReader<ParticleIterator>
72  {
73  public:
77  ParticleReader(std::istream &iStream, bool is2d);
78 
84  virtual void initialise();
85 
89  const std::string &getParticleType();
90 
91  protected:
93 
94  private:
95  std::string m_particleType;
96  bool m_is2d;
97  };
98 
103  {
104  public:
107 
109 
110  SimpleConnectionData(Id p1Id, Id p2Id, Tag tag);
111 
112  bool operator==(const SimpleConnectionData &particleData) const;
113 
114  const Id &getP1Id() const;
115 
116  const Id &getP2Id() const;
117 
118  const Tag &getTag() const;
119 
120  void read(std::istream &istream);
121 
122  void write(std::ostream &write) const;
123 
124  private:
127  Tag m_tag;
128  };
129 
130  std::istream &operator>>(std::istream &iStream, SimpleConnectionData &connectionData);
131  std::ostream &operator<<(std::ostream &oStream, const SimpleConnectionData &connectionData);
132 
136  class ConnectionReader : public IterativeReader<IStreamIterator<SimpleConnectionData> >
137  {
138  public:
142  ConnectionReader(std::istream &iStream);
143 
149  virtual void initialise();
150 
151  private:
152  };
153 
159  {
160  public:
171  GeometryReader(const std::string &fileName);
172 
181  GeometryReader(std::istream &iStream);
182 
186  virtual ~GeometryReader();
187 
192  const std::string &getFileName() const;
193 
197  const std::string &getParticleType();
198 
203  const GeometryInfo &getGeometryInfo() const;
204 
208  ParticleIterator &getParticleIterator();
209 
213  ConnectionIterator &getConnectionIterator();
214 
215  protected:
219  void initialise();
220 
221  private:
222  GeometryReader(const GeometryReader &geoReader);
223  GeometryReader &operator=(const GeometryReader &geoReader) const;
224 
225  class Impl;
226 
227  Impl *m_pImpl;
228  };
229  } // namespace lsm
230 } // namespace esys
231 
232 #endif
bool m_is2d
Definition: GeometryReader.h:96
void setMass(double mass)
Definition: SimpleParticleData.hpp:144
const std::string & getParticleType()
Definition: GeometryReader.cpp:59
virtual void initialise()
Definition: GeometryReader.cpp:34
ParticleIterator & getParticleIterator()
Definition: GeometryReader.cpp:281
ParticleReader(std::istream &iStream, bool is2d)
Definition: GeometryReader.cpp:28
Id m_particle2Id
Definition: GeometryReader.h:126
Definition: GeometryReader.cpp:166
ConnectionReader(std::istream &iStream)
Definition: GeometryReader.cpp:142
ParticleIterator(std::istream &iStream, int numElements, bool is2d=true)
Definition: GeometryReader.h:45
virtual ParticleIterator * createNewIterator()
Definition: GeometryReader.cpp:54
virtual void initialise()
Definition: GeometryReader.cpp:147
const Id & getP2Id() const
Definition: GeometryReader.cpp:102
Impl * m_pImpl
Definition: GeometryReader.h:225
Definition: GeometryReader.h:102
std::istream & operator>>(std::istream &iStream, SimpleConnectionData &connectionData)
Definition: GeometryReader.cpp:128
Id m_particle1Id
Definition: GeometryReader.h:125
int Id
Definition: SimpleParticleData.h:30
Definition: GeometryReader.h:158
Definition: GeometryInfo.h:33
Definition: SimpleParticleData.h:27
Definition: CheckPointable.cpp:16
Definition: GeometryReader.h:71
std::string m_particleType
Definition: GeometryReader.h:95
Tag m_tag
Definition: GeometryReader.h:127
SimpleParticleData::Tag Tag
Definition: GeometryReader.h:106
virtual void readDataFromStream()
Definition: GeometryReader.h:52
Definition: IterativeReader.h:74
std::vector< int > IntVector
Definition: GeometryReader.h:27
std::vector< Vec3 > Vec3Vector
Definition: GeometryReader.h:28
double getRadius() const
Definition: SimpleParticleData.hpp:134
GeometryReader(const std::string &fileName)
Definition: GeometryReader.cpp:249
std::vector< bool > BoolVector
Definition: GeometryReader.h:26
Definition: IterativeReader.h:28
virtual ~GeometryReader()
Definition: GeometryReader.cpp:261
Definition: GeometryReader.h:40
SimpleConnectionData()
Definition: GeometryReader.cpp:69
const Tag & getTag() const
Definition: GeometryReader.cpp:107
ParticleReader::Iterator ParticleIterator
Definition: GeometryReader.h:161
void read(std::istream &istream)
Definition: GeometryReader.cpp:112
bool operator==(const SimpleConnectionData &particleData) const
Definition: GeometryReader.cpp:83
const Id & getP1Id() const
Definition: GeometryReader.cpp:97
void write(std::ostream &write) const
Definition: GeometryReader.cpp:120
const std::string & getParticleType()
Definition: GeometryReader.cpp:276
SimpleParticleData::Id Id
Definition: GeometryReader.h:105
virtual void readDataFromStream()
Definition: IterativeReader.hpp:37
SimpleParticleData m_data
Definition: IterativeReader.h:60
int Tag
Definition: SimpleParticleData.h:31
ConnectionIterator & getConnectionIterator()
Definition: GeometryReader.cpp:286
const std::string & getFileName() const
Definition: GeometryReader.cpp:271
GeometryReader & operator=(const GeometryReader &geoReader) const
bool m_is2d
Definition: GeometryReader.h:65
IStreamIterator< SimpleParticleData >::value_type value_type
Definition: GeometryReader.h:43
Definition: GeometryReader.h:136
ConnectionReader::Iterator ConnectionIterator
Definition: GeometryReader.h:162
const GeometryInfo & getGeometryInfo() const
Definition: GeometryReader.cpp:266
std::ostream & operator<<(std::ostream &oStream, const SimpleConnectionData &connectionData)
Definition: GeometryReader.cpp:134