00001 #ifndef __MESH_HPP__ 00002 #define __MESH_HPP__ 00003 00004 #include "tools/Tools.hpp" 00005 00006 #include <vector> 00007 #include <map> 00008 #include <set> 00009 #include <algorithm> 00010 #include <string> 00011 #include <sstream> 00012 00013 #include <boost/array.hpp> 00014 00015 namespace DAPTA { // Define namespace DAPTA 00016 00018 00022 template <typename Traits = Tetra4MeshTraits> 00023 class Mesh { 00024 public: 00025 // TYPE DEFINITIONS 00026 typedef typename Traits::VertexType VertexType; 00027 typedef typename Traits::VertexHandle VertexHandle; 00028 00029 typedef typename Traits::ElementType ElementType; 00030 typedef typename Traits::ElementHandle ElementHandle; 00031 00032 typedef typename Traits::CohElementType CohElementType; 00033 typedef typename Traits::CohElementHandle CohElementHandle; 00034 00035 typedef typename Traits::FaceElementType FaceElementType; 00036 typedef typename Traits::FaceElementHandle FaceElementHandle; 00037 00038 typedef typename Traits::EdgeElementType EdgeElementType; 00039 typedef typename Traits::EdgeElementHandle EdgeElementHandle; 00040 00041 typedef typename Traits::ElementConListType ElementConListType; 00042 typedef typename Traits::ElementConListHandle ElementConListHandle; 00043 00044 // ITERATOR DEFINITIONS, BEGIN & END FUNCTIONS 00045 typedef typename std::vector<VertexHandle> VertexMapType; 00046 typedef typename VertexMapType::iterator VertexMapIterator; 00047 typedef typename std::vector<ElementHandle> ElementMapType; 00048 typedef typename ElementMapType::iterator ElementMapIterator; 00049 typedef typename std::vector<CohElementHandle> CohElementMapType; 00050 typedef typename CohElementMapType::iterator CohElementMapIterator; 00051 typedef typename std::map<FaceElementType, ElementHandle> FaceMapType; 00052 typedef typename FaceMapType::iterator FaceMapIterator; 00053 typedef typename std::map<EdgeElementType, ElementConListHandle> EdgeMapType; 00054 typedef typename EdgeMapType::iterator EdgeMapIterator; 00055 VertexMapIterator VertexMapBegin() { return vertices.begin(); } 00056 VertexMapIterator VertexMapEnd() { return vertices.end(); } 00057 ElementMapIterator ElementMapBegin() { return elements.begin(); } 00058 ElementMapIterator ElementMapEnd() { return elements.end(); } 00059 CohElementMapIterator CohElementMapBegin() { return cohelements.begin(); } 00060 CohElementMapIterator CohElementMapEnd() { return cohelements.end(); } 00061 FaceMapIterator FaceMapBegin() { return faces.begin(); } 00062 FaceMapIterator FaceMapEnd() { return faces.end(); } 00063 EdgeMapIterator EdgeMapBegin() { return edges.begin(); } 00064 EdgeMapIterator EdgeMapEnd() { return edges.end(); } 00065 00066 Mesh() : maxVertex(0), maxElement(0), maxCohElement(0), newPrefix(0) {;} 00067 ~Mesh() {;} 00068 00069 void FractureFace (ElementHandle e, int i); 00070 void UpdateEdges (); 00071 00072 bool ReadFile (std::istream &in); 00073 std::string ExportFile (); 00074 std::string ExportDomainFile (std::set<VertexHandle> part_vert, std::set<ElementHandle> part_elem); 00075 00076 bool ClearMesh (); 00077 bool RemoveElement (ElementHandle e); 00078 bool RemoveElements (std::vector<int> elems); 00079 bool RemoveVertex (VertexHandle v); 00080 bool RemoveVertices (std::vector<int> verts); 00081 bool SetActive (std::vector<int> elems); 00082 00083 VertexHandle FindVertexFromIndex (int index); 00084 ElementHandle FindElementFromIndex (int index); 00085 00086 std::vector<VertexHandle> GetCentres(); 00087 00088 std::vector<VertexHandle> vertices; 00089 std::vector<ElementHandle> elements; 00090 std::vector<CohElementHandle> cohelements; 00091 00092 std::vector<VertexHandle> vertices_inactive; 00093 00094 std::map<FaceElementType, ElementHandle> faces; 00095 std::map<EdgeElementType, ElementConListHandle> edges; 00096 private: 00097 friend class MeshParalleliser<Traits>; 00098 00099 void ConnectElement(ElementHandle e); 00100 void AddElementToConLists(ElementHandle e); 00101 bool AddVertex (VertexHandle v); 00102 bool AddElement (ElementHandle e); 00103 bool AddCohElement (CohElementHandle e); 00104 00105 std::vector<ElementHandle> elements_inactive; 00106 00107 int maxVertex; 00108 int maxElement; 00109 int maxCohElement; 00110 00111 int newPrefix; 00112 }; 00113 00114 } // namespace DAPTA 00115 00116 #include "Mesh.cpp" 00117 00118 #endif
1.5.1