AbstractParameterisedSystem.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
00030
00031
00032
00033
00034
00035
00036 #ifndef ABSTRACTPARAMETERISEDSYSTEM_HPP_
00037 #define ABSTRACTPARAMETERISEDSYSTEM_HPP_
00038
00039 #include <vector>
00040 #include <string>
00041 #include <boost/shared_ptr.hpp>
00042
00043 #include "AbstractUntemplatedParameterisedSystem.hpp"
00044
00045
00054 template<typename VECTOR>
00055 class AbstractParameterisedSystem : public AbstractUntemplatedParameterisedSystem
00056 {
00057 friend class TestAbstractCvodeSystem;
00058
00059 private:
00067 std::string GetStateMessage(const std::string& message, VECTOR Y);
00068
00069 protected:
00071 VECTOR mStateVariables;
00072
00074 VECTOR mParameters;
00075
00084 std::string DumpState(const std::string& rMessage);
00085
00095 std::string DumpState(const std::string& rMessage,
00096 VECTOR Y);
00097
00107 void CheckParametersOnLoad(const std::vector<double>& rParameters,
00108 const std::vector<std::string>& rParameterNames);
00109
00110 public:
00116 AbstractParameterisedSystem(unsigned numberOfStateVariables);
00117
00118
00119
00120
00121
00125 VECTOR& rGetStateVariables();
00126
00131 VECTOR GetStateVariables();
00132
00139 void SetStateVariables(const VECTOR& rStateVariables);
00140
00146 double GetStateVariable(unsigned index) const;
00147
00153 double GetStateVariable(const std::string& rName) const;
00154
00161 void SetStateVariable(unsigned index, double newValue);
00162
00169 void SetStateVariable(const std::string& rName, double newValue);
00170
00183 virtual void VerifyStateVariables()
00184 {}
00185
00186
00187
00188
00189
00199 void SetDefaultInitialConditions(const VECTOR& rInitialConditions);
00200
00211 void SetDefaultInitialCondition(unsigned index, double initialCondition);
00212
00218 VECTOR GetInitialConditions() const;
00219
00223 void ResetToInitialConditions();
00224
00225
00226
00227
00228
00234 double GetParameter(unsigned index) const;
00235
00241 double GetParameter(const std::string& rName) const;
00242
00249 void SetParameter(const std::string& rName, double value);
00250
00257 void SetParameter(unsigned index, double value);
00258
00259
00260
00261
00262
00276 double GetAnyVariable(unsigned index, double time=0.0,
00277 VECTOR* pDerivedQuantities=NULL);
00278
00292 double GetAnyVariable(const std::string& rName, double time=0.0,
00293 VECTOR* pDerivedQuantities=NULL);
00294
00302 void SetAnyVariable(unsigned index, double value);
00303
00311 void SetAnyVariable(const std::string& rName, double value);
00312
00313
00314
00315
00316
00325 virtual VECTOR ComputeDerivedQuantities(double time,
00326 const VECTOR& rState);
00327
00334 VECTOR ComputeDerivedQuantitiesFromCurrentState(double time);
00335 };
00336
00337
00338
00339 #endif