Name tangle source fields appropriately

The `Tangle` source would create a point field generically named
`nodevar`. This name was not indicitive of the data or its source. Thus,
the output point field has been renamed `tangle`.

The `Tangle` source was also creating a cell field (named `cellvar`).
This field was really just a mirror of the cell indices (counting from 0
on up). This field has been removed from the input. If you want such a
field, you can now use the `GenerateIds` filter to add it to any data
set.
This commit is contained in:
Kenneth Moreland 2021-10-01 10:40:48 -06:00
parent a68422d454
commit ea1a55359f
12 changed files with 50 additions and 56 deletions

@ -69,7 +69,7 @@ void BenchRayTracing(::benchmark::State& state)
rays.Buffers.at(0).InitConst(0.f);
vtkm::cont::Field field = dataset.GetField("nodevar");
vtkm::cont::Field field = dataset.GetField("tangle");
vtkm::Range range = field.GetRange().ReadPortal().Get(0);
tracer.SetField(field, range);

@ -36,7 +36,7 @@ int main(int argc, char* argv[])
auto tangle = vtkm::source::Tangle(vtkm::Id3{ 50, 50, 50 });
vtkm::cont::DataSet tangleData = tangle.Execute();
std::string fieldName = "nodevar";
std::string fieldName = "tangle";
// Set up a camera for rendering the input data
vtkm::rendering::Camera camera;

@ -106,15 +106,15 @@ void TestContourFilterTangle()
vtkm::filter::Contour contour;
contour.SetGenerateNormals(true);
contour.SetIsoValue(0, 1);
contour.SetActiveField("nodevar");
contour.SetFieldsToPass("nodevar");
contour.SetActiveField("tangle");
contour.SetFieldsToPass("tangle");
auto result = contour.Execute(dataSet);
result.PrintSummary(std::cout);
//Y axis Flying Edge algorithm has subtle differences at a couple of boundaries
vtkm::rendering::testing::RenderAndRegressionTest<M, C, V3>(
result, "nodevar", colorTable, "filter/contour-tangle.png", false);
result, "tangle", colorTable, "filter/contour-tangle.png", false);
}
void TestContourFilter()

@ -31,7 +31,7 @@ public:
filter.SetGenerateNormals(true);
filter.SetMergeDuplicatePoints(true);
filter.SetIsoValue(0, 0.1);
filter.SetActiveField("nodevar");
filter.SetActiveField("tangle");
vtkm::cont::DataSet iso = filter.Execute(dataSet);
vtkm::filter::CellSetConnectivity connectivity;

