QuadraticMesh< DIM > Class Template Reference

#include <QuadraticMesh.hpp>

Inherits TetrahedralMesh< DIM, DIM >.

Collaboration diagram for QuadraticMesh< DIM >:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 QuadraticMesh ()
void ConstructFromMeshReader (AbstractMeshReader< DIM, DIM > &rMeshReader)
 QuadraticMesh (double xEnd, double yEnd, unsigned numElemX, unsigned numElemY)
 QuadraticMesh (double xEnd, double yEnd, double zEnd, unsigned numElemX, unsigned numElemY, unsigned numElemZ)
void WriteBoundaryElementFile (std::string directory, std::string fileName)
unsigned GetNumVertices ()

Private Member Functions

void AddNodesToBoundaryElements (TrianglesMeshReader< DIM, DIM > *pMeshReader)
void AddNodeToBoundaryElement (BoundaryElement< DIM-1, DIM > *pBoundaryElement, Element< DIM, DIM > *pElement, unsigned internalNode)
void AddExtraBoundaryNodes (BoundaryElement< DIM-1, DIM > *pBoundaryElement, Element< DIM, DIM > *pElement, unsigned nodeIndexOppositeToFace)
void HelperMethod1 (unsigned boundaryElemNode0, unsigned boundaryElemNode1, Element< DIM, DIM > *pElement, unsigned node0, unsigned node1, unsigned node2, unsigned &rOffset, bool &rReverse)
void HelperMethod2 (BoundaryElement< DIM-1, DIM > *pBoundaryElement, Element< DIM, DIM > *pElement, unsigned internalNode0, unsigned internalNode1, unsigned internalNode2, unsigned offset, bool reverse)
void RunMesherAndReadMesh (std::string binary, std::string outputDir, std::string fileStem)
template<class Archive >
void serialize (Archive &archive, const unsigned int version)

Private Attributes

std::vector< boolmIsInternalNode
unsigned mNumVertices

Friends

class boost::serialization::access

Detailed Description

template<unsigned DIM>
class QuadraticMesh< DIM >

A concrete quadratic mesh class that inherits from TetrahedralMesh.

Definition at line 44 of file QuadraticMesh.hpp.


Constructor & Destructor Documentation

template<unsigned DIM>
QuadraticMesh< DIM >::QuadraticMesh (  )  [inline]

Constructor

Definition at line 173 of file QuadraticMesh.hpp.

References AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mMeshIsLinear.

template<unsigned DIM>
QuadraticMesh< DIM >::QuadraticMesh ( double  xEnd,
double  yEnd,
unsigned  numElemX,
unsigned  numElemY 
) [inline]

Create a quadratic mesh on a rectangle (so 2D only) from (0,0) to (xEnd,yEnd) with the given number of elements in each direction. This writes a temporary node file and uses triangle to mesh this nodefile.

Parameters:
xEnd the width of the rectangle
yEnd the breadth of the rectangle
numElemX the number of elements in the x direction
numElemY the number of elements in the y direction

Definition at line 42 of file QuadraticMesh.cpp.

References QuadraticMesh< DIM >::AddNodesToBoundaryElements(), AbstractMesh< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mBoundaryElements, AbstractMesh< ELEMENT_DIM, SPACE_DIM >::mBoundaryNodes, AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mElements, QuadraticMesh< DIM >::mIsInternalNode, AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mMeshIsLinear, AbstractMesh< ELEMENT_DIM, SPACE_DIM >::mNodes, QuadraticMesh< DIM >::mNumVertices, and TetrahedralMesh< DIM, DIM >::RefreshJacobianCachedData().

template<unsigned DIM>
QuadraticMesh< DIM >::QuadraticMesh ( double  xEnd,
double  yEnd,
double  zEnd,
unsigned  numElemX,
unsigned  numElemY,
unsigned  numElemZ 
) [inline]

Create a quadratic mesh on a cuboid (so 3D only!) from (0,0,0) to (xEnd,yEnd,zEnd) with the given number of elements in each direction. This writes a temporary node file and uses triangle to mesh this nodefile.

