20 #ifndef vtkmCellSetSingleType_h
21 #define vtkmCellSetSingleType_h
25 #include <vtkm/CellShape.h>
26 #include <vtkm/CellTraits.h>
27 #include <vtkm/TopologyElementTag.h>
28 #include <vtkm/cont/ArrayHandle.h>
29 #include <vtkm/cont/CellSet.h>
31 #include <vtkm/VecFromPortal.h>
33 #include <vtkm/cont/serial/DeviceAdapterSerial.h>
34 #include <vtkm/cont/cuda/DeviceAdapterCuda.h>
35 #include <vtkm/cont/tbb/DeviceAdapterTBB.h>
48 : CellSet((std::
string())),
51 CellTypeAsId(CellShapeTagEmpty::Id),
53 ReverseConnectivityBuilt(false),
60 template <
typename CellShapeTag>
65 CellTypeAsId(CellShapeTag::Id),
67 ReverseConnectivityBuilt(false),
76 this->CellSet::operator=(src);
77 this->NumberOfCells = src.NumberOfCells;
78 this->NumberOfPoints = src.NumberOfPoints;
79 this->CellTypeAsId = src.CellTypeAsId;
80 this->ReverseConnectivityBuilt = src.ReverseConnectivityBuilt;
81 this->Connectivity = src.Connectivity;
82 this->RConn = src.RConn;
83 this->RNumIndices = src.RNumIndices;
84 this->RIndexOffsets = src.RIndexOffsets;
90 return this->NumberOfCells;
95 return this->NumberOfPoints;
104 return this->GetNumberOfCells();
109 return this->GetNumberOfPoints();
114 vtkm::Id numberOfPoints,
115 const vtkm::cont::ArrayHandle<vtkm::Id, tovtkm::vtkCellArrayContainerTag>&
118 template <
typename DeviceAdapter,
typename FromTopology,
typename ToTopology>
121 template <
typename DeviceAdapter>
123 vtkm::TopologyElementTagCell>
128 template <
typename DeviceAdapter>
130 vtkm::TopologyElementTagPoint>
135 template <
typename Device>
137 PrepareForInput(Device, vtkm::TopologyElementTagPoint,
138 vtkm::TopologyElementTagCell)
const;
140 template <
typename Device>
142 PrepareForInput(Device, vtkm::TopologyElementTagCell,
143 vtkm::TopologyElementTagPoint)
const;
146 const vtkm::cont::ArrayHandle<vtkm::Id, tovtkm::vtkCellArrayContainerTag>&
148 vtkm::TopologyElementTagCell)
const
150 return this->Connectivity;
153 virtual void PrintSummary(std::ostream& out)
const;
156 template <
typename CellShapeTag>
157 void DetermineNumberOfPoints(CellShapeTag, vtkm::CellTraitsTagSizeFixed,
158 vtkm::IdComponent& numberOfPoints)
const
160 numberOfPoints = vtkm::CellTraits<CellShapeTag>::NUM_POINTS;
163 template <
typename CellShapeTag>
164 void DetermineNumberOfPoints(CellShapeTag, vtkm::CellTraitsTagSizeVariable,
165 vtkm::IdComponent& numberOfPoints)
const
170 vtkm::IdComponent DetermineNumberOfPoints()
const;
172 vtkm::Id NumberOfCells;
173 mutable vtkm::Id NumberOfPoints;
174 vtkm::Id CellTypeAsId;
175 vtkm::cont::ArrayHandle<vtkm::Id, ConnectivityStorageTag> Connectivity;
177 mutable bool ReverseConnectivityBuilt;
178 mutable vtkm::cont::ArrayHandle<vtkm::Id> RConn;
179 mutable vtkm::cont::ArrayHandle<vtkm::IdComponent> RNumIndices;
180 mutable vtkm::cont::ArrayHandle<vtkm::Id> RIndexOffsets;
184 extern template VTKACCELERATORSVTKM_TEMPLATE_EXPORT
187 vtkm::TopologyElementTagPoint, vtkm::TopologyElementTagCell)
const;
189 extern template VTKACCELERATORSVTKM_TEMPLATE_EXPORT
192 vtkm::TopologyElementTagCell, vtkm::TopologyElementTagPoint)
const;
194 #ifdef VTKM_ENABLE_TBB
195 extern template VTKACCELERATORSVTKM_TEMPLATE_EXPORT
198 vtkm::TopologyElementTagPoint, vtkm::TopologyElementTagCell)
const;
200 extern template VTKACCELERATORSVTKM_TEMPLATE_EXPORT
203 vtkm::TopologyElementTagCell, vtkm::TopologyElementTagPoint)
const;
206 #if defined(VTKM_ENABLE_CUDA) && defined(VTKM_CUDA)
207 extern template VTKACCELERATORSVTKM_TEMPLATE_EXPORT
210 vtkm::TopologyElementTagPoint, vtkm::TopologyElementTagCell)
const;
212 extern template VTKACCELERATORSVTKM_TEMPLATE_EXPORT
215 vtkm::TopologyElementTagCell, vtkm::TopologyElementTagPoint)
const;
220 #endif // vtkmlib_vtkmCellSetSingleType_h
vtkm::exec::ConnectivityVTKSingleType< Device > PrepareForInput(Device, vtkm::TopologyElementTagPoint, vtkm::TopologyElementTagCell) const
vtkmCellSetSingleType(CellShapeTag, const std::string &name)
vtkm::Id GetNumberOfPoints() const
vtkm::Id GetSchedulingRange(vtkm::TopologyElementTagPoint) const
vtkm::exec::ReverseConnectivityVTK< DeviceAdapter > ExecObjectType
vtkm::Id GetSchedulingRange(vtkm::TopologyElementTagCell) const
virtual vtkm::Id GetNumberOfEdges() const
vtkm::exec::ConnectivityVTKSingleType< DeviceAdapter > ExecObjectType
virtual vtkm::Id GetNumberOfFaces() const
vtkm::Id GetNumberOfCells() const
vtkmCellSetSingleType & operator=(const vtkmCellSetSingleType &src)
const vtkm::cont::ArrayHandle< vtkm::Id, tovtkm::vtkCellArrayContainerTag > & GetConnectivityArray(vtkm::TopologyElementTagPoint, vtkm::TopologyElementTagCell) const