Intrepid
/usr/src/RPM/BUILD/trilinos10-10.6.4/packages/intrepid/test/Shared/FieldContainer/test_01.cpp
00001 // @HEADER
00002 // ************************************************************************
00003 //
00004 //                           Intrepid Package
00005 //                 Copyright (2007) Sandia Corporation
00006 //
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 //
00010 // This library is free software; you can redistribute it and/or modify
00011 // it under the terms of the GNU Lesser General Public License as
00012 // published by the Free Software Foundation; either version 2.1 of the
00013 // License, or (at your option) any later version.
00014 //
00015 // This library is distributed in the hope that it will be useful, but
00016 // WITHOUT ANY WARRANTY; without even the implied warranty of
00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00018 // Lesser General Public License for more details.
00019 //
00020 // You should have received a copy of the GNU Lesser General Public
00021 // License along with this library; if not, write to the Free Software
00022 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00023 // USA
00024 // Questions? Contact Pavel Bochev (pbboche@sandia.gov) or
00025 //                    Denis Ridzal (dridzal@sandia.gov).
00026 //
00027 // ************************************************************************
00028 // @HEADER
00029 
00030 
00036 #include "Intrepid_FieldContainer.hpp"
00037 #include "Teuchos_oblackholestream.hpp"
00038 #include "Teuchos_RCP.hpp"
00039 #include "Teuchos_GlobalMPISession.hpp"
00040 
00041 
00042 using namespace Intrepid;
00043 
00044 int main(int argc, char *argv[]) {
00045 
00046   Teuchos::GlobalMPISession mpiSession(&argc, &argv);
00047   
00048   // This little trick lets us print to std::cout only if a (dummy) command-line argument is provided.
00049   int iprint     = argc - 1;
00050   
00051   Teuchos::RCP<std::ostream> outStream;
00052   Teuchos::oblackholestream bhs; // outputs nothing
00053   
00054   if (iprint > 0)
00055     outStream = Teuchos::rcp(&std::cout, false);
00056   else
00057     outStream = Teuchos::rcp(&bhs, false);
00058   
00059   // Save the format state of the original std::cout.
00060   Teuchos::oblackholestream oldFormatState;
00061   oldFormatState.copyfmt(std::cout);
00062   
00063   *outStream \
00064     << "===============================================================================\n" \
00065     << "|                                                                             |\n" \
00066     << "|                           Unit Test FieldContainer                          |\n" \
00067     << "|                                                                             |\n" \
00068     << "|     1) Value accesss by multi-index and enumeration, setting values         |\n" \
00069     << "|                                                                             |\n" \
00070     << "|  Questions? Contact  Pavel Bochev (pbboche@sandia.gov) or                   |\n" \
00071     << "|                      Denis Ridzal (dridzal@sandia.gov).                     |\n" \
00072     << "|                                                                             |\n" \
00073     << "|  Intrepid's website: http://trilinos.sandia.gov/packages/intrepid           |\n" \
00074     << "|  Trilinos website:   http://trilinos.sandia.gov                             |\n" \
00075     << "|                                                                             |\n" \
00076     << "===============================================================================\n";
00077   
00078   int errorFlag  = 0;
00079   
00080   // Define variables to construct and use FieldContainer:
00081   Teuchos::Array<double> dataArray;
00082   Teuchos::Array<int> dimension;
00083   Teuchos::Array<int> multiIndex;
00084   int dim0, dim1, dim2, dim3, dim4;
00085   int containerSize;
00086   int containerRank;
00087   int dataSize;
00088   int counter;
00089   
00090 
00091   *outStream \
00092     << "\n"
00093     << "===============================================================================\n"\
00094     << "| TEST 1: Rank-1 FieldContainer                                               |\n"\
00095     << "===============================================================================\n";
00096   
00097   // Adjust for rank-1 containers
00098   dimension.resize(1);
00099   multiIndex.resize(1);
00100   dim0 = 267; 
00101   
00102   // Set dimensions
00103   dimension[0] = dim0;
00104   
00105   // Define Teuchos::Array with dimension equal to FieldContainer capacity (determined from dimension)
00106   dataSize = dimension[0];
00107   dataArray.resize(dataSize);
00108   
00109   // Fill with data
00110   counter = 0;
00111   for(int i=0; i < dimension[0]; i++){
00112     dataArray[counter] = (double)counter;
00113     counter++;
00114   }
00115   
00116   *outStream \
00117     << "\n"
00118     << "===============================================================================\n"\
00119     << "| TEST 1-a: Compare constructors with array and list of dimensions            |\n"\
00120     << "===============================================================================\n";
00121   try{
00122     
00123     // Using ctor with array of dimensions and array of data
00124     FieldContainer<double> rank1Container(dimension, dataArray);
00125     
00126     // Using ctor with list of dimensions and no data
00127     FieldContainer<double> rank1ContainerAlt(dim0);
00128     
00129     // Initialize variables
00130     containerSize = rank1Container.size();
00131     containerRank = rank1Container.rank();
00132     multiIndex.resize(containerRank);
00133     
00134     if( rank1Container.size() != rank1ContainerAlt.size() ) {
00135       errorFlag++;
00136       *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00137       *outStream << " Size using ctor with array of dimensions = " << rank1Container.size() << "\n";
00138       *outStream << " Size using ctor with list of dimensions  = " << rank1ContainerAlt.size() << "\n";
00139     }
00140     
00141     if( rank1Container.rank() != rank1ContainerAlt.rank() ) {
00142       errorFlag++;
00143       *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00144       *outStream << " Rank using ctor with array of dimensions = " << rank1Container.rank() << "\n";
00145       *outStream << " Rank using ctor with list of dimensions  = " << rank1ContainerAlt.rank() << "\n";
00146     }
00147     
00148     for(int dim = 0; dim < rank1Container.rank(); dim ++ ) {
00149       if( rank1Container.dimension(dim) != rank1ContainerAlt.dimension(dim) ) {
00150         errorFlag++;
00151         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00152         *outStream << " Dimension " << dim << " using ctor with array of dimensions = " << rank1Container.dimension(dim) << "\n";
00153         *outStream << " Dimension " << dim << " using ctor with list of dimensions  = " << rank1ContainerAlt.dimension(dim) << "\n";
00154       }
00155     }
00156     
00157     *outStream \
00158       << "\n"
00159       << "===============================================================================\n"\
00160       << "| TEST 1-b: Access by enumeration, multi-index array and multi-index list     |\n"\
00161       << "===============================================================================\n";
00162     
00163     // Loop over container by enumeration
00164     for(int enumeration = 0; enumeration < containerSize; enumeration++) {
00165       int i0;
00166       
00167       // Convert enumeration to multi-index array and multi-index list and compare values
00168       rank1Container.getMultiIndex(multiIndex, enumeration);
00169       rank1Container.getMultiIndex(i0, enumeration);
00170       if( (multiIndex[0] != i0) ) {
00171         errorFlag++;
00172         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00173         *outStream << " Multi-index as array = [" 
00174           << multiIndex[0] << "]\n";
00175         *outStream << " Multi-index as list  = (" << i0 << ")\n";
00176       }      
00177       
00178       // Check if access by enumeration gives the same value as access by multi-index array
00179       if( rank1Container[enumeration] != rank1Container.getValue(multiIndex) ) {
00180         errorFlag++;
00181         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00182         *outStream << " Value by enumeration       = " << rank1Container[enumeration] << "\n";
00183         *outStream << " Value by multi-index array = " << rank1Container.getValue(multiIndex) << "\n";
00184       }
00185       
00186       // Check if access by multi-index list gives the same value as access by multi-index array
00187       if( rank1Container(i0) != rank1Container.getValue(multiIndex) ) {
00188         errorFlag++;
00189         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00190         *outStream << " Value by multi-index list  = " << rank1Container(i0) << "\n";
00191         *outStream << " Value by multi-index array = " << rank1Container.getValue(multiIndex) << "\n";
00192       }
00193       
00194       // Check if access by multi-index list gives the same value as access by [] (only for rank-1!)
00195       if( rank1Container(i0) != rank1Container[i0] ) {
00196         errorFlag++;
00197         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00198         *outStream << " Value by multi-index list  = " << rank1Container(i0) << "\n";
00199         *outStream << " Value by overloaded []     = " << rank1Container[i0] << "\n";
00200       }
00201     }
00202     
00203     *outStream \
00204       << "\n"
00205       << "===============================================================================\n"\
00206       << "| TEST 1-c: Access by multi-index array and list & compare with data array    |\n"\
00207       << "===============================================================================\n";
00208     
00209     // Loop over container by multi-index
00210     for(int i=0; i < dimension[0]; i++){
00211       multiIndex[0] = i;
00212       
00213       // Method that takes array of multi-indices
00214       int enumeration = rank1Container.getEnumeration(multiIndex);
00215       
00216       // Compare with method that takes a list of multi-indices
00217       if( enumeration != rank1Container.getEnumeration(i) ) {
00218         errorFlag++;
00219         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00220         *outStream << " Enumeration from multi-index array  = " << enumeration << "\n";
00221         *outStream << " Enumeration from multi-index list   = " << rank1Container.getEnumeration(i) << "\n";
00222       }
00223       
00224       // Check if access by multi-index array matches values in original dataArray 
00225       if(dataArray[enumeration] != rank1Container.getValue(multiIndex)) {
00226         errorFlag++;
00227         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00228         *outStream << " Value by multi-index array = " << rank1Container.getValue(multiIndex) << "\n";
00229         *outStream << " Value from data array      = " << dataArray[enumeration] << "\n";
00230       }
00231       
00232       // Check if access by multi-index list matches values in original dataArray
00233       if(dataArray[enumeration] != rank1Container(i)) {
00234         errorFlag++;
00235         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00236         *outStream << " Value by multi-index list = " << rank1Container(i) << "\n";
00237         *outStream << " Value from data array     = " << dataArray[enumeration] << "\n";
00238       }
00239       
00240       // Check if access by multi-index array matches access by multi-index list
00241       if( rank1Container(i) != rank1Container.getValue(multiIndex)) {
00242         errorFlag++;
00243         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00244         *outStream << " Value by multi-index array = " << rank1Container.getValue(multiIndex) << "\n";
00245         *outStream << " Value by multi-index list  = " << rank1Container(i) << "\n";
00246       }
00247     }
00248     
00249     *outStream \
00250       << "\n"
00251       << "===============================================================================\n"\
00252       << "| TEST 1-d: Store zeroes and empty container                                  |\n"\
00253       << "===============================================================================\n";
00254     
00255     rank1Container.initialize();
00256     double sum = 0.0;
00257     for (int i=0; i<rank1Container.size(); i++) {
00258       sum += rank1Container[i];
00259     }
00260     if( (sum != 0.0) ) {
00261       errorFlag++;
00262       *outStream << " Container size = " << rank1Container.size() << "\n";
00263       *outStream << " Container rank = " << rank1Container.rank() << "\n";      
00264     }
00265     
00266     rank1Container.clear();
00267     if( !(rank1Container.size() == 0 && rank1Container.rank() == 0)) {
00268       errorFlag++;
00269       *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00270       *outStream << " Container size = " << rank1Container.size() << "\n";
00271       *outStream << " Container rank = " << rank1Container.rank() << "\n";
00272     }
00273   } //try 
00274   
00275   catch (std::logic_error err) {
00276     *outStream << err.what() << "\n";
00277     errorFlag = -1000;
00278   };
00279   
00280   
00281   *outStream \
00282     << "\n"
00283     << "===============================================================================\n"\
00284     << "| TEST 2: Rank-2 FieldContainer                                               |\n"\
00285     << "===============================================================================\n";
00286   
00287   // Adjust for rank-2 containers
00288   dimension.resize(2);
00289   multiIndex.resize(2);
00290   dim0 = 1; 
00291   dim1 = 55; 
00292   
00293   // Set dimensions
00294   dimension[0] = dim0;
00295   dimension[1] = dim1;
00296   
00297   // Define Teuchos::Array with dimension equal to FieldContainer capacity (determined from dimension)
00298   dataSize = dimension[0];
00299   for(int r = 1; r < (int)dimension.size(); r++){
00300     dataSize *= dimension[r];
00301   }
00302   dataArray.resize(dataSize);
00303   
00304   // Fill with data
00305   counter = 0;
00306   for(int i=0; i < dimension[0]; i++){
00307     for(int j=0; j < dimension[1]; j++){
00308       dataArray[counter] = (double)counter;
00309       counter++;
00310     }
00311   }
00312   
00313   *outStream \
00314     << "\n"
00315     << "===============================================================================\n"\
00316     << "| TEST 2-a: Compare constructors with array and list of dimensions            |\n"\
00317     << "===============================================================================\n";
00318   try{
00319     
00320     // Using ctor with array of dimensions and array of data
00321     FieldContainer<double> rank2Container(dimension, dataArray);
00322     
00323     // Using ctor with list of dimensions and no data
00324     FieldContainer<double> rank2ContainerAlt(dim0, dim1);
00325     
00326     // Initialize variables
00327     containerSize = rank2Container.size();
00328     containerRank = rank2Container.rank();
00329     multiIndex.resize(containerRank);
00330     
00331     if( rank2Container.size() != rank2ContainerAlt.size() ) {
00332       errorFlag++;
00333       *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00334       *outStream << " Size using ctor with array of dimensions = " << rank2Container.size() << "\n";
00335       *outStream << " Size using ctor with list of dimensions  = " << rank2ContainerAlt.size() << "\n";
00336     }
00337     
00338     if( rank2Container.rank() != rank2ContainerAlt.rank() ) {
00339       errorFlag++;
00340       *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00341       *outStream << " Rank using ctor with array of dimensions = " << rank2Container.rank() << "\n";
00342       *outStream << " Rank using ctor with list of dimensions  = " << rank2ContainerAlt.rank() << "\n";
00343     }
00344     
00345     for(int dim = 0; dim < rank2Container.rank(); dim ++ ) {
00346       if( rank2Container.dimension(dim) != rank2ContainerAlt.dimension(dim) ) {
00347         errorFlag++;
00348         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00349         *outStream << " Dimension " << dim << " using ctor with array of dimensions = " << rank2Container.dimension(dim) << "\n";
00350         *outStream << " Dimension " << dim << " using ctor with list of dimensions  = " << rank2ContainerAlt.dimension(dim) << "\n";
00351       }
00352     }
00353     
00354     *outStream \
00355       << "\n"
00356       << "===============================================================================\n"\
00357       << "| TEST 2-b: Access by enumeration, multi-index array and multi-index list     |\n"\
00358       << "===============================================================================\n";
00359     
00360     // Loop over container by enumeration
00361     for(int enumeration = 0; enumeration < containerSize; enumeration++) {
00362       int i0,i1;
00363       
00364       // Convert enumeration to multi-index array and multi-index list and compare values
00365       rank2Container.getMultiIndex(multiIndex, enumeration);
00366       rank2Container.getMultiIndex(i0, i1, enumeration);
00367       if( (multiIndex[0] != i0) ||
00368           (multiIndex[1] != i1) ) {
00369         errorFlag++;
00370         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00371         *outStream << " Multi-index as array = [" 
00372           << multiIndex[0] << multiIndex[1] << "]\n";
00373         *outStream << " Multi-index as list  = (" << i0 << "," << i1  << ")\n";
00374       }      
00375       
00376       // Check if access by enumeration gives the same value as access by multi-index array
00377       if( rank2Container[enumeration] != rank2Container.getValue(multiIndex) ) {
00378         errorFlag++;
00379         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00380         *outStream << " Value by enumeration       = " << rank2Container[enumeration] << "\n";
00381         *outStream << " Value by multi-index array = " << rank2Container.getValue(multiIndex) << "\n";
00382       }
00383       
00384       // Check if access by multi-index list gives the same value as access by multi-index array
00385       if( rank2Container(i0,i1) != rank2Container.getValue(multiIndex) ) {
00386         errorFlag++;
00387         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00388         *outStream << " Value by multi-index list  = " << rank2Container(i0,i1) << "\n";
00389         *outStream << " Value by multi-index array = " << rank2Container.getValue(multiIndex) << "\n";
00390       }
00391     }
00392     
00393     *outStream \
00394       << "\n"
00395       << "===============================================================================\n"\
00396       << "| TEST 2-c: Access by multi-index array and list & compare with data array    |\n"\
00397       << "===============================================================================\n";
00398     
00399     // Loop over container by multi-index
00400     for(int i=0; i < dimension[0]; i++){
00401       multiIndex[0] = i;
00402       for(int j=0; j < dimension[1]; j++){
00403         multiIndex[1] = j;
00404         
00405         // Method that takes array of multi-indices
00406         int enumeration = rank2Container.getEnumeration(multiIndex);
00407         
00408         // Compare with method that takes a list of multi-indices
00409         if( enumeration != rank2Container.getEnumeration(i,j) ) {
00410           errorFlag++;
00411           *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00412           *outStream << " Enumeration from multi-index array  = " << enumeration << "\n";
00413           *outStream << " Enumeration from multi-index list   = " << rank2Container.getEnumeration(i,j) << "\n";
00414         }
00415         
00416         // Check if access by multi-index array matches values in original dataArray 
00417         if(dataArray[enumeration] != rank2Container.getValue(multiIndex)) {
00418           errorFlag++;
00419           *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00420           *outStream << " Value by multi-index array = " << rank2Container.getValue(multiIndex) << "\n";
00421           *outStream << " Value from data array      = " << dataArray[enumeration] << "\n";
00422         }
00423         
00424         // Check if access by multi-index list matches values in original dataArray
00425         if(dataArray[enumeration] != rank2Container(i,j)) {
00426           errorFlag++;
00427           *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00428           *outStream << " Value by multi-index list = " << rank2Container(i,j) << "\n";
00429           *outStream << " Value from data array     = " << dataArray[enumeration] << "\n";
00430         }
00431         
00432         // Check if access by multi-index array matches access by multi-index list
00433         if( rank2Container(i,j) != rank2Container.getValue(multiIndex)) {
00434           errorFlag++;
00435           *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00436           *outStream << " Value by multi-index array = " << rank2Container.getValue(multiIndex) << "\n";
00437           *outStream << " Value by multi-index list  = " << rank2Container(i,j) << "\n";
00438         }
00439       }
00440     }
00441     
00442     *outStream \
00443       << "\n"
00444       << "===============================================================================\n"\
00445       << "| TEST 2-d: Store zeroes and empty container                                  |\n"\
00446       << "===============================================================================\n";
00447     
00448     rank2Container.initialize();
00449     double sum = 0.0;
00450     for (int i=0; i<rank2Container.size(); i++) {
00451       sum += rank2Container[i];
00452     }
00453     if( (sum != 0.0) ) {
00454       errorFlag++;
00455       *outStream << " Container size = " << rank2Container.size() << "\n";
00456       *outStream << " Container rank = " << rank2Container.rank() << "\n";      
00457     }
00458     
00459     rank2Container.clear();
00460     if( !(rank2Container.size() == 0 && rank2Container.rank() == 0)) {
00461       errorFlag++;
00462       *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00463       *outStream << " Container size = " << rank2Container.size() << "\n";
00464       *outStream << " Container rank = " << rank2Container.rank() << "\n";
00465     }
00466   } //try 
00467   
00468   catch (std::logic_error err) {
00469     *outStream << err.what() << "\n";
00470     errorFlag = -1000;
00471   };
00472   
00473   
00474   
00475   *outStream \
00476     << "\n"
00477     << "===============================================================================\n"\
00478     << "| TEST 3: Rank-3 FieldContainer                                               |\n"\
00479     << "===============================================================================\n";
00480   
00481   // Adjust for rank-3 containers
00482   dimension.resize(3);
00483   multiIndex.resize(3);
00484   dim0 = 17; 
00485   dim1 = 55; 
00486   dim2 = 10; 
00487   
00488   // Set dimensions
00489   dimension[0] = dim0;
00490   dimension[1] = dim1;
00491   dimension[2] = dim2;
00492   
00493   // Define Teuchos::Array with dimension equal to FieldContainer capacity (determined from dimension)
00494   dataSize = dimension[0];
00495   for(int r = 1; r < (int)dimension.size(); r++){
00496     dataSize *= dimension[r];
00497   }
00498   dataArray.resize(dataSize);
00499   
00500   // Fill with data
00501   counter = 0;
00502   for(int i=0; i < dimension[0]; i++){
00503     for(int j=0; j < dimension[1]; j++){
00504       for(int k=0; k < dimension[2]; k++){
00505         dataArray[counter] = (double)counter;
00506         counter++;
00507       }
00508     }
00509   }
00510   
00511   *outStream \
00512     << "\n"
00513     << "===============================================================================\n"\
00514     << "| TEST 3-a: Compare constructors with array and list of dimensions            |\n"\
00515     << "===============================================================================\n";
00516   try{
00517     
00518     // Using ctor with array of dimensions and array of data
00519     FieldContainer<double> rank3Container(dimension, dataArray);
00520     
00521     // Using ctor with list of dimensions and no data
00522     FieldContainer<double> rank3ContainerAlt(dim0, dim1, dim2);
00523     
00524     // Initialize variables
00525     containerSize = rank3Container.size();
00526     containerRank = rank3Container.rank();
00527     multiIndex.resize(containerRank);
00528     
00529     if( rank3Container.size() != rank3ContainerAlt.size() ) {
00530       errorFlag++;
00531       *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00532       *outStream << " Size using ctor with array of dimensions = " << rank3Container.size() << "\n";
00533       *outStream << " Size using ctor with list of dimensions  = " << rank3ContainerAlt.size() << "\n";
00534     }
00535     
00536     if( rank3Container.rank() != rank3ContainerAlt.rank() ) {
00537       errorFlag++;
00538       *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00539       *outStream << " Rank using ctor with array of dimensions = " << rank3Container.rank() << "\n";
00540       *outStream << " Rank using ctor with list of dimensions  = " << rank3ContainerAlt.rank() << "\n";
00541     }
00542     
00543     for(int dim = 0; dim < rank3Container.rank(); dim ++ ) {
00544       if( rank3Container.dimension(dim) != rank3ContainerAlt.dimension(dim) ) {
00545         errorFlag++;
00546         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00547         *outStream << " Dimension " << dim << " using ctor with array of dimensions = " << rank3Container.dimension(dim) << "\n";
00548         *outStream << " Dimension " << dim << " using ctor with list of dimensions  = " << rank3ContainerAlt.dimension(dim) << "\n";
00549       }
00550     }
00551     
00552     *outStream \
00553       << "\n"
00554       << "===============================================================================\n"\
00555       << "| TEST 3-b: Access by enumeration, multi-index array and multi-index list     |\n"\
00556       << "===============================================================================\n";
00557     
00558     // Loop over container by enumeration
00559     for(int enumeration = 0; enumeration < containerSize; enumeration++) {
00560       int i0,i1,i2;
00561       
00562       // Convert enumeration to multi-index array and multi-index list and compare values
00563       rank3Container.getMultiIndex(multiIndex, enumeration);
00564       rank3Container.getMultiIndex(i0, i1, i2, enumeration);
00565       if( (multiIndex[0] != i0) ||
00566           (multiIndex[1] != i1) ||
00567           (multiIndex[2] != i2) ) {
00568         errorFlag++;
00569         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00570         *outStream << " Multi-index as array = [" 
00571           << multiIndex[0] << multiIndex[1] << multiIndex[2]  << "]\n";
00572         *outStream << " Multi-index as list  = (" << i0 << "," << i1 << "," << i2 << ")\n";
00573       }      
00574       
00575       // Check if access by enumeration gives the same value as access by multi-index array
00576       if( rank3Container[enumeration] != rank3Container.getValue(multiIndex) ) {
00577         errorFlag++;
00578         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00579         *outStream << " Value by enumeration       = " << rank3Container[enumeration] << "\n";
00580         *outStream << " Value by multi-index array = " << rank3Container.getValue(multiIndex) << "\n";
00581       }
00582       
00583       // Check if access by multi-index list gives the same value as access by multi-index array
00584       if( rank3Container(i0,i1,i2) != rank3Container.getValue(multiIndex) ) {
00585         errorFlag++;
00586         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00587         *outStream << " Value by multi-index list  = " << rank3Container(i0,i1,i2) << "\n";
00588         *outStream << " Value by multi-index array = " << rank3Container.getValue(multiIndex) << "\n";
00589       }
00590     }
00591     
00592     *outStream \
00593       << "\n"
00594       << "===============================================================================\n"\
00595       << "| TEST 3-c: Access by multi-index array and list & compare with data array    |\n"\
00596       << "===============================================================================\n";
00597     
00598     // Loop over container by multi-index
00599     for(int i=0; i < dimension[0]; i++){
00600       multiIndex[0] = i;
00601       for(int j=0; j < dimension[1]; j++){
00602         multiIndex[1] = j;
00603         for(int k=0; k < dimension[2]; k++){
00604           multiIndex[2] = k; 
00605           
00606           // Method that takes array of multi-indices
00607           int enumeration = rank3Container.getEnumeration(multiIndex);
00608           
00609           // Compare with method that takes a list of multi-indices
00610           if( enumeration != rank3Container.getEnumeration(i,j,k) ) {
00611             errorFlag++;
00612             *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00613             *outStream << " Enumeration from multi-index array  = " << enumeration << "\n";
00614             *outStream << " Enumeration from multi-index list   = " << rank3Container.getEnumeration(i,j,k) << "\n";
00615           }
00616           
00617           // Check if access by multi-index array matches values in original dataArray 
00618           if(dataArray[enumeration] != rank3Container.getValue(multiIndex)) {
00619             errorFlag++;
00620             *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00621             *outStream << " Value by multi-index array = " << rank3Container.getValue(multiIndex) << "\n";
00622             *outStream << " Value from data array      = " << dataArray[enumeration] << "\n";
00623           }
00624           
00625           // Check if access by multi-index list matches values in original dataArray
00626           if(dataArray[enumeration] != rank3Container(i,j,k)) {
00627             errorFlag++;
00628             *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00629             *outStream << " Value by multi-index list = " << rank3Container(i,j,k) << "\n";
00630             *outStream << " Value from data array     = " << dataArray[enumeration] << "\n";
00631           }
00632           
00633           // Check if access by multi-index array matches access by multi-index list
00634           if( rank3Container(i,j,k) != rank3Container.getValue(multiIndex)) {
00635             errorFlag++;
00636             *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00637             *outStream << " Value by multi-index array = " << rank3Container.getValue(multiIndex) << "\n";
00638             *outStream << " Value by multi-index list  = " << rank3Container(i,j,k) << "\n";
00639           }
00640         }
00641       }
00642     }
00643     
00644     *outStream \
00645       << "\n"
00646       << "===============================================================================\n"\
00647       << "| TEST 3-d: Store zeroes and empty container                                  |\n"\
00648       << "===============================================================================\n";
00649     
00650     rank3Container.initialize();
00651     double sum = 0.0;
00652     for (int i=0; i<rank3Container.size(); i++) {
00653       sum += rank3Container[i];
00654     }
00655     if( (sum != 0.0) ) {
00656       errorFlag++;
00657       *outStream << " Container size = " << rank3Container.size() << "\n";
00658       *outStream << " Container rank = " << rank3Container.rank() << "\n";      
00659     }
00660     
00661     rank3Container.clear();
00662     if( !(rank3Container.size() == 0 && rank3Container.rank() == 0)) {
00663       errorFlag++;
00664       *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00665       *outStream << " Container size = " << rank3Container.size() << "\n";
00666       *outStream << " Container rank = " << rank3Container.rank() << "\n";
00667     }
00668   } //try 
00669   
00670   catch (std::logic_error err) {
00671     *outStream << err.what() << "\n";
00672     errorFlag = -1000;
00673   };
00674   
00675 
00676   
00677   *outStream \
00678     << "\n"
00679     << "===============================================================================\n"\
00680     << "| TEST 4: Rank-4 FieldContainer                                               |\n"\
00681     << "===============================================================================\n";
00682   
00683   // Adjust for rank-4 containers
00684   dimension.resize(4);
00685   multiIndex.resize(4);
00686   dim0 = 27; 
00687   dim1 = 4; 
00688   dim2 = 11; 
00689   dim3 = 6; 
00690     
00691   // Set dimensions
00692   dimension[0] = dim0;
00693   dimension[1] = dim1;
00694   dimension[2] = dim2;
00695   dimension[3] = dim3;
00696   
00697   // Define Teuchos::Array with dimension equal to FieldContainer capacity (determined from dimension)
00698   dataSize = dimension[0];
00699   for(int r = 1; r < (int)dimension.size(); r++){
00700     dataSize *= dimension[r];
00701   }
00702   dataArray.resize(dataSize);
00703   
00704   // Fill with data
00705   counter = 0;
00706   for(int i=0; i < dimension[0]; i++){
00707     for(int j=0; j < dimension[1]; j++){
00708       for(int k=0; k < dimension[2]; k++){
00709         for(int l = 0; l < dimension[3]; l++){
00710           dataArray[counter] = (double)counter;
00711           counter++;
00712         }
00713       }
00714     }
00715   }
00716   
00717   *outStream \
00718     << "\n"
00719     << "===============================================================================\n"\
00720     << "| TEST 4-a: Compare constructors with array and list of dimensions            |\n"\
00721     << "===============================================================================\n";
00722   try{
00723     
00724     // Using ctor with array of dimensions and array of data
00725     FieldContainer<double> rank4Container(dimension, dataArray);
00726     
00727     // Using ctor with list of dimensions and no data
00728     FieldContainer<double> rank4ContainerAlt(dim0, dim1, dim2, dim3);
00729     
00730     // Initialize variables
00731     containerSize = rank4Container.size();
00732     containerRank = rank4Container.rank();
00733     multiIndex.resize(containerRank);
00734     
00735     if( rank4Container.size() != rank4ContainerAlt.size() ) {
00736       errorFlag++;
00737       *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00738       *outStream << " Size using ctor with array of dimensions = " << rank4Container.size() << "\n";
00739       *outStream << " Size using ctor with list of dimensions  = " << rank4ContainerAlt.size() << "\n";
00740     }
00741     
00742     if( rank4Container.rank() != rank4ContainerAlt.rank() ) {
00743       errorFlag++;
00744       *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00745       *outStream << " Rank using ctor with array of dimensions = " << rank4Container.rank() << "\n";
00746       *outStream << " Rank using ctor with list of dimensions  = " << rank4ContainerAlt.rank() << "\n";
00747     }
00748     
00749     for(int dim = 0; dim < rank4Container.rank(); dim ++ ) {
00750       if( rank4Container.dimension(dim) != rank4ContainerAlt.dimension(dim) ) {
00751         errorFlag++;
00752         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00753         *outStream << " Dimension " << dim << " using ctor with array of dimensions = " << rank4Container.dimension(dim) << "\n";
00754         *outStream << " Dimension " << dim << " using ctor with list of dimensions  = " << rank4ContainerAlt.dimension(dim) << "\n";
00755       }
00756     }
00757     
00758     *outStream \
00759       << "\n"
00760       << "===============================================================================\n"\
00761       << "| TEST 4-b: Access by enumeration, multi-index array and multi-index list     |\n"\
00762       << "===============================================================================\n";
00763     
00764     // Loop over container by enumeration
00765     for(int enumeration = 0; enumeration < containerSize; enumeration++) {
00766       int i0,i1,i2,i3;
00767       
00768       // Convert enumeration to multi-index array and multi-index list and compare values
00769       rank4Container.getMultiIndex(multiIndex, enumeration);
00770       rank4Container.getMultiIndex(i0, i1, i2, i3, enumeration);
00771       if( (multiIndex[0] != i0) ||
00772           (multiIndex[1] != i1) ||
00773           (multiIndex[2] != i2) ||
00774           (multiIndex[3] != i3) ) {
00775         errorFlag++;
00776         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00777         *outStream << " Multi-index as array = [" 
00778           << multiIndex[0] << multiIndex[1] << multiIndex[2] << multiIndex[3]  << "]\n";
00779         *outStream << " Multi-index as list  = (" << i0 << "," << i1 << "," << i2 << "," << i3  << ")\n";
00780       }      
00781       
00782       // Check if access by enumeration gives the same value as access by multi-index array
00783       if( rank4Container[enumeration] != rank4Container.getValue(multiIndex) ) {
00784         errorFlag++;
00785         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00786         *outStream << " Value by enumeration       = " << rank4Container[enumeration] << "\n";
00787         *outStream << " Value by multi-index array = " << rank4Container.getValue(multiIndex) << "\n";
00788       }
00789       
00790       // Check if access by multi-index list gives the same value as access by multi-index array
00791       if( rank4Container(i0,i1,i2,i3) != rank4Container.getValue(multiIndex) ) {
00792         errorFlag++;
00793         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00794         *outStream << " Value by multi-index list  = " << rank4Container(i0,i1,i2,i3) << "\n";
00795         *outStream << " Value by multi-index array = " << rank4Container.getValue(multiIndex) << "\n";
00796       }
00797     }
00798     
00799     *outStream \
00800       << "\n"
00801       << "===============================================================================\n"\
00802       << "| TEST 4-c: Access by multi-index array and list & compare with data array    |\n"\
00803       << "===============================================================================\n";
00804     
00805     // Loop over container by multi-index
00806     for(int i=0; i < dimension[0]; i++){
00807       multiIndex[0] = i;
00808       for(int j=0; j < dimension[1]; j++){
00809         multiIndex[1] = j;
00810         for(int k=0; k < dimension[2]; k++){
00811           multiIndex[2] = k; 
00812           for(int l = 0; l < dimension[3]; l++){
00813             multiIndex[3] = l;
00814             
00815             // Method that takes array of multi-indices
00816             int enumeration = rank4Container.getEnumeration(multiIndex);
00817             
00818             // Compare with method that takes a list of multi-indices
00819             if( enumeration != rank4Container.getEnumeration(i,j,k,l) ) {
00820               errorFlag++;
00821               *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00822               *outStream << " Enumeration from multi-index array  = " << enumeration << "\n";
00823               *outStream << " Enumeration from multi-index list   = " << rank4Container.getEnumeration(i,j,k,l) << "\n";
00824             }
00825             
00826             // Check if access by multi-index array matches values in original dataArray 
00827             if(dataArray[enumeration] != rank4Container.getValue(multiIndex)) {
00828               errorFlag++;
00829               *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00830               *outStream << " Value by multi-index array = " << rank4Container.getValue(multiIndex) << "\n";
00831               *outStream << " Value from data array      = " << dataArray[enumeration] << "\n";
00832             }
00833             
00834             // Check if access by multi-index list matches values in original dataArray
00835             if(dataArray[enumeration] != rank4Container(i,j,k,l)) {
00836               errorFlag++;
00837               *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00838               *outStream << " Value by multi-index list = " << rank4Container(i,j,k,l) << "\n";
00839               *outStream << " Value from data array     = " << dataArray[enumeration] << "\n";
00840             }
00841             
00842             // Check if access by multi-index array matches access by multi-index list
00843             if( rank4Container(i,j,k,l) != rank4Container.getValue(multiIndex)) {
00844               errorFlag++;
00845               *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00846               *outStream << " Value by multi-index array = " << rank4Container.getValue(multiIndex) << "\n";
00847               *outStream << " Value by multi-index list  = " << rank4Container(i,j,k,l) << "\n";
00848             }
00849           }
00850         }
00851       }
00852     }
00853     
00854     *outStream \
00855       << "\n"
00856       << "===============================================================================\n"\
00857       << "| TEST 4-d: Store zeroes and empty container                                  |\n"\
00858       << "===============================================================================\n";
00859     
00860     rank4Container.initialize();
00861     double sum = 0.0;
00862     for (int i=0; i<rank4Container.size(); i++) {
00863       sum += rank4Container[i];
00864     }
00865     if( (sum != 0.0) ) {
00866       errorFlag++;
00867       *outStream << " Container size = " << rank4Container.size() << "\n";
00868       *outStream << " Container rank = " << rank4Container.rank() << "\n";      
00869     }
00870     
00871     rank4Container.clear();
00872     if( !(rank4Container.size() == 0 && rank4Container.rank() == 0)) {
00873       errorFlag++;
00874       *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00875       *outStream << " Container size = " << rank4Container.size() << "\n";
00876       *outStream << " Container rank = " << rank4Container.rank() << "\n";
00877     }
00878   } //try 
00879   
00880   catch (std::logic_error err) {
00881     *outStream << err.what() << "\n";
00882     errorFlag = -1000;
00883   };
00884   
00885   
00886   *outStream \
00887     << "\n"
00888     << "===============================================================================\n"\
00889     << "| TEST 5: Rank-5 FieldContainer                                               |\n"\
00890     << "===============================================================================\n";
00891   
00892   // Adjust for rank-5 containers
00893   dimension.resize(5);
00894   multiIndex.resize(5);
00895   dim0 = 3; 
00896   dim1 = 7; 
00897   dim2 = 11; 
00898   dim3 = 5; 
00899   dim4 = 6;
00900   
00901   // Set dimensions
00902   dimension[0] = dim0;
00903   dimension[1] = dim1;
00904   dimension[2] = dim2;
00905   dimension[3] = dim3;
00906   dimension[4] = dim4;
00907   
00908   // Define Teuchos::Array with dimension equal to FieldContainer capacity (determined from dimension)
00909   dataSize = dimension[0];
00910   for(int r = 1; r < (int)dimension.size(); r++){
00911     dataSize *= dimension[r];
00912   }
00913   dataArray.resize(dataSize);
00914   
00915   // Fill with data
00916   counter = 0;
00917   for(int i=0; i < dimension[0]; i++){
00918     for(int j=0; j < dimension[1]; j++){
00919       for(int k=0; k < dimension[2]; k++){
00920         for(int l = 0; l < dimension[3]; l++){
00921           for(int m = 0; m < dimension[4]; m++){
00922             dataArray[counter] = (double)counter;
00923             counter++;
00924           }
00925         }
00926       }
00927     }
00928   }
00929   
00930   *outStream \
00931     << "\n"
00932     << "===============================================================================\n"\
00933     << "| TEST 5-a: Compare constructors with array and list of dimensions            |\n"\
00934     << "===============================================================================\n";
00935   try{
00936     
00937     // Using ctor with array of dimensions and array of data
00938     FieldContainer<double> rank5Container(dimension, dataArray);
00939     
00940     // Using ctor with list of dimensions and no data
00941     FieldContainer<double> rank5ContainerAlt(dim0, dim1, dim2, dim3, dim4);
00942     
00943     // Initialize variables
00944     containerSize = rank5Container.size();
00945     containerRank = rank5Container.rank();
00946     multiIndex.resize(containerRank);
00947     
00948     if( rank5Container.size() != rank5ContainerAlt.size() ) {
00949       errorFlag++;
00950       *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00951       *outStream << " Size using ctor with array of dimensions = " << rank5Container.size() << "\n";
00952       *outStream << " Size using ctor with list of dimensions  = " << rank5ContainerAlt.size() << "\n";
00953     }
00954     
00955     if( rank5Container.rank() != rank5ContainerAlt.rank() ) {
00956       errorFlag++;
00957       *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00958       *outStream << " Rank using ctor with array of dimensions = " << rank5Container.rank() << "\n";
00959       *outStream << " Rank using ctor with list of dimensions  = " << rank5ContainerAlt.rank() << "\n";
00960     }
00961     
00962     for(int dim = 0; dim < rank5Container.rank(); dim ++ ) {
00963       if( rank5Container.dimension(dim) != rank5ContainerAlt.dimension(dim) ) {
00964         errorFlag++;
00965         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00966         *outStream << " Dimension " << dim << " using ctor with array of dimensions = " << rank5Container.dimension(dim) << "\n";
00967         *outStream << " Dimension " << dim << " using ctor with list of dimensions  = " << rank5ContainerAlt.dimension(dim) << "\n";
00968       }
00969     }
00970     
00971     *outStream \
00972       << "\n"
00973       << "===============================================================================\n"\
00974       << "| TEST 5-b: Access by enumeration, multi-index array and multi-index list     |\n"\
00975       << "===============================================================================\n";
00976     
00977     // Loop over container by enumeration
00978     for(int enumeration = 0; enumeration < containerSize; enumeration++) {
00979       int i0,i1,i2,i3,i4;
00980       
00981       // Convert enumeration to multi-index array and multi-index list and compare values
00982       rank5Container.getMultiIndex(multiIndex, enumeration);
00983       rank5Container.getMultiIndex(i0, i1, i2, i3, i4, enumeration);
00984       if( (multiIndex[0] != i0) ||
00985           (multiIndex[1] != i1) ||
00986           (multiIndex[2] != i2) ||
00987           (multiIndex[3] != i3) ||
00988           (multiIndex[4] != i4) ) {
00989         errorFlag++;
00990         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
00991         *outStream << " Multi-index as array = [" 
00992           << multiIndex[0] << multiIndex[1] << multiIndex[2] << multiIndex[3] << multiIndex[4] << "]\n";
00993         *outStream << " Multi-index as list  = (" << i0 << "," << i1 << "," << i2 << "," << i3 << "," << i4 << ")\n";
00994       }      
00995       
00996       // Check if access by enumeration gives the same value as access by multi-index array
00997       if( rank5Container[enumeration] != rank5Container.getValue(multiIndex) ) {
00998         errorFlag++;
00999         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
01000         *outStream << " Value by enumeration       = " << rank5Container[enumeration] << "\n";
01001         *outStream << " Value by multi-index array = " << rank5Container.getValue(multiIndex) << "\n";
01002       }
01003       
01004       // Check if access by multi-index list gives the same value as access by multi-index array
01005       if( rank5Container(i0,i1,i2,i3,i4) != rank5Container.getValue(multiIndex) ) {
01006         errorFlag++;
01007         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
01008         *outStream << " Value by multi-index list  = " << rank5Container(i0,i1,i2,i3,i4) << "\n";
01009         *outStream << " Value by multi-index array = " << rank5Container.getValue(multiIndex) << "\n";
01010       }
01011     }
01012     
01013     *outStream \
01014       << "\n"
01015       << "===============================================================================\n"\
01016       << "| TEST 5-c: Access by multi-index array and list & compare with data array    |\n"\
01017       << "===============================================================================\n";
01018     
01019     // Loop over container by multi-index
01020     for(int i=0; i < dimension[0]; i++){
01021       multiIndex[0] = i;
01022       for(int j=0; j < dimension[1]; j++){
01023         multiIndex[1] = j;
01024         for(int k=0; k < dimension[2]; k++){
01025           multiIndex[2] = k; 
01026           for(int l = 0; l < dimension[3]; l++){
01027             multiIndex[3] = l;
01028             for(int m = 0; m < dimension[4]; m++){
01029               multiIndex[4] = m;
01030               
01031               // Method that takes array of multi-indices
01032               int enumeration = rank5Container.getEnumeration(multiIndex);
01033               
01034               // Compare with method that takes a list of multi-indices
01035               if( enumeration != rank5Container.getEnumeration(i,j,k,l,m) ) {
01036                 errorFlag++;
01037                 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
01038                 *outStream << " Enumeration from multi-index array  = " << enumeration << "\n";
01039                 *outStream << " Enumeration from multi-index list   = " << rank5Container.getEnumeration(i,j,k,l,m) << "\n";
01040               }
01041               
01042               // Check if access by multi-index array matches values in original dataArray 
01043               if(dataArray[enumeration] != rank5Container.getValue(multiIndex)) {
01044                 errorFlag++;
01045                 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
01046                 *outStream << " Value by multi-index array = " << rank5Container.getValue(multiIndex) << "\n";
01047                 *outStream << " Value from data array      = " << dataArray[enumeration] << "\n";
01048               }
01049               
01050               // Check if access by multi-index list matches values in original dataArray
01051               if(dataArray[enumeration] != rank5Container(i,j,k,l,m)) {
01052                 errorFlag++;
01053                 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
01054                 *outStream << " Value by multi-index list = " << rank5Container(i,j,k,l,m) << "\n";
01055                 *outStream << " Value from data array     = " << dataArray[enumeration] << "\n";
01056               }
01057               
01058               // Check if access by multi-index array matches access by multi-index list
01059               if( rank5Container(i,j,k,l,m) != rank5Container.getValue(multiIndex)) {
01060                 errorFlag++;
01061                 *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
01062                 *outStream << " Value by multi-index array = " << rank5Container.getValue(multiIndex) << "\n";
01063                 *outStream << " Value by multi-index list  = " << rank5Container(i,j,k,l,m) << "\n";
01064               }
01065             }
01066           }
01067         }
01068       }
01069     }
01070     
01071     *outStream \
01072       << "\n"
01073       << "===============================================================================\n"\
01074       << "| TEST 5-d: Store zeroes and empty container                                  |\n"\
01075       << "===============================================================================\n";
01076     
01077     rank5Container.initialize();
01078     double sum = 0.0;
01079     for (int i=0; i<rank5Container.size(); i++) {
01080       sum += rank5Container[i];
01081     }
01082     if( (sum != 0.0) ) {
01083       errorFlag++;
01084       *outStream << " Container size = " << rank5Container.size() << "\n";
01085       *outStream << " Container rank = " << rank5Container.rank() << "\n";      
01086     }
01087     
01088     rank5Container.clear();
01089     if( !(rank5Container.size() == 0 && rank5Container.rank() == 0)) {
01090       errorFlag++;
01091       *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
01092       *outStream << " Container size = " << rank5Container.size() << "\n";
01093       *outStream << " Container rank = " << rank5Container.rank() << "\n";
01094     }
01095   } //try 
01096   
01097   catch (std::logic_error err) {
01098     *outStream << err.what() << "\n";
01099     errorFlag = -1000;
01100   };
01101   
01102   *outStream \
01103     << "\n"
01104     << "===============================================================================\n"\
01105     << "| TEST 6: Resize container based on another container                         |\n"\
01106     << "===============================================================================\n";
01107   
01108   try{
01109     FieldContainer<double> myContainer(1,2,3);
01110     FieldContainer<double> hisContainer(5,4,3,2);
01111     
01112     hisContainer.resize(myContainer);
01113     if ( hisContainer.rank() != myContainer.rank() ) {
01114       errorFlag++;
01115       *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
01116       *outStream << " Rank of target container   = " << hisContainer.rank() << "\n";
01117       *outStream << " Rank of argument container = " << myContainer.rank() << "\n";
01118     }
01119     
01120     for(int dim = 0; dim < myContainer.rank(); dim++){
01121       if ( hisContainer.dimension(dim) != myContainer.dimension(dim) ) {
01122         errorFlag++;
01123         *outStream << std::setw(70) << "^^^^----FAILURE!" << "\n";
01124         *outStream << " Dimension " << dim << " of target container   = " << hisContainer.dimension(dim) << "\n";
01125         *outStream << " Dimension " << dim << " of argument container = " << myContainer.dimension(dim) << "\n";
01126       }
01127     }
01128   }// try
01129     
01130     catch (std::logic_error err) {
01131       *outStream << err.what() << "\n";
01132       errorFlag = -1000;
01133     };
01134   
01135   
01136   
01137   
01138   
01139   
01140   if (errorFlag != 0)
01141     std::cout << "End Result: TEST FAILED\n";
01142   else
01143     std::cout << "End Result: TEST PASSED\n";
01144   
01145   // reset format state of std::cout
01146   std::cout.copyfmt(oldFormatState);
01147   
01148   return errorFlag;
01149 }