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 __HERTZIANELASTICINTERACTION_H 00014 #define __HERTZIANELASTICINTERACTION_H 00015 00016 #include "Model/IGParam.h" 00017 #include "Model/Interaction.h" 00018 #include "Model/Particle.h" 00019 00020 00024 class CHertzianElasticIGP : public AIGParam 00025 { 00026 public: 00027 double m_E; 00028 double m_nu; // poisson ratio 00029 00030 CHertzianElasticIGP(); 00031 CHertzianElasticIGP(const std::string&,double,double); 00032 00033 virtual std::string getTypeString() const {return "HertzianElastic";} 00034 }; 00035 00043 class CHertzianElasticInteraction : public APairInteraction 00044 { 00045 public: 00046 00047 typedef double (CHertzianElasticInteraction::* ScalarFieldFunction)() const; 00048 typedef Vec3 (CHertzianElasticInteraction::* VectorFieldFunction)() const; 00049 typedef pair<bool,double> (CHertzianElasticInteraction::* CheckedScalarFieldFunction)() const; 00050 00051 static ScalarFieldFunction getScalarFieldFunction(const string&); 00052 static VectorFieldFunction getVectorFieldFunction(const string&); 00053 static CheckedScalarFieldFunction getCheckedScalarFieldFunction(const string&); 00054 00055 private: 00056 double m_E; 00057 double m_nu; 00058 Vec3 m_force; // caching force for E_pot 00059 double m_dn; // caching displacement for E_pot 00060 Vec3 m_cpos; // center position 00061 00062 public: 00063 typedef CHertzianElasticIGP ParameterType; 00064 00065 CHertzianElasticInteraction(CParticle*,CParticle*,const CHertzianElasticIGP&); 00066 virtual ~CHertzianElasticInteraction(){}; 00067 00068 virtual Vec3 getPos() const {return m_cpos;}; 00069 double getPotentialEnergy() const; 00070 00071 virtual void calcForces(); 00072 Vec3 getForce() const; 00073 }; 00074 #endif //__HERTZIANELASTICINTERACTION_H