Diana  0.8.3
IDianaLinearAlgebraSolver.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$
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