Fix bug in HierarchicalHyperSweeper call to TransferWeightsUpdateLHEWorklet

This commit is contained in:
Oliver Ruebel 2021-09-17 14:05:32 -07:00 committed by Gunther H. Weber
parent 7c784c3651
commit bfffff9b20
2 changed files with 15 additions and 12 deletions

@ -328,7 +328,6 @@ void HierarchicalHyperSweeper<SweepValueType, ContourTreeFieldType>::InitializeI
template <typename SweepValueType, typename ContourTreeFieldType>
void HierarchicalHyperSweeper<SweepValueType, ContourTreeFieldType>::LocalHyperSweep()
{ // LocalHyperSweep()
// TODO: Implement this function
#ifdef DEBUG_PRINT
VTKM_LOG_S(vtkm::cont::LogLevel::Info,
DebugPrint(std::string("Hypersweep Block ") + std::to_string(BlockId) +
@ -628,6 +627,7 @@ void HierarchicalHyperSweeper<SweepValueType, ContourTreeFieldType>::TransferWei
valuePrefixSumView, // input view of valuePrefixSum[firstSupernode, lastSupernode)
this->DependentValues);
}
{
VTKM_ASSERT(firstSupernode + 1 + numSupernodesToProcess - 1 <=
this->SortedTransferTarget.GetNumberOfValues());
@ -636,13 +636,14 @@ void HierarchicalHyperSweeper<SweepValueType, ContourTreeFieldType>::TransferWei
VTKM_ASSERT(firstSupernode + 1 + numSupernodesToProcess - 1 <=
this->SortedTransferTarget.GetNumberOfValues());
auto sortedTransferTargetShiftedView = vtkm::cont::make_ArrayHandleView(
this->SortedTransferTarget, firstSupernode + 1, numSupernodesToProcess - 1);
this->SortedTransferTarget, firstSupernode, numSupernodesToProcess - 1);
auto valuePrefixSumPreviousValueView = vtkm::cont::make_ArrayHandleView(
this->ValuePrefixSum, firstSupernode, numSupernodesToProcess - 1);
// 7b. Now find the LHE of each group and subtract out the prior weight
this->Invoke(vtkm::worklet::contourtree_distributed::hierarchical_hyper_sweeper::
TransferWeightsUpdateLHEWorklet{},
vtkm::worklet::contourtree_distributed::hierarchical_hyper_sweeper::
TransferWeightsUpdateLHEWorklet transferWeightsUpdateLHEWorklet;
this->Invoke(transferWeightsUpdateLHEWorklet,
sortedTransferTargetView,
sortedTransferTargetShiftedView,
valuePrefixSumPreviousValueView,

@ -77,21 +77,23 @@ public:
template <typename InOutPortalType>
VTKM_EXEC void operator()(const vtkm::Id& sortedTransferTargetValue,
const vtkm::Id& sortedTransferTargetPreviusValue,
const vtkm::Id& sortedTransferTargetPreviousValue,
const vtkm::Id& valuePrefixSumPreviousValue,
InOutPortalType& dependentValuesPortal) const
{
// per supernode
// ignore any that point at NO_SUCH_ELEMENT
if (!vtkm::worklet::contourtree_augmented::NoSuchElement(sortedTransferTargetValue))
if (vtkm::worklet::contourtree_augmented::NoSuchElement(sortedTransferTargetValue))
{
if (sortedTransferTargetValue != sortedTransferTargetPreviusValue)
{
auto originalValue = dependentValuesPortal.Get(sortedTransferTargetValue);
dependentValuesPortal.Set(sortedTransferTargetValue,
originalValue - valuePrefixSumPreviousValue);
}
return;
}
if (sortedTransferTargetValue != sortedTransferTargetPreviousValue)
{
auto originalValue = dependentValuesPortal.Get(sortedTransferTargetValue);
dependentValuesPortal.Set(sortedTransferTargetValue,
originalValue - valuePrefixSumPreviousValue);
}
// In serial this worklet implements the following operation
/*