|
Intrepid
|
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 }
1.7.4