Diana
0.8.3
|
00001 /* ----------------------------------------------------------------------------- 00002 * Diana process modelling, simulation and analysis software 00003 * Copyright (c) 2005, Michael Krasnyk 00004 * All rights reserved. 00005 * 00006 * This file is a part of Diana process modelling, simulation and analysis software 00007 * 00008 * Diana is free software; you can redistribute it and/or modify it 00009 * under the terms of the GNU General Public License as published 00010 * by the Free Software Foundation (see accompanying file LICENSE) 00011 * ----------------------------------------------------------------------------- 00012 * $Id: DianaModel.hpp 9717 2013-09-03 13:16:29Z soldatov $ 00013 * ----------------------------------------------------------------------------- 00014 * Description: 00015 */ 00016 00017 #ifndef DIANA_MODEL_H 00018 #define DIANA_MODEL_H 00019 00020 #include <CapeOpen.hpp> 00021 #include <Diana/IDianaModel.hpp> 00022 00023 extern "C" { 00025 typedef Numeric::Solvers::Model::ICapeNumericModel* (*fCreateModel)(Numeric::Solvers::Model::CapeModelType typeOfTheModel); 00026 } 00027 00028 namespace Diana{ 00029 00030 using Common::Types::CapeArrayString; 00031 using Common::Types::CapeArrayLong; 00032 using Common::Error::ECapeUnknown; 00033 using Common::Error::ECapeBadInvOrder; 00034 using Common::Error::ECapeNoImpl; 00036 class DianaModelManager : public Numeric::Solvers::Model::ICapeNumericModelManager { 00037 public: 00042 Numeric::Solvers::Model::ICapeNumericModel* CreateModel(Numeric::Solvers::Model::CapeModelType typeOfTheModel, 00043 Common::Types::CapeString strLibraryName=Common::Types::CapeStringUNDEFINED) 00044 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, 00045 Common::Error::ECapeOutOfBounds, Common::Error::ECapeOutOfResources, 00046 Common::Error::ECapeFailedInitialisation); 00047 }; 00048 00050 class DianaContinuousModel : public IDianaContinuousModel { 00051 public: 00054 DianaContinuousModel(Numeric::Solvers::Eso::ICapeNumericESO* pESO=NULL); 00055 00058 virtual ~DianaContinuousModel(); 00059 00061 const Common::Types::CapeString& GetComponentName() const 00062 throw (Common::Error::ECapeUnknown); 00063 00066 void SetComponentName(const Common::Types::CapeString& _name) 00067 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument); 00068 00070 const Common::Types::CapeString& GetComponentDescription() const 00071 throw (Common::Error::ECapeUnknown); 00072 00075 void SetComponentDescription(const Common::Types::CapeString& _description) 00076 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument); 00077 00087 Common::Collection::ICapeCollection* GetParameters() 00088 throw (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, 00089 Common::Error::ECapeNoImpl); 00090 00104 void SetSimulationContext(Common::Identification::ICapeIdentification* simContextManager) 00105 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, 00106 Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl); 00107 00120 void Initialize() 00121 throw (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, 00122 Common::Error::ECapeOutOfResources, Common::Error::ECapeLicenceError, 00123 Common::Error::ECapeBadInvOrder); 00124 00133 void Terminate() 00134 throw (Common::Error::ECapeUnknown, Common::Error::ECapeOutOfResources, 00135 Common::Error::ECapeBadInvOrder); 00136 00144 Common::Types::CapeLong SetVariablesIndex(Common::Types::CapeArrayLong varIndices) 00145 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, 00146 Common::Error::ECapeOutOfBounds, Common::Error::ECapeNoImpl); 00147 00152 void SetActiveESO(Numeric::Solvers::Eso::ICapeNumericESO* theActiveESO) 00153 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, 00154 Common::Error::ECapeSolvingError, Common::Error::ECapeBadInvOrder); 00155 00157 Numeric::Solvers::Eso::ICapeNumericESO* GetActiveESO() 00158 throw (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder); 00159 00162 void SetCommonESO(Numeric::Solvers::Eso::ICapeNumericESO* anESO) 00163 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, 00164 Common::Error::ECapeNoImpl); 00165 00167 Numeric::Solvers::Eso::ICapeNumericESO* GetCommonESO() 00168 throw (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder, 00169 Common::Error::ECapeNoImpl); 00170 00172 Diana::IDianaSensDAESO* GetSensESO() 00173 throw (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder, Common::Error::ECapeNoImpl); 00174 00179 IDianaContinuousModel* GetSensitivityModelByIndex(const Common::Types::CapeArrayLong& _sensParIndices, 00180 const Common::Types::CapeArrayLong& _sensInitStateIndices) 00181 throw (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder, 00182 Common::Error::ECapeNoImpl); 00183 00188 IDianaContinuousModel* GetSensitivityModel(const Common::Types::CapeArrayString& _sensParNames, 00189 const Common::Types::CapeArrayString& _sensInitStateNames) 00190 throw (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder, 00191 Common::Error::ECapeNoImpl); 00192 00196 Numeric::Solvers::Model::ICapeNumericExternalEventInfo* AddExternalEvent(Numeric::Solvers::Model::ICapeNumericEvent* anEvent) 00197 throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, 00198 Common::Error::ECapeBadInvOrder, Common::Error::ECapeNoImpl); 00199 00200 protected: 00201 Common::Types::CapeString name; 00202 Common::Types::CapeString description; 00203 00205 Numeric::Solvers::Eso::ICapeNumericESO* pActiveESO; 00206 }; 00207 }; 00208 00209 #endif // DIANA_MODEL_H