00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ITL_ITL_FWD_INCLUDE
00013 #define ITL_ITL_FWD_INCLUDE
00014
00015 namespace itl {
00016
00017 template <class Real> class basic_iteration;
00018 template <class Real, class OStream> class cyclic_iteration;
00019 template <class Real, class OStream> class noisy_iteration;
00020
00021 template <typename Solver, typename VectorIn, bool trans> class solver_proxy;
00022
00023 namespace pc {
00024
00025 template <typename Matrix> class identity;
00026 template <typename Matrix, typename Vector> Vector solve(const identity<Matrix>&, const Vector& x);
00027 template <typename Matrix, typename Vector> Vector adjoint_solve(const identity<Matrix>&, const Vector& x);
00028
00029 template <typename Matrix> class diagonal;
00030 template <typename Matrix, typename Vector> Vector solve(const diagonal<Matrix>& P, const Vector& x);
00031 template <typename Matrix, typename Vector> Vector adjoint_solve(const diagonal<Matrix>& P, const Vector& x);
00032
00033 template <typename Matrix> class ilu_0;
00034 template <typename Matrix, typename Vector> Vector solve(const ilu_0<Matrix>& P, const Vector& x);
00035 template <typename Matrix, typename Vector> Vector adjoint_solve(const ilu_0<Matrix>& P, const Vector& x);
00036
00037 template <typename Matrix> class ic_0;
00038 template <typename Matrix, typename Vector> Vector solve(const ic_0<Matrix>& P, const Vector& x);
00039 template <typename Matrix, typename Vector> Vector adjoint_solve(const ic_0<Matrix>& P, const Vector& x);
00040
00041 }
00042
00043 template < typename LinearOperator, typename HilbertSpaceX, typename HilbertSpaceB,
00044 typename Preconditioner, typename Iteration >
00045 int cg(const LinearOperator& A, HilbertSpaceX& x, const HilbertSpaceB& b,
00046 const Preconditioner& M, Iteration& iter);
00047
00048 template < typename LinearOperator, typename Vector,
00049 typename Preconditioner, typename Iteration >
00050 int bicg(const LinearOperator &A, Vector &x, const Vector &b,
00051 const Preconditioner &M, Iteration& iter);
00052
00053 template < class LinearOperator, class HilbertSpaceX, class HilbertSpaceB,
00054 class Preconditioner, class Iteration >
00055 int bicgstab(const LinearOperator& A, HilbertSpaceX& x, const HilbertSpaceB& b,
00056 const Preconditioner& M, Iteration& iter);
00057
00058 template < class LinearOperator, class HilbertSpaceX, class HilbertSpaceB,
00059 class Preconditioner, class Iteration >
00060 int bicgstab_2(const LinearOperator& A, HilbertSpaceX& x, const HilbertSpaceB& b,
00061 const Preconditioner& M, Iteration& iter);
00062
00063 template < typename LinearOperator, typename Vector,
00064 typename LeftPreconditioner, typename RightPreconditioner,
00065 typename Iteration >
00066 int bicgstab_ell(const LinearOperator &A, Vector &x, const Vector &b,
00067 const LeftPreconditioner &L, const RightPreconditioner &R,
00068 Iteration& iter, size_t l);
00069
00070 }
00071
00072 #endif // ITL_ITL_FWD_INCLUDE