OpenVDB 11.0.0
Loading...
Searching...
No Matches
SparseStencilMatrix< ValueType_, STENCIL_SIZE > Class Template Reference

Sparse, square matrix representing a 3D stencil operator of size STENCIL_SIZE. More...

#include <openvdb/math/ConjGradient.h>

Classes

class  ConstRow
 Read-only accessor to a row of this matrix. More...
 
class  ConstValueIter
 Iterator over the stored values in a row of this matrix. More...
 
struct  EqOp
 
struct  IsFiniteOp
 
struct  MatrixCopyOp
 
class  RowEditor
 Read/write accessor to a row of this matrix. More...
 
struct  RowScaleOp
 
struct  VecMultOp
 

Public Types

using ValueType = ValueType_
 
using VectorType = Vector<ValueType>
 
using Ptr = SharedPtr<SparseStencilMatrix>
 

Public Member Functions

 SparseStencilMatrix (SizeType n)
 Construct an n x n matrix with at most STENCIL_SIZE nonzero elements per row.
 
 SparseStencilMatrix (const SparseStencilMatrix &)
 Deep copy the given matrix.
 
SizeType numRows () const
 Return the number of rows in this matrix.
 
SizeType size () const
 
void setValue (SizeType row, SizeType col, const ValueType &)
 Set the value at the given coordinates.
 
const ValueTypegetValue (SizeType row, SizeType col) const
 Return the value at the given coordinates.
 
const ValueTypeoperator() (SizeType row, SizeType col) const
 
ConstRow getConstRow (SizeType row) const
 Return a read-only view onto the given row of this matrix.
 
RowEditor getRowEditor (SizeType row)
 Return a read/write view onto the given row of this matrix.
 
template<typename Scalar >
void scale (const Scalar &s)
 Multiply all elements in the matrix by s;.
 
template<typename Scalar >
SparseStencilMatrixoperator*= (const Scalar &s)
 
template<typename VecValueType >
void vectorMultiply (const Vector< VecValueType > &inVec, Vector< VecValueType > &resultVec) const
 Multiply this matrix by inVec and return the result in resultVec.
 
template<typename VecValueType >
void vectorMultiply (const VecValueType *inVec, VecValueType *resultVec) const
 Multiply this matrix by the vector represented by the array inVec and return the result in resultVec.
 
template<typename OtherValueType >
bool eq (const SparseStencilMatrix< OtherValueType, STENCIL_SIZE > &other, ValueType eps=Tolerance< ValueType >::value()) const
 Return true if this matrix is equivalent to the given matrix to within the specified tolerance.
 
bool isFinite () const
 Return true if every element of this matrix has a finite value.
 
std::string str () const
 Return a string representation of this matrix.
 

Static Public Attributes

static constexpr ValueType sZeroValue = zeroVal<ValueType>()
 

Detailed Description

template<typename ValueType_, SizeType STENCIL_SIZE>
class openvdb::v11_0::math::pcg::SparseStencilMatrix< ValueType_, STENCIL_SIZE >

Sparse, square matrix representing a 3D stencil operator of size STENCIL_SIZE.

The implementation is a variation on compressed row storage (CRS).

Member Typedef Documentation

◆ Ptr

template<typename ValueType_ , SizeType STENCIL_SIZE>
using Ptr = SharedPtr<SparseStencilMatrix>

◆ ValueType

template<typename ValueType_ , SizeType STENCIL_SIZE>
using ValueType = ValueType_

◆ VectorType

template<typename ValueType_ , SizeType STENCIL_SIZE>
using VectorType = Vector<ValueType>

Constructor & Destructor Documentation

◆ SparseStencilMatrix() [1/2]

template<typename ValueType , SizeType STENCIL_SIZE>
SparseStencilMatrix ( SizeType n)
inline

Construct an n x n matrix with at most STENCIL_SIZE nonzero elements per row.

