VAPOR3 3.9.4
Public Member Functions | Static Public Member Functions | Friends | List of all members
VAPoR::StructuredGrid Class Reference

Abstract base class for a 2D or 3D structured grid. More...

#include <StructuredGrid.h>

Inheritance diagram for VAPoR::StructuredGrid:
VAPoR::Grid VAPoR::CurvilinearGrid VAPoR::LayeredGrid VAPoR::RegularGrid VAPoR::StretchedGrid VAPoR::ArbitrarilyOrientedRegularGrid VAPoR::SphericalGrid

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 DimsTypeGetNodeDimensions () const override
 
const size_t GetNumNodeDimensions () const override
 
const DimsTypeGetCellDimensions () 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
 
- Public Member Functions inherited from VAPoR::Grid
 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 DimsTypeGetDimensions () 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 DimsTypeGetNodeDimensions () const =0
 
virtual const size_t GetNumNodeDimensions () const =0
 
virtual const DimsTypeGetCellDimensions () 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 Public Member Functions inherited from VAPoR::Grid
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

- Public Types inherited from VAPoR::Grid
typedef const CoordType ConstCoordType
 
typedef Grid::PolyIterator< ConstCoordTypeConstCoordItr
 
typedef Grid::AbstractIterator< ConstCoordTypeConstCoordItrAbstract
 
typedef const DimsType ConstIndexType
 
typedef Grid::PolyIterator< ConstIndexTypeConstNodeIterator
 
typedef Grid::AbstractIterator< ConstIndexTypeConstNodeIteratorAbstract
 
typedef Grid::PolyIterator< ConstIndexTypeConstCellIterator
 Cell index iterator. Iterates over grid cell indices.
 
typedef Grid::AbstractIterator< ConstIndexTypeConstCellIteratorAbstract
 
typedef Grid::ForwardIterator< GridIterator
 
typedef Grid::ForwardIterator< Grid const > ConstIterator
 
- Protected Member Functions inherited from VAPoR::Grid
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
 

Detailed Description

Abstract base class for a 2D or 3D structured grid.

Author
John Clyne

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.

Note
Throughout this class grid vertex offsets are specified as i, j, k, where i, j, k are integers. User coordinates are real values denoted x, y, z, and are given by functions X(i,j,k), Y(i,j,k), Z(i,j,k).

Definition at line 48 of file StructuredGrid.h.

Constructor & Destructor Documentation

◆ StructuredGrid() [1/3]

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.

◆ StructuredGrid() [2/3]

VAPoR::StructuredGrid::StructuredGrid ( const DimsType dims,
const DimsType bs,
const std::vector< float * > &  blks 
)

◆ StructuredGrid() [3/3]

VAPoR::StructuredGrid::StructuredGrid ( )
default

◆ ~StructuredGrid()

virtual VAPoR::StructuredGrid::~StructuredGrid ( )
virtualdefault

Member Function Documentation

◆ ClampCoord() [1/2]

virtual void VAPoR::StructuredGrid::ClampCoord ( const CoordType coords,
CoordType cCoords 
) const
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().

Parameters
[in]coordsA coordinate vector
[out]cCoordsThe clamped coordintes coords
See also
GetGeometryDim()

Implements VAPoR::Grid.

◆ ClampCoord() [2/2]

virtual void VAPoR::StructuredGrid::ClampCoord ( const double  coords[3],
double  cCoords[3] 
) const
inlineoverridevirtual
Deprecated:

Reimplemented from VAPoR::Grid.

Definition at line 107 of file StructuredGrid.h.

◆ GetCellDimensions()

const DimsType & VAPoR::StructuredGrid::GetCellDimensions ( ) const
inlineoverridevirtual

Implements VAPoR::Grid.

Definition at line 78 of file StructuredGrid.h.

◆ GetCellNeighbors()

virtual bool VAPoR::StructuredGrid::GetCellNeighbors ( const DimsType cindices,
std::vector< DimsType > &  cells 
) const
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

Parameters
[in]cindicesAn ordered vector of multi-dimensional cell indices.
[out]cellsA vector of index vectors. Each index vector has size given by GetDimensions.size()

Implements VAPoR::Grid.

◆ GetCellNodes() [1/3]

