ESyS-Particle
4.0.1
|
00001 00002 // // 00003 // Copyright (c) 2003-2011 by The University of Queensland // 00004 // Earth Systems Science Computational Centre (ESSCC) // 00005 // http://www.uq.edu.au/esscc // 00006 // // 00007 // Primary Business: Brisbane, Queensland, Australia // 00008 // Licensed under the Open Software License version 3.0 // 00009 // http://www.opensource.org/licenses/osl-3.0.php // 00010 // // 00012 00013 #ifndef __MESH2D_H 00014 #define __MESH2D_H 00015 00016 // -- Project includes -- 00017 #include "Geometry/Edge2D.h" 00018 #include "Geometry/Corner2D.h" 00019 #include "Model/MeshData2D.h" 00020 #include "Foundation/vec3.h" 00021 00022 // -- STL includes -- 00023 #include <vector> 00024 #include <map> 00025 #include <string> 00026 00027 using std::vector; 00028 using std::multimap; 00029 using std::map; 00030 using std::string; 00031 00032 // -- IO includes --- 00033 #include <iostream> 00034 00035 using std::ostream; 00036 00037 //--- TML includes --- 00038 #include "tml/comm/comm.h" 00039 00046 class Mesh2D 00047 { 00048 private: 00049 vector<Edge2D> m_edges; 00050 vector<Corner2D> m_corners; 00051 map<int,int> m_corner_by_id; 00052 multimap<int,Edge2D*> m_edge_by_node_id; 00053 map<int,int> m_edge_index_by_id; 00054 00055 public: 00056 // types 00057 typedef vector<Edge2D>::iterator edge_iterator; 00058 typedef vector<Corner2D>::iterator corner_iterator; 00059 00060 // functions 00061 Mesh2D(); 00062 virtual ~Mesh2D(){}; 00063 void LoadMesh(const vector<MeshNodeData2D>&,const vector<MeshEdgeData2D>&); 00064 void moveNode(int,const Vec3&); 00065 void translateBy(const Vec3 &translation); 00066 00067 edge_iterator edges_begin(){return m_edges.begin();}; 00068 edge_iterator edges_end(){return m_edges.end();}; 00069 corner_iterator corners_begin(){return m_corners.begin();}; 00070 corner_iterator corners_end(){return m_corners.end();}; 00071 Edge2D* getEdgeById(int); 00072 Corner2D* getCornerById(int); 00073 00074 void zeroForces(); 00075 virtual void writeCheckPoint(ostream&,const string&) const; 00076 virtual void loadCheckPoint(istream&); 00077 00078 // edge data access functions 00079 template <typename P> void forAllEdgesGet(P&,typename P::value_type (Edge2D::*rdf)() const); 00080 template <typename P> vector<pair<int,P> > forAllEdgesGetIndexed(P (Edge2D::*rdf)() const); 00081 }; 00082 00083 #include "Mesh2D.hpp" 00084 00085 #endif // __MESH2D_H