SOFA plugin: SofaOpenCL  master
Open source framework for multi-physics simuation
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > > Class Template Reference

#include <OpenCLSpatialGridContainer.h>

Public Attributes

RadixSortradixsort
 
GridData data
 

Protected Attributes

const Real cellWidth
 
const Real invCellWidth
 
int cellBits
 
int nbCells
 
sofa::gpu::opencl::OpenCLVector< unsigned int > particleHash
 
sofa::gpu::opencl::OpenCLVector< unsigned int > sortTmp
 
sofa::gpu::opencl::OpenCLVector< int > cells
 
sofa::gpu::opencl::OpenCLVector< int > cellGhost
 
sofa::gpu::opencl::OpenCLVector< sofa::gpu::opencl::Vec3f1sortedPos
 
const VecCoordlastX
 

Public Member Functions

 SpatialGrid (Real cellWidth)
 
void update (const VecCoord &x)
 
void draw (const sofa::core::visual::VisualParams *)
 
template<class NeighborListener >
void findNeighbors (NeighborListener *dest, Real dist)
 
void computeField (ParticleField *field, Real dist)
 
void reorderIndices (type::vector< unsigned int > *old2new, type::vector< unsigned int > *new2old)
 
Real getCellWidth () const
 
Real getInvCellWidth () const
 
int getCellBits () const
 
int getNbCells () const
 
int getCell (const Coord &c) const
 
const sofa::gpu::opencl::OpenCLVector< int > & getCellsVector () const
 
const sofa::gpu::opencl::OpenCLVector< int > & getCellGhostVector () const
 

Static Protected Member Functions

static void kernel_updateGrid (int cellBits, int index0, Real cellWidth, int nbPoints, gpu::opencl::_device_pointer particleIndex, gpu::opencl::_device_pointer particleHash, gpu::opencl::_device_pointer sortTmp, gpu::opencl::_device_pointer cells, gpu::opencl::_device_pointer cellGhost, gpu::opencl::_device_pointer x, RadixSort *rs)
 

Attribute details

◆ cellBits

template<class TCoord , class TDeriv , class TReal >
int sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::cellBits
protected

◆ cellGhost

template<class TCoord , class TDeriv , class TReal >
sofa::gpu::opencl::OpenCLVector< int > sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::cellGhost
protected

◆ cells

template<class TCoord , class TDeriv , class TReal >
sofa::gpu::opencl::OpenCLVector< int > sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::cells
protected

◆ cellWidth

template<class TCoord , class TDeriv , class TReal >
const Real sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::cellWidth
protected

◆ data

template<class TCoord , class TDeriv , class TReal >
GridData sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::data

◆ invCellWidth

template<class TCoord , class TDeriv , class TReal >
const Real sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::invCellWidth
protected

◆ lastX

template<class TCoord , class TDeriv , class TReal >
const VecCoord* sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::lastX
protected

◆ nbCells

template<class TCoord , class TDeriv , class TReal >
int sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::nbCells
protected

◆ particleHash

template<class TCoord , class TDeriv , class TReal >
sofa::gpu::opencl::OpenCLVector< unsigned int > sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::particleHash
protected

◆ radixsort

template<class TCoord , class TDeriv , class TReal >
RadixSort* sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::radixsort

◆ sortedPos

template<class TCoord , class TDeriv , class TReal >
sofa::gpu::opencl::OpenCLVector< sofa::gpu::opencl::Vec3f1 > sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::sortedPos
protected

◆ sortTmp

template<class TCoord , class TDeriv , class TReal >
sofa::gpu::opencl::OpenCLVector< unsigned int > sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::sortTmp
protected

Constructor details

◆ SpatialGrid()

template<class TCoord , class TDeriv , class TReal >
sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::SpatialGrid ( Real  cellWidth)

Function details

◆ computeField()

template<class TCoord , class TDeriv , class TReal >
void sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::computeField ( ParticleField field,
Real  dist 
)

◆ draw()

template<class TCoord , class TDeriv , class TReal >
void sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::draw ( const sofa::core::visual::VisualParams )

◆ findNeighbors()

template<class TCoord , class TDeriv , class TReal >
template<class NeighborListener >
void sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::findNeighbors ( NeighborListener *  dest,
Real  dist 
)

◆ getCell()

template<class TCoord , class TDeriv , class TReal >
int sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::getCell ( const Coord c) const
inline

◆ getCellBits()

template<class TCoord , class TDeriv , class TReal >
int sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::getCellBits ( ) const
inline

◆ getCellGhostVector()

template<class TCoord , class TDeriv , class TReal >
const sofa::gpu::opencl::OpenCLVector< int >& sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::getCellGhostVector ( ) const
inline

◆ getCellsVector()

template<class TCoord , class TDeriv , class TReal >
const sofa::gpu::opencl::OpenCLVector< int >& sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::getCellsVector ( ) const
inline

◆ getCellWidth()

template<class TCoord , class TDeriv , class TReal >
Real sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::getCellWidth ( ) const
inline

◆ getInvCellWidth()

template<class TCoord , class TDeriv , class TReal >
Real sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::getInvCellWidth ( ) const
inline

◆ getNbCells()

template<class TCoord , class TDeriv , class TReal >
int sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::getNbCells ( ) const
inline

◆ kernel_updateGrid()

template<class TCoord , class TDeriv , class TReal >
static void sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::kernel_updateGrid ( int  cellBits,
int  index0,
Real  cellWidth,
int  nbPoints,
gpu::opencl::_device_pointer  particleIndex,
gpu::opencl::_device_pointer  particleHash,
gpu::opencl::_device_pointer  sortTmp,
gpu::opencl::_device_pointer  cells,
gpu::opencl::_device_pointer  cellGhost,
gpu::opencl::_device_pointer  x,
RadixSort rs 
)
staticprotected

◆ reorderIndices()

template<class TCoord , class TDeriv , class TReal >
void sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::reorderIndices ( type::vector< unsigned int > *  old2new,
type::vector< unsigned int > *  new2old 
)

Change particles ordering inside a given cell have contiguous indices

Fill the old2new and new2old arrays giving the permutation to apply

◆ update()

template<class TCoord , class TDeriv , class TReal >
void sofa::component::container::SpatialGrid< SpatialGridTypes< gpu::opencl::OpenCLVectorTypes< TCoord, TDeriv, TReal > > >::update ( const VecCoord x)

Enum details

◆ anonymous enum

template<class TCoord , class TDeriv , class TReal >
anonymous enum
Enumerator
HASH_PX 
HASH_PY 
HASH_PZ