Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

ot::DA Class Reference

Class that manages the octree mesh. More...

#include <oda.h>

List of all members.

Public Member Functions

std::vector< ot::TreeNodegetBlocks ()
unsigned int getInputSize ()
unsigned int getLocalBufferSize ()
std::vector< ot::TreeNodegetMinAllBlocks ()
 A function to get information about the partitioning of the mesh.
unsigned int getNumBlocks ()
bool iAmActive ()
bool isLUTcompressed ()
void updateQuotientCounter ()
 Call this function, if a call to getNodeIndices() is skipped within the loop and if the element-to-node mappings are compressed.
Array access functions
bool computedLocalToGlobal ()
bool computedLocalToGlobalElems ()
int computeLocalToGlobalElemMappings ()
 Computes mappings between the local and global numberings for elemental buffers. This function is probably required only for developers. Typical users will not need this. This function should not be called more than once for a given mesh.
int computeLocalToGlobalMappings ()
 Computes mappings between the local and global numberings for nodal buffers.
int createActiveMatrix (Mat &M, MatType mtype, unsigned int dof=1)
 Similar to createMatrix, except the matrix is only distributed on the active processors.
int createActiveVector (Vec &local, bool isElemental, bool isGhosted, unsigned int dof=1)
 Similar to createVector(), except the vector is only distributed on the active processors.
int createMatrix (Mat &M, MatType mtype, unsigned int dof=1)
 Returns a PETSc Matrix of appropriate size of the requested type.
template<typename T>
int createVector (std::vector< T > &local, bool isElemental, bool isGhosted, unsigned int dof=1)
 Returns a std. vector of appropriate size of the requested type.
int createVector (Vec &local, bool isElemental, bool isGhosted, unsigned int dof=1)
 Returns a PETSc vector of appropriate size of the requested type.
int setValuesInMatrix (Mat mat, std::vector< ot::MatRecord > &records, unsigned int dof, InsertMode mode)
 a wrapper for setting values into the Matrix. This internally calls PETSc's MatSetValues() function.
template<typename T>
int vecGetBuffer (std::vector< T > &in, T *&out, bool isElemental, bool isGhosted, bool isReadOnly, unsigned int dof=1)
 Returns a C-array of type T from a distributed std vector for quick local access.
int vecGetBuffer (Vec in, PetscScalar *&out, bool isElemental, bool isGhosted, bool isReadOnly, unsigned int dof=1)
 Returns a C-array of type PetscScalar from a PETSc Vec for quick local access.
template<typename T>
int vecRestoreBuffer (std::vector< T > &in, T *out, bool isElemental, bool isGhosted, bool isReadOnly, unsigned int dof=1)
 Restores the C-array of type T to a distributed std vector after quick local access.
int vecRestoreBuffer (Vec in, PetscScalar *out, bool isElemental, bool isGhosted, bool isReadOnly, unsigned int dof=1)
 Restores the C-array of type PetscScalar to a PETSc Vec after quick local access.
Element/Node access and iterators
unsigned int curr ()
 Returns an index to the begining of the current loop. The loop needs to be initialized using a call to init().
unsigned int currWithInfo ()
 Returns an index to the begining of the current loop. The loop needs to be initialized using a call to init(). This also stores the current position within an internal structure. This can be used to re-start a loop using the FROM_STORED loopType.
template<ot::DA_FLAGS::loopType type>
unsigned int end ()
 Returns an index to the end of the current loop. The loop needs to be initialized using a call to init().
unsigned char getChildNumber ()
 Returns the child number of the current element.
unsigned char getFlag (unsigned int i)
 Returns the compressed representation of the octant at index i.
unsigned char getHangingNodeIndex (unsigned int i)
 Returns information pertaining to which of the elements 8 nodes are hanging.
unsigned char getLevel (unsigned int i)
 Returns the level of the octant specified by the index.
int getNodeIndices (unsigned int *nodes)
 Returns the indices to the nodes of the current element.
unsigned char getTypeMask (unsigned int i)
 Returns the type mask for the given element.
template<ot::DA_FLAGS::loopType type>
void init ()
 Initializes the internal counters for a new loop. Remember that the DA currently only supports elemental loops.
bool isGhost (unsigned int i)
 Returns true if the element/node specified by the index is a Ghost.
bool isHanging (unsigned int i)
 Returns true if the element specified by the index contains a hanging node.
bool isNode (unsigned int i)
 Returns true if the element specified by the index corresponds to a node.
template<ot::DA_FLAGS::loopType type>
unsigned int next ()
 Returns an index to the next element of the current loop. The loop needs to be initialized using a call to initializeLoopCounter().
Constructors and destructors
 DA (unsigned int dummy, std::vector< ot::TreeNode > &in, MPI_Comm comm, MPI_Comm inputActiveComm, bool compressLut=false, const std::vector< ot::TreeNode > *blocksPtr=NULL, bool *iAmActive=NULL)
 Private constructor used from within DAMG. This assumes that the input already included positive boundaries, the original octree has been embedded into the larger octree and the maxdepth has been set apropriately and the octants without hanging anchors have been tagged.
 DA (std::vector< ot::TreeNode > &in, MPI_Comm comm, MPI_Comm inputActiveComm, bool compressLut=false, const std::vector< ot::TreeNode > *blocksPtr=NULL, bool *iAmActive=NULL)
 The constructor that builds the DA from a Sorted, Linear, Complete, 2:1 Balanced, Octree.
 ~DA ()
 The destructor for the DA object.
Information about the DA / domain
unsigned int getBoundaryNodeSize ()
 Returns the total number of positive Boundary Nodes belonging to this processor. This does not include the ghost nodes.
MPI_Comm getComm ()
 Get the MPI communicator from the DA.
MPI_Comm getCommActive ()
 Get the communicator only containing the active processors.
Point getCurrentOffset ()
 Get the offset for the current index.
unsigned int getDimension ()
 Returns the dimension of the octree from which this DA was created.
unsigned int getElementSize ()
 Returns the total number of elements belonging to this processor. This does not include the ghost elements.
unsigned int getGhostedElementSize ()
 Returns the total number of elements on this processor, including the ghost elements.
unsigned int getGhostedNodeSize ()
 Returns the total number of Nodes on this processor, including the ghost nodes. This will include the boundary nodes if any belong to this processor.
Point getGhostedOffset ()
 Get the offset for the smallest element on this processor, including ghost elements.
unsigned int getIdxElementBegin ()
unsigned int getIdxElementEnd ()
unsigned int getIdxPostGhostBegin ()
unsigned int getIndependentSize ()
 Returns the number of INDEPENDENT elements belonging to this processor.
unsigned int getInternalNodeSize ()
 Returns the total number of internal Nodes belonging to this processor. This does not include the ghost nodes and positive boundaries .
DendroIntL * getLocalToGlobalElemsMap ()
DendroIntL * getLocalToGlobalMap ()
unsigned int getMaxDepth ()
 Returns the maximum depth (level) of the octree from which this DA was created.
Point getNextOffset (Point p, unsigned char d)
 Given an octant specified by a point (its anchor) and its level it returns the anchor of the octant that immediately follows the given point in the Morton ordering. This function assumes that the octree is linear.
unsigned int getNodeSize ()
 Returns the total number of Nodes belonging to this processor. This does not include the ghost nodes. This will include the positive boundary nodes if any belong to this processor.
int getNpesActive ()
int getNpesAll ()
Point getOffset ()
 Get the offset for the smallest element on this processor, not including ghost elements.
unsigned int getPreGhostElementSize ()
 Returns the total number of pre-ghost elements.
int getRankActive ()
int getRankAll ()
void incrementCurrentOffset ()
 Points to the next anchor. This function is required because we only store the levels of the octants and not their anchors. So the anchors are computed on the fly within the loops.
void incrementPreGhostOffset ()
 Points to the anchor of the next pre-ghost octant. This function is required because we only store the levels of the octants and not their anchors. So the anchors are computed on the fly within the loops.
bool isBoundaryOctant (unsigned char *flags=NULL)
 Call this function to check if curr() points to an octant touching the domain boundaries from the inside. This function is for real octants only, pseudo-octants can not be tested using this function.
Communication functions
template<typename T>
int ReadFromGhostElemsBegin (T *arr, unsigned int dof=1)
template<typename T>
int ReadFromGhostElemsEnd (T *arr)
template<typename T>
int ReadFromGhostsBegin (T *arr, unsigned int dof=1)
 Updates the ghost values by obtaining values from the processors which own them.
template<typename T>
int ReadFromGhostsEnd (T *arr)
 Waits for updates of the ghost values to finish.
template<typename T>
int WriteToGhostElemsBegin (T *arr, unsigned int dof=1)
template<typename T>
int WriteToGhostElemsEnd (T *arr, unsigned int dof=1)
template<typename T>
int WriteToGhostsBegin (T *arr, unsigned int dof=1)
 Send the ghost values to the processors that own them so that these values can be added.
template<typename T>
int WriteToGhostsEnd (T *arr, unsigned int dof=1)
 Waits for updates of the ghost values to finish.

Protected Member Functions

void buildNodeList (std::vector< ot::TreeNode > &in)
 Builds the element-to-node mappings and (optionally) compresses it using Goloumb-Rice encoding.
void DA_FactoryPart0 (std::vector< ot::TreeNode > &in, MPI_Comm comm, MPI_Comm activeInputComm, bool compressLut, bool *iAmActive)
 This function is called from within the constructor. It includes all components of the constructor.
void DA_FactoryPart1 (std::vector< ot::TreeNode > &in)
void DA_FactoryPart2 (std::vector< ot::TreeNode > &in)
void DA_FactoryPart3 (std::vector< ot::TreeNode > &in, MPI_Comm comm, bool compressLut, const std::vector< ot::TreeNode > *blocksPtr, bool *iAmActive)

Protected Attributes

bool m_bCompressLut
bool m_bComputedLocalToGlobal
bool m_bComputedLocalToGlobalElems
bool m_bIamActive
DendroIntL * m_dilpLocalToGlobal
DendroIntL * m_dilpLocalToGlobalElems
int m_iNpesActive
int m_iNpesAll
int m_iRankActive
int m_iRankAll
LoopCounters m_lcLoopInfo
MPI_Comm m_mpiCommActive
MPI_Comm m_mpiCommAll
std::vector< updateContextm_mpiContexts
Point m_ptCurrentOffset
Point m_ptGhostedOffset
Point m_ptIndependentOffset
Point m_ptOffset
std::vector< Pointm_ptsPreGhostOffsets
Pointm_ptsPreGhostOffsetsPtr
std::vector< ot::TreeNodem_tnBlocks
std::vector< ot::TreeNodem_tnMinAllBlocks
std::vector< unsigned char > m_ucpLutMasks
unsigned char * m_ucpLutMasksPtr
std::vector< unsigned char > m_ucpLutRemainders
unsigned char * m_ucpLutRemaindersPtr
unsigned char * m_ucpOctLevels
std::vector< unsigned char > m_ucpPreGhostConnectivity
unsigned char * m_ucpPreGhostConnectivityPtr
std::vector< unsigned char > m_ucpSortOrders
unsigned char * m_ucpSortOrdersPtr
unsigned int m_uiBoundaryNodeSize
unsigned int m_uiCommTag
unsigned int m_uiCurrent
unsigned int m_uiDimension
unsigned int m_uiElementBegin
unsigned int m_uiElementEnd
unsigned int m_uiElementQuotient
unsigned int m_uiElementSize
unsigned int m_uiIndependentElementBegin
unsigned int m_uiIndependentElementEnd
unsigned int m_uiIndependentElementQuotient
unsigned int m_uiIndependentElementSize
unsigned int m_uiInputSize
unsigned int m_uiLocalBufferSize
unsigned int m_uiMaxDepth
std::vector< unsigned int > m_uiNlist
unsigned int * m_uiNlistPtr
unsigned int m_uiNodeSize
std::vector< unsigned int > m_uipElemRecvCounts
std::vector< unsigned int > m_uipElemRecvOffsets
std::vector< unsigned int > m_uipElemRecvProcs
std::vector< unsigned int > m_uipElemScatterMap
std::vector< unsigned int > m_uipElemSendCounts
std::vector< unsigned int > m_uipElemSendOffsets
std::vector< unsigned int > m_uipElemSendProcs
unsigned int m_uiPostGhostBegin
unsigned int m_uiPostGhostNodeSize
std::vector< unsigned int > m_uipRecvCounts
std::vector< unsigned int > m_uipRecvOffsets
std::vector< unsigned int > m_uipRecvProcs
unsigned int m_uiPreGhostBoundaryNodeSize
unsigned int m_uiPreGhostElementSize
unsigned int m_uiPreGhostNodeSize
unsigned int m_uiPreGhostQuotientCnt
std::vector< unsigned int > m_uipScatterMap
std::vector< unsigned int > m_uipSendCounts
std::vector< unsigned int > m_uipSendOffsets
std::vector< unsigned int > m_uipSendProcs
unsigned int m_uiQuotientCounter
std::vector< unsigned short > m_uspLutQuotients
unsigned short * m_uspLutQuotientsPtr
std::vector< PointPreGhostAnchors


