OPAL (Object Oriented Parallel Accelerator Library) 2024.2
OPAL
ArbitraryDomain Class Reference

#include <ArbitraryDomain.h>

Inheritance diagram for ArbitraryDomain:
Collaboration diagram for ArbitraryDomain:

Public Types

typedef Stencil< int > StencilIndex_t
typedef Stencil< double > StencilValue_t
typedef Vektor< int, 3 > IntVector_t

Public Member Functions

 ArbitraryDomain (BoundaryGeometry *bgeom, IntVector_t nr, Vector_t hr, std::string interpl)
 ~ArbitraryDomain ()
bool isInside (int idx, int idy, int idz) const override
 queries if a given (x,y,z) coordinate lies inside the domain
void compute (Vector_t hr, NDIndex< 3 > localId) override
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).
int getIdx (int x, int y, int z) const
 Conversion from (x,y,z) to index on the 3D grid.
virtual int getNumXY () const
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 void resizeMesh (Vector_t &origin, Vector_t &hr, const Vector_t &, const Vector_t &, double)

Protected Member Functions

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
Vector_t hr_m
 mesh-spacings in each direction
double zMin_m
 min/max of bunch in floor coordinates
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
int interpolationMethod_m
 interpolation type
std::map< int, int > idxMap_m
 mapping (x,y,z) -> idx
std::map< int, int > coordMap_m
 mapping idx -> (x,y,z)

Private Types

typedef std::multimap< std::tuple< int, int, int >, double > PointList_t

Private Member Functions

int toCoordIdx (int idx, int idy, int idz) const
int indexAccess (int x, int y, int z) const override
int coordAccess (int idx) const override
void constantInterpolation (int idx, int idy, int idz, StencilValue_t &value, double &scaleFactor) const override
 different interpolation methods for boundary points
void linearInterpolation (int idx, int idy, int idz, StencilValue_t &value, double &scaleFactor) const override

Private Attributes

BoundaryGeometrybgeom_m
PointList_t intersectHiX_m
 all intersection points with gridlines in X direction
PointList_t intersectLoX_m
PointList_t intersectHiY_m
 all intersection points with gridlines in Y direction
PointList_t intersectLoY_m
PointList_t intersectHiZ_m
 all intersection points with gridlines in Z direction
PointList_t intersectLoZ_m
std::map< int, int > numXY_m
std::map< int, bool > isInsideMap_m
Vector_t globalInsideP0_m

Detailed Description

Definition at line 43 of file ArbitraryDomain.h.

Member Typedef Documentation

◆ IntVector_t

typedef Vektor<int, 3> IrregularDomain::IntVector_t
inherited

Definition at line 60 of file IrregularDomain.h.

◆ PointList_t

typedef std::multimap< std::tuple<int, int, int>, double > ArbitraryDomain::PointList_t
private

PointList_t maps from an (x,z) resp. (y,z) pair to double values (=intersections with boundary)

Definition at line 65 of file ArbitraryDomain.h.

◆ StencilIndex_t

typedef Stencil<int> IrregularDomain::StencilIndex_t
inherited

Definition at line 58 of file IrregularDomain.h.

◆ StencilValue_t

typedef Stencil<double> IrregularDomain::StencilValue_t
inherited

Definition at line 59 of file IrregularDomain.h.

Constructor & Destructor Documentation

◆ ArbitraryDomain()

ArbitraryDomain::ArbitraryDomain ( BoundaryGeometry * bgeom,
IntVector_t nr,
Vector_t hr,
std::string interpl )

Definition at line 40 of file ArbitraryDomain.cpp.

References bgeom_m, BoundaryGeometry::getInsidePoint(), BoundaryGeometry::getmaxcoords(), BoundaryGeometry::getmincoords(), globalInsideP0_m, IrregularDomain::IrregularDomain(), nr, IrregularDomain::setRangeMax(), and IrregularDomain::setRangeMin().

Here is the call graph for this function:

◆ ~ArbitraryDomain()

ArbitraryDomain::~ArbitraryDomain ( )

Definition at line 62 of file ArbitraryDomain.cpp.

Member Function Documentation

◆ compute()

void ArbitraryDomain::compute ( Vector_t hr,
NDIndex< 3 > localId )
overridevirtual

method to compute the intersection points with the boundary geometry (stored in some appropriate data structure)