@ -15,6 +15,7 @@
#include <vtkm/filter/CleanGrid.h>
#include <vtkm/filter/Contour.h>
#include <vtkm/filter/GenerateIds.h>
#include <vtkm/io/VTKDataSetReader.h>
#include <vtkm/source/Tangle.h>
@ -31,13 +32,17 @@ public:
vtkm::Id3 dims(4, 4, 4);
vtkm::source::Tangle tangle(dims);
vtkm::cont::DataSet dataSet = tangle.Execute();
vtkm::filter::GenerateIds genIds;
genIds.SetUseFloat(true);
genIds.SetGeneratePointIds(false);
genIds.SetCellFieldName("cellvar");
vtkm::cont::DataSet dataSet = genIds.Execute(tangle.Execute());
vtkm::filter::Contour mc;
mc.SetGenerateNormals(true);
mc.SetIsoValue(0, 0.5);
mc.SetActiveField("nodevar");
mc.SetActiveField("tangle");
mc.SetFieldsToPass(vtkm::filter::FieldSelection::MODE_NONE);
auto result = mc.Execute(dataSet);
@ -50,10 +55,10 @@ public:
}
// let's execute with mapping fields.
mc.SetFieldsToPass({ "nodevar", "cellvar" });
mc.SetFieldsToPass({ "tangle", "cellvar" });
result = mc.Execute(dataSet);
{
const bool isMapped = result.HasField("nodevar");
const bool isMapped = result.HasField("tangle");
VTKM_TEST_ASSERT(isMapped, "mapping should pass");
VTKM_TEST_ASSERT(result.GetNumberOfFields() == 3,

@ -26,9 +26,9 @@ void TestEntropy()
vtkm::filter::Entropy entropyFilter;
///// calculate entropy of "nodevar" field of the data set /////
///// calculate entropy of "tangle" field of the data set /////
entropyFilter.SetNumberOfBins(50); //set number of bins
entropyFilter.SetActiveField("nodevar");
entropyFilter.SetActiveField("tangle");
vtkm::cont::DataSet resultEntropy = entropyFilter.Execute(dataSet);
///// get entropy from resultEntropy /////

@ -105,13 +105,13 @@ void TestMultiBlockFilter()
vtkm::filter::ClipWithField clip;
clip.SetRunMultiThreadedFilter(doThreading);
clip.SetClipValue(0.0);
clip.SetActiveField("nodevar");
clip.SetFieldsToPass("nodevar", vtkm::cont::Field::Association::POINTS);
clip.SetActiveField("tangle");
clip.SetFieldsToPass("tangle", vtkm::cont::Field::Association::POINTS);
auto result = clip.Execute(pds);
VTKM_TEST_ASSERT(result.GetNumberOfPartitions() == pds.GetNumberOfPartitions());
results.push_back(result);
}
ValidateResults(results[0], results[1], "nodevar");
ValidateResults(results[0], results[1], "tangle");
std::cout << "Contour" << std::endl;
results.clear();
@ -121,13 +121,13 @@ void TestMultiBlockFilter()
mc.SetRunMultiThreadedFilter(doThreading);
mc.SetGenerateNormals(true);
mc.SetIsoValue(0, 0.5);
mc.SetActiveField("nodevar");
mc.SetFieldsToPass("nodevar", vtkm::cont::Field::Association::POINTS);
mc.SetActiveField("tangle");
mc.SetFieldsToPass("tangle", vtkm::cont::Field::Association::POINTS);
auto result = mc.Execute(pds);
VTKM_TEST_ASSERT(result.GetNumberOfPartitions() == pds.GetNumberOfPartitions());
results.push_back(result);
}
ValidateResults(results[0], results[1], "nodevar");
ValidateResults(results[0], results[1], "tangle");
std::cout << "CleanGrid" << std::endl;
results.clear();
@ -141,7 +141,7 @@ void TestMultiBlockFilter()
VTKM_TEST_ASSERT(result.GetNumberOfPartitions() == pds.GetNumberOfPartitions());
results.push_back(result);
}
ValidateResults(results[0], results[1], "nodevar");
ValidateResults(results[0], results[1], "tangle");
std::cout << "Gradient" << std::endl;
results.clear();
@ -150,7 +150,7 @@ void TestMultiBlockFilter()
vtkm::filter::Gradient grad;
grad.SetRunMultiThreadedFilter(doThreading);
grad.SetComputePointGradient(true);
grad.SetActiveField("nodevar");
grad.SetActiveField("tangle");
grad.SetOutputFieldName("gradient");
auto result = grad.Execute(pds);
VTKM_TEST_ASSERT(result.GetNumberOfPartitions() == pds.GetNumberOfPartitions());

@ -77,11 +77,6 @@ vtkm::cont::DataSet Tangle::Execute() const
vtkm::cont::ArrayHandle<vtkm::Float32> pointFieldArray;
this->Invoke(tangle::TangleField{ this->Dims, mins, maxs }, cellSet, pointFieldArray);
vtkm::cont::ArrayHandle<vtkm::FloatDefault> cellFieldArray;
vtkm::cont::ArrayCopy(
vtkm::cont::make_ArrayHandleCounting<vtkm::Id>(0, 1, cellSet.GetNumberOfCells()),
cellFieldArray);
const vtkm::Vec3f origin(0.0f, 0.0f, 0.0f);
const vtkm::Vec3f spacing(1.0f / static_cast<vtkm::FloatDefault>(this->Dims[0]),
1.0f / static_cast<vtkm::FloatDefault>(this->Dims[1]),
@ -89,8 +84,7 @@ vtkm::cont::DataSet Tangle::Execute() const
vtkm::cont::ArrayHandleUniformPointCoordinates coordinates(pdims, origin, spacing);
dataSet.AddCoordinateSystem(vtkm::cont::CoordinateSystem("coordinates", coordinates));
dataSet.AddField(vtkm::cont::make_FieldPoint("nodevar", pointFieldArray));
dataSet.AddField(vtkm::cont::make_FieldCell("cellvar", cellFieldArray));
dataSet.AddField(vtkm::cont::make_FieldPoint("tangle", pointFieldArray));
return dataSet;
}

@ -21,11 +21,15 @@ namespace source
* @brief The Tangle source creates a uniform dataset.
*
* This class generates a predictable uniform grid dataset with an
* interesting set of point and cell scalar arrays, which is useful
* for testing and benchmarking.
* interesting point field, which is useful for testing and
* benchmarking.
*
* The Execute method creates a complete structured dataset that have a
* point field named 'nodevar', and a cell field named 'cellvar'.
* The Execute method creates a complete structured dataset of a
* resolution specified in the constructor that is bounded by the
* cube in the range [0,1] in each dimension. The dataset has a
* point field named 'tangle' computed with the following formula
*
* x^4 - 5x^2 + y^4 - 5y^2 + z^4 - 5z^2
*
**/
class VTKM_SOURCE_EXPORT Tangle final : public vtkm::source::Source

