58 #ifdef HAVE_TEUCHOS_COMPLEX
59 #define STYPE std::complex<double>
66 #ifdef HAVE_TEUCHOS_COMPLEX
67 #define SCALARMAX STYPE(10,0)
69 #define SCALARMAX STYPE(10)
72 template<
typename TYPE>
82 template<
typename TYPE>
94 std::complex<T>
GetRandom( std::complex<T>, std::complex<T> );
107 int 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);
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) {
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) {
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);
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;
298 template<
typename TYPE>
299 int 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;
315 int ReturnCodeCheck(std::string testName,
int returnCode,
int expectedResult,
bool verbose)
318 if(expectedResult == 0)
322 if(verbose) std::cout << testName <<
" test successful." << std::endl;
327 if(verbose) std::cout << testName <<
" test unsuccessful. Return code was " << returnCode <<
"." << std::endl;
335 if(verbose) std::cout << testName <<
" test successful -- failed as expected." << std::endl;
340 if(verbose) std::cout << testName <<
" test unsuccessful -- did not fail as expected. Return code was " << returnCode <<
"." << std::endl;
347 template<
typename TYPE>
354 std::complex<T>
GetRandom( std::complex<T> Low, std::complex<T> High)
356 T lowMag = Low.real();
357 T highMag = High.real();
360 return std::complex<T>( real, imag );
370 double GetRandom(
double Low,
double High)
394 for (
int i=0; i<
n; ++i) {
404 for (
int j=0; j<
n; ++j) {
405 for (
int i=0; i<=j; ++i) {
406 (*mat)(i,j) = (*tmp2)(i,j);
418 for (
int i=0; i<m; i++)
419 for (
int j=0; j<
n; j++)
430 for (
int i=0; i<
n; i++)
450 MagnitudeType temp = norm_diff;
454 if (temp > Tolerance)
void solveToRefinedSolution(bool flag)
Causes all solves to compute solution to best ability using iterative refinement. ...
SerialSymDenseMatrix< OTYPE, STYPE > SDMatrix
Teuchos::RCP< SDMatrix > GetRandomSpdMatrix(int n)
A class for constructing and using Hermitian positive definite dense matrices.
int PrintTestResults(std::string, TYPE, TYPE, bool)
Non-member helper functions on the templated serial, dense matrix/vector classes. ...
int setMatrix(const RCP< SerialDenseMatrix< OrdinalType, ScalarType > > &A)
Sets the pointers for coefficient matrix.
Templated serial dense matrix class.
int formQ()
Explicitly forms the unitary matrix Q.
Teuchos::SerialDenseVector< int, std::complex< Real > > DVector
int multiply(ETransp transa, ETransp transb, ScalarType alpha, const SerialDenseMatrix< OrdinalType, ScalarType > &A, const SerialDenseMatrix< OrdinalType, ScalarType > &B, ScalarType beta)
Multiply A * B and add them to this; this = beta * this + alpha*A*B.
int factor()
Computes the in-place Cholesky factorization of the matrix using the LAPACK routine DPOTRF...
This class creates and provides basic support for symmetric, positive-definite dense matrices of temp...
Templated class for solving dense linear problems.
This class creates and provides basic support for dense vectors of templated type as a specialization...
ScalarTraits< ScalarType >::magnitudeType normFrobenius() const
Returns the Frobenius-norm of the matrix.
This structure defines some basic traits for a scalar field type.
A class for solving dense linear problems.
void setUpper()
Specify that the upper triangle of the this matrix should be used.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
int setMatrix(const RCP< SerialSymDenseMatrix< OrdinalType, ScalarType > > &A_in)
Sets the pointers for coefficient matrix.
TYPE GetRandom(TYPE, TYPE)
int solve()
Computes the solution X to AX = B for the this matrix and the B provided to SetVectors()..
int setVectors(const RCP< SerialDenseMatrix< OrdinalType, ScalarType > > &X, const RCP< SerialDenseMatrix< OrdinalType, ScalarType > > &B)
Sets the pointers for left and right hand side vector(s).
Teuchos::RCP< DMatrix > GetRandomMatrix(int m, int n)
bool CompareVectors(TYPE1 *Vector1, TYPE2 *Vector2, OType Size, TYPE2 Tolerance)
Teuchos::SerialDenseMatrix< int, std::complex< Real > > DMatrix
std::string Teuchos_Version()
int ReturnCodeCheck(std::string, int, int, bool)
Templated serial, dense, symmetric matrix class.
int main(int argc, char *argv[])
Templated class for constructing and using Hermitian positive definite dense matrices.
void factorWithEquilibration(bool flag)
Causes equilibration to be called just before the matrix factorization as part of the call to factor...
Templated serial dense vector class.
Defines basic traits for the scalar field type.
Teuchos::RCP< DVector > GetRandomVector(int n)
Smart reference counting pointer class for automatic garbage collection.
RCP< SerialDenseMatrix< OrdinalType, ScalarType > > getQ() const
Returns pointer to Q (assuming factorization has been performed).
int factor()
Computes the in-place QR factorization of the matrix using the LAPACK routine _GETRF or the Eigen cla...
Reference-counted pointer class and non-member templated function implementations.
This class creates and provides basic support for dense rectangular matrix of templated type...