#include <source/algorithm/femutils/locally_active/LocallyActiveDataPatchBoundaryNodeSum.h>
Public Member Functions | |
LocallyActiveDataPatchBoundaryNodeSum (const std::string &object_name) | |
Constructor initializes object to default (mostly undefined) state. | |
~LocallyActiveDataPatchBoundaryNodeSum () | |
Destructor for the schedule releases all internal storage. | |
void | registerSum (int node_data_id) |
Register node data with given patch data identifier for summing. | |
void | setupSum (tbox::Pointer< hier::PatchLevel< DIM > > level, tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > > level_mgr) |
Set up summation operations for node data across shared nodes on a single level. | |
void | setupSum (tbox::Pointer< hier::PatchHierarchy< DIM > > hierarchy, const int coarsest_level, const int finest_level) |
Set up for summation operations for node data at shared nodes across a range of hierarchy levels. The active patches for each node quantity on each level is accumed to be defined by the corresponding hier::LocallyActiveDataPatchLevelManager<DIM> objects held by the hier::LocallyActiveVariableDatabase<DIM> Singleton object. | |
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. | |
Static Public Member Functions | |
static int | getNumSharedPatchDataSlots (int max_variables_to_register) |
Static function used to predetermine number of patch data slots ahared among all LocallyActiveDataPatchBoundaryNodeSum objects (i.e., static members). To get a correct count, this routine should only be called once. | |
static int | getNumUniquePatchDataSlots (int max_variables_to_register) |
Static function used to predetermine number of patch data slots unique to each LocallyActiveDataPatchBoundaryNodeSum object (i.e., non-static members). To get a correct count, this routine should only be called exactly once for each object that will be constructed. |
NOTE: Currently, the functionality to sum data across multiple hierarchy levels is unavailable.
Usage of a patch boundry node sum involves the following sequence of steps:
* LocallyActiveDataPatchBoundaryNodeSum<DIM> my_node_sum("My Node Sum"); *
* my_node_sum.registerSum(node_data_id1); * my_node_sum.registerSum(node_data_id2); * etc... *
* my_node_sum.setupSum(level, level_mgr); // single level * -- or -- * my_node_sum.setupSum(hierarchy, coarsest_ln, finest_ln); // multiple levels *
* 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 LocallyActiveDataPatchBoundaryNodeSum<DIM> object is created.
SAMRAI::algs::LocallyActiveDataPatchBoundaryNodeSum< DIM >::LocallyActiveDataPatchBoundaryNodeSum | ( | const std::string & | object_name | ) |
Constructor initializes object to default (mostly undefined) state.
object_name | const std::string reference for name of object used in error reporting. When assertion checking is on, the string cannot be empty. |
SAMRAI::algs::LocallyActiveDataPatchBoundaryNodeSum< DIM >::~LocallyActiveDataPatchBoundaryNodeSum | ( | ) |
Destructor for the schedule releases all internal storage.
int SAMRAI::algs::LocallyActiveDataPatchBoundaryNodeSum< DIM >::getNumSharedPatchDataSlots | ( | int | max_variables_to_register | ) | [static] |
Static function used to predetermine number of patch data slots ahared among all LocallyActiveDataPatchBoundaryNodeSum objects (i.e., static members). To get a correct count, this routine should only be called once.
max_variables_to_register | integer value indicating maximum number of patch data ids that will be registered with node sum objects. |
int SAMRAI::algs::LocallyActiveDataPatchBoundaryNodeSum< DIM >::getNumUniquePatchDataSlots | ( | int | max_variables_to_register | ) | [static] |
Static function used to predetermine number of patch data slots unique to each LocallyActiveDataPatchBoundaryNodeSum object (i.e., non-static members). To get a correct count, this routine should only be called exactly once for each object that will be constructed.
max_variables_to_register | integer value indicating maximum number of patch data ids that will be registered with node sum objects. |
void SAMRAI::algs::LocallyActiveDataPatchBoundaryNodeSum< DIM >::registerSum | ( | int | node_data_id | ) |
Register node data with given patch data identifier for summing.
node_data_id | integer patch data index for node data to sum |
void SAMRAI::algs::LocallyActiveDataPatchBoundaryNodeSum< DIM >::setupSum | ( | tbox::Pointer< hier::PatchLevel< DIM > > | level, | |
tbox::Pointer< hier::LocallyActiveDataPatchLevelManager< DIM > > | level_mgr | |||
) |
Set up summation operations for node data across shared nodes on a single level.
If the other setupSum() function for a range of hierarchy levels has been called previously for this object, an error will result.
level | pointer to level on which to perform node sum | |
level_mgr | pointer to level mgr defining active patches for node data registered with the node sum object |
void SAMRAI::algs::LocallyActiveDataPatchBoundaryNodeSum< DIM >::setupSum | ( | tbox::Pointer< hier::PatchHierarchy< DIM > > | hierarchy, | |
const int | coarsest_level, | |||
const int | finest_level | |||
) |
Set up for summation operations for node data at shared nodes across a range of hierarchy levels. The active patches for each node quantity on each level is accumed to be defined by the corresponding hier::LocallyActiveDataPatchLevelManager<DIM> objects held by the hier::LocallyActiveVariableDatabase<DIM> Singleton object.
If the other setupSum() function for a single level has been called previously for this object, an error will result.
hierarchy | pointer to hierarchy on which to perform node sum | |
coarsest_level | coarsest level number for node sum | |
finest_level | finest level number for node sum |
void SAMRAI::algs::LocallyActiveDataPatchBoundaryNodeSum< DIM >::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.
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.
fill_hanging_nodes | Optional boolean value specifying whether hanging node values should be set to values interpolated from neighboring non-hanging node values. The default is false. |