23 #include "Tpetra_Util_iohb.h"
33 using namespace Teuchos;
35 int main(
int argc,
char *argv[]) {
37 typedef std::complex<double> ST;
39 typedef SCT::magnitudeType MT;
45 ST zero = SCT::zero();
58 bool norm_failure =
false;
59 bool proc_verbose =
false;
60 bool use_single_red =
false;
64 std::string
filename(
"mhd1280b.cua");
68 cmdp.
setOption(
"verbose",
"quiet",&verbose,
"Print messages and results.");
69 cmdp.
setOption(
"pseudo",
"regular",&pseudo,
"Use pseudo-block CG to solve the linear systems.");
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 CG solver.");
73 cmdp.
setOption(
"num-rhs",&numrhs,
"Number of right-hand sides to be solved for.");
74 cmdp.
setOption(
"blocksize",&blocksize,
"Block size used by CG .");
75 cmdp.
setOption(
"use-single-red",
"use-standard-red",&use_single_red,
"Use single-reduction variant of CG iteration.");
80 proc_verbose = verbose && (MyPID==0);
93 info = readHB_newmat_double(filename.c_str(),&dim,&dim2,&nnz,
94 &colptr,&rowind,&dvals);
95 if (info == 0 || nnz < 0) {
97 std::cout <<
"Error reading '" << filename <<
"'" << std::endl;
98 std::cout <<
"End Result: TEST FAILED" << std::endl;
104 for (
int ii=0; ii<nnz; ii++) {
105 cvals[ii] = ST(dvals[ii*2],dvals[ii*2+1]);
114 int maxits = dim/blocksize;
117 belosList.
set(
"Block Size", blocksize );
118 belosList.
set(
"Maximum Iterations", maxits );
119 belosList.
set(
"Convergence Tolerance", tol );
120 if ((blocksize == 1) && use_single_red)
121 belosList.
set(
"Use Single Reduction", use_single_red );
126 belosList.
set(
"Output Frequency", frequency );
137 MVT::MvRandom( *soln );
138 OPT::Apply( *A, *soln, *rhs );
139 MVT::MvInit( *soln, zero );
145 bool set = problem->setProblem();
148 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 <<
"Block size used by solver: " << blocksize << std::endl;
171 std::cout <<
"Max number of CG iterations: " << maxits << std::endl;
172 std::cout <<
"Relative residual tolerance: " << tol << std::endl;
173 std::cout << std::endl;
183 OPT::Apply( *A, *soln, *temp );
184 MVT::MvAddMv( one, *rhs, -one, *temp, *temp );
185 std::vector<MT> norm_num(numrhs), norm_denom(numrhs);
186 MVT::MvNorm( *temp, norm_num );
187 MVT::MvNorm( *rhs, norm_denom );
188 for (
int i=0; i<numrhs; ++i) {
190 std::cout <<
"Relative residual "<<i<<
" : " << norm_num[i] / norm_denom[i] << std::endl;
191 if ( norm_num[i] / norm_denom[i] > tol ) {
197 MT ach_tol = solver->achievedTol();
199 std::cout <<
"Achieved tol : "<<ach_tol<<std::endl;
211 std::cout <<
"End Result: TEST PASSED" << std::endl;
214 std::cout <<
"End Result: TEST FAILED" << std::endl;
219 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.