14 #ifndef ESYS_LSMGOUGECONFIG_H
15 #define ESYS_LSMGOUGECONFIG_H
25 #include <boost/shared_ptr.hpp>
63 template <
typename TmplParticleGrainGen>
74 ParticleGrainGen &particleGrainGen,
98 const BoolVector &periodicDimensions,
104 inline bool is3d()
const;
126 template <
typename TmplParticleGrainGen>
135 const BoolVector &periodicDimensions,
137 ParticleGrainGen &particleGrainGen
152 template <
typename TmplParticleGrainGen>
170 const ParticleRndPackPrms &faultRegionPrms,
171 const GrainRPackPrms &gougeRegionPrms,
172 const BoolVector &peridicDimensions=
BoolVector(3,
false),
173 int maxInsertionFailures=100,
174 double tolerance = DBL_EPSILON*128,
175 double connectionTolerance = DBL_EPSILON*128*10,
176 int blockConnectionTag = 0
242 typename TmplGrainRandomBoxPacker,
243 typename TmplParticleRandomBoxPacker,
244 typename TmplConnection
264 typedef typename GrainRandomPacker::PackerBase
APacker;
265 typedef typename GrainRandomPacker::BoxPackerBase
ABoxPacker;
288 bool operator()(
const Connection &i1,
const Connection &i2)
const
292 (i1.getP1Id() < i2.getP1Id())
295 (i1.getP1Id() == i2.getP1Id())
298 (i1.getP2Id() < i2.getP2Id())
301 (i1.getP2Id() == i2.getP2Id())
303 (i1.getTag() < i2.getTag())
310 bool operator()(
const Connection *i1,
const Connection *i2)
const
312 return (*
this)(*i1, *i2);
343 virtual void write(std::ostream &oStream)
const;
345 void writeToFile(
const std::string &fileName)
const;
354 double distanceFromBBoxEdge
365 template <
typename TmplVisitor>
369 typename GeneratorPtrVector::iterator it =
m_genPtrVector.begin();
374 ParticleIterator particleIt = (*it)->getParticleIterator();
375 while (particleIt.hasNext()) {
376 particleIt.next().visit(visitor);
381 template <
typename TmplVisitor>
385 typename GeneratorPtrVector::const_iterator it =
m_genPtrVector.begin();
390 ParticleIterator particleIt = (*it)->getParticleIterator();
391 while (particleIt.hasNext()) {
392 particleIt.next().visit(visitor);
397 template <
typename TmplVisitor>
402 typename ConnectionSet::const_iterator it = connectionSet.begin();
403 it != connectionSet.end();
419 bool operator()(
const Particle *p1,
const Particle *p2)
const
421 return (p1->getID() < p2->getID());
434 inline bool isValid(
const Particle &p1,
const Particle &p2)
const
438 (p1.getID() < p2.getID())
440 ((p1.getPos() - p2.getPos()).norm() < (
m_tolerance + (p1.getRad() + p2.getRad())))
466 << particle.getPos() <<
" "
467 << particle.getRad() <<
" "
468 << particle.getID() <<
" "
469 << particle.getTag() <<
"\n";
488 << connection.
first() <<
" "
489 << connection.
second() <<
" "
GrainCollection getGrainCollection()
Definition: GougeConfig.hpp:976
Definition: GrainCollection.h:70
Orientation
Definition: GougeBlock3D.h:33
GrainCollection::GrainPool GrainPool
Definition: GrainRandomBoxPacker.h:40
double getFaultMinRadius() const
Definition: GougeConfig.hpp:419
double m_connectionTolerance
Definition: GougeConfig.h:234
const GeneratorPtrVector & getFaultGeneratorVector() const
Definition: GougeConfig.hpp:822
GrainRandomPacker::GrainCollection GrainCollection
Definition: GougeConfig.h:262
GougeConfigPrms< ParticleGrainGen > GougeConfPrms
Definition: GougeConfig.h:253
int m_maxInsertionFailures
Definition: GougeConfig.h:232
const BoolVector & getPeriodicDimensions() const
Definition: GougeConfig.hpp:328
Definition: GougeBlock3D.h:37
BoundingBox m_bBox
Definition: GougeConfig.h:226
GrainRandomPacker::ParticleIterator ParticleIterator
Definition: GougeConfig.h:256
virtual void createConnectionSet()
Definition: GougeConfig.hpp:870
RndBoxPacker::ParticleGenerator RndRadiusGen
Definition: GougeConfig.h:272
GrainRandomPacker::ParticlePool ParticlePool
Definition: GougeConfig.h:280
GrainPoolPtr m_grainPoolPtr
Definition: GougeConfig.h:505
BoolVector m_periodicDimensions
Definition: GougeBlock3D.h:83
GrainRandomPacker::PackerBase APacker
Definition: GougeConfig.h:264
std::vector< PackingInfo > PackingInfoVector
Definition: GougeBlock3D.h:90
double getMinParticleRadius() const
Definition: GougeConfig.hpp:185
Definition: GougeConfig.h:153
bool operator()(const Connection &i1, const Connection &i2) const
Definition: GougeConfig.h:288
const PlaneVector & getFitPlaneVector() const
Definition: GougeBlock3D.cpp:92
int m_connectionTag
Definition: GougeConfig.h:87
TmplParticleGrainGen ParticleGrainGen
Definition: GougeConfig.h:67
void createFaultBlockGenerators()
Definition: GougeConfig.hpp:703
Definition: GrainCollection.h:50
ParticleGrainGen & getParticleGrainGen() const
Definition: GougeConfig.hpp:222
double getGougeMaxRadius() const
Definition: GougeConfig.hpp:437
GrainRandomPacker::GrainConstIterator GrainConstIterator
Definition: GougeConfig.h:261
int getMaxInsertionFailures() const
Definition: GougeConfig.hpp:322
PackingInfo(const BoundingBox &bBox, const BoolVector &periodicDimensions, Orientation orientation, double minRadius, double maxRadius)
Definition: GougeBlock3D.cpp:32
Id first() const
Definition: BasicInteraction.h:42
GrainCollection::GrainPoolPtr GrainPoolPtr
Definition: GrainRandomBoxPacker.h:41
NTablePtr m_nTablePtr
Definition: GougeConfig.h:499
bool operator()(const Connection *i1, const Connection *i2) const
Definition: GougeConfig.h:310
int getOrientationIndex() const
Definition: GougeConfig.hpp:352
double m_minRadius
Definition: GougeBlock3D.h:85
Definition: GougeConfig.h:425
std::vector< Plane3D > PlaneVector
Definition: GougeBlock3D.h:32
ParticleGrainGen * m_pParticleGrainGen
Definition: GougeConfig.h:86
GrainRandomPacker::ParticlePoolPtr ParticlePoolPtr
Definition: GougeConfig.h:281
double m_padRadius
Definition: GougeConfig.h:227
virtual ~GougeConfig()
Definition: GougeConfig.hpp:774
GrainRandomPacker::NTablePtr NTablePtr
Definition: GougeConfig.h:276
DistConnections< Particle, Connection > ConnectionFinder
Definition: GougeConfig.h:316
ParticleGrainGen & getParticleGrainGen() const
Definition: GougeConfig.hpp:131
boost::shared_ptr< ParticleGenerator > ParticleGeneratorPtr
Definition: CubicBoxPacker.h:32
Inherited::ParticleGeneratorPtr ParticleGeneratorPtr
Definition: RandomBoxPacker.h:118
TmplGrainRandomBoxPacker GrainRandomPacker
Definition: GougeConfig.h:250
ParticleRndPackPrms m_faultPrms
Definition: GougeConfig.h:229
Definition: GougeConfig.h:453
BoolVector m_periodicDimensions
Definition: GougeConfig.h:231
int getBlockConnectionTag() const
Definition: GougeConfig.hpp:316
GrainRandomPacker::ParticleGrainGen ParticleGrainGen
Definition: GougeConfig.h:252
void visitBasicInteraction(const BasicInteraction &connection)
Definition: GougeConfig.h:485
TmplConnection Connection
Definition: GougeConfig.h:249
GeoParticleWriter(std::ostream &oStream, int precision)
Definition: GougeConfig.h:456
Definition: CheckPointable.cpp:16
GrainRndPackPrms()
Definition: GougeConfig.hpp:198
Class to represent the common part of a pair interaction, i.e. the IDs of the particles and the inter...
Definition: BasicInteraction.h:27
RegBoxPacker::ParticleGeneratorPtr RegRadiusGenPtr
Definition: GougeConfig.h:269
GrainRndPackerPtrVector m_gougeGenPtrVector
Definition: GougeConfig.h:502
int getNumConnections() const
Definition: GougeConfig.hpp:626
boost::shared_ptr< GrainRandomPacker > GrainRandomPackerPtr
Definition: GougeConfig.h:251
std::vector< GeneratorPtr > GeneratorPtrVector
Definition: GougeConfig.h:278
Definition: CubicBoxPacker.h:28
void visitConnections(TmplVisitor &visitor) const
Definition: GougeConfig.h:398
Definition: DistConnections.h:35
Definition: GougeConfig.h:64
void tagGougeParticles(int tag)
Definition: GougeConfig.hpp:1084
PlaneVector m_fitPlaneVector
Definition: GougeBlock3D.h:87
Definition: GougeBlock3D.h:36
const GrainRndPackerPtrVector & getGougeGeneratorVector() const
Definition: GougeConfig.hpp:808
std::set< Connection, ConnectionCmp > ConnectionSet
Definition: GougeConfig.h:315
std::vector< GrainRandomPackerPtr > GrainRndPackerPtrVector
Definition: GougeConfig.h:279
ParticlePoolPtr m_particlePoolPtr
Definition: GougeConfig.h:504
Inherited::ParticleGenerator ParticleGenerator
Definition: RandomBoxPacker.h:117
void visitParticles(TmplVisitor &visitor)
Definition: GougeConfig.h:366
TmplParticleGrainGen ParticleGrainGen
Definition: GougeConfig.h:130
Orientation m_orientation
Definition: GougeBlock3D.h:84
std::vector< BoundingBox > BoundingBoxVector
Definition: GougeBlock3D.h:55
Id second() const
Definition: BasicInteraction.h:44
3D bounding box
Definition: BoundingBox.h:27
double getTolerance() const
Definition: GougeConfig.hpp:340
Inherited::Particle Particle
Definition: GrainRandomBoxPacker.h:48
Definition: GougeBlock3D.h:57
double getMinGrainRadius()
Definition: GougeConfig.hpp:244
const BoundingBox & getBBox() const
Definition: GougeConfig.hpp:304
GrainRandomPacker::Grain Grain
Definition: GougeConfig.h:259
void createRegularBlockGenerators()
Definition: GougeConfig.hpp:672
double getConnectionTolerance() const
Definition: GougeConfig.hpp:346
Definition: GougeConfig.h:477
std::ostream * m_pOStream
Definition: GougeConfig.h:494
GougePackingInfoVector getGougePackingInfoVector() const
Definition: GougeConfig.hpp:482
Definition: GougeConfig.h:42
double m_maxParticleRadius
Definition: GougeConfig.h:60
BoundingBox cutFromCentre(double d1, double d2) const
Definition: GougeConfig.hpp:382
double m_size
Definition: GougeConfig.h:58
bool is3d() const
Definition: GougeBlock3D.cpp:47
Inherited::ParticleGenerator ParticleGrainGen
Definition: GrainRandomBoxPacker.h:46
void initialiseFitPlaneVector()
Definition: GougeBlock3D.cpp:52
TmplParticleGrainGen ParticleGrainGen
Definition: GougeConfig.h:156
TmplGrainCollection GrainCollection
Definition: GrainRandomBoxPacker.h:34
ParticleCollection getParticleCollection()
Definition: GougeConfig.hpp:956
ConstRadiusGen< Particle > RegRadiusGen
Definition: GougeConfig.h:267
double getFaultMaxRadius() const
Definition: GougeConfig.hpp:425
double getMaxParticleRadius() const
Definition: GougeConfig.hpp:99
GeneratorPtrVector m_genPtrVector
Definition: GougeConfig.h:503
double getMinRadius() const
Definition: GougeConfig.hpp:577
Inherited::NTable NTable
Definition: GrainRandomBoxPacker.h:49
Inherited::NTablePtr NTablePtr
Definition: GrainRandomBoxPacker.h:50
~GougeConfigPrms()
Definition: GougeConfig.hpp:299
const GougeConfPrms & getPrms() const
Definition: GougeConfig.h:411
const BoolVector & getPeriodicDimensions() const
Definition: GougeBlock3D.cpp:107
GougePackingInfo(const BoundingBox &bBox, const BoolVector &periodicDimensions, Orientation orientation, ParticleGrainGen &particleGrainGen)
Definition: GougeConfig.hpp:112
ParticleGrainGen * m_pParticleGrainGen
Definition: GougeConfig.h:147
GrainRandomPacker::ParticleConstIterator ParticleConstIterator
Definition: GougeConfig.h:257
Orientation m_orientation
Definition: GougeConfig.h:228
int m_precision
Definition: GougeConfig.h:495
Inherited::Grain Grain
Definition: PackerPy.h:186
ConnectionSet m_connectionSet
Definition: GougeConfig.h:501
GeoConnectionWriter(std::ostream &oStream)
Definition: GougeConfig.h:480
GrainRPackPrms m_gougePrms
Definition: GougeConfig.h:230
Inherited::ParticlePool ParticlePool
Definition: GrainRandomBoxPacker.h:52
void visitParticles(const TmplVisitor &visitor) const
Definition: GougeConfig.h:382
GrainRPackPrms::Inherited ParticleRndPackPrms
Definition: GougeConfig.h:158
GougeConfig(const GougeConfPrms &prms)
Definition: GougeConfig.hpp:632
GrainRandomPacker::BoxPackerBase ABoxPacker
Definition: GougeConfig.h:265
Definition: PackerGenerators.h:27
ConnectionValidator(const GougeConfig &gougeBlock, double tolerance)
Definition: GougeConfig.h:428
std::vector< bool > BoolVector
Definition: BlockGenerator.h:28
void visitParticle(const Particle &particle) const
Definition: GougeConfig.h:462
Definition: GougeConfig.h:127
ParticleRndPackPrms()
Definition: GougeConfig.hpp:159
double getOrientationSize() const
Definition: GougeConfig.hpp:443
double getMaxRadius() const
Definition: GougeConfig.hpp:567
double getRegularBlockRadius() const
Definition: GougeConfig.hpp:413
BoundingBoxVector getRegularBBoxVector() const
Definition: GougeConfig.hpp:454
Orientation getOrientation() const
Definition: GougeConfig.hpp:334
GrainRandomPacker::GrainIterator GrainIterator
Definition: GougeConfig.h:260
double getSize() const
Definition: GougeConfig.hpp:180
std::vector< GougePackInfo > GougePackingInfoVector
Definition: GougeConfig.h:160
GougePackingInfo< ParticleGrainGen > GougePackInfo
Definition: GougeConfig.h:159
double getGougeMinRadius() const
Definition: GougeConfig.hpp:431
BoundingBox m_bBox
Definition: GougeBlock3D.h:82
double getMaxParticleRadius() const
Definition: GougeConfig.hpp:190
GrainRandomPacker::ParticleCollection ParticleCollection
Definition: GougeConfig.h:258
const ConnectionSet & getConnectionSet() const
Definition: GougeConfig.hpp:997
double m_tolerance
Definition: GougeConfig.h:233
const GougeConfig * m_pGougeConfig
Definition: GougeConfig.h:449
GrainRandomPacker::NTable NTable
Definition: GougeConfig.h:275
virtual void write(std::ostream &oStream) const
Definition: GougeConfig.hpp:1003
int m_blockConnectionTag
Definition: GougeConfig.h:235
double getMaxGrainRadius()
Definition: GougeConfig.hpp:250
GrainRandomPacker::GrainPool GrainPool
Definition: GougeConfig.h:282
GougeConfPrms::GougePackingInfoVector GougePackingInfoVector
Definition: GougeConfig.h:254
double getMaxGrainRadius() const
Definition: GougeConfig.hpp:152
GougeConfigPrms()
Definition: GougeConfig.hpp:258
RndBoxPacker::ParticleGeneratorPtr RndRadiusGenPtr
Definition: GougeConfig.h:273
bool areInDifferentFaultBlocks(const Particle &p1, const Particle &p2) const
Definition: GougeConfig.hpp:828
void writeToFile(const std::string &fileName) const
Definition: GougeConfig.hpp:800
double m_minParticleRadius
Definition: GougeConfig.h:59
bool isValid(const Particle &p1, const Particle &p2) const
Definition: GougeConfig.h:434
~ParticleRndPackPrms()
Definition: GougeConfig.hpp:176
GeneratorPtrVector m_regularGenPtrVector
Definition: GougeConfig.h:512
bool is2d() const
Definition: GougeConfig.hpp:587
PackingInfo Inherited
Definition: GougeConfig.h:131
GougeConfPrms m_prms
Definition: GougeConfig.h:500
Definition: GougeConfig.h:246
TmplParticleRandomBoxPacker RndBoxPacker
Definition: GougeConfig.h:271
virtual void createGougeConfigGenerators()
Definition: GougeConfig.hpp:740
const BoundingBox & getBBox() const
Definition: GougeBlock3D.cpp:87
Inherited::ParticlePoolPtr ParticlePoolPtr
Definition: GrainRandomBoxPacker.h:53
int getNumGrains() const
Definition: GougeConfig.hpp:610
double m_maxRadius
Definition: GougeBlock3D.h:86
GrainRandomPacker::Particle Particle
Definition: GougeConfig.h:255
int m_precision
Definition: GougeConfig.h:474
GeneratorPtrVector m_faultGenPtrVector
Definition: GougeConfig.h:513
virtual void generate()
Definition: GougeConfig.hpp:779
int getNumParticles() const
Definition: GougeConfig.hpp:595
bool isGougeParticle(const Particle &particle) const
Definition: GougeConfig.hpp:853
void tagRndBlockParticles(int tag)
Definition: GougeConfig.hpp:1101
std::ostream * m_pOStream
Definition: GougeConfig.h:473
boost::shared_ptr< APacker > GeneratorPtr
Definition: GougeConfig.h:277
GrainRandomPacker::GrainPoolPtr GrainPoolPtr
Definition: GougeConfig.h:283
double m_tolerance
Definition: GougeConfig.h:450
CubicBoxPacker< RegRadiusGen, ABoxPacker > RegBoxPacker
Definition: GougeConfig.h:268
Definition: GougeConfig.h:285
Definition: GougeBlock3D.h:35
int getConnectionTag() const
Definition: GougeConfig.hpp:229
bool operator()(const Particle *p1, const Particle *p2) const
Definition: GougeConfig.h:419
ParticleRndPackPrms Inherited
Definition: GougeConfig.h:68
double getMinParticleRadius() const
Definition: GougeConfig.hpp:94
int getGougeConnectionTag() const
Definition: GougeConfig.hpp:310
void tagDrivingPlateParticles(int minDrivingTag, int maxDrivingTag, double distanceFromBBoxEdge)
Definition: GougeConfig.hpp:1117
PackingInfoVector getFaultPackingInfoVector() const
Definition: GougeConfig.hpp:507
double getMinGrainRadius() const
Definition: GougeConfig.hpp:146
Definition: GougeConfig.h:416
GrainRndPackPrms< ParticleGrainGen > GrainRPackPrms
Definition: GougeConfig.h:157