41 int ySize,
const double *
y,
42 int zSize,
const double *
z)
49 "ThreeDGrid::ThreeDGrid(...)",
50 "3D Grid must be at least 2x2x2 grid"
56 std::vector<double>
y,
57 std::vector<double>
z)
64 "ThreeDGrid::ThreeDGrid(...)",
65 "3D Grid must be at least 2x2x2 grid"
72 int numberOfXCoords,
int numberOfYCoords,
74 :
x_m(numberOfXCoords),
y_m(numberOfYCoords),
z_m(numberOfZCoords),
77 for (
int i = 0; i < numberOfXCoords; i++)
79 for (
int j = 0; j < numberOfYCoords; j++)
81 for (
int k = 0; k < numberOfZCoords; k++)
96 std::vector<int>
end(3, 1);
102 double * position)
const {
109 std::vector<double> new_x(
x_m.size()-1);
110 std::vector<double> new_y(
y_m.size()-1);
111 std::vector<double> new_z(
z_m.size()-1);
112 for (
size_t i = 0; i <
x_m.size()-1; ++i) {
113 new_x[i] = (
x_m[i]+
x_m[i+1])/2.;
115 for (
size_t i = 0; i <
y_m.size()-1; ++i) {
116 new_y[i] = (
y_m[i]+
y_m[i+1])/2.;
118 for (
size_t i = 0; i <
z_m.size()-1; ++i) {
119 new_z[i] = (
z_m[i]+
z_m[i+1])/2.;
175 if (
x >=
vec.back()) {
176 index =
vec.size()-1;
180 size_t xUpper =
vec.size()-1;
181 while (xUpper - xLower > 1) {
182 index = (xUpper+xLower)/2;
183 if (
x >=
vec[index]) {
220 }
else if (lhs.
state_m[2] == 1) {
246 std::vector<VectorMap*>::iterator it =
258 std::vector<VectorMap*>::iterator it =
267 for (
unsigned int i = 0; i <
x_m.size()-1; i++)
268 if (std::abs(1-(
x_m[i+1]-
x_m[i])/(
x_m[1]-
x_m[0])) > 1e-9) {
272 for (
unsigned int i = 0; i <
y_m.size()-1; i++)
273 if (std::abs(1-(
y_m[i+1]-
y_m[i])/(
y_m[1]-
y_m[0])) > 1e-9) {
277 for (
unsigned int i = 0; i <
z_m.size()-1; i++)
278 if (std::abs(1-(
z_m[i+1]-
z_m[i])/(
z_m[1]-
z_m[0])) > 1e-9) {
285 std::vector<int> index(3);
287 position[1], index[1],
288 position[2], index[2]);
289 if (index[0] <
xSize_m-1 && index[0] >= 0)
290 index[0] += (2*(position[0] -
x_m[index[0]]) >
291 x_m[index[0]+1]-
x_m[index[0]] ? 2 : 1);
294 if (index[1] <
ySize_m-1 && index[1] >= 0)
295 index[1] += (2*(position[1] -
y_m[index[1]]) >
296 y_m[index[1]+1]-
y_m[index[1]] ? 2 : 1);
299 if (index[2] <
zSize_m-1 && index[2] >= 0)
300 index[2] += (2*(position[2] -
z_m[index[2]]) >
301 z_m[index[2]+1]-
z_m[index[2]] ? 2 : 1);
Vector_t BoxLibLayout< T, Dim >::lowerBound
std::vector< int > state_m
Mesh::Iterator begin() const
void setConstantSpacing()
std::vector< double > y_m
virtual void getPosition(const Mesh::Iterator &it, double *position) const
static void vectorLowerBound(std::vector< double > vec, double x, int &index)
Mesh::Iterator end() const
std::vector< double > x_m
virtual Mesh::Iterator & subEquals(Mesh::Iterator &lhs, int difference) const
void remove(VectorMap *map)
std::vector< double > z_m
virtual Mesh::Iterator & subOne(Mesh::Iterator &lhs) const
virtual bool isGreater(const Mesh::Iterator &lhs, const Mesh::Iterator &rhs) const
virtual Mesh::Iterator & addOne(Mesh::Iterator &lhs) const
virtual Mesh::Iterator & addEquals(Mesh::Iterator &lhs, int difference) const
std::vector< VectorMap * > maps_m
Mesh::Iterator getNearest(const double *position) const