IBAMR  IBAMR version 0.19.
Classes | Public Types | Public Member Functions | List of all members
SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM > Class Template Reference

Node in the asynchronous Berger-Rigoutsos (BR) dendogram. More...

#include <AsyncBergerRigoutsosNode.h>

Inheritance diagram for SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >:
Inheritance graph
[legend]

Classes

struct  CommonParams
 Parameters shared among all dendogram nodes in an dendogram and collectively managed by those nodes. More...
 

Public Types

enum  OwnerMode { SINGLE_OWNER = 0, MOST_OVERLAP = 1, FEWEST_OWNED = 2, LEAST_ACTIVE = 3 }
 
typedef hier::LayerNodeSet< DIM >::Node GraphNode
 Shorthand for the box-graph node corresponding to boxes. More...
 
typedef hier::LayerNodeSet< DIM >::NodeContainer GraphNodeContainer
 Shorthand for a container of graph-nodes. More...
 
typedef hier::LayerEdgeSet< DIM >::NabrContainer GraphNabrContainer
 Shorthand for a container of neighbor graph-nodes. More...
 
typedef hier::LayerEdgeSet< DIM >::Connectivity Connectivity
 Shortthand for the connectivity between two sets of graph nodes. More...
 
typedef std::set< intIntSet
 Shorthand for a sorted, possibly incontiguous, set of integers. More...
 
enum  JobState { COMMUNICATION_WAIT = 0, NONCOMMUNICATION_WAIT = 1, JOB_IS_COMPLETED = 2 }
 

Public Member Functions

 AsyncBergerRigoutsosNode (CommonParams *common_params, const hier::Box< DIM > *bound_box=NULL, mesh::AsyncBergerRigoutsosNode< DIM > *parent=NULL, const int child_number=1)
 Construct a node of a BR dendogram. More...
 
 ~AsyncBergerRigoutsosNode (void)
 Destructor. More...
 
Algorithm mode settings
void setMaxGhostCellWidth (const hier::IntVector< DIM > &max_gcw)
 Set the maximum ghost cell width used for checking overlaps. More...
 
void setAlgorithmAdvanceMode (const std::string &algo_advance_mode)
 Set the mode for advancing the asynchronous implementation. More...
 
void setOwnerMode (const std::string &mode)
 Set the method for choosing the owner. Choices: More...
 
void setUseLevelBoxes (bool flag)
 Switch on or off the use of global level boxes. More...
 
void setComputeEdges (int compute_edges)
 Edge computation flag. More...
 
void runAlgorithm ()
 Run the BR algorithm to find boxes. More...
 
Access to outputs
const hier::LayerNodeSet< DIM > & getNewNodes () const
 Get the output boxes in a hier::LayerNodeSet<DIM> form. More...
 
const ConnectivitygetNewCnect () const
 Get the connectivity between input and output graph nodes (between the tagged and new graph nodes). More...
 
Developer's methods for analysis and debugging this class.
virtual void printClassData (std::ostream &os, int detail_level=0) const
 
int getMaxNodes () const
 Max number of local nodes for dendogram. More...
 
int getMaxGeneration () const
 max generation count for the local nodes in the dendogram. More...
 
int getMaxOwnership () const
 Max number of locally owned nodes in the dendogram. More...
 
double getAvgNumberOfCont () const
 Average number of continuations for local nodes in dendogram. More...
 
int getMaxNumberOfCont () const
 Max number of continuations for local nodes in dendogram. More...
 
int getNumBoxesGenerated () const
 Number of boxes generated (but not necessarily owned) on the local process. More...
 
void setLogNodeHistory (bool flag)
 Set whether to log dendogram node action history (useful for debugging). More...
 

Private Member Functions

Delegated tasks for various phases of running algorithm.
void makeLocalTagHistogram ()
 
void reduceHistogram_start ()
 
bool reduceHistogram_check ()
 
void computeMinimalBoundingBoxForTags ()
 
void acceptOrSplitBox ()
 
void broadcastAcceptability_start ()
 
bool broadcastAcceptability_check ()
 