Detailed Description

Class that manages the octree mesh.

Author:
Hari Sundar, hsundar@seas.upenn.edu

Rahul S. Sampath, rahulss@seas.upenn.edu

Date:
2007-01-17
Since, the input octree represents elements sorted based on the Morton ordering, we need to created a sorted list of nodes. All nodes in the balanced octree, except for hanging nodes and positive boundary nodes, are associated with exactly one element (octant) in octree. Psuedo-elements are created for all the additional nodes, which are marked. This can be done with a single linear pass ($\mathcal{O}( n / p )$) followed by a parallel sort ($\mathcal{O}( n / p \log n / p )$)). We get two major benefits from this. Firstly, we store only one ordering for both the elements and the nodes, and the size of the combined array is $\Theta ( 2 n )$ for an input balanced octree of $n$ elements. Secondly, we are now in a position to compress this data structure, from one utilizing 4 int to only one char per node. On systems with 4 byte words, this translated to a 16x compression. The algorithm does not add any overheads for in order iterations over either the nodes or the elements.

Only one char (8 bits) is stored per element/node. This stores a number of things, including the level of the element (5 bits), whether it is a Node (N, 1-bit), whether it is a Boundary node (BN, 1-bit), and whether it is a dependent element(DE, 1-bit). A dependent element is one which has at least 1 node, which is owned by another processor. Whether the element/node is a ghost or not can be determined purely by it's index.

The bit structure for this char is

N BN DE LEVEL

where the highest bit determines whether it is an element or not.

Random access into the elemental/nodal array is however not currently possible, and should not be required. The DA can be extended if required to support random access, by having additional markers, for every $k$ nodes, within the nodal array, which will enable searching in $\mathcal{O}( \log n / k + k )$ and increase storage by $3 n / k$ int. For the search to be efficient, we will need to choose $k$ such that $k = \log n$. This will allow us to search within the DA in $\mathcal{O}( \log n )$, but will increase storage from $\Theta ( 2 n )$ to $\Theta ( 2 n + 12 n / \log n )$.

In addition we need the neighbourhood data to be prepared for each element/node. In case of and elemental iteration, we need to store the information pertaining to the 7 additional nodes (in 3D) defining this hexahedral element. In the case of a node-based iteration, we will need to store the information about 26 neighbouring nodes, connected to this node via adjacent elements.

The major issue with this is the storage of the indices, which is 8 times the number of nodes in the octree. In order to reduce storage costs only the offsets from the current index are stored. In addition, these offsets are compressed by using a variant of the Golomb-Rice encoding.

In order to overlap computation and communication, it is preferable that the Finite Element calculations be done in two stages. The communication is initialized first, and simultaneously we process the independent elements. We then wait for the communication to finish before processing the dependent element. A sample loop will look like,

 // Start communication 
 readFromGhostsBegin(array, true); 
 // Process independent elements 
 for ( init<ot::DA_FLAGS::INDEPENDENT> ;
      curr() < end<ot::DA_FLAGS::INDEPENDENT>(); 
      next<ot::DA_FLAGS::INDEPENDENT>() ) { 
     // process current element ...
 } 
  
 // wait for communication to end.
 readFromGhostsEnd(); 
  
 // Now process the dependent elements 
 for ( init<ot::DA_FLAGS::DEPENDENT>; 
        curr() < end<ot::DA_FLAGS::DEPENDENT>(); 
        next<ot::DA_FLAGS::DEPENDENT>() ) { 
      // process current element ...
 } 

Definition at line 310 of file oda.h.


Constructor & Destructor Documentation

ot::DA::DA std::vector< ot::TreeNode > &  in,
MPI_Comm  comm,
MPI_Comm  inputActiveComm,
bool  compressLut = false,
const std::vector< ot::TreeNode > *  blocksPtr = NULL,
bool *  iAmActive = NULL
 

The constructor that builds the DA from a Sorted, Linear, Complete, 2:1 Balanced, Octree.

Author:
Hari Sundar

Rahul Sampath

Parameters:
comm The MPI communication context which is to be used for setting up the DA.
iAmActive If an address is provided then the status of the calling processor is returned in that address. 'true' if the mesh is distributed on the calling processor and 'false' otherwise.
blocksPtr If this parameter is NOT NULL, then the input is assumed to be a valid partition of the octree that can be used for the mesh as it is. If this parameter is NULL, then a fresh partition is computed inside the constructor itself. Typical users should pass NULL for this parameter.
compressLut Pass 'true' to compress the element-to-node mappings using Goloumb-Rice encoding and 'false' otherwise. Note that uncompressing these mappings during the Matvecs will incur a small overhead.
in The sorted, complete, linear, 2:1 balanced octree that is to be used for constructing the DA.
inputActiveComm An MPI_Comm consisting of only those processors which call the constructor with an non-empty 'in' vector. This is a subset of comm, which can be got by calling the function par::splitComm2way.
The constructor builds the DA based on the input octree. It constructs all the required neighbour information and also (optionally) compresses the structure to reduce the memory footprint.

Definition at line 175 of file oda.C.

References DA_FactoryPart0(), DA_FactoryPart1(), DA_FactoryPart2(), DA_FactoryPart3(), PROF_BUILD_DA_BEGIN, and PROF_BUILD_DA_END.

ot::DA::DA unsigned int  dummy,
std::vector< ot::TreeNode > &  in,
MPI_Comm  comm,
MPI_Comm  inputActiveComm,
bool  compressLut = false,
const std::vector< ot::TreeNode > *  blocksPtr = NULL,
bool *  iAmActive = NULL
 

Private constructor used from within DAMG. This assumes that the input already included positive boundaries, the original octree has been embedded into the larger octree and the maxdepth has been set apropriately and the octants without hanging anchors have been tagged.

Author:
Rahul Sampath

Definition at line 196 of file oda.C.

References DA_FactoryPart0(), DA_FactoryPart3(), PROF_BUILD_DA_BEGIN, and PROF_BUILD_DA_END.

ot::DA::~DA  ) 
 

The destructor for the DA object.

Author:
Hari Sundar

Definition at line 214 of file oda.C.

References m_dilpLocalToGlobal, m_dilpLocalToGlobalElems, m_ucpLutMasks, m_ucpLutRemainders, m_ucpOctLevels, m_ucpSortOrders, m_uiNlist, and m_uspLutQuotients.


Member Function Documentation

void ot::DA::buildNodeList std::vector< ot::TreeNode > &  in  )  [protected]
 

Builds the element-to-node mappings and (optionally) compresses it using Goloumb-Rice encoding.

Author:
Rahul Sampath

Hari Sundar

Parameters:
in The octree, including pesudo-octants for positive boundaries and ghosts (both pre and post).

Definition at line 47 of file odaBuildNlist.C.

References CHECK_FAST_MAX_LOWER_BOUND, end(), ot::TreeNode::getAnchor(), getFlag(), ot::TreeNode::getLevel(), ot::TreeNode::getParent(), ot::TreeNode::getX(), ot::TreeNode::getY(), ot::TreeNode::getZ(), isNode(), m_iRankActive, m_iRankAll, m_mpiCommActive, m_ptIndependentOffset, m_ucpLutMasks, m_ucpLutRemainders, m_ucpSortOrders, m_uiBoundaryNodeSize, m_uiDimension, m_uiElementBegin, m_uiElementEnd, m_uiElementQuotient, m_uiIndependentElementBegin, m_uiIndependentElementEnd, m_uiIndependentElementQuotient, m_uiIndependentElementSize, m_uiLocalBufferSize, m_uiMaxDepth, m_uiNlist, m_uiNodeSize, m_uipElemRecvCounts, m_uipElemRecvOffsets, m_uipElemRecvProcs, m_uipElemScatterMap, m_uipElemSendCounts, m_uipElemSendOffsets, m_uipElemSendProcs, m_uiPostGhostBegin, m_uiPostGhostNodeSize, m_uipRecvCounts, m_uipRecvOffsets, m_uipRecvProcs, m_uiPreGhostBoundaryNodeSize, m_uiPreGhostElementSize, m_uiPreGhostNodeSize, m_uipScatterMap, m_uipSendCounts, m_uipSendOffsets, m_uipSendProcs, m_uspLutQuotients, NEG_SEARCH_BLOCK1X, NEG_SEARCH_BLOCK1Y, NEG_SEARCH_BLOCK1Z, NEG_SEARCH_BLOCK2X, NEG_SEARCH_BLOCK2Y, NEG_SEARCH_BLOCK2Z, ot::NodeAndRanks::node, NRM, ot::TreeNode::orFlag(), POS_SEARCH_BLOCK, PROF_BUILD_NLIST_BEGIN, PROF_BUILD_NLIST_COMM_BEGIN, PROF_BUILD_NLIST_COMM_END, PROF_BUILD_NLIST_END, ot::NodeAndRanks::ranks, RED, ot::TreeNode::setWeight(), and sort().

Referenced by DA_FactoryPart3().

bool ot::DA::computedLocalToGlobal  )  [inline]
 

Author:
Rahul Sampath
Returns:
'true' if the function computeLocalToGlobalMappings() was called for this mesh.
See also:
computeLocalToGlobalMappings()

Definition at line 83 of file oda.txx.

Referenced by CreateAndComputeFullActiveJacobian1(), CreateAndComputeFullJacobian1(), CreateConstVecMass(), CreateDirichletJacobian(), CreateDirichletLaplacian(), CreateElasticityMat(), CreateJacobian1(), CreateJacobian2(), CreateJacobian3(), and main().

bool ot::DA::computedLocalToGlobalElems  )  [inline]
 

Author:
Rahul Sampath
Returns:
'true' if the function computeLocalToGlobalElemMappings() was called for this mesh.
See also:
computeLocalToGlobalElemMappings()

Definition at line 79 of file oda.txx.

Referenced by main().

int ot::DA::computeLocalToGlobalElemMappings  ) 
 

Computes mappings between the local and global numberings for elemental buffers. This function is probably required only for developers. Typical users will not need this. This function should not be called more than once for a given mesh.

Author:
Rahul Sampath

Definition at line 34 of file oda.C.

References DendroIntL, getElementSize(), m_bComputedLocalToGlobalElems, m_bIamActive, m_iNpesActive, and m_iRankActive.

Referenced by main().

int ot::DA::computeLocalToGlobalMappings  ) 
 

Computes mappings between the local and global numberings for nodal buffers.

Author:
Rahul Sampath
See also:
setValuesInMatrix() Call this function only if you need to create Matrices using this mesh. This function must be called once before calling setValuesInMatrix(). This function should not be called more than once for a given mesh.

Definition at line 76 of file oda.C.

References DendroIntL, getNodeSize(), m_bComputedLocalToGlobal, m_bIamActive, m_iNpesActive, and m_iRankActive.

Referenced by CreateConstVecMass(), CreateDirichletJacobian(), CreateDirichletLaplacian(), CreateElasticityMat(), CreateJacobian1(), CreateJacobian2(), CreateJacobian3(), and main().

int ot::DA::createActiveMatrix Mat &  M,
MatType  mtype,
unsigned int  dof = 1
 

Similar to createMatrix, except the matrix is only distributed on the active processors.

Author:
Rahul Sampath
See also:
createMatrix()

Definition at line 429 of file oda.C.

References m_iNpesActive, m_mpiCommActive, and m_uiNodeSize.

Referenced by CreateAndComputeFullActiveJacobian1(), CreateDirichletJacobian(), CreateDirichletLaplacian(), CreateElasticityMat(), CreateJacobian2(), and CreateJacobian3().

