14 #ifndef ESYS_LSMCLOSEPACKITERATOR_HPP
15 #define ESYS_LSMCLOSEPACKITERATOR_HPP
21 template <
int NI,
int NJ,
int NK>
22 TmplMatrix<NI,NJ,NK>::TmplMatrix()
24 for (
int i = 0; i < NI; i++)
26 for (
int j = 0; j < NJ; j++)
28 for (
int k = 0; k < NJ; k++)
30 m_matrix[i][j][k] = 0.0;
36 template <
int NI,
int NJ,
int NK>
37 TmplMatrix<NI,NJ,NK>::TmplMatrix(
const TmplMatrix &m)
39 for (
int i = 0; i < NI; i++)
41 for (
int j = 0; j < NJ; j++)
43 for (
int k = 0; k < NJ; k++)
45 m_matrix[i][j][k] = m(i,j,k);
51 template <
int NI,
int NJ,
int NK>
52 TmplMatrix<NI,NJ,NK> &
53 TmplMatrix<NI,NJ,NK>::TmplMatrix::operator=(
const TmplMatrix &m)
55 for (
int i = 0; i < NI; i++)
57 for (
int j = 0; j < NJ; j++)
59 for (
int k = 0; k < NJ; k++)
61 m_matrix[i][j][k] = m(i,j,k);
68 template <
int NI,
int NJ,
int NK>
69 const double &TmplMatrix<NI,NJ,NK>::operator()(
int i,
int j,
int k)
const
71 return m_matrix[i][j][k];
74 template <
int NI,
int NJ,
int NK>
75 double &TmplMatrix<NI,NJ,NK>::operator()(
int i,
int j,
int k)
77 return m_matrix[i][j][k];
80 template <
int NI,
int NJ,
int NK>
81 int TmplMatrix<NI,NJ,NK>::getNumI()
const
86 template <
int NI,
int NJ,
int NK>
87 int TmplMatrix<NI,NJ,NK>::getNumJ()
const
92 template <
int NI,
int NJ,
int NK>
93 int TmplMatrix<NI,NJ,NK>::getNumK()
const
116 : m_radius(sphereRadius),
120 m_dimCount(numI, numJ, numK),
122 m_dim(s_orientationDimMap[orientation])
124 for (
int i = 0; i < 3; i++)
126 if (m_dimCount[i] <= 0)
133 void ClosePackIterator::setDimRepeat(
const Vec3L &dimRepeat)
135 m_dimRepeat = dimRepeat;
138 void ClosePackIterator::setOffsetMatrix(
const OffsetMatrix &offsetMatrix)
140 m_offsetMatrix = offsetMatrix;
150 return (m_dimIdx[2] < m_dimCount[2]);
153 const Vec3 &ClosePackIterator::getMinPt()
const
158 double ClosePackIterator::getOffset(
int i)
const
163 (m_dimIdx[(i+1) % 3]) % m_dimRepeat[i],
164 (m_dimIdx[(i+2) % 3]) % m_dimRepeat[i]
168 void ClosePackIterator::incrementDimIndex()
171 if (m_dimIdx[0] >= m_dimCount[0])
175 if (m_dimIdx[1] >= m_dimCount[1])
186 centre[m_dim[0]] = getOffset(0) + m_dimIdx[0]*(m_radius*2.0);
187 centre[m_dim[1]] = getOffset(1) + m_dimIdx[1]*(m_radius*SQRT_3);
188 centre[m_dim[2]] = getOffset(2) + m_dimIdx[2]*(m_radius*SQRT_8_OVER_3);
190 return (getMinPt() + centre);