#include <BoxLayout.H>
Inheritance diagram for BoxLayout:


Modification functions | |
| DataIndex | addBox (const Box &box, int procID) |
| virtual void | close () |
| virtual void | deepCopy (const BoxLayout &a_source) |
| bool | coarsenable (int refRatio) const |
| void | setProcID (const LayoutIndex &a_index, unsigned int a_procID) |
| void | sort () |
| void | aliasAddBox (const Box &box) |
| void | aliasClose () |
| void | coarsen (BoxLayout &output, const BoxLayout &input, int refinement) |
| void | refine (BoxLayout &output, const BoxLayout &input, int refinement) |
Public Methods | |
Constructors, destructors, assignments, defines | |
| BoxLayout () | |
| BoxLayout (const Vector< Box > &a_boxes, const Vector< int > &a_procIDs) | |
| virtual | ~BoxLayout () |
| BoxLayout & | operator= (const BoxLayout &a_rhs) |
| virtual void | define (const Vector< Box > &a_boxes, const Vector< int > &a_procIDs) |
Accessors | |
| const Box & | operator[] (const LayoutIndex &it) const |
| Box & | operator[] (const LayoutIndex &it) |
| Box | get (const LayoutIndex &it) const |
| Box | get (const LayoutIterator &it) const |
| Box | get (const DataIterator &it) const |
| unsigned int | procID (const LayoutIndex &a_index) const |
| int | numBoxes (const int procID) const |
| unsigned int | size () const |
| unsigned int | index (const LayoutIndex &index) const |
Checks | |
| bool | operator== (const BoxLayout &rhs) const |
| bool | eq (const BoxLayout &rhs) const |
| bool | isClosed () const |
| bool | isSorted () const |
| bool | check (const LayoutIndex &index) const |
Iterators | |
| DataIterator | dataIterator () const |
| Parallel iterator. | |
| LayoutIterator | layoutIterator () const |
| Iterator that processes through ALL the boxes in a BoxLayout. | |
I/O functions | |
| void | print () const |
| void | p () const |
Protected Methods | |
| void | setIndexVector () |
Protected Attributes | |
| RefCountedPtr< Vector< Entry > > | m_boxes |
| RefCountedPtr< Vector< unsigned int > > | m_index |
| RefCountedPtr< int > | m_layout |
| RefCountedPtr< bool > | m_closed |
| RefCountedPtr< DataIterator > | m_dataIterator |
Friends | |
| class | LayoutIterator |
| class | DataIterator |
A BoxLayout is a collection of Box objects that are assigned to process numbers. Each box is associated with only one process. Processes are numbered from 0 to n-1 (for a job with n processes).
A BoxLayout can be either open or closed.
Open BoxLayout:
BoxLayout is an explicitly ref-counted object.
Assignment and copy are compiler-generated. They increment the refcount on the contained data members. They perform shallow, ref-counted operations.
Refcounting is a process whereby multiple instantiations make use of a single implementation of that object and keep a tally of how many instantiations are sharing. Thus:
BoxLayout b1(boxes, procIDs);
b1 ----> refcount = 1
----> m_boxes
----> m_processors
BoxLayout b2(b1)
b1 ----> refcount = 2 <---- b2
----> m_boxes <----
----> m_processors <----
BoxLayout b3;
b3 = b2;
b1 ----> refcount = 3 <---- b2
----> m_boxes <----
----> m_processors <----
^^^
|||
b3
|
|
Construct BoxLayout with no boxes. |
|
||||||||||||
|
Construct from a Vector of Boxes and a Vector of processor assignments. On exit, the BoxLayout will be closed. |
|
|
Ref-counted destruction. Once the last reference to the implementation of this class is destroyed, the data members are cleaned up |
|
||||||||||||
|
Add a box to this BoxLayout. Takes the processor assignment. The input box is copied. BoxLayout must be "open" for this operation, or else a runtime error will occur. |
|
|
Not a user function, used in Chombo interface to AMRData.H interoperability tools. |
|
|
Not a user function, used in Chombo interface to AMRData.H interoperability tools. |
|
|
not a user function |
|
|
Mark this BoxLayout as complete and unchangeable. Reimplemented in DisjointBoxLayout. |
|
|
returns true iff: |
|
|
Parallel iterator. Parallel iterator. Returns DataIndex object that corresponds to boxes on the local processor only. |
|
|
Actual deep copy operation. New object created with copied data. This object disassociates itself with original implementation safely. This object now is considered 'open' and can be non-const modified. There is no assurance that the order in which this BoxLayout is indexed corresponds to the indexing of a_source.
BoxLayout b1(boxes, procIDs);
b1 ----> refcount = 1
----> m_boxes
----> m_processors
BoxLayout b2(b1)
b1 ----> refcount = 2 <---- b2
----> m_boxes <----
----> m_processors <----
BoxLayout b3;
b3.deepCopy(b2);
b1 ----> refcount = 2 <---- b2 b3 ----> refcount = 1
----> m_boxes <---- ----> m_boxes
----> m_processors <---- ----> m_processors
Reimplemented in DisjointBoxLayout. |
|
||||||||||||
|
Define this BoxLayout from a Vector of Boxes and a Vector of processor assignments. Any pre-existing layout will be lost (ref-count dropped by one). The processor assignment Vector must be the same length as the Box Vector. On exit, the BoxLayout will be closed. Reimplemented in DisjointBoxLayout. |
|
|
Refcounted pointer check. Return |
|
|
Get box indexed by it. |
|
|
Get box indexed by it. |
|
|
Get box indexed by it. As a consequence of the C++ compiler being free to choose which version of operator[] when the object is technically non-const, we very often get 'BoxLayout closed' errors. This is a non-overloaded get method. |
|
|
Not a user function. Used in I/O routine. |
|
|
Return |
|
|
Return |
|
|
Iterator that processes through ALL the boxes in a BoxLayout. Iterator that processes through ALL the boxes in a BoxLayout. If BoxLayout is closed, then LayoutIterator will return the Boxes in sorted order. |
|
|
Returns the number of boxes assigned to a given procID. |
|
|
Ref-counted assignment. |
|
|
Refcounted pointer check. Return |
|
|
accessor operator. See also get(const DataIndex&). |
|
|
const accessor operator. See also get(const DataIndex&). |
|
|
Invokes cout<<*this; pretty-print dump of BoxLayout. |
|
|
Invokes cout<<*this; pretty-print dump of BoxLayout. |
|
|
Returns the processor to which this box has been assigned. Not a user function, at least, not a new user function. It can be used safely at anytime, closed or open. A person needing this level of knowledge of the processor assignment should have non-trivial needs, like writing your own load balancer or such. Most user-level parallel coding needs can be addressed using the DataIterator class. |
|
|
|
|
||||||||||||
|
Assign a Box in the BoxLayout to a processor. Requires the BoxLayout to be open. |
|
|
Returns the total number of boxes in the BoxLayout. |
|
|
Sort the boxes of an open BoxLayout. No change if the BoxLayout is closed. |
|
||||||||||||||||
|
Coarsen a BoxLayout:
output returns from this function closed. LayoutIterators from input and output can perform interchangeably. |
|
|
|
|
|
|
|
||||||||||||||||
|
Refine a BoxLayout:
output returns from this function closed. LayoutIterators from input and output can perform interchangeably. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.2.16