Parameters
hrupdated mesh spacings

Implements IrregularDomain.

Definition at line 66 of file ArbitraryDomain.cpp.

References bgeom_m, IrregularDomain::coordMap_m, endl(), IrregularDomain::getXRangeMin(), IrregularDomain::getYRangeMin(), IrregularDomain::getZRangeMin(), globalInsideP0_m, gmsg, IrregularDomain::hasGeometryChanged_m, IrregularDomain::idxMap_m, INFOMSG, intersectHiX_m, intersectHiY_m, intersectHiZ_m, intersectLoX_m, intersectLoY_m, intersectLoZ_m, isInside(), isInsideMap_m, level2(), IrregularDomain::nr_m, numXY_m, IrregularDomain::setHr(), and toCoordIdx().

Here is the call graph for this function:

◆ constantInterpolation()

void ArbitraryDomain::constantInterpolation ( int x,
int y,
int z,
StencilValue_t & value,
double & scaleFactor ) const
overrideprivatevirtual

different interpolation methods for boundary points

Reimplemented from IrregularDomain.

Definition at line 248 of file ArbitraryDomain.cpp.

References IrregularDomain::Stencil< T >::back, IrregularDomain::Stencil< T >::center, IrregularDomain::Stencil< T >::east, IrregularDomain::Stencil< T >::front, IrregularDomain::hr_m, isInside(), IrregularDomain::Stencil< T >::north, IrregularDomain::Stencil< T >::south, and IrregularDomain::Stencil< T >::west.

Here is the call graph for this function:

◆ coordAccess()

int ArbitraryDomain::coordAccess ( int idx) const
inlineoverrideprivatevirtual

Implements IrregularDomain.

Definition at line 94 of file ArbitraryDomain.h.

References IrregularDomain::coordMap_m.

◆ getBoundaryStencil() [1/2]

void IrregularDomain::getBoundaryStencil ( int id,
StencilValue_t & value,
double & scaleFactor ) const
inherited

method to calculate the stencil at a boundary points

Parameters
idindex of the current element in the matrix
scaleFactorof stencil values

Definition at line 118 of file IrregularDomain.cpp.

References getBoundaryStencil(), and getCoord().

Here is the call graph for this function:

◆ getBoundaryStencil() [2/2]

void IrregularDomain::getBoundaryStencil ( int x,
int y,
int z,
StencilValue_t & value,
double & scaleFactor ) const
inherited

method to calculate the stencil at a boundary points

Parameters
xindex of the current element in the matrix
yindex of the current element in the matrix
zindex of the current element in the matrix
valuesof stencil element
scaleFactorof 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().

Here is the call graph for this function:

◆ getCoord()

void IrregularDomain::getCoord ( int idx,
int & x,
int & y,
int & z ) const
virtualinherited

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().

Here is the call graph for this function:

◆ getHr()

Vector_t IrregularDomain::getHr ( ) const
inlineinherited

Definition at line 115 of file IrregularDomain.h.

References hr_m.

Referenced by EllipticDomain::compute().

◆ getIdx()

int IrregularDomain::getIdx ( int x,
int y,
int z ) const
inherited

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().

Here is the call graph for this function:

◆ getMaxZ()

double IrregularDomain::getMaxZ ( ) const
inlineinherited

Definition at line 126 of file IrregularDomain.h.

References zMax_m.

Referenced by BoxCornerDomain::compute(), and RegularDomain::resizeMesh().

◆ getMinZ()

double IrregularDomain::getMinZ ( ) const
inlineinherited

Definition at line 125 of file IrregularDomain.h.

References zMin_m.

Referenced by BoxCornerDomain::compute(), and RegularDomain::resizeMesh().

◆ getNeighbours() [1/2]

void IrregularDomain::getNeighbours ( int idx,
StencilIndex_t & index ) const
inherited

Definition at line 75 of file IrregularDomain.cpp.

References getCoord(), and getNeighbours().

Here is the call graph for this function:

◆ getNeighbours() [2/2]

void IrregularDomain::getNeighbours ( int x,
int y,
int z,
StencilIndex_t & index ) const
inherited

method to calculate the neighbours in the matrix of the current index (x,y,z)

Parameters
xindex of the current element in the matrix
yindex of the current element in the matrix
zindex of the current element in the matrix
indexstencil 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().

