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_LINEAR_OP_TESTER_DECL_HPP
00030 #define THYRA_LINEAR_OP_TESTER_DECL_HPP
00031
00032 #include "Thyra_OperatorVectorTypes.hpp"
00033 #include "Thyra_MultiVectorRandomizerBase.hpp"
00034 #include "Teuchos_ScalarTraits.hpp"
00035 #include "Teuchos_StandardMemberCompositionMacros.hpp"
00036
00037 namespace Thyra {
00038
00055 template<class RangeScalar, class DomainScalar = RangeScalar>
00056 class LinearOpTester {
00057 public:
00058
00060 typedef typename Teuchos::PromotionTraits<RangeScalar,DomainScalar>::promote Scalar;
00061
00063 typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType ScalarMag;
00064
00072 LinearOpTester(
00073 const bool check_linear_properties = true
00074 ,const ScalarMag linear_properties_warning_tol = 1e-13
00075 ,const ScalarMag linear_properties_error_tol = 1e-10
00076 ,const bool check_adjoint = true
00077 ,const ScalarMag adjoint_warning_tol = 1e-13
00078 ,const ScalarMag adjoint_error_tol = 1e-10
00079 ,const bool check_for_symmetry = false
00080 ,const ScalarMag symmetry_warning_tol = 1e-13
00081 ,const ScalarMag symmetry_error_tol = 1e-10
00082 ,const int num_random_vectors = 1
00083 ,const bool show_all_tests = false
00084 ,const bool dump_all = false
00085 );
00086
00090 STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, check_linear_properties )
00091
00092
00095 STANDARD_MEMBER_COMPOSITION_MEMBERS( ScalarMag, linear_properties_warning_tol )
00096
00101 STANDARD_MEMBER_COMPOSITION_MEMBERS( ScalarMag, linear_properties_error_tol )
00102
00106 STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, check_adjoint )
00107
00111 STANDARD_MEMBER_COMPOSITION_MEMBERS( ScalarMag, adjoint_warning_tol )
00112
00116 STANDARD_MEMBER_COMPOSITION_MEMBERS( ScalarMag, adjoint_error_tol )
00117
00121 STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, check_for_symmetry )
00122
00126 STANDARD_MEMBER_COMPOSITION_MEMBERS( ScalarMag, symmetry_warning_tol )
00127
00131 STANDARD_MEMBER_COMPOSITION_MEMBERS( ScalarMag, symmetry_error_tol )
00132
00135 STANDARD_MEMBER_COMPOSITION_MEMBERS( int, num_random_vectors )
00136
00139 STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, show_all_tests )
00140
00144 STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, dump_all )
00145
00154 void set_all_warning_tol( const ScalarMag warning_tol );
00155
00164 void set_all_error_tol( const ScalarMag error_tol );
00165
00238 bool check(
00239 const LinearOpBase<RangeScalar,DomainScalar> &op
00240 ,MultiVectorRandomizerBase<RangeScalar> *rangeRandomizer
00241 ,MultiVectorRandomizerBase<DomainScalar> *domainRandomizer
00242 ,std::ostream *out
00243 ,const std::string &leadingIndent = ""
00244 ,const std::string &indentSpacer = " "
00245 ) const;
00246
00248 bool check(
00249 const LinearOpBase<RangeScalar,DomainScalar> &op
00250 ,std::ostream *out
00251 ,const std::string &leadingIndent = ""
00252 ,const std::string &indentSpacer = " "
00253 ) const;
00254
00255
00290 bool compare(
00291 const LinearOpBase<RangeScalar,DomainScalar> &op1
00292 ,const LinearOpBase<RangeScalar,DomainScalar> &op2
00293 ,MultiVectorRandomizerBase<DomainScalar> *domainRandomizer
00294 ,std::ostream *out
00295 ,const std::string &leadingIndent = ""
00296 ,const std::string &indentSpacer = " "
00297 ) const;
00298
00300 bool compare(
00301 const LinearOpBase<RangeScalar,DomainScalar> &op1
00302 ,const LinearOpBase<RangeScalar,DomainScalar> &op2
00303 ,std::ostream *out
00304 ,const std::string &leadingIndent = ""
00305 ,const std::string &indentSpacer = " "
00306 ) const;
00307
00308 };
00309
00310 }
00311
00312 #endif