ESyS-Particle  4.0.1
AdhesiveFriction.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 __ADHESIVEFRICTION_H
00014 #define __ADHESIVEFRICTION_H
00015 
00016 #include "Model/FrictionInteraction.h"
00017 
00021 class CAdhesiveFrictionIGP : public AIGParam
00022 {
00023 public:
00024   virtual std::string getTypeString() const {return "AdhesiveFriction";}
00025 
00026   void setTimeStepSize(double timeStepSize)
00027   {
00028     this->dt = timeStepSize;
00029   }
00030 
00031   double k;
00032   double mu;
00033   double k_s;
00034   double dt;
00035   double r_cut;
00036 };
00037 
00041 class CAdhesiveFriction : public CFrictionInteraction
00042 {
00043 public: // types
00044   typedef CAdhesiveFrictionIGP ParameterType;
00045 
00046   typedef double (CAdhesiveFriction::* ScalarFieldFunction)() const;
00047   typedef pair<bool,double> (CAdhesiveFriction::* CheckedScalarFieldFunction)() const;
00048   typedef Vec3 (CAdhesiveFriction::* VectorFieldFunction)() const;
00049 
00050 protected:
00051   double m_r_cut;
00052   double m_r_cut_h;
00053  
00054 public:
00055   CAdhesiveFriction();
00056   CAdhesiveFriction(CParticle*,CParticle*,const CAdhesiveFrictionIGP&);
00057   virtual ~CAdhesiveFriction();
00058 
00059   static string getType() {return "AdhesiveFriction";};
00060   
00061   virtual void calcForces();
00062  
00063   friend class TML_PackedMessageInterface;
00064 };
00065 
00066 #endif // __ADHESIVEFRICTION_H