29 #ifdef HAVE_BELOS_TRIUTILS
30 #include "Trilinos_Util_iohb.h"
37 using namespace Teuchos;
39 int main(
int argc,
char *argv[]) {
44 typedef SCT::magnitudeType MT;
50 ST zero = SCT::zero();
63 bool norm_failure =
false;
64 bool proc_verbose =
false;
65 bool use_single_red =
false;
66 bool combineConvInner =
false;
74 cmdp.
setOption(
"verbose",
"quiet",&verbose,
"Print messages and results.");
75 cmdp.
setOption(
"pseudo",
"regular",&pseudo,
"Use pseudo-block CG to solve the linear systems.");
76 cmdp.
setOption(
"frequency",&frequency,
"Solvers frequency for printing residuals (#iters).");
77 cmdp.
setOption(
"filename",&filename,
"Filename for Harwell-Boeing test matrix.");
78 cmdp.
setOption(
"tol",&tol,
"Relative residual tolerance used by CG solver.");
79 cmdp.
setOption(
"num-rhs",&numrhs,
"Number of right-hand sides to be solved for.");
80 cmdp.
setOption(
"blocksize",&blocksize,
"Block size used by CG .");
81 cmdp.
setOption(
"use-single-red",
"use-standard-red",&use_single_red,
"Use single-reduction variant of CG iteration.");
82 cmdp.
setOption(
"combine-conv-inner",
"separate-conv-inner",&combineConvInner,
"Combine convergence detection and inner products of single-reduce CG iteration.");
87 proc_verbose = verbose && (MyPID==0);
95 #ifndef HAVE_BELOS_TRIUTILS
96 std::cout <<
"This test requires Triutils. Please configure with --enable-triutils." << std::endl;
98 std::cout <<
"End Result: TEST FAILED" << std::endl;
108 info = readHB_newmat_double(filename.c_str(),&dim,&dim2,&nnz,
109 &colptr,&rowind,&cvals);
110 if (info == 0 || nnz < 0) {
112 std::cout <<
"Error reading '" << filename <<
"'" << std::endl;
113 std::cout <<
"End Result: TEST FAILED" << std::endl;
127 int maxits = dim/blocksize;
130 belosList.
set(
"Block Size", blocksize );
131 belosList.
set(
"Maximum Iterations", maxits );
132 belosList.
set(
"Convergence Tolerance", tol );
133 if (blocksize == 1) {
135 belosList.
set(
"Use Single Reduction", use_single_red );
136 if (combineConvInner)
137 belosList.
set(
"Fold Convergence Detection Into Allreduce", combineConvInner );
143 belosList.
set(
"Output Frequency", frequency );
154 MVT::MvRandom( *soln );
155 OPT::Apply( *A, *soln, *rhs );
156 MVT::MvInit( *soln, zero );
162 bool set = problem->setProblem();
165 std::cout << std::endl <<
"ERROR: Belos::LinearProblem failed to set up correctly!" << std::endl;
184 std::cout << std::endl << std::endl;
185 std::cout <<
"Dimension of matrix: " << dim << std::endl;
186 std::cout <<
"Number of right-hand sides: " << numrhs << std::endl;
187 std::cout <<
"Block size used by solver: " << blocksize << std::endl;
188 std::cout <<
"Max number of CG iterations: " << maxits << std::endl;
189 std::cout <<
"Relative residual tolerance: " << tol << std::endl;
190 std::cout << std::endl;
200 OPT::Apply( *A, *soln, *temp );
201 MVT::MvAddMv( one, *rhs, -one, *temp, *temp );
202 std::vector<MT> norm_num(numrhs), norm_denom(numrhs);
203 MVT::MvNorm( *temp, norm_num );
204 MVT::MvNorm( *rhs, norm_denom );
205 for (
int i=0; i<numrhs; ++i) {
207 std::cout <<
"Relative residual "<<i<<
" : " << norm_num[i] / norm_denom[i] << std::endl;
208 if ( norm_num[i] / norm_denom[i] > tol ) {
214 MT ach_tol = solver->achievedTol();
216 std::cout <<
"Achieved tol : "<<ach_tol<<std::endl;
227 std::cout <<
"End Result: TEST PASSED" << std::endl;
230 std::cout <<
"End Result: TEST FAILED" << std::endl;
235 return ( success ? EXIT_SUCCESS : EXIT_FAILURE );
std::string Belos_Version()
int main(int argc, char *argv[])
The Belos::PseudoBlockCGSolMgr provides a solver manager for the BlockCG linear solver.
The Belos::BlockCGSolMgr provides a powerful and fully-featured solver manager over the CG and BlockC...
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.
The Belos::PseudoBlockCGSolMgr provides a powerful and fully-featured solver manager over the pseudo-...
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::BlockCGSolMgr provides a solver manager for the BlockCG linear solver. ...
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.