Minor formatting changes to tutorial examples

While updating the slides for an upcoming tutorial, some minor changes
were made to the tutorial examples to more clearly explain concepts or
simply fit things better on slides.
This commit is contained in:
Kenneth Moreland 2022-10-11 18:23:44 -06:00
parent 15f9c168f6
commit 689ba00e4c
9 changed files with 55 additions and 57 deletions

@ -16,8 +16,7 @@
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice; vtkm::cont::Initialize(argc, argv);
vtkm::cont::InitializeResult config = vtkm::cont::Initialize(argc, argv, opts);
vtkm::io::VTKDataSetReader reader("data/kitchen.vtk"); vtkm::io::VTKDataSetReader reader("data/kitchen.vtk");
vtkm::cont::DataSet ds_from_file = reader.ReadDataSet(); vtkm::cont::DataSet ds_from_file = reader.ReadDataSet();

@ -16,8 +16,7 @@
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice; vtkm::cont::Initialize(argc, argv);
vtkm::cont::InitializeResult config = vtkm::cont::Initialize(argc, argv, opts);
vtkm::io::VTKDataSetReader reader("data/kitchen.vtk"); vtkm::io::VTKDataSetReader reader("data/kitchen.vtk");
vtkm::cont::DataSet ds_from_file = reader.ReadDataSet(); vtkm::cont::DataSet ds_from_file = reader.ReadDataSet();

