Teuchos Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
remainder
example
SolverFactory
main.cpp
Go to the documentation of this file.
1
#include "
Common.hpp
"
2
#include <cstdlib>
3
#include <iostream>
4
#include <vector>
5
6
using
std::cout;
7
using
std::endl;
8
9
template
<
class
ScalarType>
10
void
testSolvers
() {
11
typedef
Common::MultiVector<ScalarType>
MV;
12
typedef
Common::Operator<ScalarType>
OP;
13
// To make the example simpler, we assume that ScalarType =
14
// NormType. For this to be correct, this would imply that
15
// ScalarType is real.
16
typedef
ScalarType NormType;
17
18
std::vector<std::pair<std::string, std::string> > solvers;
19
solvers.push_back (std::make_pair (
"A"
,
"1"
));
20
solvers.push_back (std::make_pair (
"A"
,
"2"
));
21
solvers.push_back (std::make_pair (
"B"
,
"3"
));
22
solvers.push_back (std::make_pair (
"B"
,
"4"
));
23
solvers.push_back (std::make_pair (
"C"
,
"5"
));
24
solvers.push_back (std::make_pair (
"C"
,
"6"
));
25
26
for
(
size_t
k = 0; k < solvers.size (); ++k) {
27
const
std::string packageName = solvers[k].first;
28
const
std::string solverName = solvers[k].second;
29
cout <<
"Package \""
<< packageName <<
"\", solver \""
<< solverName
30
<<
"\":"
<< endl;
31
Teuchos::RCP<Trilinos::Details::LinearSolver<MV, OP, NormType>
> solver =
32
Trilinos::Details::getLinearSolver<MV, OP, NormType>
(packageName, solverName);
33
if
(solver.
get
() == NULL) {
34
std::ostringstream err;
35
err <<
"Solver \""
<< solvers[k].second <<
"\" from package \""
36
<< solvers[k].first <<
"\" does not exist!"
;
37
throw
std::logic_error (err.str ());
38
}
39
40
Teuchos::RCP<OP>
A
=
Teuchos::rcp
(
new
OP ());
41
// your code for filling in the matrix A would go here
42
43
solver->setMatrix (
A
);
44
solver->symbolic ();
45
solver->numeric ();
46
47
MV X,
B
;
48
// your code for filling in X and B would go here
49
50
solver->solve (X,
B
);
51
cout <<
"Finished solver->solve(X, B)"
<< endl << endl;
52
53
// This is a proxy for a residual calculation. Some solvers
54
// compute the residual on their own, but you have to ask them.
55
A
->apply (X,
B
);
56
}
57
}
58
59
60
int
main
() {
61
int
err = EXIT_SUCCESS;
62
63
cout <<
"Test ScalarType=float"
<< endl;
64
try
{
65
testSolvers<float>
();
66
}
catch
(std::exception& e) {
67
cout <<
"testSolvers<float>() threw an exception: "
<< e.what () << endl;
68
return
EXIT_FAILURE;
69
}
70
71
cout << endl <<
"Test ScalarType=double"
<< endl;
72
try
{
73
testSolvers<double>
();
74
}
catch
(std::exception& e) {
75
cout <<
"testSolvers<double>() threw an exception: "
<< e.what () << endl;
76
return
EXIT_FAILURE;
77
}
78
79
cout << endl <<
"Test ScalarType=int (should not work)"
<< endl;
80
try
{
81
testSolvers<int>
();
82
cout <<
"testSolvers<int>() should not have worked!"
<< endl;
83
err = EXIT_FAILURE;
84
}
catch
(std::exception&) {
85
cout <<
"Of course testSolvers<int>() threw an exception: "
86
"no packages registered themselves for ScalarType=int. "
87
"This is correct behavior in that case."
<< endl;
88
}
89
90
return
err;
91
}
92
Common.hpp
Common::MultiVector
Definition
Common.hpp:19
Common::Operator
Definition
Common.hpp:25
Teuchos::RCP
Smart reference counting pointer class for automatic garbage collection.
Definition
Teuchos_RCPDecl.hpp:429
Teuchos::RCP::get
T * get() const
Get the raw C++ pointer to the underlying object.
Definition
Teuchos_RCP.hpp:397
testSolvers
void testSolvers()
Definition
main.cpp:10
main
int main()
Definition
main.cpp:60
A
Definition
PackageA.cpp:3
B
Definition
PackageB.cpp:3
Teuchos::rcp
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
Definition
Teuchos_RCPDecl.hpp:1266
Trilinos::Details::getLinearSolver
Teuchos::RCP< LinearSolver< MV, OP, NormType > > getLinearSolver(const std::string &packageName, const std::string &solverName)
Get a LinearSolver instance.
Definition
Trilinos_Details_LinearSolverFactory.hpp:551
Generated by
1.17.0