00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _ODESOLUTION_HPP_
00031 #define _ODESOLUTION_HPP_
00032
00033 #include <vector>
00034 #include <string>
00035 #include <fstream>
00036 #include <sstream>
00037 #include <boost/shared_ptr.hpp>
00038
00039 #include "AbstractOdeSystemInformation.hpp"
00040 class AbstractOdeSystem;
00041
00045 class OdeSolution
00046 {
00047 private:
00048
00050 unsigned mNumberOfTimeSteps;
00051
00053 std::vector<double> mTimes;
00054
00056 std::vector<std::vector<double> > mSolutions;
00057
00059 std::vector<std::vector<double> > mDerivedQuantities;
00060
00066 boost::shared_ptr<const AbstractOdeSystemInformation> mpOdeSystemInformation;
00067
00068 public:
00069
00073 OdeSolution();
00074
00080 unsigned GetNumberOfTimeSteps() const;
00081
00087 void SetNumberOfTimeSteps(unsigned numTimeSteps);
00088
00094 void SetOdeSystemInformation(boost::shared_ptr<const AbstractOdeSystemInformation> pOdeSystemInfo);
00095
00102 std::vector<double> GetVariableAtIndex(unsigned index) const;
00103
00109 std::vector<double>& rGetTimes();
00110
00116 const std::vector<double>& rGetTimes() const;
00117
00123 std::vector<std::vector<double> >& rGetSolutions();
00124
00130 const std::vector<std::vector<double> >& rGetSolutions() const;
00131
00137 std::vector<std::vector<double> >& rGetDerivedQuantities(AbstractOdeSystem* pOdeSystem);
00138
00155 void WriteToFile(std::string directoryName,
00156 std::string baseResultsFilename,
00157 std::string timeUnits,
00158 unsigned stepsPerRow=1,
00159 bool cleanDirectory=true,
00160 unsigned precision=8,
00161 bool includeDerivedQuantities=false,
00162 AbstractOdeSystem* pOdeSystem=NULL);
00163 };
00164
00165 #endif //_ODESOLUTION_HPP_