VertexMesh< ELEMENT_DIM, SPACE_DIM > Class Template Reference

#include <VertexMesh.hpp>

Inherits AbstractMesh< ELEMENT_DIM, SPACE_DIM >.

Inherited by MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >, MutableVertexMesh< 2, 2 >, and MutableVertexMesh< DIM, DIM >.

Collaboration diagram for VertexMesh< ELEMENT_DIM, SPACE_DIM >:
Collaboration graph
[legend]

List of all members.

Classes

class  VertexElementIterator

Public Member Functions

VertexElementIterator GetElementIteratorBegin (bool skipDeletedElements=true)
VertexElementIterator GetElementIteratorEnd ()
 VertexMesh (std::vector< Node< SPACE_DIM > * > nodes, std::vector< VertexElement< ELEMENT_DIM, SPACE_DIM > * > vertexElements)
 VertexMesh (std::vector< Node< SPACE_DIM > * > nodes, std::vector< VertexElement< ELEMENT_DIM-1, SPACE_DIM > * > faces, std::vector< VertexElement< ELEMENT_DIM, SPACE_DIM > * > vertexElements)
 VertexMesh (TetrahedralMesh< 2, 2 > &rMesh, bool isPeriodic=false)
 VertexMesh (TetrahedralMesh< 3, 3 > &rMesh)
 VertexMesh ()
virtual ~VertexMesh ()
virtual unsigned GetNumNodes () const
virtual unsigned GetNumElements () const
unsigned GetNumAllElements () const
virtual unsigned GetNumFaces () const
VertexElement< ELEMENT_DIM,
SPACE_DIM > * 
GetElement (unsigned index) const
VertexElement< ELEMENT_DIM-1,
SPACE_DIM > * 
GetFace (unsigned index) const
virtual c_vector< double,
SPACE_DIM > 
GetCentroidOfElement (unsigned index)
void ConstructFromMeshReader (AbstractMeshReader< ELEMENT_DIM, SPACE_DIM > &rMeshReader)
virtual void Clear ()
unsigned GetDelaunayNodeIndexCorrespondingToVoronoiElementIndex (unsigned elementIndex)
unsigned GetVoronoiElementIndexCorrespondingToDelaunayNodeIndex (unsigned nodeIndex)
virtual c_vector< double,
SPACE_DIM > 
GetVectorFromAtoB (const c_vector< double, SPACE_DIM > &rLocationA, const c_vector< double, SPACE_DIM > &rLocationB)
virtual double GetVolumeOfElement (unsigned index)
virtual double GetSurfaceAreaOfElement (unsigned index)
c_vector< double, SPACE_DIM > GetAreaGradientOfElementAtNode (VertexElement< ELEMENT_DIM, SPACE_DIM > *pElement, unsigned localIndex)
c_vector< double, SPACE_DIM > GetPreviousEdgeGradientOfElementAtNode (VertexElement< ELEMENT_DIM, SPACE_DIM > *pElement, unsigned localIndex)
c_vector< double, SPACE_DIM > GetNextEdgeGradientOfElementAtNode (VertexElement< ELEMENT_DIM, SPACE_DIM > *pElement, unsigned localIndex)
c_vector< double, SPACE_DIM > GetPerimeterGradientOfElementAtNode (VertexElement< ELEMENT_DIM, SPACE_DIM > *pElement, unsigned localIndex)
virtual c_vector< double, 3 > CalculateMomentsOfElement (unsigned index)
double GetEdgeLength (unsigned elementIndex1, unsigned elementIndex2)
double GetElongationShapeFactorOfElement (unsigned elementIndex)
double CalculateUnitNormalToFaceWithArea (VertexElement< ELEMENT_DIM-1, SPACE_DIM > *pFace, c_vector< double, SPACE_DIM > &rNormal)
virtual double CalculateAreaOfFace (VertexElement< ELEMENT_DIM-1, SPACE_DIM > *pFace)
c_vector< double, SPACE_DIM > GetShortAxisOfElement (unsigned index)
std::set< unsignedGetNeighbouringNodeIndices (unsigned nodeIndex)
std::set< unsignedGetNeighbouringNodeNotAlsoInElement (unsigned nodeIndex, unsigned elemIndex)
std::set< unsignedGetNeighbouringElementIndices (unsigned elementIndex)
template<>
 VertexMesh (TetrahedralMesh< 2, 2 > &rMesh, bool isPeriodic)
