00001
00002
00003
00004
00005
00006
00011 #ifndef RUNGEKUTTA_H
00012 #define RUNGEKUTTA_H
00013
00014 #include <iterator>
00015 #include <list>
00016
00017 #include "Integrator.h"
00018 #include "Vector.h"
00019 #include "Object.h"
00020
00021 #define NR_END 1
00022 #define FREE_ARG char*
00023
00029 class RungeKutta : public Integrator {
00030 private:
00031
00035 list<Collisionspair> collisions;
00036
00040 double* m;
00041
00045 double* radius;
00046
00050 double t;
00051
00055 double h;
00056
00060 int n;
00061
00065 int objnumber;
00066
00067 double distance(const int i, const int j, const double x[]);
00068 double acceleration(const int i, const int komponente,
00069 const double x[] );
00070 void derivs(double x, double y[], double dydx[]);
00071 double rk4(double y[], double dydx[], int n, double x, double h,
00072 double yout[]);
00073 double *vec(long nl, long nh);
00074 void free_vec(double *v, long nl, long nh);
00075
00076 protected:
00077 virtual void saveAttributes();
00078 virtual void loadAttributes();
00079 virtual void deleteAdditionalInformation(void * additionalInformation);
00080 public:
00081
00082 virtual double integrate(double time);
00083
00087 virtual string getName() {
00088 return "RungeKutta";
00089 }
00090
00094 virtual double getTime() {
00095 return t;
00096 }
00097
00098 virtual void createAttributeWindow();
00099 virtual void save(ostream & FILE);
00100 virtual void load(istream & FILE);
00101 virtual list<Collisionspair>* getCollisionslist();
00102
00103 RungeKutta();
00104 virtual ~RungeKutta() {}
00105 ;
00106
00107 };
00108
00109
00110 #endif