QuadraticMesh.hpp
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
00052 std::vector<bool> mIsInternalNode;
00053
00055 unsigned mNumVertices;
00056
00057
00062 void AddNodesToBoundaryElements(TrianglesMeshReader<DIM,DIM>* pMeshReader);
00063
00073 void AddNodeToBoundaryElement(BoundaryElement<DIM-1,DIM>* pBoundaryElement,
00074 Element<DIM,DIM>* pElement,
00075 unsigned internalNode);
00076
00087 void AddExtraBoundaryNodes(BoundaryElement<DIM-1,DIM>* pBoundaryElement,
00088 Element<DIM,DIM>* pElement,
00089 unsigned nodeIndexOppositeToFace);
00090
00113 void HelperMethod1(unsigned boundaryElemNode0, unsigned boundaryElemNode1,
00114 Element<DIM,DIM>* pElement,
00115 unsigned node0, unsigned node1, unsigned node2,
00116 unsigned& rOffset,
00117 bool& rReverse);
00118
00137 void HelperMethod2(BoundaryElement<DIM-1,DIM>* pBoundaryElement,
00138 Element<DIM,DIM>* pElement,
00139 unsigned internalNode0, unsigned internalNode1, unsigned internalNode2,
00140 unsigned offset,
00141 bool reverse);
00142
00151 void RunMesherAndReadMesh(std::string binary, std::string outputDir, std::string fileStem);
00152
00154 friend class boost::serialization::access;
00161 template<class Archive>
00162 void serialize(Archive & archive, const unsigned int version)
00163 {
00164 archive & boost::serialization::base_object<TetrahedralMesh<DIM, DIM> >(*this);
00165 }
00166
00167 public:
00168
00173 QuadraticMesh()
00174 {
00175 this->mMeshIsLinear=false;
00176 }
00177
00183 void ConstructFromMeshReader(AbstractMeshReader<DIM, DIM>& rMeshReader);
00184
00195 QuadraticMesh(double xEnd, double yEnd, unsigned numElemX, unsigned numElemY);
00196
00209 QuadraticMesh(double xEnd, double yEnd, double zEnd,
00210 unsigned numElemX, unsigned numElemY, unsigned numElemZ);
00211
00219 void WriteBoundaryElementFile(std::string directory, std::string fileName);
00220
00224 unsigned GetNumVertices();
00225 };
00226
00227 #include "SerializationExportWrapper.hpp"
00228 EXPORT_TEMPLATE_CLASS_SAME_DIMS(QuadraticMesh);
00229
00230
00231 #endif