void countOverlapWithLocalPatches ()
 
void gatherGroupingCriteria_start ()
 
bool gatherGroupingCriteria_check ()
 
void formChildGroups ()
 Form child groups from gathered overlap counts. More...
 
void formChildGroupsUsingLevelBoxes ()
 Form child groups from local copy of all level boxes. More...
 
void broadcastChildGroups_start ()
 
bool broadcastChildGroups_check ()
 
void runChildren_start ()
 
bool runChildren_check ()
 
void broadcastToDropouts_start ()
 
bool broadcastToDropouts_check ()
 
void createLayerNode ()
 
void eraseLayerNode ()
 
void computeNewGraphEdges ()
 Compute new graph edges touching local tag nodes. More...
 
void shareNewEdgesWithOwners ()
 Participants send new edge data to graph node owners. More...
 
Utilities for implementing algorithm
int findOwnerInGroup (int owner, const tbox::Array< int > &group) const
 Find the index of the owner in the group. More...
 
void claimMPITag ()
 Claim a unique tag from process's available tag pool. More...
 
int computeCommunicationTreeDegree (int group_size) const
 Heuristically determine "best" tree degree for communication group size. More...
 
bool findZeroCutPoint (int &cut_pt, const int dim)
 
bool findZeroCutSwath (int &cut_lo, int &cut_hi, const int dim)
 
void cutAtLaplacian (int &cut_pt, const int dim, const int lo, const int hi, const int min_size)
 
int getHistogramBufferSize (const hier::Box< DIM > &box) const
 
intputHistogramToBuffer (int *buffer)
 
intgetHistogramFromBuffer (int *buffer)
 
intputBoxToBuffer (const hier::Box< DIM > &box, int *buffer) const
 
intgetBoxFromBuffer (hier::Box< DIM > &box, int *buffer) const
 
void computeDropoutGroup (const tbox::Array< int > &main_group, const tbox::Array< int > &sub_group, tbox::Array< int > &dropouts, const int add_group) const
 Compute list of non-participating processes. More...
 
BoxAcceptance intToBoxAcceptance (int i) const
 
bool boxAccepted () const
 
bool boxRejected () const
 
bool boxHasNoTag () const
 

Private Attributes

Tree-related data
AsyncBergerRigoutsosNoded_parent
 Parent node (or NULL for the root node). More...
 
AsyncBergerRigoutsosNoded_lft_child
 Left child. More...
 
AsyncBergerRigoutsosNoded_rht_child
 Right child. More...
 
Data for one recursion of the BR algorithm
hier::Box< DIM > d_box
 
int d_owner
 
Id of participating processes.
tbox::Array< intd_group
 
int d_mpi_tag
 MPI tag for message within a dendogram node. More...
 
int d_overlap
 Overlap count with d_box. More...
 
BoxAcceptance d_box_acceptance
 Whether and how box is accepted. More...
 
tbox::Array< intd_histogram [DIM]
 Histogram for all dimensions of box d_box. More...
 
GraphNode d_node
 Distributed graph node corresponding to an accepted box. More...
 
GraphNodeContainer::iterator d_node_iterator
 Distributed graph node iterator corresponding to an accepted box on the owner. More...
 
WaitPhase d_wait_phase
 Name of wait phase when continueAlgorithm() exits before completion. More...
 
Lower-level parameters for communication.
tbox::Array< intd_send_msg
 Buffer for organizing outgoing data. More...
 
tbox::Array< intd_recv_msg
 Buffer for organizing incoming data. More...
 
tbox::AsyncCommGroupd_comm_group
 
Deubgging aid
const int d_generation
 Generation number. More...
 
int d_n_cont
 Number of times continueAlgorithm was called. More...
 

Implementations for tbox::RelaunchableJob

enum  WaitPhase {
  for_data_only, to_be_launched, reduce_histogram, bcast_acceptability,
  gather_grouping_criteria, bcast_child_groups, run_children, bcast_to_dropouts,
  completed, deallocated
}
 Names of algorithmic phases while outside of continueAlgorithm(). More...
 