Here is the call graph for this function:

◆ getNr()

IntVector_t IrregularDomain::getNr ( ) const
inlineinherited

Definition at line 114 of file IrregularDomain.h.

References nr_m.

◆ getNumXY()

virtual int IrregularDomain::getNumXY ( ) const
inlinevirtualinherited

Reimplemented in RegularDomain.

Definition at line 105 of file IrregularDomain.h.

References nr_m.

Referenced by getCoord().

◆ getXRangeMax()

double IrregularDomain::getXRangeMax ( ) const
inlineinherited

◆ getXRangeMin()

double IrregularDomain::getXRangeMin ( ) const
inlineinherited

◆ getYRangeMax()

double IrregularDomain::getYRangeMax ( ) const
inlineinherited

◆ getYRangeMin()

◆ getZRangeMax()

double IrregularDomain::getZRangeMax ( ) const
inlineinherited

Definition at line 133 of file IrregularDomain.h.

References max_m.

Referenced by BoxCornerDomain::getB().

◆ getZRangeMin()

double IrregularDomain::getZRangeMin ( ) const
inlineinherited

Definition at line 132 of file IrregularDomain.h.

References min_m.

Referenced by ArbitraryDomain::compute(), and BoxCornerDomain::getB().

◆ hasGeometryChanged()

bool IrregularDomain::hasGeometryChanged ( ) const
inlineinherited

Definition at line 138 of file IrregularDomain.h.

References hasGeometryChanged_m.

◆ indexAccess()

int ArbitraryDomain::indexAccess ( int x,
int y,
int z ) const
inlineoverrideprivatevirtual

Implements IrregularDomain.

Definition at line 90 of file ArbitraryDomain.h.

References IrregularDomain::idxMap_m, and toCoordIdx().

Here is the call graph for this function:

◆ isInside()

bool ArbitraryDomain::isInside ( int idx,
int idy,
int idz ) const
inlineoverridevirtual

queries if a given (x,y,z) coordinate lies inside the domain

Implements IrregularDomain.

Definition at line 52 of file ArbitraryDomain.h.

References isInsideMap_m, and toCoordIdx().

Referenced by compute(), and constantInterpolation().

Here is the call graph for this function:

◆ linearInterpolation()

◆ quadraticInterpolation()

void IrregularDomain::quadraticInterpolation ( int x,
int y,
int z,
StencilValue_t & value,
double & scaleFactor ) const
protectedvirtualinherited

Reimplemented in BoxCornerDomain, and EllipticDomain.

Definition at line 153 of file IrregularDomain.cpp.

Referenced by getBoundaryStencil().

◆ resizeMesh()

void IrregularDomain::resizeMesh ( Vector_t & origin,
Vector_t & hr,
const Vector_t & ,
const Vector_t & ,
double  )
virtualinherited

Reimplemented in RegularDomain.

Definition at line 127 of file IrregularDomain.cpp.

References max_m, min_m, and nr_m.

◆ setHr()

void IrregularDomain::setHr ( Vector_t hr)
inlineinherited

Definition at line 118 of file IrregularDomain.h.

References hr_m.

Referenced by ArbitraryDomain::compute(), BoxCornerDomain::compute(), and EllipticDomain::compute().

◆ setMinMaxZ()

void IrregularDomain::setMinMaxZ ( double minz,
double maxz )
inlineinherited

Definition at line 120 of file IrregularDomain.h.

References zMax_m, and zMin_m.

Referenced by EllipticDomain::EllipticDomain(), and RegularDomain::resizeMesh().

◆ setNr()

void IrregularDomain::setNr ( IntVector_t nr)
inlineinherited

Definition at line 117 of file IrregularDomain.h.

References nr, and nr_m.

◆ setRangeMax()

void IrregularDomain::setRangeMax ( const Vector_t & max)
inlineinherited

Definition at line 136 of file IrregularDomain.h.

References max(), and max_m.

Referenced by ArbitraryDomain::ArbitraryDomain(), BoxCornerDomain::BoxCornerDomain(), and EllipticDomain::EllipticDomain().

Here is the call graph for this function:

◆ setRangeMin()

void IrregularDomain::setRangeMin ( const Vector_t & min)
inlineinherited

