49 #define STYPE std::complex<double> 
   51 template<
typename TYPE>
 
   60 int main(
int argc, 
char* argv[])
 
   65   if (argc>1) 
if (argv[1][0]==
'-' && argv[1][1]==
'v') verbose = 
true;
 
   70   int numberFailedTests = 0;
 
   72   std::string testName = 
"";
 
   74   if (verbose) std::cout<<std::endl<<
"********** CHECKING TEUCHOS SERIAL SYMMETRIC DENSE MATRIX **********"<<std::endl<<std::endl;
 
   78   if (verbose) std::cout <<
"default constructor -- construct empty matrix ";
 
   80   if (verbose) std::cout << 
"unsuccessful."<<std::endl;
 
   83   if (verbose) std::cout << 
"successful."<<std::endl;
 
   89   if (verbose) std::cout <<
"constructor 1 -- empty matrix with given dimensions ";
 
   90   if ( Con1Test.
numRows()!=4 || Con1Test.
numCols()!=4 || Con1Test( 1, 2 )!=0.0 ) {
 
   91   if (verbose) std::cout << 
"unsuccessful."<<std::endl;
 
   94         if (verbose) std::cout << 
"successful."<<std::endl;
 
  100   for(i = 0; i < 9; i++)
 
  105   Con2Test1ExpRes.
shape(3);
 
  106   Con2Test1ExpRes(0, 0) = 0;
 
  107   Con2Test1ExpRes(1, 0) = 1;  Con2Test1ExpRes(1, 1) = 4;
 
  108   Con2Test1ExpRes(2, 0) = 2;  Con2Test1ExpRes(2, 1) = 5;  Con2Test1ExpRes(2, 2) = 8;
 
  112   numberFailedTests += 
PrintTestResults(
"constructor 2 -- construct matrix from array subrange", Con2Test1, Con2Test1ExpRes, verbose);
 
  117   SDMatrix Con3TestCopy( Con2Test1ExpRes );
 
  118   if(verbose) std::cout <<
"constructor 3 -- copy constructor ";
 
  119   if ( Con3TestCopy != Con2Test1ExpRes ) {
 
  120   if (verbose) std::cout << 
"unsuccessful."<<std::endl;
 
  123   if (verbose) std::cout << 
"successful."<<std::endl;
 
  126   SDMatrix Con3TestCopyTrans( Con2Test1ExpRes );
 
  128   if(verbose) std::cout <<
"constructor 3 -- copy constructor (upper active storage) ";
 
  129   if ( Con3TestCopyTrans(2, 0) != Con2Test1ExpRes(2, 0) ) {
 
  130   if (verbose) std::cout << 
"unsuccessful."<<std::endl;
 
  133   if (verbose) std::cout << 
"successful."<<std::endl;
 
  140   Con4TestSubmatrix.
shape( 2 );
 
  141   Con4TestSubmatrix(0, 0) = 4;
 
  142   Con4TestSubmatrix(1, 0) = 5; Con4TestSubmatrix(1, 1) = 8;
 
  144   numberFailedTests += 
PrintTestResults(
"constructor 4 -- submatrix copy", Con4TestCopy1, Con4TestSubmatrix, verbose);
 
  146   numberFailedTests += 
PrintTestResults(
"constructor 4 -- full matrix copy", Con4TestCopy2, Con4TestOrig, verbose);
 
  148   numberFailedTests += 
PrintTestResults(
"constructor 4 -- full matrix view", Con4TestView1, Con4TestSubmatrix, verbose);
 
  150   numberFailedTests += 
PrintTestResults(
"constructor 4 -- submatrix view", Con4TestView2, Con4TestOrig, verbose);
 
  157   AAA(1, 0) = 1; AAA(1, 1) = 8;
 
  158   AAA(2, 0) = 2; AAA(2, 1) = 3; AAA(2, 2) = 8;
 
  163   numberFailedTests += 
PrintTestResults(
"normFrobenius of a 3x3", AAA.normFrobenius(), 3.0, verbose);
 
  172   AAA(1, 0) = 1; AAA(1, 1) = 8;
 
  173   AAA(2, 0) = 2; AAA(2, 1) = 3; AAA(2, 2) = 8;
 
  175   DMatrix My_Prod( 4, 3 ), My_GenMatrix( 4, 3 );
 
  180   numberFailedTests += 
PrintTestResults(
"multiply() -- general times symmetric matrix (storage = lower tri)", My_Prod.normOne(), 52.0, verbose);
 
  184   numberFailedTests += 
PrintTestResults(
"multiply() -- general times symmetric matrix (storage = upper tri)", My_Prod.normOne(), 44.0, verbose);
 
  190   testName = 
"random() -- enter random entries into matrix";
 
  191   returnCode = CCC.random();
 
  192   numberFailedTests += 
ReturnCodeCheck(testName, returnCode, 0, verbose);
 
  194   testName = 
"putScalar() -- set every entry of this matrix to 1.0";
 
  196   numberFailedTests += 
ReturnCodeCheck(testName, returnCode, 0, verbose);
 
  200   if (verbose) std::cout <<  
"assign() -- copy the values of an input matrix ";
 
  202     if (verbose) std::cout<< 
"successful" <<std::endl;
 
  204     if (verbose) std::cout<< 
"unsuccessful" <<std::endl;
 
  212   if (verbose) std::cout <<  
"swap() -- swap the values and attributes of two symmetric matrices -- ";
 
  214   bool op_result = ( (CCC2swap == copyCCC2) && (CCC2 == copyCCC2swap) );
 
  216     std::cout << (op_result ? 
"successful" : 
"failed" )<<std::endl;
 
  226   if (verbose) std::cout << 
"operator= -- small(empty) = large(view) ";
 
  227   if (CCCtest1.
numRows()==3 && CCCtest1.
values()==CCC.values()) {
 
  228     if (verbose) std::cout<< 
"successful" <<std::endl;
 
  230     if (verbose) std::cout<< 
"unsuccessful" <<std::endl;
 
  234   if (verbose) std::cout << 
"operator= -- small(view) = large(copy) ";
 
  235   if (CCCtest1.
numRows()==5 && CCCtest1.
values()!=CCC.values()) {
 
  236     if (verbose) std::cout<< 
"successful"<<std::endl;
 
  238     if (verbose) std::cout<< 
"unsuccessful"<<std::endl;
 
  244   if (verbose) std::cout << 
"operator= -- large(copy) = small(copy) ";
 
  246     if (verbose) std::cout<< 
"successful"<<std::endl;
 
  248     if (verbose) std::cout<< 
"unsuccessful"<<std::endl;
 
  252   if (verbose) std::cout << 
"operator= -- large(copy) = small(view) ";
 
  254     if(verbose) std::cout<<
"successful" <<std::endl;
 
  256     if (verbose) std::cout<<
"unsuccessful"<<std::endl;
 
  261   CCCtest1 += CCCtest3;
 
  262   if (verbose) std::cout << 
"operator+= -- add two matrices of the same size, but different leading dimension ";
 
  263   if (CCCtest1(1,1)==2.0) {
 
  264     if(verbose) std::cout<<
"successful" <<std::endl;
 
  266     if (verbose) std::cout<<
"unsuccessful"<<std::endl;
 
  269   if (verbose) std::cout << 
"operator+= -- add two matrices of different size (nothing should change) ";
 
  271   if (CCCtest1(1,1)==2.0) {
 
  272     if(verbose) std::cout<<
"successful" <<std::endl;
 
  274     if (verbose) std::cout<<
"unsuccessful"<<std::endl;
 
  284   if (verbose) std::cout << 
"operator*= -- scale matrix by some number ";
 
  286   if (ScalTest(7, 1) == 8.0) {
 
  287   if (verbose) std::cout<< 
"successful." <<std::endl;
 
  289   if (verbose) std::cout<< 
"unsuccessful." <<std::endl;
 
  298   A1(0,0) = 1.0, A1(1,1) = 2.0;
 
  299   A2(0,0) = 1.0, A2(1,1) = 2.0, A2(2,2) = 3.00;
 
  302   SDMatrix C1upper(3), C1lower(3), C2upper(2), C2lower(2);
 
  303   C1upper.setUpper(); C2upper.setUpper();
 
  304   C1lower.setLower(); C2lower.
setLower();
 
  310   Teuchos::symMatTripleProduct<OTYPE,STYPE>( 
Teuchos::NO_TRANS, alpha, A1, W, C1upper );
 
  311   Teuchos::symMatTripleProduct<OTYPE,STYPE>( 
Teuchos::NO_TRANS, alpha, A1, W, C1lower );
 
  315   Teuchos::symMatTripleProduct<OTYPE,STYPE>( 
Teuchos::TRANS, alpha, A2, W, C2upper );
 
  316   Teuchos::symMatTripleProduct<OTYPE,STYPE>( 
Teuchos::TRANS, alpha, A2, W, C2lower );
 
  318   if (verbose) std::cout << 
"triple product -- compute C = W'*A*W or C = W*A*W' ";
 
  319   if (C1upper(2,1)==C1result && C1lower(1,2)==C1result && C2upper(1,0)==C2result && C2lower(0,1)==C2result) {
 
  320         if (verbose) std::cout<< 
"successful." <<std::endl;
 
  322         if (verbose) std::cout<< 
"unsuccessful." <<std::endl;
 
  331   if(numberFailedTests > 0)
 
  334     std::cout << 
"Number of failed tests: " << numberFailedTests << std::endl;
 
  335                 std::cout << 
"End Result: TEST FAILED" << std::endl;
 
  339   if(numberFailedTests == 0)
 
  340     std::cout << 
"End Result: TEST PASSED" << std::endl;
 
  345 template<
typename TYPE>
 
  346 int PrintTestResults(std::string testName, TYPE calculatedResult, TYPE expectedResult, 
bool verbose)
 
  349   if(calculatedResult == expectedResult)
 
  351       if(verbose) std::cout << testName << 
" successful." << std::endl;
 
  356       if(verbose) std::cout << testName << 
" unsuccessful." << std::endl;
 
  362 int ReturnCodeCheck(std::string testName, 
int returnCode, 
int expectedResult, 
bool verbose)
 
  365   if(expectedResult == 0)
 
  369     if(verbose) std::cout << testName << 
" test successful." << std::endl;
 
  374     if(verbose) std::cout << testName << 
" test unsuccessful. Return code was " << returnCode << 
"." << std::endl;
 
  382     if(verbose) std::cout << testName << 
" test successful -- failed as expected." << std::endl;
 
  387     if(verbose) std::cout << testName << 
" test unsuccessful -- did not fail as expected. Return code was " << returnCode << 
"." << std::endl;
 
SerialSymDenseMatrix< OTYPE, STYPE > SDMatrix
 
int PrintTestResults(std::string, TYPE, TYPE, bool)
 
Non-member helper functions on the templated serial, dense matrix/vector classes. ...
 
Templated serial dense matrix class. 
 
Teuchos::SerialDenseVector< int, std::complex< Real > > DVector
 
ScalarType * values() const 
Returns the pointer to the ScalarType data array contained in the object. 
 
void swap(SerialSymDenseMatrix< OrdinalType, ScalarType > &B)
Swap values between this matrix and incoming matrix. 
 
int shape(OrdinalType numRowsCols)
Set dimensions of a Teuchos::SerialSymDenseMatrix object; init values to zero. 
 
This class creates and provides basic support for symmetric, positive-definite dense matrices of temp...
 
OrdinalType numRows() const 
Returns the row dimension of this matrix. 
 
ScalarTraits< ScalarType >::magnitudeType normInf() const 
Returns the Infinity-norm of the matrix. 
 
This class creates and provides basic support for dense vectors of templated type as a specialization...
 
This structure defines some basic traits for a scalar field type. 
 
void setLower()
Specify that the lower triangle of the this matrix should be used. 
 
void setUpper()
Specify that the upper triangle of the this matrix should be used. 
 
ScalarTraits< ScalarType >::magnitudeType normOne() const 
Returns the 1-norm of the matrix. 
 
Teuchos::SerialDenseMatrix< int, std::complex< Real > > DMatrix
 
int random(const ScalarType bias=0.1 *Teuchos::ScalarTraits< ScalarType >::one())
Set all values in the active area (upper/lower triangle) of this matrix to be random numbers...
 
std::string Teuchos_Version()
 
int ReturnCodeCheck(std::string, int, int, bool)
 
Templated serial, dense, symmetric matrix class. 
 
int main(int argc, char *argv[])
 
Templated serial dense vector class. 
 
OrdinalType stride() const 
Returns the stride between the columns of this matrix in memory. 
 
OrdinalType numCols() const 
Returns the column dimension of this matrix. 
 
ScalarTraits< ScalarType >::magnitudeType normFrobenius() const 
Returns the Frobenius-norm of the matrix. 
 
SerialSymDenseMatrix< OrdinalType, ScalarType > & assign(const SerialSymDenseMatrix< OrdinalType, ScalarType > &Source)
Copies values from one matrix to another. 
 
static T one()
Returns representation of one for this scalar type. 
 
bool empty() const 
Returns whether this matrix is empty. 
 
This class creates and provides basic support for dense rectangular matrix of templated type...