66 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			66 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /* rk4.h   -  Simulation of rocket flight                              */ | ||
|  | /* Copyright (C) 2000                                                  */ | ||
|  | /* Antoine Lefebvre <antoine.lefebvre@polymtl.ca>                      */ | ||
|  | 
 | ||
|  | /* This program is free software; you can redistribute it and/or modify*/ | ||
|  | /* it under the terms of the GNU General Public License as published by*/ | ||
|  | /* the Free Software Foundation; either version 2 of the License, or   */ | ||
|  | /* (at your option) any later version.                                 */ | ||
|  | 
 | ||
|  | /* This program is distributed in the hope that it will be useful,     */ | ||
|  | /* but WITHOUT ANY WARRANTY; without even the implied warranty of      */ | ||
|  | /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the       */  | ||
|  | /* GNU General Public License for more details.                        */ | ||
|  | 
 | ||
|  | /* You should have received a copy of the GNU General Public License   */ | ||
|  | /* along with this program; if not, write to the Free Software         */ | ||
|  | /* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.           */ | ||
|  | 
 | ||
|  | #if !defined (rk4_h)
 | ||
|  | #define rk4_h 1
 | ||
|  | 
 | ||
|  | #include "c++rocket.h"
 | ||
|  | 
 | ||
|  | extern int model_1(int neq, double time,  | ||
|  | 		   double* z, double* dy,  | ||
|  | 		   int ierr); | ||
|  | 
 | ||
|  | extern int model_2(int neq, double time,  | ||
|  | 		   double* z, double* dy,  | ||
|  | 		   int ierr); | ||
|  | 
 | ||
|  | typedef int (*ModelFunc_t) (int, double, | ||
|  | 			    double*, double*, int); | ||
|  | 
 | ||
|  | extern "C" int rk4( int (*f)(int neq, double time,  | ||
|  | 			     double *y, double *dy,  | ||
|  | 			     int ierr),  | ||
|  | 		    int neq, double step, double duration,  | ||
|  | 		    double *ic, double **y ); | ||
|  | 
 | ||
|  | class rk4_solver | ||
|  | { | ||
|  | 
 | ||
|  |  private: | ||
|  |   void *md;   // pointer to the model function
 | ||
|  |   int  memory; | ||
|  | 
 | ||
|  |   double time; | ||
|  | 
 | ||
|  |   int    neq; | ||
|  |   int    length; | ||
|  |   double **ans; | ||
|  | 
 | ||
|  |  public: | ||
|  |   rk4_solver(Model_t model); | ||
|  |   ~rk4_solver(); | ||
|  | 
 | ||
|  |   void print(); | ||
|  |   void export_octave(char *filename); | ||
|  | 
 | ||
|  |   int solve(double *st, double duration, double step); | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | #endif
 |