VAPOR3 3.9.4
|
Abstract base class for a 2D or 3D structured grid. More...
#include <StructuredGrid.h>
Public Member Functions | |
StructuredGrid (const std::vector< size_t > &dims, const std::vector< size_t > &bs, const std::vector< float * > &blks) | |
StructuredGrid (const DimsType &dims, const DimsType &bs, const std::vector< float * > &blks) | |
StructuredGrid ()=default | |
virtual | ~StructuredGrid ()=default |
std::string | GetType () const override |
const DimsType & | GetNodeDimensions () const override |
const size_t | GetNumNodeDimensions () const override |
const DimsType & | GetCellDimensions () const override |
const size_t | GetNumCellDimensions () const override |
virtual bool | GetCellNodes (const DimsType &cindices, std::vector< DimsType > &nodes) const override |
virtual bool | GetCellNeighbors (const DimsType &cindices, std::vector< DimsType > &cells) const override |
virtual bool | GetNodeCells (const DimsType &cindices, std::vector< DimsType > &cells) const override |
virtual bool | GetEnclosingRegion (const CoordType &minu, const CoordType &maxu, DimsType &min, DimsType &max) const override |
size_t | GetMaxVertexPerFace () const override |
size_t | GetMaxVertexPerCell () const override |
virtual void | ClampCoord (const CoordType &coords, CoordType &cCoords) const override |
virtual void | ClampCoord (const double coords[3], double cCoords[3]) const override |
virtual bool | HasInvertedCoordinateSystemHandiness () const override |
virtual bool | GetCellNodes (const DimsType &cindices, std::vector< DimsType > &nodes) const=0 |
virtual bool | GetCellNodes (const size_t cindices[], std::vector< DimsType > &nodes) const |
![]() | |
Grid (const std::vector< size_t > &dims, const std::vector< size_t > &bs, const std::vector< float * > &blks, size_t topology_dimension) | |
Grid (const DimsType &dims, const DimsType &bs, const std::vector< float * > &blks, size_t topology_dimension) | |
Grid () | |
virtual | ~Grid ()=default |
const DimsType & | GetDimensions () const |
size_t | GetNumDimensions () const |
virtual DimsType | GetCoordDimensions (size_t dim) const =0 |
virtual std::string | GetType () const =0 |
virtual size_t | GetGeometryDim () const =0 |
virtual const DimsType & | GetNodeDimensions () const =0 |
virtual const size_t | GetNumNodeDimensions () const =0 |
virtual const DimsType & | GetCellDimensions () const =0 |
virtual const size_t | GetNumCellDimensions () const =0 |
const std::vector< size_t > | GetDimensionInBlks () const |
const std::vector< size_t > & | GetBlockSize () const |
const std::vector< float * > & | GetBlks () const |
virtual float | GetValueAtIndex (const DimsType &indices) const |
virtual float | GetValueAtIndex (const std::vector< size_t > &indices) const |
virtual void | SetValue (const DimsType &indices, float value) |
virtual void | SetValue (const size_t indices[3], float value) |
virtual float | AccessIJK (size_t i, size_t j=0, size_t k=0) const |
void | SetValueIJK (size_t i, size_t j, size_t k, float v) |
void | SetValueIJK (size_t i, size_t j, float v) |
void | SetValueIJK (size_t i, float v) |
virtual float | GetValue (const CoordType &coords) const |
virtual float | GetValue (const std::vector< double > &coords) const |
virtual float | GetValue (const double coords[]) const |
virtual float | GetValue (double x, double y) const |
virtual float | GetValue (double x, double y, double z) const |
virtual void | GetUserExtents (CoordType &minu, CoordType &maxu) const |
virtual void | GetUserExtents (double minu[3], double maxu[3]) const |
virtual void | GetUserExtents (std::vector< double > &minu, std::vector< double > &maxu) const |
virtual void | GetBoundingBox (const DimsType &min, const DimsType &max, CoordType &minu, CoordType &maxu) const =0 |
virtual void | GetBoundingBox (const std::vector< size_t > &min, const std::vector< size_t > &max, std::vector< double > &minu, std::vector< double > &maxu) const |
virtual bool | GetEnclosingRegion (const CoordType &minu, const CoordType &maxu, DimsType &min, DimsType &max) const =0 |
virtual float | GetMissingValue () const |
void | SetMissingValue (float missing_value) |
void | SetHasMissingValues (bool flag) |
bool | HasMissingData () const |
virtual bool | HasInvertedCoordinateSystemHandiness () const |
virtual int | GetInterpolationOrder () const |
virtual void | SetInterpolationOrder (int order) |
virtual void | GetUserCoordinates (const DimsType &indices, CoordType &coords) const =0 |
virtual void | GetUserCoordinates (const size_t indices[], double coords[]) const |
virtual void | GetUserCoordinates (const std::vector< size_t > &indices, std::vector< double > &coords) const |
virtual void | GetUserCoordinates (size_t i, double &x, double &y, double &z) const |
virtual void | GetUserCoordinates (size_t i, size_t j, double &x, double &y, double &z) const |
virtual void | GetUserCoordinates (size_t i, size_t j, size_t k, double &x, double &y, double &z) const |
virtual bool | GetIndicesCell (const CoordType &coords, DimsType &indices) const =0 |
virtual bool | GetIndicesCell (const double coords[3], size_t indices[3]) const |
virtual bool | GetIndicesCell (const std::vector< double > &coords, std::vector< size_t > &indices) const |
virtual void | GetRange (float range[2]) const |
virtual void | GetRange (const DimsType &min, const DimsType &max, float range[2]) const |
virtual void | GetRange (std::vector< size_t > min, std::vector< size_t > max, float range[2]) const |
virtual bool | InsideGrid (const CoordType &coords) const =0 |
virtual bool | InsideGrid (const double coords[3]) const |
virtual bool | InsideGrid (const std::vector< double > &coords) const |
virtual bool | GetCellNodes (const DimsType &cindices, std::vector< DimsType > &nodes) const =0 |
virtual bool | GetCellNodes (const size_t cindices[], std::vector< DimsType > &nodes) const |
virtual bool | GetCellNeighbors (const DimsType &cindices, std::vector< DimsType > &cells) const =0 |
virtual bool | GetNodeCells (const DimsType &indices, std::vector< DimsType > &cells) const =0 |
virtual size_t | GetMaxVertexPerFace () const =0 |
virtual size_t | GetMaxVertexPerCell () const =0 |
virtual void | ClampCoord (const CoordType &coords, CoordType &cCoords) const =0 |
virtual void | ClampCoord (const double coords[3], double cCoords[3]) const |
virtual void | ClampIndex (const DimsType &indices, DimsType &cIndices) const |
virtual void | ClampCellIndex (const DimsType &indices, DimsType &cIndices) const |
virtual void | SetPeriodic (const std::vector< bool > &periodic) |
virtual const std::vector< bool > & | GetPeriodic () const |
virtual size_t | GetTopologyDim () const |
virtual long | GetNodeOffset () const |
virtual void | SetNodeOffset (long offset) |
virtual long | GetCellOffset () const |
virtual void | SetCellOffset (long offset) |
virtual DimsType | GetMinAbs () const |
virtual void | SetMinAbs (const DimsType &minAbs) |
virtual ConstCoordItr | ConstCoordBegin () const =0 |
Return constant grid coordinate iterator. | |
virtual ConstCoordItr | ConstCoordEnd () const =0 |
virtual ConstNodeIterator | ConstNodeBegin () const |
virtual ConstNodeIterator | ConstNodeBegin (const CoordType &minu, const CoordType &maxu) const |
virtual ConstNodeIterator | ConstNodeBegin (const std::vector< double > &minu, const std::vector< double > &maxu) const |
virtual ConstNodeIterator | ConstNodeEnd () const |
virtual ConstCellIterator | ConstCellBegin () const |
virtual ConstCellIterator | ConstCellBegin (const CoordType &minu, const CoordType &maxu) const |
virtual ConstCellIterator | ConstCellBegin (const std::vector< double > &minu, const std::vector< double > &maxu) const |
virtual ConstCellIterator | ConstCellEnd () const |
Iterator | begin (const CoordType &minu, const CoordType &maxu) |
Iterator | begin (const std::vector< double > &minu, const std::vector< double > &maxu) |
Iterator | begin () |
Iterator | end () |
ConstIterator | cbegin (const CoordType &minu, const CoordType &maxu) const |
ConstIterator | cbegin (const std::vector< double > &minu, const std::vector< double > &maxu) |
ConstIterator | cbegin () const |
ConstIterator | cend () const |
Static Public Member Functions | |
static std::string | GetClassType () |
![]() | |
static size_t | GetNumDimensions (DimsType dims) |
static DimsType | Dims (const DimsType &min, const DimsType &max) |
static bool | PointInsideBoundingRectangle (const double pt[], const double verts[], int n) |
template<typename T > | |
static void | CopyToArr3 (const std::vector< T > &src, std::array< T, 3 > &dst) |
template<typename T > | |
static void | CopyToArr3 (const T *src, size_t n, std::array< T, 3 > &dst) |
template<typename T > | |
static void | CopyFromArr3 (const std::array< T, 3 > &src, std::vector< T > &dst) |
template<typename T > | |
static void | CopyFromArr3 (const std::array< T, 3 > &src, T *dst) |
Friends | |
VDF_API friend std::ostream & | operator<< (std::ostream &o, const StructuredGrid &sg) |
Additional Inherited Members | |
![]() | |
typedef const CoordType | ConstCoordType |
typedef Grid::PolyIterator< ConstCoordType > | ConstCoordItr |
typedef Grid::AbstractIterator< ConstCoordType > | ConstCoordItrAbstract |
typedef const DimsType | ConstIndexType |
typedef Grid::PolyIterator< ConstIndexType > | ConstNodeIterator |
typedef Grid::AbstractIterator< ConstIndexType > | ConstNodeIteratorAbstract |
typedef Grid::PolyIterator< ConstIndexType > | ConstCellIterator |
Cell index iterator. Iterates over grid cell indices. | |
typedef Grid::AbstractIterator< ConstIndexType > | ConstCellIteratorAbstract |
typedef Grid::ForwardIterator< Grid > | Iterator |
typedef Grid::ForwardIterator< Grid const > | ConstIterator |
![]() | |
virtual float | GetValueNearestNeighbor (const CoordType &coords) const =0 |
virtual float | GetValueLinear (const CoordType &coords) const =0 |
virtual void | GetUserExtentsHelper (CoordType &minu, CoordType &maxu) const =0 |
virtual float * | GetValuePtrAtIndex (const std::vector< float * > &blks, const DimsType &indices) const |
virtual void | ClampIndex (const std::vector< size_t > &dims, const DimsType indices, DimsType &cIndices) const |
virtual void | ClampIndex (const DimsType &dims, const DimsType indices, DimsType &cIndices) const |
float | BilinearInterpolate (size_t i, size_t j, size_t k, const double xwgt, const double ywgt) const |
float | TrilinearInterpolate (size_t i, size_t j, size_t k, const double xwgt, const double ywgt, const double zwgt) const |
Abstract base class for a 2D or 3D structured grid.
This abstract base class defines a 2D or 3D structured grid: a tessellation of Euculidean space by quadrilaterals (2D) or hexahdrons (3D). Each grid point can be addressed by an index(i,j,k), where i, j
and k range from 0 to dim - 1, where dim is the dimension of the I, J, or K axis, respectively. Moreover, each grid point has a coordinate in a user-defined coordinate system.
The structured grid samples a scalar function at each grid point. The scalar function samples are stored as an array decomposed into equal-sized blocks.
Because grid samples are repesented internally as arrays, when accessing multiple grid points better performance is achieved by using unit stride. The I axis varies fastest (has unit stride), followed by J, then K. Best performance is achieved when using the class iterator: Grid::Iterator.
For methods that allow the specification of grid indecies or coordinates as a single parameter tuple (e.g. vector <double> coordinate) the first element of the tuple corresponds to the I axis, etc.
Definition at line 48 of file StructuredGrid.h.
VAPoR::StructuredGrid::StructuredGrid | ( | const std::vector< size_t > & | dims, |
const std::vector< size_t > & | bs, | ||
const std::vector< float * > & | blks | ||
) |
Construct a structured grid sampling a 3D or 2D scalar function
The sampled function is represented as a 2D or 3D array, decomposed into smaller blocks (tiles in 2D). The dimensions of the array are not constrained to coincide with block (tile) boundaries.
The length of parameter vectors bs
, and dim
must all be either 3 (3D structured grid) or 2 (2D structured grid)
If blks
is empty a dataless StructuredGrid object is returned. Data can not be retrieved from a dataless StructuredGrid. However, coordinate access methods may still be invoked.
VAPoR::StructuredGrid::StructuredGrid | ( | const DimsType & | dims, |
const DimsType & | bs, | ||
const std::vector< float * > & | blks | ||
) |
|
default |
|
virtualdefault |
|
overridevirtual |
Clamp periodic coordinates and ensure valid coordinate vector dimension
This method ensures that periodic coordinates are within the bounding box of the grid and that the coordinate vector dimension does not exceed the number of allowable coordinates as returned by GetGeometryDim().
[in] | coords | A coordinate vector |
[out] | cCoords | The clamped coordintes coords |
Implements VAPoR::Grid.
|
inlineoverridevirtual |
|
inlineoverridevirtual |
Implements VAPoR::Grid.
Definition at line 78 of file StructuredGrid.h.
|
overridevirtual |
Get the IDs (indices) of all of the cells that border a cell
This method returns a vector of index vectors. Each index vector contains the indices of a cell that borders the cell given by indices
. If a cell edge is a boundary edge, having no neighbors, the associated index vector for that border will be empty. The cell IDs are returned in counter-clockwise order
[in] | cindices | An ordered vector of multi-dimensional cell indices. |
[out] | cells | A vector of index vectors. Each index vector has size given by GetDimensions.size() |
Implements VAPoR::Grid.
|
overridevirtual |
Get the indices of the nodes that define a cell
This method returns a vector of index vectors. Each index vector contains the indices for a node that defines the given cell ID indices
.
For 2D cells the node IDs are returned in counter-clockwise order. For 3D cells the ordering is dependent on the shape of the node. TBD.
[in] | cindices | An array of size Grid::GetDimensions.size() specifying the index of the cell to query. |
[out] | nodes | An array of size Grid::GetMaxVertexPerCell() x Grid::GetDimensions.size() that will contain the concatenated list of node indices on return. |
[out] | n | The number of node indices returned in nodes , an integer in the range (0..Grid::GetMaxVertexPerCell()). |
Implements VAPoR::Grid.
|
virtual |
Get the indices of the nodes that define a cell
This method returns a vector of index vectors. Each index vector contains the indices for a node that defines the given cell ID indices
.
For 2D cells the node IDs are returned in counter-clockwise order. For 3D cells the ordering is dependent on the shape of the node. TBD.
[in] | cindices | An array of size Grid::GetDimensions.size() specifying the index of the cell to query. |
[out] | nodes | An array of size Grid::GetMaxVertexPerCell() x Grid::GetDimensions.size() that will contain the concatenated list of node indices on return. |
[out] | n | The number of node indices returned in nodes , an integer in the range (0..Grid::GetMaxVertexPerCell()). |
Implements VAPoR::Grid.
|
inlinevirtual |
|
inlinestatic |
Definition at line 72 of file StructuredGrid.h.
|
overridevirtual |
Get bounding indices of grid containing a region
Calculates the starting and ending grid indices of the smallest grid completely containing the rectangular region defined by the user coordinates minu
and maxu
If rectangluar region defined by minu
and maxu
can not be contained the minimum and maximum indices are returned in min
and max
, respectively
[in] | minu | User coordinates of minimum coorner |
[in] | maxu | User coordinates of maximum coorner |
[out] | min | Integer coordinates of minimum coorner |
[out] | max | Integer coordinates of maximum coorner |
Implements VAPoR::Grid.
|
inlineoverridevirtual |
Return the maximum number of vertices per cell
Implements VAPoR::Grid.
Definition at line 101 of file StructuredGrid.h.
|
inlineoverridevirtual |
Return the maximum number of vertices per cell face
Implements VAPoR::Grid.
Definition at line 99 of file StructuredGrid.h.
|
overridevirtual |
Get the IDs (indices) of all of the cells that share a node
This method returns a vector of index vectors. Each index vector contains the indices of a cell that share the node given by indices
. The cell IDs are returned in counter-clockwise order
[out] | nodes | A vector of index vectors . Each index vector has size given by GetDimensions.size() |
Implements VAPoR::Grid.
|
overridevirtual |
Implements VAPoR::Grid.
|
inlineoverridevirtual |
Implements VAPoR::Grid.
Definition at line 79 of file StructuredGrid.h.
|
overridevirtual |
Implements VAPoR::Grid.
|
inlineoverridevirtual |
Implements VAPoR::Grid.
Definition at line 73 of file StructuredGrid.h.
|
overridevirtual |
Return true if mesh primitives have counter clockwise winding order.
Reimplemented from VAPoR::Grid.
|
friend |