Chaste Release::3.1
|
00001 /* 00002 00003 Copyright (c) 2005-2012, University of Oxford. 00004 All rights reserved. 00005 00006 University of Oxford means the Chancellor, Masters and Scholars of the 00007 University of Oxford, having an administrative office at Wellington 00008 Square, Oxford OX1 2JD, UK. 00009 00010 This file is part of Chaste. 00011 00012 Redistribution and use in source and binary forms, with or without 00013 modification, are permitted provided that the following conditions are met: 00014 * Redistributions of source code must retain the above copyright notice, 00015 this list of conditions and the following disclaimer. 00016 * Redistributions in binary form must reproduce the above copyright notice, 00017 this list of conditions and the following disclaimer in the documentation 00018 and/or other materials provided with the distribution. 00019 * Neither the name of the University of Oxford nor the names of its 00020 contributors may be used to endorse or promote products derived from this 00021 software without specific prior written permission. 00022 00023 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00024 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00025 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00026 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 00027 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00028 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 00029 GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00030 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00031 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 00032 OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 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 00083 std::string DumpState(const std::string& rMessage); 00084 00093 std::string DumpState(const std::string& rMessage, 00094 VECTOR Y); 00095 00105 void CheckParametersOnLoad(const std::vector<double>& rParameters, 00106 const std::vector<std::string>& rParameterNames); 00107 00108 public: 00114 AbstractParameterisedSystem(unsigned numberOfStateVariables); 00115 00116 // 00117 // State variable methods 00118 // 00119 00123 VECTOR& rGetStateVariables(); 00124 00129 VECTOR GetStateVariables(); 00130 00137 void SetStateVariables(const VECTOR& rStateVariables); 00138 00144 double GetStateVariable(unsigned index) const; 00145 00151 double GetStateVariable(const std::string& rName) const; 00152 00159 void SetStateVariable(unsigned index, double newValue); 00160 00167 void SetStateVariable(const std::string& rName, double newValue); 00168 00181 virtual void VerifyStateVariables() 00182 {} 00183 00184 // 00185 // Initial condition methods 00186 // 00187 00197 void SetDefaultInitialConditions(const VECTOR& rInitialConditions); 00198 00209 void SetDefaultInitialCondition(unsigned index, double initialCondition); 00210 00216 VECTOR GetInitialConditions() const; 00217 00221 void ResetToInitialConditions(); 00222 00223 // 00224 // Parameter methods 00225 // 00226 00232 double GetParameter(unsigned index) const; 00233 00239 double GetParameter(const std::string& rName) const; 00240 00247 void SetParameter(const std::string& rName, double value); 00248 00255 void SetParameter(unsigned index, double value); 00256 00257 // 00258 // "Any variable" methods 00259 // 00260 00274 double GetAnyVariable(unsigned index, double time=0.0, 00275 VECTOR* pDerivedQuantities=NULL); 00276 00290 double GetAnyVariable(const std::string& rName, double time=0.0, 00291 VECTOR* pDerivedQuantities=NULL); 00292 00300 void SetAnyVariable(unsigned index, double value); 00301 00309 void SetAnyVariable(const std::string& rName, double value); 00310 00311 // 00312 // Derived quantity methods 00313 // 00314 00322 virtual VECTOR ComputeDerivedQuantities(double time, 00323 const VECTOR& rState); 00324 00330 VECTOR ComputeDerivedQuantitiesFromCurrentState(double time); 00331 }; 00332 00333 00334 00335 #endif /*ABSTRACTPARAMETERISEDSYSTEM_HPP_*/