Diana  0.8.3
DianaModel.hpp
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