int ot::DA::createActiveVector Vec &  local,
bool  isElemental,
bool  isGhosted,
unsigned int  dof = 1
 

Similar to createVector(), except the vector is only distributed on the active processors.

Author:
Rahul Sampath
See also:
createVector()

Definition at line 489 of file oda.C.

References m_iNpesActive, m_mpiCommActive, m_uiNodeSize, m_uiPreGhostBoundaryNodeSize, and m_uiPreGhostNodeSize.

int ot::DA::createMatrix Mat &  M,
MatType  mtype,
unsigned int  dof = 1
 

Returns a PETSc Matrix of appropriate size of the requested type.

Author:
Rahul Sampath
Parameters:
M the matrix
mtype the type of matrix
dof the number of degrees of freedom per node.

Definition at line 399 of file oda.C.

References m_iNpesAll, m_mpiCommAll, and m_uiNodeSize.

Referenced by CreateAndComputeFullJacobian1(), CreateConstVecMass(), CreateDirichletJacobian(), CreateDirichletLaplacian(), CreateElasticityMat(), CreateJacobian2(), and CreateJacobian3().

template<typename T>
int ot::DA::createVector std::vector< T > &  local,
bool  isElemental,
bool  isGhosted,
unsigned int  dof = 1
 

Returns a std. vector of appropriate size of the requested type.

Author:
Hari Sundar
Parameters:
local the local vector.
isElemental true if an elemental vector is desired, false for a nodal vector.
isGhosted true if memory is to be allocated for ghost values.
dof the degrees of freedom for the vector. The default is 1.
Returns:
PETSc error code.

Definition at line 819 of file oda.txx.

References m_uiNodeSize, m_uiPreGhostBoundaryNodeSize, and m_uiPreGhostNodeSize.

int ot::DA::createVector Vec &  local,
bool  isElemental,
bool  isGhosted,
unsigned int  dof = 1
 

Returns a PETSc vector of appropriate size of the requested type.

Author:
Hari Sundar
Parameters:
local the local vector, a PETSc vector that may be used with the PETSc routines.
isElemental true if an elemental vector is desired, false for a nodal vector.
isGhosted true if memory is to be allocated for ghost values.
dof the degrees of freedom for the vector. The default is 1.
Returns:
PETSc error code.

Definition at line 459 of file oda.C.

References m_iNpesAll, m_mpiCommAll, m_uiNodeSize, m_uiPreGhostBoundaryNodeSize, and m_uiPreGhostNodeSize.

Referenced by ot::assignBoundaryFlags(), CalculateCenters(), computeInvBlockDiagEntriesForElasticityMat(), ot::createInterpolationType1(), ot::createInterpolationType2(), ot::DAMGSetUp(), ot::dummyRestrictMatVecType1(), ot::injectNodalVector(), main(), SetPDECoefFromPts(), and TestError5().

unsigned int ot::DA::curr  )  [inline]
 

Returns an index to the begining of the current loop. The loop needs to be initialized using a call to init().

Author:
Hari Sundar

Rahul Sampath

Returns:
the index to the begining of the loop.
Sample loop through the elements:

          for ( init<loopType>; curr() < end<loopType>(); next<loopType>() ) { 
        // Do whatever is required ...
        } 

See also:
end()

next()

init()

Definition at line 25 of file oda.txx.

References m_bIamActive.

Referenced by ot::assignBoundaryFlags(), CalculateCenters(), ComputeDirichletJacobian(), ComputeDirichletLaplacian(), ComputeElasticityRHS(), ComputeError5(), ComputeFBM2_RHS_Part1(), ComputeFBM2_RHS_Part2(), ComputeFBM_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeFBM_RHS_Part3(), computeInvBlockDiagEntriesForElasticityMat(), ComputeRHS1(), ComputeRHS2(), ComputeRHS5(), ComputeRHS7(), ComputeRHS8(), ComputeRHS9(), ComputeRHS_omgNeumann(), ComputeSol(), CreateAndComputeFullActiveJacobian1(), CreateAndComputeFullJacobian1(), DA_FactoryPart3(), DirichletJacobianMatGetDiagonal(), DirichletJacobianMatMult(), DirichletLaplacianMatGetDiagonal(), DirichletLaplacianMatMult(), ot::dummyRestrictMatVecType1(), EnforceZeroFBM(), EnforceZeroFBM2(), ot::getGlobalMaxLevel(), ot::getGlobalMinLevel(), incrementPreGhostOffset(), InitializeData(), ot::injectNodalVector(), ot::interpolateData(), isBoundaryOctant(), ot::isRegularGrid(), Jacobian3MatGetDiagonal(), Jacobian3MatMult(), main(), ot::prolongMatVecType1(), ot::restrictMatVecType1(), SetDirichletJacContexts(), SetElasticityContexts(), SetPDECoefFromPts(), SetSolution5(), SetSolutionFBM(), SetSolutionFBM2(), TmpDirichletJacobianMatMult(), and TmpDirichletLaplacianMatMult().

unsigned int ot::DA::currWithInfo  )  [inline]
 

Returns an index to the begining of the current loop. The loop needs to be initialized using a call to init(). This also stores the current position within an internal structure. This can be used to re-start a loop using the FROM_STORED loopType.

Author:
Rahul Sampath

Returns:
the index to the begining of the loop.
See also:
loopType

curr()

Definition at line 32 of file oda.txx.

References ot::LoopCounters::currentIndex, ot::LoopCounters::currentOffset, m_bIamActive, m_lcLoopInfo, ot::LoopCounters::pgQcounter, and ot::LoopCounters::qCounter.

Referenced by Jacobian3MatMult(), ot::prolongMatVecType1(), and ot::restrictMatVecType1().

void ot::DA::DA_FactoryPart0 std::vector< ot::TreeNode > &  in,
MPI_Comm  comm,
MPI_Comm  activeInputComm,
bool  compressLut,
bool *  iAmActive
[protected]
 

This function is called from within the constructor. It includes all components of the constructor.

Author:
Rahul Sampath

Definition at line 100 of file odaFactory.C.

References m_bIamActive, m_iNpesActive, m_iRankActive, m_mpiCommActive, m_uiDimension, m_uiInputSize, m_uiMaxDepth, RESET_DA_BLOCK, and par::splitComm2way().

Referenced by DA().

void ot::DA::DA_FactoryPart1 std::vector< ot::TreeNode > &  in  )  [protected]
 

Definition at line 143 of file odaFactory.C.

References ot::addBoundaryNodesType1(), m_mpiCommActive, m_uiDimension, m_uiMaxDepth, PROF_BUILD_DA_STAGE1_BEGIN, PROF_BUILD_DA_STAGE1_END, and par::splitComm2way().

Referenced by DA().

void ot::DA::DA_FactoryPart2 std::vector< ot::TreeNode > &  in  )  [protected]
 

Definition at line 183 of file odaFactory.C.

References ot::flagNodesType3(), m_mpiCommActive, PROF_BUILD_DA_STAGE2_BEGIN, and PROF_BUILD_DA_STAGE2_END.

Referenced by DA().

void ot::DA::DA_FactoryPart3 std::vector< ot::TreeNode > &  in,
MPI_Comm  comm,
bool  compressLut,
const std::vector< ot::TreeNode > *  blocksPtr,
bool *  iAmActive
[protected]
 

Definition at line 199 of file odaFactory.C.

References ot::blockPartStage1(), buildNodeList(), curr(), ot::DA_blockPartStage2(), ot::DA_blockPartStage3(), DendroIntL, getLevel(), getNodeIndices(), ot::getTouchConfig(), ot::includeSiblingsOfBoundary(), m_bIamActive, m_iNpesActive, m_iRankActive, m_mpiCommActive, m_ptGhostedOffset, m_ptOffset, m_ptsPreGhostOffsets, m_tnBlocks, m_tnMinAllBlocks, m_ucpLutMasks, m_ucpLutMasksPtr, m_ucpLutRemainders, m_ucpLutRemaindersPtr, m_ucpOctLevels, m_ucpPreGhostConnectivity, m_ucpSortOrders, m_ucpSortOrdersPtr, m_uiDimension, m_uiElementBegin, m_uiElementEnd, m_uiElementSize, m_uiLocalBufferSize, m_uiMaxDepth, m_uiNlist, m_uiNlistPtr, m_uiPostGhostBegin, m_uipRecvCounts, m_uipRecvProcs, m_uiPreGhostElementSize, m_uipScatterMap, m_uipSendCounts, m_uipSendProcs, m_uspLutQuotients, m_uspLutQuotientsPtr, ot::pickInterProcessorBoundaryNodes(), PreGhostAnchors, ot::prepareAprioriCommMessagesInDAtype2(), PROF_BUILD_DA_STAGE3_BEGIN, PROF_BUILD_DA_STAGE3_END, PROF_BUILD_DA_STAGE4_BEGIN, PROF_BUILD_DA_STAGE4_END, PROF_BUILD_DA_STAGE5_BEGIN, PROF_BUILD_DA_STAGE5_END, PROF_BUILD_DA_STAGE6_BEGIN, PROF_BUILD_DA_STAGE6_END, PROF_BUILD_DA_STAGE7_BEGIN, PROF_BUILD_DA_STAGE7_END, PROF_BUILD_DA_STAGE8_BEGIN, PROF_BUILD_DA_STAGE8_END, PROF_BUILD_DA_STAGE9_BEGIN, PROF_BUILD_DA_STAGE9_END, PROF_DA_BPART1_BEGIN, PROF_DA_BPART1_END, PROF_DA_BPART2_BEGIN, PROF_DA_BPART2_END, PROF_DA_BPART3_BEGIN, PROF_DA_BPART3_END, RESET_DA_BLOCK, and par::splitCommUsingSplittingRank().

Referenced by DA().

unsigned int ot::DA::end< ot::DA_FLAGS::INDEPENDENT >  )  [inline]
 

Returns an index to the end of the current loop. The loop needs to be initialized using a call to init().

Author:
Rahul Sampath

Hari Sundar

Returns:
the index to the end of the loop.
Sample loop through the elements:

          for ( init<loopType>; curr() < end<loopType>(); next<loopType>() ) { 
        // Do whatever is required ...
        } 

See also:
curr()

init()

next()

Referenced by ot::assignBoundaryFlags(), buildNodeList(), CalculateCenters(), ComputeDirichletJacobian(), ComputeDirichletLaplacian(), ComputeElasticityRHS(), ComputeError5(), ComputeFBM2_RHS_Part1(), ComputeFBM2_RHS_Part2(), ComputeFBM_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeFBM_RHS_Part3(), computeInvBlockDiagEntriesForElasticityMat(), ComputeRHS1(), ComputeRHS2(), ComputeRHS5(), ComputeRHS7(), ComputeRHS8(), ComputeRHS9(), ComputeRHS_omgNeumann(), ComputeSol(), CreateAndComputeFullActiveJacobian1(), CreateAndComputeFullJacobian1(), DirichletJacobianMatGetDiagonal(), DirichletJacobianMatMult(), DirichletLaplacianMatGetDiagonal(), DirichletLaplacianMatMult(), ot::dummyRestrictMatVecType1(), EnforceZeroFBM(), EnforceZeroFBM2(), ot::getGlobalMaxLevel(), ot::getGlobalMinLevel(), InitializeData(), ot::injectNodalVector(), ot::interpolateData(), ot::isRegularGrid(), Jacobian3MatGetDiagonal(), Jacobian3MatMult(), main(), ot::prolongMatVecType1(), ot::restrictMatVecType1(), SetDirichletJacContexts(), SetElasticityContexts(), SetPDECoefFromPts(), SetSolution5(), SetSolutionFBM(), SetSolutionFBM2(), TmpDirichletJacobianMatMult(), and TmpDirichletLaplacianMatMult().

std::vector< ot::TreeNode > ot::DA::getBlocks  )  [inline]
 

Returns:
the list of blocks owned by the calling processor
Author:
Rahul Sampath

Definition at line 95 of file oda.txx.

Referenced by ot::DAMGCreateAndSetDA(), and main().

unsigned int ot::DA::getBoundaryNodeSize  )  [inline]
 

Returns the total number of positive Boundary Nodes belonging to this processor. This does not include the ghost nodes.

Author:
Rahul Sampath

Returns:
The number of local (positive) boundary nodes.

