ESyS-Particle  4.0.1
Mesh2D.h
1 
2 // //
3 // Copyright (c) 2003-2011 by The University of Queensland //
4 // Earth Systems Science Computational Centre (ESSCC) //
5 // http://www.uq.edu.au/esscc //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 #ifndef __MESH2D_H
14 #define __MESH2D_H
15 
16 // -- Project includes --
17 #include "Geometry/Edge2D.h"
18 #include "Geometry/Corner2D.h"
19 #include "Model/MeshData2D.h"
20 #include "Foundation/vec3.h"
21 
22 // -- STL includes --
23 #include <vector>
24 #include <map>
25 #include <string>
26 
27 using std::vector;
28 using std::multimap;
29 using std::map;
30 using std::string;
31 
32 // -- IO includes ---
33 #include <iostream>
34 
35 using std::ostream;
36 
37 //--- TML includes ---
38 #include "tml/comm/comm.h"
39 
46 class Mesh2D
47 {
48  private:
49  vector<Edge2D> m_edges;
50  vector<Corner2D> m_corners;
51  map<int,int> m_corner_by_id;
52  multimap<int,Edge2D*> m_edge_by_node_id;
53  map<int,int> m_edge_index_by_id;
54 
55  public:
56  // types
57  typedef vector<Edge2D>::iterator edge_iterator;
58  typedef vector<Corner2D>::iterator corner_iterator;
59 
60  // functions
61  Mesh2D();
62  virtual ~Mesh2D(){};
63  void LoadMesh(const vector<MeshNodeData2D>&,const vector<MeshEdgeData2D>&);
64  void moveNode(int,const Vec3&);
65  void translateBy(const Vec3 &translation);
66 
67  edge_iterator edges_begin(){return m_edges.begin();};
68  edge_iterator edges_end(){return m_edges.end();};
69  corner_iterator corners_begin(){return m_corners.begin();};
70  corner_iterator corners_end(){return m_corners.end();};
71  Edge2D* getEdgeById(int);
72  Corner2D* getCornerById(int);
73 
74  void zeroForces();
75  virtual void writeCheckPoint(ostream&,const string&) const;
76  virtual void loadCheckPoint(istream&);
77 
78  // edge data access functions
79  template <typename P> void forAllEdgesGet(P&,typename P::value_type (Edge2D::*rdf)() const);
80  template <typename P> vector<pair<int,P> > forAllEdgesGetIndexed(P (Edge2D::*rdf)() const);
81 };
82 
83 #include "Mesh2D.hpp"
84 
85 #endif // __MESH2D_H