Parameters:
xEnd the width of the cuboid
yEnd the breadth of the cuboid
zEnd the height of the cuboid
numElemX the number of elements in the x direction
numElemY the number of elements in the y direction
numElemZ the number of elements in the z direction

Definition at line 184 of file QuadraticMesh.cpp.

References OutputFileHandler::GetOutputDirectoryFullPath(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mMeshIsLinear, OutputFileHandler::OpenOutputFile(), and QuadraticMesh< DIM >::RunMesherAndReadMesh().


Member Function Documentation

template<unsigned DIM>
void QuadraticMesh< DIM >::AddExtraBoundaryNodes ( BoundaryElement< DIM-1, DIM > *  pBoundaryElement,
Element< DIM, DIM > *  pElement,
unsigned  nodeIndexOppositeToFace 
) [inline, private]

Given a face in an element (defined by giving an element and the opposite node number to the face) that corresponds to a given boundary element, this method adds in the face's internal nodes to the boundary element (in the correct order).

Parameters:
pBoundaryElement pointer to a boundary element in the mesh
pElement pointer to an element in the mesh
nodeIndexOppositeToFace index of a node in the mesh

Definition at line 529 of file QuadraticMesh.cpp.

References QuadraticMesh< DIM >::AddNodeToBoundaryElement(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeGlobalIndex(), QuadraticMesh< DIM >::HelperMethod1(), and QuadraticMesh< DIM >::HelperMethod2().

Referenced by QuadraticMesh< DIM >::AddNodesToBoundaryElements().

template<unsigned DIM>
void QuadraticMesh< DIM >::AddNodesToBoundaryElements ( TrianglesMeshReader< DIM, DIM > *  pMeshReader  )  [inline, private]
template<unsigned DIM>
void QuadraticMesh< DIM >::AddNodeToBoundaryElement ( BoundaryElement< DIM-1, DIM > *  pBoundaryElement,
Element< DIM, DIM > *  pElement,
unsigned  internalNode 
) [inline, private]

This method adds the given node (defined by an element and a node index) to the given boundary element, and also sets the node as a boundary element and adds it to the std::vector of boundary elements.

Parameters:
pBoundaryElement pointer to a boundary element in the mesh
pElement pointer to an element in the mesh
internalNode index of a node in the mesh

Definition at line 508 of file QuadraticMesh.cpp.

References AbstractElement< ELEMENT_DIM, SPACE_DIM >::AddNode(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNode(), Node< SPACE_DIM >::IsBoundaryNode(), AbstractMesh< ELEMENT_DIM, SPACE_DIM >::mBoundaryNodes, and Node< SPACE_DIM >::SetAsBoundaryNode().

Referenced by QuadraticMesh< DIM >::AddExtraBoundaryNodes(), and QuadraticMesh< DIM >::HelperMethod2().

template<unsigned DIM>
void QuadraticMesh< DIM >::ConstructFromMeshReader ( AbstractMeshReader< DIM, DIM > &  rMeshReader  )  [inline]
template<unsigned DIM>
unsigned QuadraticMesh< DIM >::GetNumVertices (  )  [inline]

Get the number of vertices, ie non-internal (non-quadratic), nodes.

Definition at line 234 of file QuadraticMesh.cpp.

References QuadraticMesh< DIM >::mNumVertices.

template<unsigned DIM>
void QuadraticMesh< DIM >::HelperMethod1 ( unsigned  boundaryElemNode0,
unsigned  boundaryElemNode1,
Element< DIM, DIM > *  pElement,
unsigned  node0,
unsigned  node1,
unsigned  node2,
unsigned rOffset,
bool rReverse 
) [inline, private]

Nasty helper method for AddNodeToBoundaryElement() in 3D.

This method takes in the three vertices of a face which match the given boundary element, and figure out if the order of the nodes in the face is reversed in the boundary element (returned in the bool 'rReverse'). Also, the offset between the first node in the face (as given to this method) and the first node in the boundary element is computed (returned in the variable 'rOffset'). Offset should then be applied before reverse to match the face nodes to the boundary element nodes.

Todo:
document these parameters
Parameters:
boundaryElemNode0 
boundaryElemNode1 
pElement 
node0 
node1 
node2 
rOffset 
rReverse 

Definition at line 631 of file QuadraticMesh.cpp.

References AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeGlobalIndex().

Referenced by QuadraticMesh< DIM >::AddExtraBoundaryNodes().

template<unsigned DIM>
void QuadraticMesh< DIM >::HelperMethod2 ( BoundaryElement< DIM-1, DIM > *  pBoundaryElement,
Element< DIM, DIM > *  pElement,
unsigned  internalNode0,
unsigned  internalNode1,
unsigned  internalNode2,
unsigned  offset,
bool  reverse 
) [inline, private]

Nasty helper method for AddNodeToBoundaryElement() in 3D.

This method takes the three internal nodes for some face in some element, applies the given offset and reverse (see HelperMethod1) to them, to get the ordered internal nodes which should given to the boundary element. It then calls AddNodeToBoundaryElement with each of the three internal nodes.

Todo:
document these parameters
Parameters:
pBoundaryElement 
pElement 
internalNode0 
internalNode1 
internalNode2 
offset 
reverse 

Definition at line 683 of file QuadraticMesh.cpp.

References QuadraticMesh< DIM >::AddNodeToBoundaryElement().

Referenced by QuadraticMesh< DIM >::AddExtraBoundaryNodes().

template<unsigned DIM>
void QuadraticMesh< DIM >::RunMesherAndReadMesh ( std::string  binary,
std::string  outputDir,
std::string  fileStem 
) [inline, private]

Helper method which runs triangle or tetgen and reads in the created mesh files. This method is collective (must be called by all processes).

Parameters:
binary "triangle" or "tetgen" etc
outputDir Where to write the temporary files
fileStem File stem to use for the temporary files

Todo:
: Could use the '-nn' flag when calling tetgen and then face file would have containing element info and second false

Definition at line 241 of file QuadraticMesh.cpp.

References PetscTools::AmMaster(), PetscTools::Barrier(), and QuadraticMesh< DIM >::ConstructFromMeshReader().

Referenced by QuadraticMesh< DIM >::QuadraticMesh().

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

Serialize the mesh.

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

Reimplemented from TetrahedralMesh< DIM, DIM >.

Definition at line 162 of file QuadraticMesh.hpp.

template<unsigned DIM>
void QuadraticMesh< DIM >::WriteBoundaryElementFile ( std::string  directory,
std::string  fileName 
) [inline]

Write the boundary elements to file (in case the boundary elements were linear when read and the quadratic versions have been computed.

Parameters:
directory Directory relative to CHASTE_TEST_OUTPUT. Not cleaned
fileName Boundary element file name.

Definition at line 579 of file QuadraticMesh.cpp.

References AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElementIteratorBegin(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElementIteratorEnd(), and OutputFileHandler::OpenOutputFile().


Friends And Related Function Documentation

template<unsigned DIM>
friend class boost::serialization::access [friend]

Needed for serialization.

Reimplemented from TetrahedralMesh< DIM, DIM >.

Definition at line 154 of file QuadraticMesh.hpp.


Member Data Documentation

template<unsigned DIM>
std::vector<bool> QuadraticMesh< DIM >::mIsInternalNode [private]

Vector of bools, one for one node, saying whether the node is internal (if not, it is a vertex).

Definition at line 52 of file QuadraticMesh.hpp.

Referenced by QuadraticMesh< DIM >::ConstructFromMeshReader(), and QuadraticMesh< DIM >::QuadraticMesh().

template<unsigned DIM>
unsigned QuadraticMesh< DIM >::mNumVertices [private]

Number of vertices, ie non-internal (non-quadratic), nodes.

Definition at line 55 of file QuadraticMesh.hpp.

Referenced by QuadraticMesh< DIM >::ConstructFromMeshReader(), QuadraticMesh< DIM >::GetNumVertices(), and QuadraticMesh< DIM >::QuadraticMesh().


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

Generated by  doxygen 1.6.2