111int main(
int argc,
char* argv[])
117 int n=10, kl=2, ku=3;
121 if (argc>1)
if (argv[1][0]==
'-' && argv[1][1]==
'v') verbose =
true;
126 int numberFailedTests = 0;
128 std::string testName =
"", testType =
"";
130#ifdef HAVE_TEUCHOS_COMPLEX
131 testType =
"COMPLEX";
136 if (verbose) std::cout<<std::endl<<
"********** CHECKING TEUCHOS SERIAL BAND DENSE SOLVER - " << testType <<
"-VALUED **********"<<std::endl<<std::endl;
150 AB1 = Teuchos::generalToBanded( A1, kl, ku,
true );
153 C1 = Teuchos::bandedToGeneral( AB1 );
154 testName =
"Converting matrix formats: generalToBanded and bandedToGeneral random A:";
156 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
160 testName =
"Generating right-hand side vector using A*x, where x is a random vector:";
161 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
163 testName =
"Generating right-hand side vector using A^T*x, where x is a random vector:";
164 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
166#ifdef HAVE_TEUCHOS_COMPLEX
169 testName =
"Generating right-hand side vector using A^H*x, where x is a random vector:";
170 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
177 solver1.setMatrix( AB1 );
181 returnCode = solver1.factor();
182 testName =
"Simple solve: factor() random A:";
183 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
186 returnCode = solver1.solve();
187 testName =
"Simple solve: solve() random A (NO_TRANS):";
189 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
195 returnCode = solver1.solve();
196 testName =
"Simple solve: solve() random A (TRANS):";
198 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
200#ifdef HAVE_TEUCHOS_COMPLEX
205 returnCode = solver1.solve();
206 testName =
"Simple solve: solve() random A (CONJ_TRANS):";
208 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
212#ifdef HAVE_TEUCHOSNUMERICS_EIGEN
223#ifdef HAVE_TEUCHOS_COMPLEX
229 solver2.solveToRefinedSolution(
true );
234 AB2 = Teuchos::generalToBanded( A2, kl, ku,
true );
237 C2 = Teuchos::bandedToGeneral( AB2 );
238 testName =
"Converting matrix formats: generalToBanded and bandedToGeneral random A:";
240 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
243 solver2.setMatrix( AB2 );
247 returnCode = solver2.factor();
248 testName =
"Solve with iterative refinement: factor() random A:";
249 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
252 returnCode = solver2.solve();
253 testName =
"Solve with iterative refinement: solve() random A (NO_TRANS):";
255 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
261 returnCode = solver2.solve();
262 testName =
"Solve with iterative refinement: solve() random A (TRANS):";
264 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
266#ifdef HAVE_TEUCHOS_COMPLEX
271 returnCode = solver2.solve();
272 testName =
"Solve with iterative refinement: solve() random A (CONJ_TRANS):";
274 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
288#ifdef HAVE_TEUCHOS_COMPLEX
294 solver3.factorWithEquilibration(
true );
299 AB3 = Teuchos::generalToBanded( A3, kl, ku,
true );
302 C3 = Teuchos::bandedToGeneral( AB3 );
303 testName =
"Converting matrix formats: generalToBanded and bandedToGeneral random A:";
305 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
308 solver3.setMatrix( AB3 );
315 returnCode = solver3.factor();
316 testName =
"Solve with matrix equilibration: factor() random A:";
317 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
320 returnCode = solver3.solve();
321 testName =
"Solve with matrix equilibration: solve() random A (NO_TRANS):";
323 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
329 returnCode = solver3.solve();
330 testName =
"Solve with matrix equilibration: solve() random A (TRANS):";
332 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
334#ifdef HAVE_TEUCHOS_COMPLEX
339 returnCode = solver3.solve();
340 testName =
"Solve with matrix equilibration: solve() random A (CONJ_TRANS):";
342 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
347 solver3.setMatrix( AB3bak );
348 solver3.setVectors(
Teuchos::rcp( &xhat,
false ), b3bak );
350 returnCode = solver3.solve();
351 testName =
"Solve with matrix equilibration: solve() without factor() random A (NO_TRANS):";
353 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
358 if(numberFailedTests > 0)
361 std::cout <<
"Number of failed tests: " << numberFailedTests << std::endl;
362 std::cout <<
"End Result: TEST FAILED" << std::endl;
366 if(numberFailedTests == 0)
367 std::cout <<
"End Result: TEST PASSED!" << std::endl;
Teuchos::RCP< DMatrix > GetRandomBandedMatrix(int m, int n, int kl, int ku)
TYPE GetRandom(TYPE, TYPE)
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)
Teuchos::RCP< DVector > GetRandomVector(int n)
int CompareMatrices(const SerialDenseMatrix< OTYPE, STYPE > &Matrix1, const SerialDenseMatrix< OTYPE, STYPE > &Matrix2, ScalarTraits< STYPE >::magnitudeType Tolerance)
SerialBandDenseMatrix< OTYPE, STYPE > BDMatrix