Merge topic 'properly_compute_scatter_array_lengths'

85084f2c ScatterIdentity::GetVisitArray parameters are now named properly
86ecad65 ScatterIdentity::GetOutputToInputMap parameters are now named properly
40896e2b Allocate the scatter arrays to be proper length.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kenneth Moreland <kmorel@sandia.gov>
Merge-request: !359
This commit is contained in:
Robert Maynard 2016-03-15 16:59:52 -04:00 committed by Kitware Robot
commit 177b31f330
2 changed files with 17 additions and 14 deletions

@ -40,27 +40,27 @@ struct ScatterIdentity
{
typedef vtkm::cont::ArrayHandleIndex OutputToInputMapType;
VTKM_CONT_EXPORT
OutputToInputMapType GetOutputToInputMap(vtkm::Id outputRange) const
OutputToInputMapType GetOutputToInputMap(vtkm::Id inputRange) const
{
return OutputToInputMapType(outputRange);
return OutputToInputMapType(inputRange);
}
VTKM_CONT_EXPORT
OutputToInputMapType GetOutputToInputMap(vtkm::Id3 outputRange) const
OutputToInputMapType GetOutputToInputMap(vtkm::Id3 inputRange) const
{
return this->GetOutputToInputMap(
outputRange[0]*outputRange[1]*outputRange[2]);
inputRange[0]*inputRange[1]*inputRange[2]);
}
typedef vtkm::cont::ArrayHandleConstant<vtkm::IdComponent> VisitArrayType;
VTKM_CONT_EXPORT
VisitArrayType GetVisitArray(vtkm::Id outputRange) const
VisitArrayType GetVisitArray(vtkm::Id inputRange) const
{
return VisitArrayType(1, outputRange);
return VisitArrayType(1, inputRange);
}
VTKM_CONT_EXPORT
VisitArrayType GetVisitArray(vtkm::Id3 outputRange) const
VisitArrayType GetVisitArray(vtkm::Id3 inputRange) const
{
return this->GetVisitArray(outputRange[0]*outputRange[1]*outputRange[2]);
return this->GetVisitArray(inputRange[0]*inputRange[1]*inputRange[2]);
}
template<typename RangeType>

@ -445,6 +445,7 @@ protected:
{
this->InvokeTransportParameters(
invocation,
numInstances,
this->Worklet.GetScatter().GetOutputRange(numInstances),
device);
}
@ -469,6 +470,7 @@ protected:
{
this->InvokeTransportParameters(
invocation,
dimensions,
this->Worklet.GetScatter().GetOutputRange(dimensions),
device);
}
@ -480,10 +482,11 @@ private:
DispatcherBase(const MyType &);
void operator=(const MyType &);
template<typename Invocation, typename RangeType, typename DeviceAdapter>
template<typename Invocation, typename InputRangeType, typename OutputRangeType, typename DeviceAdapter>
VTKM_CONT_EXPORT
void InvokeTransportParameters(const Invocation &invocation,
RangeType range,
const InputRangeType& inputRange,
const OutputRangeType& outputRange,
DeviceAdapter device) const
{
// The first step in invoking a worklet is to transport the arguments to
@ -504,13 +507,13 @@ private:
TransportFunctorType>::type ExecObjectParameters;
ExecObjectParameters execObjectParameters =
parameters.StaticTransformCont(TransportFunctorType(range));
parameters.StaticTransformCont(TransportFunctorType(outputRange));
// Get the arrays used for scattering input to output.
typename WorkletType::ScatterType::OutputToInputMapType outputToInputMap =
this->Worklet.GetScatter().GetOutputToInputMap(range);
this->Worklet.GetScatter().GetOutputToInputMap(inputRange);
typename WorkletType::ScatterType::VisitArrayType visitArray =
this->Worklet.GetScatter().GetVisitArray(range);
this->Worklet.GetScatter().GetVisitArray(inputRange);
// Replace the parameters in the invocation with the execution object and
// pass to next step of Invoke. Also add the scatter information.
@ -519,7 +522,7 @@ private:
.ChangeParameters(execObjectParameters)
.ChangeOutputToInputMap(outputToInputMap.PrepareForInput(device))
.ChangeVisitArray(visitArray.PrepareForInput(device)),
range,
outputRange,
device);
}