Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes
Sundance::MixedDOFMapHN Class Reference

A MixedDOFMapHN is a DOF map for the case where every function is defined on every cell in the mesh, but where functions may have different bases. More...

Inheritance diagram for Sundance::MixedDOFMapHN:
Sundance::HNDoFMapBase Sundance::SpatiallyHomogeneousDOFMapBase Sundance::DOFMapBase Sundance::Printable

List of all members.

Public Member Functions

 MixedDOFMapHN (const Mesh &mesh, const Array< RCP< BasisDOFTopologyBase > > &basis, const CellFilter &maxCells, int setupVerb)
virtual ~MixedDOFMapHN ()
RCP< const MapStructuregetDOFsForCellBatch (int cellDim, const Array< int > &cellLID, const Set< int > &requestedFuncSet, Array< Array< int > > &dofs, Array< int > &nNodes, int verbosity) const
 Return the global DOFs for a batch of cells for a given set of functions on those cells.
void getTrafoMatrixForCell (int cellLID, int funcID, int &trafoMatrixSize, bool &doTransform, Array< double > &transfMatrix) const
 Returns the.
void getTrafoMatrixForFacet (int cellDim, int cellLID, int facetIndex, int funcID, int &trafoMatrixSize, bool &doTransform, Array< double > &transfMatrix) const
 Function to apply transformation for facets.
void getDOFsForHNCell (int cellDim, int cellLID, int funcID, Array< int > &dofs, Array< double > &coefs) const
 See subclass for docu We can be sure that this is used only for nodal data (for VTK plotting)
This is implemented only for Nodal data call !!!
RCP< const MapStructuremapStruct () const
int chunkForFuncID (int funcID) const
int indexForFuncID (int funcID) const
int nFuncs (int basisChunk) const
int nBasisChunks () const
const RCP< BasisDOFTopologyBase > & basis (int basisChunk) const
const Array< int > & funcID (int basisChunk) const

Private Member Functions

void checkTable () const
int getInitialDOFForCell (int cellDim, int cellLID, int basisChunk) const
int * getInitialDOFPtrForCell (int cellDim, int cellLID, int basisChunk)
const int * getInitialDOFPtrForCell (int cellDim, int cellLID, int basisChunk) const
void allocate (const Mesh &mesh)
void buildMaximalDofTable ()
bool hasBeenAssigned (int cellDim, int cellLID) const
void markAsAssigned (int cellDim, int cellLID)
void initMap ()
void setDOFs (int basisChunk, int cellDim, int cellLID, int &nextDOF, bool isRemote=false)
void shareDOFs (int cellDim, const Array< Array< int > > &outgoingCellRequests)
void computeOffsets (int dim, int localCount)

Static Private Member Functions

static int uninitializedVal ()

Private Attributes

CellFilter maxCells_
int dim_
 spatial dimension
Array< Array< Array< int > > > dofs_
 Tables of DOFs, indexed by dimension and chunk number.
Array< Array< int > > maximalDofs_
 DOFs for maximal cells, indexed by basis chunk number.
bool haveMaximalDofs_
 whether maximal DOFs have been tabulated
Array< Array< Array< Array
< Array< int > > > > > 
localNodePtrs_
 localNodePtrs_[basisChunk][cellDim][facetDim][facetNumber][nodeNumber]
int nPoints_
 Nr of points, needed only by plotting.
Array< bool > hasCellHanging_
 Is true if the cell has hanging node.
Array< Array< bool > > isElementHanging_
 Flag per element showing if the element is a hanging element.
Sundance::Map< int, Array< int > > HN_To_globalFacetsLID_
 store the facetLIDs of the points [nPoints*b + facetID]
Sundance::Map< int, Array< int > > HN_To_globalFacetsDim_
 store the facetDim of the points [nPoints*b + facetID]
Sundance::Map< int, Array
< double > > 
HN_To_coeffs_
 store the coefs [nPoints*b + facetID]
Sundance::Map< int, Array< int > > maxCellLIDwithHN_to_TrafoMatrix_
 Maps one maxCell LID to one transformation matrix, only maxDim elements and basisChunck ID with hanging nodes should have transformation matrix [maxCellLID].get -> [basisChunckID][] is the index of trafo matrix.
MatrixStore matrixStore_
 The object to store all the transformation matrixes.
Array< RCP< BasisFamilyBase > > basis_
 The basis for the transformation.
Array< Array< int > > nNodesPerCell_
 The number of nodes per cell, for each basis function type, not including the nodes of the facets of the cell.
Array< Array< int > > nDofsPerCell_
 The number of DOFs per cell, for each basis function type, not including the DOFs of the facets of the cell.
