#include "AnT.hpp"

#define r    parameters[0]
#define X1   parameters[1]
#define X2   parameters[2]
#define X3   parameters[3]
#define a    parameters[4]
#define b    parameters[5]
#define b1   parameters[6]
#define b2   parameters[7]
#define q    parameters[8]
#define X    currentState[0]
#define Y    currentState[1]
#define Z    currentState[2]

bool chem_syst (const Array<real_t>& currentState,
	    const Array<real_t>& parameters,
	    Array<real_t>& rhs)
{
  rhs[0] = r * (Y - (X-X1)*(X-X2)*(X-X3) -a);
  rhs[1] = b - b1*Z - b2*X - Y;
  rhs[2] = q * (X-Z);

  return true;
}

#undef r
#undef X1
#undef X2
#undef X3
#undef a
#undef b
#undef b1
#undef b2
#undef q
#undef X
#undef Y
#undef Z

extern "C"
{
  void connectSystem ()
  {
    ODE_Proxy::systemFunction = chem_syst; 
  }
};


