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 __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