Array< Array< int > > totalNNodesPerCell_
 The number of nodes per cell, for each basis function type, including the nodes of the facets of the cell.
Array< Array< int > > totalNDofsPerCell_
 The number of DOFs per cell, for each basis function type, including the DOFs of the facets of the cell.
Array< int > cellHasAnyDOFs_
 Indicates whether the cells of each dimension have any DOFs in this map, for any chunk.
Array< Array< int > > numFacets_
 number of facets of dimension facetDim for cells of dimension cellDim.
Array< Array< int > > originalFacetOrientation_
 Orientation of each edge or face as seen by the maximal cell from which its DOFs were originally assigned.
Array< Array< int > > hasBeenAssigned_
RCP< const MapStructurestructure_
Array< int > nFuncs_

Detailed Description

A MixedDOFMapHN is a DOF map for the case where every function is defined on every cell in the mesh, but where functions may have different bases.


MixedDOFMapHN is defined on meshes with hanging nodes, it builds the restriction matrix where it is needed.

Definition at line 56 of file SundanceMixedDOFMapHN.hpp.


Constructor & Destructor Documentation

MixedDOFMapHN::MixedDOFMapHN ( const Mesh mesh,
const Array< RCP< BasisDOFTopologyBase > > &  basis,
const CellFilter maxCells,
int  setupVerb 
)
virtual Sundance::MixedDOFMapHN::~MixedDOFMapHN ( ) [inline, virtual]

Definition at line 66 of file SundanceMixedDOFMapHN.hpp.


Member Function Documentation

void MixedDOFMapHN::allocate ( const Mesh mesh) [private]
const RCP<BasisDOFTopologyBase>& Sundance::MixedDOFMapHN::basis ( int  basisChunk) const [inline]

Definition at line 138 of file SundanceMixedDOFMapHN.hpp.

References structure_.

Referenced by allocate(), and MixedDOFMapHN().

void MixedDOFMapHN::buildMaximalDofTable ( ) [private]
void MixedDOFMapHN::checkTable ( ) const [private]

Definition at line 1338 of file SundanceMixedDOFMapHN.cpp.

References Sundance::DOFMapBase::comm(), and dofs_.

int Sundance::MixedDOFMapHN::chunkForFuncID ( int  funcID) const [inline]
void MixedDOFMapHN::computeOffsets ( int  dim,
int  localCount 
) [private]
const Array<int>& Sundance::MixedDOFMapHN::funcID ( int  basisChunk) const [inline]

Definition at line 142 of file SundanceMixedDOFMapHN.hpp.

References structure_.

RCP< const MapStructure > MixedDOFMapHN::getDOFsForCellBatch ( int  cellDim,
const Array< int > &  cellLIDs,
const Set< int > &  requestedFuncSet,
Array< Array< int > > &  dofs,
Array< int > &  nNodes,
int  verb 
) const [virtual]

Return the global DOFs for a batch of cells for a given set of functions on those cells.

Parameters:
cellDim[in] The dimension of the cells in the batch of cells
cellLIDs[in] Local IDs (LIDs) for the batch of cells
requestedFuncSet[in] Set of function IDs for which DOFs are requested. Note that this must be equal to the allowed set of requested functions this->allowedFuncsOnCellBatch(cellDim,cellLIDs).
dofs[out] Global IDs for DOFs of the requested functions on the batch of cells. The size of this array on output is
           dofs.size()==mapStructure.numBasisChunks() 
. The global DOFs for cell cellLIDs[c] (where 0 <= c < cellLIDs.size()) for the cell for the basis chunk basisChunk (where 0 <= basisChunk < mapStructure.numBasisChunks()) are given by
           dofs[c*nDOFsPerCell[c]+k] 
, where
           k=0...nDOFsPerCell[c]-1 
and
 nDOFsPerCell[c]
           = mapStructure.basis(basisChunk).nNodes( spatialDim,
           this->mesh()->cellType(cellDim) ) *
           mapStructure.numFuncs(basisChunk) 
. Note that the array nDOFsPerCell used above is not actually computed here or returned by this interface. It is only used abstractly to define the dofs array above.
nNodes[out] Array giving the number of coefficients for each type of basis family in mapStructure for each function. The size of this array on return is nNodes.size()==mapStructure.numBasisChunks() and nNodes[b]==mapStructure.basis(b).nNodes(spatialDim,cellType), for b=0...mapStructure.numBasisChunks()-1.

Preconditions:

  • requestedFuncSet.setDifference( this->allowedFuncsOnCellBatch(cellDim,cellLIDs) ).size() == 0
  • ???Others???
