46 "This domain is currently not supported!");
88 for(x = 0; x <
nr_m[0]; x++) {
89 for(y = 0; y < nr_m[1]; y++) {
90 for(z = 0; z < nr_m[2]; z++) {
132 double &scaleFactor)
const
136 double cx = x *
hr_m[0] - (
nr_m[0] - 1) *
hr_m[0] / 2.0;
137 double cy = y *
hr_m[1] - (
nr_m[1] - 1) *
hr_m[1] / 2.0;
168 value.
center += 1 / ((dx - cx) * de);
171 value.
center += 1 / (de * de);
172 value.
east = -1 / (de * de);
181 value.
center += 1 / (dw * dw);
182 value.
west = -1 / (dw * dw);
188 value.
center += 1 / ((dy - cy) * dn);
191 value.
center += 1 / (dn * dn);
192 value.
north = -1 / (dn * dn);
201 value.
center += 1 / (ds * ds);
202 value.
south = -1 / (ds * ds);
210 if(z == 0 || z ==
nr_m[2] - 1) {
220 double d =
hr_m[2] * (
nr_m[2] - 1) / 2;
236 double &scaleFactor)
const
238 double cx = (x - (
nr_m[0] - 1) / 2.0) *
hr_m[0];
239 double cy = (y - (
nr_m[1] - 1) / 2.0) *
hr_m[1];
331 value.
west *= -1.0 / (dw * (dw + de));
332 value.
east *= -1.0 / (de * (dw + de));
333 value.
north *= -1.0 / (dn * (dn + ds));
334 value.
south *= -1.0 / (ds * (dn + ds));
340 value.
center += 1 / de * 1 / dw;
341 value.
center += 1 / dn * 1 / ds;
438 if(z == 0 || z ==
nr_m[2] - 1) {
449 double d =
hr_m[2] * (
nr_m[2] - 1) / 2;
double C_m
height of the corner
double getXIntersection(double cx, int) const
bool isInside(int x, int y, int z) const override
queries if a given (x,y,z) coordinate lies inside the domain
PETE_TUTree< FnAbs, typename T::PETE_Expr_t > abs(const PETE_Expr< T > &l)
void setRangeMax(const Vector_t &max)
IntVector_t nr_m
number of mesh points in each direction
Vektor< double, 3 > Vector_t
BoxCornerDomain(double A, double B, double C, double L1, double L2, IntVector_t nr, Vector_t hr, std::string interpl)
std::map< int, int > idxMap_m
mapping (x,y,z) -> idx
double getB(double z) const
as a function of z, determine the height (B) of the geometry
BoxCornerPointList IntersectXDir
all intersection points with grid lines in X direction
T::PETE_Expr_t::PETE_Return_t max(const PETE_Expr< T > &expr, NDIndex< D > &loc)
int toCoordIdx(int x, int y, int z) const
conversion from (x,y,z) to index in xyz plane
void linearInterpolation(int x, int y, int z, StencilValue_t &value, double &scaleFactor) const override
different interpolation methods for boundary points
BoxCornerPointList IntersectYDir
all intersection points with grid lines in Y direction
double getYRangeMin() const
The base class for all OPAL exceptions.
double actBMin_m
because the geometry can change in the y direction
void compute(Vector_t hr, NDIndex< 3 > localId) override
Vector_t hr_m
mesh-spacings in each direction
std::map< int, int > coordMap_m
mapping idx -> (x,y,z)
void setRangeMin(const Vector_t &min)
void quadraticInterpolation(int x, int y, int z, StencilValue_t &value, double &scaleFactor) const override
bool hasGeometryChanged_m
flag indicating if geometry has changed for the current time-step
double getYIntersection(double cy, int z) const