#include <QuadraticMesh.hpp>
Inherits TetrahedralMesh< DIM, DIM >.
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< bool > | mIsInternalNode |
unsigned | mNumVertices |
Friends | |
class | boost::serialization::access |
A concrete quadratic mesh class that inherits from TetrahedralMesh.
Definition at line 44 of file QuadraticMesh.hpp.
QuadraticMesh< DIM >::QuadraticMesh | ( | ) | [inline] |
Constructor
Definition at line 173 of file QuadraticMesh.hpp.
References AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::mMeshIsLinear.
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.
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().
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.
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().
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).
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().
void QuadraticMesh< DIM >::AddNodesToBoundaryElements | ( | TrianglesMeshReader< DIM, DIM > * | pMeshReader | ) | [inline, private] |
Top level method for making 2D edges have 3 nodes not 2 and making 3D faces have 6 nodes not 3 (ie linear to quadratic).
pMeshReader | Pointer to the reader. Only used if boundaryElemFileHasContainElementInfo==true (can be null if not). |
Definition at line 400 of file QuadraticMesh.cpp.
References QuadraticMesh< DIM >::AddExtraBoundaryNodes(), ElementData::ContainingElement, AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElementIteratorBegin(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElementIteratorEnd(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetElement(), TrianglesMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNextFaceData(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeGlobalIndex(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumElements(), TrianglesMeshReader< ELEMENT_DIM, SPACE_DIM >::GetReadContainingElementOfBoundaryElement(), and TrianglesMeshReader< ELEMENT_DIM, SPACE_DIM >::Reset().
Referenced by QuadraticMesh< DIM >::ConstructFromMeshReader(), and QuadraticMesh< DIM >::QuadraticMesh().
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.
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().
void QuadraticMesh< DIM >::ConstructFromMeshReader | ( | AbstractMeshReader< DIM, DIM > & | rMeshReader | ) | [inline] |
Load a quadratic mesh from a file.
rMeshReader | the mesh reader |
Definition at line 295 of file QuadraticMesh.cpp.
References QuadraticMesh< DIM >::AddNodesToBoundaryElements(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElementIteratorBegin(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElementIteratorEnd(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetElement(), TrianglesMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNextElementData(), TrianglesMeshReader< ELEMENT_DIM, SPACE_DIM >::GetNextFaceData(), AbstractMesh< ELEMENT_DIM, SPACE_DIM >::GetNode(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumBoundaryElements(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumElements(), AbstractMesh< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), TrianglesMeshReader< ELEMENT_DIM, SPACE_DIM >::GetOrderOfBoundaryElements(), TrianglesMeshReader< ELEMENT_DIM, SPACE_DIM >::GetOrderOfElements(), QuadraticMesh< DIM >::mIsInternalNode, QuadraticMesh< DIM >::mNumVertices, ElementData::NodeIndices, and TrianglesMeshReader< ELEMENT_DIM, SPACE_DIM >::Reset().
Referenced by QuadraticMesh< DIM >::RunMesherAndReadMesh().
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.
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.
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().
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.
pBoundaryElement | ||
pElement | ||
internalNode0 | ||
internalNode1 | ||
internalNode2 | ||
offset | ||
reverse |
Definition at line 683 of file QuadraticMesh.cpp.
References QuadraticMesh< DIM >::AddNodeToBoundaryElement().
Referenced by QuadraticMesh< DIM >::AddExtraBoundaryNodes().
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).
binary | "triangle" or "tetgen" etc | |
outputDir | Where to write the temporary files | |
fileStem | File stem to use for the temporary files |
Definition at line 241 of file QuadraticMesh.cpp.
References PetscTools::AmMaster(), PetscTools::Barrier(), and QuadraticMesh< DIM >::ConstructFromMeshReader().
Referenced by QuadraticMesh< DIM >::QuadraticMesh().
void QuadraticMesh< DIM >::serialize | ( | Archive & | archive, | |
const unsigned int | version | |||
) | [inline, private] |
Serialize the mesh.
archive | the archive | |
version | the current version of this class |
Reimplemented from TetrahedralMesh< DIM, DIM >.
Definition at line 162 of file QuadraticMesh.hpp.
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.
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().
friend class boost::serialization::access [friend] |
Needed for serialization.
Reimplemented from TetrahedralMesh< DIM, DIM >.
Definition at line 154 of file QuadraticMesh.hpp.
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().
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().