28 #ifdef HAVE_BELOS_TRIUTILS
29 #include "Trilinos_Util_iohb.h"
36 using namespace Teuchos;
38 int main(
int argc,
char *argv[]) {
40 typedef std::complex<double> ST;
42 typedef SCT::magnitudeType MT;
48 ST zero = SCT::zero();
51 bool norm_failure =
false;
63 bool proc_verbose =
false;
66 std::string
filename(
"mhd1280b.cua");
70 cmdp.
setOption(
"verbose",
"quiet",&verbose,
"Print messages and results.");
71 cmdp.
setOption(
"frequency",&frequency,
"Solvers frequency for printing residuals (#iters).");
72 cmdp.
setOption(
"filename",&filename,
"Filename for Harwell-Boeing test matrix.");
73 cmdp.
setOption(
"tol",&tol,
"Relative residual tolerance used by TFQMR solver.");
74 cmdp.
setOption(
"num-rhs",&numrhs,
"Number of right-hand sides to be solved for.");
79 proc_verbose = verbose && (MyPID==0);
87 #ifndef HAVE_BELOS_TRIUTILS
88 std::cout <<
"This test requires Triutils. Please configure with --enable-triutils." << std::endl;
90 std::cout <<
"End Result: TEST FAILED" << std::endl;
101 info = readHB_newmat_double(filename.c_str(),&dim,&dim2,&nnz,
102 &colptr,&rowind,&dvals);
103 if (info == 0 || nnz < 0) {
105 std::cout <<
"Error reading '" << filename <<
"'" << std::endl;
106 std::cout <<
"End Result: TEST FAILED" << std::endl;
112 for (
int ii=0; ii<nnz; ii++) {
113 cvals[ii] = ST(dvals[ii*2],dvals[ii*2+1]);
125 belosList.
set(
"Maximum Iterations", maxits );
126 belosList.
set(
"Convergence Tolerance", tol );
131 belosList.
set(
"Output Frequency", frequency );
142 MVT::MvRandom( *soln );
143 OPT::Apply( *A, *soln, *rhs );
144 MVT::MvInit( *soln, zero );
150 bool set = problem->setProblem();
153 std::cout << std::endl <<
"ERROR: Belos::LinearProblem failed to set up correctly!" << std::endl;
167 std::cout << std::endl << std::endl;
168 std::cout <<
"Dimension of matrix: " << dim << std::endl;
169 std::cout <<
"Number of right-hand sides: " << numrhs << std::endl;
170 std::cout <<
"Max number of TFQMR iterations: " << maxits << std::endl;
171 std::cout <<
"Relative residual tolerance: " << tol << std::endl;
172 std::cout << std::endl;
182 OPT::Apply( *A, *soln, *temp );
183 MVT::MvAddMv( one, *rhs, -one, *temp, *temp );
184 std::vector<MT> norm_num(numrhs), norm_denom(numrhs);
185 MVT::MvNorm( *temp, norm_num );
186 MVT::MvNorm( *rhs, norm_denom );
187 for (
int i=0; i<numrhs; ++i) {
189 std::cout <<
"Relative residual "<<i<<
" : " << norm_num[i] / norm_denom[i] << std::endl;
190 if ( norm_num[i] / norm_denom[i] > tol ) {
204 std::cout <<
"End Result: TEST PASSED" << std::endl;
207 std::cout <<
"End Result: TEST FAILED" << std::endl;
212 return ( success ? EXIT_SUCCESS : EXIT_FAILURE );
std::string Belos_Version()
int main(int argc, char *argv[])
ParameterList & set(std::string const &name, T &&value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
ReturnType solve() override
This method performs possibly repeated calls to the underlying linear solver's iterate() routine unti...
Traits class which defines basic operations on multivectors.
Simple example of a user's defined Belos::MultiVec class.
Alternative run-time polymorphic interface for operators.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
void setOption(const char option_true[], const char option_false[], bool *option_val, const char documentation[]=NULL)
#define TEUCHOS_STANDARD_CATCH_STATEMENTS(VERBOSE, ERR_STREAM, SUCCESS_FLAG)
A linear system to solve, and its associated information.
Class which describes the linear problem to be solved by the iterative solver.
EParseCommandLineReturn parse(int argc, char *argv[], std::ostream *errout=&std::cerr) const
ReturnType
Whether the Belos solve converged for all linear systems.
The Belos::TFQMRSolMgr provides a powerful and fully-featured solver manager over the TFQMR linear so...
Interface for multivectors used by Belos' linear solvers.
Class which defines basic traits for the operator type.
Belos header file which uses auto-configuration information to include necessary C++ headers...
The Belos::TFQMRSolMgr provides a solver manager for the TFQMR linear solver.
Simple example of a user's defined Belos::Operator class.