RK4.h

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 } } } } // namespace gridripper::odesolver::shoot::method
00039 
00040 #endif /* gridripper_odesolver_shoot_method_RK4_h */