Definition at line 145 of file oda.txx.

unsigned char ot::DA::getChildNumber  )  [inline]
 

Returns the child number of the current element.

Author:
Hari Sundar
Returns:
the child number of the current element

Definition at line 1074 of file oda.txx.

References m_bCompressLut, m_bIamActive, m_ptCurrentOffset, m_ucpLutMasksPtr, m_ucpOctLevels, m_ucpSortOrdersPtr, m_uiCurrent, m_uiMaxDepth, Point::xint(), Point::yint(), and Point::zint().

Referenced by ComputeDirichletJacobian(), ComputeDirichletLaplacian(), ComputeError5(), ComputeFBM2_RHS_Part1(), ComputeFBM_RHS_Part1(), ComputeFBM_RHS_Part2(), computeInvBlockDiagEntriesForElasticityMat(), ComputeRHS2(), ComputeRHS7(), ComputeRHS8(), ComputeRHS9(), ComputeRHS_omgNeumann(), CreateAndComputeFullActiveJacobian1(), CreateAndComputeFullJacobian1(), DirichletJacobianMatGetDiagonal(), DirichletJacobianMatMult(), DirichletLaplacianMatGetDiagonal(), DirichletLaplacianMatMult(), getNodeIndices(), ot::interpolateData(), Jacobian1MatGetDiagonal(), MassMatGetDiagonal(), TmpDirichletJacobianMatMult(), and TmpDirichletLaplacianMatMult().

MPI_Comm ot::DA::getComm  )  [inline]
 

Get the MPI communicator from the DA.

Returns:
MPI_Comm
Author:
Rahul Sampath

Definition at line 169 of file oda.txx.

Referenced by ComputeFBM2_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeRHS9(), CreateAndComputeMassMatrix(), CreateDirichletJacobian(), CreateDirichletLaplacian(), CreateElasticityMat(), CreateJacobian1(), CreateJacobian2(), CreateJacobian3(), ot::getGlobalMaxLevel(), ot::getGlobalMinLevel(), ot::interpolateData(), and ot::isRegularGrid().

MPI_Comm ot::DA::getCommActive  )  [inline]
 

Get the communicator only containing the active processors.

Returns:
MPI_Comm
Author:
Rahul Sampath

Definition at line 173 of file oda.txx.

Referenced by ComputeError5(), CreateActiveJacobian1(), CreateDirichletJacobian(), CreateDirichletLaplacian(), CreateElasticityMat(), CreateJacobian1(), CreateJacobian2(), CreateJacobian3(), ot::DAMGCreateAndSetDA(), ot::DAMGSetKSP(), getActiveStateAndActiveCommForKSP_Shell_DirichletJac(), getActiveStateAndActiveCommForKSP_Shell_Elas(), getActiveStateAndActiveCommForKSP_Shell_Jac1(), getActiveStateAndActiveCommForKSP_Shell_Jac2or3(), main(), ot::PrintDAMG(), and SetPDECoefFromPts().

Point ot::DA::getCurrentOffset  )  [inline]
 

Get the offset for the current index.

Author:
Hari Sundar
Returns:
The offset. Must not be called by inactive processors
See also:
getOffset()

getGhostedOffset()

iAmActive()

Definition at line 193 of file oda.txx.

References m_bIamActive.

Referenced by CalculateCenters(), ComputeElasticityRHS(), ComputeError5(), ComputeFBM2_RHS_Part1(), ComputeFBM2_RHS_Part2(), ComputeFBM_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeFBM_RHS_Part3(), ComputeRHS1(), ComputeRHS2(), ComputeRHS5(), ComputeRHS7(), ComputeRHS8(), ComputeRHS9(), ComputeSol(), EnforceZeroFBM(), EnforceZeroFBM2(), InitializeData(), ot::injectNodalVector(), ot::interpolateData(), isBoundaryOctant(), main(), SetSolution5(), SetSolutionFBM(), and SetSolutionFBM2().

unsigned int ot::DA::getDimension  )  [inline]
 

Returns the dimension of the octree from which this DA was created.

Author:
Hari Sundar
Returns:
The dimension of the octree.

Definition at line 87 of file oda.txx.

Referenced by ComputeFBM2_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeRHS9(), stiffnessMatrix::preMatVec(), and massMatrix::preMatVec().

unsigned int ot::DA::getElementSize  )  [inline]
 

Returns the total number of elements belonging to this processor. This does not include the ghost elements.

Author:
Hari Sundar

Returns:
The number of local elements.

Definition at line 115 of file oda.txx.

Referenced by computeLocalToGlobalElemMappings(), ot::DAMGCreateAndSetDA(), Jacobian3MatMult(), main(), ot::PrintDAMG(), ot::prolongMatVecType1(), and ot::restrictMatVecType1().

unsigned char ot::DA::getFlag unsigned int  i  )  [inline]
 

Returns the compressed representation of the octant at index i.

Author:
Hari Sundar
Parameters:
i the index of the octant.
Returns:
the compressed representation of the octant at index i.

Definition at line 44 of file oda.txx.

References m_bIamActive, and m_ucpOctLevels.

Referenced by buildNodeList().

unsigned int ot::DA::getGhostedElementSize  )  [inline]
 

Returns the total number of elements on this processor, including the ghost elements.

Author:
Hari Sundar

Returns:
The number of nodes.

Definition at line 133 of file oda.txx.

References m_uiElementSize.

Referenced by ot::PrintDAMG().

unsigned int ot::DA::getGhostedNodeSize  )  [inline]
 

Returns the total number of Nodes on this processor, including the ghost nodes. This will include the boundary nodes if any belong to this processor.

Author:
Hari Sundar

Returns:
The number of nodes.

Definition at line 127 of file oda.txx.

References m_uiBoundaryNodeSize, m_uiNodeSize, m_uiPreGhostBoundaryNodeSize, and m_uiPreGhostNodeSize.

Point ot::DA::getGhostedOffset  )  [inline]
 

Get the offset for the smallest element on this processor, including ghost elements.

Author:
Hari Sundar
Returns:
The offset.
Must not be called by inactive processors
See also:
getOffset()

getCurrentOffset()

iAmActive()

Definition at line 200 of file oda.txx.

References m_bIamActive.

unsigned char ot::DA::getHangingNodeIndex unsigned int  i  ) 
 

Returns information pertaining to which of the elements 8 nodes are hanging.

Author:
Hari Sundar
Parameters:
i the index to the element.
Returns:
the bitmask specifying which of the nodes are hanging.
Returns information pertaining to which of the elements 8 nodes are hanging.

Definition at line 781 of file oda.C.

References m_bIamActive, and m_ucpLutMasks.

Referenced by ot::assignBoundaryFlags(), ComputeDirichletJacobian(), ComputeDirichletLaplacian(), ComputeElasticityRHS(), ComputeError5(), ComputeFBM2_RHS_Part1(), ComputeFBM2_RHS_Part2(), ComputeFBM_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeFBM_RHS_Part3(), computeInvBlockDiagEntriesForElasticityMat(), ComputeRHS1(), ComputeRHS2(), ComputeRHS5(), ComputeRHS7(), ComputeRHS8(), ComputeRHS9(), ComputeRHS_omgNeumann(), ComputeSol(), CreateAndComputeFullActiveJacobian1(), CreateAndComputeFullJacobian1(), DirichletJacobianMatGetDiagonal(), DirichletJacobianMatMult(), DirichletLaplacianMatGetDiagonal(), DirichletLaplacianMatMult(), stiffnessMatrix::ElementalMatGetDiagonal(), stiffnessMatrix::ElementalMatVec(), EnforceZeroFBM(), EnforceZeroFBM2(), InitializeData(), ot::injectNodalVector(), ot::interpolateData(), Jacobian1MatGetDiagonal(), main(), MassMatGetDiagonal(), SetSolution5(), SetSolutionFBM(), SetSolutionFBM2(), TmpDirichletJacobianMatMult(), and TmpDirichletLaplacianMatMult().

unsigned int ot::DA::getIdxElementBegin  )  [inline]
 

Author:
Hari Sundar
Returns:
the index of the first local element

Definition at line 153 of file oda.txx.

Referenced by ot::DAMGCreateAndSetDA(), and main().

unsigned int ot::DA::getIdxElementEnd  )  [inline]
 

Author:
Rahul Sampath
Returns:
the index of the last local element

Definition at line 157 of file oda.txx.

Referenced by main().

unsigned int ot::DA::getIdxPostGhostBegin  )  [inline]
 

Author:
Hari Sundar
Returns:
the index of the first post ghost element

Definition at line 161 of file oda.txx.

Referenced by main().

unsigned int ot::DA::getIndependentSize  )  [inline]
 

Returns the number of INDEPENDENT elements belonging to this processor.

Author:
Rahul Sampath
Returns:
The number of local elements.

Definition at line 123 of file oda.txx.

Referenced by ot::createInterpolationType1(), ot::createInterpolationType2(), ot::DAMGCreateAndSetDA(), and main().

unsigned int ot::DA::getInputSize  )  [inline]
 

Returns:
The size of the input octree while calling the DA constructor
Author:
Rahul Sampath

Definition at line 149 of file oda.txx.

unsigned int ot::DA::getInternalNodeSize  )  [inline]
 

Returns the total number of internal Nodes belonging to this processor. This does not include the ghost nodes and positive boundaries .

Author:
Rahul Sampath

Returns:
The number of local internal nodes.

Definition at line 137 of file oda.txx.

unsigned char ot::DA::getLevel unsigned int  i  )  [inline]
 

Returns the level of the octant specified by the index.

Author:
Hari Sundar
Parameters:
i the index to the element/node.
Returns:
the level of the octant. The return value is the level of the octant in the modified octree that includes 'pseudo-octants' for boundary nodes. This octree has a maximum depth equal to 1 more than that of the input octree used to construct the finite element mesh. Hence, the value returned by this function will be 1 more than the true level of the octant in the input octree.

Definition at line 51 of file oda.txx.

References m_bIamActive, and m_ucpOctLevels.

Referenced by CalculateCenters(), ComputeDirichletJacobian(), ComputeDirichletLaplacian(), ComputeElasticityRHS(), ComputeError5(), ComputeFBM2_RHS_Part1(), ComputeFBM2_RHS_Part2(), ComputeFBM_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeFBM_RHS_Part3(), computeInvBlockDiagEntriesForElasticityMat(), ComputeRHS1(), ComputeRHS2(), ComputeRHS5(), ComputeRHS7(), ComputeRHS8(), ComputeRHS9(), ComputeRHS_omgNeumann(), ComputeSol(), CreateAndComputeFullActiveJacobian1(), CreateAndComputeFullJacobian1(), DA_FactoryPart3(), DirichletJacobianMatGetDiagonal(), DirichletJacobianMatMult(), DirichletLaplacianMatGetDiagonal(), DirichletLaplacianMatMult(), stiffnessMatrix::ElementalMatGetDiagonal(), massMatrix::ElementalMatGetDiagonal(), stiffnessMatrix::ElementalMatVec(), massMatrix::ElementalMatVec(), EnforceZeroFBM(), EnforceZeroFBM2(), ot::getGlobalMaxLevel(), ot::getGlobalMinLevel(), InitializeData(), ot::injectNodalVector(), ot::interpolateData(), isBoundaryOctant(), Jacobian1MatGetDiagonal(), main(), MassMatGetDiagonal(), SetSolution5(), SetSolutionFBM(), SetSolutionFBM2(), TmpDirichletJacobianMatMult(), TmpDirichletLaplacianMatMult(), and ot::writePartitionVTK().

unsigned int ot::DA::getLocalBufferSize  )  [inline]
 

Author:
Rahul Sampath
Returns:
the total number of octants (local, ghosts and FOREIGN) stored on the calling processor.

Definition at line 111 of file oda.txx.

Referenced by ot::DAMGCreateSuppressedDOFs(), ot::injectNodalVector(), and main().

DendroIntL * ot::DA::getLocalToGlobalElemsMap  )  [inline]
 

Author:
Rahul Sampath
Returns:
The local to global map computed using the function computeLocalToGlobalElemMappings()
See also:
computeLocalToGlobalElemMappings

computedLocalToGlobalElems

Definition at line 218 of file oda.txx.

References DendroIntL.

Referenced by main().

DendroIntL * ot::DA::getLocalToGlobalMap  )  [inline]
 

