64 using namespace Teuchos;
66 int main(
int argc,
char *argv[]) {
69 typedef std::complex<double> ST;
71 typedef std::complex<double> ST;
73 std::cout <<
"Not compiled with std::complex support." << std::endl;
74 std::cout <<
"End Result: TEST FAILED" << std::endl;
79 typedef SCT::magnitudeType MT;
85 ST zero = SCT::zero();
96 bool norm_failure =
false;
97 bool proc_verbose =
false;
102 int maxrestarts = 15;
104 std::string ortho(
"DGKS");
108 cmdp.
setOption(
"verbose",
"quiet",&verbose,
"Print messages and results.");
109 cmdp.
setOption(
"pseudo",
"regular",&pseudo,
"Use pseudo-block GMRES to solve the linear systems.");
110 cmdp.
setOption(
"frequency",&frequency,
"Solvers frequency for printing residuals (#iters).");
111 cmdp.
setOption(
"tol",&tol,
"Relative residual tolerance used by GMRES solver.");
112 cmdp.
setOption(
"num-rhs",&numrhs,
"Number of right-hand sides to be solved for.");
113 cmdp.
setOption(
"num-restarts",&maxrestarts,
"Maximum number of restarts allowed for the GMRES solver.");
114 cmdp.
setOption(
"blocksize",&blocksize,
"Block size used by GMRES.");
115 cmdp.
setOption(
"subspace-length",&length,
"Maximum dimension of block-subspace used by GMRES solver.");
116 cmdp.
setOption(
"ortho-type",&ortho,
"Orthogonalization type, either DGKS, ICGS or IMGS");
121 proc_verbose = verbose && (MyPID==0);
128 #ifndef HAVE_BELOS_TRIUTILS
129 std::cout <<
"This test requires Triutils. Please configure with --enable-triutils." << std::endl;
131 std::cout <<
"End Result: TEST FAILED" << std::endl;
140 std::vector<ST> diag( dim, (ST)4.0 );
147 int maxits = dim/blocksize;
150 belosList.
set(
"Num Blocks", length );
151 belosList.
set(
"Block Size", blocksize );
152 belosList.
set(
"Maximum Iterations", maxits );
153 belosList.
set(
"Maximum Restarts", maxrestarts );
154 belosList.
set(
"Convergence Tolerance", tol );
155 belosList.
set(
"Orthogonalization", ortho );
160 belosList.
set(
"Output Frequency", frequency );
171 MVT::MvInit( *rhs, 1.0 );
172 MVT::MvInit( *soln, zero );
178 bool set = problem->setProblem();
181 std::cout << std::endl <<
"ERROR: Belos::LinearProblem failed to set up correctly!" << std::endl;
200 solver->setDebugStatusTest(
Teuchos::rcp(&debugTest,
false) );
206 std::cout << std::endl << std::endl;
207 std::cout <<
"Dimension of matrix: " << dim << std::endl;
208 std::cout <<
"Number of right-hand sides: " << numrhs << std::endl;
209 std::cout <<
"Block size used by solver: " << blocksize << std::endl;
210 std::cout <<
"Max number of Gmres iterations: " << maxits << std::endl;
211 std::cout <<
"Relative residual tolerance: " << tol << std::endl;
212 std::cout << std::endl;
222 OPT::Apply( *A, *soln, *temp );
223 MVT::MvAddMv( one, *rhs, -one, *temp, *temp );
224 std::vector<MT> norm_num(numrhs), norm_denom(numrhs);
225 MVT::MvNorm( *temp, norm_num );
226 MVT::MvNorm( *rhs, norm_denom );
227 for (
int i=0; i<numrhs; ++i) {
229 std::cout <<
"Relative residual "<<i<<
" : " << norm_num[i] / norm_denom[i] << std::endl;
230 if ( norm_num[i] / norm_denom[i] > tol ) {
236 const std::vector<MT> residualLog = debugTest.
getLogResNorm();
237 if (numrhs==1 && proc_verbose && residualLog.size())
239 std::cout <<
"Absolute residual 2-norm [ " << residualLog.size() <<
" ] : ";
240 for (
unsigned int i=0; i<residualLog.size(); i++)
241 std::cout << residualLog[i] <<
" ";
242 std::cout << std::endl;
243 std::cout <<
"Final abs 2-norm / rhs 2-norm : " << residualLog[residualLog.size()-1] / norm_denom[0] << std::endl;
249 std::cout <<
"End Result: TEST PASSED" << std::endl;
252 std::cout <<
"End Result: TEST FAILED" << std::endl;
257 return ( success ? EXIT_SUCCESS : EXIT_FAILURE );
std::string Belos_Version()
int main(int argc, char *argv[])
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
const std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > & getLogResNorm() const
Returns the log of the absolute residual norm from the iteration.
A Belos::StatusTest debugging class for storing the absolute residual norms generated during a solve...
Interface to Block GMRES and Flexible GMRES.
Belos::StatusTest debugging class for storing the absolute residual norms generated during a solve...
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)
The Belos::BlockGmresSolMgr provides a solver manager for the BlockGmres linear solver.
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
Interface to standard and "pseudoblock" GMRES.
ReturnType
Whether the Belos solve converged for all linear systems.
Simple example of a user's defined Belos::Operator class.
Interface for multivectors used by Belos' linear solvers.
Class which defines basic traits for the operator type.
The Belos::PseudoBlockGmresSolMgr provides a solver manager for the BlockGmres linear solver...
Belos header file which uses auto-configuration information to include necessary C++ headers...