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_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 };
00266
00267 }
00268
00269 #endif