Diana
0.8.3
|
00001 #ifndef DIANA_SENS_DAESO_H 00002 #define DIANA_SENS_DAESO_H 00003 00004 #include <Basic/DianaBasic.hpp> 00005 #include <Basic/CapeTypes.hpp> 00006 #include <Diana/IDianaSensDAESO.hpp> 00007 #include <Diana/DianaDAESO.hpp> 00008 #include <Diana/DianaUtil.hpp> 00009 00010 namespace Diana{ 00011 using Common::Types::CapeLong; 00012 using Common::Types::CapeDouble; 00013 using Common::Types::CapeBoolean; 00014 using Common::Types::CapeString; 00015 using Common::Types::CapeArrayDouble; 00016 using Common::Types::CapeArrayLong; 00017 using Common::Error::ECapeUnknown; 00018 using Common::Error::ECapeFailedInitialisation; 00019 using Common::Error::ECapeBadInvOrder; 00020 00025 class DianaSensDAESO : virtual public IDianaSensDAESO, virtual public DianaDAESO { 00026 protected: 00027 DianaDAESO * model; 00028 DianaSparseArray::crc_type modelParJacobianCRC; 00029 public: 00030 00031 00036 DianaSensDAESO(DianaDAESO * _model, 00037 const CapeArrayLong& parIndices, 00038 const CapeArrayLong& stateIndices); 00039 DianaSensDAESO(const DianaSensDAESO& org); 00040 00042 virtual ~DianaSensDAESO(); 00043 00049 DianaDAESO& GetModel(); 00050 00054 virtual CapeLong GetNumSensParameters() 00055 throw (ECapeUnknown, ECapeFailedInitialisation); 00056 00060 virtual CapeLong GetNumSensInitStates() 00061 throw (ECapeUnknown, ECapeFailedInitialisation); 00062 00066 virtual const CapeArrayLong& GetSensParametersIndices() const 00067 throw (ECapeUnknown, ECapeFailedInitialisation); 00068 00072 virtual const CapeArrayLong& GetSensInitStatesIndices() const 00073 throw (ECapeUnknown, ECapeFailedInitialisation); 00074 00078 virtual const CapeArrayDouble& GetSensParameters() const 00079 throw (ECapeUnknown, ECapeFailedInitialisation); 00080 00084 virtual void SetSensParameters(const Common::Types::CapeArrayDouble& pars) 00085 throw (ECapeUnknown, ECapeFailedInitialisation); 00086 00090 virtual const DianaSparseArray& GetSensParJacobianValues() 00091 throw (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl); 00092 00096 virtual const CapeArrayDouble& GetSensInitStates() 00097 throw (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation); 00098 00102 virtual void SetSensInitStates(const Common::Types::CapeArrayDouble& states) 00103 throw (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation); 00104 00108 virtual Common::Types::CapeArrayDouble GetAllModelVariables(); 00109 00114 virtual void SetAllModelVariables(const Common::Types::CapeArrayDouble& vars); 00115 00119 virtual Common::Types::CapeArrayDouble GetAllModelDerivatives(); 00120 00121 00126 virtual void SetAllModelDerivatives(const Common::Types::CapeArrayDouble& vars); 00127 00131 virtual const CapeArrayDouble& GetAllModelResiduals() 00132 throw (ECapeUnknown, ECapeBadInvOrder, ECapeFailedInitialisation) ; 00133 00134 virtual const DianaSparseArray& GetAllModelJacobianValues() const 00135 throw (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl); 00136 00137 virtual const Diana::DianaSparseArray& GetAllModelDiffJacobianValues() const 00138 throw (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl); 00139 00146 virtual Common::Types::CapeArrayDouble GetAllSensitivities(); 00147 00148 00153 virtual void SetAllSensitivities(const Common::Types::CapeArrayDouble& vars); 00154 00155 00156 00169 virtual void Initialize() 00170 throw (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, 00171 Common::Error::ECapeOutOfResources, Common::Error::ECapeLicenceError, 00172 Common::Error::ECapeBadInvOrder); 00173 00182 virtual void Terminate() 00183 throw (Common::Error::ECapeUnknown, Common::Error::ECapeOutOfResources, 00184 Common::Error::ECapeBadInvOrder); 00185 00190 virtual void SetFixedVariables(const Common::Types::CapeArrayLong& varIndices, 00191 const Common::Types::CapeArrayDouble& varValues) 00192 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, 00193 Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds, 00194 Common::Error::ECapeNoImpl); 00195 00198 virtual void SetAllVariables(const Common::Types::CapeArrayDouble& varValues) 00199 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, 00200 Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds); 00201 00205 virtual void SetVariables(const Common::Types::CapeArrayLong& varIndices, 00206 const Common::Types::CapeArrayDouble& varValues) 00207 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, 00208 Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds); 00209 00211 virtual const Common::Types::CapeArrayDouble& GetAllVariables() 00212 throw (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder); 00213 00216 virtual Common::Types::CapeArrayDouble GetVariables(const Common::Types::CapeArrayLong& varIndices) 00217 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, 00218 Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds); 00219 00221 virtual const Common::Types::CapeArrayDouble& GetAllResiduals() 00222 throw (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder, 00223 Common::Error::ECapeFailedInitialisation); 00224 00231 virtual const Diana::DianaSparseArray& GetJacobianStruct() 00232 throw (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl); 00233 00240 virtual const Diana::DianaSparseArray& GetAllJacobianValues() 00241 throw (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl); 00242 00244 virtual void SetVariablesIndex(const Common::Types::CapeArrayLong& varIndexes) 00245 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, 00246 Common::Error::ECapeOutOfBounds, Common::Error::ECapeNoImpl); 00247 00249 virtual const Common::Types::CapeArrayDouble& GetLowerBounds() 00250 throw (Common::Error::ECapeUnknown); 00251 00253 virtual const Common::Types::CapeArrayDouble& GetUpperBounds() 00254 throw (Common::Error::ECapeUnknown); 00255 00261 virtual void SetAllDerivatives(const Common::Types::CapeArrayDouble& varValues) 00262 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, 00263 Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds); 00264 00270 virtual const Common::Types::CapeArrayDouble& GetAllDerivatives() 00271 throw (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder); 00272 00276 virtual Common::Types::CapeArrayDouble GetDerivatives(const Common::Types::CapeArrayLong& varIndices) 00277 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, 00278 Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds); 00279 00284 virtual void SetDerivatives(const Common::Types::CapeArrayLong& varIndices, 00285 const Common::Types::CapeArrayDouble& varValues) 00286 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, 00287 Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds); 00288 00297 virtual const Diana::DianaSparseArray& GetDiffJacobianStruct() 00298 throw (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl); 00299 00307 virtual const Diana::DianaSparseArray& GetAllDiffJacobianValues() 00308 throw (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl); 00309 00310 00313 virtual void SetIndependentVar(Common::Types::CapeDouble indVar) 00314 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument); 00315 00317 virtual Common::Types::CapeDouble GetIndependentVar() 00318 throw (Common::Error::ECapeUnknown); 00319 00320 virtual void setChangedFlags(DianaVariableType bChanged); 00321 00322 protected: 00323 CapeArrayLong modelJacIndices; 00324 const CapeArrayLong sensParameterIndices; 00325 CapeArrayLong sensParameterMap; 00326 DianaSparseArray mtrValuesSensParJacobi; 00327 CapeBoolean bValuesSensParJacobiChanged; 00328 const CapeArrayLong sensInitStateIndices; 00329 CapeLong nSensInitStates; 00330 CapeLong nSensParameters; 00331 00335 CapeLong nSensitivities; 00336 CapeLong nModelStates; 00337 CapeLong nModelEqns; 00338 CapeArrayDouble arrSensInitStates; 00339 CapeArrayDouble arrSensParameters; 00340 CapeDouble * pSensitivities; 00341 00347 virtual void calculateResiduals() ; 00348 00349 virtual void calculateModelResiduals(); 00350 virtual void calculateSensResiduals(); 00351 00352 virtual void initializeJacobis(); 00353 virtual void initializeCollections(); 00354 00355 virtual DianaDAESO* createClone(); 00356 /* 00357 CapeBoolean calculateFDJacobiMatrixPartition(enumJacobianType type); 00358 CapeBoolean calculateFDJacobiMatrixSimple(enumJacobianType type); 00359 */ 00360 void setupModelJacIndices(); 00361 00362 }; 00363 00364 }; 00365 00366 #endif // DIANA_SENS_DAESO_H