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 protected:
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
00166 void ConstructLinearMesh(unsigned numElemX);
00167
00168
00180 void ConstructRectangularMesh(unsigned numElemX, unsigned numElemY, bool unused=true);
00181
00192 void ConstructCuboid(unsigned numElemX, unsigned numElemY, unsigned numElemZ);
00193
00194 public:
00195
00200 QuadraticMesh()
00201 {
00202 this->mMeshIsLinear=false;
00203 }
00204
00205
00216 QuadraticMesh(double spaceStep, double width, double height=0, double depth=0);
00217
00218
00224 void ConstructFromMeshReader(AbstractMeshReader<DIM, DIM>& rMeshReader);
00225
00233 void ConstructFromLinearMeshReader(AbstractMeshReader<DIM, DIM>& rMeshReader);
00234
00235
00243 void WriteBoundaryElementFile(std::string directory, std::string fileName);
00244
00248 unsigned GetNumVertices();
00249
00250
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267 };
00268
00269 #include "SerializationExportWrapper.hpp"
00270 EXPORT_TEMPLATE_CLASS_SAME_DIMS(QuadraticMesh)
00271
00272
00273 #endif