Search code examples
c++ofstreamodeint

ofstream Odeint output to txt file


I try to run this example from the ODEINT library to solve ODE. It just runs fine, but instead of cout the results to screen, I want to write them to a file. I add this ofstream to the code under write_cout function but it only writes the last line of result to the file and not all. Do you have any idea about this? Thanks

#include <iostream>
#include <boost/numeric/odeint.hpp>
#include <fstream>

using namespace std;
using namespace boost::numeric::odeint;


void rhs( const double x , double &dxdt , const double t )
{
dxdt = 3.0/(2.0*t*t) + x/(2.0*t);
}

void write_cout( const double &x , const double t )
{
cout << t << '\t' << x << endl;
cout<<"alo"<<endl;

ofstream buckyFile ("tuna.txt");
buckyFile<<t <<'\t'<<x<<endl;

}

// state_type = double
typedef runge_kutta_dopri5< double > stepper_type;

int main()
{
double x = 0.0;
integrate_adaptive( make_controlled( 1E-12 , 1E-12 , stepper_type() ) ,
                    rhs , x , 1.0 , 10.0 , 0.1 , write_cout );
}

Solution

  • ofstream buckyFile ("tuna.txt");
    

    opens a new file tuna.txt each time the function is entered, overriding what ever was there before.

    A quick fix would be to use a

    static ofstream buckyFile ("tuna.txt");
    

    instead.