27 #ifdef HAVE_BELOS_TRIUTILS
28 #include "Trilinos_Util_iohb.h"
35 using namespace Teuchos;
37 int main(
int argc,
char *argv[]) {
39 typedef std::complex<double> ST;
41 typedef SCT::magnitudeType MT;
47 ST zero = SCT::zero();
50 bool norm_failure =
false;
61 bool proc_verbose =
false;
65 std::string
filename(
"mhd1280b.cua");
69 cmdp.
setOption(
"verbose",
"quiet",&verbose,
"Print messages and results.");
70 cmdp.
setOption(
"frequency",&frequency,
"Solvers frequency for printing residuals (#iters).");
71 cmdp.
setOption(
"filename",&filename,
"Filename for Harwell-Boeing test matrix.");
72 cmdp.
setOption(
"tol",&tol,
"Relative residual tolerance used by GCRODR solver.");
73 cmdp.
setOption(
"num-rhs",&numrhs,
"Number of right-hand sides to be solved for.");
78 proc_verbose = verbose && (MyPID==0);
85 #ifndef HAVE_BELOS_TRIUTILS
86 std::cout <<
"This test requires Triutils. Please configure with --enable-triutils." << std::endl;
88 std::cout <<
"End Result: TEST FAILED" << std::endl;
98 info = readHB_newmat_double(filename.c_str(),&dim,&dim2,&nnz,
99 &colptr,&rowind,&dvals);
100 if (info == 0 || nnz < 0) {
102 std::cout <<
"Error reading '" << filename <<
"'" << std::endl;
103 std::cout <<
"End Result: TEST FAILED" << std::endl;
109 for (
int ii=0; ii<nnz; ii++) {
110 cvals[ii] = ST(dvals[ii*2],dvals[ii*2+1]);
117 int maxits = dim/blocksize;
119 int numRecycledBlocks = 20;
120 int numIters1, numIters2, numIters3;
122 belosList.
set(
"Maximum Iterations", maxits );
123 belosList.
set(
"Convergence Tolerance", tol );
125 belosList.
set(
"Num Blocks", numBlocks );
126 belosList.
set(
"Num Recycled Blocks", numRecycledBlocks );
132 MVT::MvRandom( *soln );
133 OPT::Apply( *A, *soln, *rhs );
134 MVT::MvInit( *soln, zero );
138 bool set = problem->setProblem();
141 std::cout << std::endl <<
"ERROR: Belos::LinearProblem failed to set up correctly!" << std::endl;
150 std::cout << std::endl << std::endl;
151 std::cout <<
"Dimension of matrix: " << dim << std::endl;
152 std::cout <<
"Number of right-hand sides: " << numrhs << std::endl;
153 std::cout <<
"Block size used by solver: " << blocksize << std::endl;
154 std::cout <<
"Max number of GCRODR iterations: " << maxits << std::endl;
155 std::cout <<
"Relative residual tolerance: " << tol << std::endl;
156 std::cout << std::endl;
161 numIters1=solver.getNumIters();
164 std::vector<MT> norm_num(numrhs), norm_denom(numrhs);
165 OPT::Apply( *A, *soln, *temp );
166 MVT::MvAddMv( one, *rhs, -one, *temp, *temp );
167 MVT::MvNorm( *temp, norm_num );
168 MVT::MvNorm( *rhs, norm_denom );
169 for (
int i=0; i<numrhs; ++i) {
171 std::cout <<
"Relative residual "<<i<<
" : " << norm_num[i] / norm_denom[i] << std::endl;
172 if ( norm_num[i] / norm_denom[i] > tol ) {
177 MVT::MvInit( *soln, zero );
179 ret = solver.solve();
180 numIters2=solver.getNumIters();
183 MVT::MvInit( *soln, zero );
185 ret = solver.solve();
186 numIters3=solver.getNumIters();
193 if ( ret!=
Belos::Converged || norm_failure || numIters1 < numIters2 || numIters2 < numIters3 ) {
196 std::cout <<
"End Result: TEST FAILED" << std::endl;
200 std::cout <<
"End Result: TEST PASSED" << std::endl;
205 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)
Traits class which defines basic operations on multivectors.
Simple example of a user's defined Belos::MultiVec class.
Declaration and definition of Belos::GCRODRSolMgr, which implements the GCRODR (recycling GMRES) solv...
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
Implementation of the GCRODR (Recycling GMRES) iterative linear solver.
ReturnType
Whether the Belos solve converged for all linear systems.
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...
Simple example of a user's defined Belos::Operator class.