diff --git a/src/rungekutta.h b/src/rungekutta.h new file mode 100644 --- /dev/null +++ b/src/rungekutta.h @@ -0,0 +1,65 @@ +/* + * + * $Id$ + * + * This file is part of the Virtual Leaf. + * + * The Virtual Leaf is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The Virtual Leaf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Virtual Leaf. If not, see . + * + * Copyright 2010 Roeland Merks. + * + */ + + +#ifndef _RUNGEKUTTA_H_ +#define _RUNGEKUTTA_H_ + +class RungeKutta { + + public: + RungeKutta(void) { + kmax=kount=0; + dxsav=0.; + xp=0; + yp=0; + } + virtual ~RungeKutta() {} + + void odeint(double ystart[], int nvar, double x1, double x2, double eps, double h1, + double hmin, int *nok, int *nbad); + + + protected: + // implement "derivs" in a derived class + virtual void derivs(double x, double *y, double *dxdy) = 0; + int kmax,kount; + double *xp,**yp,dxsav; + + private: + void rkqs(double *y, double *dydx, int n, double *x, double htry, double eps, + double *yscal, double *hdid, double *hnext); + + void rkck(double *y, double *dydx, int n, double x, double h, double yout[], + double *yerr); + + static const double Safety; + static const double PGrow; + static const double Pshrnk; + static const double Errcon; + static const double Maxstp; + static const double Tiny; + + +}; +#endif