AbstractCvodeSystem.hpp
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 #ifdef CHASTE_CVODE
00030 #ifndef _ABSTRACTCVODESYSTEM_HPP_
00031 #define _ABSTRACTCVODESYSTEM_HPP_
00032
00033 #include <vector>
00034 #include <string>
00035 #include <algorithm>
00036
00037
00038 #include "UblasVectorInclude.hpp"
00039
00040
00041 #include "OdeSolution.hpp"
00042 #include "AbstractParameterisedSystem.hpp"
00043 #include "Exception.hpp"
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 #include <nvector/nvector_serial.h>
00054
00082 class AbstractCvodeSystem : public AbstractParameterisedSystem<N_Vector>
00083 {
00084 private:
00092 void SetupCvode(N_Vector initialConditions,
00093 realtype tStart,
00094 realtype maxDt);
00095
00100 void RecordStoppingPoint(double stopTime);
00101
00103 void FreeCvodeMemory();
00104
00111 void CvodeError(int flag, const char * msg);
00112
00114 N_Vector mLastSolutionState;
00115
00117 double mLastSolutionTime;
00118
00120 bool mAutoReset;
00121
00122 protected:
00123
00125 bool mUseAnalyticJacobian;
00126
00128 double mRelTol;
00129
00131 double mAbsTol;
00132
00134 void* mpCvodeMem;
00135
00140 long int mMaxSteps;
00141
00143 double mLastInternalStepSize;
00144
00149 void Init();
00150
00151 public:
00152
00158 AbstractCvodeSystem(unsigned numberOfStateVariables);
00159
00163 virtual ~AbstractCvodeSystem();
00164
00172 virtual void EvaluateYDerivatives(realtype time,
00173 N_Vector y,
00174 N_Vector ydot)=0;
00175
00183 void SetAutoReset(bool autoReset);
00184
00195 void ResetSolver();
00196
00215 OdeSolution Solve(realtype tStart,
00216 realtype tEnd,
00217 realtype maxDt,
00218 realtype tSamp);
00219
00235 void Solve(realtype tStart,
00236 realtype tEnd,
00237 realtype maxDt);
00238
00245 void SetMaxSteps(long int numSteps);
00246
00251 long int GetMaxSteps();
00252
00260 void SetTolerances(double relTol=1e-5, double absTol=1e-7);
00261
00265 double GetRelativeTolerance();
00266
00270 double GetAbsoluteTolerance();
00271
00275 double GetLastStepSize();
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304 };
00305
00306
00307
00308 #endif //_ABSTRACTCVODESYSTEM_HPP_
00309 #endif // CHASTE_CVODE
00310
00311