QuadraticMesh< DIM > Class Template Reference

#include <QuadraticMesh.hpp>

Inheritance diagram for QuadraticMesh< DIM >:

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

Collaboration graph
[legend]

List of all members.

Public Member Functions

 QuadraticMesh (const std::string &rFileName, bool boundaryElemFileIsQuadratic)
 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 LoadFromFile (const std::string &rFileName, bool boundaryElemFileIsQuadratic)
void AddNodesToBoundaryElements ()
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)

Private Attributes

std::vector< bool > mIsInternalNode
unsigned mNumVertices


Detailed Description

template<unsigned DIM>
class QuadraticMesh< DIM >

A concrete quadratic mesh class that inherits from TetrahedralMesh.

Definition at line 40 of file QuadraticMesh.hpp.


Constructor & Destructor Documentation

template<unsigned DIM>
QuadraticMesh< DIM >::QuadraticMesh ( const std::string &  rFileName,
bool  boundaryElemFileIsQuadratic 
) [inline]

Constructs a new Quadratic Mesh

Parameters:
rFileName The name of the quadratic mesh file to load
boundaryElemFileIsQuadratic Whether the boundary element file has a quadratic number of nodes (eg 3 in 2d) or linear number. Note tetgen with '-o2' creates files with quadratic elements but linear boundary elements. The AddExtraBoundaryNodes method will compute the extra info in boundaryElemFileIsQuadratic==false (slow).

Definition at line 41 of file QuadraticMesh.cpp.

References AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElementIteratorBegin(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElementIteratorEnd(), and QuadraticMesh< DIM >::LoadFromFile().

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

Todo:
1d constructor
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 60 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, 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 201 of file QuadraticMesh.cpp.

References OutputFileHandler::GetOutputDirectoryFullPath(), OutputFileHandler::OpenOutputFile(), and QuadraticMesh< DIM >::RunMesherAndReadMesh().


Member Function Documentation

template<unsigned DIM>
void QuadraticMesh< DIM >::LoadFromFile ( const std::string &  rFileName,
bool  boundaryElemFileIsQuadratic 
) [inline, private]

template<unsigned DIM>
void QuadraticMesh< DIM >::AddNodesToBoundaryElements (  )  [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 471 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 >::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 492 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 >::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 594 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 646 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.

Todo:
document these parameters (also shouldn't they be references?)
Parameters:
binary 
outputDir 
fileStem 

Definition at line 257 of file QuadraticMesh.cpp.

References QuadraticMesh< DIM >::LoadFromFile().

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

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 542 of file QuadraticMesh.cpp.

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

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

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

Definition at line 250 of file QuadraticMesh.cpp.

References QuadraticMesh< DIM >::mNumVertices.


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 48 of file QuadraticMesh.hpp.

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

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

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

Definition at line 51 of file QuadraticMesh.hpp.

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


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

Generated on Tue Aug 4 16:11:39 2009 for Chaste by  doxygen 1.5.5