Replace implicit array handles to adapt to vtk-m changes.

This commit is contained in:
Gunther H. Weber 2020-10-27 21:25:11 -07:00
parent 336fd1f2e8
commit f0213d065e
3 changed files with 13 additions and 125 deletions

@ -65,7 +65,6 @@
#include <vtkm/worklet/contourtree_distributed/InteriorForest.h>
#include <vtkm/worklet/contourtree_distributed/boundary_tree_maker/AddTerminalFlagsToUpDownNeighboursWorklet.h>
#include <vtkm/worklet/contourtree_distributed/boundary_tree_maker/ArraySumFunctor.h>
#include <vtkm/worklet/contourtree_distributed/boundary_tree_maker/AugmentBoundaryWithNecessaryInteriorSupernodesAppendNecessarySupernodesWorklet.h>
#include <vtkm/worklet/contourtree_distributed/boundary_tree_maker/AugmentBoundaryWithNecessaryInteriorSupernodesUnsetBoundarySupernodesWorklet.h>
#include <vtkm/worklet/contourtree_distributed/boundary_tree_maker/BRACTNodeComparator.h>
@ -88,9 +87,9 @@
#include <vtkm/worklet/contourtree_distributed/boundary_tree_maker/PropagateBoundaryCountsSubtractDependentCountsWorklet.h>
#include <vtkm/worklet/contourtree_distributed/boundary_tree_maker/PropagateBoundaryCountsTransferCumulativeCountsWorklet.h>
#include <vtkm/worklet/contourtree_distributed/boundary_tree_maker/PropagateBoundaryCountsTransferDependentCountsWorklet.h>
#include <vtkm/worklet/contourtree_distributed/boundary_tree_maker/SelectRangeFunctor.h>
#include <vtkm/worklet/contourtree_distributed/boundary_tree_maker/SetInteriorForestWorklet.h>
#include <vtkm/worklet/contourtree_distributed/boundary_tree_maker/SetUpAndDownNeighboursWorklet.h>
#include <vtkm/worklet/contourtree_distributed/boundary_tree_maker/SumFunctor.h>
// vtkm includes
@ -459,10 +458,11 @@ void BoundaryTreeMaker<MeshType, MeshBoundaryExecObjType>::PropagateBoundaryCoun
// Compute the sum of this->SupernodeTransferBoundaryCount and this->SuperarcIntrinsicBoundaryCount
// for the [firstSupernodex, lastSupernode) subrange and copy to the this->SuperarcDependentBoundaryCount
{ // make local context so fancyTempSumArray gets deleted
auto fancyTempSumArray = vtkm::cont::make_ArrayHandleImplicit(
bract_maker::ArraySumFunctor(this->SupernodeTransferBoundaryCount,
this->SuperarcIntrinsicBoundaryCount),
this->SupernodeTransferBoundaryCount.GetNumberOfValues());
auto fancyTempZippedArray = vtkm::cont::make_ArrayHandleZip(
this->SupernodeTransferBoundaryCount, this->SuperarcIntrinsicBoundaryCount);
auto fancyTempSumArray =
vtkm::cont::make_ArrayHandleTransform(fancyTempZippedArray, bract_maker::SumFunctor{});
vtkm::cont::Algorithm::CopySubRange(
fancyTempSumArray, // input array
firstSupernode, // start index for the copy
@ -477,9 +477,8 @@ void BoundaryTreeMaker<MeshType, MeshBoundaryExecObjType>::PropagateBoundaryCoun
#endif
// iii.Perform prefix sum on dependent count range
{ // make local context so tempArray and fancyRangeArraySuperarcDependentBoundaryCountget deleted
auto fancyRangeArraySuperarcDependentBoundaryCount = vtkm::cont::make_ArrayHandleImplicit(
bract_maker::SelectRangeFunctor(this->SuperarcDependentBoundaryCount, firstSupernode),
lastSupernode - firstSupernode);
auto fancyRangeArraySuperarcDependentBoundaryCount = make_ArrayHandleView(
this->SuperarcDependentBoundaryCount, firstSupernode, lastSupernode - firstSupernode);
// Write to temporary array first as it is not clear whether ScanInclusive is safe to read and write
// to the same array and range
vtkm::worklet::contourtree_augmented::IdArrayType tempArray;

@ -1,99 +0,0 @@
//============================================================================
// Copyright (c) Kitware, Inc.
// All rights reserved.
// See LICENSE.txt for details.
//
// This software is distributed WITHOUT ANY WARRANTY; without even
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE. See the above copyright notice for more information.
//============================================================================
// Copyright (c) 2018, The Regents of the University of California, through
// Lawrence Berkeley National Laboratory (subject to receipt of any required approvals
// from the U.S. Dept. of Energy). All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// (1) Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// (2) Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// (3) Neither the name of the University of California, Lawrence Berkeley National
// Laboratory, U.S. Dept. of Energy nor the names of its contributors may be
// used to endorse or promote products derived from this software without
// specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
// OF THE POSSIBILITY OF SUCH DAMAGE.
//
//=============================================================================
//
// This code is an extension of the algorithm presented in the paper:
// Parallel Peak Pruning for Scalable SMP Contour Tree Computation.
// Hamish Carr, Gunther Weber, Christopher Sewell, and James Ahrens.
// Proceedings of the IEEE Symposium on Large Data Analysis and Visualization
// (LDAV), October 2016, Baltimore, Maryland.
//
// The PPP2 algorithm and software were jointly developed by
// Hamish Carr (University of Leeds), Gunther H. Weber (LBNL), and
// Oliver Ruebel (LBNL)
//==============================================================================
#ifndef vtk_m_worklet_contourtree_distributed_bract_maker_select_range_functor_h
#define vtk_m_worklet_contourtree_distributed_bract_maker_select_range_functor_h
#include <vtkm/worklet/WorkletMapField.h>
#include <vtkm/worklet/contourtree_augmented/Types.h>
namespace vtkm
{
namespace worklet
{
namespace contourtree_distributed
{
namespace bract_maker
{
//Simple functor to subset a VTKm ArrayHandle
class SelectRangeFunctor
{
public:
VTKM_EXEC_CONT
SelectRangeFunctor() {}
VTKM_EXEC_CONT
SelectRangeFunctor(const vtkm::worklet::contourtree_augmented::IdArrayType& dataArray,
vtkm::Id startIndex)
: DataArray(dataArray)
, StartIndex(startIndex)
{
}
VTKM_EXEC_CONT
vtkm::Id operator()(const vtkm::Id index) const
{
return this->DataArray.ReadPortal().Get(this->StartIndex + index);
}
private:
vtkm::worklet::contourtree_augmented::IdArrayType DataArray;
vtkm::Id StartIndex;
};
} // namespace bract_maker
} // namespace contourtree_distributed
} // namespace worklet
} // namespace vtkm
#endif

@ -65,30 +65,18 @@ namespace contourtree_distributed
namespace bract_maker
{
//Simple functor to implement a fancy array handle that returns the sum of two arrays
class ArraySumFunctor
// Simple functor used to sum two zipped arrays
class SumFunctor
{
public:
VTKM_CONT
ArraySumFunctor() {}
VTKM_CONT
ArraySumFunctor(const vtkm::worklet::contourtree_augmented::IdArrayType& first,
const vtkm::worklet::contourtree_augmented::IdArrayType& second)
: First(first)
, Second(second)
{
}
SumFunctor() {}
VTKM_EXEC_CONT
vtkm::Id operator()(const vtkm::Id index) const
vtkm::Id operator()(const vtkm::Pair<vtkm::Id, vtkm::Id>& inp) const
{
return First.ReadPortal().Get(index) + Second.ReadPortal().Get(index);
return inp.first + inp.second;
}
private:
vtkm::worklet::contourtree_augmented::IdArrayType First;
vtkm::worklet::contourtree_augmented::IdArrayType Second;
};
} // namespace bract_maker