Diana  0.8.3
IDianaContinuation.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: IDianaContinuation.hpp 8160 2009-03-16 18:36:30Z miha $
00013  * -----------------------------------------------------------------------------
00014  *  Description:
00015  */
00016 
00017 #ifndef DIANA_CONTINUATION_H
00018 #define DIANA_CONTINUATION_H
00019 
00020 #include <CapeOpen.hpp>
00021 #include <complex>
00022 
00023 namespace Diana {
00024 
00025   enum ConditionSteadyState{
00026     SteadyStateNone = 0,
00027 
00028     // eigenvalue conditions
00029     SteadyStateZRE  = 0x0001,   
00030     SteadyStateZCE  = 0x0002,   
00031   };
00032   
00033   enum ConditionSingularity{
00034     SingularityNone = 0,
00035 
00036     // singularity conditions (i think it's enough :))
00037     SingularityGx   = 0x0001,
00038     SingularityGxx  = 0x0002,
00039     SingularityGxxx = 0x0004,
00040     SingularityGp   = 0x0008,
00041     SingularityGxp  = 0x0010,
00042 
00043     SingularityLast = 0x0020,
00044   };
00045 
00046  
00050   enum ContiReturn{
00051 
00052     ContiOk,
00053     ContiOkTestFunction,
00054     ContiOkAchievedBoundary,
00055     ContiOkMaxStepsMade,
00056     ContiOkIsolaDetected,
00057 
00058     ContiError,
00059     ContiErrorInitialPointNaN,
00060     ContiErrorInitialPointNotInRange,
00061     ContiErrorInitialPointSingular,
00062     ContiErrorStepSizeToSmall,
00063     ContiErrorNextPointNaN,
00064   };
00065 
00069   class IDianaContinuation : virtual public IDianaNumericSolver {
00070   public:
00075     virtual ContiReturn Continuate()
00076       throw (Common::Error::ECapeUnknown, Common::Error::ECapeSolvingError) = 0;
00077 
00086     virtual void AddFreeParameter(const Common::Types::CapeString& strParName,
00087                                   Common::Types::CapeDouble minValue=0.0,
00088                                   Common::Types::CapeDouble maxValue=0.0)
00089       throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument) = 0;
00090 
00095     virtual void RemoveFreeParameter(const Common::Types::CapeString& strParName)
00096       throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument) = 0;
00097 
00101     virtual Common::Types::CapeString GetVariableName(Common::Types::CapeLong index)
00102       throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument) = 0;
00103 
00108     virtual std::vector<std::complex<Common::Types::CapeDouble> > GetEigenvalues()
00109       throw (Common::Error::ECapeUnknown) = 0;
00110 
00111 #ifdef DEBUG    
00112 
00116     virtual double TestJacobian() = 0;
00117 #endif  
00118 
00119   };
00120 };
00121 
00122 #endif // DIANA_CONTINUATION_H