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: 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