virtual bool VAPoR::StructuredGrid::GetCellNodes ( const DimsType cindices,
std::vector< DimsType > &  nodes 
) const
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.

Parameters
[in]cindicesAn array of size Grid::GetDimensions.size() specifying the index of the cell to query.
[out]nodesAn array of size Grid::GetMaxVertexPerCell() x Grid::GetDimensions.size() that will contain the concatenated list of node indices on return.
[out]nThe number of node indices returned in nodes, an integer in the range (0..Grid::GetMaxVertexPerCell()).

Implements VAPoR::Grid.

◆ GetCellNodes() [2/3]

virtual bool VAPoR::Grid::GetCellNodes ( const DimsType cindices,
std::vector< DimsType > &  nodes 
) const
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.

Parameters
[in]cindicesAn array of size Grid::GetDimensions.size() specifying the index of the cell to query.
[out]nodesAn array of size Grid::GetMaxVertexPerCell() x Grid::GetDimensions.size() that will contain the concatenated list of node indices on return.
[out]nThe number of node indices returned in nodes, an integer in the range (0..Grid::GetMaxVertexPerCell()).

Implements VAPoR::Grid.

◆ GetCellNodes() [3/3]

virtual bool VAPoR::Grid::GetCellNodes ( const size_t  cindices[],
std::vector< DimsType > &  nodes 
) const
inlinevirtual
Deprecated:

Reimplemented from VAPoR::Grid.

Definition at line 609 of file Grid.h.

◆ GetClassType()

static std::string VAPoR::StructuredGrid::GetClassType ( )
inlinestatic

Definition at line 72 of file StructuredGrid.h.

◆ GetEnclosingRegion()

virtual bool VAPoR::StructuredGrid::GetEnclosingRegion ( const CoordType minu,
const CoordType maxu,
DimsType min,
DimsType max 
) const
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

Parameters
[in]minuUser coordinates of minimum coorner
[in]maxuUser coordinates of maximum coorner
[out]minInteger coordinates of minimum coorner
[out]maxInteger coordinates of maximum coorner

Implements VAPoR::Grid.

◆ GetMaxVertexPerCell()

size_t VAPoR::StructuredGrid::GetMaxVertexPerCell ( ) const
inlineoverridevirtual

Return the maximum number of vertices per cell

Implements VAPoR::Grid.

Definition at line 101 of file StructuredGrid.h.

◆ GetMaxVertexPerFace()

size_t VAPoR::StructuredGrid::GetMaxVertexPerFace ( ) const
inlineoverridevirtual

Return the maximum number of vertices per cell face

Implements VAPoR::Grid.

Definition at line 99 of file StructuredGrid.h.

◆ GetNodeCells()

virtual bool VAPoR::StructuredGrid::GetNodeCells ( const DimsType cindices,
std::vector< DimsType > &  cells 
) const
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

Parameters
[out]nodesA vector of index vectors . Each index vector has size given by GetDimensions.size()

Implements VAPoR::Grid.

◆ GetNodeDimensions()

const DimsType & VAPoR::StructuredGrid::GetNodeDimensions ( ) const
overridevirtual

Implements VAPoR::Grid.

◆ GetNumCellDimensions()

const size_t VAPoR::StructuredGrid::GetNumCellDimensions ( ) const
inlineoverridevirtual

Implements VAPoR::Grid.

Definition at line 79 of file StructuredGrid.h.

◆ GetNumNodeDimensions()

const size_t VAPoR::StructuredGrid::GetNumNodeDimensions ( ) const
overridevirtual

Implements VAPoR::Grid.

◆ GetType()

std::string VAPoR::StructuredGrid::GetType ( ) const
inlineoverridevirtual

Implements VAPoR::Grid.

Definition at line 73 of file StructuredGrid.h.

◆ HasInvertedCoordinateSystemHandiness()

virtual bool VAPoR::StructuredGrid::HasInvertedCoordinateSystemHandiness ( ) const
overridevirtual

Return true if mesh primitives have counter clockwise winding order.

Reimplemented from VAPoR::Grid.

Friends And Related Function Documentation

◆ operator<<

VDF_API friend std::ostream & operator<< ( std::ostream &  o,
const StructuredGrid sg 
)
friend

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