IBAMR  IBAMR version 0.19.
Public Member Functions | Private Types | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM > Class Template Reference

Class MblkPatchBoundaryNodeSum provides operations for summing node data values at nodes that are shared by multiple patches on a single level or across multiple hierarchy levels.
More...

#include <MblkPatchBoundaryNodeSum.h>

Public Member Functions

 MblkPatchBoundaryNodeSum (const std::string &object_name, tbox::Pointer< hier::MultiblockPatchHierarchy< DIM > > hierarchy)
 Constructor initializes object to default (mostly undefined) state. More...
 
 ~MblkPatchBoundaryNodeSum ()
 Destructor for the schedule releases all internal storage. More...
 
void registerSum (int node_data_id)
 Register node data with given patch data identifier for summing. More...
 
void setupSum (tbox::Pointer< hier::MultiblockPatchLevel< DIM > > level)
 Set up summation operations for node data across shared nodes on a single level. More...
 
void computeSum (const bool fill_hanging_nodes=false) const
 Compute sum of node values at each shared node and replace each such node value with the corresponding sum.
More...
 

Private Types

enum  PATCH_BDRY_NODE_SUM_DATA_ID { ID_UNDEFINED = -1 }
 

Private Member Functions

void doLevelSum (tbox::Pointer< hier::MultiblockPatchLevel< DIM > > level) const
 
void copyNodeToOuternodeOnLevel (tbox::Pointer< hier::MultiblockPatchLevel< DIM > > level, const tbox::Array< int > &node_data_id, const tbox::Array< int > &onode_data_id) const
 
void copyOuternodeToNodeOnLevel (tbox::Pointer< hier::MultiblockPatchLevel< DIM > > level, const tbox::Array< int > &onode_data_id, const tbox::Array< int > &node_data_id) const
 

Private Attributes

std::string d_object_name
 
bool d_setup_called
 
int d_num_reg_sum
 
tbox::Array< intd_user_node_data_id
 
tbox::Array< intd_user_node_depth
 
tbox::Array< intd_num_registered_data_by_depth
 
tbox::Array< tbox::Pointer< hier::Variable< DIM > > > d_tmp_onode_src_variable
 
tbox::Array< tbox::Pointer< hier::Variable< DIM > > > d_tmp_onode_dst_variable
 
tbox::Array< intd_onode_src_id
 
tbox::Array< intd_onode_dst_id
 
hier::ComponentSelector d_onode_src_data_set
 
hier::ComponentSelector d_onode_dst_data_set
 
tbox::Pointer< hier::MultiblockPatchLevel< DIM > > d_level
 
tbox::Pointer< hier::MultiblockPatchHierarchy< DIM > > d_hierarchy
 
int d_coarsest_level
 
int d_finest_level
 
bool d_level_setup_called
 
bool d_hierarchy_setup_called
 
tbox::Pointer< xfer::RefineTransactionFactory< DIM > > d_sum_transaction_factory
 
tbox::Array< tbox::Pointer< xfer::MultiblockRefineSchedule< DIM > > > d_single_level_sum_schedule
 

Static Private Attributes

static int s_instance_counter
 
static tbox::Array< tbox::Array< int > > s_onode_src_id_array
 
static tbox::Array< tbox::Array< int > > s_onode_dst_id_array
 

Detailed Description

template<int DIM>
class SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >

Usage of a patch boundry node sum involves the following sequence of steps:

  1. Construct a patch boundry node sum object. For example,
    *         MblkPatchBoundaryNodeSum<DIM> my_node_sum("My Node Sum");
    *     
  2. Register node data quantities to sum. For example,
    *         my_node_sum.registerSum(node_data_id1);
    *         my_node_sum.registerSum(node_data_id2);
    *         etc...
    *     
  3. Setup the sum operations for either single level or a range of levels in a patch hierarchy. For example,
    *         my_node_sum.setupSum(level);    // single level
    *         -- or --
    *         my_node_sum.setupSum(hierarchy, coarsest_ln, finest_ln);  // multiple levels
    *     
  4. Execute the sum operation. For example,
    *         my_node_sum.computeSum()
    *     

The result of these operations is that each node patch data value associated with the registered ids at patch boundaries, on either the single level or range of hierarchy levels, is replaced by the sum of all data values at the node.

Note that only one of the setupSum() functions may be called once a MblkPatchBoundaryNodeSum<DIM> object is created.

Member Enumeration Documentation

◆ PATCH_BDRY_NODE_SUM_DATA_ID

Enumerator
ID_UNDEFINED 

Constructor & Destructor Documentation

◆ MblkPatchBoundaryNodeSum()

template<int DIM>
SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::MblkPatchBoundaryNodeSum ( const std::string &  object_name,
tbox::Pointer< hier::MultiblockPatchHierarchy< DIM > >  hierarchy 
)
Parameters
object_nameconst std::string reference for name of object used in error reporting. When assertion checking is on, the string cannot be empty.
hierarchythe hierarchy.

◆ ~MblkPatchBoundaryNodeSum()

Member Function Documentation

◆ registerSum()

template<int DIM>
void SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::registerSum ( int  node_data_id)
Parameters
node_data_idinteger patch data index for node data to sum

The node data id must be a valid patch data id (>=0) and must correspond to node-centered double data. If not, an error will result.