template<>
 VertexMesh (TetrahedralMesh< 3, 3 > &rMesh)

Protected Member Functions

unsigned SolveNodeMapping (unsigned index) const
unsigned SolveElementMapping (unsigned index) const
unsigned SolveBoundaryElementMapping (unsigned index) const
void GenerateVerticesFromElementCircumcentres (TetrahedralMesh< ELEMENT_DIM, SPACE_DIM > &rMesh)
bool ElementIncludesPoint (const c_vector< double, SPACE_DIM > &rTestPoint, unsigned elementIndex)
unsigned GetLocalIndexForElementEdgeClosestToPoint (const c_vector< double, SPACE_DIM > &rTestPoint, unsigned elementIndex)
template<class Archive >
void save (Archive &archive, const unsigned int version) const
template<class Archive >
void load (Archive &archive, const unsigned int version)

Protected Attributes

std::vector< VertexElement
< ELEMENT_DIM, SPACE_DIM > * > 
mElements
std::vector< VertexElement
< ELEMENT_DIM-1, SPACE_DIM > * > 
mFaces
std::map< unsigned, unsignedmVoronoiElementIndexMap
TetrahedralMesh< ELEMENT_DIM,
SPACE_DIM > * 
mpDelaunayMesh

Friends

class TestVertexMesh
class boost::serialization::access

Detailed Description

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

A vertex-based mesh class, in which elements may contain different numbers of nodes. This is facilitated by the VertexElement class.

This class has two applications in the cell_based code.

First, VertexMesh is used as a member of the MeshBasedCellPopulation class to represent a Voronoi tessellation, the dual to a Delaunay mesh, which allows the shapes of cells to be visualised in simulations of a class of off-lattice cell centre-based models.

Second, VertexMesh serves as a parent class for MutableVertexMesh, which is used as a member of the VertexBasedCellPopulation class to represent the junctional network of cells that forms the basis of simulations of off-lattice vertex-based models.

Definition at line 74 of file VertexMesh.hpp.


Constructor & Destructor Documentation

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
VertexMesh< ELEMENT_DIM, SPACE_DIM >::VertexMesh ( std::vector< Node< SPACE_DIM > * >  nodes,
std::vector< VertexElement< ELEMENT_DIM, SPACE_DIM > * >  vertexElements 
) [inline]
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
VertexMesh< ELEMENT_DIM, SPACE_DIM >::VertexMesh ( std::vector< Node< SPACE_DIM > * >  nodes,
std::vector< VertexElement< ELEMENT_DIM-1, SPACE_DIM > * >  faces,
std::vector< VertexElement< ELEMENT_DIM, SPACE_DIM > * >  vertexElements 
) [inline]
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
VertexMesh< ELEMENT_DIM, SPACE_DIM >::VertexMesh ( TetrahedralMesh< 2, 2 > &  rMesh,
bool  isPeriodic = false 
)

Alternative 2D 'Voronoi' constructor. Creates a Voronoi tessellation of a given tetrahedral mesh, which must be Delaunay (see TetrahedralMesh::CheckIsVoronoi).

