Diana  0.8.3
IDianaDAESO.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: IDianaDAESO.hpp 8160 2009-03-16 18:36:30Z miha $
00013  * -----------------------------------------------------------------------------
00014  *  Description:
00015  */
00016 
00017 #ifndef IDIANA_ESO_HPP
00018 #define IDIANA_ESO_HPP
00019 
00020 #include <CapeOpen.hpp>
00021 #include <Diana/IDianaPetriNet.hpp>
00022 
00023 namespace Diana {
00024 
00027   class IDianaDAESO : virtual public Numeric::Solvers::Eso::ICapeNumericDAESO {
00028 #ifndef SWIG
00029 
00030     friend std::ostream& operator<<(std::ostream& out_file, const IDianaDAESO& eso);
00031 #endif
00032   public:
00034     virtual ~IDianaDAESO(){};
00035 
00036 #if defined(__GNUC__) && (__GNUC__>=4)
00037  #define DIANA_DAESO_CLONERET Diana::IDianaDAESO
00038 #else
00039  #define DIANA_DAESO_CLONERET Common::Identification::ICapeIdentification
00040 #endif
00041 
00043     virtual DIANA_DAESO_CLONERET* clone() throw (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl) = 0;
00044 
00045     virtual void SaveState(const Common::Types::CapeString& filename)
00046       throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument) = 0;
00047     
00048     virtual void LoadState(const Common::Types::CapeString& filename)
00049       throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument) = 0;
00050 
00051     virtual void LoadStateDiva(const Common::Types::CapeString& states,
00052                                const Common::Types::CapeString& params,
00053                                const Common::Types::CapeString& mapfile=Common::Types::CapeString())
00054       throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument) = 0;
00055 
00059     virtual Common::Collection::ICapeCollection* GetStateVariables()
00060             throw (Common::Error::ECapeUnknown) = 0;
00061 
00065     virtual Common::Collection::ICapeCollection* GetRealParameters()
00066             throw (Common::Error::ECapeUnknown) = 0;
00067 
00070     virtual void SetAllRealParameters(const Common::Types::CapeArrayDouble& varValues)
00071       throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument,
00072              Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds) = 0;
00073     
00077     virtual void SetRealParameters(const Common::Types::CapeArrayLong& varIndices,
00078                                    const Common::Types::CapeArrayDouble& varValues)
00079       throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument,
00080              Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds) = 0;
00081 
00083     virtual const Common::Types::CapeArrayDouble& GetAllRealParameters()
00084       throw (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder) = 0;
00085 
00088     virtual Common::Types::CapeArrayDouble GetRealParameters(const Common::Types::CapeArrayLong& varIndices)
00089       throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument,
00090              Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds) = 0;
00091 
00092     virtual const Diana::DianaSparseArray& GetHighOrderJacobian(Common::Types::CapeLong nXOrder,
00093                                                                 Common::Types::CapeLong nDOrder,
00094                                                                 Common::Types::CapeLong nPOrder)
00095       throw (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl) = 0;
00096 
00097     virtual CapeArrayDouble GetAbsoluteError() const
00098       throw(Common::Error::ECapeUnknown) = 0;
00099 
00100 
00102       virtual const Common::Types::CapeArrayDouble& GetAllPhiValues() 
00103           throw (Common::Error::ECapeUnknown)=0;
00104 
00105 
00107       virtual Common::Types::CapeDouble GetPhiValue(CapeLong index) 
00108           throw (Common::Error::ECapeUnknown)=0;
00109 
00110 
00112       virtual Diana::IDianaPetriNet* GetPetriNet() 
00113           throw (Common::Error::ECapeUnknown) = 0;
00114 
00115 
00116 #ifndef SWIG
00117 
00120     virtual void BeforeStep(Diana::IDianaNumericDAESolver *solver) throw (Common::Error::ECapeUnknown) = 0;
00121     
00124     virtual void AfterStep(Diana::IDianaNumericDAESolver *solver) throw (Common::Error::ECapeUnknown) = 0;
00125 #endif    
00126 
00127     virtual const DianaSparseArray& GetAllParJacobianValues(const Common::Types::CapeArrayLong& parIndices)
00128       throw (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl) = 0;
00129 #ifndef SWIG
00130     virtual const DianaSparseArray& GetAllParJacobianValues(const Common::Types::CapeArrayLong* const parIndices=NULL)
00131       throw (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl) = 0;
00132 #endif    
00133         };
00134 };
00135 
00136 #endif // IDIANA_ESO_HPP
00137