mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-16 17:22:55 +00:00
Merge topic 'tutorial-edits' into release-1.9
689ba00e4 Minor formatting changes to tutorial examples Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !2887
This commit is contained in:
commit
45ae18d46a
@ -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