ESyS-Particle  4.0.1
Edge2D.h
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 __EDGE2D_H
00014 #define __EDGE2D_H
00015 
00016 //-- Project includes --
00017 #include "Foundation/vec3.h"
00018 #include "Foundation/Matrix3.h"
00019 #include "Geometry/AEdge.h"
00020 
00021 //-- STL includes --
00022 #include <utility>
00023 using std::pair;
00024 using std::make_pair;
00025 
00026 //-- IO includes --
00027 #include <iostream>
00028 using std::ostream;
00029 
00038 class Edge2D : public AEdge
00039 {
00040  public: // types
00041   typedef Vec3 (Edge2D::* VectorFieldFunction)() const;
00042   typedef double (Edge2D::* ScalarFieldFunction)() const;
00043   
00044  private:
00045   Vec3 m_normal;
00046   Vec3 m_force;
00047   int m_id0,m_id1; // corner ids
00048   int m_edge_id,m_tag;
00049 
00050  public:
00051   Edge2D(int,int,const Vec3&,const Vec3&,int,int);
00052   void moveNode(int,const Vec3&);
00053 
00054   inline int getID(){return m_edge_id;};
00055   inline void applyForce(const Vec3& f){m_force+=f;};
00056   inline void zeroForce(){m_force=Vec3(0.0,0.0,0.0);};
00057   Vec3 getNormal() const {return m_normal;};
00058   Vec3 toGlobal(const Vec3&);
00059   Vec3 toLocal(const Vec3&);
00060 
00061   // get id/pos pairs for each node -> mainly for checkpointing
00062   pair<int,Vec3> getP0()const{return make_pair(m_id0,m_p0);};
00063   pair<int,Vec3> getP1()const{return make_pair(m_id1,m_p1);};
00064   
00065   // access functions
00066   static VectorFieldFunction getVectorFieldFunction(const string&);
00067   static ScalarFieldFunction getScalarFieldFunction(const string&);
00068 
00069   Vec3 getForce() const {return m_force;};
00070   Vec3 getForceDensity() const {return m_force/((m_p1-m_p0).norm());};
00071   double getPressure() const;
00072 
00074   friend ostream& operator<<(ostream&,const Edge2D&); 
00075   void print();
00076 };
00077 
00078 
00079 #endif // __EDGE2D_H