Author:
Rahul Sampath
Returns:
The local to global map computed using the function computeLocalToGlobalMappings()
See also:
computeLocalToGlobalMappings

computedLocalToGlobal

Definition at line 214 of file oda.txx.

References DendroIntL.

Referenced by main().

unsigned int ot::DA::getMaxDepth  )  [inline]
 

Returns the maximum depth (level) of the octree from which this DA was created.

Author:
Hari Sundar
Returns:
The maximum depth of the octree. The return value is the maximum depth in the modified octree that includes 'pseudo-octants' for boundary nodes. This octree has a maximum depth equal to 1 more than that of the input octree used to construct the finite element mesh. Hence, the value returned by this function will be 1 more than the true maximum depth of the input octree.

Definition at line 91 of file oda.txx.

Referenced by CalculateCenters(), ComputeDirichletJacobian(), ComputeDirichletLaplacian(), ComputeElasticityRHS(), ComputeError5(), ComputeFBM2_RHS_Part1(), ComputeFBM2_RHS_Part2(), ComputeFBM_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeFBM_RHS_Part3(), computeInvBlockDiagEntriesForElasticityMat(), ComputeRHS1(), ComputeRHS2(), ComputeRHS5(), ComputeRHS7(), ComputeRHS8(), ComputeRHS9(), ComputeSol(), CreateAndComputeFullActiveJacobian1(), CreateAndComputeFullJacobian1(), DirichletJacobianMatGetDiagonal(), DirichletJacobianMatMult(), DirichletLaplacianMatGetDiagonal(), DirichletLaplacianMatMult(), EnforceZeroFBM(), EnforceZeroFBM2(), InitializeData(), ot::interpolateData(), isBoundaryOctant(), Jacobian1MatMult(), Jacobian3MatGetDiagonal(), Jacobian3MatMult(), main(), MassMatMult(), stiffnessMatrix::preMatVec(), massMatrix::preMatVec(), SetSolution5(), SetSolutionFBM(), SetSolutionFBM2(), solve_neumann_oct(), TmpDirichletJacobianMatMult(), TmpDirichletLaplacianMatMult(), and ot::writePartitionVTK().

std::vector< ot::TreeNode > ot::DA::getMinAllBlocks  )  [inline]
 

A function to get information about the partitioning of the mesh.

Returns:
The smallest (in Morton ordering not size) block on each processor
Author:
Rahul Sampath

Definition at line 103 of file oda.txx.

Referenced by ComputeFBM2_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeRHS9(), ot::interpolateData(), and ot::writePartitionVTK().

Point ot::DA::getNextOffset Point  p,
unsigned char  d
 

Given an octant specified by a point (its anchor) and its level it returns the anchor of the octant that immediately follows the given point in the Morton ordering. This function assumes that the octree is linear.

Author:
Hari Sundar

Parameters:
p The anchor of the current octant
d The level of the current octant
Returns:
the anchor of the next octant

Definition at line 238 of file oda.C.

References m_bIamActive, m_uiMaxDepth, Point::x(), Point::xint(), Point::y(), Point::yint(), Point::z(), and Point::zint().

Referenced by incrementCurrentOffset().

int ot::DA::getNodeIndices unsigned int *  nodes  )  [inline]
 

Returns the indices to the nodes of the current element.

Author:
Hari Sundar

Rahul Sampath

Parameters:
nodes Indices into the nodes of the given element. Should be allocated by the user prior to calling.
Returns:
Error code.

Definition at line 1098 of file oda.txx.

References getChildNumber(), m_bIamActive, m_iRankActive, m_ptCurrentOffset, m_ucpLutMasksPtr, m_ucpLutRemaindersPtr, m_ucpOctLevels, m_ucpSortOrdersPtr, m_uiCurrent, m_uiDimension, m_uiElementBegin, m_uiElementEnd, m_uiLocalBufferSize, m_uiMaxDepth, m_uiNlistPtr, m_uiPostGhostBegin, m_uiPreGhostElementSize, m_uiQuotientCounter, m_uspLutQuotientsPtr, NRM, RED, Point::xint(), Point::yint(), and Point::zint().

Referenced by ot::assignBoundaryFlags(), ComputeDirichletJacobian(), ComputeDirichletLaplacian(), ComputeElasticityRHS(), ComputeError5(), ComputeFBM2_RHS_Part1(), ComputeFBM2_RHS_Part2(), ComputeFBM_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeFBM_RHS_Part3(), computeInvBlockDiagEntriesForElasticityMat(), ComputeRHS1(), ComputeRHS2(), ComputeRHS5(), ComputeRHS7(), ComputeRHS8(), ComputeRHS9(), ComputeRHS_omgNeumann(), ComputeSol(), CreateAndComputeFullActiveJacobian1(), CreateAndComputeFullJacobian1(), DA_FactoryPart3(), DirichletJacobianMatGetDiagonal(), DirichletJacobianMatMult(), DirichletLaplacianMatGetDiagonal(), DirichletLaplacianMatMult(), EnforceZeroFBM(), EnforceZeroFBM2(), InitializeData(), ot::injectNodalVector(), ot::interpolateData(), Jacobian1MatGetDiagonal(), main(), MassMatGetDiagonal(), SetDirichletJacContexts(), SetElasticityContexts(), SetSolution5(), SetSolutionFBM(), SetSolutionFBM2(), TmpDirichletJacobianMatMult(), and TmpDirichletLaplacianMatMult().

unsigned int ot::DA::getNodeSize  )  [inline]
 

Returns the total number of Nodes belonging to this processor. This does not include the ghost nodes. This will include the positive boundary nodes if any belong to this processor.

Author:
Hari Sundar

Returns:
The number of local nodes.

Definition at line 141 of file oda.txx.

References m_uiNodeSize.

Referenced by computeInvBlockDiagEntriesForElasticityMat(), computeLocalToGlobalMappings(), CreateActiveJacobian1(), CreateAndComputeMassMatrix(), CreateConstVecMass(), CreateDirichletJacobian(), CreateDirichletLaplacian(), CreateElasticityMat(), ot::createInterpolationType1(), ot::createInterpolationType2(), CreateJacobian1(), CreateJacobian2(), CreateJacobian3(), CreateTmpDirichletJacobian(), CreateTmpDirichletLaplacian(), getDofAndNodeSizeForElasticityMat(), InitializeData(), main(), and ot::PrintDAMG().

int ot::DA::getNpesActive  )  [inline]
 

Returns:
the number of active processors
Author:
Rahul Sampath

Definition at line 181 of file oda.txx.

Referenced by ComputeFBM2_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeRHS9(), CreateDirichletJacobian(), CreateDirichletLaplacian(), CreateElasticityMat(), CreateJacobian1(), CreateJacobian2(), CreateJacobian3(), ot::DAMGCreateAndSetDA(), ot::DAMGSetKSP(), ot::interpolateData(), and ot::PrintDAMG().

int ot::DA::getNpesAll  )  [inline]
 

Returns:
the total number of processors (including inactive processors)
Author:
Rahul Sampath

Definition at line 177 of file oda.txx.

Referenced by ComputeFBM2_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeRHS9(), CreateDirichletJacobian(), CreateDirichletLaplacian(), CreateElasticityMat(), CreateJacobian1(), CreateJacobian2(), CreateJacobian3(), ot::DAMGSetKSP(), and ot::interpolateData().

unsigned int ot::DA::getNumBlocks  )  [inline]
 

Returns:
the number of blocks owned by the calling processor
Author:
Rahul Sampath

Definition at line 99 of file oda.txx.

References m_tnBlocks.

Referenced by ot::PrintDAMG().

Point ot::DA::getOffset  )  [inline]
 

Get the offset for the smallest element on this processor, not including ghost elements.

Author:
Hari Sundar
Returns:
The offset.
Must not be called by inactive processors
See also:
getGhostedOffset()

getCurrentOffset()

iAmActive()

Definition at line 207 of file oda.txx.

References m_bIamActive.

unsigned int ot::DA::getPreGhostElementSize  )  [inline]
 

Returns the total number of pre-ghost elements.

Author:
Rahul Sampath

Definition at line 119 of file oda.txx.

Referenced by main().

int ot::DA::getRankActive  )  [inline]
 

Returns:
the rank of the calling processors, when only the active processors are involved
Author:
Rahul Sampath

Definition at line 189 of file oda.txx.

Referenced by ot::isRegularGrid().

int ot::DA::getRankAll  )  [inline]
 

Returns:
the rank of the calling processor, when both active and inactive processors are involved.
Author:
Rahul Sampath

Definition at line 185 of file oda.txx.

Referenced by ComputeFBM2_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeRHS9(), ot::interpolateData(), and ot::writePartitionVTK().

unsigned char ot::DA::getTypeMask unsigned int  i  ) 
 

Returns the type mask for the given element.

Author:
Hari Sundar
Parameters:
i the index to the element.
Returns the type mask for the given element. The type mask is used to identify what kind of an element the element in question is. Information can be obtained from the bits of the mask. The information is stored as NHDL, where N is 1 bit to identify a node, H is 1 bit to identify a hanging element, D is one bit to identify a dependent element, and the remaining 5 bits are used to detect the level of the octant.

bool ot::DA::iAmActive  )  [inline]
 

Author:
Rahul Sampath
Returns:
true if the calling processor is active

Definition at line 165 of file oda.txx.

Referenced by ot::assignBoundaryFlags(), CalculateCenters(), ComputeDirichletJacobian(), ComputeDirichletLaplacian(), ComputeElasticityRHS(), ComputeError5(), ComputeFBM2_RHS_Part1(), ComputeFBM2_RHS_Part2(), ComputeFBM_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeFBM_RHS_Part3(), computeInvBlockDiagEntriesForElasticityMat(), ComputeRHS1(), ComputeRHS2(), ComputeRHS5(), ComputeRHS7(), ComputeRHS8(), ComputeRHS9(), ComputeRHS_omgNeumann(), ComputeSol(), CreateActiveJacobian1(), CreateAndComputeFullActiveJacobian1(), CreateAndComputeFullJacobian1(), CreateDirichletJacobian(), CreateDirichletLaplacian(), CreateElasticityMat(), CreateJacobian1(), CreateJacobian2(), CreateJacobian3(), ot::DAMGCreateAndSetDA(), ot::DAMGSetKSP(), DirichletJacobianMatGetDiagonal(), DirichletJacobianMatMult(), DirichletLaplacianMatGetDiagonal(), DirichletLaplacianMatMult(), ot::dummyRestrictMatVecType1(), EnforceZeroFBM(), EnforceZeroFBM2(), getActiveStateAndActiveCommForKSP_Shell_DirichletJac(), getActiveStateAndActiveCommForKSP_Shell_Elas(), getActiveStateAndActiveCommForKSP_Shell_Jac1(), getActiveStateAndActiveCommForKSP_Shell_Jac2or3(), ot::getGlobalMaxLevel(), ot::getGlobalMinLevel(), ot::injectNodalVector(), ot::interpolateData(), ot::isRegularGrid(), Jacobian3MatGetDiagonal(), Jacobian3MatMult(), main(), ot::PC_KSP_Shell_SetUp(), ot::PrintDAMG(), ot::prolongMatVecType1(), ot::restrictMatVecType1(), SetDirichletJacContexts(), SetElasticityContexts(), SetPDECoefFromPts(), SetSolution5(), SetSolutionFBM(), SetSolutionFBM2(), TmpDirichletJacobianMatMult(), and TmpDirichletLaplacianMatMult().

void ot::DA::incrementCurrentOffset  ) 
 

Points to the next anchor. This function is required because we only store the levels of the octants and not their anchors. So the anchors are computed on the fly within the loops.

Author:
Hari Sundar

Definition at line 292 of file oda.C.

References getNextOffset(), m_bIamActive, m_ptCurrentOffset, m_ucpOctLevels, m_uiCurrent, m_uiElementBegin, m_uiMaxDepth, NRM, RED, Point::x(), Point::xint(), Point::y(), Point::yint(), Point::z(), and Point::zint().

void ot::DA::incrementPreGhostOffset  ) 
 

Points to the anchor of the next pre-ghost octant. This function is required because we only store the levels of the octants and not their anchors. So the anchors are computed on the fly within the loops.

Author:
Rahul Sampath

Definition at line 788 of file oda.C.