enum  PhaseTag {
  reduce_histogram_tag = 0, bcast_acceptability_tag = 0, gather_grouping_criteria_tag = 0, bcast_child_groups_tag = 0,
  bcast_to_dropouts_tag = 0, total_phase_tags = 1
}
 MPI tags identifying messages. More...
 
enum  BoxAcceptance {
  undetermined = -2, hasnotag_by_owner = -1, rejected_by_calculation = 0, accepted_by_calculation = 1,
  rejected_by_owner = 2, accepted_by_owner = 3, rejected_by_recombination = 4, accepted_by_recombination = 5,
  rejected_by_dropout_bcast = 6, accepted_by_dropout_bcast = 7
}
 Candidate box acceptance state. More...
 
virtual void continueJob ()
 
virtual JobState getJobState ()
 Get the current state of the job, as a JobState enumeration. More...
 
virtual tbox::AsyncCommGroupgetCommunicationGroup ()
 Get the communication group object that the job uses for communications. More...
 
WaitPhase continueAlgorithm ()
 Continue the the BR algorithm. More...
 

Utilities to help analysis and debugging

const int d_pos
 Unique id in the binary dendogram. More...
 
CommonParamsd_common
 Common parameters shared with descendents and ancestors. More...
 
tbox::List< tbox::RelaunchableJob * >::Iterator inRelaunchQueue (tbox::RelaunchableJob *node_ptr) const
 
bool inGroup (tbox::Array< int > &group, int rank=-1) const
 

Detailed Description

template<int DIM>
class SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >

In mesh generation, the BR algorithm can be used to cluster tagged cells into boxes. This algorithm is described in Berger and Rigoutsos, IEEE Trans. on Sys, Man, and Cyber (21)5:1278-1286.

This class implements the BR algorithm to execute in a non-recursive way, in order to improve parallel efficiency over recursive implementations. To facilitate a non-recursive implementation, data in the recursive tree is maintained in a "BR dendogram", nodes of which are instances of this class.

Clarification on the uses of the word "node":

Each dendogram node is associated with a candidate box, an owner process coordinating distributed computations on the box and a group of processors participating in those computations. Should the candidate box be one of the final output boxes, the owner also owns the graph node associated with the box.

To use this class:

  1. Construct an object of type CommonParams.
  2. Construct the root node of the dendogram using the CommonParams object.
  3. Finetune the algorithm settings using the methods under "Algorithm settings".
  4. If needed, various non-algorithmic flags using set...() methods under "Methods for analysis and debugging".
  5. Initiate the algorithm using runAlgorithm() in the job_relauncher parameter in the CommonParams object.
  6. Get the output graph nodes and edges using methods under "Access to outputs".

This class creates its output in a distributed nested-level box-graph (DNBG) format. The output is distributed over all processes running the algorithm, with each process owning a subset of the DNBG. The 2 primary outputs of this implementation are:

  1. Set of graph nodes containing input tags. Each node corresponds to an output box. See getNewNodes() and hier::LayerNodeSet<DIM>.
  2. Connectivity between graph nodes on the tagged level and the new graph nodes. See getNewCnect() and hier::LayerEdgeSet<DIM>.

Member Typedef Documentation

◆ GraphNode

template<int DIM>
typedef hier::LayerNodeSet<DIM>::Node SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::GraphNode

◆ GraphNodeContainer

template<int DIM>
typedef hier::LayerNodeSet<DIM>::NodeContainer SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::GraphNodeContainer

◆ GraphNabrContainer

template<int DIM>
typedef hier::LayerEdgeSet<DIM>::NabrContainer SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::GraphNabrContainer

◆ Connectivity

◆ IntSet

template<int DIM>
typedef std::set<int> SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::IntSet

Member Enumeration Documentation

◆ OwnerMode

Enumerator
SINGLE_OWNER 
MOST_OVERLAP 
FEWEST_OWNED 
LEAST_ACTIVE 

◆ WaitPhase

template<int DIM>
enum SAMRAI::mesh::AsyncBergerRigoutsosNode::WaitPhase
private

