103int main(
int argc,
char* argv[])
112 if (argc>1)
if (argv[1][0]==
'-' && argv[1][1]==
'v') verbose =
true;
117 int numberFailedTests = 0;
119 std::string testName =
"", testType =
"";
121#ifdef HAVE_TEUCHOS_COMPLEX
122 testType =
"COMPLEX";
127 if (verbose) std::cout<<std::endl<<
"********** CHECKING TEUCHOS SERIAL DENSE SOLVER - " << testType <<
"-VALUED **********"<<std::endl<<std::endl;
136 testName =
"Generating right-hand side vector using A*x, where x is a random vector:";
137 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
140 testName =
"Generating right-hand side vector using A^T*x, where x is a random vector:";
141 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
143#ifdef HAVE_TEUCHOS_COMPLEX
146 testName =
"Generating right-hand side vector using A^H*x, where x is a random vector:";
147 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
157 solver1.setMatrix( A1 );
161 returnCode = solver1.factor();
162 testName =
"Simple solve: factor() random A:";
163 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
166 returnCode = solver1.solve();
167 testName =
"Simple solve: solve() random A (NO_TRANS):";
169 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
175 returnCode = solver1.solve();
176 testName =
"Simple solve: solve() random A (TRANS):";
178 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
180#ifdef HAVE_TEUCHOS_COMPLEX
185 returnCode = solver1.solve();
186 testName =
"Simple solve: solve() random A (CONJ_TRANS):";
188 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
192 returnCode = solver1.invert();
193 testName =
"Simple solve: invert() random A:";
194 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
198 testName =
"Computing solution using inverted random A (NO_TRANS):";
200 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
203 testName =
"Computing solution using inverted random A (TRANS):";
205 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
207#ifdef HAVE_TEUCHOS_COMPLEX
209 testName =
"Computing solution using inverted random A (CONJ_TRANS):";
211 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
215#ifdef HAVE_TEUCHOSNUMERICS_EIGEN
226#ifdef HAVE_TEUCHOS_COMPLEX
232 solver2.solveToRefinedSolution(
true );
235 solver2.setMatrix( A2 );
239 returnCode = solver2.factor();
240 testName =
"Solve with iterative refinement: factor() random A:";
241 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
244 returnCode = solver2.solve();
245 testName =
"Solve with iterative refinement: solve() random A (NO_TRANS):";
247 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
253 returnCode = solver2.solve();
254 testName =
"Solve with iterative refinement: solve() random A (TRANS):";
256 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
258#ifdef HAVE_TEUCHOS_COMPLEX
263 returnCode = solver2.solve();
264 testName =
"Solve with iterative refinement: solve() random A (CONJ_TRANS):";
266 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
280#ifdef HAVE_TEUCHOS_COMPLEX
290 solver3.factorWithEquilibration(
true );
293 solver3.setMatrix( A3 );
297 returnCode = solver3.factor();
298 testName =
"Solve with matrix equilibration: factor() random A:";
299 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
302 returnCode = solver3.solve();
303 testName =
"Solve with matrix equilibration: solve() random A (NO_TRANS):";
305 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
311 returnCode = solver3.solve();
312 testName =
"Solve with matrix equilibration: solve() random A (TRANS):";
314 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
316#ifdef HAVE_TEUCHOS_COMPLEX
321 returnCode = solver3.solve();
322 testName =
"Solve with matrix equilibration: solve() random A (CONJ_TRANS):";
324 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
330 solver3.setMatrix( A3bak );
331 solver3.setVectors(
Teuchos::rcp( &xhat,
false ), b3bak );
333 returnCode = solver3.solve();
334 testName =
"Solve with matrix equilibration: solve() without factor() random A (NO_TRANS):";
336 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
341 if(numberFailedTests > 0)
344 std::cout <<
"Number of failed tests: " << numberFailedTests << std::endl;
345 std::cout <<
"End Result: TEST FAILED" << std::endl;
349 if(numberFailedTests == 0)
350 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)
int CompareVectors(const SerialDenseVector< OTYPE, STYPE > &Vector1, const SerialDenseVector< OTYPE, STYPE > &Vector2, ScalarTraits< STYPE >::magnitudeType Tolerance, bool verbose)
SerialDenseMatrix< OTYPE, STYPE > DMatrix
int ReturnCodeCheck(std::string, int, int, bool)
Teuchos::RCP< DVector > GetRandomVector(int n)