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:
parent
15f9c168f6
commit
689ba00e4c
@ -16,8 +16,7 @@
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice;
|
||||
vtkm::cont::InitializeResult config = vtkm::cont::Initialize(argc, argv, opts);
|
||||
vtkm::cont::Initialize(argc, argv);
|
||||
|
||||
vtkm::io::VTKDataSetReader reader("data/kitchen.vtk");
|
||||
vtkm::cont::DataSet ds_from_file = reader.ReadDataSet();
|
||||
|
@ -16,8 +16,7 @@
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice;
|
||||
vtkm::cont::InitializeResult config = vtkm::cont::Initialize(argc, argv, opts);
|
||||
vtkm::cont::Initialize(argc, argv);
|
||||
|
||||
vtkm::io::VTKDataSetReader reader("data/kitchen.vtk");
|
||||
vtkm::cont::DataSet ds_from_file = reader.ReadDataSet();
|
||||
|
@ -35,8 +35,8 @@ struct CountEdgesWorklet : vtkm::worklet::WorkletVisitCellsWithPoints
|
||||
using ExecutionSignature = _2(CellShape, PointCount);
|
||||
|
||||
template <typename CellShapeTag>
|
||||
VTKM_EXEC_CONT vtkm::IdComponent operator()(CellShapeTag cellShape,
|
||||
vtkm::IdComponent numPointsInCell) const
|
||||
VTKM_EXEC vtkm::IdComponent operator()(CellShapeTag cellShape,
|
||||
vtkm::IdComponent numPointsInCell) const
|
||||
{
|
||||
vtkm::IdComponent numEdges;
|
||||
vtkm::exec::CellEdgeNumberOfEdges(numPointsInCell, cellShape, numEdges);
|
||||
@ -122,8 +122,8 @@ namespace
|
||||
VTKM_CONT bool DoMapField(
|
||||
vtkm::cont::DataSet& result,
|
||||
const vtkm::cont::Field& inputField,
|
||||
const vtkm::worklet::ScatterCounting::OutputToInputMapType& OutputToInputCellMap,
|
||||
const vtkm::worklet::Keys<vtkm::Id2>& CellToEdgeKeys)
|
||||
const vtkm::worklet::ScatterCounting::OutputToInputMapType& outputToInputCellMap,
|
||||
const vtkm::worklet::Keys<vtkm::Id2>& cellToEdgeKeys)
|
||||
{
|
||||
vtkm::cont::Field outputField;
|
||||
|
||||
@ -134,8 +134,8 @@ VTKM_CONT bool DoMapField(
|
||||
else if (inputField.IsCellField())
|
||||
{
|
||||
vtkm::cont::Field permuted;
|
||||
vtkm::filter::MapFieldPermutation(inputField, OutputToInputCellMap, permuted);
|
||||
vtkm::filter::MapFieldMergeAverage(permuted, CellToEdgeKeys, outputField);
|
||||
vtkm::filter::MapFieldPermutation(inputField, outputToInputCellMap, permuted);
|
||||
vtkm::filter::MapFieldMergeAverage(permuted, cellToEdgeKeys, outputField);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -147,6 +147,8 @@ VTKM_CONT bool DoMapField(
|
||||
return true;
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
class ExtractEdges : public vtkm::filter::NewFilter
|
||||
{
|
||||
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
|
||||
// for each edge in the cell.
|
||||
vtkm::worklet::ScatterCounting scatter(edgeCounts);
|
||||
vtkm::worklet::ScatterCounting::OutputToInputMapType OutputToInputCellMap;
|
||||
OutputToInputCellMap = scatter.GetOutputToInputMap(inCellSet.GetNumberOfCells());
|
||||
vtkm::worklet::ScatterCounting::OutputToInputMapType outputToInputCellMap;
|
||||
outputToInputCellMap = scatter.GetOutputToInputMap(inCellSet.GetNumberOfCells());
|
||||
vtkm::worklet::ScatterCounting::VisitArrayType outputToInputEdgeMap =
|
||||
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);
|
||||
|
||||
// Fourth, construct a Keys object to combine all like edge ids.
|
||||
vtkm::worklet::Keys<vtkm::Id2> CellToEdgeKeys;
|
||||
CellToEdgeKeys = vtkm::worklet::Keys<vtkm::Id2>(canonicalIds);
|
||||
vtkm::worklet::Keys<vtkm::Id2> cellToEdgeKeys;
|
||||
cellToEdgeKeys = vtkm::worklet::Keys<vtkm::Id2>(canonicalIds);
|
||||
|
||||
// Fifth, use a reduce-by-key to extract indices for each unique edge.
|
||||
vtkm::cont::ArrayHandle<vtkm::Id> connectivityArray;
|
||||
this->Invoke(EdgeIndicesWorklet{},
|
||||
CellToEdgeKeys,
|
||||
cellToEdgeKeys,
|
||||
inCellSet,
|
||||
OutputToInputCellMap,
|
||||
outputToInputCellMap,
|
||||
outputToInputEdgeMap,
|
||||
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);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice;
|
||||
|
@ -16,8 +16,7 @@
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice;
|
||||
vtkm::cont::InitializeResult config = vtkm::cont::Initialize(argc, argv, opts);
|
||||
vtkm::cont::Initialize(argc, argv);
|
||||
|
||||
const char* input = "data/kitchen.vtk";
|
||||
vtkm::io::VTKDataSetReader reader(input);
|
||||
|
@ -14,10 +14,10 @@
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice;
|
||||
auto opts = vtkm::cont::InitializeOptions::AddHelp;
|
||||
|
||||
// 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);
|
||||
|
||||
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());
|
||||
|
||||
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);
|
||||
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;
|
||||
}
|
||||
|
@ -12,12 +12,14 @@
|
||||
#include <vtkm/cont/Initialize.h>
|
||||
#include <vtkm/cont/Invoker.h>
|
||||
|
||||
#include <vtkm/filter/NewFilterField.h>
|
||||
#include <vtkm/filter/vector_analysis/Gradient.h>
|
||||
#include <vtkm/io/VTKDataSetReader.h>
|
||||
#include <vtkm/io/VTKDataSetWriter.h>
|
||||
|
||||
#include <vtkm/worklet/WorkletMapField.h>
|
||||
|
||||
// Worklet that does the actual work on the device.
|
||||
struct ComputeMagnitude : vtkm::worklet::WorkletMapField
|
||||
{
|
||||
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
|
||||
{
|
||||
public:
|
||||
using SupportedTypes = vtkm::List<vtkm::Vec3f>;
|
||||
|
||||
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);
|
||||
}
|
||||
protected:
|
||||
VTKM_CONT vtkm::cont::DataSet DoExecute(const vtkm::cont::DataSet& inDataSet) override;
|
||||
};
|
||||
|
||||
// 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)
|
||||
{
|
||||
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);
|
||||
|
||||
vtkm::cont::UnknownArrayHandle outArray;
|
||||
auto resolveType = [&](const auto& concrete) {
|
||||
using ValueType = typename std::decay_t<decltype(concrete)>::ValueType;
|
||||
auto resolveType = [&](const auto& inConcrete) {
|
||||
using ValueType = typename std::decay_t<decltype(inConcrete)>::ValueType;
|
||||
|
||||
vtkm::cont::ArrayHandle<ValueType> outField;
|
||||
vtkm::cont::ArrayHandle<ValueType> outConcrete;
|
||||
this->Invoke(
|
||||
vtkm::worklet::ConvertPointFieldToCells{}, inDataSet.GetCellSet(), concrete, outField);
|
||||
outArray = outField;
|
||||
vtkm::worklet::ConvertPointFieldToCells{}, inDataSet.GetCellSet(), inConcrete, outConcrete);
|
||||
outArray = outConcrete;
|
||||
};
|
||||
this->CastAndCallScalarField(inField, resolveType);
|
||||
|
||||
|
@ -20,8 +20,7 @@
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice;
|
||||
vtkm::cont::InitializeResult config = vtkm::cont::Initialize(argc, argv, opts);
|
||||
vtkm::cont::Initialize(argc, argv);
|
||||
|
||||
//Loading .vtk File
|
||||
vtkm::io::VTKDataSetReader reader("data/kitchen.vtk");
|
||||
|
@ -17,8 +17,7 @@
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice;
|
||||
vtkm::cont::InitializeResult config = vtkm::cont::Initialize(argc, argv, opts);
|
||||
vtkm::cont::Initialize(argc, argv);
|
||||
|
||||
vtkm::io::VTKDataSetReader reader("data/kitchen.vtk");
|
||||
vtkm::cont::DataSet ds_from_file = reader.ReadDataSet();
|
||||
|
Loading…
Reference in New Issue
Block a user