ODEShoot.h
00001 #ifndef gridripper_odesolver_shoot_ODEShoot_h
00002 #define gridripper_odesolver_shoot_ODEShoot_h
00003
00004 #include <gridripper/config.h>
00005 #include <gridripper/lang/IllegalArgumentException.h>
00006 #include <gridripper/amr1d/FieldWrapper.h>
00007 #include <gridripper/util/GrrProperties.h>
00008 #include <gridripper/tvector.h>
00009 #include <string>
00010
00011 namespace gridripper { namespace odesolver {
00012
00013 class ODE;
00014
00015 namespace shoot {
00016
00017 class ODEIntegrator;
00018
00019 using namespace gridripper;
00020 using namespace gridripper::amr1d;
00021 using namespace gridripper::util;
00022 using namespace std;
00023
00031 class ODEShoot
00032 {
00033 private:
00034 ODE* theODE;
00035 GReal_t deltaX;
00036 int subSteps;
00037 ODEIntegrator* odeIntegrator;
00038 string dataFormat;
00039
00040 public:
00045 ODEShoot(const GrrProperties& props)
00046 throw(IllegalArgumentException&);
00047
00054 ODEShoot(const GrrProperties& props, GReal_t dx, int subSteps)
00055 throw(IllegalArgumentException&);
00056
00065 ODEShoot(ODE* ode, GReal_t dx, int dn, ODEIntegrator* oi)
00066 throw(IllegalArgumentException&);
00067
00068 public:
00073 ODE& getODE() const {
00074 return *theODE;
00075 }
00076
00081 GReal_t getDeltaX() const {
00082 return deltaX;
00083 }
00084
00089 void solve(tvector<GReal_t>& sol) const;
00090
00095 string getDataFormat() const {
00096 return dataFormat;
00097 }
00098
00099 private:
00100 void solve(tvector<GReal_t>& sol,
00101 GReal_t x0, const FieldWrapper& f0,
00102 GReal_t x1, const FieldWrapper& f1) const;
00103
00104 void solve(tvector<GReal_t>& sol, GReal_t x0, const FieldWrapper& fw0)
00105 const;
00106
00107 void init(ODE* ode, GReal_t dx, int dn, ODEIntegrator* oi)
00108 throw(IllegalArgumentException&);
00109 };
00110
00111 } } }
00112
00113 #endif