"For_data_only" phase is when the dendogram node is only used to store data. If the node is to be executed, it enters the "to_be_launched" phase.

All names beginning with "reduce", "gather" or "bcast" refer to communication phases, where control is returned before the algorithm completes.

The "children" phase does not explicitly contain communication, but the children may perform communication.

The "completed" phase is when the algorithm has run to completion. This is where the recursive implementation would return.

The "deallocated" phase is for debugging. This phase is set by the destructor, just to help find dendogram nodes that are deallocated but somehow was referenced.

Enumerator
for_data_only 
to_be_launched 
reduce_histogram 
bcast_acceptability 
gather_grouping_criteria 
bcast_child_groups 
run_children 
bcast_to_dropouts 
completed 
deallocated 

◆ PhaseTag

template<int DIM>
enum SAMRAI::mesh::AsyncBergerRigoutsosNode::PhaseTag
private

Each message tag is the d_mpi_tag plus a PhaseTag. Originally, there were different tags for different communication phases, determined by d_mpi_tag plus a PhaseTag. But this is not really needed, so all phases use the tag d_mpi_tag. The PhaseTag type is just here in case we have to go back to using them.

Enumerator
reduce_histogram_tag 
bcast_acceptability_tag 
gather_grouping_criteria_tag 
bcast_child_groups_tag 
bcast_to_dropouts_tag 
total_phase_tags 

◆ BoxAcceptance

Note that accepted values are odd and rejected and undetermined values are even! See boxAccepted(), boxRejected() and boxHasNoTag().

It is not critical to have all values shown, but the values help in debugging.

Meaning of values:

  • "hasnotag_by_owner": histogram is truly empty (after sum reduction). We don't accept the box, but we don't split it either. (This can only happen at the root dendogram node, as child boxes are guaranteed to have tags.)
  • "(rejected|accepted)_by_calculation": decision by calculation on the owner process.
  • "(rejected|accepted)_by_owner": decision by owner process, broadcast to participants.
  • "(rejected|accepted)_by_recombination": decision by recombination on local process.
  • "(rejected|accepted)_by_dropout_bcast": decision by participant group, broadcast to the dropout group.
Enumerator
undetermined 
hasnotag_by_owner 
rejected_by_calculation 
accepted_by_calculation 
rejected_by_owner 
accepted_by_owner 
rejected_by_recombination 
accepted_by_recombination 
rejected_by_dropout_bcast 
accepted_by_dropout_bcast 

◆ JobState

Enumerator
COMMUNICATION_WAIT 
NONCOMMUNICATION_WAIT 
JOB_IS_COMPLETED 

Constructor & Destructor Documentation

◆ AsyncBergerRigoutsosNode()

template<int DIM>
SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::AsyncBergerRigoutsosNode ( CommonParams common_params,
const hier::Box< DIM > *  bound_box = NULL,
mesh::AsyncBergerRigoutsosNode< DIM > *  parent = NULL,
const int  child_number = 1 
)

Construct a node node of a BR dendogram, which you can use to run the BR algorithm.

Parameters
common_paramsThe common parameter object you plan to use to run the ABR algorithm.
bound_boxBounding box for tagged cells.
parentParent node of the node being constructed. Set to NULL if you are constructing the root node of the BR dendogram.
child_number0 if constructing left child and 1 if constructing right child. Set to 1 if you are constructing the root node of the BR dendogram.

◆ ~AsyncBergerRigoutsosNode()

Deallocate internal data.

Member Function Documentation

◆ setMaxGhostCellWidth()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::setMaxGhostCellWidth ( const hier::IntVector< DIM > &  max_gcw)

Overlap checking is done to determine nearest-neighbor relationships when generating connectivity to new graph nodes. If a box grown by this ammount intersects another box, the two boxes are considered neighbors.

By default the max ghost cell width is one in each direction.

◆ setAlgorithmAdvanceMode()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::setAlgorithmAdvanceMode ( const std::string &  algo_advance_mode)

