#include "AnT.hpp"

#define a     parameters[0]
#define b     parameters[1]
#define F     parameters[2]
#define G     parameters[3]
#define scal  parameters[4]
#define X     currentState[0]
#define Y     currentState[1]
#define Z     currentState[2]

bool lorenz84 (const Array<real_t>& currentState,
	       const Array<real_t>& parameters,
	       Array<real_t>& rhs)
{
  rhs[0] = a*F/scal - a*X - scal*(Y*Y + Z*Z);
  rhs[1] = - Y + G/scal + scal*(X*Y - b*X*Z);
  rhs[2] = - Z + scal*(b*X*Y + X*Z);

  return true;
}

#undef a
#undef b
#undef F
#undef G
#undef scal
#undef X
#undef Y
#undef Z

extern "C" {

void connectSystem ()
{
  ODE_Proxy::systemFunction = lorenz84;
}

}


