mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-20 11:05:44 +00:00
work in progress for filter tables
This commit is contained in:
parent
9c1e9574fa
commit
f785fcb18f
@ -28,19 +28,50 @@
|
|||||||
namespace vtkm {
|
namespace vtkm {
|
||||||
namespace worklet {
|
namespace worklet {
|
||||||
|
|
||||||
|
namespace internal{
|
||||||
|
|
||||||
|
const vtkm::Float64 hm4_44[9] = {
|
||||||
|
0.037828455507264,
|
||||||
|
-0.023849465019557,
|
||||||
|
-0.110624404418437,
|
||||||
|
0.377402855612831,
|
||||||
|
0.852698679008894,
|
||||||
|
0.377402855612831,
|
||||||
|
-0.110624404418437,
|
||||||
|
-0.023849465019557,
|
||||||
|
0.037828455507264
|
||||||
|
};
|
||||||
|
|
||||||
|
const vtkm::Float64 h4[9] = {
|
||||||
|
0.0,
|
||||||
|
-0.064538882628697,
|
||||||
|
-0.040689417609164,
|
||||||
|
0.418092273221617,
|
||||||
|
0.788485616405583,
|
||||||
|
0.418092273221617,
|
||||||
|
-0.0406894176091641,
|
||||||
|
-0.0645388826286971,
|
||||||
|
0.0
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
class Wavelets
|
class Wavelets
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// helper worklet
|
// helper worklet
|
||||||
class ForwardTransform: public vtkm::worklet::WorkletMapField
|
class ForwardTransform: public vtkm::worklet::WorkletMapField
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef void ControlSignature(WholeArrayIn<ScalarAll>, // sigIn
|
typedef void ControlSignature(WholeArrayIn<ScalarAll>, // sigIn
|
||||||
FieldOut<ScalarAll>, // cA
|
WholeArrayIn<vtkm::Float64>, // lowFilter
|
||||||
FieldOut<ScalarAll>); // cD
|
WholeArrayIn<vtkm::Float64>, // highFilter
|
||||||
typedef void ExecutionSignature(_1, _2, _3, WorkIndex);
|
FieldOut<ScalarAll>); // cA in even indices, cD in odd indices
|
||||||
|
typedef void ExecutionSignature(_1, _2, _3, _4, WorkIndex);
|
||||||
typedef _1 InputDomain;
|
typedef _1 InputDomain;
|
||||||
|
|
||||||
|
typedef vtkm::Float64 FLOAT;
|
||||||
|
|
||||||
// ForwardTransform constructor
|
// ForwardTransform constructor
|
||||||
VTKM_CONT_EXPORT
|
VTKM_CONT_EXPORT
|
||||||
ForwardTransform()
|
ForwardTransform()
|
||||||
@ -51,16 +82,25 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template <typename T, typename ArrayPortalType>
|
template <typename InputSignalPortalType,
|
||||||
|
typename FilterPortalType,
|
||||||
|
typename OutputCoeffType>
|
||||||
VTKM_EXEC_EXPORT
|
VTKM_EXEC_EXPORT
|
||||||
void operator()(const ArrayPortalType &signalIn,
|
void operator()(const InputSignalPortalType &signalIn,
|
||||||
T &coeffApproximation,
|
const FilterPortalType &lowFilter,
|
||||||
T &coeffDetail,
|
const FilterPortalType &highFilter,
|
||||||
|
OutputCoeffType &coeffOut,
|
||||||
const vtkm::Id &workIndex) const
|
const vtkm::Id &workIndex) const
|
||||||
{
|
{
|
||||||
vtkm::Float64 tmp = static_cast<vtkm::Float64>(signalIn.Get(workIndex));
|
FLOAT tmp = static_cast<FLOAT>(signalIn.Get(workIndex));
|
||||||
coeffApproximation = static_cast<T>( tmp / 2.0 );
|
if( workIndex % 2 == 0 ) // work on cA, approximate coeffs
|
||||||
coeffDetail = static_cast<T>( tmp * 2.0 );
|
{
|
||||||
|
coeffOut = static_cast<OutputCoeffType>( tmpi + lowFilter.Get(0) );
|
||||||
|
}
|
||||||
|
else // work on cD, detail coeffs
|
||||||
|
{
|
||||||
|
coeffOut = static_cast<OutputCoeffType>( tmp + highFilter.Get(0) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -33,26 +33,28 @@ void TestWavelets()
|
|||||||
vtkm::Id arraySize = 10;
|
vtkm::Id arraySize = 10;
|
||||||
std::vector<vtkm::Float32> tmpVector;
|
std::vector<vtkm::Float32> tmpVector;
|
||||||
for( vtkm::Id i = 0; i < arraySize; i++ )
|
for( vtkm::Id i = 0; i < arraySize; i++ )
|
||||||
tmpVector.push_back(static_cast<vtkm::Float32>(i*2));
|
tmpVector.push_back(static_cast<vtkm::Float32>(i));
|
||||||
|
|
||||||
|
|
||||||
vtkm::cont::ArrayHandle<vtkm::Float32> input1DArray =
|
vtkm::cont::ArrayHandle<vtkm::Float32> input1DArray =
|
||||||
vtkm::cont::make_ArrayHandle(tmpVector);
|
vtkm::cont::make_ArrayHandle(tmpVector);
|
||||||
vtkm::cont::ArrayHandle<vtkm::Float32> outputArray1;
|
vtkm::cont::ArrayHandle<vtkm::Float32> outputArray1;
|
||||||
|
/*
|
||||||
outputArray1.Allocate( arraySize );
|
outputArray1.Allocate( arraySize );
|
||||||
vtkm::cont::ArrayHandle<vtkm::Float32> outputArray2;
|
vtkm::cont::ArrayHandle<vtkm::Float32> outputArray2;
|
||||||
outputArray2.Allocate( arraySize );
|
outputArray2.Allocate( arraySize );
|
||||||
|
*/
|
||||||
|
|
||||||
vtkm::worklet::Wavelets::ForwardTransform forwardTransform;
|
vtkm::worklet::Wavelets::ForwardTransform forwardTransform;
|
||||||
vtkm::worklet::DispatcherMapField<vtkm::worklet::Wavelets::ForwardTransform> dispatcher(forwardTransform);
|
vtkm::worklet::DispatcherMapField<vtkm::worklet::Wavelets::ForwardTransform> dispatcher(forwardTransform);
|
||||||
dispatcher.Invoke(input1DArray, outputArray1, outputArray2);
|
dispatcher.Invoke(input1DArray, outputArray1);
|
||||||
|
|
||||||
std::cerr << "Invoke succeeded" << std::endl;
|
std::cerr << "Invoke succeeded" << std::endl;
|
||||||
|
|
||||||
for (vtkm::Id i = 0; i < outputArray1.GetNumberOfValues(); ++i)
|
for (vtkm::Id i = 0; i < outputArray1.GetNumberOfValues(); ++i)
|
||||||
{
|
{
|
||||||
std::cout<< outputArray1.GetPortalConstControl().Get(i) << ", "
|
std::cout<< outputArray1.GetPortalConstControl().Get(i) << std::endl;
|
||||||
<< outputArray2.GetPortalConstControl().Get(i) << std::endl;
|
// << outputArray2.GetPortalConstControl().Get(i) << std::endl;
|
||||||
// VTKM_TEST_ASSERT(
|
// VTKM_TEST_ASSERT(
|
||||||
// test_equal( output1DArray.GetPortalConstControl().Get(i),
|
// test_equal( output1DArray.GetPortalConstControl().Get(i),
|
||||||
// static_cast<vtkm::Float32>(i) * 2.0f ),
|
// static_cast<vtkm::Float32>(i) * 2.0f ),
|
||||||
|
Loading…
Reference in New Issue
Block a user