VTK-m  2.1
Field.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_Field_h
11 #define vtk_m_cont_Field_h
12 
14 
15 #include <vtkm/Range.h>
16 #include <vtkm/Types.h>
17 
18 #include <vtkm/cont/ArrayHandle.h>
19 #include <vtkm/cont/CastAndCall.h>
21 
22 namespace vtkm
23 {
24 namespace cont
25 {
26 
27 
32 {
33 public:
38  enum struct Association
39  {
40  // Documentation is below (for better layout in generated documents).
41  Any,
42  WholeDataSet,
43  Points,
44  Cells,
45  Partitions,
46  Global,
47  };
48 
54 
60 
69 
77 
85 
91 
92  VTKM_CONT
93  Field() = default;
94 
95  VTKM_CONT
96  Field(std::string name, Association association, const vtkm::cont::UnknownArrayHandle& data);
97 
98  template <typename T, typename Storage>
99  VTKM_CONT Field(std::string name,
100  Association association,
102  : Field(name, association, vtkm::cont::UnknownArrayHandle{ data })
103  {
104  }
105 
106  Field(const vtkm::cont::Field& src);
107  Field(vtkm::cont::Field&& src) noexcept;
108 
109  VTKM_CONT virtual ~Field();
110 
111  VTKM_CONT Field& operator=(const vtkm::cont::Field& src);
112  VTKM_CONT Field& operator=(vtkm::cont::Field&& src) noexcept;
113 
114  VTKM_CONT bool IsCellField() const { return this->FieldAssociation == Association::Cells; }
115  VTKM_CONT bool IsPointField() const { return this->FieldAssociation == Association::Points; }
117  {
118  return this->FieldAssociation == Association::WholeDataSet;
119  }
121  {
122  return this->FieldAssociation == Association::Partitions;
123  }
124  VTKM_CONT bool IsGlobalField() const { return this->FieldAssociation == Association::Global; }
125 
128  VTKM_CONT bool IsSupportedType() const;
129 
130  VTKM_CONT vtkm::Id GetNumberOfValues() const { return this->Data.GetNumberOfValues(); }
131 
132  VTKM_CONT const std::string& GetName() const { return this->Name; }
133  VTKM_CONT Association GetAssociation() const { return this->FieldAssociation; }
134  const vtkm::cont::UnknownArrayHandle& GetData() const;
136 
145  VTKM_CONT const vtkm::cont::ArrayHandle<vtkm::Range>& GetRange() const;
146 
147  VTKM_CONT void GetRange(vtkm::Range* range) const;
148 
163  VTKM_CONT vtkm::cont::UnknownArrayHandle GetDataAsDefaultFloat() const;
164 
180  VTKM_CONT vtkm::cont::UnknownArrayHandle GetDataWithExpectedTypes() const;
181 
197  VTKM_CONT void ConvertToExpected();
198 
199  VTKM_CONT void SetData(const vtkm::cont::UnknownArrayHandle& newdata);
200 
201  template <typename T, typename StorageTag>
203  {
204  this->SetData(vtkm::cont::UnknownArrayHandle(newdata));
205  }
206 
207  VTKM_CONT
208  virtual void PrintSummary(std::ostream& out) const;
209 
210  VTKM_CONT
212  {
213  this->Data.ReleaseResourcesExecution();
214  this->Range.ReleaseResourcesExecution();
215  }
216 
217 private:
218  std::string Name;
219 
220  Association FieldAssociation = Association::Any;
223  mutable bool ModifiedFlag = true;
224 };
225 
226 template <typename Functor, typename... Args>
227 void CastAndCall(const vtkm::cont::Field& field, Functor&& f, Args&&... args)
228 {
229  vtkm::cont::CastAndCall(field.GetData(), std::forward<Functor>(f), std::forward<Args>(args)...);
230 }
231 
232 
234 template <typename T>
236 vtkm::cont::Field make_Field(std::string name,
237  Field::Association association,
238  const T* data,
239  vtkm::Id size,
240  vtkm::CopyFlag copy)
241 {
242  return vtkm::cont::Field(name, association, vtkm::cont::make_ArrayHandle(data, size, copy));
243 }
244 
245 template <typename T>
246 vtkm::cont::Field make_Field(std::string name,
247  Field::Association association,
248  const std::vector<T>& data,
249  vtkm::CopyFlag copy)
250 {
251  return vtkm::cont::Field(name, association, vtkm::cont::make_ArrayHandle(data, copy));
252 }
253 
254 template <typename T>
256  Field::Association association,
257  std::vector<T>&& data)
258 {
259  return vtkm::cont::Field(name, association, vtkm::cont::make_ArrayHandleMove(std::move(data)));
260 }
261 
262 template <typename T>
263 vtkm::cont::Field make_Field(std::string name,
264  Field::Association association,
265  std::vector<T>&& data,
267 {
268  return make_FieldMove(name, association, std::move(data));
269 }
270 
271 template <typename T>
272 vtkm::cont::Field make_Field(std::string name,
273  Field::Association association,
274  std::initializer_list<T>&& data)
275 {
276  return make_FieldMove(name, association, vtkm::cont::make_ArrayHandle(std::move(data)));
277 }
278 
280 
282 template <typename T, typename S>
284 {
286 }
287 
289 inline vtkm::cont::Field make_FieldPoint(std::string name,
290  const vtkm::cont::UnknownArrayHandle& data)
291 {
293 }
294 
296 template <typename T, typename S>
298 {
300 }
301 
302 
304 inline vtkm::cont::Field make_FieldCell(std::string name,
305  const vtkm::cont::UnknownArrayHandle& data)
306 {
308 }
309 
310 } // namespace cont
311 } // namespace vtkm
312 
313 
314 namespace vtkm
315 {
316 namespace cont
317 {
318 namespace internal
319 {
320 template <>
321 struct DynamicTransformTraits<vtkm::cont::Field>
322 {
323  using DynamicTag = vtkm::cont::internal::DynamicTransformTagCastAndCall;
324 };
325 } // namespace internal
326 } // namespace cont
327 } // namespace vtkm
328 
329 //=============================================================================
330 // Specializations of serialization related classes
332 
333 namespace mangled_diy_namespace
334 {
335 
336 template <>
337 struct VTKM_CONT_EXPORT Serialization<vtkm::cont::Field>
338 {
339  static VTKM_CONT void save(BinaryBuffer& bb, const vtkm::cont::Field& field);
340  static VTKM_CONT void load(BinaryBuffer& bb, vtkm::cont::Field& field);
341 };
342 
343 } // diy
345 
346 #endif //vtk_m_cont_Field_h
vtkm::cont::ArrayHandle
Manages an array-worth of data.
Definition: ArrayHandle.h:300
ArrayHandle.h
vtkm::exec::arg::load
T load(const U &u, vtkm::Id v)
Definition: FetchTagArrayDirectIn.h:36
vtkm
Groups connected points that have the same field value.
Definition: Atomic.h:19
vtkm::cont::Field::IsCellField
bool IsCellField() const
Definition: Field.h:114
Types.h
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::UnknownArrayHandle
An ArrayHandle of an unknown value type and storage.
Definition: UnknownArrayHandle.h:430
vtkm::cont::Field::Range
vtkm::cont::ArrayHandle< vtkm::Range > Range
Definition: Field.h:222
vtkm::cont::make_ArrayHandleMove
vtkm::cont::ArrayHandleBasic< T > make_ArrayHandleMove(T *&array, vtkm::Id numberOfValues, vtkm::cont::internal::BufferInfo::Deleter deleter=internal::SimpleArrayDeleter< T >, vtkm::cont::internal::BufferInfo::Reallocater reallocater=internal::SimpleArrayReallocater< T >)
A convenience function to move a user-allocated array into an ArrayHandle.
Definition: ArrayHandleBasic.h:249
vtkm::cont::Field::Name
std::string Name
name of field
Definition: Field.h:218
vtkm::cont::CastAndCall
void CastAndCall(const DynamicObject &dynamicObject, Functor &&f, Args &&... args)
A Generic interface to CastAndCall.
Definition: CastAndCall.h:47
vtkm::cont::Field::IsPartitionsField
bool IsPartitionsField() const
Definition: Field.h:120
mangled_diy_namespace
Definition: Particle.h:351
vtkm::cont::Field::GetData
const vtkm::cont::UnknownArrayHandle & GetData() const
vtkm::cont::Field::Field
Field(std::string name, Association association, const vtkm::cont::ArrayHandle< T, Storage > &data)
Definition: Field.h:99
vtkm::cont::Field::Data
vtkm::cont::UnknownArrayHandle Data
Definition: Field.h:221
vtkm::cont::make_FieldCell
vtkm::cont::Field make_FieldCell(std::string name, const vtkm::cont::ArrayHandle< T, S > &data)
Convenience function to build cell fields from vtkm::cont::ArrayHandle.
Definition: Field.h:297
UnknownArrayHandle.h
CastAndCall.h
vtkm::cont::Field::ReleaseResourcesExecution
virtual void ReleaseResourcesExecution()
Definition: Field.h:211
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
Range.h
vtkm_cont_export.h
vtkm::cont::Field::Association::Points
@ Points
A field that applies to points.
VTKM_CONT
#define VTKM_CONT
Definition: ExportMacros.h:57
vtkm::Id
vtkm::Int64 Id
Base type to use to index arrays.
Definition: Types.h:227
vtkm::cont::Field::IsGlobalField
bool IsGlobalField() const
Definition: Field.h:124
vtkmNotUsed
#define vtkmNotUsed(parameter_name)
Simple macro to identify a parameter as unused.
Definition: ExportMacros.h:128
vtkm::cont::Field::GetName
const std::string & GetName() const
Definition: Field.h:132
vtkm::cont::Field::IsWholeDataSetField
bool IsWholeDataSetField() const
Definition: Field.h:116
vtkm::cont::Field::IsPointField
bool IsPointField() const
Definition: Field.h:115
vtkm::cont::Field::SetData
void SetData(const vtkm::cont::ArrayHandle< T, StorageTag > &newdata)
Definition: Field.h:202
vtkm::cont::Field::Association::Cells
@ Cells
A field that applies to cells.
vtkm::CopyFlag
CopyFlag
Identifier used to specify whether a function should deep copy data.
Definition: Flags.h:17
vtkm::cont::make_ArrayHandle
vtkm::cont::ArrayHandleBasic< T > make_ArrayHandle(const T *array, vtkm::Id numberOfValues, vtkm::CopyFlag copy)
A convenience function for creating an ArrayHandle from a standard C array.
Definition: ArrayHandleBasic.h:225
vtkm::cont::make_FieldMove
vtkm::cont::Field make_FieldMove(std::string name, Field::Association association, std::vector< T > &&data)
Definition: Field.h:255
vtkm::cont::make_FieldPoint
vtkm::cont::Field make_FieldPoint(std::string name, const vtkm::cont::ArrayHandle< T, S > &data)
Convenience function to build point fields from vtkm::cont::ArrayHandle.
Definition: Field.h:283
vtkm::cont::Field::GetAssociation
Association GetAssociation() const
Definition: Field.h:133
vtkm::cont::Field::GetNumberOfValues
vtkm::Id GetNumberOfValues() const
Definition: Field.h:130
vtkm::Range
Represent a continuous scalar range of values.
Definition: Range.h:31