Chaste Release::3.1
DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM > Class Template Reference

#include <DistributedTetrahedralMesh.hpp>

Inheritance diagram for DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >:
Collaboration diagram for DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >:

List of all members.

Public Types

typedef std::vector< Node
< SPACE_DIM >
* >::const_iterator 
HaloNodeIterator

Public Member Functions

 DistributedTetrahedralMesh (DistributedTetrahedralMeshPartitionType::type partitioningMethod=DistributedTetrahedralMeshPartitionType::METIS_LIBRARY)
virtual ~DistributedTetrahedralMesh ()
void SetDistributedVectorFactory (DistributedVectorFactory *pFactory)
virtual void ConstructFromMeshReader (AbstractMeshReader< ELEMENT_DIM, SPACE_DIM > &rMeshReader)
unsigned GetNumLocalNodes () const
unsigned GetNumHaloNodes () const
unsigned GetNumLocalElements () const
unsigned GetNumLocalBoundaryElements () const
unsigned GetNumNodes () const
unsigned GetNumAllNodes () const
unsigned GetNumElements () const
DistributedTetrahedralMeshPartitionType::type GetPartitionType () const
unsigned GetNumBoundaryElements () const
void GetHaloNodeIndices (std::vector< unsigned > &rHaloIndices) const
bool CalculateDesignatedOwnershipOfElement (unsigned elementIndex)
bool CalculateDesignatedOwnershipOfBoundaryElement (unsigned faceIndex)
void ConstructLinearMesh (unsigned width)
void ConstructRectangularMesh (unsigned width, unsigned height, bool stagger=true)
void ConstructCuboid (unsigned width, unsigned height, unsigned depth)
virtual void Scale (const double xFactor=1.0, const double yFactor=1.0, const double zFactor=1.0)
Node< SPACE_DIM > * GetNodeOrHaloNode (unsigned index) const
virtual ChasteCuboid< SPACE_DIM > CalculateBoundingBox () const
virtual c_vector< double, 2 > CalculateMinMaxEdgeLengths ()
HaloNodeIterator GetHaloNodeIteratorBegin () const
HaloNodeIterator GetHaloNodeIteratorEnd () const

Protected Member Functions

unsigned SolveNodeMapping (unsigned index) const
unsigned SolveElementMapping (unsigned index) const
unsigned SolveBoundaryElementMapping (unsigned index) const

Private Member Functions

template<class Archive >
void serialize (Archive &archive, const unsigned int version)
void SetElementOwnerships ()
void RegisterNode (unsigned index)
void RegisterHaloNode (unsigned index)
void RegisterElement (unsigned index)
void RegisterBoundaryElement (unsigned index)
void ComputeMeshPartitioning (AbstractMeshReader< ELEMENT_DIM, SPACE_DIM > &rMeshReader, std::set< unsigned > &rNodesOwned, std::set< unsigned > &rHaloNodesOwned, std::set< unsigned > &rElementsOwned, std::vector< unsigned > &rProcessorsOffset)
void ParMetisLibraryNodeAndElementPartitioning (AbstractMeshReader< ELEMENT_DIM, SPACE_DIM > &rMeshReader, std::set< unsigned > &rElementsOwned, std::set< unsigned > &rNodesOwned, std::set< unsigned > &rHaloNodesOwned, std::vector< unsigned > &rProcessorsOffset)
void ReorderNodes ()

Private Attributes

unsigned mTotalNumElements
unsigned mTotalNumBoundaryElements
unsigned mTotalNumNodes
std::vector< Node< SPACE_DIM > * > mHaloNodes
std::map< unsigned, unsignedmNodesMapping
std::map< unsigned, unsignedmHaloNodesMapping
std::map< unsigned, unsignedmElementsMapping
std::map< unsigned, unsignedmBoundaryElementsMapping
DistributedTetrahedralMeshPartitionType::type mMetisPartitioning

Friends

class TestDistributedTetrahedralMesh
class boost::serialization::access

Detailed Description

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
class DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >

Parallel implementation of a mesh Nodes are distributed such that each process has A set of nodes (possibly reordered) with contiguous global indices A local copy of all the elements supporting those nodes A local copy of ghost/halo nodes which are all the nodes used in the supporting elements, but not owned outright.

Definition at line 63 of file DistributedTetrahedralMesh.hpp.


Member Typedef Documentation

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
typedef std::vector<Node<SPACE_DIM> *>::const_iterator DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::HaloNodeIterator
Todo:
#1494, this iterator needs to be dereferenced twice because it is an STL iterator to a pointer.

Definition of halo node Iterator type.

