10 #include "src/legacy/Interface/Meshing/Mesh.hh"
11 #include "src/legacy/Interface/Meshing/ThreeDGrid.hh"
24 TwoDGrid(
double dX,
double dY,
double minX,
double minY,
int numberOfXCoords,
int numberOfYCoords);
26 TwoDGrid(std::vector<double>
x, std::vector<double>
y);
29 inline double&
x (
const int& i) {
return _x[i-1];}
30 inline double&
y (
const int& j) {
return _y[j-1];}
31 inline const double&
x (
const int& i)
const {
return _x[i-1];}
32 inline const double&
y (
const int& j)
const {
return _y[j-1];}
33 inline int xSize()
const {
return int(
_x.size());}
34 inline int ySize()
const {
return int(
_y.size());}
36 std::vector<double>
xVector() {
return std::vector<double>(
_x);}
37 std::vector<double>
yVector() {
return std::vector<double>(
_y);}
39 double*
newXArray() {
double *
x =
new double[
_x.size()];
for(
unsigned int i=0; i<
_x.size(); i++) x[i]=
_x[i];
return x;}
40 double*
newYArray() {
double *
y =
new double[
_y.size()];
for(
unsigned int i=0; i<
_y.size(); i++) y[i]=
_y[i];
return y;}
48 inline void LowerBound (
const double&
x,
int& xIndex,
const double&
y,
int& yIndex)
const
51 inline double MinX()
const {
return _x[0];}
53 inline double MinY()
const {
return _y[0];}
56 void Add (VectorMap* map);
57 void Remove(VectorMap* map);
59 void SetX(
int nXCoords,
double *
x) {
_x = std::vector<double>(
x,x+nXCoords);}
60 void SetY(
int nYCoords,
double *
y) {
_y = std::vector<double>(
y,y+nYCoords);}
62 Mesh::Iterator
Begin()
const;
63 Mesh::Iterator
End()
const;
65 virtual void Position(
const Mesh::Iterator& it,
double * position)
const;
67 virtual void CentrePosition(
const Mesh::Iterator& it,
double * position)
const;
69 int ToInteger(
const Mesh::Iterator& lhs)
const {
return (lhs.State()[0]-1)*(
_ySize)+lhs.State()[1]-1;}
75 Mesh::Iterator
Nearest(
const double* position)
const;
80 Mesh::Iterator&
AddEquals(Mesh::Iterator& lhs,
int difference)
const;
81 Mesh::Iterator&
SubEquals(Mesh::Iterator& lhs,
int difference)
const;
82 Mesh::Iterator&
AddEquals(Mesh::Iterator& lhs,
const Mesh::Iterator& rhs)
const;
83 Mesh::Iterator&
SubEquals(Mesh::Iterator& lhs,
const Mesh::Iterator& rhs)
const;
84 Mesh::Iterator&
AddOne (Mesh::Iterator& lhs)
const;
85 Mesh::Iterator&
SubOne (Mesh::Iterator& lhs)
const;
87 bool IsGreater(
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs)
const;
90 std::vector<double>
_x;
91 std::vector<double>
_y;
97 friend Mesh::Iterator
operator++(Mesh::Iterator& lhs,
int);
98 friend Mesh::Iterator
operator--(Mesh::Iterator& lhs,
int);
99 friend Mesh::Iterator&
operator++(Mesh::Iterator& lhs);
100 friend Mesh::Iterator&
operator--(Mesh::Iterator& lhs);
101 friend Mesh::Iterator
operator- (
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
102 friend Mesh::Iterator
operator+ (
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
103 friend Mesh::Iterator&
operator-=(Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
104 friend Mesh::Iterator&
operator+=(Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
105 friend Mesh::Iterator
operator- (
const Mesh::Iterator&,
const int&);
106 friend Mesh::Iterator
operator+ (
const Mesh::Iterator&,
const int&);
107 friend Mesh::Iterator&
operator-=(Mesh::Iterator&,
const int&);
108 friend Mesh::Iterator&
operator+=(Mesh::Iterator&,
const int&);
110 friend bool operator==(
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
111 friend bool operator!=(
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
112 friend bool operator>=(
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
113 friend bool operator<=(
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
114 friend bool operator< (
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
115 friend bool operator> (
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
130 NDGrid(
int nDimensions,
int*
size,
double* spacing,
double*
min);
131 NDGrid(std::vector<int>
size, std::vector<const double *> gridCoordinates);
132 NDGrid(std::vector< std::vector<double> > gridCoordinates);
136 inline double&
coord (
const int& index,
const int& dimension) {
return _coord[dimension][index-1];}
137 inline const double&
coord (
const int& index,
const int& dimension)
const {
return _coord[dimension][index-1];}
138 inline int size (
const int& dimension )
const {
return _coord[dimension].size();}
144 inline void coordLowerBound (
const double& x,
const int& dimension,
int& xIndex)
const
147 else xIndex = std::lower_bound(
_coord[dimension].begin(),
_coord[dimension].end(), x)-
_coord[dimension].begin()-1;
150 inline void LowerBound (
const std::vector<double>& pos, std::vector<int>& xIndex)
const
151 {xIndex = std::vector<int>(pos.size());
for(
unsigned int i=0; i<pos.size(); i++)
coordLowerBound(pos[i], i, xIndex[i]);}
152 inline double Min (
const int& dimension)
const {
return _coord[dimension][0];}
153 inline double Max (
const int& dimension)
const {
return _coord[dimension][
_coord[dimension].size()-1];}
155 void SetCoord (
int dimension,
int nCoords,
double * x) {
_coord[dimension] = std::vector<double>(x, x+nCoords);}
157 Mesh::Iterator
Begin()
const {
return Mesh::Iterator(std::vector<int>(
_coord.size(), 1),
this);}
158 Mesh::Iterator
End()
const {std::vector<int> end(
_coord.size(), 1); end[0] =
_coord[0].size()+1;
return Mesh::Iterator(end,
this);}
160 void Position(
const Mesh::Iterator& it,
double * position)
const {
for(
unsigned int i=0; i<it.State().size(); i++) position[i] =
_coord[i][it[i]-1];}
166 int ToInteger (
const Mesh::Iterator& lhs)
const;
167 Mesh::Iterator
Nearest (
const double* position)
const;
172 virtual Mesh::Iterator&
AddEquals(Mesh::Iterator& lhs,
int difference)
const;
173 virtual Mesh::Iterator&
SubEquals(Mesh::Iterator& lhs,
int difference)
const;
174 virtual Mesh::Iterator&
AddEquals(Mesh::Iterator& lhs,
const Mesh::Iterator& rhs)
const;
175 virtual Mesh::Iterator&
SubEquals(Mesh::Iterator& lhs,
const Mesh::Iterator& rhs)
const;
176 virtual Mesh::Iterator&
AddOne (Mesh::Iterator& lhs)
const;
177 virtual Mesh::Iterator&
SubOne (Mesh::Iterator& lhs)
const;
179 virtual bool IsGreater(
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs)
const;
182 std::vector< std::vector<double> >
_coord;
186 friend Mesh::Iterator
operator++(Mesh::Iterator& lhs,
int);
187 friend Mesh::Iterator
operator--(Mesh::Iterator& lhs,
int);
188 friend Mesh::Iterator&
operator++(Mesh::Iterator& lhs);
189 friend Mesh::Iterator&
operator--(Mesh::Iterator& lhs);
190 friend Mesh::Iterator
operator- (
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
191 friend Mesh::Iterator
operator+ (
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
192 friend Mesh::Iterator&
operator-=(Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
193 friend Mesh::Iterator&
operator+=(Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
195 friend bool operator==(
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
196 friend bool operator!=(
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
197 friend bool operator>=(
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
198 friend bool operator<=(
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
199 friend bool operator< (
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
200 friend bool operator> (
const Mesh::Iterator& lhs,
const Mesh::Iterator& rhs);
friend bool operator>=(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
double Max(const int &dimension) const
int PositionDimension() const
virtual Mesh::Iterator & SubOne(Mesh::Iterator &lhs) const
friend Mesh::Iterator operator--(Mesh::Iterator &lhs, int)
std::vector< VectorMap * > _maps
void SetConstantSpacing()
void LowerBound(const std::vector< double > &pos, std::vector< int > &xIndex) const
friend bool operator!=(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
bool IsGreater(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs) const
friend Mesh::Iterator operator--(Mesh::Iterator &lhs, int)
friend bool operator<=(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
friend bool operator!=(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
void SetX(int nXCoords, double *x)
std::vector< double > xVector()
friend Mesh::Iterator operator-(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
friend Mesh::Iterator operator+(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
void SetConstantSpacing(bool spacing)
void SetCoord(int dimension, int nCoords, double *x)
friend bool operator>(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
void SetY(int nYCoords, double *y)
friend bool operator<(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
friend Mesh::Iterator operator++(Mesh::Iterator &lhs, int)
friend Mesh::Iterator operator+(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
virtual bool IsGreater(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs) const
virtual void Position(const Mesh::Iterator &it, double *position) const
std::vector< std::vector< double > > _coord
friend bool operator==(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
Mesh::Iterator & SubEquals(Mesh::Iterator &lhs, int difference) const
std::vector< double > coordVector(const int &dimension) const
virtual void CentrePosition(const Mesh::Iterator &it, double *position) const
Mesh::Iterator End() const
friend bool operator==(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
void yLowerBound(const double &y, int &yIndex) const
virtual Mesh::Iterator & AddEquals(Mesh::Iterator &lhs, int difference) const
virtual Mesh::Iterator & AddOne(Mesh::Iterator &lhs) const
const double & y(const int &j) const
void SetConstantSpacing(bool spacing)
void LowerBound(const double &x, int &xIndex, const double &y, int &yIndex) const
virtual Mesh::Iterator & SubEquals(Mesh::Iterator &lhs, int difference) const
NDGrid()
////// NDGrid ///////
Mesh::Iterator Nearest(const double *position) const
const double & coord(const int &index, const int &dimension) const
friend bool operator>=(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
friend Mesh::Iterator & operator+=(Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
Mesh::Iterator & SubOne(Mesh::Iterator &lhs) const
void Position(const Mesh::Iterator &it, double *position) const
friend Mesh::Iterator & operator-=(Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
Mesh::Iterator Nearest(const double *position) const
std::vector< double > yVector()
bool GetConstantSpacing() const
friend Mesh::Iterator operator-(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
Mesh::Iterator & AddOne(Mesh::Iterator &lhs) const
int size(const int &dimension) const
void coordLowerBound(const double &x, const int &dimension, int &xIndex) const
void SetConstantSpacing()
void Remove(VectorMap *map)
const double & x(const int &i) const
int ToInteger(const Mesh::Iterator &lhs) const
Mesh::Iterator Begin() const
std::vector< VectorMap * > _maps
int ToInteger(const Mesh::Iterator &lhs) const
friend Mesh::Iterator operator++(Mesh::Iterator &lhs, int)
Mesh::Iterator Begin() const
friend Mesh::Iterator & operator+=(Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
Mesh::Iterator End() const
int PositionDimension() const
friend bool operator<=(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
friend bool operator<(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
bool GetConstantSpacing() const
T::PETE_Expr_t::PETE_Return_t min(const PETE_Expr< T > &expr, NDIndex< D > &loc)
friend Mesh::Iterator & operator-=(Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
void xLowerBound(const double &x, int &xIndex) const
PETE_TUTree< FnFloor, typename T::PETE_Expr_t > floor(const PETE_Expr< T > &l)
friend bool operator>(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs)
Mesh::Iterator & AddEquals(Mesh::Iterator &lhs, int difference) const
double * newCoordArray(const int &dimension) const
double Min(const int &dimension) const
double & coord(const int &index, const int &dimension)