Returns:
The map structure that groups sets of different functions according with respect to those that have the same basis family. Above, we will refer to this returned object as mapStructure where mapStructure = *returnVal.

ToDo: Remove the argument requestedFuncSet since all current use cases and implemenations asume that all of the functions are requested and returned.

ToDo: Remove the nNodes return argument since this information can be gotten just from the return mapStructure object. Specifically, nNodes[basisChunk] = mapStructure.basis(basisChunk).nNodes(spatialDim,cellType) so what is the point in returning this array? Since this is needed for a whole batch of cells, it is cheap to just grab this from the returned mapStructure object as shown above.

Implements Sundance::DOFMapBase.

Definition at line 616 of file SundanceMixedDOFMapHN.cpp.

References Sundance::numFacets(), SUNDANCE_MSG2, SUNDANCE_MSG3, and SUNDANCE_MSG4.

void MixedDOFMapHN::getDOFsForHNCell ( int  cellDim,
int  cellLID,
int  funcID,
Array< int > &  dofs,
Array< double > &  coefs 
) const [virtual]

See subclass for docu We can be sure that this is used only for nodal data (for VTK plotting)
This is implemented only for Nodal data call !!!

Function for nodal plotting.

Implements Sundance::HNDoFMapBase.

Definition at line 1233 of file SundanceMixedDOFMapHN.cpp.

References chunkForFuncID(), Sundance::Map< Key, Value, Compare >::containsKey(), dofs_, Sundance::Map< Key, Value, Compare >::get(), HN_To_coeffs_, HN_To_globalFacetsDim_, HN_To_globalFacetsLID_, indexForFuncID(), nDofsPerCell_, nNodesPerCell_, nPoints_, Sundance::DOFMapBase::setupVerb(), and SUNDANCE_MSG1.

int Sundance::MixedDOFMapHN::getInitialDOFForCell ( int  cellDim,
int  cellLID,
int  basisChunk 
) const [inline, private]

Definition at line 152 of file SundanceMixedDOFMapHN.hpp.

References dofs_, and nDofsPerCell_.

Referenced by shareDOFs().

int* Sundance::MixedDOFMapHN::getInitialDOFPtrForCell ( int  cellDim,
int  cellLID,
int  basisChunk 
) [inline, private]

Definition at line 157 of file SundanceMixedDOFMapHN.hpp.

References dofs_, and nDofsPerCell_.

Referenced by setDOFs().

const int* Sundance::MixedDOFMapHN::getInitialDOFPtrForCell ( int  cellDim,
int  cellLID,
int  basisChunk 
) const [inline, private]

Definition at line 162 of file SundanceMixedDOFMapHN.hpp.

References dofs_, and nDofsPerCell_.

void MixedDOFMapHN::getTrafoMatrixForCell ( int  cellLID,
int  funcID,
int &  trafoMatrixSize,
bool &  doTransform,
Array< double > &  transfMatrix 
) const [virtual]

Returns the.

Parameters:
cellLID[in] the maxCell LID input
funcID[in]
trafoMatrixSize[in/out]
doTransform[out]
transfMatrix[out] row major matrix

Implements Sundance::HNDoFMapBase.

Definition at line 1174 of file SundanceMixedDOFMapHN.cpp.

References chunkForFuncID(), Sundance::Map< Key, Value, Compare >::containsKey(), Sundance::Map< Key, Value, Compare >::get(), matrixStore_, maxCellLIDwithHN_to_TrafoMatrix_, Sundance::DOFMapBase::setupVerb(), and SUNDANCE_MSG1.

void MixedDOFMapHN::getTrafoMatrixForFacet ( int  cellDim,
int  cellLID,
int  facetIndex,
int  funcID,
int &  trafoMatrixSize,
bool &  doTransform,
Array< double > &  transfMatrix 
) const [virtual]

Function to apply transformation for facets.

Parameters:
cellDim,thefacet dimension
cellLID,facetLID
facetIndex,facetindex in the maxCofacet
funcID[in] the function ID
trafoMatrixSize[in/out]
doTransform[out]
transfMatrix[out] (we assume that the array is already pre-sized )

Implements Sundance::HNDoFMapBase.

Definition at line 1202 of file SundanceMixedDOFMapHN.cpp.

References chunkForFuncID(), Sundance::Map< Key, Value, Compare >::containsKey(), Sundance::Map< Key, Value, Compare >::get(), matrixStore_, maxCellLIDwithHN_to_TrafoMatrix_, Sundance::Mesh::maxCofacetLID(), Sundance::DOFMapBase::mesh(), Sundance::DOFMapBase::setupVerb(), and SUNDANCE_MSG2.

