30 namespace interpolation {
42 f_m[i][j][k] = lhs.
f_m[i][j][k];
51 coordinates_m->lowerBound(Point[0], i, Point[1], j, Point[2], k);
53 if (i + 2 > coordinates_m->xSize() ||
54 j + 2 > coordinates_m->ySize() ||
55 k + 2 > coordinates_m->zSize()) {
59 if (i < 0 || j < 0 || k < 0) {
64 double dx = (Point[0]-coordinates_m->x(i+1))/
65 (coordinates_m->x(i+2)-coordinates_m->x(i+1));
67 f_x[0][0] = (f_m[i+1][j] [k] - f_m[i][j] [k]) * dx + f_m[i][j] [k];
68 f_x[1][0] = (f_m[i+1][j+1][k] - f_m[i][j+1][k]) * dx + f_m[i][j+1][k];
69 f_x[0][1] = (f_m[i+1][j] [k+1] - f_m[i][j] [k+1]) * dx + f_m[i][j] [k+1];
70 f_x[1][1] = (f_m[i+1][j+1][k+1] - f_m[i][j+1][k+1]) * dx + f_m[i][j+1][k+1];
73 double dy = (Point[1]-coordinates_m->y(j+1))/
74 (coordinates_m->y(j+2) - coordinates_m->y(j+1));
75 f_xy[0] = (f_x[1][0] - f_x[0][0])*dy + f_x[0][0];
76 f_xy[1] = (f_x[1][1] - f_x[0][1])*dy + f_x[0][1];
78 Value[0] = (f_xy[1] - f_xy[0])/
79 (coordinates_m->z(k+2) - coordinates_m->z(k+1))*
80 (Point[2] - coordinates_m->z(k+1)) + f_xy[0];
TriLinearInterpolator(ThreeDGrid *grid, double ***F)
double *** function() const
ThreeDGrid * coordinates_m