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$ 00013 * ----------------------------------------------------------------------------- 00014 * Description: 00015 */ 00016 00017 #ifndef IDIANA_LINEAR_ALGEBRA_SOLVER_HPP 00018 #define IDIANA_LINEAR_ALGEBRA_SOLVER_HPP 00019 00020 #include <Basic/CapeTypes.hpp> 00021 #include <Basic/CapeException.hpp> 00022 00023 namespace Diana { 00024 00025 class IDianaLinearAlgebraSolver { 00026 public: 00027 virtual ~IDianaLinearAlgebraSolver(){}; 00028 00029 virtual void decompose() 00030 throw (Common::Error::ECapeUnknown, Common::Error::ECapeBadArgument, 00031 Common::Error::ECapeOutOfBounds, Common::Error::ECapeSolvingError, 00032 Common::Error::ECapeNoMemory){}; 00033 00034 virtual void solve(const Common::Types::CapeArrayDouble& rhs, 00035 Common::Types::CapeArrayDouble& sol, 00036 Common::Types::CapeBoolean transpose=false) 00037 throw (Common::Error::ECapeUnknown, Common::Error::ECapeBadArgument, 00038 Common::Error::ECapeOutOfBounds, Common::Error::ECapeSolvingError, 00039 Common::Error::ECapeNoMemory) = 0; 00040 00041 virtual void solve(int n, const double* rhs, double* sol, 00042 Common::Types::CapeBoolean transpose=false) 00043 throw (Common::Error::ECapeUnknown, Common::Error::ECapeBadArgument, 00044 Common::Error::ECapeOutOfBounds, Common::Error::ECapeSolvingError, 00045 Common::Error::ECapeNoMemory) = 0; 00046 00047 virtual void mulvec(const Common::Types::CapeArrayDouble& vec, 00048 Common::Types::CapeArrayDouble& res, 00049 Common::Types::CapeBoolean transpose=false) 00050 throw (Common::Error::ECapeUnknown, Common::Error::ECapeBadArgument, 00051 Common::Error::ECapeOutOfBounds, Common::Error::ECapeSolvingError, 00052 Common::Error::ECapeNoMemory) = 0; 00053 00054 virtual void mulvec(int nvec, const double* vec, int nres, double* res, 00055 Common::Types::CapeBoolean transpose=false) 00056 throw (Common::Error::ECapeUnknown, Common::Error::ECapeBadArgument, 00057 Common::Error::ECapeOutOfBounds, Common::Error::ECapeSolvingError, 00058 Common::Error::ECapeNoMemory) = 0; 00059 00060 }; 00061 }; 00062 00063 #endif // IDIANA_LINEAR_ALGEBRA_SOLVER_HPP