57 template<
class Scalar,
class MV,
class OP>
78 std::string test_type =
"???";
81 if(Teuchos::isParameterType<std::string>(p,
"Test Type")) {
82 test_type = Teuchos::get<std::string>(p,
"Test Type");
84 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
"Belos::StatusTestFactory::buildStatusTests: The \"Test Type\" parameter is required! Please add it to the definition of the status test to specify the type of status test.");
87 if (test_type ==
"Combo")
89 else if (test_type ==
"MaxIters")
91 else if (test_type ==
"ResidualNorm")
93 else if (test_type ==
"PartialResidualNorm")
96 std::ostringstream msg;
97 msg <<
"Error - the test type \"" << test_type <<
"\" is invalid!";
102 if ( Teuchos::isParameterType<std::string>(p,
"Tag") ) {
103 (*tagged_tests_)[Teuchos::getParameter<std::string>(p,
"Tag")] = status_test;
115 else TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
"StatusTestFactory:stringToComboType: The \"Combo Type\" must be \"AND\", \"OR\" or \"SEQ\".");
129 std::string combo_type_string = Teuchos::get<std::string>(p,
"Combo Type");
130 int number_of_tests = Teuchos::get<int>(p,
"Number of Tests");
136 for (
int i=0; i<number_of_tests; ++i) {
137 std::ostringstream subtest_name;
138 subtest_name <<
"Test " << i;
149 int max_iters = Teuchos::get<int>(p,
"Maximum Iterations");
157 int quorum = p.
get<
int>(
"Deflation Quorum", -1);
158 bool showMaxResNormOnly = p.
get<
bool>(
"Show Maximum Residual Norm Only",
false);
160 std::string residual_type_string = p.
get<std::string>(
"Residual Type",
"Explicit");
161 std::string residual_norm_string = p.
get<std::string>(
"Residual Norm",
"TwoNorm");
163 std::string scaling_type_string = p.
get<std::string>(
"Scaling Type",
"Norm of Initial Residual");
164 std::string scaling_norm_string = p.
get<std::string>(
"Scaling Norm",
"TwoNorm");
166 typename res_norm_test::ResType residual_type;
167 if (residual_type_string ==
"Explicit") residual_type = res_norm_test::Explicit;
168 else if(residual_type_string ==
"Implicit") residual_type = res_norm_test::Implicit;
169 else TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
"Belos::StatusTestFactory::buildResidualNormTest: The \"Residual Type\" must be \"Explicit\" or \"Implicit\".");
176 status_test->defineResForm(residual_type, residual_norm);
177 status_test->defineScaleForm(scaling_type, scaling_norm);
184 int quorum = p.
get<
int>(
"Deflation Quorum", -1);
185 int subIdx = p.
get<
int>(
"Block index",-1);
186 bool showMaxResNormOnly = p.
get<
bool>(
"Show Maximum Residual Norm Only",
false);
188 TEUCHOS_TEST_FOR_EXCEPTION(subIdx < 0, std::logic_error,
"Belos::StatusTestFactory::buildPartialResidualNormTest: The \"Block Index\" must not be smaller than 0.");
190 std::string residual_norm_string = p.
get<std::string>(
"Residual Norm",
"TwoNorm");
192 std::string scaling_type_string = p.
get<std::string>(
"Scaling Type",
"Norm of Initial Residual");
193 std::string scaling_norm_string = p.
get<std::string>(
"Scaling Norm",
"TwoNorm");
200 status_test->defineResForm(residual_norm);
201 status_test->defineScaleForm(scaling_type, scaling_norm);
206 const char* validNames[] = {
211 const int numValidNames = 3;
212 const NormType correspondingOutputs[] = {
217 for (
int k = 0; k < numValidNames; ++k)
219 if (normType == validNames[k])
220 return correspondingOutputs[k];
223 "Invalid norm type \"" << normType
228 const char* validNames[] = {
229 "Norm of Initial Residual",
230 "Norm of Preconditioned Initial Residual",
232 "Norm of Right-Hand Side",
233 "Norm of Full Initial Residual",
234 "Norm of Full Preconditioned Initial Residual",
235 "Norm of Full Scaled Initial Residual",
236 "Norm of Full Scaled Preconditioned Initial Residual",
239 const int numValidNames = 9;
240 const ScaleType correspondingOutputs[] = {
251 for (
int k = 0; k < numValidNames; ++k)
253 if (scaleType == validNames[k])
254 return correspondingOutputs[k];
257 "Invalid residual scaling type \"" << scaleType
ComboType
The test can be either the AND of all the component tests, or the OR of all the component tests...
Teuchos::RCP< std::map< std::string, Teuchos::RCP< base_test > > > getTaggedTests() const
Teuchos::RCP< base_test > buildResidualNormTest(Teuchos::ParameterList &p) const
StatusTestFactory()
Constructor.
Teuchos::RCP< std::map< std::string, Teuchos::RCP< base_test > > > tagged_tests_
maps test names (defined by the "Tag" parameter) to the corresponding status test ...
StatusTestMaxIters< Scalar, MV, OP > max_iter_test
ScaleType
The type of scaling to use on the residual norm value.
T & get(ParameterList &l, const std::string &name)
StatusTest< Scalar, MV, OP > base_test
An implementation of StatusTestResNorm using a family of norms of subvectors of the residual vectors...
Teuchos::RCP< base_test > buildPartialResidualNormTest(Teuchos::ParameterList &p) const
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Teuchos::ScalarTraits< Scalar >::magnitudeType magnitude_type
Teuchos::RCP< base_test > buildStatusTests(Teuchos::ParameterList &p) const
returns a StatusTest set from a parameter list
An implementation of StatusTestResNorm using a family of residual norms.
static StatusTestCombo< Scalar, MV, OP >::ComboType stringToComboType(const std::string &comboString)
StatusTestCombo< ScalarType, MV, OP > & addStatusTest(const Teuchos::RCP< StatusTest< ScalarType, MV, OP > > &add_test)
Add another test to this combination.
RCP< ParameterList > sublist(const RCP< ParameterList > ¶mList, const std::string &name, bool mustAlreadyExist=false, const std::string &docString="")
Belos::StatusTest class for specifying a maximum number of iterations.
A pure virtual class for defining the status tests for the Belos iterative solvers.
static ScaleType stringToScaleType(const std::string &scaleType)
Belos::StatusTest for logically combining several status tests.
A Belos::StatusTest class for specifying a maximum number of iterations.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Teuchos::RCP< base_test > buildMaxItersTest(Teuchos::ParameterList &p) const
virtual ~StatusTestFactory()
Destructor.
static NormType stringToNormType(const std::string &normType)
NormType
The type of vector norm to compute.
Belos::StatusTestResNorm for specifying general residual norm stopping criteria.
Belos::StatusTest for specifying an implicit residual norm stopping criteria that checks for loss of ...
A class for extending the status testing capabilities of Belos via logical combinations.
StatusTestCombo< Scalar, MV, OP > combo_test
Teuchos::RCP< base_test > buildComboTest(Teuchos::ParameterList &p) const
Factory to build a set of status tests from a parameter list.
Belos::StatusTestResSubNorm for specifying general residual norm of sub-residual vectors stopping cri...