28 #ifndef _CLASSIC_FIELDS_NDGRID_HH_
29 #define _CLASSIC_FIELDS_NDGRID_HH_
38 namespace interpolation {
84 NDGrid(
int nDimensions,
int*
size,
double* spacing,
double*
min);
94 NDGrid(std::vector<int> size, std::vector<const double *> gridCoordinates);
107 NDGrid(std::vector< std::vector<double> > gridCoordinates);
122 inline double&
coord(
const int& index,
const int& dimension);
134 inline const double&
coord(
const int& index,
const int& dimension)
const;
144 inline int size(
const int& dimension)
const;
154 inline std::vector<double>
coordVector(
const int& dimension)
const;
178 inline void coordLowerBound(
const double& x,
const int& dimension,
int& xIndex)
const;
192 inline void lowerBound(
const std::vector<double>& pos, std::vector<int>& xIndex)
const;
195 inline double min(
const int& dimension)
const;
198 inline double max(
const int& dimension)
const;
206 inline void setCoord(
int dimension,
int nCoords,
double * x);
300 return coord_m[dimension][index-1];
304 return coord_m[dimension][index-1];
308 return coord_m[dimension].size();
317 double x0 =
coord_m[dimension][0];
318 double x1 =
coord_m[dimension][1];
319 xIndex =
static_cast<int>(
floor((x - x0)/(x1-x0)));
320 int coordSize =
static_cast<int>(
coord_m[dimension].size());
321 if (xIndex >= coordSize) {
322 xIndex = coordSize-1;
323 }
else if (xIndex < -1) {
327 const std::vector<double>& c_t(
coord_m[dimension]);
328 xIndex = std::lower_bound(c_t.begin(), c_t.end(), x)-c_t.begin()-1;
333 xIndex = std::vector<int> (pos.size());
334 for(
unsigned int i=0; i < pos.size(); i++) {
352 coord_m[dimension] = std::vector<double>(x, x+nCoords);
369 for (
unsigned int i=0; i<it.
getState().size(); i++)
370 position[i] =
coord_m[i][it[i]-1];
387 #endif // _CLASSIC_FIELDS_NDGRID_HH_
virtual Mesh::Iterator & subEquals(Mesh::Iterator &lhs, int difference) const
friend Mesh::Iterator operator+(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
int getPositionDimension() const
std::vector< VectorMap * > maps_m
constexpr double e
The value of .
virtual Mesh::Iterator & addOne(Mesh::Iterator &lhs) const
friend Mesh::Iterator & operator+=(Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
double max(const int &dimension) const
bool getConstantSpacing() const
friend bool operator!=(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
double min(const int &dimension) const
friend Mesh::Iterator & operator-=(Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
friend bool operator>=(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
friend Mesh::Iterator operator--(Mesh::Iterator &lhs, int)
friend bool operator<=(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
double & coord(const int &index, const int &dimension)
virtual Mesh::Iterator & addEquals(Mesh::Iterator &lhs, int difference) const
std::vector< double > coordVector(const int &dimension) const
virtual Mesh::Iterator & subOne(Mesh::Iterator &lhs) const
void setConstantSpacing(bool spacing)
friend bool operator<(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
void setCoord(int dimension, int nCoords, double *x)
Mesh::Iterator end() const
double * newCoordArray(const int &dimension) const
void lowerBound(const std::vector< double > &pos, std::vector< int > &xIndex) const
int size(const int &dimension) const
virtual bool isGreater(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs) const
Base class for meshing routines.
friend Mesh::Iterator operator-(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
void getPosition(const Mesh::Iterator &it, double *position) const
NDGrid()
////// NDGrid ///////
friend bool operator>(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
friend Mesh::Iterator operator++(Mesh::Iterator &lhs, int)
std::vector< int > getState() const
int toInteger(const Mesh::Iterator &lhs) const
std::vector< std::vector< double > > coord_m
Mesh::Iterator begin() const
friend bool operator==(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
void coordLowerBound(const double &x, const int &dimension, int &xIndex) const
Mesh::Iterator getNearest(const double *position) const
PETE_TUTree< FnFloor, typename T::PETE_Expr_t > floor(const PETE_Expr< T > &l)