Based on the original Rocket Workbench on SourceForge in CVS at: https://sourceforge.net/projects/rocketworkbench
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

93 lines
1.7 KiB

#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