Choices are:

  • "SYNCHRONOUS" --> wait for each communication stage to complete before moving on, thus resulting in synchronous execution.
  • "ROUND_ROBIN" --> check for completed communication stages in round-robin fashion instead of waiting for a specific one.
  • "ADVANCE_ANY" --> advance an dendogram node through its communication stage by using tbox::AsyncCommStage::advanceAny().
  • "ADVANCE_SOME" --> advance an dendogram node through its communication stage by using tbox::AsyncCommStage::advanceSome().

The default is "ADVANCE_SOME".

Asynchronous modes are NOT guaranteed to compute the output graph nodes in any particular order. The order depends on the ordering of message completion, which is not deterministic. If you require consistent outputs, we suggest you have a scheme for reordering the output boxes.

◆ setOwnerMode()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::setOwnerMode ( const std::string &  mode)
  • "MOST_OVERLAP" Ownership is given to the processor with the most overlap on the candidate box. Default.
  • "SINGLE_OWNER" In single-owner mode, the initial owner (process 0) always participates and owns all dendogram nodes.
  • "FEWEST_OWNED" Choose the processor that owns the fewest dendogram nodes when the choice is made. This is meant to relieve bottle-necks caused by excessive ownership.
  • "LEAST_ACTIVE" Choose the processor that participates in the fewest number of dendogram nodes when the choice is made. This is meant to relieve bottle-necks caused by excessive participation.

