/*--------------------------------------------------------------------------
   Author: Thomas Nowotny
  
   Institute: Institute for Nonlinear Dynamics
              University of California San Diego
              La Jolla, CA 92093-0402
  
   email to:  tnowotny@ucsd.edu
  
   initial version: 2005-08-17
  
--------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------

  Implementation of a 6-5 Runge Kutta method with adaptive time step
  mostly taken from the book "The numerical analysis of ordinary differential
  equations - Runge-Kutta and general linear methods" by J.C. Butcher, Wiley,
  Chichester, 1987 and a free adaption to a 6 order Runge Kutta method
  of an ODE system with additive white noise

--------------------------------------------------------------------------*/  

using namespace std;

#ifndef CN_RK65N_H
#define CN_RK65N_H

#include "CN_NeuronModel.h"
#include <cmath>
#include <cfloat>

class rk65n
{
private:
  double a[9][8];
  double b[9];

  double newdt, dtx, theEps;
  double *Y[9];
  double *F[9];
  double *y5;
  double aF;
  double delta;
  int i, j, k;

protected:
  int N;
  double maxdt, eps, abseps, releps; 

public:
  rk65n(int, double, double, double, double);
  ~rk65n();
  double integrate(double *, double *, NeuronModel *, double);
  int Dim() { return N; }
};

#endif