Intrepid
/usr/src/RPM/BUILD/trilinos10-10.6.4/packages/intrepid/test/Shared/ArrayTools/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 
00035 #include "Intrepid_ArrayTools.hpp"
00036 #include "Intrepid_FieldContainer.hpp"
00037 #include "Intrepid_RealSpaceTools.hpp"
00038 #include "Teuchos_oblackholestream.hpp"
00039 #include "Teuchos_RCP.hpp"
00040 #include "Teuchos_ScalarTraits.hpp"
00041 #include "Teuchos_GlobalMPISession.hpp"
00042 
00043 using namespace std;
00044 using namespace Intrepid;
00045 
00046 #define INTREPID_TEST_COMMAND( S )                                                                                  \
00047 {                                                                                                                   \
00048   try {                                                                                                             \
00049     S ;                                                                                                             \
00050   }                                                                                                                 \
00051   catch (std::logic_error err) {                                                                                    \
00052       *outStream << "Expected Error ----------------------------------------------------------------\n";            \
00053       *outStream << err.what() << '\n';                                                                             \
00054       *outStream << "-------------------------------------------------------------------------------" << "\n\n";    \
00055   };                                                                                                                \
00056 }
00057 
00058 
00059 int main(int argc, char *argv[]) {
00060 
00061   Teuchos::GlobalMPISession mpiSession(&argc, &argv);
00062 
00063   // This little trick lets us print to std::cout only if
00064   // a (dummy) command-line argument is provided.
00065   int iprint     = argc - 1;
00066   Teuchos::RCP<std::ostream> outStream;
00067   Teuchos::oblackholestream bhs; // outputs nothing
00068   if (iprint > 0)
00069     outStream = Teuchos::rcp(&std::cout, false);
00070   else
00071     outStream = Teuchos::rcp(&bhs, false);
00072 
00073   // Save the format state of the original std::cout.
00074   Teuchos::oblackholestream oldFormatState;
00075   oldFormatState.copyfmt(std::cout);
00076 
00077   *outStream \
00078   << "===============================================================================\n" \
00079   << "|                                                                             |\n" \
00080   << "|                       Unit Test (ArrayTools)                                |\n" \
00081   << "|                                                                             |\n" \
00082   << "|     1) Array operations: contractions                                       |\n" \
00083   << "|                                                                             |\n" \
00084   << "|  Questions? Contact  Pavel Bochev (pbboche@sandia.gov) or                   |\n" \
00085   << "|                      Denis Ridzal (dridzal@sandia.gov).                     |\n" \
00086   << "|                                                                             |\n" \
00087   << "|  Intrepid's website: http://trilinos.sandia.gov/packages/intrepid           |\n" \
00088   << "|  Trilinos website:   http://trilinos.sandia.gov                             |\n" \
00089   << "|                                                                             |\n" \
00090   << "===============================================================================\n";
00091 
00092 
00093   int errorFlag = 0;
00094 #ifdef HAVE_INTREPID_DEBUG
00095   int beginThrowNumber = TestForException_getThrowNumber();
00096   int endThrowNumber = beginThrowNumber + 81;
00097 #endif
00098 
00099   typedef ArrayTools art; 
00100   typedef RealSpaceTools<double> rst; 
00101 #ifdef HAVE_INTREPID_DEBUG
00102   ArrayTools atools;
00103 #endif
00104 
00105   *outStream \
00106   << "\n"
00107   << "===============================================================================\n"\
00108   << "| TEST 1: exceptions                                                          |\n"\
00109   << "===============================================================================\n";
00110 
00111   try{
00112 
00113 #ifdef HAVE_INTREPID_DEBUG
00114     FieldContainer<double> a_2_2(2, 2);
00115     FieldContainer<double> a_10_2(10, 2);
00116     FieldContainer<double> a_10_3(10, 3);
00117     FieldContainer<double> a_10_2_2(10, 2, 2);
00118     FieldContainer<double> a_10_2_3(10, 2, 3);
00119     FieldContainer<double> a_10_3_2(10, 3, 2);
00120     FieldContainer<double> a_9_2_2(9, 2, 2);
00121 
00122     *outStream << "-> contractFieldFieldScalar:\n";
00123     INTREPID_TEST_COMMAND( atools.contractFieldFieldScalar<double>(a_2_2, a_2_2, a_2_2, COMP_CPP) );
00124     INTREPID_TEST_COMMAND( atools.contractFieldFieldScalar<double>(a_2_2, a_10_2_2, a_2_2, COMP_CPP) );
00125     INTREPID_TEST_COMMAND( atools.contractFieldFieldScalar<double>(a_2_2, a_10_2_2, a_10_2_2, COMP_CPP) );
00126     INTREPID_TEST_COMMAND( atools.contractFieldFieldScalar<double>(a_10_2_2, a_9_2_2, a_10_2_2, COMP_CPP) );
00127     INTREPID_TEST_COMMAND( atools.contractFieldFieldScalar<double>(a_10_2_2, a_10_2_2, a_10_2_3, COMP_CPP) );
00128     INTREPID_TEST_COMMAND( atools.contractFieldFieldScalar<double>(a_9_2_2, a_10_3_2, a_10_2_2, COMP_CPP) );
00129     INTREPID_TEST_COMMAND( atools.contractFieldFieldScalar<double>(a_10_3_2, a_10_2_2, a_10_3_2, COMP_CPP) );
00130     INTREPID_TEST_COMMAND( atools.contractFieldFieldScalar<double>(a_10_2_2, a_10_2_2, a_10_3_2, COMP_CPP) );
00131     INTREPID_TEST_COMMAND( atools.contractFieldFieldScalar<double>(a_10_2_3, a_10_2_2, a_10_3_2, COMP_ENGINE_MAX) );
00132     INTREPID_TEST_COMMAND( atools.contractFieldFieldScalar<double>(a_10_2_3, a_10_2_2, a_10_3_2, COMP_CPP) );
00133 
00134     FieldContainer<double> a_10_2_2_2(10, 2, 2, 2);
00135     FieldContainer<double> a_9_2_2_2(9, 2, 2, 2);
00136     FieldContainer<double> a_10_3_2_2(10, 3, 2, 2);
00137     FieldContainer<double> a_10_2_3_2(10, 2, 3, 2);
00138     FieldContainer<double> a_10_2_2_3(10, 2, 2, 3);
00139 
00140     *outStream << "-> contractFieldFieldVector:\n";
00141     INTREPID_TEST_COMMAND( atools.contractFieldFieldVector<double>(a_2_2, a_2_2, a_2_2, COMP_CPP) );
00142     INTREPID_TEST_COMMAND( atools.contractFieldFieldVector<double>(a_2_2, a_10_2_2_2, a_2_2, COMP_CPP) );
00143     INTREPID_TEST_COMMAND( atools.contractFieldFieldVector<double>(a_2_2, a_10_2_2_2, a_10_2_2_2, COMP_CPP) );
00144     INTREPID_TEST_COMMAND( atools.contractFieldFieldVector<double>(a_10_2_2, a_9_2_2_2, a_10_2_2_2, COMP_CPP) );
00145     INTREPID_TEST_COMMAND( atools.contractFieldFieldVector<double>(a_10_2_2, a_10_2_2_2, a_10_2_3_2, COMP_CPP) );
00146     INTREPID_TEST_COMMAND( atools.contractFieldFieldVector<double>(a_10_2_2, a_10_2_2_2, a_10_2_2_3, COMP_CPP) );
00147     INTREPID_TEST_COMMAND( atools.contractFieldFieldVector<double>(a_9_2_2, a_10_2_2_2, a_10_2_2_2, COMP_CPP) );
00148     INTREPID_TEST_COMMAND( atools.contractFieldFieldVector<double>(a_10_3_2, a_10_2_2_2, a_10_3_2_2, COMP_CPP) );
00149     INTREPID_TEST_COMMAND( atools.contractFieldFieldVector<double>(a_10_2_2, a_10_2_2_2, a_10_3_2_2, COMP_CPP) );
00150     INTREPID_TEST_COMMAND( atools.contractFieldFieldVector<double>(a_10_2_3, a_10_2_2_2, a_10_3_2_2, COMP_ENGINE_MAX) );
00151     INTREPID_TEST_COMMAND( atools.contractFieldFieldVector<double>(a_10_2_3, a_10_2_2_2, a_10_3_2_2, COMP_CPP) );
00152 
00153     FieldContainer<double> a_10_2_2_2_2(10, 2, 2, 2, 2);
00154     FieldContainer<double> a_9_2_2_2_2(9, 2, 2, 2, 2);
00155     FieldContainer<double> a_10_3_2_2_2(10, 3, 2, 2, 2);
00156     FieldContainer<double> a_10_2_3_2_2(10, 2, 3, 2, 2);
00157     FieldContainer<double> a_10_2_2_3_2(10, 2, 2, 3, 2);
00158     FieldContainer<double> a_10_2_2_2_3(10, 2, 2, 2, 3);
00159 
00160     *outStream << "-> contractFieldFieldTensor:\n";
00161     INTREPID_TEST_COMMAND( atools.contractFieldFieldTensor<double>(a_2_2, a_2_2, a_2_2, COMP_CPP) );
00162     INTREPID_TEST_COMMAND( atools.contractFieldFieldTensor<double>(a_2_2, a_10_2_2_2_2, a_2_2, COMP_CPP) );
00163     INTREPID_TEST_COMMAND( atools.contractFieldFieldTensor<double>(a_2_2, a_10_2_2_2_2, a_10_2_2_2_2, COMP_CPP) );
00164     INTREPID_TEST_COMMAND( atools.contractFieldFieldTensor<double>(a_10_2_2, a_9_2_2_2_2, a_10_2_2_2_2, COMP_CPP) );
00165     INTREPID_TEST_COMMAND( atools.contractFieldFieldTensor<double>(a_10_2_2, a_10_2_2_2_2, a_10_2_3_2_2, COMP_CPP) );
00166     INTREPID_TEST_COMMAND( atools.contractFieldFieldTensor<double>(a_10_2_2, a_10_2_2_2_2, a_10_2_2_3_2, COMP_CPP) );
00167     INTREPID_TEST_COMMAND( atools.contractFieldFieldTensor<double>(a_10_2_2, a_10_2_2_2_2, a_10_2_2_2_3, COMP_CPP) );
00168     INTREPID_TEST_COMMAND( atools.contractFieldFieldTensor<double>(a_9_2_2, a_10_2_2_2_2, a_10_2_2_2_2, COMP_CPP) );
00169     INTREPID_TEST_COMMAND( atools.contractFieldFieldTensor<double>(a_10_3_2, a_10_2_2_2_2, a_10_2_2_2_2, COMP_CPP) );
00170     INTREPID_TEST_COMMAND( atools.contractFieldFieldTensor<double>(a_10_2_2, a_10_2_2_2_2, a_10_3_2_2_2, COMP_CPP) );
00171     INTREPID_TEST_COMMAND( atools.contractFieldFieldTensor<double>(a_10_2_3, a_10_2_2_2_2, a_10_3_2_2_2, COMP_ENGINE_MAX) );
00172     INTREPID_TEST_COMMAND( atools.contractFieldFieldTensor<double>(a_10_2_3, a_10_2_2_2_2, a_10_3_2_2_2, COMP_CPP) );
00173 
00174     FieldContainer<double> a_9_2(9, 2);
00175     FieldContainer<double> a_10_1(10, 1);
00176 
00177     *outStream << "-> contractDataFieldScalar:\n";
00178     INTREPID_TEST_COMMAND( atools.contractDataFieldScalar<double>(a_2_2, a_2_2, a_2_2, COMP_CPP) );
00179     INTREPID_TEST_COMMAND( atools.contractDataFieldScalar<double>(a_2_2, a_10_2_2, a_10_2_2, COMP_CPP) );
00180     INTREPID_TEST_COMMAND( atools.contractDataFieldScalar<double>(a_10_2_2, a_2_2, a_10_2_2, COMP_CPP) );
00181     INTREPID_TEST_COMMAND( atools.contractDataFieldScalar<double>(a_2_2, a_10_2, a_9_2_2, COMP_CPP) );
00182     INTREPID_TEST_COMMAND( atools.contractDataFieldScalar<double>(a_2_2, a_10_3, a_10_2_2, COMP_CPP) );
00183     INTREPID_TEST_COMMAND( atools.contractDataFieldScalar<double>(a_9_2, a_10_2, a_10_2_2, COMP_CPP) );
00184     INTREPID_TEST_COMMAND( atools.contractDataFieldScalar<double>(a_10_2, a_10_2, a_10_3_2, COMP_CPP) );
00185     INTREPID_TEST_COMMAND( atools.contractDataFieldScalar<double>(a_10_2, a_10_2, a_10_2_2, COMP_ENGINE_MAX) );
00186     INTREPID_TEST_COMMAND( atools.contractDataFieldScalar<double>(a_10_2, a_10_2, a_10_2_2, COMP_CPP) );
00187     INTREPID_TEST_COMMAND( atools.contractDataFieldScalar<double>(a_10_2, a_10_1, a_10_2_2, COMP_CPP) );
00188 
00189     FieldContainer<double> a_10_1_2(10, 1, 2);
00190     FieldContainer<double> a_10_1_3(10, 1, 3);
00191 
00192     *outStream << "-> contractDataFieldVector:\n";
00193     INTREPID_TEST_COMMAND( atools.contractDataFieldVector<double>(a_2_2, a_2_2, a_2_2, COMP_CPP) );
00194     INTREPID_TEST_COMMAND( atools.contractDataFieldVector<double>(a_2_2, a_2_2, a_10_2_2_2, COMP_CPP) );
00195     INTREPID_TEST_COMMAND( atools.contractDataFieldVector<double>(a_10_2_2, a_10_2_2, a_10_2_2_2, COMP_CPP) );
00196     INTREPID_TEST_COMMAND( atools.contractDataFieldVector<double>(a_2_2, a_10_2_2, a_9_2_2_2, COMP_CPP) );
00197     INTREPID_TEST_COMMAND( atools.contractDataFieldVector<double>(a_2_2, a_10_2_2, a_10_2_3_2, COMP_CPP) );
00198     INTREPID_TEST_COMMAND( atools.contractDataFieldVector<double>(a_2_2, a_10_2_2, a_10_2_2_3, COMP_CPP) );
00199     INTREPID_TEST_COMMAND( atools.contractDataFieldVector<double>(a_9_2, a_10_2_2, a_10_2_2_2, COMP_CPP) );
00200     INTREPID_TEST_COMMAND( atools.contractDataFieldVector<double>(a_10_2, a_10_2_2, a_10_3_2_2, COMP_CPP) );
00201     INTREPID_TEST_COMMAND( atools.contractDataFieldVector<double>(a_10_2, a_10_2_2, a_10_2_2_2, COMP_ENGINE_MAX) );
00202     INTREPID_TEST_COMMAND( atools.contractDataFieldVector<double>(a_10_2, a_10_2_2, a_10_2_2_2, COMP_CPP) );
00203     INTREPID_TEST_COMMAND( atools.contractDataFieldVector<double>(a_10_2, a_10_1_2, a_10_2_2_2, COMP_CPP) );
00204 
00205     FieldContainer<double> a_10_1_2_2(10, 1, 2, 2);
00206 
00207     *outStream << "-> contractDataFieldTensor:\n";
00208     INTREPID_TEST_COMMAND( atools.contractDataFieldTensor<double>(a_2_2, a_2_2, a_2_2, COMP_CPP) );
00209     INTREPID_TEST_COMMAND( atools.contractDataFieldTensor<double>(a_2_2, a_2_2, a_10_2_2_2_2, COMP_CPP) );
00210     INTREPID_TEST_COMMAND( atools.contractDataFieldTensor<double>(a_10_2_2, a_10_2_2_2, a_10_2_2_2_2, COMP_CPP) );
00211     INTREPID_TEST_COMMAND( atools.contractDataFieldTensor<double>(a_2_2, a_10_2_2_2, a_9_2_2_2_2, COMP_CPP) );
00212     INTREPID_TEST_COMMAND( atools.contractDataFieldTensor<double>(a_2_2, a_10_2_2_2, a_10_2_3_2_2, COMP_CPP) );
00213     INTREPID_TEST_COMMAND( atools.contractDataFieldTensor<double>(a_2_2, a_10_2_2_2, a_10_2_2_3_2, COMP_CPP) );
00214     INTREPID_TEST_COMMAND( atools.contractDataFieldTensor<double>(a_2_2, a_10_2_2_2, a_10_2_2_2_3, COMP_CPP) );
00215     INTREPID_TEST_COMMAND( atools.contractDataFieldTensor<double>(a_9_2, a_10_2_2_2, a_10_2_2_2_2, COMP_CPP) );
00216     INTREPID_TEST_COMMAND( atools.contractDataFieldTensor<double>(a_10_2, a_10_2_2_2, a_10_3_2_2_2, COMP_CPP) );
00217     INTREPID_TEST_COMMAND( atools.contractDataFieldTensor<double>(a_10_2, a_10_2_2_2, a_10_2_2_2_2, COMP_ENGINE_MAX) );
00218     INTREPID_TEST_COMMAND( atools.contractDataFieldTensor<double>(a_10_2, a_10_2_2_2, a_10_2_2_2_2, COMP_CPP) );
00219     INTREPID_TEST_COMMAND( atools.contractDataFieldTensor<double>(a_10_2, a_10_1_2_2, a_10_2_2_2_2, COMP_CPP) );
00220 
00221     FieldContainer<double> a_2(2);
00222     FieldContainer<double> a_10(10);
00223 
00224     *outStream << "-> contractDataDataScalar:\n";
00225     INTREPID_TEST_COMMAND( atools.contractDataDataScalar<double>(a_2_2, a_10_2_2, a_10_2_2, COMP_CPP) );
00226     INTREPID_TEST_COMMAND( atools.contractDataDataScalar<double>(a_2_2, a_10_2, a_10_2_2, COMP_CPP) );
00227     INTREPID_TEST_COMMAND( atools.contractDataDataScalar<double>(a_2_2, a_10_2, a_10_2, COMP_CPP) );
00228     INTREPID_TEST_COMMAND( atools.contractDataDataScalar<double>(a_2, a_9_2, a_10_2, COMP_CPP) );
00229     INTREPID_TEST_COMMAND( atools.contractDataDataScalar<double>(a_2, a_10_2, a_10_3, COMP_CPP) );
00230     INTREPID_TEST_COMMAND( atools.contractDataDataScalar<double>(a_2, a_10_2, a_10_2, COMP_CPP) );
00231     INTREPID_TEST_COMMAND( atools.contractDataDataScalar<double>(a_10, a_10_2, a_10_2, COMP_ENGINE_MAX) );
00232     INTREPID_TEST_COMMAND( atools.contractDataDataScalar<double>(a_10, a_10_2, a_10_2, COMP_CPP) );
00233 
00234     *outStream << "-> contractDataDataVector:\n";
00235     INTREPID_TEST_COMMAND( atools.contractDataDataVector<double>(a_2_2, a_2_2, a_2_2, COMP_CPP) );
00236     INTREPID_TEST_COMMAND( atools.contractDataDataVector<double>(a_2_2, a_10_2_2, a_2_2, COMP_CPP) );
00237     INTREPID_TEST_COMMAND( atools.contractDataDataVector<double>(a_2_2, a_10_2_2, a_10_2_2, COMP_CPP) );
00238     INTREPID_TEST_COMMAND( atools.contractDataDataVector<double>(a_10, a_9_2_2, a_10_2_2, COMP_CPP) );
00239     INTREPID_TEST_COMMAND( atools.contractDataDataVector<double>(a_10, a_10_3_2, a_10_2_2, COMP_CPP) );
00240     INTREPID_TEST_COMMAND( atools.contractDataDataVector<double>(a_10, a_10_2_3, a_10_2_2, COMP_CPP) );
00241     INTREPID_TEST_COMMAND( atools.contractDataDataVector<double>(a_2, a_10_2_2, a_10_2_2, COMP_CPP) );
00242     INTREPID_TEST_COMMAND( atools.contractDataDataVector<double>(a_10, a_10_2_2, a_10_2_2, COMP_ENGINE_MAX) );
00243     INTREPID_TEST_COMMAND( atools.contractDataDataVector<double>(a_10, a_10_2_2, a_10_2_2, COMP_CPP) );
00244 
00245     *outStream << "-> contractDataDataTensor:\n";
00246     INTREPID_TEST_COMMAND( atools.contractDataDataTensor<double>(a_2_2, a_2_2, a_2_2, COMP_CPP) );
00247     INTREPID_TEST_COMMAND( atools.contractDataDataTensor<double>(a_2_2, a_10_2_2_2, a_2_2, COMP_CPP) );
00248     INTREPID_TEST_COMMAND( atools.contractDataDataTensor<double>(a_2_2, a_10_2_2_2, a_10_2_2_2, COMP_CPP) );
00249     INTREPID_TEST_COMMAND( atools.contractDataDataTensor<double>(a_10, a_9_2_2_2, a_10_2_2_2, COMP_CPP) );
00250     INTREPID_TEST_COMMAND( atools.contractDataDataTensor<double>(a_10, a_10_2_2_2, a_10_3_2_2, COMP_CPP) );
00251     INTREPID_TEST_COMMAND( atools.contractDataDataTensor<double>(a_10, a_10_2_2_2, a_10_2_3_2, COMP_CPP) );
00252     INTREPID_TEST_COMMAND( atools.contractDataDataTensor<double>(a_10, a_10_2_2_2, a_10_2_2_3, COMP_CPP) );
00253     INTREPID_TEST_COMMAND( atools.contractDataDataTensor<double>(a_2, a_10_2_2_2, a_10_2_2_2, COMP_CPP) );
00254     INTREPID_TEST_COMMAND( atools.contractDataDataTensor<double>(a_10, a_10_2_2_2, a_10_2_2_2, COMP_ENGINE_MAX) );
00255     INTREPID_TEST_COMMAND( atools.contractDataDataTensor<double>(a_10, a_10_2_2_2, a_10_2_2_2, COMP_CPP) );
00256 
00257 #endif
00258 
00259   }
00260   catch (std::logic_error err) {
00261     *outStream << "UNEXPECTED ERROR !!! ----------------------------------------------------------\n";
00262     *outStream << err.what() << '\n';
00263     *outStream << "-------------------------------------------------------------------------------" << "\n\n";
00264     errorFlag = -1000;
00265   };
00266 
00267 #ifdef HAVE_INTREPID_DEBUG
00268   if (TestForException_getThrowNumber() != endThrowNumber)
00269     errorFlag++;
00270 #endif
00271 
00272   *outStream \
00273   << "\n"
00274   << "===============================================================================\n"\
00275   << "| TEST 2: correctness of math operations                                      |\n"\
00276   << "===============================================================================\n";
00277 
00278   outStream->precision(20);
00279 
00280   try {
00281       { // start scope
00282       *outStream << "\n************ Checking contractFieldFieldScalar ************\n";
00283 
00284       int c=5, p=9, l=3, r=7;
00285 
00286       FieldContainer<double> in_c_l_p(c, l, p);
00287       FieldContainer<double> in_c_r_p(c, r, p);
00288       FieldContainer<double> out1_c_l_r(c, l, r);
00289       FieldContainer<double> out2_c_l_r(c, l, r);
00290       double zero = INTREPID_TOL*10000.0;
00291 
00292       // fill with random numbers
00293       for (int i=0; i<in_c_l_p.size(); i++) {
00294         in_c_l_p[i] = Teuchos::ScalarTraits<double>::random();
00295       }
00296       for (int i=0; i<in_c_r_p.size(); i++) {
00297         in_c_r_p[i] = Teuchos::ScalarTraits<double>::random();
00298       }
00299 
00300       art::contractFieldFieldScalar<double>(out1_c_l_r, in_c_l_p, in_c_r_p, COMP_CPP);
00301       art::contractFieldFieldScalar<double>(out2_c_l_r, in_c_l_p, in_c_r_p, COMP_BLAS);
00302       rst::subtract(&out1_c_l_r[0], &out2_c_l_r[0], out2_c_l_r.size());
00303       if (rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) > zero) {
00304         *outStream << "\n\nINCORRECT contractFieldFieldScalar (1): check COMP_CPP vs. COMP_BLAS; "
00305                    << " diff-1norm = " << rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) << "\n\n";
00306         errorFlag++;
00307       }
00308       // with sumInto:
00309       out1_c_l_r.initialize(2.0); out2_c_l_r.initialize(2.0);
00310       art::contractFieldFieldScalar<double>(out1_c_l_r, in_c_l_p, in_c_r_p, COMP_CPP, true);
00311       art::contractFieldFieldScalar<double>(out2_c_l_r, in_c_l_p, in_c_r_p, COMP_BLAS, true);
00312       rst::subtract(&out1_c_l_r[0], &out2_c_l_r[0], out2_c_l_r.size());
00313       if (rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) > zero) {
00314         *outStream << "\n\nINCORRECT contractFieldFieldScalar (1): check COMP_CPP vs. COMP_BLAS; "
00315                    << " diff-1norm = " << rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) << "\n\n";
00316         errorFlag++;
00317       }
00318       } // end scope
00319 
00320       { // start scope
00321       *outStream << "\n************ Checking contractFieldFieldVector ************\n";
00322 
00323       int c=5, p=9, l=3, r=7, d=13;
00324 
00325       FieldContainer<double> in_c_l_p_d(c, l, p, d);
00326       FieldContainer<double> in_c_r_p_d(c, r, p, d);
00327       FieldContainer<double> out1_c_l_r(c, l, r);
00328       FieldContainer<double> out2_c_l_r(c, l, r);
00329       double zero = INTREPID_TOL*10000.0;
00330 
00331       // fill with random numbers
00332       for (int i=0; i<in_c_l_p_d.size(); i++) {
00333         in_c_l_p_d[i] = Teuchos::ScalarTraits<double>::random();
00334       }
00335       for (int i=0; i<in_c_r_p_d.size(); i++) {
00336         in_c_r_p_d[i] = Teuchos::ScalarTraits<double>::random();
00337       }
00338 
00339       art::contractFieldFieldVector<double>(out1_c_l_r, in_c_l_p_d, in_c_r_p_d, COMP_CPP);
00340       art::contractFieldFieldVector<double>(out2_c_l_r, in_c_l_p_d, in_c_r_p_d, COMP_BLAS);
00341 
00342       rst::subtract(&out1_c_l_r[0], &out2_c_l_r[0], out2_c_l_r.size());
00343       if (rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) > zero) {
00344         *outStream << "\n\nINCORRECT contractFieldFieldVector (1): check COMP_CPP vs. COMP_BLAS; "
00345                    << " diff-1norm = " << rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) << "\n\n";
00346         errorFlag++;
00347       }
00348 
00349       // with sumInto:
00350       out1_c_l_r.initialize(2.0); out2_c_l_r.initialize(2.0);
00351 
00352       art::contractFieldFieldVector<double>(out1_c_l_r, in_c_l_p_d, in_c_r_p_d, COMP_CPP, true);
00353       art::contractFieldFieldVector<double>(out2_c_l_r, in_c_l_p_d, in_c_r_p_d, COMP_BLAS, true);
00354 
00355       rst::subtract(&out1_c_l_r[0], &out2_c_l_r[0], out2_c_l_r.size());
00356       if (rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) > zero) {
00357         *outStream << "\n\nINCORRECT contractFieldFieldVector (1): check COMP_CPP vs. COMP_BLAS; "
00358                    << " diff-1norm = " << rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) << "\n\n";
00359         errorFlag++;
00360       }
00361       } // end scope
00362 
00363       { // start scope
00364       *outStream << "\n************ Checking contractFieldFieldTensor ************\n";
00365 
00366       int c=5, p=9, l=3, r=7, d1=13, d2=5;
00367 
00368       FieldContainer<double> in_c_l_p_d_d(c, l, p, d1, d2);
00369       FieldContainer<double> in_c_r_p_d_d(c, r, p, d1, d2);
00370       FieldContainer<double> out1_c_l_r(c, l, r);
00371       FieldContainer<double> out2_c_l_r(c, l, r);
00372       double zero = INTREPID_TOL*10000.0;
00373 
00374       // fill with random numbers
00375       for (int i=0; i<in_c_l_p_d_d.size(); i++) {
00376         in_c_l_p_d_d[i] = Teuchos::ScalarTraits<double>::random();
00377       }
00378       for (int i=0; i<in_c_r_p_d_d.size(); i++) {
00379         in_c_r_p_d_d[i] = Teuchos::ScalarTraits<double>::random();
00380       }
00381 
00382       art::contractFieldFieldTensor<double>(out1_c_l_r, in_c_l_p_d_d, in_c_r_p_d_d, COMP_CPP);
00383       art::contractFieldFieldTensor<double>(out2_c_l_r, in_c_l_p_d_d, in_c_r_p_d_d, COMP_BLAS);
00384 
00385       rst::subtract(&out1_c_l_r[0], &out2_c_l_r[0], out2_c_l_r.size());
00386       if (rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) > zero) {
00387         *outStream << "\n\nINCORRECT contractFieldFieldTensor (1): check COMP_CPP vs. COMP_BLAS; "
00388                    << " diff-1norm = " << rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) << "\n\n";
00389         errorFlag++;
00390       }
00391 
00392       // with sumInto:
00393       out1_c_l_r.initialize(2.0); out2_c_l_r.initialize(2.0);
00394 
00395       art::contractFieldFieldTensor<double>(out1_c_l_r, in_c_l_p_d_d, in_c_r_p_d_d, COMP_CPP, true);
00396       art::contractFieldFieldTensor<double>(out2_c_l_r, in_c_l_p_d_d, in_c_r_p_d_d, COMP_BLAS, true);
00397 
00398       rst::subtract(&out1_c_l_r[0], &out2_c_l_r[0], out2_c_l_r.size());
00399       if (rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) > zero) {
00400         *outStream << "\n\nINCORRECT contractFieldFieldTensor (1): check COMP_CPP vs. COMP_BLAS; "
00401                    << " diff-1norm = " << rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) << "\n\n";
00402         errorFlag++;
00403       }
00404       } // end scope
00405 
00406       { // start scope
00407       *outStream << "\n************ Checking contractDataFieldScalar ************\n";
00408 
00409       int c=5, p=9, l=7;
00410 
00411       FieldContainer<double> in_c_l_p(c, l, p);
00412       FieldContainer<double> data_c_p(c, p);
00413       FieldContainer<double> data_c_1(c, 1);
00414       FieldContainer<double> out1_c_l(c, l);
00415       FieldContainer<double> out2_c_l(c, l);
00416       double zero = INTREPID_TOL*10000.0;
00417 
00418       // fill with random numbers
00419       for (int i=0; i<in_c_l_p.size(); i++) {
00420         in_c_l_p[i] = Teuchos::ScalarTraits<double>::random();
00421       }
00422       for (int i=0; i<data_c_p.size(); i++) {
00423         data_c_p[i] = Teuchos::ScalarTraits<double>::random();
00424       }
00425       for (int i=0; i<data_c_1.size(); i++) {
00426         data_c_1[i] = Teuchos::ScalarTraits<double>::random();
00427       }
00428 
00429       // nonconstant data
00430       art::contractDataFieldScalar<double>(out1_c_l, data_c_p, in_c_l_p, COMP_CPP);
00431       art::contractDataFieldScalar<double>(out2_c_l, data_c_p, in_c_l_p, COMP_BLAS);
00432       rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
00433       if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
00434         *outStream << "\n\nINCORRECT contractDataFieldScalar (1): check COMP_CPP vs. COMP_BLAS; "
00435                    << " diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) << "\n\n";
00436         errorFlag++;
00437       }
00438       // constant data
00439       art::contractDataFieldScalar<double>(out1_c_l, data_c_1, in_c_l_p, COMP_CPP);
00440       art::contractDataFieldScalar<double>(out2_c_l, data_c_1, in_c_l_p, COMP_BLAS);
00441       rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
00442       if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
00443         *outStream << "\n\nINCORRECT contractDataFieldScalar (2): check COMP_CPP vs. COMP_BLAS; "
00444                    << " diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) << "\n\n";
00445         errorFlag++;
00446       }
00447       // nonconstant data with sumInto
00448       out1_c_l.initialize(2.0); out2_c_l.initialize(2.0);
00449       art::contractDataFieldScalar<double>(out1_c_l, data_c_p, in_c_l_p, COMP_CPP, true);
00450       art::contractDataFieldScalar<double>(out2_c_l, data_c_p, in_c_l_p, COMP_BLAS, true);
00451       rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
00452       if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
00453         *outStream << "\n\nINCORRECT contractDataFieldScalar (1): check COMP_CPP vs. COMP_BLAS; "
00454                    << " diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) << "\n\n";
00455         errorFlag++;
00456       }
00457       } // end scope
00458 
00459       { // start scope
00460       *outStream << "\n************ Checking contractDataFieldVector ************\n";
00461 
00462       int c=5, p=9, l=7, d=3;
00463 
00464       FieldContainer<double> in_c_l_p_d(c, l, p, d);
00465       FieldContainer<double> data_c_p_d(c, p, d);
00466       FieldContainer<double> data_c_1_d(c, 1, d);
00467       FieldContainer<double> out1_c_l(c, l);
00468       FieldContainer<double> out2_c_l(c, l);
00469       double zero = INTREPID_TOL*10000.0;
00470 
00471       // fill with random numbers
00472       for (int i=0; i<in_c_l_p_d.size(); i++) {
00473         in_c_l_p_d[i] = Teuchos::ScalarTraits<double>::random();
00474       }
00475       for (int i=0; i<data_c_p_d.size(); i++) {
00476         data_c_p_d[i] = Teuchos::ScalarTraits<double>::random();
00477       }
00478       for (int i=0; i<data_c_1_d.size(); i++) {
00479         data_c_1_d[i] = Teuchos::ScalarTraits<double>::random();
00480       }
00481 
00482       // nonconstant data
00483       art::contractDataFieldVector<double>(out1_c_l, data_c_p_d, in_c_l_p_d, COMP_CPP);
00484       art::contractDataFieldVector<double>(out2_c_l, data_c_p_d, in_c_l_p_d, COMP_BLAS);
00485       rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
00486       if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
00487         *outStream << "\n\nINCORRECT contractDataFieldVector (1): check COMP_CPP vs. COMP_BLAS; "
00488                    << " diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) << "\n\n";
00489         errorFlag++;
00490       }
00491       // constant data
00492       art::contractDataFieldVector<double>(out1_c_l, data_c_1_d, in_c_l_p_d, COMP_CPP);
00493       art::contractDataFieldVector<double>(out2_c_l, data_c_1_d, in_c_l_p_d, COMP_BLAS);
00494       rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
00495       if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
00496         *outStream << "\n\nINCORRECT contractDataFieldVector (2): check COMP_CPP vs. COMP_BLAS; "
00497                    << " diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) << "\n\n";
00498         errorFlag++;
00499       }
00500       // nonconstant data with sumInto
00501       out1_c_l.initialize(2.0); out2_c_l.initialize(2.0);
00502       art::contractDataFieldVector<double>(out1_c_l, data_c_p_d, in_c_l_p_d, COMP_CPP, true);
00503       art::contractDataFieldVector<double>(out2_c_l, data_c_p_d, in_c_l_p_d, COMP_BLAS, true);
00504       rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
00505       if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
00506         *outStream << "\n\nINCORRECT contractDataFieldVector (1): check COMP_CPP vs. COMP_BLAS; "
00507                    << " diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) << "\n\n";
00508         errorFlag++;
00509       }
00510       } // end scope
00511 
00512       { // start scope
00513       *outStream << "\n************ Checking contractDataFieldTensor ************\n";
00514 
00515       int c=5, p=9, l=7, d1=3, d2=13;
00516 
00517       FieldContainer<double> in_c_l_p_d_d(c, l, p, d1, d2);
00518       FieldContainer<double> data_c_p_d_d(c, p, d1, d2);
00519       FieldContainer<double> data_c_1_d_d(c, 1, d1, d2);
00520       FieldContainer<double> out1_c_l(c, l);
00521       FieldContainer<double> out2_c_l(c, l);
00522       double zero = INTREPID_TOL*10000.0;
00523 
00524       // fill with random numbers
00525       for (int i=0; i<in_c_l_p_d_d.size(); i++) {
00526         in_c_l_p_d_d[i] = Teuchos::ScalarTraits<double>::random();
00527       }
00528       for (int i=0; i<data_c_p_d_d.size(); i++) {
00529         data_c_p_d_d[i] = Teuchos::ScalarTraits<double>::random();
00530       }
00531       for (int i=0; i<data_c_1_d_d.size(); i++) {
00532         data_c_1_d_d[i] = Teuchos::ScalarTraits<double>::random();
00533       }
00534 
00535       // nonconstant data
00536       art::contractDataFieldTensor<double>(out1_c_l, data_c_p_d_d, in_c_l_p_d_d, COMP_CPP);
00537       art::contractDataFieldTensor<double>(out2_c_l, data_c_p_d_d, in_c_l_p_d_d, COMP_BLAS);
00538       rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
00539       if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
00540         *outStream << "\n\nINCORRECT contractDataFieldTensor (1): check COMP_CPP vs. COMP_BLAS; "
00541                    << " diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) << "\n\n";
00542         errorFlag++;
00543       }
00544       // constant data
00545       art::contractDataFieldTensor<double>(out1_c_l, data_c_1_d_d, in_c_l_p_d_d, COMP_CPP);
00546       art::contractDataFieldTensor<double>(out2_c_l, data_c_1_d_d, in_c_l_p_d_d, COMP_BLAS);
00547       rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
00548       if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
00549         *outStream << "\n\nINCORRECT contractDataFieldTensor (1): check COMP_CPP vs. COMP_BLAS; "
00550                    << " diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) << "\n\n";
00551         errorFlag++;
00552       }
00553       // nonconstant data with sumInto
00554       out1_c_l.initialize(2.0); out2_c_l.initialize(2.0);
00555       art::contractDataFieldTensor<double>(out1_c_l, data_c_p_d_d, in_c_l_p_d_d, COMP_CPP, true);
00556       art::contractDataFieldTensor<double>(out2_c_l, data_c_p_d_d, in_c_l_p_d_d, COMP_BLAS, true);
00557       rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
00558       if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
00559         *outStream << "\n\nINCORRECT contractDataFieldTensor (1): check COMP_CPP vs. COMP_BLAS; "
00560                    << " diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) << "\n\n";
00561         errorFlag++;
00562       }
00563       } // end scope
00564 
00565       { // start scope
00566       *outStream << "\n************ Checking contractDataDataScalar ************\n";
00567 
00568       int c=5, p=9;
00569 
00570       FieldContainer<double> inl_c_p(c, p);
00571       FieldContainer<double> inr_c_p(c, p);
00572       FieldContainer<double> out1_c(c);
00573       FieldContainer<double> out2_c(c);
00574       double zero = INTREPID_TOL*10000.0;
00575 
00576       // fill with random numbers
00577       for (int i=0; i<inl_c_p.size(); i++) {
00578         inl_c_p[i] = Teuchos::ScalarTraits<double>::random();
00579       }
00580       for (int i=0; i<inr_c_p.size(); i++) {
00581         inr_c_p[i] = Teuchos::ScalarTraits<double>::random();
00582       }
00583 
00584       art::contractDataDataScalar<double>(out1_c, inl_c_p, inr_c_p, COMP_CPP);
00585       art::contractDataDataScalar<double>(out2_c, inl_c_p, inr_c_p, COMP_BLAS);
00586       rst::subtract(&out1_c[0], &out2_c[0], out2_c.size());
00587       if (rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) > zero) {
00588         *outStream << "\n\nINCORRECT contractDataDataScalar (1): check COMP_CPP vs. COMP_BLAS; "
00589                    << " diff-1norm = " << rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) << "\n\n";
00590         errorFlag++;
00591       }
00592       // with sumInto:
00593       out1_c.initialize(2.0); out2_c.initialize(2.0);
00594       art::contractDataDataScalar<double>(out1_c, inl_c_p, inr_c_p, COMP_CPP, true);
00595       art::contractDataDataScalar<double>(out2_c, inl_c_p, inr_c_p, COMP_BLAS, true);
00596       rst::subtract(&out1_c[0], &out2_c[0], out2_c.size());
00597       if (rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) > zero) {
00598         *outStream << "\n\nINCORRECT contractDataDataScalar (1): check COMP_CPP vs. COMP_BLAS; "
00599                    << " diff-1norm = " << rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) << "\n\n";
00600         errorFlag++;
00601       }
00602       } // end scope
00603 
00604       { // start scope
00605       *outStream << "\n************ Checking contractDataDataVector ************\n";
00606 
00607       int c=5, p=9, d=13;
00608 
00609       FieldContainer<double> inl_c_p_d(c, p, d);
00610       FieldContainer<double> inr_c_p_d(c, p, d);
00611       FieldContainer<double> out1_c(c);
00612       FieldContainer<double> out2_c(c);
00613       double zero = INTREPID_TOL*10000.0;
00614 
00615       // fill with random numbers
00616       for (int i=0; i<inl_c_p_d.size(); i++) {
00617         inl_c_p_d[i] = Teuchos::ScalarTraits<double>::random();
00618       }
00619       for (int i=0; i<inr_c_p_d.size(); i++) {
00620         inr_c_p_d[i] = Teuchos::ScalarTraits<double>::random();
00621       }
00622 
00623       art::contractDataDataVector<double>(out1_c, inl_c_p_d, inr_c_p_d, COMP_CPP);
00624       art::contractDataDataVector<double>(out2_c, inl_c_p_d, inr_c_p_d, COMP_BLAS);
00625 
00626       rst::subtract(&out1_c[0], &out2_c[0], out2_c.size());
00627       if (rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) > zero) {
00628         *outStream << "\n\nINCORRECT contractDataDataVector (1): check COMP_CPP vs. COMP_BLAS; "
00629                    << " diff-1norm = " << rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) << "\n\n";
00630         errorFlag++;
00631       }
00632 
00633       // with sumInto:
00634       out1_c.initialize(2.0); out2_c.initialize(2.0);
00635 
00636       art::contractDataDataVector<double>(out1_c, inl_c_p_d, inr_c_p_d, COMP_CPP, true);
00637       art::contractDataDataVector<double>(out2_c, inl_c_p_d, inr_c_p_d, COMP_BLAS, true);
00638 
00639       rst::subtract(&out1_c[0], &out2_c[0], out2_c.size());
00640       if (rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) > zero) {
00641         *outStream << "\n\nINCORRECT contractDataDataVector (1): check COMP_CPP vs. COMP_BLAS; "
00642                    << " diff-1norm = " << rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) << "\n\n";
00643         errorFlag++;
00644       }
00645       } // end scope
00646 
00647       { // start scope
00648       *outStream << "\n************ Checking contractDataDataTensor ************\n";
00649 
00650       int c=5, p=9, d1=13, d2=5;
00651 
00652       FieldContainer<double> inl_c_p_d_d(c, p, d1, d2);
00653       FieldContainer<double> inr_c_p_d_d(c, p, d1, d2);
00654       FieldContainer<double> out1_c(c);
00655       FieldContainer<double> out2_c(c);
00656       double zero = INTREPID_TOL*10000.0;
00657 
00658       // fill with random numbers
00659       for (int i=0; i<inl_c_p_d_d.size(); i++) {
00660         inl_c_p_d_d[i] = Teuchos::ScalarTraits<double>::random();
00661       }
00662       for (int i=0; i<inr_c_p_d_d.size(); i++) {
00663         inr_c_p_d_d[i] = Teuchos::ScalarTraits<double>::random();
00664       }
00665 
00666       art::contractDataDataTensor<double>(out1_c, inl_c_p_d_d, inr_c_p_d_d, COMP_CPP);
00667       art::contractDataDataTensor<double>(out2_c, inl_c_p_d_d, inr_c_p_d_d, COMP_BLAS);
00668 
00669       rst::subtract(&out1_c[0], &out2_c[0], out2_c.size());
00670       if (rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) > zero) {
00671         *outStream << "\n\nINCORRECT contractDataDataTensor (1): check COMP_CPP vs. COMP_BLAS; "
00672                    << " diff-1norm = " << rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) << "\n\n";
00673         errorFlag++;
00674       }
00675 
00676       // with sumInto:
00677       out1_c.initialize(2.0); out2_c.initialize(2.0);
00678 
00679       art::contractDataDataTensor<double>(out1_c, inl_c_p_d_d, inr_c_p_d_d, COMP_CPP, true);
00680       art::contractDataDataTensor<double>(out2_c, inl_c_p_d_d, inr_c_p_d_d, COMP_BLAS, true);
00681 
00682       rst::subtract(&out1_c[0], &out2_c[0], out2_c.size());
00683       if (rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) > zero) {
00684         *outStream << "\n\nINCORRECT contractDataDataTensor (1): check COMP_CPP vs. COMP_BLAS; "
00685                    << " diff-1norm = " << rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) << "\n\n";
00686         errorFlag++;
00687       }
00688       } // end scope
00689 
00690       /******************************************/
00691       *outStream << "\n";
00692   }
00693   catch (std::logic_error err) {
00694     *outStream << "UNEXPECTED ERROR !!! ----------------------------------------------------------\n";
00695     *outStream << err.what() << '\n';
00696     *outStream << "-------------------------------------------------------------------------------" << "\n\n";
00697     errorFlag = -1000;
00698   };
00699 
00700 
00701   if (errorFlag != 0)
00702     std::cout << "End Result: TEST FAILED\n";
00703   else
00704     std::cout << "End Result: TEST PASSED\n";
00705 
00706   // reset format state of std::cout
00707   std::cout.copyfmt(oldFormatState);
00708 
00709   return errorFlag;
00710 }