mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-08 21:33:55 +00:00
Address comments from Ken, Ollie.
This commit is contained in:
parent
71c6f034d9
commit
00b6657689
@ -144,7 +144,7 @@ void PartitionedDataSet::ReplacePartition(vtkm::Id index, const vtkm::cont::Data
|
|||||||
}
|
}
|
||||||
|
|
||||||
VTKM_CONT
|
VTKM_CONT
|
||||||
void PartitionedDataSet::CopyStructure(const vtkm::cont::PartitionedDataSet& source)
|
void PartitionedDataSet::CopyPartitions(const vtkm::cont::PartitionedDataSet& source)
|
||||||
{
|
{
|
||||||
this->Partitions = source.Partitions;
|
this->Partitions = source.Partitions;
|
||||||
}
|
}
|
||||||
|
@ -218,9 +218,9 @@ public:
|
|||||||
}
|
}
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
/// Copies the structure i.e. partitions from the source. The fields are left unchanged.
|
/// Copies the partitions from the source. The fields on the PartitionedDataSet are not copied.
|
||||||
VTKM_CONT
|
VTKM_CONT
|
||||||
void CopyStructure(const vtkm::cont::PartitionedDataSet& source);
|
void CopyPartitions(const vtkm::cont::PartitionedDataSet& source);
|
||||||
|
|
||||||
VTKM_CONT
|
VTKM_CONT
|
||||||
void PrintSummary(std::ostream& stream) const;
|
void PrintSummary(std::ostream& stream) const;
|
||||||
|
@ -119,10 +119,10 @@ vtkm::cont::DataSet NewFilter::CreateResult(const vtkm::cont::DataSet& inDataSet
|
|||||||
|
|
||||||
vtkm::cont::PartitionedDataSet NewFilter::CreateResult(
|
vtkm::cont::PartitionedDataSet NewFilter::CreateResult(
|
||||||
const vtkm::cont::PartitionedDataSet& input,
|
const vtkm::cont::PartitionedDataSet& input,
|
||||||
const vtkm::cont::PartitionedDataSet& output) const
|
const vtkm::cont::PartitionedDataSet& resultPartitions) const
|
||||||
{
|
{
|
||||||
vtkm::cont::PartitionedDataSet clone;
|
vtkm::cont::PartitionedDataSet clone;
|
||||||
clone.CopyStructure(output);
|
clone.CopyPartitions(resultPartitions);
|
||||||
this->MapFieldsOntoOutput(
|
this->MapFieldsOntoOutput(
|
||||||
input, clone, [](vtkm::cont::PartitionedDataSet& out, const vtkm::cont::Field& fieldToPass) {
|
input, clone, [](vtkm::cont::PartitionedDataSet& out, const vtkm::cont::Field& fieldToPass) {
|
||||||
out.AddField(fieldToPass);
|
out.AddField(fieldToPass);
|
||||||
|
@ -326,9 +326,48 @@ protected:
|
|||||||
/// fields of `inDataSet` (as selected by the `FieldsToPass` state of the filter).
|
/// 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::DataSet CreateResult(const vtkm::cont::DataSet& inDataSet) const;
|
||||||
|
|
||||||
|
|
||||||
|
/// \brief Create the output data set for `DoExecute`.
|
||||||
|
///
|
||||||
|
/// This form of `CreateResult` will create an output PartitionedDataSet with the
|
||||||
|
/// same partitions and pass all PartitionedDataSet fields (as requested by the
|
||||||
|
/// `Filter` state).
|
||||||
|
///
|
||||||
|
/// \param[in] input The input data set being modified (usually the one passed into
|
||||||
|
/// `DoExecute`).
|
||||||
|
/// \param[in] resultPartitions The output data created by the filter. Fields from the input are
|
||||||
|
/// passed onto the return result partition as requested by the `Filter` state.
|
||||||
|
///
|
||||||
VTKM_CONT vtkm::cont::PartitionedDataSet CreateResult(
|
VTKM_CONT vtkm::cont::PartitionedDataSet CreateResult(
|
||||||
const vtkm::cont::PartitionedDataSet& input,
|
const vtkm::cont::PartitionedDataSet& input,
|
||||||
const vtkm::cont::PartitionedDataSet& output) const;
|
const vtkm::cont::PartitionedDataSet& resultPartitions) const;
|
||||||
|
|
||||||
|
/// \brief Create the output data set for `DoExecute`.
|
||||||
|
///
|
||||||
|
/// This form of `CreateResult` will create an output PartitionedDataSet with the
|
||||||
|
/// same partitions and pass all PartitionedDataSet fields (as requested by the
|
||||||
|
/// `Filter` state).
|
||||||
|
///
|
||||||
|
/// \param[in] input The input data set being modified (usually the one passed into
|
||||||
|
/// `DoExecute`).
|
||||||
|
/// \param[in] resultPartitions The output data created by the filter. Fields from the input are
|
||||||
|
/// passed onto the return result partition as requested by the `Filter` state.
|
||||||
|
/// \param[in] fieldMapper A function or functor that takes a `PartitionedDataSet` as its first
|
||||||
|
/// argument and a `Field` as its second argument. The `PartitionedDataSet` is the data being
|
||||||
|
/// created and will eventually be returned by `CreateResult`. The `Field` comes from `input`.
|
||||||
|
///
|
||||||
|
|
||||||
|
template <typename FieldMapper>
|
||||||
|
VTKM_CONT vtkm::cont::PartitionedDataSet CreateResult(
|
||||||
|
const vtkm::cont::PartitionedDataSet& input,
|
||||||
|
const vtkm::cont::PartitionedDataSet& resultPartitions,
|
||||||
|
FieldMapper&& fieldMapper) const
|
||||||
|
{
|
||||||
|
vtkm::cont::PartitionedDataSet output(resultPartitions.GetPartitions);
|
||||||
|
this->MapFieldsOntoOutput(input, output, fieldMapper);
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
/// \brief Create the output data set for `DoExecute`.
|
/// \brief Create the output data set for `DoExecute`.
|
||||||
///
|
///
|
||||||
@ -434,9 +473,9 @@ protected:
|
|||||||
const vtkm::cont::PartitionedDataSet& inData);
|
const vtkm::cont::PartitionedDataSet& inData);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
template <typename DataType, typename FieldMapper>
|
template <typename DataSetType, typename FieldMapper>
|
||||||
VTKM_CONT void MapFieldsOntoOutput(const DataType& input,
|
VTKM_CONT void MapFieldsOntoOutput(const DataSetType& input,
|
||||||
DataType& output,
|
DataSetType& output,
|
||||||
FieldMapper&& fieldMapper) const
|
FieldMapper&& fieldMapper) const
|
||||||
{
|
{
|
||||||
for (vtkm::IdComponent cc = 0; cc < input.GetNumberOfFields(); ++cc)
|
for (vtkm::IdComponent cc = 0; cc < input.GetNumberOfFields(); ++cc)
|
||||||
|
@ -116,30 +116,64 @@ void TestPartitionedDataSetFilters()
|
|||||||
Result_Verify<vtkm::FloatDefault>(result, cellAverage, partitions, std::string("pointvar"));
|
Result_Verify<vtkm::FloatDefault>(result, cellAverage, partitions, std::string("pointvar"));
|
||||||
|
|
||||||
//Make sure that any Fields are propagated to the output.
|
//Make sure that any Fields are propagated to the output.
|
||||||
partitionNum = 3;
|
//Test it with and without using SetFieldsToPass
|
||||||
partitions = PartitionedDataSetBuilder<vtkm::FloatDefault>(partitionNum, "pointvar");
|
std::vector<std::vector<std::string>> fieldsToPass;
|
||||||
std::vector<vtkm::Id> ids = { 0, 1, 2 };
|
fieldsToPass.push_back({});
|
||||||
std::vector<vtkm::FloatDefault> scalar = { 10.0f };
|
fieldsToPass.push_back({ "ids" });
|
||||||
partitions.AddPartitionsField("ids", ids);
|
fieldsToPass.push_back({ "scalar" });
|
||||||
partitions.AddAllPartitionsField("scalar", scalar);
|
fieldsToPass.push_back({ "ids", "scalar" });
|
||||||
|
|
||||||
result = cellAverage.Execute(partitions);
|
for (auto& fields : fieldsToPass)
|
||||||
|
{
|
||||||
|
partitionNum = 3;
|
||||||
|
partitions = PartitionedDataSetBuilder<vtkm::FloatDefault>(partitionNum, "pointvar");
|
||||||
|
std::vector<vtkm::Id> ids = { 0, 1, 2 };
|
||||||
|
std::vector<vtkm::FloatDefault> scalar = { 10.0f };
|
||||||
|
partitions.AddPartitionsField("ids", ids);
|
||||||
|
partitions.AddAllPartitionsField("scalar", scalar);
|
||||||
|
|
||||||
VTKM_TEST_ASSERT(result.HasPartitionsField("ids"), "Missing field on result");
|
//On second iteration, only allow "ids" to pass through.
|
||||||
auto field0 = result.GetField("ids");
|
cellAverage.GetFieldsToPass().ClearFields();
|
||||||
auto portal0 = field0.GetData().AsArrayHandle<vtkm::cont::ArrayHandle<vtkm::Id>>().ReadPortal();
|
if (!fields.empty())
|
||||||
VTKM_TEST_ASSERT(portal0.GetNumberOfValues() == static_cast<vtkm::Id>(ids.size()),
|
{
|
||||||
"Wrong number of field values.");
|
cellAverage.GetFieldsToPass().SetMode(vtkm::filter::FieldSelection::Mode::Select);
|
||||||
for (std::size_t i = 0; i < ids.size(); i++)
|
for (auto& f : fields)
|
||||||
VTKM_TEST_ASSERT(portal0.Get(static_cast<vtkm::Id>(i)) == ids[i], "Wrong field value.");
|
cellAverage.GetFieldsToPass().AddField(f);
|
||||||
|
}
|
||||||
|
|
||||||
VTKM_TEST_ASSERT(result.HasAllPartitionsField("scalar"), "Missing field on result");
|
result = cellAverage.Execute(partitions);
|
||||||
auto field1 = result.GetField("scalar");
|
|
||||||
auto portal1 =
|
if (fields.empty() || std::find(fields.begin(), fields.end(), "ids") != fields.end())
|
||||||
field1.GetData().AsArrayHandle<vtkm::cont::ArrayHandle<vtkm::FloatDefault>>().ReadPortal();
|
{
|
||||||
VTKM_TEST_ASSERT(portal1.GetNumberOfValues() == static_cast<vtkm::Id>(scalar.size()),
|
VTKM_TEST_ASSERT(result.HasPartitionsField("ids"), "Missing field on result");
|
||||||
"Wrong number of field values.");
|
auto field0 = result.GetField("ids");
|
||||||
VTKM_TEST_ASSERT(portal1.Get(0) == scalar[0], "Wrong field value.");
|
auto portal0 =
|
||||||
|
field0.GetData().AsArrayHandle<vtkm::cont::ArrayHandle<vtkm::Id>>().ReadPortal();
|
||||||
|
VTKM_TEST_ASSERT(portal0.GetNumberOfValues() == static_cast<vtkm::Id>(ids.size()),
|
||||||
|
"Wrong number of field values.");
|
||||||
|
for (std::size_t i = 0; i < ids.size(); i++)
|
||||||
|
VTKM_TEST_ASSERT(portal0.Get(static_cast<vtkm::Id>(i)) == ids[i], "Wrong field value.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
VTKM_TEST_ASSERT(!result.HasPartitionsField("ids"), "Field should not be on result");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fields.empty() || std::find(fields.begin(), fields.end(), "scalar") != fields.end())
|
||||||
|
{
|
||||||
|
VTKM_TEST_ASSERT(result.HasAllPartitionsField("scalar"), "Missing field on result");
|
||||||
|
auto field1 = result.GetField("scalar");
|
||||||
|
auto portal1 =
|
||||||
|
field1.GetData().AsArrayHandle<vtkm::cont::ArrayHandle<vtkm::FloatDefault>>().ReadPortal();
|
||||||
|
VTKM_TEST_ASSERT(portal1.GetNumberOfValues() == static_cast<vtkm::Id>(scalar.size()),
|
||||||
|
"Wrong number of field values.");
|
||||||
|
VTKM_TEST_ASSERT(portal1.Get(0) == scalar[0], "Wrong field value.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
VTKM_TEST_ASSERT(!result.HasAllPartitionsField("scalar"), "Field should not be on result");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int UnitTestPartitionedDataSetFilters(int argc, char* argv[])
|
int UnitTestPartitionedDataSetFilters(int argc, char* argv[])
|
||||||
|
Loading…
Reference in New Issue
Block a user