57 if (hr[0] ==
getHr()[0] &&
86 for (x = 0; x <
nr_m[0]; ++x) {
87 for (y = 0; y <
nr_m[1]; ++y) {
111 for (x = localId[0].first(); x <= localId[0].last(); x++) {
125 for (y = localId[0].first(); y < localId[1].last(); y++) {
141 double &scaleFactor)
const
149 std::multimap<int, double>::const_iterator it =
intersectXDir_m.find(y);
170 value.
center += 1.0 / ((dx - cx) * de);
173 value.
center += 1.0 / (de * de);
174 value.
east = -1.0 / (de * de);
182 value.
center += 1.0 / (dw * dw);
183 value.
west = -1.0 / (dw * dw);
188 value.
center += 1.0 / ((dy - cy) * dn);
191 value.
center += 1.0 / (dn * dn);
192 value.
north = -1.0 / (dn * dn);
200 value.
center += 1.0 / (ds * ds);
201 value.
south = -1.0 / (ds * ds);
213 double &scaleFactor)
const
217 double cx = (x - (
nr_m[0] - 1) / 2.0) *
hr_m[0];
218 double cy = (y - (
nr_m[1] - 1) / 2.0) *
hr_m[1];
223 std::multimap<int, double>::const_iterator it =
intersectXDir_m.find(y);
248 value.
center -= 2.0 * (s - 1.0) / (s * de);
250 value.
west += (s - 1.0) / ((s + 1.0) * de);
252 value.
center += 1.0 / (de * de);
253 value.
east = -1.0 / (de * de);
259 value.
center -= 2.0 * (s - 1.0) / (s * de);
261 value.
east += (s - 1.0) / ((s + 1.0) * de);
263 value.
center += 1.0 / (dw * dw);
264 value.
west = -1.0 / (dw * dw);
270 value.
center -= 2.0 * (s - 1.0) / (s * dn);
272 value.
south += (s - 1.0) / ((s + 1.0) * dn);
274 value.
center += 1.0 / (dn * dn);
275 value.
north = -1.0 / (dn * dn);
281 value.
center -= 2.0 * (s - 1.0) / (s * dn);
283 value.
north += (s - 1.0) / ((s + 1.0) * dn);
285 value.
center += 1.0 / (ds * ds);
286 value.
south = -1.0 / (ds * ds);
Tps< T > sqrt(const Tps< T > &x)
Square root.
T::PETE_Expr_t::PETE_Return_t max(const PETE_Expr< T > &expr, NDIndex< D > &loc)
T::PETE_Expr_t::PETE_Return_t min(const PETE_Expr< T > &expr, NDIndex< D > &loc)
PETE_TUTree< FnAbs, typename T::PETE_Expr_t > abs(const PETE_Expr< T > &l)
bool isInside(int x, int y, int z) const override
queries if a given (x,y,z) coordinate lies inside the domain
int toCoordIdx(int x, int y) const
conversion from (x,y) to index in xy plane
void linearInterpolation(int x, int y, int z, StencilValue_t &value, double &scaleFactor) const override
different interpolation methods for boundary points
void quadraticInterpolation(int x, int y, int z, StencilValue_t &value, double &scaleFactor) const override
EllipticPointList_t intersectYDir_m
all intersection points with grid lines in Y direction
EllipticPointList_t intersectXDir_m
all intersection points with grid lines in X direction
EllipticDomain(BoundaryGeometry *bgeom, IntVector_t nr, Vector_t hr, std::string interpl)
void compute(Vector_t hr, NDIndex< 3 > localId) override
calculates intersection
IntVector_t nr_m
number of mesh points in each direction
std::map< int, int > coordMap_m
mapping idx -> (x,y,z)
double getXRangeMax() const
void setRangeMin(const Vector_t &min)
double getYRangeMax() const
int interpolationMethod_m
interpolation type
bool hasGeometryChanged_m
flag indicating if geometry has changed for the current time-step
void setMinMaxZ(double minz, double maxz)
double getXRangeMin() const
std::map< int, int > idxMap_m
mapping (x,y,z) -> idx
double getYRangeMin() const
Vector_t hr_m
mesh-spacings in each direction
void setRangeMax(const Vector_t &max)
void robinBoundaryStencil(int z, double &F, double &B, double &C) const
function to handle the open boundary condition in longitudinal direction