◆ setupSum()

template<int DIM>
void SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::setupSum ( tbox::Pointer< hier::MultiblockPatchLevel< DIM > >  level)

If the other setupSum() function for a range of hierarchy levels has been called previously for this object, an error will result.

Parameters
levelpointer to level on which to perform node sum

When assertion checking is active, the level pointer cannot be null.

◆ computeSum()

template<int DIM>
void SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::computeSum ( const bool  fill_hanging_nodes = false) const

At the end of this method, all values at shared node locations on patch boundaries (on levels indicated by the call to one of the setupSum() routines) will have the same value.

When the setupSum() method taking a range of patch levels in a hierarchy is called, this method will compute the sum of nodal quantities at all the specified patch boundaries. For nodes at a coarse-fine boundary, nodal sums will only be performed where the coarse and fine nodes overlap. A node on a fine level that is not also a node on the next coarser level (a so-called "hanging node") will not be summed.

The boolean "fill_hanging_nodes" argument specifies whether the the hanging nodes should be filled using linearly interpolated values from neighboring non-hanging nodes (i.e. those that overlap nodes on a coarse level). The correct steps required to deal with hanging nodes is algorithm dependent so, if left unspecified, values at the hanging nodes will not be adjusted. However, because many algorithms average hanging nodes we provide the capability to do it here. Note that the hanging node interpolation provided does not take into consideration the spatial location of the nodes. So the interpolation may not be correct for coordinate systems other than standard Cartesian grid geometry.

Parameters
fill_hanging_nodesOptional boolean value specifying whether hanging node values should be set to values interpolated from neighboring non-hanging node values. The default is false.

◆ doLevelSum()

template<int DIM>
void SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::doLevelSum ( tbox::Pointer< hier::MultiblockPatchLevel< DIM > >  level) const
private

◆ copyNodeToOuternodeOnLevel()

template<int DIM>
void SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::copyNodeToOuternodeOnLevel ( tbox::Pointer< hier::MultiblockPatchLevel< DIM > >  level,
const tbox::Array< int > &  node_data_id,
const tbox::Array< int > &  onode_data_id 
) const
private

◆ copyOuternodeToNodeOnLevel()

template<int DIM>
void SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::copyOuternodeToNodeOnLevel ( tbox::Pointer< hier::MultiblockPatchLevel< DIM > >  level,
const tbox::Array< int > &  onode_data_id,
const tbox::Array< int > &  node_data_id 
) const
private

Member Data Documentation

◆ s_instance_counter

template<int DIM>
int SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::s_instance_counter
staticprivate

◆ s_onode_src_id_array

template<int DIM>
tbox::Array< tbox::Array<int> > SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::s_onode_src_id_array
staticprivate

◆ s_onode_dst_id_array

template<int DIM>
tbox::Array< tbox::Array<int> > SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::s_onode_dst_id_array
staticprivate

◆ d_object_name

template<int DIM>
std::string SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_object_name
private

◆ d_setup_called

template<int DIM>
bool SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_setup_called
private

◆ d_num_reg_sum

template<int DIM>
int SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_num_reg_sum
private

◆ d_user_node_data_id

template<int DIM>
tbox::Array<int> SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_user_node_data_id
private

◆ d_user_node_depth

template<int DIM>
tbox::Array<int> SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_user_node_depth
private

◆ d_num_registered_data_by_depth

template<int DIM>
tbox::Array<int> SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_num_registered_data_by_depth
private

◆ d_tmp_onode_src_variable

template<int DIM>
tbox::Array< tbox::Pointer< hier::Variable<DIM> > > SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_tmp_onode_src_variable
private

◆ d_tmp_onode_dst_variable

template<int DIM>
tbox::Array< tbox::Pointer< hier::Variable<DIM> > > SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_tmp_onode_dst_variable
private

◆ d_onode_src_id

template<int DIM>
tbox::Array<int> SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_onode_src_id
private

◆ d_onode_dst_id

template<int DIM>
tbox::Array<int> SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_onode_dst_id
private

◆ d_onode_src_data_set

template<int DIM>
hier::ComponentSelector SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_onode_src_data_set
private

◆ d_onode_dst_data_set

template<int DIM>
hier::ComponentSelector SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_onode_dst_data_set
private

◆ d_level

template<int DIM>
tbox::Pointer<hier::MultiblockPatchLevel<DIM> > SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_level
private

◆ d_hierarchy

template<int DIM>
tbox::Pointer<hier::MultiblockPatchHierarchy<DIM> > SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_hierarchy
private

◆ d_coarsest_level

template<int DIM>
int SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_coarsest_level
private

◆ d_finest_level

template<int DIM>
int SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_finest_level
private

◆ d_level_setup_called

template<int DIM>
bool SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_level_setup_called
private

◆ d_hierarchy_setup_called

template<int DIM>
bool SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_hierarchy_setup_called
private

◆ d_sum_transaction_factory

template<int DIM>
tbox::Pointer< xfer::RefineTransactionFactory<DIM> > SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_sum_transaction_factory
private

◆ d_single_level_sum_schedule

template<int DIM>
tbox::Array< tbox::Pointer<xfer::MultiblockRefineSchedule<DIM> > > SAMRAI::algs::MblkPatchBoundaryNodeSum< DIM >::d_single_level_sum_schedule
private

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