ESyS-Particle  2.3
PackerGenerators.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_LSMPACKERGENERATORS_H
15 #define ESYS_LSMPACKERGENERATORS_H
16 
17 #include "Foundation/vec3.h"
18 
19 namespace esys
20 {
21  namespace lsm
22  {
26  template <typename TmplParticle>
28  {
29  public:
30  typedef TmplParticle Particle;
31 
32  ConstRadiusGen(double radius);
33 
38  const double &getParticleRadius() const;
39 
44  const double &getMinFitRadius() const;
45 
50  const double &getMaxFitRadius() const;
51 
57  Particle getParticle(const Vec3 &posn) const;
58 
65  Particle getParticle(const Vec3 &posn, const double &maxRadius) const;
66 
70  bool isValidFitRadius(const double &fitRadius) const;
71 
72  private:
73  double m_radius;
74  };
75 
80  template <typename TmplParticle>
82  {
83  public:
84  typedef TmplParticle Particle;
85 
86  RangeRadiusGen(double minFitRadius, double maxFitRadius);
87 
88  virtual ~RangeRadiusGen();
89 
94  const double &getMinFitRadius() const;
95 
100  const double &getMaxFitRadius() const;
101 
105  bool isValidFitRadius(const double &fitRadius) const;
106 
107  private:
110  };
111 
116  template <typename TmplParticle>
117  class RndRadiusGen : public RangeRadiusGen<TmplParticle>
118  {
119  public:
121  typedef typename Inherited::Particle Particle;
122 
123  RndRadiusGen(
124  double minFitRadius,
125  double maxFitRadius
126  );
127 
131  double getRandomRadius() const;
132 
133  Particle getParticle(const Vec3 &posn) const;
134 
135  Particle getParticle(const Vec3 &posn, double suggestedRadius) const;
136 
137  private:
138  };
139 
140  template <typename TmplGrain>
141  class GrainRndRadiusGen : public RndRadiusGen<typename TmplGrain::Particle>
142  {
143  public:
145  typedef TmplGrain Grain;
146  typedef typename Grain::Particle Particle;
147 
148  GrainRndRadiusGen(double minGrainRadius, double maxGrainRadius);
149 
150  virtual ~GrainRndRadiusGen();
151 
152  const double &getMinGrainRadius() const;
153 
154  const double &getMaxGrainRadius() const;
155 
156  virtual Grain getGrain(const Particle &p) = 0;
157  };
158 
159  template <typename TmplGrain>
160  class SingleParticleGrainGen : public GrainRndRadiusGen<TmplGrain>
161  {
162  public:
164  typedef typename Inherited::Grain Grain;
165  typedef typename Grain::Particle Particle;
166 
167  SingleParticleGrainGen(double minGrainRadius, double maxGrainRadius);
168 
169  const double &getMinParticleRadius() const;
170 
171  const double &getMaxParticleRadius() const;
172 
173  virtual Grain getGrain(const Particle &p);
174  };
175  }
176 }
177 
179 
180 #endif
const double & getMinFitRadius() const
Definition: PackerGenerators.hpp:87
virtual Grain getGrain(const Particle &p)
Definition: PackerGenerators.hpp:202
GrainRndRadiusGen(double minGrainRadius, double maxGrainRadius)
Definition: PackerGenerators.hpp:152
RndRadiusGen(double minFitRadius, double maxFitRadius)
Definition: PackerGenerators.hpp:114
Definition: vec3.h:46
double getRandomRadius() const
Definition: PackerGenerators.hpp:122
double m_radius
Definition: PackerGenerators.h:73
double m_minFitRadius
Definition: PackerGenerators.h:108
virtual ~RangeRadiusGen()
Definition: PackerGenerators.hpp:82
Grain::Particle Particle
Definition: PackerGenerators.h:146
const double & getMaxFitRadius() const
Definition: PackerGenerators.hpp:93
const double & getMinGrainRadius() const
Definition: PackerGenerators.hpp:165
TmplGrain Grain
Definition: PackerGenerators.h:145
Definition: CheckPointable.cpp:16
Inherited::Grain Grain
Definition: PackerGenerators.h:164
GrainRndRadiusGen< TmplGrain > Inherited
Definition: PackerGenerators.h:163
const double & getParticleRadius() const
Definition: PackerGenerators.hpp:27
const double & getMaxGrainRadius() const
Definition: PackerGenerators.hpp:171
TmplParticle Particle
Definition: PackerGenerators.h:84
Particle getParticle(const Vec3 &posn) const
Definition: PackerGenerators.hpp:134
TmplParticle Particle
Definition: PackerGenerators.h:30
bool isValidFitRadius(const double &fitRadius) const
Definition: PackerGenerators.hpp:99
SingleParticleGrainGen(double minGrainRadius, double maxGrainRadius)
Definition: PackerGenerators.hpp:181
ConstRadiusGen(double radius)
Definition: PackerGenerators.hpp:21
Inherited::Particle Particle
Definition: PackerGenerators.h:121
Definition: PackerGenerators.h:27
RndRadiusGen< typename TmplGrain::Particle > Inherited
Definition: PackerGenerators.h:144
const double & getMaxParticleRadius() const
Definition: PackerGenerators.hpp:195
virtual ~GrainRndRadiusGen()
Definition: PackerGenerators.hpp:160
Definition: PackerGenerators.h:81
Particle getParticle(const Vec3 &posn) const
Definition: PackerGenerators.hpp:46
RangeRadiusGen< TmplParticle > Inherited
Definition: PackerGenerators.h:120
Grain::Particle Particle
Definition: PackerGenerators.h:165
const double & getMinFitRadius() const
Definition: PackerGenerators.hpp:33
double m_maxFitRadius
Definition: PackerGenerators.h:109
Definition: PackerGenerators.h:160
Definition: PackerGenerators.h:141
Inherited::Particle Particle
Definition: Grain.h:31
const double & getMaxFitRadius() const
Definition: PackerGenerators.hpp:39
const double & getMinParticleRadius() const
Definition: PackerGenerators.hpp:189
bool isValidFitRadius(const double &fitRadius) const
Definition: PackerGenerators.hpp:62
RangeRadiusGen(double minFitRadius, double maxFitRadius)
Definition: PackerGenerators.hpp:72
virtual Grain getGrain(const Particle &p)=0
Definition: PackerGenerators.h:117