Todo:
Merge with 3D Voronoi constructor? (see #1075)
Parameters:
rMesh a tetrahedral mesh
isPeriodic a boolean that indicates whether the mesh is periodic or not
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
VertexMesh< ELEMENT_DIM, SPACE_DIM >::VertexMesh ( TetrahedralMesh< 3, 3 > &  rMesh  ) 

Alternative 3D 'Voronoi' constructor. Creates a Voronoi tessellation of a given tetrahedral mesh, which must be Delaunay (see TetrahedralMesh::CheckIsVoronoi).

Todo:
Merge with 2D Voronoi constructor? (see #1075)
Parameters:
rMesh a tetrahedral mesh
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
VertexMesh< ELEMENT_DIM, SPACE_DIM >::VertexMesh (  )  [inline]
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
VertexMesh< ELEMENT_DIM, SPACE_DIM >::~VertexMesh (  )  [inline, virtual]

Destructor.

Definition at line 474 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::Clear().

template<>
VertexMesh< 2, 2 >::VertexMesh ( TetrahedralMesh< 2, 2 > &  rMesh,
bool  isPeriodic 
) [inline]

This VertexMesh constructor is currently only defined for 2D meshes.

Parameters:
rMesh a tetrahedral mesh
isPeriodic a boolean that indicates whether the mesh is periodic or not

Create a std::vector of pairs, where each pair comprises the angle between the centre of the Voronoi element and each node with that node's global index in the Voronoi mesh.

Definition at line 154 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::Clear(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GenerateVerticesFromElementCircumcentres(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::mElements, AbstractMesh< ELEMENT_DIM, SPACE_DIM >::mMeshChangesDuringSimulation, AbstractMesh< ELEMENT_DIM, SPACE_DIM >::mNodes, and VertexMesh< ELEMENT_DIM, SPACE_DIM >::mpDelaunayMesh.

template<>
VertexMesh< 3, 3 >::VertexMesh ( TetrahedralMesh< 3, 3 > &  rMesh  )  [inline]

Member Function Documentation

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
double VertexMesh< ELEMENT_DIM, SPACE_DIM >::CalculateAreaOfFace ( VertexElement< ELEMENT_DIM-1, SPACE_DIM > *  pFace  )  [inline, virtual]

Get the area of a given face in 3D. Uses CalculateUnitNormalToFaceWithArea

This needs to be overridden in daughter classes for non-Euclidean metrics.

Parameters:
pFace a face in the mesh
Returns:
the area

Definition at line 1529 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::CalculateUnitNormalToFaceWithArea().

Referenced by VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetSurfaceAreaOfElement().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
c_vector< double, 3 > VertexMesh< ELEMENT_DIM, SPACE_DIM >::CalculateMomentsOfElement ( unsigned  index  )  [inline, virtual]

Compute the second moments and product moment of area for a given 2D element about its centroid. These are:

I_xx, the second moment of area about an axis through the centroid of the element parallel to the x-axis;

I_yy, the second moment of area about an axis through the centroid of the element parallel to the y-axis;

and I_xy, product moment of area through the centroid of the element.

Formulae for these quantities may be found e.g. in the following reference:

Mechanics of Materials James M. Gere (Author), Barry J. Goodno. Cengage Learning; 8th edition (January 1, 2012)

This method is used within GetShortAxisOfElement() to compute the direction of the shortest principal axis passing through the centroid, or 'short axis', of the element.

Note that by definition, the second moments of area must be non-negative, while the product moment of area may not be.

Parameters:
index the global index of a specified vertex element
Returns:
(Ixx,Iyy,Ixy).

Definition at line 1311 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetCentroidOfElement(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetElement(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeLocation(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), and VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetVectorFromAtoB().

Referenced by VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetElongationShapeFactorOfElement(), and VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetShortAxisOfElement().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
double VertexMesh< ELEMENT_DIM, SPACE_DIM >::CalculateUnitNormalToFaceWithArea ( VertexElement< ELEMENT_DIM-1, SPACE_DIM > *  pFace,
c_vector< double, SPACE_DIM > &  rNormal 
) [inline]

Compute the unit normal vector to a given face in 3D. This is achieved by calculating scaled normal, which is the effective sum of signed areas of triangle forming the face. Note: this may return the outward or inward normal, depending on the face chirality.

Parameters:
pFace a face in the mesh
rNormal vector in which to return the unit normal
Returns:
the area

Definition at line 1499 of file VertexMesh.cpp.

References AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNode(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetVectorFromAtoB(), and VectorProduct().

Referenced by VertexMesh< ELEMENT_DIM, SPACE_DIM >::CalculateAreaOfFace(), and VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetVolumeOfElement().

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

Construct the mesh using a MeshReader.

Parameters:
rMeshReader the mesh reader

Referenced by VertexMesh< DIM, DIM >::load().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
bool VertexMesh< ELEMENT_DIM, SPACE_DIM >::ElementIncludesPoint ( const c_vector< double, SPACE_DIM > &  rTestPoint,
unsigned  elementIndex 
) [inline, protected]

Test whether a given point lies inside a given element.

We use a winding number test, which counts the number of times the polygon associated with the element winds around the given point. The point is outside only when this "winding number" vanishes; otherwise, the point is inside.

One must decide whether a point on the polygon's boundary is inside or outside: we adopt the standard convention that a point on a left or bottom edge is inside, and a point on a right or top edge is outside. This way, if two distinct polygons share a common boundary segment, then a point on that segment will be in one polygon or the other, but not both at the same time.

Parameters:
rTestPoint the point to test
elementIndex global index of the element in the mesh
Returns:
if the point is included in the element.

Todo:
(see #2387 and #2401) Investigate why the commented implementation causes Test2DVertexBasedCryptRepresentativeSimulation to fail

Definition at line 1126 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetElement(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeLocation(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), and VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetVectorFromAtoB().

Referenced by MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::CheckForIntersections().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void VertexMesh< ELEMENT_DIM, SPACE_DIM >::GenerateVerticesFromElementCircumcentres ( TetrahedralMesh< ELEMENT_DIM, SPACE_DIM > &  rMesh  )  [inline, protected]

Populate mNodes with locations corresponding to the element circumcentres of a given TetrahedralMesh. Used by 'Voronoi' constructors.

Parameters:
rMesh a tetrahedral mesh

Definition at line 386 of file VertexMesh.cpp.

References AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetElement(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetInverseJacobianForElement(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumElements(), and AbstractMesh< ELEMENT_DIM, SPACE_DIM >::mNodes.

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

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
c_vector< double, SPACE_DIM > VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetAreaGradientOfElementAtNode ( VertexElement< ELEMENT_DIM, SPACE_DIM > *  pElement,
unsigned  localIndex 
) [inline]

Compute the area gradient of a 2D element at one of its nodes.

N.B. This calls GetVectorFromAtoB(), which can be overridden in daughter classes for non-Euclidean metrics.

Parameters:
pElement pointer to a specified vertex element
localIndex local index of a node in this element
Returns:
the gradient of the area of the element, evaluated at this node.

Definition at line 1417 of file VertexMesh.cpp.

References AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeLocation(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), and VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetVectorFromAtoB().

Referenced by NagaiHondaForce< DIM >::AddForceContribution(), and FarhadifarForce< DIM >::AddForceContribution().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
c_vector< double, SPACE_DIM > VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetCentroidOfElement ( unsigned  index  )  [inline, virtual]

Compute the centroid of an element.

A formula for the centroid of a plane polygon may be found e.g. in the following reference:

Mechanics of Materials James M. Gere (Author), Barry J. Goodno. Cengage Learning; 8th edition (January 1, 2012)

This needs to be overridden in daughter classes for non-Euclidean metrics.

Parameters:
index the global index of a specified vertex element
Returns:
(centroid_x, centroid_y).

Todo:
compute centroid rather than centre of mass (see #1422)

Definition at line 630 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetElement(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeLocation(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetVectorFromAtoB(), and NEVER_REACHED.

Referenced by VertexMesh< ELEMENT_DIM, SPACE_DIM >::CalculateMomentsOfElement(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::DivideElementAlongGivenAxis(), VertexBasedCellPopulation< DIM >::GetLocationOfCellCentre(), VertexBasedCellPopulation< DIM >::GetTetrahedralMeshUsingVertexMesh(), and MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::PerformT2Swap().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetDelaunayNodeIndexCorrespondingToVoronoiElementIndex ( unsigned  elementIndex  )  [inline]
Returns:
the global index of the corresponding element in the Delaunay mesh, given the global index of an element in the Voronoi mesh.
Parameters:
elementIndex global index of an element in the Voronoi mesh

Definition at line 506 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::mVoronoiElementIndexMap, and UNSIGNED_UNSET.

Referenced by VoronoiDataWriter< ELEMENT_DIM, SPACE_DIM >::Visit(), CellPopulationAreaWriter< ELEMENT_DIM, SPACE_DIM >::Visit(), and MeshBasedCellPopulationWithGhostNodes< DIM >::WriteVtkResultsToFile().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
double VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetEdgeLength ( unsigned  elementIndex1,
unsigned  elementIndex2 
) [inline]
Returns:
the length of the edge separating two given elements in 2D.
Parameters:
elementIndex1 index of an element in the mesh
elementIndex2 index of an element in the mesh

Definition at line 412 of file VertexMesh.cpp.

References EXCEPTION, AbstractMesh< ELEMENT_DIM, SPACE_DIM >::GetDistanceBetweenNodes(), and VertexMesh< ELEMENT_DIM, SPACE_DIM >::mElements.

Referenced by HeterotypicBoundaryLengthWriter< ELEMENT_DIM, SPACE_DIM >::Visit().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
VertexElement< ELEMENT_DIM, SPACE_DIM > * VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetElement ( unsigned  index  )  const [inline]
Parameters:
index the global index of a specified vertex element.
Returns:
a pointer to the vertex element

Definition at line 614 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::mElements.

Referenced by VertexMesh< ELEMENT_DIM, SPACE_DIM >::CalculateMomentsOfElement(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::CheckForSwapsFromShortEdges(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::DivideEdge(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::DivideElementAlongGivenAxis(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::ElementIncludesPoint(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetCentroidOfElement(), VertexBasedCellPopulation< DIM >::GetElement(), VertexBasedCellPopulation< DIM >::GetElementCorrespondingToCell(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetLocalIndexForElementEdgeClosestToPoint(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetNeighbouringElementIndices(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetNeighbouringNodeIndices(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetNeighbouringNodeNotAlsoInElement(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetSurfaceAreaOfElement(), VertexBasedCellPopulation< DIM >::GetTetrahedralMeshUsingVertexMesh(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetVolumeOfElement(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::PerformIntersectionSwap(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::PerformT2Swap(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::PerformT3Swap(), and CellPopulationElementWriter< ELEMENT_DIM, SPACE_DIM >::Visit().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
VertexMesh< ELEMENT_DIM, SPACE_DIM >::VertexElementIterator VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetElementIteratorBegin ( bool  skipDeletedElements = true  )  [inline]
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
VertexMesh< ELEMENT_DIM, SPACE_DIM >::VertexElementIterator VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetElementIteratorEnd (  )  [inline]
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
double VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetElongationShapeFactorOfElement ( unsigned  elementIndex  )  [inline]

Get the elongation shape factor of a given element. This is defined as the square root of the ratio of the two second moments of the element around its principal axes.

Parameters:
elementIndex index of an element in the mesh
Returns:
the elongation shape factor of the element.

Definition at line 447 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::CalculateMomentsOfElement().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
VertexElement< ELEMENT_DIM-1, SPACE_DIM > * VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetFace ( unsigned  index  )  const [inline]
Parameters:
index the global index of a specified face.
Returns:
a pointer to the face

Definition at line 622 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::mFaces.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetLocalIndexForElementEdgeClosestToPoint ( const c_vector< double, SPACE_DIM > &  rTestPoint,
unsigned  elementIndex 
) [inline, protected]

Get the local index of a given element which is the start vertex of the edge of the element that the overlapping point rTestPoint is closest to.

Parameters:
rTestPoint the point to test
elementIndex global index of the element in the mesh
Returns:
the local index

Definition at line 1246 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetElement(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeLocation(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), and VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetVectorFromAtoB().

Referenced by MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::PerformIntersectionSwap(), and MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::PerformT3Swap().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
std::set< unsigned > VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetNeighbouringElementIndices ( unsigned  elementIndex  )  [inline]
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
std::set< unsigned > VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetNeighbouringNodeIndices ( unsigned  nodeIndex  )  [inline]

Given a node, find a set containing the indices of its neighbouring nodes.

Parameters:
nodeIndex global index of the node
Returns:
its neighbouring node indices

Definition at line 702 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetElement(), and AbstractMesh< ELEMENT_DIM, SPACE_DIM >::GetNode().

Referenced by VertexBasedCellPopulation< DIM >::GetNeighbouringNodeIndices(), and VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetNeighbouringNodeNotAlsoInElement().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
std::set< unsigned > VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetNeighbouringNodeNotAlsoInElement ( unsigned  nodeIndex,
unsigned  elemIndex 
) [inline]

Given a node and one of its containing elements, find a set containing the indices of those neighbouring node(s) that are NOT also in the element.

Note that we allow for more than one such index, since there is no reason a priori to assume that each node is contained by exactly three elements.

Parameters:
nodeIndex global index of the node
elemIndex global index of the element
Returns:
its neighbouring nodes that are not in the element

Definition at line 733 of file VertexMesh.cpp.

References EXCEPTION, VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetElement(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetNeighbouringNodeIndices(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeGlobalIndex(), and AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNumNodes().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
c_vector< double, SPACE_DIM > VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetNextEdgeGradientOfElementAtNode ( VertexElement< ELEMENT_DIM, SPACE_DIM > *  pElement,
unsigned  localIndex 
) [inline]

Compute the gradient of the edge of a 2D element starting at its nodes.

N.B. This calls GetVectorFromAtoB(), which can be overridden in daughter classes for non-Euclidean metrics.

Parameters:
pElement pointer to a specified vertex element
localIndex local index of a node in this element
Returns:
the gradient of the edge of the element that starts at this node.

Definition at line 1463 of file VertexMesh.cpp.

References AbstractMesh< ELEMENT_DIM, SPACE_DIM >::GetDistanceBetweenNodes(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeGlobalIndex(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeLocation(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), and VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetVectorFromAtoB().

Referenced by NagaiHondaForce< DIM >::AddForceContribution(), FarhadifarForce< DIM >::AddForceContribution(), and VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetPerimeterGradientOfElementAtNode().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetNumAllElements (  )  const [inline]
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetNumElements (  )  const [inline, virtual]
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetNumFaces (  )  const [inline, virtual]
Returns:
the number of Faces in the mesh.

Definition at line 607 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::mFaces.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetNumNodes (  )  const [inline, virtual]
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
c_vector< double, SPACE_DIM > VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetPerimeterGradientOfElementAtNode ( VertexElement< ELEMENT_DIM, SPACE_DIM > *  pElement,
unsigned  localIndex 
) [inline]

Compute the gradient of the perimeter of a 2D element at its nodes. This returns the sum of GetPreviousEdgeGradientAtNode() and GetNextEdgeGradientAtNode().

Parameters:
pElement pointer to a specified vertex element
localIndex local index of a node in this element
Returns:
the gradient of the perimeter of the element, evaluated at this node.

Definition at line 1482 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetNextEdgeGradientOfElementAtNode(), and VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetPreviousEdgeGradientOfElementAtNode().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
c_vector< double, SPACE_DIM > VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetPreviousEdgeGradientOfElementAtNode ( VertexElement< ELEMENT_DIM, SPACE_DIM > *  pElement,
unsigned  localIndex 
) [inline]

Compute the gradient of the edge of a 2D element ending at its nodes.

N.B. This calls GetVectorFromAtoB(), which can be overridden in daughter classes for non-Euclidean metrics.

Parameters:
pElement pointer to a specified vertex element
localIndex local index of a node in this element
Returns:
the gradient of the edge of the element that ends at this node.

Definition at line 1441 of file VertexMesh.cpp.

References AbstractMesh< ELEMENT_DIM, SPACE_DIM >::GetDistanceBetweenNodes(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeGlobalIndex(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeLocation(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), and VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetVectorFromAtoB().

Referenced by VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetPerimeterGradientOfElementAtNode(), and MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::PerformT3Swap().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
c_vector< double, SPACE_DIM > VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetShortAxisOfElement ( unsigned  index  )  [inline]

Compute the direction of the shortest principal axis passing through the centroid, or 'short axis', of a given element. This is the eigenvector associated with the eigenvalue of largest magnitude of the inertia matrix

J = ( I_xx -I_xy ) ( -I_xy I_yy )

whose entries are computed by calling the method CalculateMomentsOfElement().

Note that if the nodes owned by the element are supplied in clockwise rather than anticlockwise manner, or if this arises when any periodicity is enforced, then the sign of each moment may be incorrect change. This means that we need to consider the eigenvalue of largest magnitude rather than largest value when computing the short axis of the element.

If the element is a regular polygon then the eigenvalues of the inertia tensor are equal: in this case we return a random unit vector.

This method is only implemented in 2D at present.

Parameters:
index the global index of a specified vertex element
Returns:
a unit vector giving the direction of the short axis

Todo:
remove magic number? (see #1884 and #2401)

Definition at line 1366 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::CalculateMomentsOfElement(), RandomNumberGenerator::Instance(), and RandomNumberGenerator::ranf().

Referenced by ShortAxisVertexBasedDivisionRule< SPACE_DIM >::CalculateCellDivisionVector(), and MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::DivideElementAlongShortAxis().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
double VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetSurfaceAreaOfElement ( unsigned  index  )  [inline, virtual]
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned SPACE_DIM c_vector< double, SPACE_DIM > VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetVectorFromAtoB ( const c_vector< double, SPACE_DIM > &  rLocationA,
const c_vector< double, SPACE_DIM > &  rLocationB 
) [virtual]

Overridden GetVectorFromAtoB() method. Returns a vector between two points in space.

If the mesh is being used to represent a Voronoi tessellation, and mpDelaunayMesh is not NULL, then use that to compute GetVectorFromAtoB.

Parameters:
rLocationA a c_vector of coordinates
rLocationB a c_vector of coordinates
Returns:
c_vector from location A to location B.

Reimplemented from AbstractMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 1012 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::mpDelaunayMesh.

Referenced by WelikyOsterForce< DIM >::AddForceContribution(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::CalculateMomentsOfElement(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::CalculateUnitNormalToFaceWithArea(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::DivideEdge(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::DivideElementAlongGivenAxis(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::ElementIncludesPoint(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetAreaGradientOfElementAtNode(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetCentroidOfElement(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetLocalIndexForElementEdgeClosestToPoint(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetNextEdgeGradientOfElementAtNode(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetPreviousEdgeGradientOfElementAtNode(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetVolumeOfElement(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::PerformNodeMerge(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::PerformT1Swap(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::PerformT3Swap(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::PerformVoidRemoval(), and MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::WidenEdgeOrCorrectIntersectionLocationIfNecessary().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
double VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetVolumeOfElement ( unsigned  index  )  [inline, virtual]
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetVoronoiElementIndexCorrespondingToDelaunayNodeIndex ( unsigned  nodeIndex  )  [inline]
Returns:
the global index of the corresponding element in the Voronoi mesh given the global index of a node in the Delaunay mesh, or throws an exception if this does not exist.
Parameters:
nodeIndex global index of a node in the Delaunay mesh

Definition at line 533 of file VertexMesh.cpp.

References EXCEPTION, VertexMesh< ELEMENT_DIM, SPACE_DIM >::mVoronoiElementIndexMap, and UNSIGNED_UNSET.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
template<class Archive >
void VertexMesh< ELEMENT_DIM, SPACE_DIM >::load ( Archive &  archive,
const unsigned int  version 
) [inline, protected]

Load a mesh by using VertexMeshReader and the location in ArchiveLocationInfo.

Parameters:
archive the archive
version the current version of this class

Definition at line 202 of file VertexMesh.hpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
template<class Archive >
void VertexMesh< ELEMENT_DIM, SPACE_DIM >::save ( Archive &  archive,
const unsigned int  version 
) const [inline, protected]

Archive the VertexMesh and its member variables. Note that this will write out a VertexMeshWriter file to wherever ArchiveLocationInfo has specified.

Parameters:
archive the archive
version the current version of this class

Definition at line 184 of file VertexMesh.hpp.

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

Solve boundary element mapping method. This overridden method is required as it is pure virtual in the base class.

Parameters:
index the global index of the boundary element
Returns:
local index

Todo:
sort out boundary elements in a vertex mesh (#1263)

Definition at line 497 of file VertexMesh.cpp.

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

Solve element mapping method. This overridden method is required as it is pure virtual in the base class.

Parameters:
index the global index of the element
Returns:
local index

Definition at line 489 of file VertexMesh.cpp.

References VertexMesh< ELEMENT_DIM, SPACE_DIM >::mElements.

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

Solve node mapping method. This overridden method is required as it is pure virtual in the base class.

Parameters:
index the global index of the node
Returns:
local index

Implements AbstractMesh< ELEMENT_DIM, SPACE_DIM >.

Definition at line 481 of file VertexMesh.cpp.

References AbstractMesh< ELEMENT_DIM, SPACE_DIM >::mNodes.


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::vector<VertexElement<ELEMENT_DIM, SPACE_DIM>*> VertexMesh< ELEMENT_DIM, SPACE_DIM >::mElements [protected]
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
std::vector<VertexElement<ELEMENT_DIM-1, SPACE_DIM>*> VertexMesh< ELEMENT_DIM, SPACE_DIM >::mFaces [protected]
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
TetrahedralMesh<ELEMENT_DIM, SPACE_DIM>* VertexMesh< ELEMENT_DIM, SPACE_DIM >::mpDelaunayMesh [protected]

Delaunay tetrahedral mesh that is used only when the vertex mesh is used to represent a Voronoi tessellation. A pointer to the Delaunay mesh is required in this case because the Delaunay mesh may be a subclass of TetrahedralMesh, which overrides methods such as GetVectorFromAtoB().

Definition at line 102 of file VertexMesh.hpp.

Referenced by VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetVectorFromAtoB(), and VertexMesh< ELEMENT_DIM, SPACE_DIM >::VertexMesh().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
std::map<unsigned, unsigned> VertexMesh< ELEMENT_DIM, SPACE_DIM >::mVoronoiElementIndexMap [protected]

Map that is used only when the vertex mesh is used to represent a Voronoi tessellation, the dual to a Delaunay tetrahedral mesh. The map consists of pairs (index1, index2), where index1 denotes the global index of a node in the Delaunay mesh and index2 denotes the global index of the corresponding element in the Voronoi mesh.

Definition at line 93 of file VertexMesh.hpp.

Referenced by VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetDelaunayNodeIndexCorrespondingToVoronoiElementIndex(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetVoronoiElementIndexCorrespondingToDelaunayNodeIndex(), and VertexMesh< ELEMENT_DIM, SPACE_DIM >::VertexMesh().


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

Generated by  doxygen 1.6.2