References curr(), m_bIamActive, m_ptCurrentOffset, m_ptsPreGhostOffsets, m_ucpOctLevels, m_ucpPreGhostConnectivity, m_uiCurrent, m_uiMaxDepth, m_uiPreGhostQuotientCnt, Point::xint(), Point::yint(), and Point::zint().

void ot::DA::init< ot::DA_FLAGS::W_DEPENDENT >  )  [inline]
 

Initializes the internal counters for a new loop. Remember that the DA currently only supports elemental loops.

Author:
Rahul Sampath

Hari Sundar

Parameters:
LoopType valid types are All, Local, Independent, Dependent, and Ghosted.
Sample loop through the elements:

          for ( init<loopType>; curr() < end<loopType>(); next<loopType>() ) { 
        // Do whatever is required ...
        } 

See also:
next()

curr()

end()

Referenced by ot::assignBoundaryFlags(), CalculateCenters(), ComputeDirichletJacobian(), ComputeDirichletLaplacian(), ComputeElasticityRHS(), ComputeError5(), ComputeFBM2_RHS_Part1(), ComputeFBM2_RHS_Part2(), ComputeFBM_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeFBM_RHS_Part3(), computeInvBlockDiagEntriesForElasticityMat(), ComputeRHS1(), ComputeRHS2(), ComputeRHS5(), ComputeRHS7(), ComputeRHS8(), ComputeRHS9(), ComputeRHS_omgNeumann(), ComputeSol(), CreateAndComputeFullActiveJacobian1(), CreateAndComputeFullJacobian1(), DirichletJacobianMatGetDiagonal(), DirichletJacobianMatMult(), DirichletLaplacianMatGetDiagonal(), DirichletLaplacianMatMult(), ot::dummyRestrictMatVecType1(), EnforceZeroFBM(), EnforceZeroFBM2(), ot::getGlobalMaxLevel(), ot::getGlobalMinLevel(), InitializeData(), ot::injectNodalVector(), ot::interpolateData(), ot::isRegularGrid(), Jacobian3MatGetDiagonal(), Jacobian3MatMult(), main(), ot::prolongMatVecType1(), ot::restrictMatVecType1(), SetDirichletJacContexts(), SetElasticityContexts(), SetPDECoefFromPts(), SetSolution5(), SetSolutionFBM(), SetSolutionFBM2(), TmpDirichletJacobianMatMult(), and TmpDirichletLaplacianMatMult().

bool ot::DA::isBoundaryOctant unsigned char *  flags = NULL  ) 
 

Call this function to check if curr() points to an octant touching the domain boundaries from the inside. This function is for real octants only, pseudo-octants can not be tested using this function.

Author:
Rahul Sampath

Parameters:
flags The type of boundary is returned in this variable. The type is one of the enumerations in BoundaryType2
Returns:
true if curr() points to an internal boundary octant
See also:
curr()

TreeNode::BoundaryType2

Definition at line 369 of file oda.C.

References curr(), getCurrentOffset(), getLevel(), getMaxDepth(), m_bIamActive, Point::xint(), Point::yint(), and Point::zint().

Referenced by ot::assignBoundaryFlags(), and ot::injectNodalVector().

bool ot::DA::isGhost unsigned int  i  )  [inline]
 

Returns true if the element/node specified by the index is a Ghost.

Author:
Hari Sundar
Parameters:
i the index to the element/node.

Definition at line 65 of file oda.txx.

References m_bIamActive.

bool ot::DA::isHanging unsigned int  i  )  [inline]
 

Returns true if the element specified by the index contains a hanging node.

Author:
Hari Sundar
Parameters:
i the index to the element.

Definition at line 72 of file oda.txx.

References m_bIamActive, and m_ucpLutMasksPtr.

Referenced by ot::isRegularGrid().

bool ot::DA::isLUTcompressed  )  [inline]
 

Author:
Rahul Sampath
Returns:
true if the element-to-node mappings were compressed using Goloumb-Rice encoding

Definition at line 107 of file oda.txx.

Referenced by ot::assignBoundaryFlags(), and ot::injectNodalVector().

bool ot::DA::isNode unsigned int  i  )  [inline]
 

Returns true if the element specified by the index corresponds to a node.

Author:
Hari Sundar
Parameters:
i the index to the element.

Definition at line 58 of file oda.txx.

References m_bIamActive, and m_ucpOctLevels.

Referenced by buildNodeList().

unsigned int ot::DA::next< ot::DA_FLAGS::WRITABLE >  )  [inline]
 

Returns an index to the next element of the current loop. The loop needs to be initialized using a call to initializeLoopCounter().

Author:
Rahul Sampath

Hari Sundar

Returns:
the index to the end of the loop.
Sample loop through the elements:

          for ( init<loopType>; curr() < end<loopType>(); next<loopType>() ) { 
        // Do whatever is required ...
        } 

See also:
init()

curr()

end()

Referenced by ot::assignBoundaryFlags(), CalculateCenters(), ComputeDirichletJacobian(), ComputeDirichletLaplacian(), ComputeElasticityRHS(), ComputeError5(), ComputeFBM2_RHS_Part1(), ComputeFBM2_RHS_Part2(), ComputeFBM_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeFBM_RHS_Part3(), computeInvBlockDiagEntriesForElasticityMat(), ComputeRHS1(), ComputeRHS2(), ComputeRHS5(), ComputeRHS7(), ComputeRHS8(), ComputeRHS9(), ComputeRHS_omgNeumann(), ComputeSol(), CreateAndComputeFullActiveJacobian1(), CreateAndComputeFullJacobian1(), DirichletJacobianMatGetDiagonal(), DirichletJacobianMatMult(), DirichletLaplacianMatGetDiagonal(), DirichletLaplacianMatMult(), ot::dummyRestrictMatVecType1(), EnforceZeroFBM(), EnforceZeroFBM2(), ot::getGlobalMaxLevel(), ot::getGlobalMinLevel(), InitializeData(), ot::injectNodalVector(), ot::interpolateData(), ot::isRegularGrid(), Jacobian3MatGetDiagonal(), Jacobian3MatMult(), main(), ot::prolongMatVecType1(), ot::restrictMatVecType1(), SetDirichletJacContexts(), SetElasticityContexts(), SetPDECoefFromPts(), SetSolution5(), SetSolutionFBM(), SetSolutionFBM2(), TmpDirichletJacobianMatMult(), and TmpDirichletLaplacianMatMult().

template<typename T>
int ot::DA::ReadFromGhostElemsBegin T *  arr,
unsigned int  dof = 1
 

Author:
Rahul Sampath Counterpart of ReadFromGhostsBegin for elemental arrays
See also:
ReadFromGhostsBegin()

Definition at line 648 of file oda.txx.

References ot::updateContext::buffer, ot::updateContext::keys, m_mpiContexts, m_uiCommTag, m_uipElemRecvCounts, m_uipElemRecvOffsets, m_uipElemRecvProcs, m_uipElemScatterMap, m_uipElemSendCounts, m_uipElemSendOffsets, m_uipElemSendProcs, PROF_READ_GHOST_ELEMS_BEGIN_BEGIN, PROF_READ_GHOST_ELEMS_BEGIN_END, and ot::updateContext::requests.

template<typename T>
int ot::DA::ReadFromGhostElemsEnd T *  arr  ) 
 

Author:
Rahul Sampath Counterpart of ReadFromGhostsEnd() for elemental arrays
See also:
ReadFromGhostsEnd()

Definition at line 695 of file oda.txx.

References m_mpiContexts, PROF_READ_GHOST_ELEMS_END_BEGIN, PROF_READ_GHOST_ELEMS_END_END, and ot::updateContext::requests.

template<typename T>
int ot::DA::ReadFromGhostsBegin T *  arr,
unsigned int  dof = 1
 

Updates the ghost values by obtaining values from the processors which own them.

Author:
Hari Sundar

Rahul Sampath

Parameters:
arr the local buffer which needs to be updated. This must be obtained with a call to vecGetBuffer().
isElemental specifies whether the current buffer is elemental (true) or nodal (false).
dof The degrees of freedom for the current vector, default is 1.
See also:
ReadFromGhostsEnd() Updates the ghost values by obtaining values from the processors which own them. ReadFromGhostsEnd() must be called before the ghosted values can be used.

Definition at line 480 of file oda.txx.

References ot::updateContext::buffer, ot::updateContext::keys, m_mpiContexts, m_uiCommTag, m_uipRecvCounts, m_uipRecvOffsets, m_uipRecvProcs, m_uipScatterMap, m_uipSendCounts, m_uipSendOffsets, m_uipSendProcs, PROF_READ_GHOST_NODES_BEGIN_BEGIN, PROF_READ_GHOST_NODES_BEGIN_END, and ot::updateContext::requests.

Referenced by ComputeError5(), DirichletJacobianMatMult(), DirichletLaplacianMatMult(), ot::injectNodalVector(), ot::interpolateData(), Jacobian1MatMult(), Jacobian3MatMult(), MassMatMult(), ot::prolongMatVecType1(), ot::restrictMatVecType1(), TmpDirichletJacobianMatMult(), and TmpDirichletLaplacianMatMult().

template<typename T>
int ot::DA::ReadFromGhostsEnd T *  arr  ) 
 

Waits for updates of the ghost values to finish.

Author:
Hari Sundar

Rahul Sampath

Definition at line 525 of file oda.txx.

References m_mpiContexts, PROF_READ_GHOST_NODES_END_BEGIN, PROF_READ_GHOST_NODES_END_END, and ot::updateContext::requests.

Referenced by ComputeError5(), DirichletJacobianMatMult(), DirichletLaplacianMatMult(), ot::injectNodalVector(), ot::interpolateData(), Jacobian1MatMult(), Jacobian3MatMult(), MassMatMult(), ot::prolongMatVecType1(), ot::restrictMatVecType1(), TmpDirichletJacobianMatMult(), and TmpDirichletLaplacianMatMult().

int ot::DA::setValuesInMatrix Mat  mat,
std::vector< ot::MatRecord > &  records,
unsigned int  dof,
InsertMode  mode
 

a wrapper for setting values into the Matrix. This internally calls PETSc's MatSetValues() function.

Author:
Rahul Sampath

Parameters:
mat The matrix
records The values and their indices
dof the number of degrees of freedom per node
mode Either INSERT_VALUES or ADD_VALUES
Returns:
an error flag Call PETSc's MatAssembly routines to assemble the matrix after setting the values. 'records' will be cleared inside the function. It would be more efficient to set values in chunks by calling this function multiple times with different sets of values instead of a single call at the end of the loop. One can use the size of 'records' to determine the number of such chunks. Calls to this function with the INSERT_VALUES and ADD_VALUES options cannot be mixed without intervening calls to PETSc's MatAssembly routines.

Definition at line 116 of file oda.C.

References m_bComputedLocalToGlobal, m_dilpLocalToGlobal, PROF_SET_MAT_VALUES_BEGIN, PROF_SET_MAT_VALUES_END, and sort().

Referenced by ComputeDirichletJacobian(), ComputeDirichletLaplacian(), CreateAndComputeFullActiveJacobian1(), and CreateAndComputeFullJacobian1().

void ot::DA::updateQuotientCounter  ) 
 

Call this function, if a call to getNodeIndices() is skipped within the loop and if the element-to-node mappings are compressed.

Author:
Hari Sundar

See also:
getNodeIndices()

Definition at line 765 of file oda.C.

References m_bIamActive, m_ucpLutMasksPtr, and m_uiQuotientCounter.

Referenced by ot::assignBoundaryFlags(), and ot::injectNodalVector().

template<typename T>
int ot::DA::vecGetBuffer std::vector< T > &  in,
T *&  out,
bool  isElemental,
bool  isGhosted,
bool  isReadOnly,
unsigned int  dof = 1
 

Returns a C-array of type T from a distributed std vector for quick local access.

Author:
Hari Sundar
Parameters:
in The std::vector which needs to be accessed localy.
out The local C-array which is used to access data localy.
isElemental true if in is an elemental vector, false if it is a nodal vector.
isGhosted true if in contains ghost values.
isReadOnly true if the buffer is required only for reading, should be set to false if writes will be performed.
dof the degrees of freedom for the vector. The default is 1.
See also:
vecRestoreBuffer() Returns a C-array of type T from a distributed std vector for quick local access. In addition, this operation is required to use the oda based indexing. vecRestoreBuffer() must be called when the buffer is no longer needed. T must have a default constructor, which should zero out the object.

