00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef THYRA_SILLIER_CG_SOLVE_HPP
00030 #define THYRA_SILLIER_CG_SOLVE_HPP
00031
00032 #include "Thyra_LinearOperatorImpl.hpp"
00033 #include "Thyra_VectorSpaceImpl.hpp"
00034 #include "Thyra_VectorImpl.hpp"
00035 #include "Thyra_AssertOp.hpp"
00036 #include "silliestCgSolve.hpp"
00037
00038
00050 template<class Scalar>
00051 bool sillierCgSolve(
00052 const Thyra::LinearOpBase<Scalar> &A_in,
00053 const Thyra::VectorBase<Scalar> &b_in,
00054 const int maxNumIters,
00055 const typename Teuchos::ScalarTraits<Scalar>::magnitudeType tolerance,
00056 const Teuchos::Ptr<Thyra::VectorBase<Scalar> > &x_inout,
00057 std::ostream &out
00058 )
00059 {
00060
00061
00062 THYRA_ASSERT_LINEAR_OP_VEC_APPLY_SPACES("sillyCgSolve()", A_in,
00063 Thyra::NOTRANS, *x_inout, &b_in);
00064
00065
00066 const Thyra::ConstLinearOperator<Scalar> A(Teuchos::rcpFromRef(A_in));
00067 const Thyra::ConstVector<Scalar> b(Teuchos::rcpFromRef(b_in));
00068 Thyra::Vector<Scalar> x(Teuchos::rcpFromPtr(x_inout));
00069
00070
00071 Teuchos::EVerbosityLevel vl = Teuchos::VERB_MEDIUM;
00072 out << "\nStarting CG solver ...\n" << std::scientific << "\ndescribe A:\n"<<describe(A,vl)
00073 << "\ndescribe b:\n"<<describe(b,vl)<<"\ndescribe x:\n"<<describe(x,vl)<<"\n";
00074
00075 return silliestCgSolve(A, b, maxNumIters, tolerance, x, out);
00076
00077 }
00078
00079
00080 #endif // THYRA_SILLIER_CG_SOLVE_HPP