103int main(
int argc,
char* argv[])
113 if (argc>1)
if (argv[1][0]==
'-' && argv[1][1]==
'v') verbose =
true;
118 int numberFailedTests = 0;
120 std::string testName =
"", testType =
"";
122#ifdef HAVE_TEUCHOS_COMPLEX
123 testType =
"COMPLEX";
128 if (verbose) std::cout<<std::endl<<
"********** CHECKING TEUCHOS SERIAL QR SOLVER - " << testType <<
"-VALUED **********"<<std::endl<<std::endl;
134 DVector xhat(n), b(m), xhatt(m);
138 testName =
"Generating right-hand side vector using A*x, where x is a random vector:";
139 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
141#ifdef HAVE_TEUCHOS_COMPLEX
144 testName =
"Generating right-hand side vector using A^H*x, where x is a random vector:";
145 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
149 testName =
"Generating right-hand side vector using A^T*x, where x is a random vector:";
150 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
164 solver1.setMatrix( A1 );
168 returnCode = solver1.factor();
169 testName =
"Simple solve: factor() random A:";
170 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
171 returnCode = solver1.formQ();
172 testName =
"Simple solve: formQ() random A:";
173 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
176 returnCode = solver1.solve();
177 testName =
"Simple solve: solve() random A (NO_TRANS):";
179 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
180 testName =
"Simple solve: multiplyQ(TRANS) solveR (NO_TRANS) random A (NO_TRANS):";
183 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
184 for (
OTYPE i=0; i<n; i++) {tmp(i) = bp(i);}
186 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
189#ifdef HAVE_TEUCHOS_COMPLEX
190 testName =
"Simple solve: formQ() solve with explicit Q implicit R random A (NO_TRANS):";
193 for (
OTYPE i=0; i<n; i++) {tmp(i) = bp(i);}
195 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
197 testName =
"Simple solve: formQ() solve with explicit Q explicit R random A (NO_TRANS):";
199 returnCode = solver1.formR();
200 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
202 for (
OTYPE i=0; i<n; i++) {tmp(i) = bp(i);}
204 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
207 testName =
"Simple solve: formQ() solve with explicit Q random A (NO_TRANS):";
210 for (
OTYPE i=0; i<n; i++) {tmp(i) = bp(i);}
212 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
214 testName =
"Simple solve: formQ() solve with explicit Q explicit R random A (NO_TRANS):";
216 returnCode = solver1.formR();
217 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
219 for (
OTYPE i=0; i<n; i++) {tmp(i) = bp(i);}
221 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
225#ifdef HAVE_TEUCHOS_COMPLEX
230 returnCode = solver1.solve();
231 testName =
"Simple solve: solve() random A (CONJ_TRANS):";
234 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
235 testName =
"Simple solve: solveR (NO_TRANS) multiplyQ(TRANS) random A (CONJ_TRANS):";
238 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
239 for (
OTYPE i=0; i<n; i++) {tmp2(i) = bp(i);}
241 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
245 testName =
"Simple solve: formQ() solve with explicit Q random A (CONJ_TRANS):";
249 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
260 returnCode = solver1.solve();
261 testName =
"Simple solve: solve() random A (TRANS):";
264 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
266 testName =
"Simple solve: solveR multiplyQ(TRANS) (NO_TRANS) random A (TRANS):";
268 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
269 for (
OTYPE i=0; i<n; i++) {tmp2(i) = bp(i);}
271 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
275 testName =
"Simple solve: formQ() solve with explicit Q random A (CONJ_TRANS):";
279 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
298#ifdef HAVE_TEUCHOS_COMPLEX
306 solver2.factorWithEquilibration(
true );
315 MagnitudeType smlnum2 = smlnum/2;
318 for (
OTYPE j = 0; j < A2->numCols(); j++) {
319 for (
OTYPE i = 0; i < A2->numRows(); i++) {
329 solver2.setMatrix( A2 );
336 returnCode = solver2.factor();
337 testName =
"Solve with matrix equilibration: factor() random A:";
338 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
341 returnCode = solver2.solve();
342 testName =
"Solve with matrix equilibration: solve() random A (NO_TRANS):";
344 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
346#ifdef HAVE_TEUCHOS_COMPLEX
351 returnCode = solver2.solve();
352 testName =
"Solve with matrix equilibration: solve() random A (CONJ_TRANS):";
355 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
362 returnCode = solver2.solve();
363 testName =
"Solve with matrix equilibration: solve() random A (TRANS):";
366 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
371 solver2.setMatrix( A2bak );
372 solver2.setVectors(
Teuchos::rcp( &xhat,
false ), b2bak );
374 returnCode = solver2.solve();
375 testName =
"Solve with matrix equilibration: solve() without factor() random A (NO_TRANS):";
377 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
382 if(numberFailedTests > 0)
385 std::cout <<
"Number of failed tests: " << numberFailedTests << std::endl;
386 std::cout <<
"End Result: TEST FAILED" << std::endl;
390 if(numberFailedTests == 0)
391 std::cout <<
"End Result: TEST PASSED" << std::endl;
Teuchos::RCP< DMatrix > GetRandomMatrix(int m, int n)
SerialDenseVector< OTYPE, STYPE > DVector
int PrintTestResults(std::string, TYPE, TYPE, bool)
SerialDenseMatrix< OTYPE, STYPE > DMatrix
int ReturnCodeCheck(std::string, int, int, bool)
int CompareVectors(const SerialDenseVector< OTYPE, STYPE > &Vector1, const SerialDenseVector< OTYPE, STYPE > &Vector2, ScalarTraits< STYPE >::magnitudeType Tolerance)