Definition at line 846 of file oda.txx.

References m_ucpOctLevels, m_uiElementBegin, m_uiElementEnd, m_uiLocalBufferSize, m_uiNodeSize, m_uiPostGhostBegin, m_uiPreGhostBoundaryNodeSize, and m_uiPreGhostNodeSize.

int ot::DA::vecGetBuffer Vec  in,
PetscScalar *&  out,
bool  isElemental,
bool  isGhosted,
bool  isReadOnly,
unsigned int  dof = 1
 

Returns a C-array of type PetscScalar from a PETSc Vec for quick local access.

Author:
Hari Sundar
Parameters:
in The PETSc Vec which needs to be accessed localy.
out The local C-array which is used to access data localy.
isElemental true if in is an elemental vector, false if it is a nodal vector.
isGhosted true if in contains ghost values.
isReadOnly true if the buffer is required only for reading, should be set to false if writes will be performed.
dof the degrees of freedom for the vector. The default is 1.
See also:
vecRestoreBuffer() Returns a C-array of type PetscScalar from a PETSc Vec for quick local access. In addition, this operation is required to use the oda based indexing. vecRestoreBuffer() must be called when the buffer is no longer needed. If isReadOnly is true, this involves a simple copy of local values from in. The ghosts will have junk value in this case. If isReadOnly is false, the buffer will be zeroed out first and then the local values from in will be copied. The ghosts will have 0 values in this case.

Definition at line 521 of file oda.C.

References m_iRankAll, m_ucpOctLevels, m_uiElementBegin, m_uiElementEnd, m_uiLocalBufferSize, m_uiNodeSize, m_uiPostGhostBegin, m_uiPreGhostBoundaryNodeSize, and m_uiPreGhostNodeSize.

Referenced by ot::assignBoundaryFlags(), ComputeElasticityRHS(), ComputeError5(), ComputeFBM2_RHS_Part1(), ComputeFBM2_RHS_Part2(), ComputeFBM_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeFBM_RHS_Part3(), computeInvBlockDiagEntriesForElasticityMat(), ComputeRHS1(), ComputeRHS2(), ComputeRHS5(), ComputeRHS7(), ComputeRHS8(), ComputeRHS9(), ComputeRHS_omgNeumann(), ComputeSol(), DirichletJacobianMatGetDiagonal(), DirichletJacobianMatMult(), DirichletLaplacianMatGetDiagonal(), DirichletLaplacianMatMult(), ot::dummyRestrictMatVecType1(), EnforceZeroFBM(), EnforceZeroFBM2(), InitializeData(), ot::injectNodalVector(), ot::interpolateData(), Jacobian1MatGetDiagonal(), Jacobian1MatMult(), Jacobian3MatGetDiagonal(), Jacobian3MatMult(), main(), MassMatGetDiagonal(), MassMatMult(), stiffnessMatrix::preMatVec(), ot::prolongMatVecType1(), ot::restrictMatVecType1(), SetPDECoefFromPts(), SetSolution5(), SetSolutionFBM(), SetSolutionFBM2(), TmpDirichletJacobianMatMult(), and TmpDirichletLaplacianMatMult().

template<typename T>
int ot::DA::vecRestoreBuffer std::vector< T > &  in,
T *  out,
bool  isElemental,
bool  isGhosted,
bool  isReadOnly,
unsigned int  dof = 1
 

Restores the C-array of type T to a distributed std vector after quick local access.

Author:
Hari Sundar
Parameters:
in The std::vector which was accessed localy.
out The local C-array which is used to access data localy.
isElemental true if in is an elemental vector, false if it is a nodal vector.
isGhosted true if in contains ghost values.
isReadOnly true if the buffer was used only for reading, should be set to false if writes will be performed.
dof the degrees of freedom for the vector. The default is 1.
See also:
vecGetBuffer() Restores the C-array of type T to a distributed std vector after quick local access.

Definition at line 966 of file oda.txx.

References m_ucpOctLevels, m_uiElementBegin, m_uiElementEnd, m_uiLocalBufferSize, m_uiNodeSize, m_uiPostGhostBegin, m_uiPreGhostBoundaryNodeSize, and m_uiPreGhostNodeSize.

int ot::DA::vecRestoreBuffer Vec  in,
PetscScalar *  out,
bool  isElemental,
bool  isGhosted,
bool  isReadOnly,
unsigned int  dof = 1
 

Restores the C-array of type PetscScalar to a PETSc Vec after quick local access.

Author:
Hari Sundar
Parameters:
in The PETSc Vec which was accessed localy.
out The local C-array which is used to access data localy.
isElemental true if in is an elemental vector, false if it is a nodal vector.
isGhosted true if in contains ghost values.
isReadOnly true if the buffer was used only for reading, should be set to false if writes will be performed.
dof the degrees of freedom for the vector. The default is 1.
See also:
vecGetBuffer() Restores the C-array of type PetscScalar to a PETSc Vec after quick local access.

Definition at line 648 of file oda.C.

References m_ucpOctLevels, m_uiElementBegin, m_uiElementEnd, m_uiLocalBufferSize, m_uiNodeSize, m_uiPostGhostBegin, m_uiPreGhostBoundaryNodeSize, m_uiPreGhostNodeSize, NRM, and RED.

Referenced by ot::assignBoundaryFlags(), ComputeElasticityRHS(), ComputeError5(), ComputeFBM2_RHS_Part1(), ComputeFBM2_RHS_Part2(), ComputeFBM_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeFBM_RHS_Part3(), computeInvBlockDiagEntriesForElasticityMat(), ComputeRHS1(), ComputeRHS2(), ComputeRHS5(), ComputeRHS7(), ComputeRHS8(), ComputeRHS9(), ComputeRHS_omgNeumann(), ComputeSol(), DirichletJacobianMatGetDiagonal(), DirichletJacobianMatMult(), DirichletLaplacianMatGetDiagonal(), DirichletLaplacianMatMult(), ot::dummyRestrictMatVecType1(), EnforceZeroFBM(), EnforceZeroFBM2(), InitializeData(), ot::injectNodalVector(), ot::interpolateData(), Jacobian1MatGetDiagonal(), Jacobian1MatMult(), Jacobian3MatGetDiagonal(), Jacobian3MatMult(), main(), MassMatGetDiagonal(), MassMatMult(), stiffnessMatrix::postMatVec(), ot::prolongMatVecType1(), ot::restrictMatVecType1(), SetPDECoefFromPts(), SetSolution5(), SetSolutionFBM(), SetSolutionFBM2(), TmpDirichletJacobianMatMult(), and TmpDirichletLaplacianMatMult().

template<typename T>
int ot::DA::WriteToGhostElemsBegin T *  arr,
unsigned int  dof = 1
 

Author:
Rahul Sampath Counterpart of WriteToGhostsBegin() for elemental arrays
See also:
WriteToGhostsBegin()

Definition at line 733 of file oda.txx.

References ot::updateContext::buffer, ot::updateContext::keys, m_mpiContexts, m_uiCommTag, m_uipElemRecvCounts, m_uipElemRecvOffsets, m_uipElemRecvProcs, m_uipElemScatterMap, m_uipElemSendCounts, m_uipElemSendOffsets, m_uipElemSendProcs, PROF_WRITE_GHOST_ELEMS_BEGIN_BEGIN, PROF_WRITE_GHOST_ELEMS_BEGIN_END, and ot::updateContext::requests.

template<typename T>
int ot::DA::WriteToGhostElemsEnd T *  arr,
unsigned int  dof = 1
 

Author:
Rahul Sampath Counterpart of WriteToGhostsEnd for elemental arrays
See also:
WriteToGhostsEnd()

Definition at line 774 of file oda.txx.

References m_mpiContexts, m_uipElemScatterMap, PROF_WRITE_GHOST_ELEMS_END_BEGIN, PROF_WRITE_GHOST_ELEMS_END_END, and ot::updateContext::requests.

template<typename T>
int ot::DA::WriteToGhostsBegin T *  arr,
unsigned int  dof = 1
 

Send the ghost values to the processors that own them so that these values can be added.

Author:
Rahul Sampath

Definition at line 563 of file oda.txx.

References ot::updateContext::buffer, ot::updateContext::keys, m_mpiContexts, m_uiCommTag, m_uipRecvCounts, m_uipRecvOffsets, m_uipRecvProcs, m_uipScatterMap, m_uipSendCounts, m_uipSendOffsets, m_uipSendProcs, PROF_WRITE_GHOST_NODES_BEGIN_BEGIN, PROF_WRITE_GHOST_NODES_BEGIN_END, and ot::updateContext::requests.

Referenced by ComputeFBM2_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeRHS9(), ot::dummyRestrictMatVecType1(), ot::injectNodalVector(), Jacobian3MatGetDiagonal(), Jacobian3MatMult(), ot::prolongMatVecType1(), and ot::restrictMatVecType1().

template<typename T>
int ot::DA::WriteToGhostsEnd T *  arr,
unsigned int  dof = 1
 

Waits for updates of the ghost values to finish.

Author:
Rahul Sampath

Definition at line 603 of file oda.txx.

References m_mpiContexts, m_uipScatterMap, PROF_WRITE_GHOST_NODES_END_BEGIN, PROF_WRITE_GHOST_NODES_END_END, and ot::updateContext::requests.

Referenced by ComputeFBM2_RHS_Part1(), ComputeFBM_RHS_Part2(), ComputeRHS9(), ot::dummyRestrictMatVecType1(), ot::injectNodalVector(), Jacobian3MatGetDiagonal(), Jacobian3MatMult(), ot::prolongMatVecType1(), and ot::restrictMatVecType1().


Member Data Documentation

bool ot::DA::m_bCompressLut [protected]
 

Definition at line 318 of file oda.h.

Referenced by getChildNumber().

bool ot::DA::m_bComputedLocalToGlobal [protected]
 

Definition at line 319 of file oda.h.

Referenced by computeLocalToGlobalMappings(), and setValuesInMatrix().

bool ot::DA::m_bComputedLocalToGlobalElems [protected]
 

Definition at line 320 of file oda.h.

Referenced by computeLocalToGlobalElemMappings().

bool ot::DA::m_bIamActive [protected]
 

Definition at line 321 of file oda.h.

Referenced by computeLocalToGlobalElemMappings(), computeLocalToGlobalMappings(), curr(), currWithInfo(), DA_FactoryPart0(), DA_FactoryPart3(), getChildNumber(), getCurrentOffset(), getFlag(), getGhostedOffset(), getHangingNodeIndex(), getLevel(), getNextOffset(), getNodeIndices(), getOffset(), incrementCurrentOffset(), incrementPreGhostOffset(), isBoundaryOctant(), isGhost(), isHanging(), isNode(), and updateQuotientCounter().

DendroIntL* ot::DA::m_dilpLocalToGlobal [protected]
 

Definition at line 327 of file oda.h.

Referenced by setValuesInMatrix(), and ~DA().

DendroIntL* ot::DA::m_dilpLocalToGlobalElems [protected]
 

Definition at line 328 of file oda.h.

Referenced by ~DA().

int ot::DA::m_iNpesActive [protected]
 

Definition at line 423 of file oda.h.

Referenced by computeLocalToGlobalElemMappings(), computeLocalToGlobalMappings(), createActiveMatrix(), createActiveVector(), DA_FactoryPart0(), and DA_FactoryPart3().

int ot::DA::m_iNpesAll [protected]
 

Definition at line 420 of file oda.h.

Referenced by createMatrix(), and createVector().

int ot::DA::m_iRankActive [protected]
 

Definition at line 422 of file oda.h.

Referenced by buildNodeList(), computeLocalToGlobalElemMappings(), computeLocalToGlobalMappings(), DA_FactoryPart0(), DA_FactoryPart3(), and getNodeIndices().

int ot::DA::m_iRankAll [protected]
 

Definition at line 419 of file oda.h.

Referenced by buildNodeList(), and vecGetBuffer().

LoopCounters ot::DA::m_lcLoopInfo [protected]
 

Definition at line 314 of file oda.h.

Referenced by currWithInfo().

MPI_Comm ot::DA::m_mpiCommActive [protected]
 

Definition at line 421 of file oda.h.