bool Sundance::MixedDOFMapHN::hasBeenAssigned ( int  cellDim,
int  cellLID 
) const [inline, private]

Definition at line 174 of file SundanceMixedDOFMapHN.hpp.

References hasBeenAssigned_.

Referenced by initMap().

int Sundance::MixedDOFMapHN::indexForFuncID ( int  funcID) const [inline]

Definition at line 126 of file SundanceMixedDOFMapHN.hpp.

References structure_.

Referenced by getDOFsForHNCell().

void MixedDOFMapHN::initMap ( ) [private]
RCP<const MapStructure> Sundance::MixedDOFMapHN::mapStruct ( ) const [inline, virtual]

Implements Sundance::SpatiallyHomogeneousDOFMapBase.

Definition at line 118 of file SundanceMixedDOFMapHN.hpp.

References structure_.

void Sundance::MixedDOFMapHN::markAsAssigned ( int  cellDim,
int  cellLID 
) [inline, private]

Definition at line 177 of file SundanceMixedDOFMapHN.hpp.

References hasBeenAssigned_.

Referenced by initMap().

int Sundance::MixedDOFMapHN::nBasisChunks ( ) const [inline]

Definition at line 134 of file SundanceMixedDOFMapHN.hpp.

References nFuncs_.

Referenced by allocate(), buildMaximalDofTable(), initMap(), and shareDOFs().

int Sundance::MixedDOFMapHN::nFuncs ( int  basisChunk) const [inline]

Definition at line 130 of file SundanceMixedDOFMapHN.hpp.

References nFuncs_.

Referenced by allocate(), and buildMaximalDofTable().

void MixedDOFMapHN::setDOFs ( int  basisChunk,
int  cellDim,
int  cellLID,
int &  nextDOF,
bool  isRemote = false 
) [private]
void MixedDOFMapHN::shareDOFs ( int  cellDim,
const Array< Array< int > > &  outgoingCellRequests 
) [private]
static int Sundance::MixedDOFMapHN::uninitializedVal ( ) [inline, static, private]

Definition at line 195 of file SundanceMixedDOFMapHN.hpp.

Referenced by allocate().


Member Data Documentation

Array<RCP<BasisFamilyBase> > Sundance::MixedDOFMapHN::basis_ [mutable, private]

The basis for the transformation.

Definition at line 254 of file SundanceMixedDOFMapHN.hpp.

Referenced by buildMaximalDofTable(), and MixedDOFMapHN().

Indicates whether the cells of each dimension have any DOFs in this map, for any chunk.

Definition at line 280 of file SundanceMixedDOFMapHN.hpp.

Referenced by allocate(), and initMap().

spatial dimension

Definition at line 201 of file SundanceMixedDOFMapHN.hpp.

Referenced by allocate(), buildMaximalDofTable(), initMap(), and shareDOFs().

Array<Array<Array<int> > > Sundance::MixedDOFMapHN::dofs_ [private]

Tables of DOFs, indexed by dimension and chunk number.

dof(cellDim, cellLID, chunk, func, node) = dofs_[cellDim][chunk][(cellLID*nFunc + func)*nNode + node]

Definition at line 208 of file SundanceMixedDOFMapHN.hpp.

Referenced by allocate(), buildMaximalDofTable(), checkTable(), computeOffsets(), getDOFsForHNCell(), getInitialDOFForCell(), getInitialDOFPtrForCell(), and shareDOFs().

Array<Array<int> > Sundance::MixedDOFMapHN::hasBeenAssigned_ [private]

Definition at line 292 of file SundanceMixedDOFMapHN.hpp.

Referenced by allocate(), hasBeenAssigned(), and markAsAssigned().

Is true if the cell has hanging node.

Definition at line 231 of file SundanceMixedDOFMapHN.hpp.

Referenced by allocate(), and buildMaximalDofTable().

whether maximal DOFs have been tabulated

Definition at line 218 of file SundanceMixedDOFMapHN.hpp.

Referenced by buildMaximalDofTable().

Sundance::Map< int , Array<double> > Sundance::MixedDOFMapHN::HN_To_coeffs_ [private]

store the coefs [nPoints*b + facetID]

Definition at line 243 of file SundanceMixedDOFMapHN.hpp.

Referenced by buildMaximalDofTable(), and getDOFsForHNCell().

store the facetDim of the points [nPoints*b + facetID]

Definition at line 240 of file SundanceMixedDOFMapHN.hpp.

Referenced by buildMaximalDofTable(), and getDOFsForHNCell().

store the facetLIDs of the points [nPoints*b + facetID]

