#if !defined (lsode_h) #define lsode_h 1 #include "c++rocket.h" extern int model_1(const int& neq, const double& time, double* z, double* dy, int& ierr); extern int model_2(const int& neq, const double& time, double* z, double* dy, int& ierr); extern "C" int lsode_ (int (*)(const int&, const double&, double*, double*, int&), int&, double*, double&, double&, int&, double&, double&, int&, int&, int&, double*, int&, int*, int&, int (*)(const int&, const double&, double*, const int&, const int&, double*, const int&), int&); typedef int (*ModelFunc_t) (const int&, const double&, double*, double*, int&); class lsode { int memory; // est vrai si la memoire a ete alloue // ce sont des variables utilises par lsode_ int neq; int length; double **dy; double time; double tout; int itol; double rtol; double atol; int itask; int istate; int iopt; double *rwork; int lrw; int *iwork; int liw; int mf; double *state; void *md; //int (*func)(const int&, const double&, double*, double*, int&) void reset(); public: lsode(Model_t model); ~lsode(); void print(); void set_atol(double tol) { atol = tol; } void set_rtol(double tol) { rtol = tol; } int solve(double *st, double duration, double step); int get_length(void) { return length; }; void get_data(double**); int get_neq(void) { return neq; }; }; typedef enum { SUCCES = 2, TOO_MUCH_WORK = -1, TOO_MUCH_ACC = -2, ILLEGAL_INPUT = -3, ERR_FAILURE = -4, CONV_FAILURE = -5, ERROR_WEIGHT = -6, EXIT_IN_FUNCTION = -13 } State; #endif