mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-08 21:33:55 +00:00
Addressing Ken's review suggestions
1. Removing `cswap` which caused confusion in understanding stuff. 2. Fixing 64 bit coords issue for Lagrangian Strucutres Test
This commit is contained in:
parent
1925e356b2
commit
c9bc005f83
@ -17,7 +17,39 @@
|
||||
|
||||
namespace auxiliary
|
||||
{
|
||||
vtkm::FloatDefault vecData[200 * 3] = {
|
||||
enum class Option
|
||||
{
|
||||
_2D = 0,
|
||||
_3D
|
||||
};
|
||||
|
||||
void ValidateLCSFilterResult(const vtkm::cont::ArrayHandle<vtkm::FloatDefault>& vtkmOutput,
|
||||
const vtkm::cont::ArrayHandle<vtkm::FloatDefault>& visitOutput,
|
||||
const vtkm::cont::ArrayHandle<vtkm::FloatDefault>& expDiff)
|
||||
{
|
||||
VTKM_TEST_ASSERT(vtkmOutput.GetNumberOfValues() == visitOutput.GetNumberOfValues(),
|
||||
"Wrong number of values");
|
||||
|
||||
const vtkm::FloatDefault tolerance = 1.0e-05;
|
||||
|
||||
auto vtkmPortal = vtkmOutput.GetPortalConstControl();
|
||||
auto visitPortal = visitOutput.GetPortalConstControl();
|
||||
auto diffPortal = expDiff.GetPortalConstControl();
|
||||
|
||||
for (vtkm::Id index = 0; index < vtkmOutput.GetNumberOfValues(); index++)
|
||||
{
|
||||
auto vtkm = vtkmPortal.Get(index);
|
||||
auto visit = visitPortal.Get(index);
|
||||
auto exp = diffPortal.Get(index);
|
||||
auto diff = vtkm::Abs(vtkm - visit);
|
||||
std::stringstream message;
|
||||
message << "Calculated o/p is not correct, \n"
|
||||
<< "VTKM : " << vtkm << ", VISIT : " << visit << ", RES : " << vtkm::Abs(diff - exp);
|
||||
VTKM_TEST_ASSERT(vtkm::Abs(diff - exp) <= tolerance || diff < tolerance, message.str());
|
||||
}
|
||||
}
|
||||
|
||||
vtkm::FloatDefault vecData2D[200 * 3] = {
|
||||
0.000000f, 0.000000f, 0.000000f, -0.032369f, 0.000000f, 0.000000f, -0.061107f, 0.000000f,
|
||||
0.000000f, -0.083145f, 0.000000f, 0.000000f, -0.096136f, 0.000000f, 0.000000f, -0.098712f,
|
||||
0.000000f, 0.000000f, -0.090620f, 0.000000f, 0.000000f, -0.072751f, -0.000000f, 0.000000f,
|
||||
@ -95,7 +127,57 @@ vtkm::FloatDefault vecData[200 * 3] = {
|
||||
0.000000f, 0.000000f, -0.032369f, 0.000000f, 0.000000f, -0.000000f, 0.000000f, 0.000000f
|
||||
};
|
||||
|
||||
vtkm::FloatDefault visitData[200] = {
|
||||
vtkm::FloatDefault vecData3D[125 * 3] = {
|
||||
-1.359000f, -1.359000f, -1.359000f, -1.359000f, -0.136603f, -0.056133f, -1.359000f, -0.300565f,
|
||||
-1.704760f, -1.359000f, -1.143790f, -0.278636f, -1.359000f, 0.513701f, -0.945288f, -0.056133f,
|
||||
-1.359000f, -0.136603f, -0.056133f, -0.136603f, 1.166260f, -0.056133f, -0.300565f, -0.482370f,
|
||||
-0.056133f, -1.143790f, 0.943757f, -0.056133f, 0.513701f, 0.277104f, -1.704760f, -1.359000f,
|
||||
-0.300565f, -1.704760f, -0.136603f, 1.002290f, -1.704760f, -0.300565f, -0.646332f, -1.704760f,
|
||||
-1.143790f, 0.779793f, -1.704760f, 0.513701f, 0.113142f, -0.278636f, -1.359000f, -1.143790f,
|
||||
-0.278636f, -0.136603f, 0.159074f, -0.278636f, -0.300565f, -1.489550f, -0.278636f, -1.143790f,
|
||||
-0.063429f, -0.278636f, 0.513701f, -0.730080f, -0.945288f, -1.359000f, 0.513701f, -0.945288f,
|
||||
-0.136603f, 1.816560f, -0.945288f, -0.300565f, 0.167933f, -0.945288f, -1.143790f, 1.594060f,
|
||||
-0.945288f, 0.513701f, 0.927407f, -0.136603f, -0.056133f, -1.359000f, -0.136603f, 1.166260f,
|
||||
-0.056133f, -0.136603f, 1.002290f, -1.704760f, -0.136603f, 0.159074f, -0.278636f, -0.136603f,
|
||||
1.816560f, -0.945288f, 1.166260f, -0.056133f, -0.136603f, 1.166260f, 1.166260f, 1.166260f,
|
||||
1.166260f, 1.002290f, -0.482370f, 1.166260f, 0.159074f, 0.943757f, 1.166260f, 1.816560f,
|
||||
0.277104f, -0.482370f, -0.056133f, -0.300565f, -0.482370f, 1.166260f, 1.002290f, -0.482370f,
|
||||
1.002290f, -0.646332f, -0.482370f, 0.159074f, 0.779793f, -0.482370f, 1.816560f, 0.113142f,
|
||||
0.943757f, -0.056133f, -1.143790f, 0.943757f, 1.166260f, 0.159074f, 0.943757f, 1.002290f,
|
||||
-1.489550f, 0.943757f, 0.159074f, -0.063429f, 0.943757f, 1.816560f, -0.730080f, 0.277104f,
|
||||
-0.056133f, 0.513701f, 0.277104f, 1.166260f, 1.816560f, 0.277104f, 1.002290f, 0.167933f,
|
||||
0.277104f, 0.159074f, 1.594060f, 0.277104f, 1.816560f, 0.927407f, -0.300565f, -1.704760f,
|
||||
-1.359000f, -0.300565f, -0.482370f, -0.056133f, -0.300565f, -0.646332f, -1.704760f, -0.300565f,
|
||||
-1.489550f, -0.278636f, -0.300565f, 0.167933f, -0.945288f, 1.002290f, -1.704760f, -0.136603f,
|
||||
1.002290f, -0.482370f, 1.166260f, 1.002290f, -0.646332f, -0.482370f, 1.002290f, -1.489550f,
|
||||
0.943757f, 1.002290f, 0.167933f, 0.277104f, -0.646332f, -1.704760f, -0.300565f, -0.646332f,
|
||||
-0.482370f, 1.002290f, -0.646332f, -0.646332f, -0.646332f, -0.646332f, -1.489550f, 0.779793f,
|
||||
-0.646332f, 0.167933f, 0.113142f, 0.779792f, -1.704760f, -1.143790f, 0.779792f, -0.482370f,
|
||||
0.159074f, 0.779792f, -0.646332f, -1.489550f, 0.779792f, -1.489550f, -0.063429f, 0.779792f,
|
||||
0.167933f, -0.730080f, 0.113142f, -1.704760f, 0.513701f, 0.113142f, -0.482370f, 1.816560f,
|
||||
0.113142f, -0.646332f, 0.167933f, 0.113142f, -1.489550f, 1.594060f, 0.113142f, 0.167933f,
|
||||
0.927407f, -1.143790f, -0.278636f, -1.359000f, -1.143790f, 0.943757f, -0.056133f, -1.143790f,
|
||||
0.779793f, -1.704760f, -1.143790f, -0.063429f, -0.278636f, -1.143790f, 1.594060f, -0.945288f,
|
||||
0.159074f, -0.278636f, -0.136603f, 0.159074f, 0.943757f, 1.166260f, 0.159074f, 0.779793f,
|
||||
-0.482370f, 0.159074f, -0.063429f, 0.943757f, 0.159074f, 1.594060f, 0.277104f, -1.489550f,
|
||||
-0.278636f, -0.300565f, -1.489550f, 0.943757f, 1.002290f, -1.489550f, 0.779793f, -0.646332f,
|
||||
-1.489550f, -0.063429f, 0.779793f, -1.489550f, 1.594060f, 0.113142f, -0.063428f, -0.278636f,
|
||||
-1.143790f, -0.063428f, 0.943757f, 0.159074f, -0.063428f, 0.779793f, -1.489550f, -0.063428f,
|
||||
-0.063429f, -0.063429f, -0.063428f, 1.594060f, -0.730080f, -0.730080f, -0.278636f, 0.513701f,
|
||||
-0.730080f, 0.943757f, 1.816560f, -0.730080f, 0.779793f, 0.167933f, -0.730080f, -0.063429f,
|
||||
1.594060f, -0.730080f, 1.594060f, 0.927407f, 0.513701f, -0.945288f, -1.359000f, 0.513701f,
|
||||
0.277104f, -0.056133f, 0.513701f, 0.113142f, -1.704760f, 0.513701f, -0.730080f, -0.278636f,
|
||||
0.513701f, 0.927407f, -0.945288f, 1.816560f, -0.945288f, -0.136603f, 1.816560f, 0.277104f,
|
||||
1.166260f, 1.816560f, 0.113142f, -0.482370f, 1.816560f, -0.730080f, 0.943757f, 1.816560f,
|
||||
0.927407f, 0.277104f, 0.167933f, -0.945288f, -0.300565f, 0.167933f, 0.277104f, 1.002290f,
|
||||
0.167933f, 0.113142f, -0.646332f, 0.167933f, -0.730080f, 0.779793f, 0.167933f, 0.927407f,
|
||||
0.113142f, 1.594060f, -0.945288f, -1.143790f, 1.594060f, 0.277104f, 0.159074f, 1.594060f,
|
||||
0.113142f, -1.489550f, 1.594060f, -0.730080f, -0.063429f, 1.594060f, 0.927407f, -0.730080f,
|
||||
0.927407f, -0.945288f, 0.513701f, 0.927407f, 0.277104f, 1.816560f, 0.927407f, 0.113142f,
|
||||
0.167933f, 0.927407f, -0.730080f, 1.594060f, 0.927407f, 0.927407f, 0.927407f
|
||||
};
|
||||
|
||||
vtkm::FloatDefault visitData2D[200] = {
|
||||
0.175776f, 0.193068f, 0.184354f, 0.162709f, 0.156567f, 0.165079f, 0.183523f, 0.176101f, 0.182635f,
|
||||
0.150985f, 0.127186f, 0.173021f, 0.173493f, 0.160812f, 0.124465f, 0.110838f, 0.135879f, 0.184853f,
|
||||
0.193068f, 0.000007f, 0.157161f, 0.144306f, 0.108385f, 0.086895f, 0.073086f, 0.092054f, 0.109178f,
|
||||
@ -121,7 +203,24 @@ vtkm::FloatDefault visitData[200] = {
|
||||
0.161986f, 0.000001f
|
||||
};
|
||||
|
||||
vtkm::FloatDefault diffData[200] = {
|
||||
vtkm::FloatDefault visitData3D[125] = {
|
||||
0.000000f, 0.246171f, 0.026549f, 0.051611f, 0.165443f, 0.246171f, 0.071890f, 0.157521f, 0.224824f,
|
||||
0.165498f, 0.026549f, 0.177905f, 0.082937f, 0.107466f, 0.149497f, 0.051611f, 0.209922f, 0.057065f,
|
||||
0.176006f, 0.095284f, 0.165443f, 0.093980f, 0.106193f, 0.132160f, 0.155382f, 0.246171f, 0.071890f,
|
||||
0.177905f, 0.209922f, 0.093980f, 0.071890f, 0.035283f, 0.059712f, 0.068458f, 0.091744f, 0.157521f,
|
||||
0.059712f, 0.031083f, 0.161508f, 0.145593f, 0.224824f, 0.068458f, 0.076021f, 0.112219f, 0.054363f,
|
||||
0.165498f, 0.091744f, 0.074956f, 0.052716f, 0.000000f, 0.026549f, 0.157521f, 0.082937f, 0.057065f,
|
||||
0.106193f, 0.177905f, 0.059712f, 0.031083f, 0.076021f, 0.074956f, 0.082937f, 0.031083f, 0.144075f,
|
||||
0.013539f, 0.036500f, 0.107466f, 0.161508f, 0.013539f, 0.074017f, 0.199354f, 0.149497f, 0.145593f,
|
||||
0.036500f, 0.130521f, 0.126838f, 0.051611f, 0.224824f, 0.107466f, 0.176006f, 0.132160f, 0.209922f,
|
||||
0.068458f, 0.161508f, 0.112219f, 0.052716f, 0.057065f, 0.076021f, 0.013539f, 0.074018f, 0.130521f,
|
||||
0.176006f, 0.112219f, 0.074017f, 0.156035f, 0.116269f, 0.095284f, 0.054363f, 0.199354f, 0.116269f,
|
||||
0.092932f, 0.165443f, 0.165498f, 0.149497f, 0.095284f, 0.155382f, 0.093980f, 0.091744f, 0.145593f,
|
||||
0.054363f, 0.000000f, 0.106193f, 0.074956f, 0.036500f, 0.199354f, 0.126838f, 0.132161f, 0.052716f,
|
||||
0.130521f, 0.116269f, 0.092932f, 0.155382f, 0.000000f, 0.126838f, 0.092932f, 0.000000f
|
||||
};
|
||||
|
||||
vtkm::FloatDefault diffData2D[200] = {
|
||||
0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.002152f, 0.003656f, 0.021269f,
|
||||
0.020149f, 0.043948f, 0.011656f, 0.006264f, 0.020559f, 0.040614f, 0.045728f, 0.026829f, 0.000501f,
|
||||
0.000000f, 0.175769f, 0.000001f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
|
||||
@ -147,65 +246,91 @@ vtkm::FloatDefault diffData[200] = {
|
||||
0.040531f, 0.173409f
|
||||
};
|
||||
|
||||
using Scalar = vtkm::FloatDefault;
|
||||
using Field = vtkm::Vec<Scalar, 3>;
|
||||
vtkm::FloatDefault diffData3D[125] = {
|
||||
0.000018f, 0.000000f, 0.000000f, 0.000000f, 0.000063f, 0.000000f, 0.000000f, 0.000001f, 0.000000f,
|
||||
0.000074f, 0.000000f, 0.000001f, 0.000001f, 0.000010f, 0.000204f, 0.000000f, 0.000006f, 0.002958f,
|
||||
0.019681f, 0.000105f, 0.000067f, 0.001084f, 0.079343f, 0.132158f, 0.155378f, 0.000000f, 0.000000f,
|
||||
0.000001f, 0.000006f, 0.001084f, 0.000000f, 0.027930f, 0.000000f, 0.000000f, 0.000006f, 0.000000f,
|
||||
0.000000f, 0.000000f, 0.000004f, 0.000027f, 0.000000f, 0.000000f, 0.000001f, 0.000000f, 0.000025f,
|
||||
0.000078f, 0.000014f, 0.016555f, 0.040407f, 0.000007f, 0.000000f, 0.000001f, 0.000001f, 0.002958f,
|
||||
0.015710f, 0.000001f, 0.000000f, 0.000000f, 0.000001f, 0.016554f, 0.000001f, 0.000000f, 0.000000f,
|
||||
0.000015f, 0.000057f, 0.000010f, 0.000003f, 0.000027f, 0.000039f, 0.000006f, 0.000228f, 0.000023f,
|
||||
0.000098f, 0.000084f, 0.000015f, 0.000000f, 0.000000f, 0.000008f, 0.000015f, 0.001319f, 0.000006f,
|
||||
0.000000f, 0.000004f, 0.000000f, 0.000029f, 0.002958f, 0.000001f, 0.000027f, 0.000090f, 0.000207f,
|
||||
0.019681f, 0.000000f, 0.000169f, 0.000002f, 0.000043f, 0.000112f, 0.000020f, 0.000011f, 0.000015f,
|
||||
0.000001f, 0.000067f, 0.000069f, 0.000160f, 0.000088f, 0.000227f, 0.001084f, 0.000003f, 0.000030f,
|
||||
0.000028f, 0.000001f, 0.079343f, 0.016555f, 0.000104f, 0.000011f, 0.000030f, 0.132159f, 0.040438f,
|
||||
0.000389f, 0.000078f, 0.000003f, 0.155380f, 0.000001f, 0.000060f, 0.000001f, 0.000001f
|
||||
};
|
||||
|
||||
void ValidateLCSFilterResult(const vtkm::cont::ArrayHandle<Scalar>& vtkmOutput,
|
||||
const vtkm::cont::ArrayHandle<Scalar>& visitOutput,
|
||||
const vtkm::cont::ArrayHandle<Scalar>& expDiff)
|
||||
void PopulateData(std::vector<vtkm::Vec3f>& fieldVec,
|
||||
std::vector<vtkm::FloatDefault>& visitVec,
|
||||
std::vector<vtkm::FloatDefault>& diffVec,
|
||||
const Option option)
|
||||
{
|
||||
VTKM_TEST_ASSERT(vtkmOutput.GetNumberOfValues() == 200, "Wrong number of values");
|
||||
|
||||
auto vtkmPortal = vtkmOutput.GetPortalConstControl();
|
||||
auto visitPortal = visitOutput.GetPortalConstControl();
|
||||
auto diffPortal = expDiff.GetPortalConstControl();
|
||||
|
||||
for (vtkm::Id index = 0; index < 200; index++)
|
||||
switch (option)
|
||||
{
|
||||
auto vtkm = vtkmPortal.Get(index);
|
||||
auto visit = visitPortal.Get(index);
|
||||
auto diff = vtkm::Abs(vtkm - visit);
|
||||
auto exp = diffPortal.Get(index);
|
||||
VTKM_TEST_ASSERT(diff <= (vtkm::Abs(exp) + vtkm::Epsilon<Scalar>()),
|
||||
"Calculated o/p is not as expected");
|
||||
case Option::_2D:
|
||||
{
|
||||
vtkm::Id elements = 200;
|
||||
for (vtkm::Id index = 0; index < elements; index++)
|
||||
{
|
||||
vtkm::Id flatidx = index * 3;
|
||||
vtkm::Vec3f field;
|
||||
field[0] = auxiliary::vecData2D[flatidx];
|
||||
field[1] = auxiliary::vecData2D[++flatidx];
|
||||
field[2] = auxiliary::vecData2D[++flatidx];
|
||||
fieldVec.push_back(field);
|
||||
vtkm::FloatDefault diff = auxiliary::diffData2D[index];
|
||||
diffVec.push_back(diff);
|
||||
vtkm::FloatDefault visit = auxiliary::visitData2D[index];
|
||||
visitVec.push_back(visit);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Option::_3D:
|
||||
{
|
||||
vtkm::Id elements = 125;
|
||||
for (vtkm::Id index = 0; index < elements; index++)
|
||||
{
|
||||
vtkm::Id flatidx = index * 3;
|
||||
vtkm::Vec3f field;
|
||||
field[0] = auxiliary::vecData3D[flatidx];
|
||||
field[1] = auxiliary::vecData3D[++flatidx];
|
||||
field[2] = auxiliary::vecData3D[++flatidx];
|
||||
fieldVec.push_back(field);
|
||||
vtkm::FloatDefault diff = auxiliary::diffData3D[index];
|
||||
diffVec.push_back(diff);
|
||||
vtkm::FloatDefault visit = auxiliary::visitData3D[index];
|
||||
visitVec.push_back(visit);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TestLagrangianStructures()
|
||||
void Test2DLCS()
|
||||
{
|
||||
using Scalar = vtkm::FloatDefault;
|
||||
using Field = vtkm::Vec<Scalar, 3>;
|
||||
|
||||
/*Construct dataset and vector field*/
|
||||
vtkm::cont::DataSet inputData;
|
||||
vtkm::Id2 dims(20, 10);
|
||||
vtkm::Vec<Scalar, 2> origin(0.0f, 0.0f);
|
||||
vtkm::Vec<Scalar, 2> spacing;
|
||||
spacing[0] = 2.0f / static_cast<Scalar>(dims[0] - 1);
|
||||
spacing[1] = 1.0f / static_cast<Scalar>(dims[1] - 1);
|
||||
vtkm::Vec2f origin(0.0f, 0.0f);
|
||||
vtkm::Vec2f spacing;
|
||||
spacing[0] = 2.0f / static_cast<vtkm::FloatDefault>(dims[0] - 1);
|
||||
spacing[1] = 1.0f / static_cast<vtkm::FloatDefault>(dims[1] - 1);
|
||||
vtkm::cont::DataSetBuilderUniform dataBuilder;
|
||||
inputData = dataBuilder.Create(dims, origin, spacing);
|
||||
|
||||
std::vector<Scalar> diffVec;
|
||||
std::vector<Scalar> visitVec;
|
||||
std::vector<Field> fieldVec;
|
||||
for (vtkm::Id index = 0; index < 200; index++)
|
||||
{
|
||||
vtkm::Id flatidx = index * 3;
|
||||
Field field;
|
||||
field[0] = auxiliary::vecData[flatidx];
|
||||
field[1] = auxiliary::vecData[++flatidx];
|
||||
field[2] = auxiliary::vecData[++flatidx];
|
||||
fieldVec.push_back(field);
|
||||
Scalar diff = auxiliary::diffData[index];
|
||||
diffVec.push_back(diff);
|
||||
Scalar visit = auxiliary::visitData[index];
|
||||
visitVec.push_back(visit);
|
||||
}
|
||||
vtkm::cont::ArrayHandle<Scalar> diffHandle = vtkm::cont::make_ArrayHandle(diffVec);
|
||||
vtkm::cont::ArrayHandle<Scalar> visitHandle = vtkm::cont::make_ArrayHandle(visitVec);
|
||||
vtkm::cont::ArrayHandle<Field> fieldHandle = vtkm::cont::make_ArrayHandle(fieldVec);
|
||||
std::vector<vtkm::FloatDefault> diffVec;
|
||||
std::vector<vtkm::FloatDefault> visitVec;
|
||||
std::vector<vtkm::Vec3f> fieldVec;
|
||||
|
||||
auxiliary::PopulateData(fieldVec, visitVec, diffVec, auxiliary::Option::_2D);
|
||||
|
||||
vtkm::cont::ArrayHandle<vtkm::FloatDefault> diffHandle = vtkm::cont::make_ArrayHandle(diffVec);
|
||||
vtkm::cont::ArrayHandle<vtkm::FloatDefault> visitHandle = vtkm::cont::make_ArrayHandle(visitVec);
|
||||
vtkm::cont::ArrayHandle<vtkm::Vec3f> fieldHandle = vtkm::cont::make_ArrayHandle(fieldVec);
|
||||
vtkm::cont::DataSetFieldAdd fieldAdder;
|
||||
fieldAdder.AddPointField(inputData, "velocity", fieldHandle);
|
||||
|
||||
@ -213,15 +338,57 @@ void TestLagrangianStructures()
|
||||
lagrangianStructures.SetStepSize(0.025f);
|
||||
lagrangianStructures.SetNumberOfSteps(500);
|
||||
lagrangianStructures.SetAdvectionTime(0.025f * 500);
|
||||
lagrangianStructures.SetAdvectionTime(0.025f * 500);
|
||||
lagrangianStructures.SetActiveField("velocity");
|
||||
vtkm::cont::DataSet outputData = lagrangianStructures.Execute(inputData);
|
||||
|
||||
vtkm::cont::ArrayHandle<Scalar> FTLEField;
|
||||
vtkm::cont::ArrayHandle<vtkm::FloatDefault> FTLEField;
|
||||
outputData.GetField("FTLE").GetData().CopyTo(FTLEField);
|
||||
auxiliary::ValidateLCSFilterResult(FTLEField, visitHandle, diffHandle);
|
||||
}
|
||||
|
||||
void Test3DLCS()
|
||||
{
|
||||
/*Construct dataset and vector field*/
|
||||
vtkm::cont::DataSet inputData;
|
||||
vtkm::Id3 dims(5, 5, 5);
|
||||
vtkm::Vec3f origin(0.0f, 0.0f, 0.0f);
|
||||
vtkm::Vec3f spacing;
|
||||
spacing[0] = 10.0f / static_cast<vtkm::FloatDefault>(dims[0] - 1);
|
||||
spacing[1] = 10.0f / static_cast<vtkm::FloatDefault>(dims[1] - 1);
|
||||
spacing[2] = 10.0f / static_cast<vtkm::FloatDefault>(dims[2] - 1);
|
||||
vtkm::cont::DataSetBuilderUniform dataBuilder;
|
||||
inputData = dataBuilder.Create(dims, origin, spacing);
|
||||
|
||||
std::vector<vtkm::FloatDefault> diffVec;
|
||||
std::vector<vtkm::FloatDefault> visitVec;
|
||||
std::vector<vtkm::Vec3f> fieldVec;
|
||||
|
||||
auxiliary::PopulateData(fieldVec, visitVec, diffVec, auxiliary::Option::_3D);
|
||||
|
||||
vtkm::cont::ArrayHandle<vtkm::FloatDefault> diffHandle = vtkm::cont::make_ArrayHandle(diffVec);
|
||||
vtkm::cont::ArrayHandle<vtkm::FloatDefault> visitHandle = vtkm::cont::make_ArrayHandle(visitVec);
|
||||
vtkm::cont::ArrayHandle<vtkm::Vec3f> fieldHandle = vtkm::cont::make_ArrayHandle(fieldVec);
|
||||
vtkm::cont::DataSetFieldAdd fieldAdder;
|
||||
fieldAdder.AddPointField(inputData, "velocity", fieldHandle);
|
||||
|
||||
vtkm::filter::LagrangianStructures lagrangianStructures;
|
||||
lagrangianStructures.SetStepSize(0.01f);
|
||||
lagrangianStructures.SetNumberOfSteps(500);
|
||||
lagrangianStructures.SetAdvectionTime(0.01f * 500);
|
||||
lagrangianStructures.SetActiveField("velocity");
|
||||
vtkm::cont::DataSet outputData = lagrangianStructures.Execute(inputData);
|
||||
|
||||
vtkm::cont::ArrayHandle<vtkm::FloatDefault> FTLEField;
|
||||
outputData.GetField("FTLE").GetData().CopyTo(FTLEField);
|
||||
auxiliary::ValidateLCSFilterResult(FTLEField, visitHandle, diffHandle);
|
||||
}
|
||||
|
||||
void TestLagrangianStructures()
|
||||
{
|
||||
Test2DLCS();
|
||||
Test3DLCS();
|
||||
}
|
||||
|
||||
int UnitTestLagrangianStructuresFilter(int argc, char* argv[])
|
||||
{
|
||||
return vtkm::cont::testing::Testing::Run(TestLagrangianStructures, argc, argv);
|
||||
|
@ -120,7 +120,6 @@ VTKM_EXEC_CONT void Jacobi(vtkm::Matrix<T, 2, 2> tensor, vtkm::Vec<T, 2>& eigen)
|
||||
// Assume a symetric matrix
|
||||
// a b
|
||||
// b c
|
||||
|
||||
T a = j1[0];
|
||||
T b = j1[1];
|
||||
T c = j2[1];
|
||||
@ -129,18 +128,11 @@ VTKM_EXEC_CONT void Jacobi(vtkm::Matrix<T, 2, 2> tensor, vtkm::Vec<T, 2>& eigen)
|
||||
T det = a * c - b * b;
|
||||
T sqrtr = vtkm::Sqrt(trace * trace - det);
|
||||
|
||||
// Order the largest first to match VTK
|
||||
// Arrange eigen values from largest to smallest.
|
||||
eigen[0] = trace + sqrtr;
|
||||
eigen[1] = trace - sqrtr;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
VTKM_EXEC_CONT inline void cswap(T& v1, T& v2)
|
||||
{
|
||||
if (v2 > v1)
|
||||
vtkm::Swap(v1, v2);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
VTKM_EXEC_CONT void Jacobi(vtkm::Matrix<T, 3, 3> tensor, vtkm::Vec<T, 3>& eigen)
|
||||
{
|
||||
@ -189,14 +181,17 @@ VTKM_EXEC_CONT void Jacobi(vtkm::Matrix<T, 3, 3> tensor, vtkm::Vec<T, 3>& eigen)
|
||||
sinphi = vtkm::Sin(phi);
|
||||
cosphi = vtkm::Cos(phi);
|
||||
|
||||
// Sorted in decreasing order.
|
||||
T w0 = x + 2.0f * sqrtr * cosphi;
|
||||
T w1 = x - sqrtr * (cosphi - sqrt3 * sinphi);
|
||||
T w2 = x - sqrtr * (cosphi + sqrt3 * sinphi);
|
||||
|
||||
cswap(w0, w1);
|
||||
cswap(w0, w2);
|
||||
cswap(w1, w2);
|
||||
// Arrange eigen values from largest to smallest.
|
||||
if (w1 > w0)
|
||||
vtkm::Swap(w0, w1);
|
||||
if (w2 > w0)
|
||||
vtkm::Swap(w0, w2);
|
||||
if (w2 > w1)
|
||||
vtkm::Swap(w1, w2);
|
||||
|
||||
eigen[0] = w0;
|
||||
eigen[1] = w1;
|
||||
|
Loading…
Reference in New Issue
Block a user