ESyS-Particle  4.0.1
CappedBondedInteraction.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 __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 &params
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