Definition at line 401 of file DistributedTetrahedralMesh.hpp.


Constructor & Destructor Documentation

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::DistributedTetrahedralMesh ( DistributedTetrahedralMeshPartitionType::type  partitioningMethod = DistributedTetrahedralMeshPartitionType::METIS_LIBRARY)

Constructor.

Parameters:
partitioningMethoddefaults to METIS_LIBRARY, but in 1-D is always overridden in this constructor to be the DUMB partition

Definition at line 64 of file DistributedTetrahedralMesh.cpp.

References DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mMetisPartitioning.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::~DistributedTetrahedralMesh ( ) [virtual]

Destructor.

Definition at line 79 of file DistributedTetrahedralMesh.cpp.


Member Function Documentation

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
ChasteCuboid< SPACE_DIM > DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::CalculateBoundingBox ( ) const [virtual]

Calculate the bounding box (width extremes for all dimensions of the mesh. Override for Distribute case

Returns:
The minimum and maximum co-ordinates of any node in each dimension

Reimplemented from AbstractMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 1480 of file DistributedTetrahedralMesh.cpp.

References AbstractMesh< ELEMENT_DIM, SPACE_DIM >::CalculateBoundingBox(), PetscTools::ReplicateException(), ChastePoint< DIM >::rGetLocation(), ChasteCuboid< SPACE_DIM >::rGetLowerCorner(), and ChasteCuboid< SPACE_DIM >::rGetUpperCorner().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
bool DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::CalculateDesignatedOwnershipOfBoundaryElement ( unsigned  faceIndex) [virtual]

Determine whether or not the current process owns node 0 of this boundary element (tie breaker to determine which process writes to file for when two or more share ownership of a face).

Parameters:
faceIndexis the global index of the face

Reimplemented from AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 526 of file DistributedTetrahedralMesh.cpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
bool DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::CalculateDesignatedOwnershipOfElement ( unsigned  elementIndex) [virtual]

Determine whether or not the current process owns node 0 of this element (tie breaker to determine which process writes to file for when two or more share ownership of an element).

Parameters:
elementIndexis the global index of the element

Reimplemented from AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 513 of file DistributedTetrahedralMesh.cpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
c_vector< double, 2 > DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::CalculateMinMaxEdgeLengths ( ) [virtual]

Calculate the bounding box (width extremes for all dimensions of the mesh. Overridden in Distributed case

Todo:
Should be const
Returns:
The minimum and maximum edge lengths in the mesh

Reimplemented from AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 1513 of file DistributedTetrahedralMesh.cpp.

References AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::CalculateMinMaxEdgeLengths().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ComputeMeshPartitioning ( AbstractMeshReader< ELEMENT_DIM, SPACE_DIM > &  rMeshReader,
std::set< unsigned > &  rNodesOwned,
std::set< unsigned > &  rHaloNodesOwned,
std::set< unsigned > &  rElementsOwned,
std::vector< unsigned > &  rProcessorsOffset 
) [private]

Compute a parallel partitioning of a given mesh using specialised methods below based on the value of mMetisPartitioning

Parameters:
rMeshReaderis the reader pointing to the mesh to be read in and partitioned
rNodesOwnedis a set to be filled with the indices of nodes owned by this process
rHaloNodesOwnedis a set to be filled with the indices of halo nodes owned by this process
rElementsOwnedis a set to be filled with the indices of elements owned by this process
rProcessorsOffseta vector of length NumProcs to be filled with the index of the lowest indexed node owned by each process

Todo:
#1293 add a timing event for the partitioning

Definition at line 95 of file DistributedTetrahedralMesh.cpp.

References PetscTools::AmMaster(), PetscTools::Barrier(), NodePartitioner< ELEMENT_DIM, SPACE_DIM >::DumbPartitioning(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetContainingElementIndices(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetElementData(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNextElementData(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::HasNclFile(), PetscTools::IsParallel(), NodePartitioner< ELEMENT_DIM, SPACE_DIM >::MetisLibraryPartitioning(), ElementData::NodeIndices, NodePartitioner< ELEMENT_DIM, SPACE_DIM >::PetscMatrixPartitioning(), Timer::PrintAndReset(), and AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::Reset().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructCuboid ( unsigned  width,
unsigned  height,
unsigned  depth 
) [virtual]

Construct a 3D cuboid grid on [0,width]x[0,height]x[0,depth].

Distributed version splits the mesh in layers in the z-direction. That is, the zeroth process will own from z=0 to about z=depth/num_procs etc.

Parameters:
widthwidth of the mesh (in the x-direction)
heightheight of the mesh (in the y-direction)
depthdepth of the mesh (in the z-direction)

Reimplemented from AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 917 of file DistributedTetrahedralMesh.cpp.

References PetscTools::AmMaster(), EXCEPTION, DistributedVectorFactory::GetHigh(), DistributedVectorFactory::GetLocalOwnership(), DistributedVectorFactory::GetLow(), and PetscTools::GetMyRank().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructFromMeshReader ( AbstractMeshReader< ELEMENT_DIM, SPACE_DIM > &  rMeshReader) [virtual]

Construct the mesh using a MeshReader.

Parameters:
rMeshReaderthe mesh reader

Todo:
#1930 We should use a reader set iterator for this bit now.
Todo:
#1730 and we should be able to combine ASCII branch
Todo:
#1930 We should use a reader set iterator for this bit now.
Todo:
#1289 assert the node is not considered both owned and halo-owned.

Implements AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >.

Reimplemented in MixedDimensionMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 217 of file DistributedTetrahedralMesh.cpp.

References Node< SPACE_DIM >::AddNodeAttribute(), PetscTools::AmTopMost(), ElementData::AttributeValue, PetscTools::Barrier(), EXCEPTION, AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetElementIteratorBegin(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetElementIteratorEnd(), Node< SPACE_DIM >::GetIndex(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetMeshFileBaseName(), PetscTools::GetMyRank(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNextFaceData(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNextNode(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNodeAttributes(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNodeIteratorBegin(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNodeIteratorEnd(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNumElementAttributes(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNumElements(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNumFaceAttributes(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNumFaces(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::IsFileFormatBinary(), PetscTools::IsParallel(), ElementData::NodeIndices, PetscTools::ReplicateException(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::Reset(), Timer::Reset(), and AbstractElement< ELEMENT_DIM, SPACE_DIM >::SetAttribute().

Referenced by AdaptiveBidomainProblem::AdaptMesh(), MixedDimensionMesh< ELEMENT_DIM, SPACE_DIM >::ConstructFromMeshReader(), DistributedQuadraticMesh< DIM >::ConstructFromMeshReader(), and Load2dMeshAndSetCircularTissue().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructLinearMesh ( unsigned  width) [virtual]

Construct a 1D linear grid on [0,width]

Throws if there are more processes than the number of nodes (width+1)

Parameters:
widthwidth of the mesh (in the x-direction)

Reimplemented from AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 656 of file DistributedTetrahedralMesh.cpp.

References PetscTools::AmMaster(), and EXCEPTION.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructRectangularMesh ( unsigned  width,
unsigned  height,
bool  stagger = true 
) [virtual]

Construct a 2D rectangular grid on [0,width]x[0,height].

Diagonals can be staggered so that there is no preferred diffusion propagation direction.

Distributed version splits the mesh in layers in the y-direction. That is, the zeroth process will own from y=0 to about y=height/num_procs etc.

Parameters:
widthwidth of the mesh (in the x-direction)
heightheight of the mesh (in the y-direction)
staggerwhether the mesh should 'jumble' up the elements (defaults to true)

Reimplemented from AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 744 of file DistributedTetrahedralMesh.cpp.

References PetscTools::AmMaster(), EXCEPTION, DistributedVectorFactory::GetHigh(), DistributedVectorFactory::GetLocalOwnership(), and DistributedVectorFactory::GetLow().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetHaloNodeIndices ( std::vector< unsigned > &  rHaloIndices) const [virtual]

Utility method to give the functionality of iterating through the halo nodes of a process

Parameters:
rHaloIndicesA vector to fill with the global indices of the nodes which are locally halos

Reimplemented from AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 495 of file DistributedTetrahedralMesh.cpp.

Referenced by AdaptiveTetrahedralMesh::ConstructFromDistributedMesh(), and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::DistanceMapCalculator().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::HaloNodeIterator DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetHaloNodeIteratorBegin ( ) const

Get an iterator to the first halo node in the mesh.

Definition at line 1525 of file DistributedTetrahedralMesh.cpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::HaloNodeIterator DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetHaloNodeIteratorEnd ( ) const

Get an iterator to one past the last halo node in the mesh.

Definition at line 1531 of file DistributedTetrahedralMesh.cpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
Node< SPACE_DIM > * DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNodeOrHaloNode ( unsigned  index) const [virtual]

Returns the local pointer to a node which is either owned or in the halo of this process.

We first search halo node (as there are fewer), then search totally owned nodes. Otherwise throw.

Parameters:
indexthe global index of the node

Reimplemented from AbstractMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 608 of file DistributedTetrahedralMesh.cpp.

References EXCEPTION, and PetscTools::GetMyRank().

Referenced by AdaptiveTetrahedralMesh::ConstructFromDistributedMesh().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumAllNodes ( ) const [virtual]

Get the total number of nodes that are actually in use (globally).

Reimplemented from AbstractMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 471 of file DistributedTetrahedralMesh.cpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumBoundaryElements ( ) const [virtual]

Get the total number of boundary elements that are actually in use (globally).

Reimplemented from AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 489 of file DistributedTetrahedralMesh.cpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumElements ( ) const [virtual]

Get the total number of elements that are actually in use (globally).

Reimplemented from AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 477 of file DistributedTetrahedralMesh.cpp.

Referenced by AdaptiveTetrahedralMesh::ConstructFromDistributedMesh().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumHaloNodes ( ) const

Get the number of nodes that are halo owned by the local process.

Definition at line 447 of file DistributedTetrahedralMesh.cpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumLocalBoundaryElements ( ) const [virtual]

Get the number of Boundary Elements which are owned by this process (have at least one entirely locally-owned node).

Reimplemented from AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 459 of file DistributedTetrahedralMesh.cpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumLocalElements ( ) const [virtual]

Get the number of Elements which are owned by this process (have at least one entirely locally-owned node).

Reimplemented from AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 453 of file DistributedTetrahedralMesh.cpp.

Referenced by VtkMeshWriter< ELEMENT_DIM, SPACE_DIM >::WriteFilesUsingMesh().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumLocalNodes ( ) const

Get the number of nodes that are entirely owned by the local process. (Does not include halo nodes).

Definition at line 441 of file DistributedTetrahedralMesh.cpp.

Referenced by Hdf5ToVtkConverter< ELEMENT_DIM, SPACE_DIM >::Hdf5ToVtkConverter().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumNodes ( ) const [virtual]

Get the total number of nodes that are actually in use (globally).

Reimplemented from AbstractMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 465 of file DistributedTetrahedralMesh.cpp.

Referenced by AdaptiveTetrahedralMesh::ConstructFromDistributedMesh().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
DistributedTetrahedralMeshPartitionType::type DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetPartitionType ( ) const

Get the type of mesh partitioning that is being used...

serialization uses this method.

Definition at line 483 of file DistributedTetrahedralMesh.cpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ParMetisLibraryNodeAndElementPartitioning ( AbstractMeshReader< ELEMENT_DIM, SPACE_DIM > &  rMeshReader,
std::set< unsigned > &  rElementsOwned,
std::set< unsigned > &  rNodesOwned,
std::set< unsigned > &  rHaloNodesOwned,
std::vector< unsigned > &  rProcessorsOffset 
) [private]

Specialised method to compute a parallel partitioning of a given mesh with the ParMetis library (called by ComputeMeshPartitioning, based on the value of mMetisPartitioning)

Parameters:
rMeshReaderis the reader pointing to the mesh to be read in and partitioned
rElementsOwnedis an empty set to be filled with the indices of elements owned by this process
rNodesOwnedis an empty set to be filled with the indices of nodes owned by this process
rHaloNodesOwnedis an empty set to be filled with the indices of halo nodes owned by this process
rProcessorsOffseta vector of length NumProcs to be filled with the index of the lowest indexed node owned by each process

Definition at line 1183 of file DistributedTetrahedralMesh.cpp.

References AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetElementData(), PetscTools::GetMyRank(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNextElementData(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNumElements(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), PetscTools::GetNumProcs(), RandomNumberGenerator::Instance(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::IsFileFormatBinary(), PetscTools::IsParallel(), ElementData::NodeIndices, RandomNumberGenerator::Reseed(), Timer::Reset(), AbstractMeshReader< ELEMENT_DIM, SPACE_DIM >::Reset(), and RandomNumberGenerator::Shuffle().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::RegisterBoundaryElement ( unsigned  index) [private]

Add the most recently constructed boundary element to the global->local boundary element mapping

Parameters:
indexis the global index of boundary element to be registered

Definition at line 557 of file DistributedTetrahedralMesh.cpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::RegisterElement ( unsigned  index) [private]

Add the most recently constructed element to the global->local element mapping

Parameters:
indexis the global index of element to be registered

Definition at line 551 of file DistributedTetrahedralMesh.cpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::RegisterHaloNode ( unsigned  index) [private]

Add the most recently constructed halo node to the global->local halo node mapping

Parameters:
indexis the global index of halo node to be registered

Definition at line 545 of file DistributedTetrahedralMesh.cpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::RegisterNode ( unsigned  index) [private]

Add the most recently constructed node to the global->local node mapping

Parameters:
indexis the global index of node to be registered

Definition at line 539 of file DistributedTetrahedralMesh.cpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ReorderNodes ( ) [private]

Reorder the node indices in this mesh by applying the permutation give in mNodesPermutation.

The node indexed with "i" will be re-assigned with the new index mNodesPermutation[i]

Definition at line 627 of file DistributedTetrahedralMesh.cpp.

References PetscTools::IsParallel().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::Scale ( const double  xFactor = 1.0,
const double  yFactor = 1.0,
const double  zFactor = 1.0 
) [virtual]

Scale the mesh - uses the parent class for scaling the nodes. This derived specialisation is for scaling halo nodes.

Parameters:
xFactoris the scale in the x-direction (defaults to 1.0)
yFactoris the scale in the y-direction (defaults to 1.0)
zFactoris the scale in the z-direction (defaults to 1.0)

Reimplemented from AbstractMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 1160 of file DistributedTetrahedralMesh.cpp.

References AbstractMesh< ELEMENT_DIM, SPACE_DIM >::Scale().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
template<class Archive >
void DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::serialize ( Archive &  archive,
const unsigned int  version 
) [inline, private]

Serialize the mesh.

Parameters:
archivethe archive
versionthe current version of this class

Reimplemented from AbstractMesh< ELEMENT_DIM, SPACE_DIM >.

Reimplemented in DistributedQuadraticMesh< DIM >, and MixedDimensionMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 104 of file DistributedTetrahedralMesh.hpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::SetDistributedVectorFactory ( DistributedVectorFactory pFactory) [virtual]

Specify the node distribution across processes. This also makes sure we don't try to use METIS to partition the mesh.

Parameters:
pFactorya factory to use for this mesh

Reimplemented from AbstractMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 88 of file DistributedTetrahedralMesh.cpp.

References AbstractMesh< ELEMENT_DIM, SPACE_DIM >::SetDistributedVectorFactory().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::SetElementOwnerships ( ) [private, virtual]

Sets the ownership of each element according to which nodes are owned by the process.

Information on node ownership comes from the distributed vector factory and an element is "owned" if one or more of its nodes are owned

Reimplemented from AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 506 of file DistributedTetrahedralMesh.cpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::SolveBoundaryElementMapping ( unsigned  index) const [protected, virtual]

Overridden solve boundary element mapping method.

Parameters:
indexthe global index of the boundary element

Implements AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 595 of file DistributedTetrahedralMesh.cpp.

References EXCEPTION, and PetscTools::GetMyRank().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::SolveElementMapping ( unsigned  index) const [protected, virtual]

Overridden solve element mapping method.

Parameters:
indexthe global index of the element

Implements AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 582 of file DistributedTetrahedralMesh.cpp.

References EXCEPTION, and PetscTools::GetMyRank().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::SolveNodeMapping ( unsigned  index) const [protected, virtual]

Overridden solve node mapping method.

Parameters:
indexthe global index of the node

Implements AbstractMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 563 of file DistributedTetrahedralMesh.cpp.

References EXCEPTION, and PetscTools::GetMyRank().


Friends And Related Function Documentation

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
friend class boost::serialization::access [friend]

Member Data Documentation

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
std::map<unsigned, unsigned> DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mBoundaryElementsMapping [private]

A map from boundary element global index to local index used by this process.

Definition at line 90 of file DistributedTetrahedralMesh.hpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
std::map<unsigned, unsigned> DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mElementsMapping [private]

A map from element global index to local index used by this process.

Definition at line 87 of file DistributedTetrahedralMesh.hpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
std::vector<Node<SPACE_DIM>* > DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mHaloNodes [private]

Vector of pointer to halo nodes used by this process.

Definition at line 78 of file DistributedTetrahedralMesh.hpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
std::map<unsigned, unsigned> DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mHaloNodesMapping [private]

A map from halo node global index to local index used by this process.

Definition at line 84 of file DistributedTetrahedralMesh.hpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
DistributedTetrahedralMeshPartitionType::type DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mMetisPartitioning [private]
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
std::map<unsigned, unsigned> DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mNodesMapping [private]

A map from node global index to local index used by this process.

Definition at line 81 of file DistributedTetrahedralMesh.hpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mTotalNumBoundaryElements [private]

The total number of boundary elements in the mesh.

Definition at line 72 of file DistributedTetrahedralMesh.hpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mTotalNumElements [private]

The total number of elements in the mesh.

Definition at line 69 of file DistributedTetrahedralMesh.hpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mTotalNumNodes [private]

The total number of nodes in the mesh.

Definition at line 75 of file DistributedTetrahedralMesh.hpp.


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