VTK-m  2.0
Public Member Functions | Public Attributes | Private Attributes | List of all members
vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType > Class Template Reference

Class to compute the Boundary Restricted Augmented Contour Tree (BRACT), a.k.a., BoundaryTree. More...

#include <BoundaryTreeMaker.h>

Public Member Functions

VTKM_CONT BoundaryTreeMaker (MeshType *inputMesh, MeshBoundaryExecObjType &meshBoundaryExecObj, vtkm::worklet::contourtree_augmented::ContourTree &inputTree, BoundaryTree *boundaryTree, InteriorForest *interiorTree)
 
VTKM_CONT void Construct (const vtkm::worklet::contourtree_augmented::mesh_dem::IdRelabeler *localToGlobalIdRelabeler=nullptr, bool boundaryCritical=true)
 computes a BRACT from a contour tree for a known block note the block ID for debug purposes More...
 
VTKM_CONT void FindBoundaryVertices (bool boundaryCritical)
 routine to find the set of boundary vertices More...
 
VTKM_CONT void ComputeDependentBoundaryCounts ()
 routine to compute the initial dependent counts (i.e. More...
 
VTKM_CONT void PropagateBoundaryCounts ()
 routine for hyper-propagation to compute dependent boundary counts More...
 
VTKM_CONT void FindNecessaryInteriorSupernodes ()
 routine to find the necessary interior supernodes for the BRACT More...
 
VTKM_CONT void AugmentBoundaryWithNecessaryInteriorSupernodes ()
 routine to add the necessary interior supernodes to the boundary array More...
 
VTKM_CONT void FindBoundaryTreeSuperarcs ()
 routine that sorts on hyperparent to find BRACT superarcs More...
 
VTKM_CONT void SuppressRegularisedInteriorSupernodes ()
 compresses out supernodes in the interior that have become regular in the BRACT More...
 
VTKM_CONT void SetUpAndDownNeighbours ()
 routine to find AN up/down neighbour for each vertex this is deliberately non-canonical and exploits write-conflicts More...
 
VTKM_CONT void IdentifyRegularisedSupernodes ()
 routine to set a flag for each vertex that has become regular in the interior of the BRACT More...
 
VTKM_CONT void AddTerminalFlagsToUpDownNeighbours ()
 this routine sets a flag on every up/down neighbour that points to a critical point to force termination of pointer-doubling More...
 
VTKM_CONT void PointerDoubleUpDownNeighbours ()
 routine that uses pointer-doubling to collapse regular nodes in the BRACT More...
 
VTKM_CONT void CompressRegularisedNodes ()
 routine that compresses the regular nodes out of the BRACT More...
 
VTKM_CONT void SetInteriorForest (const vtkm::worklet::contourtree_augmented::mesh_dem::IdRelabeler *localToGlobalIdRelabeler=nullptr)
 sets the arrays in the InteriorForest (i.e., the residue) that need to be passed to the grafting stage. More...
 
VTKM_CONT std::string DebugPrint (const char *message, const char *fileName, long lineNum) const
 prints the contents of the restrictor object in a standard format More...
 

Public Attributes

MeshType * Mesh
 Pointer to the input mesh. More...
 
MeshBoundaryExecObjType & MeshBoundaryExecutionObject
 
vtkm::worklet::contourtree_augmented::ContourTreeContourTree
 Pointer to the contour tree for the mesh. More...
 
BoundaryTreeBoundaryTreeData
 Data structure for storing the results from this class. More...
 
InteriorForestInteriorForestData
 Data structure for the interior forest of a data block, i.e, the contourtree of a block minus the BoundaryTree (also called the residue or BRACT) More...
 
vtkm::Id NumBoundary
 how many vertices ARE on the boundary More...
 
vtkm::Id NumNecessary
 how many interior vertices are necessary More...
 
vtkm::Id NumKept
 how many vertices are kept in the BRACT More...
 
vtkm::worklet::contourtree_augmented::IdArrayType BoundaryTreeId
 arrays for computation - stored here to simplify debug print More...
 
vtkm::worklet::contourtree_augmented::IdArrayType BoundaryVertexSuperset
 the regular IDs of the boundary vertices (a conservative over-estimate, needed for hierarchical computation) More...
 
vtkm::worklet::contourtree_augmented::IdArrayType BoundaryIndices
 their sort indices (may be redundant, but . . .) More...
 
vtkm::worklet::contourtree_augmented::IdArrayType BoundarySuperparents
 the superparents for each boundary vertex More...
 
vtkm::worklet::contourtree_augmented::IdArrayType TreeToSuperset
 these are essentially the same as the transfer/intrinsic/dependent weights probably about time to refactor and do a generic hyperarc propagation routine (owch!) More...
 
vtkm::worklet::contourtree_augmented::IdArrayType SuperarcIntrinsicBoundaryCount
 count of boundary nodes on each superarc More...
 
vtkm::worklet::contourtree_augmented::IdArrayType SupernodeTransferBoundaryCount
 count of boundary nodes being transferred at eah supernode More...
 
vtkm::worklet::contourtree_augmented::IdArrayType SuperarcDependentBoundaryCount
 count of dependent boundary nodes for each superarc More...
 
vtkm::worklet::contourtree_augmented::IdArrayType HyperarcDependentBoundaryCount
 count of dependent boundary nodes for each hyperarc More...
 
vtkm::worklet::contourtree_augmented::IdArrayType UpNeighbour
 
vtkm::worklet::contourtree_augmented::IdArrayType DownNeighbour
 
vtkm::worklet::contourtree_augmented::IdArrayType NewVertexId
 array needed for compression More...
 

Private Attributes

vtkm::cont::Invoker Invoke
 Used internally to Invoke worklets. More...
 

Detailed Description

template<typename MeshType, typename MeshBoundaryExecObjType>
class vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >

Class to compute the Boundary Restricted Augmented Contour Tree (BRACT), a.k.a., BoundaryTree.

Constructor & Destructor Documentation

◆ BoundaryTreeMaker()

template<typename MeshType , typename MeshBoundaryExecObjType >
VTKM_CONT vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::BoundaryTreeMaker ( MeshType *  inputMesh,
MeshBoundaryExecObjType &  meshBoundaryExecObj,
vtkm::worklet::contourtree_augmented::ContourTree inputTree,
BoundaryTree boundaryTree,
InteriorForest interiorTree 
)
inline

Member Function Documentation

◆ AddTerminalFlagsToUpDownNeighbours()

template<typename MeshType , typename MeshBoundaryExecObjType >
void vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::AddTerminalFlagsToUpDownNeighbours

this routine sets a flag on every up/down neighbour that points to a critical point to force termination of pointer-doubling

Side effects: This function updates

  • this->UpNeighbour
  • this->DownNeighbour

◆ AugmentBoundaryWithNecessaryInteriorSupernodes()

template<typename MeshType , typename MeshBoundaryExecObjType >
void vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::AugmentBoundaryWithNecessaryInteriorSupernodes

routine to add the necessary interior supernodes to the boundary array

Side effects: This function updates:

  • this->NumNecessary
  • this->BoundaryIndices,
  • this->BoundaryVertexSuperset

◆ CompressRegularisedNodes()

template<typename MeshType , typename MeshBoundaryExecObjType >
void vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::CompressRegularisedNodes

routine that compresses the regular nodes out of the BRACT

Side effects: This function updates:

  • this->NewVertexId
  • this->NumKept
  • this->BoundaryTreeData->VertexIndex
  • this->BoundaryTreeData->Superarcs

◆ ComputeDependentBoundaryCounts()

template<typename MeshType , typename MeshBoundaryExecObjType >
void vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::ComputeDependentBoundaryCounts

routine to compute the initial dependent counts (i.e.

along each superarc) in preparation for hyper-propagation

along each superarc) in preparation for hyper-propagation

