ESyS-Particle  4.0.1
VWFrictionInteraction.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 __VWFRICTION_H
00014 #define __VWFRICTION_H
00015 
00016 // -- project includes --
00017 #include "Model/FrictionInteraction.h"
00018 
00022 class VWFrictionIGP : public CFrictionIGP
00023 {
00024  public:
00025   double m_alpha;
00026 
00027   VWFrictionIGP();
00028   VWFrictionIGP(const std::string&, double, double, double, double, double);
00029 };
00030 
00035 class CVWFriction : public CFrictionInteraction
00036 {
00037  public: // types
00038   typedef VWFrictionIGP ParameterType;
00039 
00040   typedef double (CVWFriction::* ScalarFieldFunction)() const; 
00041   typedef Vec3 (CVWFriction::* VectorFieldFunction)() const; 
00042   typedef pair<bool,double> (CVWFriction::* CheckedScalarFieldFunction)() const;
00043 
00044  private:
00045   double m_alpha;
00046 
00047  public:
00048   CVWFriction();
00049   CVWFriction(CParticle*,CParticle*,const VWFrictionIGP&);
00050   virtual ~CVWFriction();
00051 
00052   static string getType() {return "VWFriction";};
00053   
00054   virtual void calcForces();
00055 
00056   pair<bool,double> getCurrentMu() const;
00057 
00058   static ScalarFieldFunction getScalarFieldFunction(const string&);
00059   static VectorFieldFunction getVectorFieldFunction(const string&);
00060   static CheckedScalarFieldFunction getCheckedScalarFieldFunction(const string&);
00061 
00062   friend class TML_PackedMessageInterface;
00063 };
00064 #endif //__VWFRICTION_H