00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef QUADRATICMESH_HPP_
00030 #define QUADRATICMESH_HPP_
00031
00032 #include "ChasteSerialization.hpp"
00033 #include <boost/serialization/base_object.hpp>
00034
00035 #include "TetrahedralMesh.hpp"
00036 #include "TrianglesMeshReader.hpp"
00037
00038 #include <vector>
00039
00043 template<unsigned DIM>
00044 class QuadraticMesh : public TetrahedralMesh<DIM, DIM>
00045 {
00046 private:
00047
00049 unsigned mNumVertices;
00050
00055 void CountAndCheckVertices();
00056
00061 void AddNodesToBoundaryElements(TrianglesMeshReader<DIM,DIM>* pMeshReader);
00062
00072 void AddNodeToBoundaryElement(BoundaryElement<DIM-1,DIM>* pBoundaryElement,
00073 Element<DIM,DIM>* pElement,
00074 unsigned internalNode);
00075
00086 void AddExtraBoundaryNodes(BoundaryElement<DIM-1,DIM>* pBoundaryElement,
00087 Element<DIM,DIM>* pElement,
00088 unsigned nodeIndexOppositeToFace);
00089
00112 void HelperMethod1(unsigned boundaryElemNode0, unsigned boundaryElemNode1,
00113 Element<DIM,DIM>* pElement,
00114 unsigned node0, unsigned node1, unsigned node2,
00115 unsigned& rOffset,
00116 bool& rReverse);
00117
00136 void HelperMethod2(BoundaryElement<DIM-1,DIM>* pBoundaryElement,
00137 Element<DIM,DIM>* pElement,
00138 unsigned internalNode0, unsigned internalNode1, unsigned internalNode2,
00139 unsigned offset,
00140 bool reverse);
00141
00143 friend class boost::serialization::access;
00150 template<class Archive>
00151 void serialize(Archive & archive, const unsigned int version)
00152 {
00153 archive & boost::serialization::base_object<TetrahedralMesh<DIM, DIM> >(*this);
00154 }
00155
00156
00163 void ConstructLinearMesh(unsigned numElemX);
00164
00165
00177 void ConstructRectangularMesh(unsigned numElemX, unsigned numElemY, bool unused=true);
00178
00189 void ConstructCuboid(unsigned numElemX, unsigned numElemY, unsigned numElemZ);
00190
00191 public:
00192
00197 QuadraticMesh()
00198 {
00199 this->mMeshIsLinear=false;
00200 }
00201
00202
00213 QuadraticMesh(double spaceStep, double width, double height=0, double depth=0);
00214
00215
00221 void ConstructFromMeshReader(AbstractMeshReader<DIM, DIM>& rMeshReader);
00222
00230 void ConstructFromLinearMeshReader(AbstractMeshReader<DIM, DIM>& rMeshReader);
00231
00232
00240 void WriteBoundaryElementFile(std::string directory, std::string fileName);
00241
00245 unsigned GetNumVertices();
00246 };
00247
00248 #include "SerializationExportWrapper.hpp"
00249 EXPORT_TEMPLATE_CLASS_SAME_DIMS(QuadraticMesh)
00250
00251
00252 #endif