◆ SparseStencilMatrix() [2/2]

template<typename ValueType , SizeType STENCIL_SIZE>
SparseStencilMatrix ( const SparseStencilMatrix< ValueType_, STENCIL_SIZE > & other)
inline

Deep copy the given matrix.

Member Function Documentation

◆ eq()

template<typename ValueType , SizeType STENCIL_SIZE>
template<typename OtherValueType >
bool eq ( const SparseStencilMatrix< OtherValueType, STENCIL_SIZE > & other,
ValueType eps = Tolerance<ValueType>::value() ) const
inline

Return true if this matrix is equivalent to the given matrix to within the specified tolerance.

◆ getConstRow()

template<typename ValueType , SizeType STENCIL_SIZE>
SparseStencilMatrix< ValueType, STENCIL_SIZE >::ConstRow getConstRow ( SizeType row) const
inline

Return a read-only view onto the given row of this matrix.

◆ getRowEditor()

template<typename ValueType , SizeType STENCIL_SIZE>
SparseStencilMatrix< ValueType, STENCIL_SIZE >::RowEditor getRowEditor ( SizeType row)
inline

Return a read/write view onto the given row of this matrix.

◆ getValue()

template<typename ValueType , SizeType STENCIL_SIZE>
const ValueType & getValue ( SizeType row,
SizeType col ) const
inline

Return the value at the given coordinates.

Warning
It is not safe to get values from a row while another thread is setting values in that row.

◆ isFinite()

template<typename ValueType , SizeType STENCIL_SIZE>
bool isFinite ( ) const
inline

Return true if every element of this matrix has a finite value.

◆ numRows()

template<typename ValueType_ , SizeType STENCIL_SIZE>
SizeType numRows ( ) const
inline

Return the number of rows in this matrix.

◆ operator()()

template<typename ValueType , SizeType STENCIL_SIZE>
const ValueType & operator() ( SizeType row,
SizeType col ) const
inline

◆ operator*=()

template<typename ValueType_ , SizeType STENCIL_SIZE>
template<typename Scalar >
SparseStencilMatrix & operator*= ( const Scalar & s)
inline

◆ scale()

template<typename ValueType , SizeType STENCIL_SIZE>
template<typename Scalar >
void scale ( const Scalar & s)
inline

Multiply all elements in the matrix by s;.

◆ setValue()

template<typename ValueType , SizeType STENCIL_SIZE>
void setValue ( SizeType row,
SizeType col,
const ValueType & val )
inline

Set the value at the given coordinates.

Warning
It is not safe to set values in the same row simultaneously from multiple threads.

◆ size()

template<typename ValueType_ , SizeType STENCIL_SIZE>
SizeType size ( ) const
inline

◆ str()

template<typename ValueType , SizeType STENCIL_SIZE>
std::string str ( ) const
inline

Return a string representation of this matrix.

◆ vectorMultiply() [1/2]

template<typename ValueType , SizeType STENCIL_SIZE>
template<typename VecValueType >
void vectorMultiply ( const Vector< VecValueType > & inVec,
Vector< VecValueType > & resultVec ) const
inline

Multiply this matrix by inVec and return the result in resultVec.

Exceptions
ArithmeticErrorif either inVec or resultVec is not of size N, where N x N is the size of this matrix.

◆ vectorMultiply() [2/2]

template<typename ValueType , SizeType STENCIL_SIZE>
template<typename VecValueType >
void vectorMultiply ( const VecValueType * inVec,
VecValueType * resultVec ) const
inline

Multiply this matrix by the vector represented by the array inVec and return the result in resultVec.

Warning
Both inVec and resultVec must have at least N elements, where N x N is the size of this matrix.

Member Data Documentation

◆ sZeroValue

template<typename ValueType_ , SizeType STENCIL_SIZE>
ValueType sZeroValue = zeroVal<ValueType>()
inlinestaticconstexpr