00001
00002
00003
00004
00005
00006
00007 #ifndef _RUNGE_KUTTA_IMPLICIT_INTEGRATOR_H
00008 #define _RUNGE_KUTTA_IMPLICIT_INTEGRATOR_H
00009
00010 #include <Physsim/VectorN.h>
00011 #include <Physsim/Integrator.h>
00012
00013 namespace Physsim {
00014
00016 class RungeKuttaImplicitIntegrator : public Integrator
00017 {
00018 public:
00019 virtual void clone(BasePtr& cloned, bimap<BasePtr, BasePtr>* object_map = NULL) const;
00020 virtual VectorN integrate(const VectorN& x, VectorN (*f)(const VectorN&, Real, void*), Real time, Real step_size, void* data);
00021 static VectorN step(const VectorN& x, VectorN (*f)(const VectorN&, Real, void*), Real time, Real step_size, void* data, VectorN& dxdt1, VectorN& dxdt2);
00022 virtual void load_from_xml(XMLTreeConstPtr node, std::map<std::string, BasePtr>& id_map);
00023 virtual void save_to_xml(XMLTreePtr node, std::list<BaseConstPtr>& shared_objects) const;
00024 };
00025 }
00026
00027 #endif
00028