8#ifndef SRC_SPATIALHASH_H_
9#define SRC_SPATIALHASH_H_
35 if (this->
operator()(0) < rhs(0))
return true;
36 if (rhs(0) < this->
operator()(0))
return false;
37 if (this->
operator()(1) < rhs(1))
return true;
38 if (rhs(1) < this->
operator()(1))
return false;
39 if (this->
operator()(2) < rhs(2))
return true;
45 std::vector<Triplet> tripletList;
51 tripletList.push_back(s);
67template<
bool flag,
typename T,
typename U>
76template<
typename T,
typename U>
116 for(
int i_point=0; i_point<size; i_point++)
119 this->coordinates.push_back(vector);
128 for(
int i_point=0; i_point<size; i_point++)
131 this->coordinates.push_back(vector);
146 coordinate= coordinate-
origin;
147 coordinate= (coordinate.array()/
step.array()).floor().matrix();
148 base= coordinate.template cast<int>();
170 cell=
step.asDiagonal();
179 cell=
step.asDiagonal();
193 Matrix3d inverseCell= cell.inverse();
198 Vector3d fractionalPosition= (inverseCell * relativePosition.transpose()).
transpose();
199 Vector3d foldedFractionalPosition= fractionalPosition;
200 for (
int i_dim=0; i_dim<
DIM; ++i_dim)
202 foldedFractionalPosition(i_dim)-= std::floor(foldedFractionalPosition(i_dim));
204 if ((foldedFractionalPosition-fractionalPosition).squaredNorm()>
epsilon)
206 std::cout <<
"Folding point " << i_point <<
": "
SpatialHash< true > ConstSpatialHash
BoxPoints(Vector3d origin, const Matrix3d &cell, MatrixXd &coordinates)
void fold(const Vector3i &pbc)
BoxPoints(Vector3d origin, Vector3d step, MatrixXd &coordinates)
BoxPoints(Vector3d origin, const Matrix3d &cell, std::vector< Vector3d > &coordinates)
BoxPoints(Vector3d origin, Vector3d step, std::vector< Vector3d > &coordinates)
Select< isConst, constVector3d, Vector3d >::Result B
SpatialHash(Vector3d origin, Vector3d step, C &coordinates)
Select< isConst, conststd::vector< Vector3d >, std::vector< Vector3d > >::Result C
std::vector< Eigen::Map< B > > coordinates
Triplet hashFunction(const int &i) const
SpatialHash(Vector3d origin, Vector3d step, A &coordinates)
Select< isConst, constMatrixXd, MatrixXd >::Result A
std::map< Triplet, std::vector< int > > hashTable
Triplet(int i, int j, int k)
bool operator<(const Triplet &rhs) const
Triplet(const Vector3i &base)
std::vector< Triplet > neighborList()
void transpose(double const *mat, double *const trans)
Eigen::Matrix< double, DIM, DIM, Eigen::RowMajor > Matrix3d
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > MatrixXd
Eigen::Matrix< double, 1, DIM, Eigen::RowMajor > Vector3d
Eigen::Matrix< int, 1, DIM, Eigen::RowMajor > Vector3i