Thyra_LinearOpWithSolveTesterDecl.hpp

00001 // @HEADER
00002 // ***********************************************************************
00003 // 
00004 //    Thyra: Interfaces and Support for Abstract Numerical Algorithms
00005 //                 Copyright (2004) Sandia Corporation
00006 // 
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 // 
00010 // This library is free software; you can redistribute it and/or modify
00011 // it under the terms of the GNU Lesser General Public License as
00012 // published by the Free Software Foundation; either version 2.1 of the
00013 // License, or (at your option) any later version.
00014 //  
00015 // This library is distributed in the hope that it will be useful, but
00016 // WITHOUT ANY WARRANTY; without even the implied warranty of
00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00018 // Lesser General Public License for more details.
00019 //  
00020 // You should have received a copy of the GNU Lesser General Public
00021 // License along with this library; if not, write to the Free Software
00022 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00023 // USA
00024 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 
00025 // 
00026 // ***********************************************************************
00027 // @HEADER
00028 
00029 #ifndef THYRA_LINEAR_OP_WITH_SOLVE_TESTER_DECL_HPP
00030 #define THYRA_LINEAR_OP_WITH_SOLVE_TESTER_DECL_HPP
00031 
00032 #include "Thyra_LinearOpWithSolveBase.hpp"
00033 #include "Teuchos_StandardMemberCompositionMacros.hpp"
00034 
00035 namespace Thyra {
00036 
00073 template<class RangeScalar, class DomainScalar = RangeScalar>
00074 class LinearOpWithSolveTester {
00075 public:
00076 
00078   typedef typename Teuchos::ScalarTraits<RangeScalar>::magnitudeType              RangeScalarMag;
00080   typedef typename Teuchos::ScalarTraits<DomainScalar>::magnitudeType             DomainScalarMag;
00082   typedef typename Teuchos::PromotionTraits<RangeScalar,DomainScalar>::promote    Scalar;
00084   typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType                   ScalarMag;
00085 
00093   LinearOpWithSolveTester(
00094     const bool                 check_forward_default                    = true
00095     ,const RangeScalarMag      forward_default_residual_warning_tol     = 1e-6
00096     ,const RangeScalarMag      forward_default_residual_error_tol       = 1e-5
00097     ,const DomainScalarMag     forward_default_solution_error_warning_tol= 1e-6
00098     ,const DomainScalarMag     forward_default_solution_error_error_tol = 1e-5
00099     ,const bool                check_forward_residual                   = true
00100     ,const RangeScalarMag      forward_residual_solve_tol               = 1e-5
00101     ,const RangeScalarMag      forward_residual_slack_warning_tol       = 1e-6
00102     ,const RangeScalarMag      forward_residual_slack_error_tol         = 1e-5
00103     ,const bool                check_forward_solution_error             = true
00104     ,const RangeScalarMag      forward_solution_error_solve_tol         = 1e-5
00105     ,const RangeScalarMag      forward_solution_error_slack_warning_tol = 1e-6
00106     ,const RangeScalarMag      forward_solution_error_slack_error_tol   = 1e-5
00107     ,const bool                check_adjoint_default                    = true
00108     ,const DomainScalarMag     adjoint_default_residual_warning_tol     = 1e-6
00109     ,const DomainScalarMag     adjoint_default_residual_error_tol       = 1e-5
00110     ,const RangeScalarMag      adjoint_default_solution_error_warning_tol= 1e-6
00111     ,const RangeScalarMag      adjoint_default_solution_error_error_tol = 1e-5
00112     ,const bool                check_adjoint_residual                   = true
00113     ,const DomainScalarMag     adjoint_residual_solve_tol               = 1e-5
00114     ,const DomainScalarMag     adjoint_residual_slack_warning_tol       = 1e-6
00115     ,const DomainScalarMag     adjoint_residual_slack_error_tol         = 1e-5
00116     ,const bool                check_adjoint_solution_error             = true
00117     ,const DomainScalarMag     adjoint_solution_error_solve_tol         = 1e-5
00118     ,const DomainScalarMag     adjoint_solution_error_slack_warning_tol = 1e-6
00119     ,const DomainScalarMag     adjoint_solution_error_slack_error_tol   = 1e-5
00120     ,const int                 num_random_vectors                       = 1
00121     ,const bool                show_all_tests                           = false
00122     ,const bool                dump_all                                 = false
00123     );
00124   
00126   STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, check_forward_default  )
00127 
00128   
00129   STANDARD_MEMBER_COMPOSITION_MEMBERS( RangeScalarMag, forward_default_residual_warning_tol  )
00130 
00132   STANDARD_MEMBER_COMPOSITION_MEMBERS( RangeScalarMag, forward_default_residual_error_tol  )
00133 
00135   STANDARD_MEMBER_COMPOSITION_MEMBERS( DomainScalarMag, forward_default_solution_error_warning_tol  )
00136 
00138   STANDARD_MEMBER_COMPOSITION_MEMBERS( DomainScalarMag, forward_default_solution_error_error_tol  )
00139 
00141   STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, check_forward_residual  )
00142 
00145   STANDARD_MEMBER_COMPOSITION_MEMBERS( RangeScalarMag, forward_residual_solve_tol  )
00146 
00148   STANDARD_MEMBER_COMPOSITION_MEMBERS( RangeScalarMag, forward_residual_slack_warning_tol  )
00149 
00151   STANDARD_MEMBER_COMPOSITION_MEMBERS( RangeScalarMag, forward_residual_slack_error_tol  )
00152 
00154   STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, check_forward_solution_error  )
00155 
00158   STANDARD_MEMBER_COMPOSITION_MEMBERS( RangeScalarMag, forward_solution_error_solve_tol  )
00159 
00161   STANDARD_MEMBER_COMPOSITION_MEMBERS( RangeScalarMag, forward_solution_error_slack_warning_tol  )
00162 
00164   STANDARD_MEMBER_COMPOSITION_MEMBERS( RangeScalarMag, forward_solution_error_slack_error_tol  )
00165 
00167   STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, check_adjoint_default  )
00168 
00170   STANDARD_MEMBER_COMPOSITION_MEMBERS( DomainScalarMag, adjoint_default_residual_warning_tol  )
00171 
00173   STANDARD_MEMBER_COMPOSITION_MEMBERS( DomainScalarMag, adjoint_default_residual_error_tol  )
00174 
00176   STANDARD_MEMBER_COMPOSITION_MEMBERS( RangeScalarMag, adjoint_default_solution_error_warning_tol  )
00177 
00179   STANDARD_MEMBER_COMPOSITION_MEMBERS( RangeScalarMag, adjoint_default_solution_error_error_tol  )
00180 
00183   STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, check_adjoint_residual  )
00184 
00187   STANDARD_MEMBER_COMPOSITION_MEMBERS( DomainScalarMag, adjoint_residual_solve_tol  )
00188 
00190   STANDARD_MEMBER_COMPOSITION_MEMBERS( DomainScalarMag, adjoint_residual_slack_warning_tol  )
00191 
00193   STANDARD_MEMBER_COMPOSITION_MEMBERS( DomainScalarMag, adjoint_residual_slack_error_tol  )
00194 
00196   STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, check_adjoint_solution_error  )
00197 
00200   STANDARD_MEMBER_COMPOSITION_MEMBERS( RangeScalarMag, adjoint_solution_error_solve_tol  )
00201 
00203   STANDARD_MEMBER_COMPOSITION_MEMBERS( RangeScalarMag, adjoint_solution_error_slack_warning_tol  )
00204 
00206   STANDARD_MEMBER_COMPOSITION_MEMBERS( RangeScalarMag, adjoint_solution_error_slack_error_tol  )
00207 
00210   STANDARD_MEMBER_COMPOSITION_MEMBERS( int, num_random_vectors )
00211 
00214   STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, show_all_tests )
00215 
00219   STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, dump_all )
00220 
00227   void turn_off_all_tests();
00228 
00235   void set_all_solve_tol( const ScalarMag solve_tol );
00236 
00243   void set_all_slack_warning_tol( const ScalarMag slack_warning_tol );
00244 
00251   void set_all_slack_error_tol( const ScalarMag slack_error_tol );
00252   
00257   bool check(
00258     const LinearOpWithSolveBase<RangeScalar,DomainScalar>   &op
00259     ,std::ostream                                           *out
00260     ,const std::string                                      &leadingIndent  = ""
00261     ,const std::string                                      &indentSpacer   = "  "
00262     ) const;
00263 
00264 
00265 }; // class LinearOpWithSolveTester
00266 
00267 } // namespace Thyra
00268 
00269 #endif // THYRA_LINEAR_OP_WITH_SOLVE_TESTER_DECL_HPP

Generated on Thu Sep 18 12:39:52 2008 for Thyra ANA Operator/VectorBase Interfaces and Related Software by doxygen 1.3.9.1