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 __CAPPEDBONDEDINTERACTION_H 00014 #define __CAPPEDBONDEDINTERACTION_H 00015 00016 // -- project includes -- 00017 #include "Model/IGParam.h" // keep this one first - it drags in mpi.h 00018 #include "Model/BondedInteraction.h" 00019 #include "Model/Interaction.h" 00020 #include "Model/Particle.h" 00021 #include "Model/BondedInteractionCpData.h" 00022 #include "Foundation/vec3.h" 00023 00024 // -- I/O includes -- 00025 #include <iostream> 00026 using std::ostream; 00027 00028 // -- STL includes -- 00029 #include <utility> 00030 00031 using std::pair; 00032 00040 class CCappedBondedIGP : public CBondedIGP 00041 { 00042 00043 public: 00044 double m_force_limit; // maximum force 00045 00046 CCappedBondedIGP(); 00047 CCappedBondedIGP(const std::string &name, int tag, double normalK, double breakDistance,double forceLimit); 00048 00049 virtual std::string getTypeString() const {return "CappedBonded"; } 00050 }; 00051 00059 class CCappedBondedInteraction : public CBondedInteraction 00060 { 00061 public: // types 00062 typedef CCappedBondedIGP ParameterType; 00063 00064 typedef double (CCappedBondedInteraction::* ScalarFieldFunction)() const; 00065 typedef pair<bool,double> (CCappedBondedInteraction::* CheckedScalarFieldFunction)() const; 00066 typedef Vec3 (CCappedBondedInteraction::* VectorFieldFunction)() const; 00067 00068 protected: 00069 double m_force_limit; 00070 CCappedBondedInteraction(CParticle*,CParticle*); 00071 00072 public: 00073 CCappedBondedInteraction(); 00074 CCappedBondedInteraction( 00075 CParticle *particle1, 00076 CParticle *particle2, 00077 const CCappedBondedIGP ¶ms 00078 ); 00079 00080 virtual ~CCappedBondedInteraction(); 00081 00082 static ScalarFieldFunction getScalarFieldFunction(const string&); 00083 static CheckedScalarFieldFunction getCheckedScalarFieldFunction(const string&); 00084 static VectorFieldFunction getVectorFieldFunction(const string&); 00085 00086 static string getType() {return "CappedBonded";}; 00087 00088 virtual void calcForces(); 00089 00090 friend class TML_PackedMessageInterface; 00091 }; 00092 00093 #endif //__CAPPEDBONDEDINTERACTION_H