@ -35,8 +35,8 @@ struct CountEdgesWorklet : vtkm::worklet::WorkletVisitCellsWithPoints
using ExecutionSignature = _2(CellShape, PointCount); using ExecutionSignature = _2(CellShape, PointCount);
template <typename CellShapeTag> template <typename CellShapeTag>
VTKM_EXEC_CONT vtkm::IdComponent operator()(CellShapeTag cellShape, VTKM_EXEC vtkm::IdComponent operator()(CellShapeTag cellShape,
vtkm::IdComponent numPointsInCell) const vtkm::IdComponent numPointsInCell) const
{ {
vtkm::IdComponent numEdges; vtkm::IdComponent numEdges;
vtkm::exec::CellEdgeNumberOfEdges(numPointsInCell, cellShape, numEdges); vtkm::exec::CellEdgeNumberOfEdges(numPointsInCell, cellShape, numEdges);
@ -122,8 +122,8 @@ namespace
VTKM_CONT bool DoMapField( VTKM_CONT bool DoMapField(
vtkm::cont::DataSet& result, vtkm::cont::DataSet& result,
const vtkm::cont::Field& inputField, const vtkm::cont::Field& inputField,
const vtkm::worklet::ScatterCounting::OutputToInputMapType& OutputToInputCellMap, const vtkm::worklet::ScatterCounting::OutputToInputMapType& outputToInputCellMap,
const vtkm::worklet::Keys<vtkm::Id2>& CellToEdgeKeys) const vtkm::worklet::Keys<vtkm::Id2>& cellToEdgeKeys)
{ {
vtkm::cont::Field outputField; vtkm::cont::Field outputField;
@ -134,8 +134,8 @@ VTKM_CONT bool DoMapField(
else if (inputField.IsCellField()) else if (inputField.IsCellField())
{ {
vtkm::cont::Field permuted; vtkm::cont::Field permuted;
vtkm::filter::MapFieldPermutation(inputField, OutputToInputCellMap, permuted); vtkm::filter::MapFieldPermutation(inputField, outputToInputCellMap, permuted);
vtkm::filter::MapFieldMergeAverage(permuted, CellToEdgeKeys, outputField); vtkm::filter::MapFieldMergeAverage(permuted, cellToEdgeKeys, outputField);
} }
else else
{ {
@ -147,6 +147,8 @@ VTKM_CONT bool DoMapField(
return true; return true;
} }
} // anonymous namespace
class ExtractEdges : public vtkm::filter::NewFilter class ExtractEdges : public vtkm::filter::NewFilter
{ {
public: public:
@ -164,8 +166,8 @@ VTKM_CONT vtkm::cont::DataSet ExtractEdges::DoExecute(const vtkm::cont::DataSet&
// Second, using these counts build a scatter that repeats a cell's visit // Second, using these counts build a scatter that repeats a cell's visit
// for each edge in the cell. // for each edge in the cell.
vtkm::worklet::ScatterCounting scatter(edgeCounts); vtkm::worklet::ScatterCounting scatter(edgeCounts);
vtkm::worklet::ScatterCounting::OutputToInputMapType OutputToInputCellMap; vtkm::worklet::ScatterCounting::OutputToInputMapType outputToInputCellMap;
OutputToInputCellMap = scatter.GetOutputToInputMap(inCellSet.GetNumberOfCells()); outputToInputCellMap = scatter.GetOutputToInputMap(inCellSet.GetNumberOfCells());
vtkm::worklet::ScatterCounting::VisitArrayType outputToInputEdgeMap = vtkm::worklet::ScatterCounting::VisitArrayType outputToInputEdgeMap =
scatter.GetVisitArray(inCellSet.GetNumberOfCells()); scatter.GetVisitArray(inCellSet.GetNumberOfCells());
@ -174,15 +176,15 @@ VTKM_CONT vtkm::cont::DataSet ExtractEdges::DoExecute(const vtkm::cont::DataSet&
this->Invoke(EdgeIdsWorklet{}, scatter, inCellSet, canonicalIds); this->Invoke(EdgeIdsWorklet{}, scatter, inCellSet, canonicalIds);
// Fourth, construct a Keys object to combine all like edge ids. // Fourth, construct a Keys object to combine all like edge ids.
vtkm::worklet::Keys<vtkm::Id2> CellToEdgeKeys; vtkm::worklet::Keys<vtkm::Id2> cellToEdgeKeys;
CellToEdgeKeys = vtkm::worklet::Keys<vtkm::Id2>(canonicalIds); cellToEdgeKeys = vtkm::worklet::Keys<vtkm::Id2>(canonicalIds);
// Fifth, use a reduce-by-key to extract indices for each unique edge. // Fifth, use a reduce-by-key to extract indices for each unique edge.
vtkm::cont::ArrayHandle<vtkm::Id> connectivityArray; vtkm::cont::ArrayHandle<vtkm::Id> connectivityArray;
this->Invoke(EdgeIndicesWorklet{}, this->Invoke(EdgeIndicesWorklet{},
CellToEdgeKeys, cellToEdgeKeys,
inCellSet, inCellSet,
OutputToInputCellMap, outputToInputCellMap,
outputToInputEdgeMap, outputToInputEdgeMap,
vtkm::cont::make_ArrayHandleGroupVec<2>(connectivityArray)); vtkm::cont::make_ArrayHandleGroupVec<2>(connectivityArray));
@ -191,13 +193,11 @@ VTKM_CONT vtkm::cont::DataSet ExtractEdges::DoExecute(const vtkm::cont::DataSet&
outCellSet.Fill(inCellSet.GetNumberOfPoints(), vtkm::CELL_SHAPE_LINE, 2, connectivityArray); outCellSet.Fill(inCellSet.GetNumberOfPoints(), vtkm::CELL_SHAPE_LINE, 2, connectivityArray);
auto mapper = [&](auto& outDataSet, const auto& f) { auto mapper = [&](auto& outDataSet, const auto& f) {
DoMapField(outDataSet, f, OutputToInputCellMap, CellToEdgeKeys); DoMapField(outDataSet, f, outputToInputCellMap, cellToEdgeKeys);
}; };
return this->CreateResult(inData, outCellSet, inData.GetCoordinateSystems(), mapper); return this->CreateResult(inData, outCellSet, inData.GetCoordinateSystems(), mapper);
} }
}
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice; auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice;

@ -16,8 +16,7 @@
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice; vtkm::cont::Initialize(argc, argv);
vtkm::cont::InitializeResult config = vtkm::cont::Initialize(argc, argv, opts);
const char* input = "data/kitchen.vtk"; const char* input = "data/kitchen.vtk";
vtkm::io::VTKDataSetReader reader(input); vtkm::io::VTKDataSetReader reader(input);

@ -14,10 +14,10 @@
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice; auto opts = vtkm::cont::InitializeOptions::AddHelp;
// SetLogLevelName must be called before Initialize // SetLogLevelName must be called before Initialize
vtkm::cont::SetLogLevelName(vtkm::cont::LogLevel::UserFirst, "tut_log"); vtkm::cont::SetLogLevelName(vtkm::cont::LogLevel::UserFirst, "tlog");
vtkm::cont::InitializeResult config = vtkm::cont::Initialize(argc, argv, opts); vtkm::cont::InitializeResult config = vtkm::cont::Initialize(argc, argv, opts);
const std::string input = "data/kitchen.vtk"; const std::string input = "data/kitchen.vtk";
@ -27,10 +27,10 @@ int main(int argc, char** argv)
VTKM_LOG_F(vtkm::cont::LogLevel::Info, "Done reading from file %s", input.c_str()); VTKM_LOG_F(vtkm::cont::LogLevel::Info, "Done reading from file %s", input.c_str());
const std::string output = "out_logging.vtk"; const std::string output = "out_logging.vtk";
VTKM_LOG_S(vtkm::cont::LogLevel::Info, "Writing to file" << output); VTKM_LOG_S(vtkm::cont::LogLevel::UserFirst, "Writing to file" << output);
vtkm::io::VTKDataSetWriter writer(output); vtkm::io::VTKDataSetWriter writer(output);
writer.WriteDataSet(ds_from_file); writer.WriteDataSet(ds_from_file);
VTKM_LOG_S(vtkm::cont::LogLevel::Info, "Done writing to file" << output); VTKM_LOG_S(vtkm::cont::LogLevel::UserFirst, "Done writing to file" << output);
return 0; return 0;
} }

@ -12,12 +12,14 @@
#include <vtkm/cont/Initialize.h> #include <vtkm/cont/Initialize.h>
#include <vtkm/cont/Invoker.h> #include <vtkm/cont/Invoker.h>
#include <vtkm/filter/NewFilterField.h>
#include <vtkm/filter/vector_analysis/Gradient.h> #include <vtkm/filter/vector_analysis/Gradient.h>
#include <vtkm/io/VTKDataSetReader.h> #include <vtkm/io/VTKDataSetReader.h>
#include <vtkm/io/VTKDataSetWriter.h> #include <vtkm/io/VTKDataSetWriter.h>
#include <vtkm/worklet/WorkletMapField.h> #include <vtkm/worklet/WorkletMapField.h>
// Worklet that does the actual work on the device.
struct ComputeMagnitude : vtkm::worklet::WorkletMapField struct ComputeMagnitude : vtkm::worklet::WorkletMapField
{ {
using ControlSignature = void(FieldIn inputVectors, FieldOut outputMagnitudes); using ControlSignature = void(FieldIn inputVectors, FieldOut outputMagnitudes);
@ -28,33 +30,34 @@ struct ComputeMagnitude : vtkm::worklet::WorkletMapField
} }
}; };
#include <vtkm/filter/NewFilterField.h> // The filter class used by external code to run the algorithm. Normally the class definition
// is in a separate header file.
class FieldMagnitude : public vtkm::filter::NewFilterField class FieldMagnitude : public vtkm::filter::NewFilterField
{ {
public: protected:
using SupportedTypes = vtkm::List<vtkm::Vec3f>; VTKM_CONT vtkm::cont::DataSet DoExecute(const vtkm::cont::DataSet& inDataSet) override;
VTKM_CONT vtkm::cont::DataSet DoExecute(const vtkm::cont::DataSet& inDataSet) override
{
const auto& inField = this->GetFieldFromDataSet(inDataSet);
vtkm::cont::ArrayHandle<vtkm::FloatDefault> outField;
auto resolveType = [&](const auto& concrete) {
this->Invoke(ComputeMagnitude{}, concrete, outField);
};
this->CastAndCallVecField<3>(inField, resolveType);
std::string outFieldName = this->GetOutputFieldName();
if (outFieldName == "")
{
outFieldName = inField.GetName() + "_magnitude";
}
return this->CreateResultFieldCell(inDataSet, outFieldName, outField);
}
}; };
// Implementation for the filter. Normally this is in its own .cxx file.
VTKM_CONT vtkm::cont::DataSet FieldMagnitude::DoExecute(const vtkm::cont::DataSet& inDataSet)
{
const vtkm::cont::Field& inField = this->GetFieldFromDataSet(inDataSet);
vtkm::cont::ArrayHandle<vtkm::FloatDefault> outArrayHandle;
auto resolveType = [&](const auto& inArrayHandle) {
this->Invoke(ComputeMagnitude{}, inArrayHandle, outArrayHandle);
};
this->CastAndCallVecField<3>(inField, resolveType);
std::string outFieldName = this->GetOutputFieldName();
if (outFieldName == "")
{
outFieldName = inField.GetName() + "_magnitude";
}
return this->CreateResultField(inDataSet, outFieldName, inField.GetAssociation(), outArrayHandle);
}
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice; auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice;

@ -63,13 +63,13 @@ VTKM_CONT cont::DataSet ConvertPointFieldToCells::DoExecute(const vtkm::cont::Da
const auto& inField = this->GetFieldFromDataSet(inDataSet); const auto& inField = this->GetFieldFromDataSet(inDataSet);
vtkm::cont::UnknownArrayHandle outArray; vtkm::cont::UnknownArrayHandle outArray;
auto resolveType = [&](const auto& concrete) { auto resolveType = [&](const auto& inConcrete) {
using ValueType = typename std::decay_t<decltype(concrete)>::ValueType; using ValueType = typename std::decay_t<decltype(inConcrete)>::ValueType;
vtkm::cont::ArrayHandle<ValueType> outField; vtkm::cont::ArrayHandle<ValueType> outConcrete;
this->Invoke( this->Invoke(
vtkm::worklet::ConvertPointFieldToCells{}, inDataSet.GetCellSet(), concrete, outField); vtkm::worklet::ConvertPointFieldToCells{}, inDataSet.GetCellSet(), inConcrete, outConcrete);
outArray = outField; outArray = outConcrete;
}; };
this->CastAndCallScalarField(inField, resolveType); this->CastAndCallScalarField(inField, resolveType);

@ -20,8 +20,7 @@
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice; vtkm::cont::Initialize(argc, argv);
vtkm::cont::InitializeResult config = vtkm::cont::Initialize(argc, argv, opts);
//Loading .vtk File //Loading .vtk File
vtkm::io::VTKDataSetReader reader("data/kitchen.vtk"); vtkm::io::VTKDataSetReader reader("data/kitchen.vtk");

@ -17,8 +17,7 @@
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice; vtkm::cont::Initialize(argc, argv);
vtkm::cont::InitializeResult config = vtkm::cont::Initialize(argc, argv, opts);
vtkm::io::VTKDataSetReader reader("data/kitchen.vtk"); vtkm::io::VTKDataSetReader reader("data/kitchen.vtk");
vtkm::cont::DataSet ds_from_file = reader.ReadDataSet(); vtkm::cont::DataSet ds_from_file = reader.ReadDataSet();