blob: cf5f69fc1a6f3aab3a40af01bc970f6a50d8adbf [file] [log] [blame]
// Gets ICE 40.
#include <vector>
#include<string>
using namespace std;
class ODEsolver
{
private:
void eulerODE(vector<double>& y, double& t, double& dt);
void midpointODE(vector<double>& y, double& t, double& dt);
protected:
void (ODEsolver::*useMethod)(vector<double>&, double&, double&);
void init();
public:
ODEsolver();
void timeloop(vector<double>& y, double ts, double te, double dt);
};
ODEsolver::ODEsolver()
{
init();
}
void ODEsolver::eulerODE(vector<double>& y, double& t, double& dt)
{
y[0] = dt * 2.;
}
void ODEsolver::midpointODE(vector<double>& y, double& t, double& dt)
{
y[0] = dt * 3.;
}
void ODEsolver::init()
{
ODEsolver::useMethod = &ODEsolver::midpointODE;
}
void ODEsolver::timeloop(vector<double>& y, double ts, double te, double dt)
{
(ODEsolver::useMethod)(y,ts,dt);
}
int main (int nargs, char** args)
{
ODEsolver solver;
vector<double> y(2); double t_start=5.; double t_end=7.; double dt=2.;
solver.timeloop(y,t_start,t_end,dt);
cout << y[0] << endl;
return(0);
}