Side-effects: This function updates:

  • this->BoundarySuperparents
  • this->SuperarcIntrinsicBoundaryCount
  • this->BoundarySuperparents

◆ Construct()

template<typename MeshType , typename MeshBoundaryExecObjType >
void vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::Construct ( const vtkm::worklet::contourtree_augmented::mesh_dem::IdRelabeler localToGlobalIdRelabeler = nullptr,
bool  boundaryCritical = true 
)

computes a BRACT from a contour tree for a known block note the block ID for debug purposes

Parameters
[in]localToGlobalIdRelabelerIdRelabeler for the mesh needed to call this->Mesh->GetGlobalIdsFromMeshIndices(...) used by the this->SetInteriorForest function (default=nullptr).
[in]boundaryCriticalIf True then use only boundary critical points in the BoundaryTree, otherwise use the full boundary between blocks. (default=true)

◆ DebugPrint()

template<typename MeshType , typename MeshBoundaryExecObjType >
std::string vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::DebugPrint ( const char *  message,
const char *  fileName,
long  lineNum 
) const

prints the contents of the restrictor object in a standard format

◆ FindBoundaryTreeSuperarcs()

template<typename MeshType , typename MeshBoundaryExecObjType >
void vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::FindBoundaryTreeSuperarcs

routine that sorts on hyperparent to find BRACT superarcs