Definition at line 135 of file IrregularDomain.h.

References min(), and min_m.

Referenced by ArbitraryDomain::ArbitraryDomain(), BoxCornerDomain::BoxCornerDomain(), and EllipticDomain::EllipticDomain().

Here is the call graph for this function:

◆ toCoordIdx()

int ArbitraryDomain::toCoordIdx ( int idx,
int idy,
int idz ) const
inlineprivate

Definition at line 85 of file ArbitraryDomain.h.

References IrregularDomain::nr_m.

Referenced by compute(), indexAccess(), and isInside().

Member Data Documentation

◆ bgeom_m

BoundaryGeometry* ArbitraryDomain::bgeom_m
private

Definition at line 60 of file ArbitraryDomain.h.

Referenced by ArbitraryDomain(), and compute().

◆ coordMap_m

std::map<int, int> IrregularDomain::coordMap_m
protectedinherited

◆ globalInsideP0_m

Vector_t ArbitraryDomain::globalInsideP0_m
private

Definition at line 82 of file ArbitraryDomain.h.

Referenced by ArbitraryDomain(), and compute().

◆ hasGeometryChanged_m

bool IrregularDomain::hasGeometryChanged_m
protectedinherited

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().

◆ hr_m

◆ idxMap_m

std::map<int, int> IrregularDomain::idxMap_m
protectedinherited

◆ interpolationMethod_m

int IrregularDomain::interpolationMethod_m
protectedinherited

interpolation type

Definition at line 180 of file IrregularDomain.h.

Referenced by EllipticDomain::compute(), getBoundaryStencil(), and IrregularDomain().

◆ intersectHiX_m

PointList_t ArbitraryDomain::intersectHiX_m
private

all intersection points with gridlines in X direction

Definition at line 68 of file ArbitraryDomain.h.

Referenced by compute(), and linearInterpolation().

◆ intersectHiY_m

PointList_t ArbitraryDomain::intersectHiY_m
private

all intersection points with gridlines in Y direction

Definition at line 71 of file ArbitraryDomain.h.

Referenced by compute(), and linearInterpolation().

◆ intersectHiZ_m

PointList_t ArbitraryDomain::intersectHiZ_m
private

all intersection points with gridlines in Z direction

Definition at line 74 of file ArbitraryDomain.h.

Referenced by compute(), and linearInterpolation().

◆ intersectLoX_m

PointList_t ArbitraryDomain::intersectLoX_m
private

Definition at line 68 of file ArbitraryDomain.h.

Referenced by compute(), and linearInterpolation().

◆ intersectLoY_m

PointList_t ArbitraryDomain::intersectLoY_m
private

Definition at line 71 of file ArbitraryDomain.h.

Referenced by compute(), and linearInterpolation().

◆ intersectLoZ_m

PointList_t ArbitraryDomain::intersectLoZ_m
private

Definition at line 74 of file ArbitraryDomain.h.

Referenced by compute(), and linearInterpolation().

◆ isInsideMap_m

std::map<int, bool> ArbitraryDomain::isInsideMap_m
private

Definition at line 80 of file ArbitraryDomain.h.

Referenced by compute(), and isInside().

◆ max_m

Vector_t IrregularDomain::max_m
protectedinherited

Definition at line 174 of file IrregularDomain.h.

Referenced by getXRangeMax(), getYRangeMax(), getZRangeMax(), resizeMesh(), and setRangeMax().

◆ min_m

Vector_t IrregularDomain::min_m
protectedinherited

Definition at line 173 of file IrregularDomain.h.

Referenced by getXRangeMin(), getYRangeMin(), getZRangeMin(), resizeMesh(), and setRangeMin().

◆ nr_m

◆ numXY_m

std::map<int, int> ArbitraryDomain::numXY_m
private

Definition at line 77 of file ArbitraryDomain.h.

Referenced by compute().

◆ zMax_m

double IrregularDomain::zMax_m
protectedinherited

Definition at line 171 of file IrregularDomain.h.

Referenced by getMaxZ(), and setMinMaxZ().

◆ zMin_m

double IrregularDomain::zMin_m
protectedinherited

min/max of bunch in floor coordinates

Definition at line 170 of file IrregularDomain.h.

Referenced by getMinZ(), and setMinMaxZ().


The documentation for this class was generated from the following files: