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 __ROTELASTICINTERACTION_H 00014 #define __ROTELASTICINTERACTION_H 00015 00016 #include "Model/RotPairInteraction.h" 00017 #include "Model/RotParticle.h" 00018 #include "Model/IGParam.h" 00019 00020 00024 class CRotElasticIGP : public AIGParam 00025 { 00026 protected: 00027 public: 00028 CRotElasticIGP(); 00029 CRotElasticIGP(const std::string &name, double kr, bool scaling); 00030 00031 double m_kr; 00032 bool m_scaling; 00033 00034 virtual void packInto(CVarMPIBuffer*) const; 00035 void setNormalSpringConst(double k){m_kr=k;}; 00036 double getNormalSpringConst() const{return m_kr;}; 00037 00038 virtual std::string getTypeString() const {return "RotElastic";} 00039 00040 friend ostream& operator<<(ostream&,const CRotElasticIGP&); 00041 }; 00042 00043 CRotElasticIGP* extractRotElasticIGP(AMPIBuffer*); 00044 CRotElasticIGP* extractRotElasticIGP_p(AMPIBuffer*); 00045 00050 class CRotElasticInteraction : public ARotPairInteraction 00051 { 00052 public: 00053 typedef double (CRotElasticInteraction::* ScalarFieldFunction)() const; 00054 typedef pair<bool,double> (CRotElasticInteraction::* CheckedScalarFieldFunction)() const; 00055 typedef Vec3 (CRotElasticInteraction::* VectorFieldFunction)() const; 00056 00057 static ScalarFieldFunction getScalarFieldFunction(const string&); 00058 static CheckedScalarFieldFunction getCheckedScalarFieldFunction(const string&); 00059 static VectorFieldFunction getVectorFieldFunction(const string&); 00060 00061 private: 00062 double m_kr; 00063 Vec3 m_force; 00064 double m_nForce; 00065 Vec3 m_cpos; 00066 Vec3 m_D; 00067 bool m_scaling; 00068 00069 public: 00070 typedef CRotElasticIGP ParameterType; 00071 00072 CRotElasticInteraction(); 00073 CRotElasticInteraction(CRotParticle*,CRotParticle*,const CRotElasticIGP&); 00074 virtual ~CRotElasticInteraction(){}; 00075 00076 virtual Vec3 getPos() const {return m_cpos;} 00077 00078 static string getType(){return "RotElastic";} 00079 00080 virtual void calcForces(); 00081 00082 Vec3 getForce() const; 00083 double getPotentialEnergy() const; 00084 00085 friend ostream& operator<<(ostream&,const CRotElasticInteraction&); 00086 00087 // save/load of restart parameters 00088 virtual void saveRestartData(std::ostream &oStream); 00089 virtual void loadRestartData(std::istream &iStream); 00090 }; 00091 #endif //__ELASTICINTERACTION_H