Documentation


simplesolver.h

Go to the documentation of this file.
00001 /***************************************************************************
00002                           simplesolver.h  -  description
00003                              -------------------
00004     begin                : Sat Nov 8 2003
00005     copyright            : (C) 2003 by François Faure
00006     email                : 
00007  ***************************************************************************/
00008 
00009 #ifndef SIMPLESOLVER_H
00010 #define SIMPLESOLVER_H
00011 
00012 #include <animal/odeSolver.h>
00013 #include <animal/value.h>
00014 
00015 namespace animal {
00016     
00017 
00037 template<
00038     class t_Positions,
00039     class t_Vector,
00040     class t_InvMasses,
00041     class t_Real>
00042 class SimpleSolver : public OdeSolver<t_Positions,t_Vector,t_Real>
00043 {
00044 public: 
00046     SimpleSolver();
00047     virtual ~SimpleSolver();
00048 
00049     typedef t_Positions Positions;  
00050     typedef t_Vector Vector; 
00051     typedef typename container_traits<Vector>::value_type Vec; 
00052   typedef t_InvMasses InvMasses;  
00053   typedef typename container_traits<InvMasses>::value_type InvMass; 
00054     typedef t_Real Real;     
00055 
00056   
00061   virtual void computeAccelerations( Vector& acc, const Positions& pos, const Vector& vel );
00066   virtual void applyForces( Vector& acc, const Vector& forces );
00068   void solveODE( Positions& p, Vector& v, Real dt );
00070   virtual void computeForces( Vector& acc, const Positions& pos, const Vector& vel );
00071 
00072 
00076   virtual void set_gravity( const Vec& _newVal);
00078   virtual const Vec& get_gravity();
00080   virtual void set_useGravity( const bool& _newVal);
00082   virtual const bool& get_useGravity();
00084   void applyGravity( Vector& a );
00090   virtual void set_useExponentialDamping( const bool& _newVal);
00092   virtual const bool& get_useExponentialDamping();
00094   virtual void set_exponentialDamping( const Real& _newVal);
00096   virtual const Real& get_exponentialDamping();
00102   virtual void set_useMass( const bool& _newVal);
00104   virtual const bool& get_useMass();
00106   virtual void set_useSingleMass( const bool& _newVal);
00108   virtual const bool& get_useSingleMass();
00110   virtual void set_singleInvMass( const InvMass& _newVal);
00112   virtual const InvMass& get_singleInvMass();
00114   virtual void set_invMasses( InvMasses* _newVal);
00116   virtual const InvMasses* get_invMasses();
00119 protected: // Protected attributes
00120   typedef OdeSolver<t_Positions,t_Vector,t_Real> Parent; 
00121 
00122   Vec _gravity;
00124   bool _useGravity;
00126   Real _exponentialDamping;
00128   const InvMasses* _invMasses;
00130   bool _useExponentialDamping;
00132   InvMass _singleInvMass;
00134   static Vec zero(){ return Value<Vec>::zero(); }
00136   bool _useMass;
00138   bool _useSingleMass;
00139 };
00140 
00141 }//animal
00142 
00143 
00144 #endif

Generated on Thu Dec 23 13:52:27 2004 by doxygen 1.3.6