@ -24,7 +24,7 @@ void TangleSourceTest()
double time = timer.GetElapsedTime();
std::cout << "Default wavelet took " << time << "s.\n";
std::cout << "Default tangle took " << time << "s.\n";
{
auto coords = ds.GetCoordinateSystem("coordinates");
@ -37,29 +37,11 @@ void TangleSourceTest()
VTKM_TEST_ASSERT(test_equal(cells.GetNumberOfCells(), 8000), "Incorrect number of cells.");
}
// check the cell scalars
{
using ScalarHandleType = vtkm::cont::ArrayHandle<vtkm::FloatDefault>;
auto field = ds.GetCellField("cellvar");
auto dynData = field.GetData();
VTKM_TEST_ASSERT(dynData.IsType<ScalarHandleType>(), "Invalid scalar handle type.");
ScalarHandleType handle = dynData.AsArrayHandle<ScalarHandleType>();
auto data = handle.ReadPortal();
VTKM_TEST_ASSERT(test_equal(data.GetNumberOfValues(), 8000), "Incorrect number of elements.");
for (vtkm::Id i = 0; i < 8000; ++i)
{
VTKM_TEST_ASSERT(test_equal(data.Get(i), i), "Incorrect scalar value.");
}
}
// Spot check some node scalars
{
using ScalarHandleType = vtkm::cont::ArrayHandle<vtkm::Float32>;
auto field = ds.GetPointField("nodevar");
auto field = ds.GetPointField("tangle");
auto dynData = field.GetData();
VTKM_TEST_ASSERT(dynData.IsType<ScalarHandleType>(), "Invalid scalar handle type.");
ScalarHandleType handle = dynData.AsArrayHandle<ScalarHandleType>();

@ -30,7 +30,7 @@ public:
filter.SetGenerateNormals(true);
filter.SetMergeDuplicatePoints(true);
filter.SetIsoValue(0, 0.1);
filter.SetActiveField("nodevar");
filter.SetActiveField("tangle");
vtkm::cont::DataSet outputData = filter.Execute(dataSet);
auto cellSet = outputData.GetCellSet().Cast<vtkm::cont::CellSetSingleType<>>();

@ -16,6 +16,7 @@
#include <vtkm/cont/testing/Testing.h>
#include <vtkm/filter/ClipWithImplicitFunction.h>
#include <vtkm/filter/GenerateIds.h>
#include <vtkm/source/Tangle.h>
#include <vtkm/worklet/Contour.h>
@ -185,12 +186,16 @@ void TestContourUniformGrid()
vtkm::Id3 dims(4, 4, 4);
vtkm::source::Tangle tangle(dims);
vtkm::cont::DataSet dataSet = tangle.Execute();
vtkm::filter::GenerateIds genIds;
genIds.SetUseFloat(true);
genIds.SetGeneratePointIds(false);
genIds.SetCellFieldName("cellvar");
vtkm::cont::DataSet dataSet = genIds.Execute(tangle.Execute());
vtkm::cont::CellSetStructured<3> cellSet;
dataSet.GetCellSet().CopyTo(cellSet);
vtkm::cont::ArrayHandle<vtkm::Float32> pointFieldArray;
dataSet.GetField("nodevar").GetData().AsArrayHandle(pointFieldArray);
dataSet.GetField("tangle").GetData().AsArrayHandle(pointFieldArray);
vtkm::cont::ArrayHandle<vtkm::FloatDefault> cellFieldArray;
dataSet.GetField("cellvar").GetData().AsArrayHandle(cellFieldArray);
@ -360,7 +365,11 @@ void TestContourClipped()
vtkm::Id3 dims(4, 4, 4);
vtkm::source::Tangle tangle(dims);
vtkm::cont::DataSet dataSet = tangle.Execute();
vtkm::filter::GenerateIds genIds;
genIds.SetUseFloat(true);
genIds.SetGeneratePointIds(false);
genIds.SetCellFieldName("cellvar");
vtkm::cont::DataSet dataSet = genIds.Execute(tangle.Execute());
vtkm::Plane plane(vtkm::make_Vec(0.51, 0.51, 0.51), vtkm::make_Vec(1, 1, 1));
vtkm::filter::ClipWithImplicitFunction clip;
@ -370,7 +379,7 @@ void TestContourClipped()
vtkm::cont::CellSetExplicit<> cellSet;
clipped.GetCellSet().CopyTo(cellSet);
vtkm::cont::ArrayHandle<vtkm::Float32> pointFieldArray;
clipped.GetField("nodevar").GetData().AsArrayHandle(pointFieldArray);
clipped.GetField("tangle").GetData().AsArrayHandle(pointFieldArray);
vtkm::cont::ArrayHandle<vtkm::FloatDefault> cellFieldArray;
clipped.GetField("cellvar").GetData().AsArrayHandle(cellFieldArray);