diff options
author | Tim Blechmann <timblech@users.sourceforge.net> | 2004-12-21 09:22:10 +0000 |
---|---|---|
committer | IOhannes m zmölnig <zmoelnig@iem.at> | 2015-10-14 15:11:57 +0200 |
commit | 5233c01a26329306c9f1d08c1a39733aee2cc518 (patch) | |
tree | 27ea384742c0ebeed4439ab0874ea1af79f1bccf /chaos/src/ode_base.hpp | |
parent | cde59e47632b062410739af9064d906be182e589 (diff) |
This commit was generated by cvs2svn to compensate for changes in r2423,
which included commits to RCS files with non-trunk default branches.
svn path=/trunk/externals/tb/; revision=2424
Diffstat (limited to 'chaos/src/ode_base.hpp')
-rw-r--r-- | chaos/src/ode_base.hpp | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/chaos/src/ode_base.hpp b/chaos/src/ode_base.hpp new file mode 100644 index 0000000..5fdd6d1 --- /dev/null +++ b/chaos/src/ode_base.hpp @@ -0,0 +1,83 @@ +// +// +// chaos~ +// Copyright (C) 2004 Tim Blechmann +// +// 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; see the file COPYING. If not, write to +// the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +// Boston, MA 02111-1307, USA. + + +#ifndef __ode_base_hpp + +#include "chaos_base.hpp" + +class ode_base + : protected chaos_base +{ +public: + void set_method(int i) + { + if (i >=0 && i <4) + m_method = (unsigned char) i; + post("no such method"); + } + + t_int get_method() + { + return (int) m_method; + } + + void set_dt(t_float f) + { + if (f >= 0) + m_dt = (data_t)f; + else + post("invalid value for dt: %f", f); + } + + t_float get_dt() + { + return (t_float) m_dt; + } + + void m_step(); + +protected: + unsigned char m_method; /* 0: rk1, 1: rk2, 3: rk4 */ + data_t m_dt; /* step width */ + + data_t* m_k[3]; /* temporary arrays for runge kutta */ + data_t* m_tmp; + + virtual void m_system (data_t* deriv, data_t* data); + + void rk1 (); + void rk2 (); + void rk4 (); +}; + +#define ODE_CALLBACKS \ +CHAOS_CALLBACKS; \ +FLEXT_CALLVAR_I(m_system->get_method, m_system->set_method); \ +FLEXT_CALLVAR_F(m_system->get_dt, m_system->set_dt); + +#define ODE_ATTRIBUTES \ +CHAOS_ATTRIBUTES; \ +FLEXT_ADDATTR_VAR("method", m_system->get_method, m_system->set_method); \ +FLEXT_ADDATTR_VAR("dt",m_system->get_dt, m_system->set_dt); + + +#define __ode_base_hpp +#endif /* __ode_base_hpp */ |