882dcacca4
Previously, the policy specified which field types the filter should operate on. The filter could remove some types, but it was not able to add any types. This is backward. Instead, the filter should specify what types its supports and the policy may cull out some of those.
88 lines
3.0 KiB
C++
88 lines
3.0 KiB
C++
//============================================================================
|
|
// Copyright (c) Kitware, Inc.
|
|
// All rights reserved.
|
|
// See LICENSE.txt for details.
|
|
//
|
|
// This software is distributed WITHOUT ANY WARRANTY; without even
|
|
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
// PURPOSE. See the above copyright notice for more information.
|
|
//============================================================================
|
|
#ifndef vtk_m_cont_FieldRangeCompute_h
|
|
#define vtk_m_cont_FieldRangeCompute_h
|
|
|
|
#include <vtkm/cont/DataSet.h>
|
|
#include <vtkm/cont/Field.h>
|
|
#include <vtkm/cont/PartitionedDataSet.h>
|
|
|
|
#include <vtkm/cont/FieldRangeCompute.hxx>
|
|
|
|
namespace vtkm
|
|
{
|
|
namespace cont
|
|
{
|
|
/// \brief Compute ranges for fields in a DataSet or PartitionedDataSet.
|
|
///
|
|
/// These methods to compute ranges for fields in a single dataset or a
|
|
/// partitioned dataset.
|
|
/// When using VTK-m in a hybrid-parallel environment with distributed processing,
|
|
/// this class uses ranges for locally available data alone. Use FieldRangeGlobalCompute
|
|
/// to compute ranges globally across all ranks even in distributed mode.
|
|
|
|
//{@
|
|
/// Returns the range for a field from a dataset. If the field is not present, an empty
|
|
/// ArrayHandle will be returned.
|
|
VTKM_CONT_EXPORT
|
|
VTKM_CONT
|
|
vtkm::cont::ArrayHandle<vtkm::Range> FieldRangeCompute(
|
|
const vtkm::cont::DataSet& dataset,
|
|
const std::string& name,
|
|
vtkm::cont::Field::Association assoc = vtkm::cont::Field::Association::ANY);
|
|
|
|
template <typename TypeList>
|
|
VTKM_CONT vtkm::cont::ArrayHandle<vtkm::Range> FieldRangeCompute(
|
|
const vtkm::cont::DataSet& dataset,
|
|
const std::string& name,
|
|
vtkm::cont::Field::Association assoc,
|
|
TypeList)
|
|
{
|
|
VTKM_IS_LIST(TypeList);
|
|
return vtkm::cont::detail::FieldRangeComputeImpl(dataset, name, assoc, TypeList());
|
|
}
|
|
|
|
//@}
|
|
|
|
//{@
|
|
/// Returns the range for a field from a PartitionedDataSet. If the field is
|
|
/// not present on any of the partitions, an empty ArrayHandle will be
|
|
/// returned. If the field is present on some partitions, but not all, those
|
|
/// partitions without the field are skipped.
|
|
///
|
|
/// The returned array handle will have as many values as the maximum number of
|
|
/// components for the selected field across all partitions.
|
|
///
|
|
VTKM_CONT_EXPORT
|
|
VTKM_CONT
|
|
vtkm::cont::ArrayHandle<vtkm::Range> FieldRangeCompute(
|
|
const vtkm::cont::PartitionedDataSet& pds,
|
|
const std::string& name,
|
|
vtkm::cont::Field::Association assoc = vtkm::cont::Field::Association::ANY);
|
|
|
|
template <typename TypeList>
|
|
VTKM_CONT vtkm::cont::ArrayHandle<vtkm::Range> FieldRangeCompute(
|
|
const vtkm::cont::PartitionedDataSet& pds,
|
|
const std::string& name,
|
|
vtkm::cont::Field::Association assoc,
|
|
TypeList)
|
|
{
|
|
VTKM_IS_LIST(TypeList);
|
|
VTKM_STATIC_ASSERT_MSG((!std::is_same<TypeList, vtkm::ListUniversal>::value),
|
|
"Cannot use vtkm::ListUniversal with FieldRangeCompute.");
|
|
return vtkm::cont::detail::FieldRangeComputeImpl(pds, name, assoc, TypeList());
|
|
}
|
|
|
|
//@}
|
|
}
|
|
} // namespace vtkm::cont
|
|
|
|
#endif
|