Fix assert for pathlines. Add example from manual that was failing.

This commit is contained in:
Dave Pugmire 2020-11-25 12:43:00 -05:00
parent 8f2ec9e467
commit 3c50a7ea46
2 changed files with 42 additions and 2 deletions

@ -76,6 +76,44 @@ void TestStreamline()
}
}
void TestPathlineSimple()
{
vtkm::cont::DataSetBuilderUniform dataSetBuilder;
vtkm::cont::DataSet inData1 = dataSetBuilder.Create(vtkm::Id3(5, 5, 5));
vtkm::cont::DataSet inData2 = dataSetBuilder.Create(vtkm::Id3(5, 5, 5));
vtkm::Id numPoints = inData1.GetCellSet().GetNumberOfPoints();
vtkm::cont::ArrayHandle<vtkm::Vec3f> vectorField1;
vtkm::cont::ArrayCopy(vtkm::cont::make_ArrayHandleConstant(vtkm::Vec3f(1, 0, 0), numPoints),
vectorField1);
inData1.AddPointField("vectorvar", vectorField1);
vtkm::cont::ArrayHandle<vtkm::Vec3f> vectorField2;
vtkm::cont::ArrayCopy(vtkm::cont::make_ArrayHandleConstant(vtkm::Vec3f(0, 1, 0), numPoints),
vectorField2);
inData2.AddPointField("vectorvar", vectorField2);
vtkm::filter::Pathline pathlines;
// Specify the seeds.
vtkm::cont::ArrayHandle<vtkm::Particle> seedArray;
seedArray.Allocate(2);
seedArray.WritePortal().Set(0, vtkm::Particle({ 0, 0, 0 }, 0));
seedArray.WritePortal().Set(1, vtkm::Particle({ 1, 1, 1 }, 1));
pathlines.SetActiveField("vectorvar");
pathlines.SetStepSize(0.1f);
pathlines.SetNumberOfSteps(100);
pathlines.SetSeeds(seedArray);
pathlines.SetPreviousTime(0.0f);
pathlines.SetNextTime(1.0f);
pathlines.SetNextDataSet(inData2);
auto output = pathlines.Execute(inData1);
//Validate the result is correct.
vtkm::cont::CoordinateSystem coords = output.GetCoordinateSystem();
VTKM_TEST_ASSERT(coords.GetNumberOfPoints() == 77, "Wrong number of coordinates");
vtkm::cont::DynamicCellSet dcells = output.GetCellSet();
VTKM_TEST_ASSERT(dcells.GetNumberOfCells() == 2, "Wrong number of cells");
}
void TestPathline()
{
const vtkm::Id3 dims(5, 5, 5);
@ -515,6 +553,7 @@ void TestStreamlineFilters()
}
TestStreamline();
TestPathlineSimple();
TestPathline();
for (auto useSL : flags)
TestAMRStreamline(useSL);

@ -199,8 +199,9 @@ protected:
//Get the evaluation status for the point that is *just* outside of the data.
evalStatus = this->Evaluator.Evaluate(outpos, time, currValue);
//The eval should fail, and the point should be outside.
VTKM_ASSERT(evalStatus.CheckFail() && evalStatus.CheckSpatialBounds());
//The eval should fail, and the point should be outside either spatially or temporally.
VTKM_ASSERT(evalStatus.CheckFail() &&
(evalStatus.CheckSpatialBounds() || evalStatus.CheckTemporalBounds()));
IntegratorStatus status(evalStatus);
status.SetOk(); //status is ok.