OPAL (Object Oriented Parallel Accelerator Library)
2021.1.99
OPAL
|
#include <IrregularDomain.h>
Classes | |
struct | Stencil |
Public Types | |
typedef Stencil< int > | StencilIndex_t |
typedef Stencil< double > | StencilValue_t |
typedef Vektor< int, 3 > | IntVector_t |
Public Member Functions | |
IrregularDomain (const IntVector_t &nr, const Vector_t &hr, const std::string &interpl) | |
virtual void | compute (Vector_t hr, NDIndex< 3 > localId)=0 |
void | getBoundaryStencil (int x, int y, int z, StencilValue_t &value, double &scaleFactor) const |
void | getBoundaryStencil (int id, StencilValue_t &value, double &scaleFactor) const |
void | getNeighbours (int x, int y, int z, StencilIndex_t &index) const |
void | getNeighbours (int idx, StencilIndex_t &index) const |
virtual void | getCoord (int idx, int &x, int &y, int &z) const |
Conversion from a 3D index to (x,y,z) More... | |
int | getIdx (int x, int y, int z) const |
Conversion from (x,y,z) to index on the 3D grid. More... | |
virtual int | getNumXY () const |
virtual bool | isInside (int x, int y, int z) const =0 |
IntVector_t | getNr () const |
Vector_t | getHr () const |
void | setNr (IntVector_t nr) |
void | setHr (Vector_t hr) |
void | setMinMaxZ (double minz, double maxz) |
double | getMinZ () const |
double | getMaxZ () const |
double | getXRangeMin () const |
double | getXRangeMax () const |
double | getYRangeMin () const |
double | getYRangeMax () const |
double | getZRangeMin () const |
double | getZRangeMax () const |
void | setRangeMin (const Vector_t &min) |
void | setRangeMax (const Vector_t &max) |
bool | hasGeometryChanged () const |
virtual | ~IrregularDomain () |
virtual void | resizeMesh (Vector_t &origin, Vector_t &hr, const Vector_t &, const Vector_t &, double) |
Protected Member Functions | |
virtual int | indexAccess (int x, int y, int z) const =0 |
virtual int | coordAccess (int idx) const =0 |
virtual void | constantInterpolation (int x, int y, int z, StencilValue_t &value, double &scaleFactor) const |
different interpolation methods for boundary points More... | |
virtual void | linearInterpolation (int x, int y, int z, StencilValue_t &value, double &scaleFactor) const |
virtual void | quadraticInterpolation (int x, int y, int z, StencilValue_t &value, double &scaleFactor) const |
Protected Attributes | |
IntVector_t | nr_m |
number of mesh points in each direction More... | |
Vector_t | hr_m |
mesh-spacings in each direction More... | |
double | zMin_m |
min/max of bunch in floor coordinates More... | |
double | zMax_m |
Vector_t | min_m |
Vector_t | max_m |
bool | hasGeometryChanged_m |
flag indicating if geometry has changed for the current time-step More... | |
int | interpolationMethod_m |
interpolation type More... | |
std::map< int, int > | idxMap_m |
mapping (x,y,z) -> idx More... | |
std::map< int, int > | coordMap_m |
mapping idx -> (x,y,z) More... | |
Definition at line 43 of file IrregularDomain.h.
typedef Vektor<int, 3> IrregularDomain::IntVector_t |
Definition at line 60 of file IrregularDomain.h.
typedef Stencil<int> IrregularDomain::StencilIndex_t |
Definition at line 58 of file IrregularDomain.h.
typedef Stencil<double> IrregularDomain::StencilValue_t |
Definition at line 59 of file IrregularDomain.h.
IrregularDomain::IrregularDomain | ( | const IntVector_t & | nr, |
const Vector_t & | hr, | ||
const std::string & | interpl | ||
) |
Definition at line 32 of file IrregularDomain.cpp.
References CONSTANT, interpolationMethod_m, LINEAR, and QUADRATIC.
|
inlinevirtual |
Definition at line 140 of file IrregularDomain.h.
method to compute the intersection points with the boundary geometry (stored in some appropriate data structure)
hr | updated mesh spacings |
Implemented in RectangularDomain, EllipticDomain, BoxCornerDomain, and ArbitraryDomain.
|
protectedvirtual |
different interpolation methods for boundary points
Reimplemented in RegularDomain, and ArbitraryDomain.
Definition at line 137 of file IrregularDomain.cpp.
Referenced by getBoundaryStencil().
|
protectedpure virtual |
Implemented in RectangularDomain, EllipticDomain, BoxCornerDomain, and ArbitraryDomain.
Referenced by getCoord().
void IrregularDomain::getBoundaryStencil | ( | int | id, |
StencilValue_t & | value, | ||
double & | scaleFactor | ||
) | const |
method to calculate the stencil at a boundary points
id | index of the current element in the matrix |
scaleFactor | of stencil values |
Definition at line 118 of file IrregularDomain.cpp.
References getBoundaryStencil(), and getCoord().
void IrregularDomain::getBoundaryStencil | ( | int | x, |
int | y, | ||
int | z, | ||
StencilValue_t & | value, | ||
double & | scaleFactor | ||
) | const |
method to calculate the stencil at a boundary points
x | index of the current element in the matrix |
y | index of the current element in the matrix |
z | index of the current element in the matrix |
values | of stencil element |
scaleFactor | of stencil values |
Definition at line 95 of file IrregularDomain.cpp.
References IrregularDomain::Stencil< T >::center, CONSTANT, constantInterpolation(), interpolationMethod_m, LINEAR, linearInterpolation(), PAssert, QUADRATIC, and quadraticInterpolation().
Referenced by getBoundaryStencil().
|
virtual |
Conversion from a 3D index to (x,y,z)
Definition at line 82 of file IrregularDomain.cpp.
References coordAccess(), getNumXY(), and nr_m.
Referenced by getBoundaryStencil(), and getNeighbours().
|
inline |
Definition at line 115 of file IrregularDomain.h.
References hr_m.
Referenced by EllipticDomain::compute().
int IrregularDomain::getIdx | ( | int | x, |
int | y, | ||
int | z | ||
) | const |
Conversion from (x,y,z) to index on the 3D grid.
Definition at line 89 of file IrregularDomain.cpp.
References indexAccess(), and isInside().
Referenced by getNeighbours().
|
inline |
Definition at line 126 of file IrregularDomain.h.
References zMax_m.
Referenced by BoxCornerDomain::compute(), and RegularDomain::resizeMesh().
|
inline |
Definition at line 125 of file IrregularDomain.h.
References zMin_m.
Referenced by BoxCornerDomain::compute(), and RegularDomain::resizeMesh().
void IrregularDomain::getNeighbours | ( | int | idx, |
StencilIndex_t & | index | ||
) | const |
Definition at line 75 of file IrregularDomain.cpp.
References getCoord(), and getNeighbours().
void IrregularDomain::getNeighbours | ( | int | x, |
int | y, | ||
int | z, | ||
StencilIndex_t & | index | ||
) | const |
method to calculate the neighbours in the matrix of the current index (x,y,z)
x | index of the current element in the matrix |
y | index of the current element in the matrix |
z | index of the current element in the matrix |
index | stencil indices of an element |
Definition at line 46 of file IrregularDomain.cpp.
References IrregularDomain::Stencil< T >::back, IrregularDomain::Stencil< T >::east, IrregularDomain::Stencil< T >::front, getIdx(), isInside(), IrregularDomain::Stencil< T >::north, nr_m, IrregularDomain::Stencil< T >::south, and IrregularDomain::Stencil< T >::west.
Referenced by getNeighbours().
|
inline |
Definition at line 114 of file IrregularDomain.h.
References nr_m.
|
inlinevirtual |
Reimplemented in RegularDomain.
Definition at line 105 of file IrregularDomain.h.
References nr_m.
Referenced by getCoord().
|
inline |
Definition at line 129 of file IrregularDomain.h.
References max_m.
Referenced by EllipticDomain::compute(), BoxCornerDomain::getXIntersection(), BoxCornerDomain::isInside(), EllipticDomain::isInside(), RectangularDomain::isInside(), and RegularDomain::resizeMesh().
|
inline |
Definition at line 128 of file IrregularDomain.h.
References min_m.
Referenced by ArbitraryDomain::compute(), EllipticDomain::compute(), BoxCornerDomain::getXIntersection(), EllipticDomain::isInside(), EllipticDomain::linearInterpolation(), and RegularDomain::resizeMesh().
|
inline |
Definition at line 131 of file IrregularDomain.h.
References max_m.
Referenced by EllipticDomain::compute(), BoxCornerDomain::getB(), EllipticDomain::isInside(), RectangularDomain::isInside(), and RegularDomain::resizeMesh().
|
inline |
Definition at line 130 of file IrregularDomain.h.
References min_m.
Referenced by ArbitraryDomain::compute(), BoxCornerDomain::compute(), EllipticDomain::compute(), BoxCornerDomain::getYIntersection(), EllipticDomain::isInside(), EllipticDomain::linearInterpolation(), and RegularDomain::resizeMesh().
|
inline |
Definition at line 133 of file IrregularDomain.h.
References max_m.
Referenced by BoxCornerDomain::getB().
|
inline |
Definition at line 132 of file IrregularDomain.h.
References min_m.
Referenced by ArbitraryDomain::compute(), and BoxCornerDomain::getB().
|
inline |
Definition at line 138 of file IrregularDomain.h.
References hasGeometryChanged_m.
|
protectedpure virtual |
Implemented in RectangularDomain, EllipticDomain, BoxCornerDomain, and ArbitraryDomain.
Referenced by getIdx().
|
pure virtual |
method that checks if a given point lies inside the boundary
x | index of the current element in the matrix |
y | index of the current element in the matrix |
z | index of the current element in the matrix |
Implemented in RectangularDomain, EllipticDomain, BoxCornerDomain, and ArbitraryDomain.
Referenced by RegularDomain::constantInterpolation(), getIdx(), and getNeighbours().
|
protectedvirtual |
Reimplemented in EllipticDomain, BoxCornerDomain, and ArbitraryDomain.
Definition at line 145 of file IrregularDomain.cpp.
Referenced by getBoundaryStencil().
|
protectedvirtual |
Reimplemented in EllipticDomain, and BoxCornerDomain.
Definition at line 153 of file IrregularDomain.cpp.
Referenced by getBoundaryStencil().
|
virtual |
Reimplemented in RegularDomain.
Definition at line 127 of file IrregularDomain.cpp.
|
inline |
Definition at line 118 of file IrregularDomain.h.
References hr_m.
Referenced by ArbitraryDomain::compute(), BoxCornerDomain::compute(), and EllipticDomain::compute().
|
inline |
Definition at line 120 of file IrregularDomain.h.
References zMax_m, and zMin_m.
Referenced by EllipticDomain::EllipticDomain(), and RegularDomain::resizeMesh().
|
inline |
Definition at line 117 of file IrregularDomain.h.
|
inline |
Definition at line 136 of file IrregularDomain.h.
Referenced by ArbitraryDomain::ArbitraryDomain(), BoxCornerDomain::BoxCornerDomain(), and EllipticDomain::EllipticDomain().
|
inline |
Definition at line 135 of file IrregularDomain.h.
Referenced by ArbitraryDomain::ArbitraryDomain(), BoxCornerDomain::BoxCornerDomain(), and EllipticDomain::EllipticDomain().
|
protected |
mapping idx -> (x,y,z)
Definition at line 186 of file IrregularDomain.h.
Referenced by ArbitraryDomain::compute(), BoxCornerDomain::compute(), EllipticDomain::compute(), ArbitraryDomain::coordAccess(), BoxCornerDomain::coordAccess(), and EllipticDomain::coordAccess().
|
protected |
flag indicating if geometry has changed for the current time-step
Definition at line 177 of file IrregularDomain.h.
Referenced by ArbitraryDomain::compute(), BoxCornerDomain::compute(), EllipticDomain::compute(), and hasGeometryChanged().
|
protected |
mesh-spacings in each direction
Definition at line 167 of file IrregularDomain.h.
Referenced by EllipticDomain::compute(), ArbitraryDomain::constantInterpolation(), RegularDomain::constantInterpolation(), getHr(), BoxCornerDomain::getYIntersection(), BoxCornerDomain::isInside(), EllipticDomain::isInside(), RectangularDomain::isInside(), ArbitraryDomain::linearInterpolation(), BoxCornerDomain::linearInterpolation(), EllipticDomain::linearInterpolation(), BoxCornerDomain::quadraticInterpolation(), EllipticDomain::quadraticInterpolation(), RegularDomain::robinBoundaryStencil(), and setHr().
|
protected |
mapping (x,y,z) -> idx
Definition at line 183 of file IrregularDomain.h.
Referenced by ArbitraryDomain::compute(), BoxCornerDomain::compute(), EllipticDomain::compute(), ArbitraryDomain::indexAccess(), BoxCornerDomain::indexAccess(), and EllipticDomain::indexAccess().
|
protected |
interpolation type
Definition at line 180 of file IrregularDomain.h.
Referenced by EllipticDomain::compute(), getBoundaryStencil(), and IrregularDomain().
|
protected |
Definition at line 174 of file IrregularDomain.h.
Referenced by getXRangeMax(), getYRangeMax(), getZRangeMax(), resizeMesh(), and setRangeMax().
|
protected |
Definition at line 173 of file IrregularDomain.h.
Referenced by getXRangeMin(), getYRangeMin(), getZRangeMin(), resizeMesh(), and setRangeMin().
|
protected |
number of mesh points in each direction
Definition at line 165 of file IrregularDomain.h.
Referenced by ArbitraryDomain::compute(), BoxCornerDomain::compute(), EllipticDomain::compute(), getCoord(), getNeighbours(), getNr(), getNumXY(), RectangularDomain::indexAccess(), BoxCornerDomain::isInside(), EllipticDomain::isInside(), RectangularDomain::isInside(), ArbitraryDomain::linearInterpolation(), BoxCornerDomain::linearInterpolation(), BoxCornerDomain::quadraticInterpolation(), EllipticDomain::quadraticInterpolation(), resizeMesh(), RegularDomain::resizeMesh(), RegularDomain::robinBoundaryStencil(), setNr(), ArbitraryDomain::toCoordIdx(), EllipticDomain::toCoordIdx(), and BoxCornerDomain::toCoordIdx().
|
protected |
Definition at line 171 of file IrregularDomain.h.
Referenced by getMaxZ(), and setMinMaxZ().
|
protected |
min/max of bunch in floor coordinates
Definition at line 170 of file IrregularDomain.h.
Referenced by getMinZ(), and setMinMaxZ().