14 #ifndef ESYS_LSMGRIDITERATOR_H
15 #define ESYS_LSMGRIDITERATOR_H
64 minPt =
Vec3(0,0,0) + sphereRadius;
67 (numPtsX-1)*2.0*sphereRadius
84 (numPtsY-1)*(sphereRadius*2.0*sqrt(2.0/3.0)),
85 (numPtsZ-1)*(sphereRadius*sqrt(3.0))
87 ((numPtsY > 1) ? sphereRadius*sqrt(3.0)/3.0 : 0.0)
90 minPt =
Vec3(sphereRadius, sphereRadius, 0);
93 (numPtsX-1)*2.0*sphereRadius
101 (numPtsY-1)*(sphereRadius*sqrt(3.0)),
125 int numPtsX ,numPtsY ,numPtsZ;
127 numPtsX = max(1,
int(nearbyint((particleBBox.
getSizes().
X()-(sphereRadius/4.0))/(sphereRadius*2.0))));
128 numPtsY = max(1,
int(nearbyint(particleBBox.
getSizes().
Y()/(sphereRadius*2.0*sqrt(2.0/3.0)))));
129 numPtsZ = max(1,
int(nearbyint(particleBBox.
getSizes().
Z()/(sphereRadius*sqrt(3.0)))));
131 numPtsX = max(1,
int(floor((particleBBox.
getSizes().
X()-(sphereRadius/4.0))/(sphereRadius*2.0))));
132 numPtsY = max(1,
int(floor(particleBBox.
getSizes().
Y()/(sphereRadius*2.0*sqrt(2.0/3.0)))));
133 numPtsZ = max(1,
int(floor(particleBBox.
getSizes().
Z()/(sphereRadius*sqrt(3.0)))));
135 if ((numPtsZ > 1) && (numPtsY > 1)) {
139 const Vec3 minPt = particleBBox.
getMinPt() + sphereRadius;
142 (numPtsX-1)*2.0*sphereRadius + ((numPtsZ > 1) ? sphereRadius : 0.0) + ((numPtsY > 1) ? sphereRadius : 0.0),
143 (numPtsY-1)*(sphereRadius*2.0*sqrt(2.0/3.0)),
144 (numPtsZ-1)*(sphereRadius*sqrt(3.0))
146 ((numPtsY > 1) ? sphereRadius*sqrt(3.0)/3.0 : 0.0)
150 numPtsX = int(nearbyint((particleBBox.
getSizes().
X()-(sphereRadius/4.0))/(sphereRadius*2.0)));
151 numPtsY = int(nearbyint(particleBBox.
getSizes().
Y()/(sphereRadius*sqrt(3.0))));
158 (numPtsX-1)*2.0*sphereRadius + ((numPtsY > 1) ? sphereRadius : 0.0),
159 (numPtsY-1)*(sphereRadius*sqrt(3.0)),
BoundingBox m_centrePtBBox
index in z-direction
Definition: GridIterator.h:277
int m_minI
Definition: GridIterator.h:265
const Vec3 & getMaxPt() const
Definition: BoundingBox.hpp:45
void increment()
Definition: GridIterator.h:236
BoundingBox getSphereBBox() const
Definition: GridIterator.h:185
bool hasNext() const
Definition: GridIterator.h:207
GridIterator()
Definition: GridIterator.h:31
VEC3_INLINE double & Z()
Definition: vec3.h:121
int m_i
Definition: GridIterator.h:273
VEC3_INLINE double & Y()
Definition: vec3.h:120
const BoundingBox & getBoundingBox() const
Definition: GridIterator.h:180
int m_j
index in x-direction
Definition: GridIterator.h:274
bool is2d() const
Definition: GridIterator.h:212
Definition: CheckPointable.cpp:16
3D bounding box
Definition: BoundingBox.h:27
double m_sphereRadius
Definition: GridIterator.h:263
int m_maxI
Definition: GridIterator.h:269
int m_k
index in y-direction
Definition: GridIterator.h:275
Vec3 getSizes() const
Definition: BoundingBox.hpp:78
Vec3 getPoint() const
Definition: GridIterator.h:217
int m_maxK
Definition: GridIterator.h:271
Vec3 next()
Definition: GridIterator.h:255
VEC3_INLINE double & X()
Definition: vec3.h:119
~GridIterator()
Definition: GridIterator.h:176
int m_minJ
Definition: GridIterator.h:266
Definition: GridIterator.h:28
const Vec3 & getMinPt() const
Definition: BoundingBox.hpp:40
GridIterator(int numPtsX, int numPtsY, int numPtsZ, double sphereRadius)
Definition: GridIterator.h:46
int m_maxJ
Definition: GridIterator.h:270
int m_minK
Definition: GridIterator.h:267
GridIterator(const BoundingBox &particleBBox, double sphereRadius, bool hard_limit=false)
Definition: GridIterator.h:112