mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-10-05 18:08:59 +00:00
Merge branch 'pics_unittests' of gitlab.kitware.com:dpugmire/vtk-m into pics_unittests
This commit is contained in:
commit
0d37915fb2
@ -194,10 +194,10 @@ void TestStreamlineUniformGrid(int d)
|
||||
vtkm::cont::DataSet dataSet = MakeIsosurfaceTestDataSet(dims);
|
||||
|
||||
vtkm::cont::ArrayHandle< vtkm::Vec<vtkm::Float32,3> > result;
|
||||
|
||||
|
||||
PointGrad<vtkm::Float32> func(dataSet, "nodevar", result);
|
||||
vtkm::cont::CastAndCall(dataSet.GetCellSet(), func);
|
||||
|
||||
|
||||
printSummary_ArrayHandle(result, std::cout);
|
||||
*/
|
||||
}
|
||||
@ -259,16 +259,16 @@ void MarchingCubesTest(const vtkm::cont::DataSet& ds, int N)
|
||||
#if 0
|
||||
vtkm::filter::MarchingCubes mc;
|
||||
mc.SetGenerateNormals(true);
|
||||
|
||||
|
||||
for (int i = 0; i < N; i++)
|
||||
{
|
||||
if (printProgress && i % 10 == 0)
|
||||
std::cout<<" "<<i<<" of "<<N<<std::endl;
|
||||
std::cout<<" "<<i<<" of "<<N<<std::endl;
|
||||
vtkm::filter::ResultDataSet result;
|
||||
//vtkm::Float32 val = v0 + i*dv;
|
||||
//std::cout<<i<<": "<<val<<std::endl;
|
||||
mc.SetIsoValue(v0 + i*dv);
|
||||
//mc.SetMergeDuplicatePoints(false);
|
||||
//mc.SetMergeDuplicatePoints(false);
|
||||
result = mc.Execute(ds, ds.GetField(0));
|
||||
const vtkm::cont::DataSet &out = result.GetDataSet();
|
||||
}
|
||||
@ -277,14 +277,14 @@ void MarchingCubesTest(const vtkm::cont::DataSet& ds, int N)
|
||||
for (int i = 0; i < N; i++)
|
||||
{
|
||||
if (printProgress && i % 10 == 0)
|
||||
std::cout<<" "<<i<<" of "<<N<<std::endl;
|
||||
std::cout<<" "<<i<<" of "<<N<<std::endl;
|
||||
vtkm::filter::ResultDataSet result;
|
||||
vtkm::filter::MarchingCubes mc;
|
||||
mc.SetGenerateNormals(true);
|
||||
//vtkm::Float32 val = v0 + i*dv;
|
||||
//std::cout<<i<<": "<<val<<std::endl;
|
||||
mc.SetIsoValue(v0 + i*dv);
|
||||
//mc.SetMergeDuplicatePoints(false);
|
||||
//mc.SetMergeDuplicatePoints(false);
|
||||
result = mc.Execute(ds, ds.GetField(0));
|
||||
const vtkm::cont::DataSet &out = result.GetDataSet();
|
||||
}
|
||||
|
@ -87,35 +87,6 @@ public:
|
||||
return res;
|
||||
}
|
||||
|
||||
template <typename IntegratorType,
|
||||
typename FieldType,
|
||||
typename PointStorage,
|
||||
typename DeviceAdapter>
|
||||
ParticleAdvectionResult<FieldType> Run(
|
||||
const IntegratorType& it,
|
||||
const vtkm::cont::ArrayHandle<vtkm::Vec<FieldType, 3>, PointStorage>& pts,
|
||||
vtkm::cont::ArrayHandle<vtkm::Id>& stepsTaken,
|
||||
const vtkm::Id& nSteps,
|
||||
const DeviceAdapter&)
|
||||
{
|
||||
vtkm::worklet::particleadvection::ParticleAdvectionWorklet<IntegratorType,
|
||||
FieldType,
|
||||
DeviceAdapter>
|
||||
worklet;
|
||||
|
||||
vtkm::cont::ArrayHandle<vtkm::Id> stepsTaken, status;
|
||||
vtkm::Id numSeeds = static_cast<vtkm::Id>(pts.GetNumberOfValues());
|
||||
//Allocate status and steps arrays.
|
||||
vtkm::cont::ArrayHandleConstant<vtkm::Id> init(0, numSeeds);
|
||||
stepsTaken.Allocate(numSeeds);
|
||||
vtkm::cont::DeviceAdapterAlgorithm<DeviceAdapter>::Copy(init, stepsTaken);
|
||||
worklet.Run(it, pts, nSteps, status, stepsTaken);
|
||||
|
||||
//Create output.
|
||||
ParticleAdvectionResult<FieldType> res(pts, status, stepsTaken);
|
||||
return res;
|
||||
}
|
||||
|
||||
template <typename IntegratorType,
|
||||
typename FieldType,
|
||||
typename PointStorage,
|
||||
|
@ -101,7 +101,7 @@ public:
|
||||
vtkm::Vec<FieldType, 3>& outpos) const
|
||||
{
|
||||
numSteps = (numSteps == 0) ? 1 : numSteps;
|
||||
FieldType totalTime = numSteps * this->StepLength;
|
||||
FieldType totalTime = static_cast<FieldType>(numSteps) * this->StepLength;
|
||||
FieldType timeFraction = totalTime * this->Tolerance;
|
||||
FieldType stepLength = this->StepLength / 2;
|
||||
vtkm::Vec<FieldType, 3> velocity;
|
||||
|
@ -121,9 +121,10 @@ vtkm::cont::DataSet CreateUniformDataSet(const vtkm::Bounds& bounds, const vtkm:
|
||||
vtkm::Vec<FieldType, 3> origin(static_cast<FieldType>(bounds.X.Min),
|
||||
static_cast<FieldType>(bounds.Y.Min),
|
||||
static_cast<FieldType>(bounds.Z.Min));
|
||||
vtkm::Vec<FieldType, 3> spacing(static_cast<FieldType>(bounds.X.Length() / (dims[0] - 1)),
|
||||
static_cast<FieldType>(bounds.Y.Length() / (dims[1] - 1)),
|
||||
static_cast<FieldType>(bounds.Z.Length() / (dims[2] - 1)));
|
||||
vtkm::Vec<FieldType, 3> spacing(
|
||||
static_cast<FieldType>(bounds.X.Length()) / static_cast<FieldType>((dims[0] - 1)),
|
||||
static_cast<FieldType>(bounds.Y.Length()) / static_cast<FieldType>((dims[1] - 1)),
|
||||
static_cast<FieldType>(bounds.Z.Length()) / static_cast<FieldType>((dims[2] - 1)));
|
||||
|
||||
vtkm::cont::DataSetBuilderUniform dataSetBuilder;
|
||||
vtkm::cont::DataSet ds = dataSetBuilder.Create(dims, origin, spacing);
|
||||
@ -136,23 +137,23 @@ vtkm::cont::DataSet CreateRectilinearDataSet(const vtkm::Bounds& bounds, const v
|
||||
vtkm::cont::DataSetBuilderRectilinear dataSetBuilder;
|
||||
std::vector<FieldType> xvals, yvals, zvals;
|
||||
|
||||
vtkm::Vec<FieldType, 3> spacing(static_cast<FieldType>(bounds.X.Length() / (dims[0] - 1)),
|
||||
static_cast<FieldType>(bounds.Y.Length() / (dims[1] - 1)),
|
||||
static_cast<FieldType>(bounds.Z.Length() / (dims[2] - 1)));
|
||||
xvals.resize(dims[0]);
|
||||
vtkm::Vec<FieldType, 3> spacing(
|
||||
static_cast<FieldType>(bounds.X.Length()) / static_cast<FieldType>((dims[0] - 1)),
|
||||
static_cast<FieldType>(bounds.Y.Length()) / static_cast<FieldType>((dims[1] - 1)),
|
||||
static_cast<FieldType>(bounds.Z.Length()) / static_cast<FieldType>((dims[2] - 1)));
|
||||
xvals.resize((size_t)dims[0]);
|
||||
xvals[0] = static_cast<FieldType>(bounds.X.Min);
|
||||
for (vtkm::Id i = 1; i < dims[0]; i++)
|
||||
for (size_t i = 1; i < (size_t)dims[0]; i++)
|
||||
xvals[i] = xvals[i - 1] + spacing[0];
|
||||
yvals.resize(dims[1]);
|
||||
|
||||
yvals.resize(dims[1]);
|
||||
yvals.resize((size_t)dims[1]);
|
||||
yvals[0] = static_cast<FieldType>(bounds.Y.Min);
|
||||
for (vtkm::Id i = 1; i < dims[1]; i++)
|
||||
for (size_t i = 1; i < (size_t)dims[1]; i++)
|
||||
yvals[i] = yvals[i - 1] + spacing[1];
|
||||
|
||||
zvals.resize(dims[2]);
|
||||
zvals.resize((size_t)dims[2]);
|
||||
zvals[0] = static_cast<FieldType>(bounds.Z.Min);
|
||||
for (vtkm::Id i = 1; i < dims[2]; i++)
|
||||
for (size_t i = 1; i < (size_t)dims[2]; i++)
|
||||
zvals[i] = zvals[i - 1] + spacing[2];
|
||||
|
||||
vtkm::cont::DataSet ds = dataSetBuilder.Create(xvals, yvals, zvals);
|
||||
@ -242,10 +243,10 @@ public:
|
||||
|
||||
VTKM_EXEC
|
||||
void operator()(vtkm::Vec<FieldType, 3>& pointIn,
|
||||
bool& validity,
|
||||
vtkm::worklet::particleadvection::ParticleStatus& status,
|
||||
vtkm::Vec<FieldType, 3>& pointOut) const
|
||||
{
|
||||
validity = integrator.Step(pointIn, pointOut);
|
||||
status = integrator.Step(pointIn, pointOut);
|
||||
}
|
||||
|
||||
private:
|
||||
@ -262,13 +263,14 @@ void ValidateIntegrator(const IntegratorType& integrator,
|
||||
typedef VTKM_DEFAULT_DEVICE_ADAPTER_TAG DeviceAdapter;
|
||||
typedef TestIntegratorWorklet<FieldType, IntegratorType> IntegratorTester;
|
||||
typedef vtkm::worklet::DispatcherMapField<IntegratorTester> IntegratorTesterDispatcher;
|
||||
typedef vtkm::worklet::particleadvection::ParticleStatus Status;
|
||||
IntegratorTester integratorTester(integrator);
|
||||
IntegratorTesterDispatcher integratorTesterDispatcher(integratorTester);
|
||||
vtkm::cont::ArrayHandle<vtkm::Vec<FieldType, 3>> pointsHandle =
|
||||
vtkm::cont::make_ArrayHandle(pointIns);
|
||||
vtkm::Id numPoints = pointsHandle.GetNumberOfValues();
|
||||
pointsHandle.PrepareForInput(DeviceAdapter());
|
||||
vtkm::cont::ArrayHandle<bool> stepStatus;
|
||||
vtkm::cont::ArrayHandle<Status> stepStatus;
|
||||
vtkm::cont::ArrayHandle<vtkm::Vec<FieldType, 3>> stepResults;
|
||||
stepStatus.PrepareForOutput(numPoints, DeviceAdapter());
|
||||
stepResults.PrepareForOutput(numPoints, DeviceAdapter());
|
||||
@ -277,10 +279,13 @@ void ValidateIntegrator(const IntegratorType& integrator,
|
||||
auto resultsPortal = stepResults.GetPortalConstControl();
|
||||
for (vtkm::Id index = 0; index < numPoints; index++)
|
||||
{
|
||||
bool status = statusPortal.Get(index);
|
||||
Status status = statusPortal.Get(index);
|
||||
vtkm::Vec<FieldType, 3> result = resultsPortal.Get(index);
|
||||
VTKM_TEST_ASSERT(status, "Error in evaluator for " + msg);
|
||||
VTKM_TEST_ASSERT(result == expStepResults[index], "Error in evaluator result for " + msg);
|
||||
VTKM_TEST_ASSERT(status == Status::STATUS_OK || status == Status::TERMINATED ||
|
||||
status == Status::EXITED_SPATIAL_BOUNDARY,
|
||||
"Error in evaluator for " + msg);
|
||||
VTKM_TEST_ASSERT(result == expStepResults[(size_t)index],
|
||||
"Error in evaluator result for " + msg);
|
||||
}
|
||||
pointsHandle.ReleaseResources();
|
||||
stepStatus.ReleaseResources();
|
||||
|
Loading…
Reference in New Issue
Block a user