VTK-m  2.1
PartitionedDataSet.h
Go to the documentation of this file.
1 //============================================================================
2 // Copyright (c) Kitware, Inc.
3 // All rights reserved.
4 // See LICENSE.txt for details.
5 //
6 // This software is distributed WITHOUT ANY WARRANTY; without even
7 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
8 // PURPOSE. See the above copyright notice for more information.
9 //============================================================================
10 #ifndef vtk_m_cont_PartitionedDataSet_h
11 #define vtk_m_cont_PartitionedDataSet_h
12 #include <limits>
13 #include <vtkm/StaticAssert.h>
14 
15 #include <vtkm/cont/ArrayHandle.h>
16 #include <vtkm/cont/DataSet.h>
17 #include <vtkm/cont/Field.h>
19 
20 namespace vtkm
21 {
22 namespace cont
23 {
24 
27 {
28  using StorageVec = std::vector<vtkm::cont::DataSet>;
29 
30 public:
31  using iterator = typename StorageVec::iterator;
32  using const_iterator = typename StorageVec::const_iterator;
33  using value_type = typename StorageVec::value_type;
34  using reference = typename StorageVec::reference;
35  using const_reference = typename StorageVec::const_reference;
36 
38  VTKM_CONT
40 
42  VTKM_CONT
43  explicit PartitionedDataSet(const std::vector<vtkm::cont::DataSet>& partitions);
45  VTKM_CONT
46  explicit PartitionedDataSet(vtkm::Id size);
47 
48  VTKM_CONT
49  PartitionedDataSet() = default;
50 
52  VTKM_CONT
53  vtkm::cont::Field GetFieldFromPartition(const std::string& field_name, int partition_index) const;
54 
56  VTKM_CONT
57  vtkm::Id GetNumberOfPartitions() const;
58 
61  VTKM_CONT
62  vtkm::Id GetGlobalNumberOfPartitions() const;
63 
65  VTKM_CONT
66  const vtkm::cont::DataSet& GetPartition(vtkm::Id partId) const;
67 
69  VTKM_CONT const std::vector<vtkm::cont::DataSet>& GetPartitions() const;
70 
72  VTKM_CONT void AppendPartition(const vtkm::cont::DataSet& ds);
73 
77  VTKM_CONT void InsertPartition(vtkm::Id index, const vtkm::cont::DataSet& ds);
78 
81  VTKM_CONT void ReplacePartition(vtkm::Id index, const vtkm::cont::DataSet& ds);
82 
87  VTKM_CONT void AppendPartitions(const std::vector<vtkm::cont::DataSet>& partitions);
88 
90  VTKM_CONT vtkm::IdComponent GetNumberOfFields() const { return this->Fields.GetNumberOfFields(); }
91 
95  VTKM_CONT void AddField(const Field& field) { this->Fields.AddField(field); }
96 
98  template <typename T, typename Storage>
99  VTKM_CONT void AddGlobalField(const std::string& fieldName,
101  {
102  this->AddField(vtkm::cont::Field(fieldName, vtkm::cont::Field::Association::Global, field));
103  }
104 
105  template <typename T>
106  VTKM_CONT void AddGlobalField(const std::string& fieldName, const std::vector<T>& field)
107  {
108  this->AddField(
110  }
111 
112  template <typename T>
113  VTKM_CONT void AddGlobalField(const std::string& fieldName, const T* field, const vtkm::Id& n)
114  {
115  this->AddField(
117  }
118 
120  template <typename T, typename Storage>
121  VTKM_CONT void AddPartitionsField(const std::string& fieldName,
123  {
124  this->AddField(vtkm::cont::Field(fieldName, vtkm::cont::Field::Association::Partitions, field));
125  }
126 
127  template <typename T>
128  VTKM_CONT void AddPartitionsField(const std::string& fieldName, const std::vector<T>& field)
129  {
130  this->AddField(
132  }
133 
134  template <typename T>
135  VTKM_CONT void AddPartitionsField(const std::string& fieldName, const T* field, const vtkm::Id& n)
136  {
137  this->AddField(make_Field(
139  }
140 
141  VTKM_CONT
142  const vtkm::cont::Field& GetField(vtkm::Id index) const { return this->Fields.GetField(index); }
143 
144  VTKM_CONT
145  vtkm::cont::Field& GetField(vtkm::Id index) { return this->Fields.GetField(index); }
146 
147  VTKM_CONT
149  const std::string& name,
151  {
152  return this->Fields.GetField(name, assoc);
153  }
154 
158  VTKM_CONT
160  const std::string& name,
162  {
163  return this->Fields.GetField(name, assoc);
164  }
165 
167  VTKM_CONT
168  const vtkm::cont::Field& GetGlobalField(const std::string& name) const
169  {
170  return this->GetField(name, vtkm::cont::Field::Association::Global);
171  }
172 
174  VTKM_CONT
175  const vtkm::cont::Field& GetPartitionsField(const std::string& name) const
176  {
177  return this->GetField(name, vtkm::cont::Field::Association::Partitions);
178  }
179 
180  VTKM_CONT
181  vtkm::cont::Field& GetGlobalField(const std::string& name)
182  {
183  return this->GetField(name, vtkm::cont::Field::Association::Global);
184  }
185 
186  VTKM_CONT
187  vtkm::cont::Field& GetPartitionsField(const std::string& name)
188  {
189  return this->GetField(name, vtkm::cont::Field::Association::Partitions);
190  }
191 
193  VTKM_CONT
194  bool HasField(const std::string& name,
196  {
197  return this->Fields.HasField(name, assoc);
198  }
199 
201  VTKM_CONT bool HasGlobalField(const std::string& name) const
202  {
203  return (this->Fields.GetFieldIndex(name, vtkm::cont::Field::Association::Global) != -1);
204  }
205 
207  VTKM_CONT bool HasPartitionsField(const std::string& name) const
208  {
209  return (this->Fields.GetFieldIndex(name, vtkm::cont::Field::Association::Partitions) != -1);
210  }
211 
213  VTKM_CONT
214  void CopyPartitions(const vtkm::cont::PartitionedDataSet& source);
215 
216  VTKM_CONT
217  void PrintSummary(std::ostream& stream) const;
218 
224  VTKM_CONT
225  iterator begin() noexcept { return this->Partitions.begin(); }
226  VTKM_CONT
227  iterator end() noexcept { return this->Partitions.end(); }
228  VTKM_CONT
229  const_iterator begin() const noexcept { return this->Partitions.begin(); }
230  VTKM_CONT
231  const_iterator end() const noexcept { return this->Partitions.end(); }
232  VTKM_CONT
233  const_iterator cbegin() const noexcept { return this->Partitions.cbegin(); }
234  VTKM_CONT
235  const_iterator cend() const noexcept { return this->Partitions.cend(); }
237 
238 private:
239  std::vector<vtkm::cont::DataSet> Partitions;
240 
241  vtkm::cont::internal::FieldCollection Fields{ vtkm::cont::Field::Association::Partitions,
243 };
244 }
245 } // namespace vtkm::cont
246 
247 #endif
vtkm::cont::PartitionedDataSet::cbegin
const_iterator cbegin() const noexcept
Definition: PartitionedDataSet.h:233
vtkm::cont::ArrayHandle
Manages an array-worth of data.
Definition: ArrayHandle.h:300
ArrayHandle.h
vtkm::cont::PartitionedDataSet::GetGlobalField
vtkm::cont::Field & GetGlobalField(const std::string &name)
Definition: PartitionedDataSet.h:181
vtkm
Groups connected points that have the same field value.
Definition: Atomic.h:19
FieldCollection.h
vtkm::cont::PartitionedDataSet::begin
iterator begin() noexcept
Definition: PartitionedDataSet.h:225
vtkm::cont::PartitionedDataSet::GetNumberOfFields
vtkm::IdComponent GetNumberOfFields() const
Methods to Add and Get fields on a PartitionedDataSet.
Definition: PartitionedDataSet.h:90
vtkm::cont::PartitionedDataSet::AddGlobalField
void AddGlobalField(const std::string &fieldName, const std::vector< T > &field)
Definition: PartitionedDataSet.h:106
vtkm::IdComponent
vtkm::Int32 IdComponent
Base type to use to index small lists.
Definition: Types.h:194
vtkm::cont::Field::Association::Global
@ Global
A field that applies to all partitions.
vtkm::cont::Field::Association
Association
Identifies what elements of a data set a field is associated with.
Definition: Field.h:38
vtkm::cont::make_Field
vtkm::cont::Field make_Field(std::string name, Field::Association association, const T *data, vtkm::Id size, vtkm::CopyFlag copy)
Convenience functions to build fields from C style arrays and std::vector.
Definition: Field.h:236
vtkm::cont::DataSet
Contains and manages the geometric data structures that VTK-m operates on.
Definition: DataSet.h:57
vtkm::cont::PartitionedDataSet::cend
const_iterator cend() const noexcept
Definition: PartitionedDataSet.h:235
vtkm::cont::PartitionedDataSet::AddGlobalField
void AddGlobalField(const std::string &fieldName, const vtkm::cont::ArrayHandle< T, Storage > &field)
Add a field with a global association.
Definition: PartitionedDataSet.h:99
vtkm::cont::PartitionedDataSet::GetGlobalField
const vtkm::cont::Field & GetGlobalField(const std::string &name) const
Get a global field.
Definition: PartitionedDataSet.h:168
vtkm::cont::PartitionedDataSet::GetField
vtkm::cont::Field & GetField(vtkm::Id index)
Definition: PartitionedDataSet.h:145
vtkm::cont::PartitionedDataSet::GetField
const vtkm::cont::Field & GetField(const std::string &name, vtkm::cont::Field::Association assoc=vtkm::cont::Field::Association::Any) const
Definition: PartitionedDataSet.h:148
vtkm::cont::PartitionedDataSet::AddField
void AddField(const Field &field)
Adds a field that is applied to the meta-partition structure.
Definition: PartitionedDataSet.h:95
vtkm::cont::PartitionedDataSet::AddPartitionsField
void AddPartitionsField(const std::string &fieldName, const vtkm::cont::ArrayHandle< T, Storage > &field)
Add a field where each entry is associated with a whole partition.
Definition: PartitionedDataSet.h:121
vtkm::cont::Field
A Field encapsulates an array on some piece of the mesh, such as the points, a cell set,...
Definition: Field.h:31
VTKM_CONT_EXPORT
#define VTKM_CONT_EXPORT
Definition: vtkm_cont_export.h:44
vtkm::cont::PartitionedDataSet::HasGlobalField
bool HasGlobalField(const std::string &name) const
Query whether the partitioned data set has the named global field.
Definition: PartitionedDataSet.h:201
vtkm::cont::Field::Association::Any
@ Any
Any field regardless of the association.
VTKM_CONT
#define VTKM_CONT
Definition: ExportMacros.h:57
Field.h
vtkm::Id
vtkm::Int64 Id
Base type to use to index arrays.
Definition: Types.h:227
vtkm::CopyFlag::On
@ On
vtkm::cont::PartitionedDataSet::AddPartitionsField
void AddPartitionsField(const std::string &fieldName, const std::vector< T > &field)
Definition: PartitionedDataSet.h:128
vtkm::cont::PartitionedDataSet::HasPartitionsField
bool HasPartitionsField(const std::string &name) const
Query whether the partitioned data set has the named partition field.
Definition: PartitionedDataSet.h:207
vtkm::cont::PartitionedDataSet::GetField
vtkm::cont::Field & GetField(const std::string &name, vtkm::cont::Field::Association assoc=vtkm::cont::Field::Association::Any)
Get a field associated with the partitioned data structure.
Definition: PartitionedDataSet.h:159
vtkm::cont::PartitionedDataSet::GetPartitionsField
vtkm::cont::Field & GetPartitionsField(const std::string &name)
Definition: PartitionedDataSet.h:187
vtkm::cont::PartitionedDataSet::begin
const_iterator begin() const noexcept
Definition: PartitionedDataSet.h:229
vtkm::cont::PartitionedDataSet::HasField
bool HasField(const std::string &name, vtkm::cont::Field::Association assoc=vtkm::cont::Field::Association::Any) const
Query whether the partitioned data set has the named field.
Definition: PartitionedDataSet.h:194
vtkm::cont::PartitionedDataSet::Partitions
std::vector< vtkm::cont::DataSet > Partitions
Definition: PartitionedDataSet.h:239
vtkm::cont::PartitionedDataSet::AddPartitionsField
void AddPartitionsField(const std::string &fieldName, const T *field, const vtkm::Id &n)
Definition: PartitionedDataSet.h:135
StaticAssert.h
vtkm::cont::Field::Association::Partitions
@ Partitions
A field that applies to partitions.
vtkm::cont::PartitionedDataSet::end
iterator end() noexcept
Definition: PartitionedDataSet.h:227
vtkm::cont::PartitionedDataSet::iterator
typename StorageVec::iterator iterator
Definition: PartitionedDataSet.h:31
vtkm::cont::PartitionedDataSet::value_type
typename StorageVec::value_type value_type
Definition: PartitionedDataSet.h:33
vtkm::cont::PartitionedDataSet::end
const_iterator end() const noexcept
Definition: PartitionedDataSet.h:231
vtkm::cont::PartitionedDataSet::const_reference
typename StorageVec::const_reference const_reference
Definition: PartitionedDataSet.h:35
vtkm::cont::PartitionedDataSet::GetPartitionsField
const vtkm::cont::Field & GetPartitionsField(const std::string &name) const
Get a field associated with the partitions.
Definition: PartitionedDataSet.h:175
vtkm::cont::PartitionedDataSet::const_iterator
typename StorageVec::const_iterator const_iterator
Definition: PartitionedDataSet.h:32
DataSet.h
vtkm::cont::PartitionedDataSet::StorageVec
std::vector< vtkm::cont::DataSet > StorageVec
Definition: PartitionedDataSet.h:28
vtkm::cont::PartitionedDataSet::GetField
const vtkm::cont::Field & GetField(vtkm::Id index) const
Definition: PartitionedDataSet.h:142
vtkm::cont::PartitionedDataSet
Comprises a set of vtkm::cont::DataSet objects.
Definition: PartitionedDataSet.h:26
vtkm::cont::PartitionedDataSet::reference
typename StorageVec::reference reference
Definition: PartitionedDataSet.h:34
vtkm::cont::PartitionedDataSet::AddGlobalField
void AddGlobalField(const std::string &fieldName, const T *field, const vtkm::Id &n)
Definition: PartitionedDataSet.h:113