Side-effects: This function updates:

  • this->TreeToSuperset
  • this->BoundaryIndices
  • this->BoundaryVertexSuperset
  • this->BoundaryTreeData->Superarcs
  • this->BoundaryTreeId

◆ FindBoundaryVertices()

template<typename MeshType , typename MeshBoundaryExecObjType >
void vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::FindBoundaryVertices ( bool  boundaryCritical)

routine to find the set of boundary vertices

Parameters
[in]boundaryCriticalIf True then use only boundary critical points in the BoundaryTree, otherwise use the full boundary between blocks. (default=true)

Side-effects: This function updates:

  • this->BoundaryVertexSuperset
  • this->BoundaryIndices

◆ FindNecessaryInteriorSupernodes()

template<typename MeshType , typename MeshBoundaryExecObjType >
void vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::FindNecessaryInteriorSupernodes

routine to find the necessary interior supernodes for the BRACT

INVARIANT: We have now computed the dependent weight for each supernode For boundary nodes, we will ignore this For non-boundary nodes, if the dependent weight is 0 or nBoundary then all boundary nodes are in one direction, and the node is unnecessary We have decided that if a superarc has any boundary nodes, the entire superarc should be treated as necessary. This extends the criteria so that the superparent and superparent's superarc of any boundary node are necessary

Side-effects: This function updates:

  • this->InteriorForestData->IsNecessary

◆ IdentifyRegularisedSupernodes()

template<typename MeshType , typename MeshBoundaryExecObjType >
void vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::IdentifyRegularisedSupernodes

routine to set a flag for each vertex that has become regular in the interior of the BRACT

Side effect: This function updates

  • this->NewVertexId

◆ PointerDoubleUpDownNeighbours()

template<typename MeshType , typename MeshBoundaryExecObjType >
void vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::PointerDoubleUpDownNeighbours

routine that uses pointer-doubling to collapse regular nodes in the BRACT

Side effects: This functions updates

  • this->UpNeighbour,
  • this->DownNeighbour

◆ PropagateBoundaryCounts()

template<typename MeshType , typename MeshBoundaryExecObjType >
void vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::PropagateBoundaryCounts

routine for hyper-propagation to compute dependent boundary counts

Side-effects: This function updates:

  • this->SupernodeTransferBoundaryCount
  • this->SuperarcDependentBoundaryCount
  • this->HyperarcDependentBoundaryCount

◆ SetInteriorForest()

template<typename MeshType , typename MeshBoundaryExecObjType >
void vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::SetInteriorForest ( const vtkm::worklet::contourtree_augmented::mesh_dem::IdRelabeler localToGlobalIdRelabeler = nullptr)

sets the arrays in the InteriorForest (i.e., the residue) that need to be passed to the grafting stage.

Parameters
[in]localToGlobalIdRelabelerIdRelabeler for the mesh needed to call this->Mesh->GetGlobalIdsFromMeshIndices(...) (default=nullptr).

In the original this function was called SetResidue()

Side effects: This function updates:

  • this->InteriorForestData->Above
  • this->InteriorForestData->Below
  • this->InteriorForestData->BoundaryTreeMeshIndices

◆ SetUpAndDownNeighbours()

template<typename MeshType , typename MeshBoundaryExecObjType >
void vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::SetUpAndDownNeighbours