Definition at line 237 of file SundanceMixedDOFMapHN.hpp.

Referenced by buildMaximalDofTable(), and getDOFsForHNCell().

Array< Array<bool> > Sundance::MixedDOFMapHN::isElementHanging_ [private]

Flag per element showing if the element is a hanging element.

Definition at line 234 of file SundanceMixedDOFMapHN.hpp.

Referenced by allocate(), and setDOFs().

Array<Array<Array<Array<Array<int> > > > > Sundance::MixedDOFMapHN::localNodePtrs_ [private]

localNodePtrs_[basisChunk][cellDim][facetDim][facetNumber][nodeNumber]

Definition at line 223 of file SundanceMixedDOFMapHN.hpp.

Referenced by allocate(), and buildMaximalDofTable().

The object to store all the transformation matrixes.

Definition at line 251 of file SundanceMixedDOFMapHN.hpp.

Referenced by buildMaximalDofTable(), getTrafoMatrixForCell(), getTrafoMatrixForFacet(), and MixedDOFMapHN().

Maps one maxCell LID to one transformation matrix, only maxDim elements and basisChunck ID with hanging nodes should have transformation matrix [maxCellLID].get -> [basisChunckID][] is the index of trafo matrix.

Definition at line 248 of file SundanceMixedDOFMapHN.hpp.

Referenced by buildMaximalDofTable(), getTrafoMatrixForCell(), and getTrafoMatrixForFacet().

Definition at line 198 of file SundanceMixedDOFMapHN.hpp.

Referenced by initMap().

Array<Array<int> > Sundance::MixedDOFMapHN::maximalDofs_ [mutable, private]

DOFs for maximal cells, indexed by basis chunk number.

dof(cellLID, chunk, func, node) = maximalDofs_[chunk][(cellLID*nFunc + func)*nNode + node];

Definition at line 215 of file SundanceMixedDOFMapHN.hpp.

Referenced by allocate(), and buildMaximalDofTable().

Array<Array<int> > Sundance::MixedDOFMapHN::nDofsPerCell_ [private]

The number of DOFs per cell, for each basis function type, not including the DOFs of the facets of the cell.

Indexed as nDofsPerCell_[basis][dimension]

Definition at line 266 of file SundanceMixedDOFMapHN.hpp.

Referenced by allocate(), buildMaximalDofTable(), getDOFsForHNCell(), getInitialDOFForCell(), getInitialDOFPtrForCell(), setDOFs(), and shareDOFs().

Array<int> Sundance::MixedDOFMapHN::nFuncs_ [private]

Definition at line 298 of file SundanceMixedDOFMapHN.hpp.

Referenced by MixedDOFMapHN(), nBasisChunks(), and nFuncs().

Array<Array<int> > Sundance::MixedDOFMapHN::nNodesPerCell_ [private]

The number of nodes per cell, for each basis function type, not including the nodes of the facets of the cell.

Indexed as nNodesPerCell_[basis][dimension]

Definition at line 261 of file SundanceMixedDOFMapHN.hpp.

Referenced by allocate(), buildMaximalDofTable(), and getDOFsForHNCell().

Nr of points, needed only by plotting.

Definition at line 228 of file SundanceMixedDOFMapHN.hpp.

Referenced by buildMaximalDofTable(), getDOFsForHNCell(), and MixedDOFMapHN().

Array<Array<int> > Sundance::MixedDOFMapHN::numFacets_ [private]

number of facets of dimension facetDim for cells of dimension cellDim.

Indexed as numFacets_[cellDim][facetDim]

Definition at line 285 of file SundanceMixedDOFMapHN.hpp.

Referenced by allocate(), and initMap().

Orientation of each edge or face as seen by the maximal cell from which its DOFs were originally assigned.

Definition at line 289 of file SundanceMixedDOFMapHN.hpp.

Referenced by allocate(), buildMaximalDofTable(), initMap(), and shareDOFs().

Array<Array<int> > Sundance::MixedDOFMapHN::totalNDofsPerCell_ [private]

The number of DOFs per cell, for each basis function type, including the DOFs of the facets of the cell.

Indexed as nDofsPerCell_[basis][dimension]

Definition at line 276 of file SundanceMixedDOFMapHN.hpp.

Referenced by allocate().

Array<Array<int> > Sundance::MixedDOFMapHN::totalNNodesPerCell_ [private]

The number of nodes per cell, for each basis function type, including the nodes of the facets of the cell.

Indexed as nNodesPerCell_[basis][dimension]

Definition at line 271 of file SundanceMixedDOFMapHN.hpp.

Referenced by allocate(), and buildMaximalDofTable().

Site Contact