mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-08 21:33:55 +00:00
Use CreateResult mechanism for copying PDS fields.
This commit is contained in:
parent
7d60c390ce
commit
71c6f034d9
@ -143,6 +143,12 @@ void PartitionedDataSet::ReplacePartition(vtkm::Id index, const vtkm::cont::Data
|
||||
}
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
void PartitionedDataSet::CopyStructure(const vtkm::cont::PartitionedDataSet& source)
|
||||
{
|
||||
this->Partitions = source.Partitions;
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
void PartitionedDataSet::PrintSummary(std::ostream& stream) const
|
||||
{
|
||||
|
@ -218,6 +218,10 @@ public:
|
||||
}
|
||||
//@}
|
||||
|
||||
/// Copies the structure i.e. partitions from the source. The fields are left unchanged.
|
||||
VTKM_CONT
|
||||
void CopyStructure(const vtkm::cont::PartitionedDataSet& source);
|
||||
|
||||
VTKM_CONT
|
||||
void PrintSummary(std::ostream& stream) const;
|
||||
|
||||
|
@ -88,7 +88,7 @@ vtkm::cont::PartitionedDataSet NewFilter::DoExecutePartitions(
|
||||
}
|
||||
}
|
||||
|
||||
return output;
|
||||
return this->CreateResult(input, output);
|
||||
}
|
||||
|
||||
vtkm::cont::DataSet NewFilter::Execute(const vtkm::cont::DataSet& input)
|
||||
@ -103,14 +103,7 @@ vtkm::cont::PartitionedDataSet NewFilter::Execute(const vtkm::cont::PartitionedD
|
||||
(int)input.GetNumberOfPartitions(),
|
||||
vtkm::cont::TypeToString<decltype(*this)>().c_str());
|
||||
|
||||
vtkm::cont::PartitionedDataSet output = this->DoExecutePartitions(input);
|
||||
|
||||
//Copy any fields.
|
||||
vtkm::Id numFields = static_cast<vtkm::Id>(input.GetNumberOfFields());
|
||||
for (vtkm::Id i = 0; i < numFields; i++)
|
||||
output.AddField(input.GetField(i));
|
||||
|
||||
return output;
|
||||
return this->DoExecutePartitions(input);
|
||||
}
|
||||
|
||||
vtkm::cont::DataSet NewFilter::CreateResult(const vtkm::cont::DataSet& inDataSet) const
|
||||
@ -124,6 +117,20 @@ vtkm::cont::DataSet NewFilter::CreateResult(const vtkm::cont::DataSet& inDataSet
|
||||
return clone;
|
||||
}
|
||||
|
||||
vtkm::cont::PartitionedDataSet NewFilter::CreateResult(
|
||||
const vtkm::cont::PartitionedDataSet& input,
|
||||
const vtkm::cont::PartitionedDataSet& output) const
|
||||
{
|
||||
vtkm::cont::PartitionedDataSet clone;
|
||||
clone.CopyStructure(output);
|
||||
this->MapFieldsOntoOutput(
|
||||
input, clone, [](vtkm::cont::PartitionedDataSet& out, const vtkm::cont::Field& fieldToPass) {
|
||||
out.AddField(fieldToPass);
|
||||
});
|
||||
|
||||
return clone;
|
||||
}
|
||||
|
||||
vtkm::Id NewFilter::DetermineNumberOfThreads(const vtkm::cont::PartitionedDataSet& input)
|
||||
{
|
||||
vtkm::Id numDS = input.GetNumberOfPartitions();
|
||||
|
@ -326,6 +326,9 @@ protected:
|
||||
/// fields of `inDataSet` (as selected by the `FieldsToPass` state of the filter).
|
||||
///
|
||||
VTKM_CONT vtkm::cont::DataSet CreateResult(const vtkm::cont::DataSet& inDataSet) const;
|
||||
VTKM_CONT vtkm::cont::PartitionedDataSet CreateResult(
|
||||
const vtkm::cont::PartitionedDataSet& input,
|
||||
const vtkm::cont::PartitionedDataSet& output) const;
|
||||
|
||||
/// \brief Create the output data set for `DoExecute`.
|
||||
///
|
||||
@ -431,9 +434,9 @@ protected:
|
||||
const vtkm::cont::PartitionedDataSet& inData);
|
||||
|
||||
private:
|
||||
template <typename FieldMapper>
|
||||
VTKM_CONT void MapFieldsOntoOutput(const vtkm::cont::DataSet& input,
|
||||
vtkm::cont::DataSet& output,
|
||||
template <typename DataType, typename FieldMapper>
|
||||
VTKM_CONT void MapFieldsOntoOutput(const DataType& input,
|
||||
DataType& output,
|
||||
FieldMapper&& fieldMapper) const
|
||||
{
|
||||
for (vtkm::IdComponent cc = 0; cc < input.GetNumberOfFields(); ++cc)
|
||||
|
@ -115,7 +115,6 @@ void TestPartitionedDataSetFilters()
|
||||
result = cellAverage.Execute(partitions);
|
||||
Result_Verify<vtkm::FloatDefault>(result, cellAverage, partitions, std::string("pointvar"));
|
||||
|
||||
|
||||
//Make sure that any Fields are propagated to the output.
|
||||
partitionNum = 3;
|
||||
partitions = PartitionedDataSetBuilder<vtkm::FloatDefault>(partitionNum, "pointvar");
|
||||
|
Loading…
Reference in New Issue
Block a user