From c75fb67154fb5679d6ede9a52d5f5ae15600f9f9 Mon Sep 17 00:00:00 2001 From: siddhu8990 Date: Mon, 6 Jun 2016 09:18:33 +0530 Subject: File handling functions added --- src/c/differential_calculus/ode/dodes.c | 44 +++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 16 deletions(-) (limited to 'src/c/differential_calculus/ode/dodes.c') diff --git a/src/c/differential_calculus/ode/dodes.c b/src/c/differential_calculus/ode/dodes.c index ee6718bb..adef1ba7 100644 --- a/src/c/differential_calculus/ode/dodes.c +++ b/src/c/differential_calculus/ode/dodes.c @@ -1,13 +1,16 @@ -// Copyright (C) 2016 - IIT Bombay - FOSSEE -// -// This file must be used under the terms of the CeCILL. -// This source file is licensed as described in the file COPYING, which -// you should have received as part of this distribution. The terms -// are also available at -// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt -// Author: Siddhesh Wani -// Organization: FOSSEE, IIT Bombay -// Email: toolbox@scilab.in +/* Copyright (C) 2016 - IIT Bombay - FOSSEE + + This file must be used under the terms of the CeCILL. + This source file is licensed as described in the file COPYING, which + you should have received as part of this distribution. The terms + are also available at + http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt + Author: Siddhesh Wani + Organization: FOSSEE, IIT Bombay + Email: toolbox@scilab.in +*/ + +/*Function for solving ODEs using GSL library*/ #include "ode.h" #include "types.h" @@ -17,20 +20,29 @@ double dodes(double initial_value, double start_time, double end_time, \ - char *ode_function, double nequs, double eps_abs, double eps_rel, \ - double step_size) + int (*ode_function), char *solver_type, double nequs, double eps_abs, \ + double eps_rel, double step_size, int *params) { - double out = 0; + double out = 0, t = 0; //int status; + out = initial_value; + t = start_time; //Setup ODE related parameters - gsl_odeiv2_system sys = {ode_function, NULL, 2, NULL}; + gsl_odeiv2_system sys = {ode_function, NULL, nequs, NULL}; gsl_odeiv2_step *s = gsl_odeiv2_step_alloc (gsl_odeiv2_step_rkf45, nequs); gsl_odeiv2_control *c = gsl_odeiv2_control_y_new (eps_abs, eps_rel); gsl_odeiv2_evolve *e = gsl_odeiv2_evolve_alloc (nequs); - gsl_odeiv2_evolve_apply_fixed_step (e, c, s, &sys, &start_time, step_size, &out); - + while(t < end_time) + { + gsl_odeiv2_evolve_apply_fixed_step (e, c, s, &sys, &t, step_size, &out); + } + + gsl_odeiv2_evolve_free (e); + gsl_odeiv2_control_free (c); + gsl_odeiv2_step_free (s); + return out; } -- cgit