00001 #ifndef gridripper_odesolver_shoot_method_RK4_h
00002 #define gridripper_odesolver_shoot_method_RK4_h
00003
00004 #include <gridripper/amr1d/FieldWrapper.h>
00005 #include <gridripper/odesolver/shoot/ODEIntegrator.h>
00006 #include <gridripper/tvalarray.h>
00007
00008 namespace gridripper { namespace odesolver { namespace shoot { namespace method {
00009
00016 class RK4: public ODEIntegrator
00017 {
00018 tvalarray<GReal_t> tmpf1;
00019 tvalarray<GReal_t> tmpf2;
00020 tvalarray<GReal_t> tmpf3;
00021 tvalarray<GReal_t> tmpf4;
00022
00023 public:
00024 RK4(ODE* ode);
00025
00026 void integrate(FieldWrapper& f, GReal_t x, GReal_t dx);
00027
00028 private:
00029 void integrate(GReal_t x, GReal_t dx, GReal_t* f0,
00030 GReal_t* f1, GReal_t* f2, GReal_t* f3, GReal_t* f4);
00031
00032 void step(GReal_t* f0, GReal_t* fin, GReal_t x, GReal_t* fout, GReal_t dx);
00033
00034 void step4(GReal_t* f0, GReal_t* f1, GReal_t* f2, GReal_t* f3,
00035 GReal_t x, GReal_t* f4, GReal_t dx);
00036 };
00037
00038 } } } }
00039
00040 #endif