1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
/////////////////////////////////////////////////////////////
// //
// Copyright (c) 2003-2011 by The University of Queensland //
// Earth Systems Science Computational Centre (ESSCC) //
// http://www.uq.edu.au/esscc //
// //
// Primary Business: Brisbane, Queensland, Australia //
// Licensed under the Open Software License version 3.0 //
// http://www.opensource.org/licenses/osl-3.0.php //
// //
/////////////////////////////////////////////////////////////
#ifndef ESYS_LSMCLOSEPACKBLOCK_HPP
#define ESYS_LSMCLOSEPACKBLOCK_HPP
#include "Geometry/ClosePackBlock.h"
#include "Geometry/ClosePackIterator.h"
namespace esys
{
namespace lsm
{
template <typename TmplClosePackIterator,typename TmplParticle>
ClosePackBlockGenerator<TmplClosePackIterator,TmplParticle>::ClosePackBlockGenerator(
unsigned int numX,
unsigned int numY,
unsigned int numZ,
double radius,
ClosePackOrientation orientation
)
: m_radius(radius),
m_dimCounts(numX, numY, numZ),
m_orientation(orientation)
{
}
template <typename TmplClosePackIterator,typename TmplParticle>
template <typename TmplParticleCollection>
void
ClosePackBlockGenerator<TmplClosePackIterator,TmplParticle>::createParticles(
TmplParticleCollection &particleCollection
)
{
int id = 0;
CentrePointIterator it =
CentrePointIterator(
m_dimCounts[0],
m_dimCounts[1],
m_dimCounts[2],
getRadius(),
((m_orientation == DEFAULT_ORIENT) && (m_dimCounts[2] <= 1)) ? XYZ : m_orientation
);
while (it.hasNext())
{
particleCollection.createParticle(
TmplParticle(
it.next(),
getRadius(),
id,
0
)
);
id++;
}
}
template <typename TmplClosePackIterator,typename TmplParticle>
ClosePackBlockGenerator<TmplClosePackIterator,TmplParticle>::~ClosePackBlockGenerator()
{
}
template <typename TmplClosePackIterator,typename TmplParticle>
double ClosePackBlockGenerator<TmplClosePackIterator,TmplParticle>::getRadius() const
{
return m_radius;
}
template <typename TmplClosePackIterator,typename TmplParticle>
ClosePackBlock<TmplClosePackIterator,TmplParticle>::ClosePackBlock(
unsigned int numX,
unsigned int numY,
unsigned int numZ,
double radius,
ClosePackOrientation orientation
)
: ParticleCollection<TmplParticle>(),
m_generator(numX, numY, numZ, radius)
{
createParticles();
}
template <typename TmplClosePackIterator,typename TmplParticle>
ClosePackBlock<TmplClosePackIterator,TmplParticle>::~ClosePackBlock()
{
}
template <typename TmplClosePackIterator,typename TmplParticle>
void ClosePackBlock<TmplClosePackIterator,TmplParticle>::createParticles()
{
m_generator.createParticles(*this);
}
template <typename TmplClosePackIterator,typename TmplParticle>
double ClosePackBlock<TmplClosePackIterator,TmplParticle>::getRadius() const
{
return m_generator.getRadius();
}
}
}
#endif
|