routine to find AN up/down neighbour for each vertex this is deliberately non-canonical and exploits write-conflicts

Side effect: This function updates

  • this->UpNeighbour
  • this->DownNeighbour

◆ SuppressRegularisedInteriorSupernodes()

template<typename MeshType , typename MeshBoundaryExecObjType >
void vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::SuppressRegularisedInteriorSupernodes

compresses out supernodes in the interior that have become regular in the BRACT

Side-effects: This function has the cummulative side effects of

Member Data Documentation

◆ BoundaryIndices

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::worklet::contourtree_augmented::IdArrayType vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::BoundaryIndices

their sort indices (may be redundant, but . . .)

◆ BoundarySuperparents

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::worklet::contourtree_augmented::IdArrayType vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::BoundarySuperparents

the superparents for each boundary vertex

◆ BoundaryTreeData

template<typename MeshType , typename MeshBoundaryExecObjType >
BoundaryTree* vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::BoundaryTreeData

Data structure for storing the results from this class.

◆ BoundaryTreeId

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::worklet::contourtree_augmented::IdArrayType vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::BoundaryTreeId

arrays for computation - stored here to simplify debug print

array for ID in boundary tree

◆ BoundaryVertexSuperset

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::worklet::contourtree_augmented::IdArrayType vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::BoundaryVertexSuperset

the regular IDs of the boundary vertices (a conservative over-estimate, needed for hierarchical computation)

◆ ContourTree

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::worklet::contourtree_augmented::ContourTree& vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::ContourTree

Pointer to the contour tree for the mesh.

◆ DownNeighbour

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::worklet::contourtree_augmented::IdArrayType vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::DownNeighbour

◆ HyperarcDependentBoundaryCount

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::worklet::contourtree_augmented::IdArrayType vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::HyperarcDependentBoundaryCount

count of dependent boundary nodes for each hyperarc

◆ InteriorForestData

template<typename MeshType , typename MeshBoundaryExecObjType >
InteriorForest* vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::InteriorForestData

Data structure for the interior forest of a data block, i.e, the contourtree of a block minus the BoundaryTree (also called the residue or BRACT)

◆ Invoke

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::cont::Invoker vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::Invoke
private

Used internally to Invoke worklets.

◆ Mesh

template<typename MeshType , typename MeshBoundaryExecObjType >
MeshType* vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::Mesh

Pointer to the input mesh.

◆ MeshBoundaryExecutionObject

template<typename MeshType , typename MeshBoundaryExecObjType >
MeshBoundaryExecObjType& vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::MeshBoundaryExecutionObject

◆ NewVertexId

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::worklet::contourtree_augmented::IdArrayType vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::NewVertexId

array needed for compression

◆ NumBoundary

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::Id vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::NumBoundary

how many vertices ARE on the boundary

◆ NumKept

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::Id vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::NumKept

how many vertices are kept in the BRACT

◆ NumNecessary

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::Id vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::NumNecessary

how many interior vertices are necessary

◆ SuperarcDependentBoundaryCount

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::worklet::contourtree_augmented::IdArrayType vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::SuperarcDependentBoundaryCount

count of dependent boundary nodes for each superarc

◆ SuperarcIntrinsicBoundaryCount

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::worklet::contourtree_augmented::IdArrayType vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::SuperarcIntrinsicBoundaryCount

count of boundary nodes on each superarc

◆ SupernodeTransferBoundaryCount

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::worklet::contourtree_augmented::IdArrayType vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::SupernodeTransferBoundaryCount

count of boundary nodes being transferred at eah supernode

◆ TreeToSuperset

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::worklet::contourtree_augmented::IdArrayType vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::TreeToSuperset

these are essentially the same as the transfer/intrinsic/dependent weights probably about time to refactor and do a generic hyperarc propagation routine (owch!)

mapping from tree super ID to bract superset ID (could potentially be combined with isNecessary)

◆ UpNeighbour

template<typename MeshType , typename MeshBoundaryExecObjType >
vtkm::worklet::contourtree_augmented::IdArrayType vtkm::worklet::contourtree_distributed::BoundaryTreeMaker< MeshType, MeshBoundaryExecObjType >::UpNeighbour

The documentation for this class was generated from the following file: