InverseTransformEven() keeps coeffs by itself

This commit is contained in:
Samuel Li 2016-09-08 16:49:20 -06:00
parent 89c1efda59
commit 39267ce4fb
2 changed files with 22 additions and 26 deletions

@ -620,26 +620,24 @@ if( print)
( WaveletBase::filter.GetLowReconstructFilter(),
WaveletBase::filter.GetHighReconstructFilter(),
filterLen, L[0], cATempLen );
vtkm::worklet::DispatcherMapField<vtkm::worklet::wavelets::InverseTransformOdd<DeviceTag>, DeviceTag>
dispatcher( inverseXformOdd );
vtkm::worklet::DispatcherMapField<vtkm::worklet::wavelets::
InverseTransformOdd<DeviceTag>, DeviceTag> dispatcher( inverseXformOdd );
// use a timer
vtkm::cont::Timer<DeviceTag> timer;
dispatcher.Invoke( coeffInExtended,
sigOut );
dispatcher.Invoke( coeffInExtended, sigOut );
elapsedTime = timer.GetElapsedTime();
}
else
{
vtkm::worklet::wavelets::InverseTransformEven inverseXformEven
( filterLen, L[0], cATempLen, !doSymConv );
vtkm::worklet::DispatcherMapField<vtkm::worklet::wavelets::InverseTransformEven, DeviceTag>
dispatcher( inverseXformEven );
vtkm::worklet::wavelets::InverseTransformEven<DeviceTag> inverseXformEven
( WaveletBase::filter.GetLowReconstructFilter(),
WaveletBase::filter.GetHighReconstructFilter(),
filterLen, L[0], cATempLen, !doSymConv );
vtkm::worklet::DispatcherMapField<vtkm::worklet::wavelets::
InverseTransformEven<DeviceTag>, DeviceTag> dispatcher( inverseXformEven );
// use a timer
vtkm::cont::Timer<DeviceTag> timer;
dispatcher.Invoke( coeffInExtended,
WaveletBase::filter.GetLowReconstructFilter(),
WaveletBase::filter.GetHighReconstructFilter(),
sigOut );
dispatcher.Invoke( coeffInExtended, sigOut );
elapsedTime = timer.GetElapsedTime();
}

@ -502,36 +502,33 @@ private:
// Worklet: perform an inverse transform for even length, symmetric filters.
template< typename DeviceTag >
class InverseTransformEven: public vtkm::worklet::WorkletMapField
{
public:
typedef void ControlSignature(WholeArrayIn<ScalarAll>, // Input: coeffs,
// cA followed by cD
WholeArrayIn<Scalar>, // lowFilter
WholeArrayIn<Scalar>, // highFilter
WholeArrayOut<ScalarAll>); // output
typedef void ExecutionSignature(_1, _2, _3, _4, WorkIndex);
typedef void ExecutionSignature(_1, _2, WorkIndex);
typedef _1 InputDomain;
// Constructor
VTKM_EXEC_CONT_EXPORT
InverseTransformEven( vtkm::Id filtL, vtkm::Id cAL, vtkm::Id cALExt, bool m ) :
filterLen(filtL), cALen(cAL), cALenExtended(cALExt), matlab(m)
{
this->cALen2 = cALen * 2;
}
InverseTransformEven( const vtkm::cont::ArrayHandle<vtkm::Float64> &loFilter,
const vtkm::cont::ArrayHandle<vtkm::Float64> &hiFilter,
vtkm::Id filtL, vtkm::Id cAL, vtkm::Id cALExt, bool m ) :
lowFilter( loFilter.PrepareForInput(DeviceTag()) ),
highFilter( hiFilter.PrepareForInput(DeviceTag()) ),
filterLen( filtL ), cALen( cAL ), cALen2( cAL * 2 ),
cALenExtended( cALExt ), matlab( m ) {}
// Use 64-bit float for convolution calculation
#define VAL vtkm::Float64
#define MAKEVAL(a) (static_cast<VAL>(a))
template <typename InputPortalType,
typename FilterPortalType,
typename OutputPortalType>
template <typename InputPortalType, typename OutputPortalType>
VTKM_EXEC_EXPORT
void operator()(const InputPortalType &coeffs,
const FilterPortalType &lowFilter,
const FilterPortalType &highFilter,
OutputPortalType &sigOut,
const vtkm::Id &workIndex) const
{
@ -568,13 +565,14 @@ public:
sigOut.Set(workIndex, static_cast<typename OutputPortalType::ValueType>( sum ) );
}
}
#undef MAKEVAL
#undef VAL
private:
typename vtkm::cont::ArrayHandle<vtkm::Float64>::ExecutionTypes<DeviceTag>::PortalConst
lowFilter, highFilter;
vtkm::Id filterLen; // filter length.
vtkm::Id cALen; // Number of actual cAs
vtkm::Id cALen2; // = cALen * 2