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
00049 template<class Scalar>
00050 bool sillierCgSolve(
00051 const Thyra::LinearOpBase<Scalar> &A_in
00052 ,const Thyra::VectorBase<Scalar> &b_in
00053 ,const int maxNumIters
00054 ,const typename Teuchos::ScalarTraits<Scalar>::magnitudeType tolerance
00055 ,Thyra::VectorBase<Scalar> *x_inout
00056 ,std::ostream *out = NULL
00057 )
00058 {
00059
00060 TEST_FOR_EXCEPT(x_inout==NULL);
00061 THYRA_ASSERT_LINEAR_OP_VEC_APPLY_SPACES("sillyCgSolve()",A_in,Thyra::NOTRANS,*x_inout,&b_in);
00062
00063 const Thyra::ConstLinearOperator<Scalar> A(Teuchos::rcp(&A_in,false));
00064 const Thyra::ConstVector<Scalar> b(Teuchos::rcp(&b_in,false));
00065 Thyra::Vector<Scalar> x(Teuchos::rcp(x_inout,false));
00066
00067 Teuchos::EVerbosityLevel vl = Teuchos::VERB_MEDIUM;
00068 if(out) *out << "\nStarting CG solver ...\n" << std::scientific << "\ndescribe A:\n"<<describe(A,vl)
00069 << "\ndescribe b:\n"<<describe(b,vl)<<"\ndescribe x:\n"<<describe(x,vl)<<"\n";
00070 return silliestCgSolve(A,b,maxNumIters,tolerance,x,out);
00071 }
00072
00073 #endif // THYRA_SILLIER_CG_SOLVE_HPP