107int main(
int argc,
char* argv[])
115 if (argc>1)
if (argv[1][0]==
'-' && argv[1][1]==
'v') verbose =
true;
120 int numberFailedTests = 0, failedComparison = 0;
122 std::string testName =
"", testType =
"";
124#ifdef HAVE_TEUCHOS_COMPLEX
125 testType =
"COMPLEX";
130 if (verbose) std::cout<<std::endl<<
"********** CHECKING TEUCHOS SERIAL SPD DENSE SOLVER - " << testType <<
"-VALUED **********"<<std::endl<<std::endl;
138 for (
int j=0; j<n; ++j) {
139 for (
int i=0; i<=j; ++i) {
140 (*A1full)(i,j) = (*A1)(i,j);
143 for (
int j=0; j<n; ++j) {
144 for (
int i=j+1; i<n; ++i) {
151 testName =
"Generating right-hand side vector using A*x, where x is a random vector:";
152 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
161 solver1.setMatrix( A1 );
165 returnCode = solver1.factor();
166 testName =
"Simple solve: factor() random A:";
167 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
170 returnCode = solver1.solve();
171 testName =
"Simple solve: solve() random A (NO_TRANS):";
173 if(verbose && failedComparison>0) std::cout <<
"COMPARISON FAILED : ";
174 numberFailedTests += failedComparison;
175 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
178#ifdef HAVE_TEUCHOSNUMERICS_EIGEN
186 for (
int j=0; j<n; ++j) {
187 for (
int i=0; i<=j; ++i) {
188 (*A2full)(i,j) = (*A2)(i,j);
191 for (
int j=0; j<n; ++j) {
192 for (
int i=j+1; i<n; ++i) {
203 solver2.solveToRefinedSolution(
true );
206 solver2.setMatrix( A2 );
210 returnCode = solver2.factor();
211 testName =
"Solve with iterative refinement: factor() random A:";
212 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
215 returnCode = solver2.solve();
216 testName =
"Solve with iterative refinement: solve() random A (NO_TRANS):";
218 if(verbose && failedComparison>0) std::cout <<
"COMPARISON FAILED : ";
219 numberFailedTests += failedComparison;
220 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
231 for (
int j=0; j<n; ++j) {
232 for (
int i=0; i<=j; ++i) {
233 (*A3full)(i,j) = (*A3)(i,j);
236 for (
int j=0; j<n; ++j) {
237 for (
int i=j+1; i<n; ++i) {
251 solver3.factorWithEquilibration(
true );
254 solver3.setMatrix( A3 );
258 returnCode = solver3.factor();
259 testName =
"Solve with matrix equilibration: factor() random A:";
260 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
263 returnCode = solver3.solve();
264 testName =
"Solve with matrix equilibration: solve() random A (NO_TRANS):";
266 if(verbose && failedComparison>0) std::cout <<
"COMPARISON FAILED : ";
267 numberFailedTests += failedComparison;
268 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
271 solver3.setMatrix( A3bak );
272 solver3.setVectors(
Teuchos::rcp( &xhat,
false ), b3bak );
273 returnCode = solver3.solve();
274 testName =
"Solve with matrix equilibration: solve() without factor() random A (NO_TRANS):";
276 if(verbose && failedComparison>0) std::cout <<
"COMPARISON FAILED : ";
277 numberFailedTests += failedComparison;
278 numberFailedTests +=
ReturnCodeCheck(testName, returnCode, 0, verbose);
283 if(numberFailedTests > 0)
286 std::cout <<
"Number of failed tests: " << numberFailedTests << std::endl;
287 std::cout <<
"End Result: TEST FAILED" << std::endl;
291 if(numberFailedTests == 0)
292 std::cout <<
"End Result: TEST PASSED" << std::endl;
299int PrintTestResults(std::string testName, TYPE calculatedResult, TYPE expectedResult,
bool verbose)
302 if(calculatedResult == expectedResult)
304 if(verbose) std::cout << testName <<
" successful." << std::endl;
309 if(verbose) std::cout << testName <<
" unsuccessful." << std::endl;
Teuchos::RCP< SDMatrix > GetRandomSpdMatrix(int n)
TYPE GetRandom(TYPE, TYPE)
Teuchos::RCP< DMatrix > GetRandomMatrix(int m, int n)
SerialDenseVector< OTYPE, STYPE > DVector
int PrintTestResults(std::string, TYPE, TYPE, bool)
SerialSymDenseMatrix< OTYPE, STYPE > SDMatrix
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)