mesh/Mesh.hpp

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

Generated on Tue May 29 17:13:48 2007 for DAPTA by  doxygen 1.5.1