Referenced by buildNodeList(), createActiveMatrix(), createActiveVector(), DA_FactoryPart0(), DA_FactoryPart1(), DA_FactoryPart2(), and DA_FactoryPart3().

MPI_Comm ot::DA::m_mpiCommAll [protected]
 

Definition at line 418 of file oda.h.

Referenced by createMatrix(), and createVector().

std::vector<updateContext> ot::DA::m_mpiContexts [protected]
 

Definition at line 445 of file oda.h.

Referenced by ReadFromGhostElemsBegin(), ReadFromGhostElemsEnd(), ReadFromGhostsBegin(), ReadFromGhostsEnd(), WriteToGhostElemsBegin(), WriteToGhostElemsEnd(), WriteToGhostsBegin(), and WriteToGhostsEnd().

Point ot::DA::m_ptCurrentOffset [protected]
 

Definition at line 375 of file oda.h.

Referenced by getChildNumber(), getNodeIndices(), incrementCurrentOffset(), and incrementPreGhostOffset().

Point ot::DA::m_ptGhostedOffset [protected]
 

Definition at line 368 of file oda.h.

Referenced by DA_FactoryPart3().

Point ot::DA::m_ptIndependentOffset [protected]
 

Definition at line 374 of file oda.h.

Referenced by buildNodeList().

Point ot::DA::m_ptOffset [protected]
 

Definition at line 372 of file oda.h.

Referenced by DA_FactoryPart3().

std::vector<Point> ot::DA::m_ptsPreGhostOffsets [protected]
 

Definition at line 351 of file oda.h.

Referenced by DA_FactoryPart3(), and incrementPreGhostOffset().

Point* ot::DA::m_ptsPreGhostOffsetsPtr [protected]
 

Definition at line 352 of file oda.h.

std::vector<ot::TreeNode> ot::DA::m_tnBlocks [protected]
 

Definition at line 323 of file oda.h.

Referenced by DA_FactoryPart3(), and getNumBlocks().

std::vector<ot::TreeNode> ot::DA::m_tnMinAllBlocks [protected]
 

Definition at line 324 of file oda.h.

Referenced by DA_FactoryPart3().

std::vector<unsigned char> ot::DA::m_ucpLutMasks [protected]
 

Definition at line 345 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart3(), getHangingNodeIndex(), and ~DA().

unsigned char* ot::DA::m_ucpLutMasksPtr [protected]
 

Definition at line 346 of file oda.h.

Referenced by DA_FactoryPart3(), getChildNumber(), getNodeIndices(), isHanging(), and updateQuotientCounter().

std::vector<unsigned char> ot::DA::m_ucpLutRemainders [protected]
 

Definition at line 332 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart3(), and ~DA().

unsigned char* ot::DA::m_ucpLutRemaindersPtr [protected]
 

Definition at line 333 of file oda.h.

Referenced by DA_FactoryPart3(), and getNodeIndices().

unsigned char* ot::DA::m_ucpOctLevels [protected]
 

Definition at line 317 of file oda.h.

Referenced by DA_FactoryPart3(), getChildNumber(), getFlag(), getLevel(), getNodeIndices(), incrementCurrentOffset(), incrementPreGhostOffset(), isNode(), vecGetBuffer(), vecRestoreBuffer(), and ~DA().

std::vector<unsigned char> ot::DA::m_ucpPreGhostConnectivity [protected]
 

Definition at line 348 of file oda.h.

Referenced by DA_FactoryPart3(), and incrementPreGhostOffset().

unsigned char* ot::DA::m_ucpPreGhostConnectivityPtr [protected]
 

Definition at line 349 of file oda.h.

std::vector<unsigned char> ot::DA::m_ucpSortOrders [protected]
 

Definition at line 334 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart3(), and ~DA().

unsigned char* ot::DA::m_ucpSortOrdersPtr [protected]
 

Definition at line 335 of file oda.h.

Referenced by DA_FactoryPart3(), getChildNumber(), and getNodeIndices().

unsigned int ot::DA::m_uiBoundaryNodeSize [protected]
 

Definition at line 381 of file oda.h.

Referenced by buildNodeList(), and getGhostedNodeSize().

unsigned int ot::DA::m_uiCommTag [protected]
 

Definition at line 446 of file oda.h.

Referenced by ReadFromGhostElemsBegin(), ReadFromGhostsBegin(), WriteToGhostElemsBegin(), and WriteToGhostsBegin().

unsigned int ot::DA::m_uiCurrent [protected]
 

Definition at line 408 of file oda.h.

Referenced by getChildNumber(), getNodeIndices(), incrementCurrentOffset(), and incrementPreGhostOffset().

unsigned int ot::DA::m_uiDimension [protected]
 

Definition at line 412 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart0(), DA_FactoryPart1(), DA_FactoryPart3(), and getNodeIndices().

unsigned int ot::DA::m_uiElementBegin [protected]
 

Definition at line 401 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart3(), getNodeIndices(), incrementCurrentOffset(), vecGetBuffer(), and vecRestoreBuffer().

unsigned int ot::DA::m_uiElementEnd [protected]
 

Definition at line 402 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart3(), getNodeIndices(), vecGetBuffer(), and vecRestoreBuffer().

unsigned int ot::DA::m_uiElementQuotient [protected]
 

Definition at line 363 of file oda.h.

Referenced by buildNodeList().

unsigned int ot::DA::m_uiElementSize [protected]
 

Definition at line 383 of file oda.h.

Referenced by DA_FactoryPart3(), and getGhostedElementSize().

unsigned int ot::DA::m_uiIndependentElementBegin [protected]
 

Definition at line 405 of file oda.h.

Referenced by buildNodeList().

unsigned int ot::DA::m_uiIndependentElementEnd [protected]
 

Definition at line 406 of file oda.h.

Referenced by buildNodeList().

unsigned int ot::DA::m_uiIndependentElementQuotient [protected]
 

Definition at line 364 of file oda.h.

Referenced by buildNodeList().

unsigned int ot::DA::m_uiIndependentElementSize [protected]
 

Definition at line 385 of file oda.h.

Referenced by buildNodeList().

unsigned int ot::DA::m_uiInputSize [protected]
 

Definition at line 322 of file oda.h.

Referenced by DA_FactoryPart0().

unsigned int ot::DA::m_uiLocalBufferSize [protected]
 

Definition at line 398 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart3(), getNodeIndices(), vecGetBuffer(), and vecRestoreBuffer().

unsigned int ot::DA::m_uiMaxDepth [protected]
 

Definition at line 415 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart0(), DA_FactoryPart1(), DA_FactoryPart3(), getChildNumber(), getNextOffset(), getNodeIndices(), incrementCurrentOffset(), and incrementPreGhostOffset().

std::vector<unsigned int> ot::DA::m_uiNlist [protected]
 

Definition at line 325 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart3(), and ~DA().

unsigned int* ot::DA::m_uiNlistPtr [protected]
 

Definition at line 326 of file oda.h.

Referenced by DA_FactoryPart3(), and getNodeIndices().

unsigned int ot::DA::m_uiNodeSize [protected]
 

Definition at line 380 of file oda.h.

Referenced by buildNodeList(), createActiveMatrix(), createActiveVector(), createMatrix(), createVector(), getGhostedNodeSize(), getNodeSize(), vecGetBuffer(), and vecRestoreBuffer().

std::vector<unsigned int> ot::DA::m_uipElemRecvCounts [protected]
 

Definition at line 442 of file oda.h.

Referenced by buildNodeList(), ReadFromGhostElemsBegin(), and WriteToGhostElemsBegin().

std::vector<unsigned int> ot::DA::m_uipElemRecvOffsets [protected]
 

Definition at line 440 of file oda.h.

Referenced by buildNodeList(), ReadFromGhostElemsBegin(), and WriteToGhostElemsBegin().

std::vector<unsigned int> ot::DA::m_uipElemRecvProcs [protected]
 

Definition at line 441 of file oda.h.

Referenced by buildNodeList(), ReadFromGhostElemsBegin(), and WriteToGhostElemsBegin().

std::vector<unsigned int> ot::DA::m_uipElemScatterMap [protected]
 

Definition at line 431 of file oda.h.

Referenced by buildNodeList(), ReadFromGhostElemsBegin(), WriteToGhostElemsBegin(), and WriteToGhostElemsEnd().

std::vector<unsigned int> ot::DA::m_uipElemSendCounts [protected]
 

Definition at line 434 of file oda.h.

Referenced by buildNodeList(), ReadFromGhostElemsBegin(), and WriteToGhostElemsBegin().

std::vector<unsigned int> ot::DA::m_uipElemSendOffsets [protected]
 

Definition at line 432 of file oda.h.

Referenced by buildNodeList(), ReadFromGhostElemsBegin(), and WriteToGhostElemsBegin().

std::vector<unsigned int> ot::DA::m_uipElemSendProcs [protected]
 

Definition at line 433 of file oda.h.

Referenced by buildNodeList(), ReadFromGhostElemsBegin(), and WriteToGhostElemsBegin().

unsigned int ot::DA::m_uiPostGhostBegin [protected]
 

Definition at line 403 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart3(), getNodeIndices(), vecGetBuffer(), and vecRestoreBuffer().

unsigned int ot::DA::m_uiPostGhostNodeSize [protected]
 

Definition at line 396 of file oda.h.

Referenced by buildNodeList().

std::vector<unsigned int> ot::DA::m_uipRecvCounts [protected]
 

Definition at line 438 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart3(), ReadFromGhostsBegin(), and WriteToGhostsBegin().

std::vector<unsigned int> ot::DA::m_uipRecvOffsets [protected]
 

Definition at line 436 of file oda.h.

Referenced by buildNodeList(), ReadFromGhostsBegin(), and WriteToGhostsBegin().

std::vector<unsigned int> ot::DA::m_uipRecvProcs [protected]
 

Definition at line 437 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart3(), ReadFromGhostsBegin(), and WriteToGhostsBegin().

unsigned int ot::DA::m_uiPreGhostBoundaryNodeSize [protected]
 

Definition at line 393 of file oda.h.

Referenced by buildNodeList(), createActiveVector(), createVector(), getGhostedNodeSize(), vecGetBuffer(), and vecRestoreBuffer().

unsigned int ot::DA::m_uiPreGhostElementSize [protected]
 

Definition at line 388 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart3(), and getNodeIndices().

unsigned int ot::DA::m_uiPreGhostNodeSize [protected]
 

Definition at line 392 of file oda.h.

Referenced by buildNodeList(), createActiveVector(), createVector(), getGhostedNodeSize(), vecGetBuffer(), and vecRestoreBuffer().

unsigned int ot::DA::m_uiPreGhostQuotientCnt [protected]
 

Definition at line 360 of file oda.h.

Referenced by incrementPreGhostOffset().

std::vector<unsigned int> ot::DA::m_uipScatterMap [protected]
 

Definition at line 426 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart3(), ReadFromGhostsBegin(), WriteToGhostsBegin(), and WriteToGhostsEnd().

std::vector<unsigned int> ot::DA::m_uipSendCounts [protected]
 

Definition at line 429 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart3(), ReadFromGhostsBegin(), and WriteToGhostsBegin().

std::vector<unsigned int> ot::DA::m_uipSendOffsets [protected]
 

Definition at line 427 of file oda.h.

Referenced by buildNodeList(), ReadFromGhostsBegin(), and WriteToGhostsBegin().

std::vector<unsigned int> ot::DA::m_uipSendProcs [protected]
 

Definition at line 428 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart3(), ReadFromGhostsBegin(), and WriteToGhostsBegin().

unsigned int ot::DA::m_uiQuotientCounter [protected]
 

Definition at line 359 of file oda.h.

Referenced by getNodeIndices(), and updateQuotientCounter().

std::vector<unsigned short> ot::DA::m_uspLutQuotients [protected]
 

Definition at line 339 of file oda.h.

Referenced by buildNodeList(), DA_FactoryPart3(), and ~DA().

unsigned short* ot::DA::m_uspLutQuotientsPtr [protected]
 

Definition at line 340 of file oda.h.

Referenced by DA_FactoryPart3(), and getNodeIndices().

std::vector<Point> ot::DA::PreGhostAnchors [protected]
 

Definition at line 354 of file oda.h.

Referenced by DA_FactoryPart3().


The documentation for this class was generated from the following files:
Generated on Tue Mar 24 16:14:23 2009 for DENDRO by  doxygen 1.3.9.1