Experiments show that "MOST_OVERLAP" gives the best clustering speed, while "SINGLE_OWNER" may give a faster output globalization (since you don't need an all-gather).

◆ setUseLevelBoxes()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::setUseLevelBoxes ( bool  flag)

If off, the global level boxes will neither be used nor be generated. This feature is in anticipation of future support for the distributed nested-level box graph in SAMRAI.

◆ setComputeEdges()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::setComputeEdges ( int  compute_edges)

Valid values to set are:

  • 0 = No edge computation.
  • 1 = Compute directed edges from input to output graph nodes. With this option, it is possible to determine output nodes neighboring any input nodes, but not possible to determine input nodes neighboring a specific output node.
  • 2 = Compute directed edges from input to output graph nodes as well as the reverse. With this option, it is possible to determine output nodes neighboring any input nodes, as well as input nodes neighboring any output node. This is accomplished using an additional edge-sharing communication after all graph nodes have been created.

By default, the value is 2.

◆ runAlgorithm()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::runAlgorithm ( )

◆ getNewNodes()

template<int DIM>
const hier::LayerNodeSet<DIM>& SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::getNewNodes ( ) const

◆ getNewCnect()

template<int DIM>
const Connectivity& SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::getNewCnect ( ) const

The connectivity data generated depend on the flag set using setComputeEdges().

◆ printClassData()

template<int DIM>
virtual void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::printClassData ( std::ostream &  os,
int  detail_level = 0 
) const
virtual

◆ getMaxNodes()

template<int DIM>
int SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::getMaxNodes ( ) const

◆ getMaxGeneration()

template<int DIM>
int SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::getMaxGeneration ( ) const

◆ getMaxOwnership()

template<int DIM>
int SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::getMaxOwnership ( ) const

◆ getAvgNumberOfCont()

template<int DIM>
double SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::getAvgNumberOfCont ( ) const

◆ getMaxNumberOfCont()

template<int DIM>
int SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::getMaxNumberOfCont ( ) const

◆ getNumBoxesGenerated()

template<int DIM>
int SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::getNumBoxesGenerated ( ) const

◆ setLogNodeHistory()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::setLogNodeHistory ( bool  flag)

◆ continueJob()

template<int DIM>
virtual void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::continueJob ( )
privatevirtual

Continue the user-defined job.

Returns
whether job finished.

Implements SAMRAI::tbox::RelaunchableJob.

◆ getJobState()

template<int DIM>
virtual JobState SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::getJobState ( )
privatevirtual

◆ getCommunicationGroup()

template<int DIM>
virtual tbox::AsyncCommGroup* SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::getCommunicationGroup ( )
privatevirtual

◆ continueAlgorithm()

template<int DIM>
WaitPhase SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::continueAlgorithm ( )
private

Parameters for finding boxes are internal. They should be set in the constructor.

In parallel, this the method may return before algorithm is completed. In serial, no communication is done, so the algorithm IS completed when this method returns. The method is completed if it returns WaitPhase::completed. This method may and should be called multiple times as long as the algorithm has not completed.

If this method returns before the algorithm is complete, this object will have put itself on the leaf queue to be checked for completion later.

Returns
The communication phase currently running.

◆ makeLocalTagHistogram()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::makeLocalTagHistogram ( )
private

◆ reduceHistogram_start()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::reduceHistogram_start ( )
private

◆ reduceHistogram_check()

template<int DIM>
bool SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::reduceHistogram_check ( )
private

◆ computeMinimalBoundingBoxForTags()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::computeMinimalBoundingBoxForTags ( )
private

◆ acceptOrSplitBox()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::acceptOrSplitBox ( )
private

◆ broadcastAcceptability_start()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::broadcastAcceptability_start ( )
private

◆ broadcastAcceptability_check()

template<int DIM>
bool SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::broadcastAcceptability_check ( )
private

◆ countOverlapWithLocalPatches()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::countOverlapWithLocalPatches ( )
private

◆ gatherGroupingCriteria_start()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::gatherGroupingCriteria_start ( )
private

◆ gatherGroupingCriteria_check()

template<int DIM>
bool SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::gatherGroupingCriteria_check ( )
private

◆ formChildGroups()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::formChildGroups ( )
private

◆ formChildGroupsUsingLevelBoxes()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::formChildGroupsUsingLevelBoxes ( )
private

◆ broadcastChildGroups_start()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::broadcastChildGroups_start ( )
private

◆ broadcastChildGroups_check()

template<int DIM>
bool SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::broadcastChildGroups_check ( )
private

◆ runChildren_start()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::runChildren_start ( )
private

◆ runChildren_check()

template<int DIM>
bool SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::runChildren_check ( )
private

◆ broadcastToDropouts_start()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::broadcastToDropouts_start ( )
private

◆ broadcastToDropouts_check()

template<int DIM>
bool SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::broadcastToDropouts_check ( )
private

◆ createLayerNode()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::createLayerNode ( )
private

◆ eraseLayerNode()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::eraseLayerNode ( )
private

◆ computeNewGraphEdges()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::computeNewGraphEdges ( )
private

◆ shareNewEdgesWithOwners()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::shareNewEdgesWithOwners ( )
private

◆ findOwnerInGroup()

template<int DIM>
int SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::findOwnerInGroup ( int  owner,
const tbox::Array< int > &  group 
) const
private

◆ claimMPITag()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::claimMPITag ( )
private

◆ computeCommunicationTreeDegree()

template<int DIM>
int SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::computeCommunicationTreeDegree ( int  group_size) const
private

◆ findZeroCutPoint()

template<int DIM>
bool SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::findZeroCutPoint ( int cut_pt,
const int  dim 
)
private

◆ findZeroCutSwath()

template<int DIM>
bool SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::findZeroCutSwath ( int cut_lo,
int cut_hi,
const int  dim 
)
private

◆ cutAtLaplacian()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::cutAtLaplacian ( int cut_pt,
const int  dim,
const int  lo,
const int  hi,
const int  min_size 
)
private

◆ getHistogramBufferSize()

template<int DIM>
int SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::getHistogramBufferSize ( const hier::Box< DIM > &  box) const
private

◆ putHistogramToBuffer()

template<int DIM>
int* SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::putHistogramToBuffer ( int buffer)
private

◆ getHistogramFromBuffer()

template<int DIM>
int* SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::getHistogramFromBuffer ( int buffer)
private

◆ putBoxToBuffer()

template<int DIM>
int* SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::putBoxToBuffer ( const hier::Box< DIM > &  box,
int buffer 
) const
private

◆ getBoxFromBuffer()

template<int DIM>
int* SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::getBoxFromBuffer ( hier::Box< DIM > &  box,
int buffer 
) const
private

◆ computeDropoutGroup()

template<int DIM>
void SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::computeDropoutGroup ( const tbox::Array< int > &  main_group,
const tbox::Array< int > &  sub_group,
tbox::Array< int > &  dropouts,
const int  add_group 
) const
private

◆ intToBoxAcceptance()

template<int DIM>
BoxAcceptance SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::intToBoxAcceptance ( int  i) const
private

◆ boxAccepted()

template<int DIM>
bool SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::boxAccepted ( ) const
inlineprivate

◆ boxRejected()

template<int DIM>
bool SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::boxRejected ( ) const
inlineprivate

◆ boxHasNoTag()

template<int DIM>
bool SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::boxHasNoTag ( ) const
inlineprivate

◆ inRelaunchQueue()

template<int DIM>
tbox::List<tbox::RelaunchableJob*>::Iterator SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::inRelaunchQueue ( tbox::RelaunchableJob node_ptr) const
private

◆ inGroup()

template<int DIM>
bool SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::inGroup ( tbox::Array< int > &  group,
int  rank = -1 
) const
private

Member Data Documentation

◆ d_pos

template<int DIM>
const int SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_pos
private
  • To have succinct formula, the root dendogram node has d_pos of 1.
  • Parent id is d_pos/2
  • Left child id is 2*d_pos
  • Right child id is 2*d_pos+1
  • Generation number is ln(d_pos)

This parameter is only used for debugging.

The id of a node grows exponentially with each generation. If the position in the binary tree is too big to be represented by an integer, d_pos is set to -1 for a left child and -2 for a right child.

◆ d_common

template<int DIM>
CommonParams* SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_common
private

Only the root of the tree allocates the common parameters. For all others, this pointer is set by the parent.

◆ d_parent

template<int DIM>
AsyncBergerRigoutsosNode* SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_parent
private

◆ d_lft_child

template<int DIM>
AsyncBergerRigoutsosNode* SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_lft_child
private

◆ d_rht_child

template<int DIM>
AsyncBergerRigoutsosNode* SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_rht_child
private

◆ d_box

template<int DIM>
hier::Box<DIM> SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_box
private

◆ d_owner

template<int DIM>
int SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_owner
private

◆ d_group

template<int DIM>
tbox::Array<int> SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_group
private

◆ d_mpi_tag

template<int DIM>
int SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_mpi_tag
private

The tag is determined by on the process that owns the parent when the parent decides to split its box. The tags are broadcasted along with the children boxes.

◆ d_overlap

template<int DIM>
int SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_overlap
private

◆ d_box_acceptance

template<int DIM>
BoxAcceptance SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_box_acceptance
private
See also
BoxAcceptance.

◆ d_histogram

template<int DIM>
tbox::Array<int> SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_histogram[DIM]
private

If local process is d_owner, this is initially the local histogram, then later, the reduced histogram. If not, it is just the local histogram.

◆ d_node

template<int DIM>
GraphNode SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_node
private

On the owner process, this belongs in a hier::LayerNodeSet<DIM> object. On contributor nodes, this is used to identify the layer node id assigned by the owner. The layer node id is important for computing neighbor data.

◆ d_node_iterator

template<int DIM>
GraphNodeContainer::iterator SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_node_iterator
private

This is relevant only on the owner, where the d_node is in a container. On contributors, the graph node is non-local and stands alone.

◆ d_wait_phase

template<int DIM>
WaitPhase SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_wait_phase
private

◆ d_send_msg

template<int DIM>
tbox::Array<int> SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_send_msg
private

◆ d_recv_msg

template<int DIM>
tbox::Array<int> SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_recv_msg
private

◆ d_comm_group

template<int DIM>
tbox::AsyncCommGroup* SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_comm_group
private

◆ d_generation

template<int DIM>
const int SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_generation
private

The generation number is the parent's generation number plus 1. The root has generation number 1.

◆ d_n_cont

template<int DIM>
int SAMRAI::mesh::AsyncBergerRigoutsosNode< DIM >::d_n_cont
private

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