29 #ifdef HAVE_BELOS_TRIUTILS
30 #include "Trilinos_Util_iohb.h"
37 using namespace Teuchos;
39 int main(
int argc,
char *argv[]) {
41 typedef std::complex<double> ST;
43 typedef SCT::magnitudeType MT;
49 ST zero = SCT::zero();
62 bool norm_failure =
false;
63 bool proc_verbose =
false;
64 bool use_single_red =
false;
68 std::string
filename(
"mhd1280b.cua");
72 cmdp.
setOption(
"verbose",
"quiet",&verbose,
"Print messages and results.");
73 cmdp.
setOption(
"pseudo",
"regular",&pseudo,
"Use pseudo-block CG to solve the linear systems.");
74 cmdp.
setOption(
"frequency",&frequency,
"Solvers frequency for printing residuals (#iters).");
75 cmdp.
setOption(
"filename",&filename,
"Filename for Harwell-Boeing test matrix.");
76 cmdp.
setOption(
"tol",&tol,
"Relative residual tolerance used by CG solver.");
77 cmdp.
setOption(
"num-rhs",&numrhs,
"Number of right-hand sides to be solved for.");
78 cmdp.
setOption(
"blocksize",&blocksize,
"Block size used by CG .");
79 cmdp.
setOption(
"use-single-red",
"use-standard-red",&use_single_red,
"Use single-reduction variant of CG iteration.");
84 proc_verbose = verbose && (MyPID==0);
92 #ifndef HAVE_BELOS_TRIUTILS
93 std::cout <<
"This test requires Triutils. Please configure with --enable-triutils." << std::endl;
95 std::cout <<
"End Result: TEST FAILED" << std::endl;
106 info = readHB_newmat_double(filename.c_str(),&dim,&dim2,&nnz,
107 &colptr,&rowind,&dvals);
108 if (info == 0 || nnz < 0) {
110 std::cout <<
"Error reading '" << filename <<
"'" << std::endl;
111 std::cout <<
"End Result: TEST FAILED" << std::endl;
117 for (
int ii=0; ii<nnz; ii++) {
118 cvals[ii] = ST(dvals[ii*2],dvals[ii*2+1]);
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) && use_single_red)
134 belosList.
set(
"Use Single Reduction", use_single_red );
139 belosList.
set(
"Output Frequency", frequency );
150 MVT::MvRandom( *soln );
151 OPT::Apply( *A, *soln, *rhs );
152 MVT::MvInit( *soln, zero );
158 bool set = problem->setProblem();
161 std::cout << std::endl <<
"ERROR: Belos::LinearProblem failed to set up correctly!" << std::endl;
180 std::cout << std::endl << std::endl;
181 std::cout <<
"Dimension of matrix: " << dim << std::endl;
182 std::cout <<
"Number of right-hand sides: " << numrhs << std::endl;
183 std::cout <<
"Block size used by solver: " << blocksize << std::endl;
184 std::cout <<
"Max number of CG iterations: " << maxits << std::endl;
185 std::cout <<
"Relative residual tolerance: " << tol << std::endl;
186 std::cout << std::endl;
196 OPT::Apply( *A, *soln, *temp );
197 MVT::MvAddMv( one, *rhs, -one, *temp, *temp );
198 std::vector<MT> norm_num(numrhs), norm_denom(numrhs);
199 MVT::MvNorm( *temp, norm_num );
200 MVT::MvNorm( *rhs, norm_denom );
201 for (
int i=0; i<numrhs; ++i) {
203 std::cout <<
"Relative residual "<<i<<
" : " << norm_num[i] / norm_denom[i] << std::endl;
204 if ( norm_num[i] / norm_denom[i] > tol ) {
210 MT ach_tol = solver->achievedTol();
212 std::cout <<
"Achieved tol : "<<ach_tol<<std::endl;
224 std::cout <<
"End Result: TEST PASSED" << std::endl;
227 std::cout <<
"End Result: TEST FAILED" << std::endl;
232 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.