52 #include "Teuchos_oblackholestream.hpp"
53 #include "Teuchos_RCP.hpp"
54 #include "Teuchos_ScalarTraits.hpp"
55 #include "Teuchos_GlobalMPISession.hpp"
58 using namespace Intrepid;
60 #define INTREPID_TEST_COMMAND( S ) \
65 catch (const std::logic_error & err) { \
66 *outStream << "Expected Error ----------------------------------------------------------------\n"; \
67 *outStream << err.what() << '\n'; \
68 *outStream << "-------------------------------------------------------------------------------" << "\n\n"; \
73 int main(
int argc,
char *argv[]) {
75 Teuchos::GlobalMPISession mpiSession(&argc, &argv);
79 int iprint = argc - 1;
80 Teuchos::RCP<std::ostream> outStream;
81 Teuchos::oblackholestream bhs;
83 outStream = Teuchos::rcp(&std::cout,
false);
85 outStream = Teuchos::rcp(&bhs,
false);
88 Teuchos::oblackholestream oldFormatState;
89 oldFormatState.copyfmt(std::cout);
92 <<
"===============================================================================\n" \
94 <<
"| Unit Test (ArrayTools) |\n" \
96 <<
"| 1) Array operations: contractions |\n" \
98 <<
"| Questions? Contact Pavel Bochev (pbboche@sandia.gov) or |\n" \
99 <<
"| Denis Ridzal (dridzal@sandia.gov). |\n" \
101 <<
"| Intrepid's website: http://trilinos.sandia.gov/packages/intrepid |\n" \
102 <<
"| Trilinos website: http://trilinos.sandia.gov |\n" \
104 <<
"===============================================================================\n";
108 #ifdef HAVE_INTREPID_DEBUG
109 int beginThrowNumber = Teuchos::TestForException_getThrowNumber();
110 int endThrowNumber = beginThrowNumber + 81;
115 #ifdef HAVE_INTREPID_DEBUG
121 <<
"===============================================================================\n"\
122 <<
"| TEST 1: exceptions |\n"\
123 <<
"===============================================================================\n";
127 #ifdef HAVE_INTREPID_DEBUG
136 *outStream <<
"-> contractFieldFieldScalar:\n";
156 *outStream <<
"-> contractFieldFieldVector:\n";
166 INTREPID_TEST_COMMAND( atools.
contractFieldFieldVector<
double>(a_10_2_3, a_10_2_2_2, a_10_3_2_2, COMP_ENGINE_MAX) );
177 *outStream <<
"-> contractFieldFieldTensor:\n";
188 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) );
195 *outStream <<
"-> contractDataFieldScalar:\n";
211 *outStream <<
"-> contractDataFieldVector:\n";
220 INTREPID_TEST_COMMAND( atools.
contractDataFieldVector<
double>(a_10_2, a_10_2_2, a_10_2_2_2, COMP_ENGINE_MAX) );
227 *outStream <<
"-> contractDataFieldTensor:\n";
237 INTREPID_TEST_COMMAND( atools.
contractDataFieldTensor<
double>(a_10_2, a_10_2_2_2, a_10_2_2_2_2, COMP_ENGINE_MAX) );
245 *outStream <<
"-> contractDataDataScalar:\n";
256 *outStream <<
"-> contractDataDataVector:\n";
264 INTREPID_TEST_COMMAND( atools.
contractDataDataVector<
double>(a_10, a_10_2_2, a_10_2_2, COMP_ENGINE_MAX) );
268 *outStream <<
"-> contractDataDataTensor:\n";
277 INTREPID_TEST_COMMAND( atools.
contractDataDataTensor<
double>(a_10, a_10_2_2_2, a_10_2_2_2, COMP_ENGINE_MAX) );
284 catch (
const std::logic_error & err) {
285 *outStream <<
"UNEXPECTED ERROR !!! ----------------------------------------------------------\n";
286 *outStream << err.what() <<
'\n';
287 *outStream <<
"-------------------------------------------------------------------------------" <<
"\n\n";
291 #ifdef HAVE_INTREPID_DEBUG
292 if (Teuchos::TestForException_getThrowNumber() != endThrowNumber)
298 <<
"===============================================================================\n"\
299 <<
"| TEST 2: correctness of math operations |\n"\
300 <<
"===============================================================================\n";
302 outStream->precision(20);
306 *outStream <<
"\n************ Checking contractFieldFieldScalar ************\n";
308 int c=5, p=9, l=3, r=7;
314 double zero = INTREPID_TOL*10000.0;
317 for (
int i=0; i<in_c_l_p.size(); i++) {
318 in_c_l_p[i] = Teuchos::ScalarTraits<double>::random();
320 for (
int i=0; i<in_c_r_p.size(); i++) {
321 in_c_r_p[i] = Teuchos::ScalarTraits<double>::random();
324 art::contractFieldFieldScalar<double>(out1_c_l_r, in_c_l_p, in_c_r_p, COMP_CPP);
325 art::contractFieldFieldScalar<double>(out2_c_l_r, in_c_l_p, in_c_r_p, COMP_BLAS);
326 rst::subtract(&out1_c_l_r[0], &out2_c_l_r[0], out2_c_l_r.size());
327 if (rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) > zero) {
328 *outStream <<
"\n\nINCORRECT contractFieldFieldScalar (1): check COMP_CPP vs. COMP_BLAS; "
329 <<
" diff-1norm = " << rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) <<
"\n\n";
333 out1_c_l_r.initialize(2.0); out2_c_l_r.initialize(2.0);
334 art::contractFieldFieldScalar<double>(out1_c_l_r, in_c_l_p, in_c_r_p, COMP_CPP,
true);
335 art::contractFieldFieldScalar<double>(out2_c_l_r, in_c_l_p, in_c_r_p, COMP_BLAS,
true);
336 rst::subtract(&out1_c_l_r[0], &out2_c_l_r[0], out2_c_l_r.size());
337 if (rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) > zero) {
338 *outStream <<
"\n\nINCORRECT contractFieldFieldScalar (1): check COMP_CPP vs. COMP_BLAS; "
339 <<
" diff-1norm = " << rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) <<
"\n\n";
345 *outStream <<
"\n************ Checking contractFieldFieldVector ************\n";
347 int c=5, p=9, l=3, r=7, d=13;
353 double zero = INTREPID_TOL*10000.0;
356 for (
int i=0; i<in_c_l_p_d.size(); i++) {
357 in_c_l_p_d[i] = Teuchos::ScalarTraits<double>::random();
359 for (
int i=0; i<in_c_r_p_d.size(); i++) {
360 in_c_r_p_d[i] = Teuchos::ScalarTraits<double>::random();
363 art::contractFieldFieldVector<double>(out1_c_l_r, in_c_l_p_d, in_c_r_p_d, COMP_CPP);
364 art::contractFieldFieldVector<double>(out2_c_l_r, in_c_l_p_d, in_c_r_p_d, COMP_BLAS);
366 rst::subtract(&out1_c_l_r[0], &out2_c_l_r[0], out2_c_l_r.size());
367 if (rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) > zero) {
368 *outStream <<
"\n\nINCORRECT contractFieldFieldVector (1): check COMP_CPP vs. COMP_BLAS; "
369 <<
" diff-1norm = " << rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) <<
"\n\n";
374 out1_c_l_r.initialize(2.0); out2_c_l_r.initialize(2.0);
376 art::contractFieldFieldVector<double>(out1_c_l_r, in_c_l_p_d, in_c_r_p_d, COMP_CPP,
true);
377 art::contractFieldFieldVector<double>(out2_c_l_r, in_c_l_p_d, in_c_r_p_d, COMP_BLAS,
true);
379 rst::subtract(&out1_c_l_r[0], &out2_c_l_r[0], out2_c_l_r.size());
380 if (rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) > zero) {
381 *outStream <<
"\n\nINCORRECT contractFieldFieldVector (1): check COMP_CPP vs. COMP_BLAS; "
382 <<
" diff-1norm = " << rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) <<
"\n\n";
388 *outStream <<
"\n************ Checking contractFieldFieldTensor ************\n";
390 int c=5, p=9, l=3, r=7, d1=13, d2=5;
396 double zero = INTREPID_TOL*10000.0;
399 for (
int i=0; i<in_c_l_p_d_d.size(); i++) {
400 in_c_l_p_d_d[i] = Teuchos::ScalarTraits<double>::random();
402 for (
int i=0; i<in_c_r_p_d_d.size(); i++) {
403 in_c_r_p_d_d[i] = Teuchos::ScalarTraits<double>::random();
406 art::contractFieldFieldTensor<double>(out1_c_l_r, in_c_l_p_d_d, in_c_r_p_d_d, COMP_CPP);
407 art::contractFieldFieldTensor<double>(out2_c_l_r, in_c_l_p_d_d, in_c_r_p_d_d, COMP_BLAS);
409 rst::subtract(&out1_c_l_r[0], &out2_c_l_r[0], out2_c_l_r.size());
410 if (rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) > zero) {
411 *outStream <<
"\n\nINCORRECT contractFieldFieldTensor (1): check COMP_CPP vs. COMP_BLAS; "
412 <<
" diff-1norm = " << rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) <<
"\n\n";
417 out1_c_l_r.initialize(2.0); out2_c_l_r.initialize(2.0);
419 art::contractFieldFieldTensor<double>(out1_c_l_r, in_c_l_p_d_d, in_c_r_p_d_d, COMP_CPP,
true);
420 art::contractFieldFieldTensor<double>(out2_c_l_r, in_c_l_p_d_d, in_c_r_p_d_d, COMP_BLAS,
true);
422 rst::subtract(&out1_c_l_r[0], &out2_c_l_r[0], out2_c_l_r.size());
423 if (rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) > zero) {
424 *outStream <<
"\n\nINCORRECT contractFieldFieldTensor (1): check COMP_CPP vs. COMP_BLAS; "
425 <<
" diff-1norm = " << rst::vectorNorm(&out1_c_l_r[0], out1_c_l_r.size(), NORM_ONE) <<
"\n\n";
431 *outStream <<
"\n************ Checking contractDataFieldScalar ************\n";
440 double zero = INTREPID_TOL*10000.0;
443 for (
int i=0; i<in_c_l_p.size(); i++) {
444 in_c_l_p[i] = Teuchos::ScalarTraits<double>::random();
446 for (
int i=0; i<data_c_p.size(); i++) {
447 data_c_p[i] = Teuchos::ScalarTraits<double>::random();
449 for (
int i=0; i<data_c_1.size(); i++) {
450 data_c_1[i] = Teuchos::ScalarTraits<double>::random();
454 art::contractDataFieldScalar<double>(out1_c_l, data_c_p, in_c_l_p, COMP_CPP);
455 art::contractDataFieldScalar<double>(out2_c_l, data_c_p, in_c_l_p, COMP_BLAS);
456 rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
457 if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
458 *outStream <<
"\n\nINCORRECT contractDataFieldScalar (1): check COMP_CPP vs. COMP_BLAS; "
459 <<
" diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) <<
"\n\n";
463 art::contractDataFieldScalar<double>(out1_c_l, data_c_1, in_c_l_p, COMP_CPP);
464 art::contractDataFieldScalar<double>(out2_c_l, data_c_1, in_c_l_p, COMP_BLAS);
465 rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
466 if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
467 *outStream <<
"\n\nINCORRECT contractDataFieldScalar (2): check COMP_CPP vs. COMP_BLAS; "
468 <<
" diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) <<
"\n\n";
472 out1_c_l.initialize(2.0); out2_c_l.initialize(2.0);
473 art::contractDataFieldScalar<double>(out1_c_l, data_c_p, in_c_l_p, COMP_CPP,
true);
474 art::contractDataFieldScalar<double>(out2_c_l, data_c_p, in_c_l_p, COMP_BLAS,
true);
475 rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
476 if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
477 *outStream <<
"\n\nINCORRECT contractDataFieldScalar (1): check COMP_CPP vs. COMP_BLAS; "
478 <<
" diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) <<
"\n\n";
484 *outStream <<
"\n************ Checking contractDataFieldVector ************\n";
486 int c=5, p=9, l=7, d=3;
493 double zero = INTREPID_TOL*10000.0;
496 for (
int i=0; i<in_c_l_p_d.size(); i++) {
497 in_c_l_p_d[i] = Teuchos::ScalarTraits<double>::random();
499 for (
int i=0; i<data_c_p_d.size(); i++) {
500 data_c_p_d[i] = Teuchos::ScalarTraits<double>::random();
502 for (
int i=0; i<data_c_1_d.size(); i++) {
503 data_c_1_d[i] = Teuchos::ScalarTraits<double>::random();
507 art::contractDataFieldVector<double>(out1_c_l, data_c_p_d, in_c_l_p_d, COMP_CPP);
508 art::contractDataFieldVector<double>(out2_c_l, data_c_p_d, in_c_l_p_d, COMP_BLAS);
509 rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
510 if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
511 *outStream <<
"\n\nINCORRECT contractDataFieldVector (1): check COMP_CPP vs. COMP_BLAS; "
512 <<
" diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) <<
"\n\n";
516 art::contractDataFieldVector<double>(out1_c_l, data_c_1_d, in_c_l_p_d, COMP_CPP);
517 art::contractDataFieldVector<double>(out2_c_l, data_c_1_d, in_c_l_p_d, COMP_BLAS);
518 rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
519 if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
520 *outStream <<
"\n\nINCORRECT contractDataFieldVector (2): check COMP_CPP vs. COMP_BLAS; "
521 <<
" diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) <<
"\n\n";
525 out1_c_l.initialize(2.0); out2_c_l.initialize(2.0);
526 art::contractDataFieldVector<double>(out1_c_l, data_c_p_d, in_c_l_p_d, COMP_CPP,
true);
527 art::contractDataFieldVector<double>(out2_c_l, data_c_p_d, in_c_l_p_d, COMP_BLAS,
true);
528 rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
529 if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
530 *outStream <<
"\n\nINCORRECT contractDataFieldVector (1): check COMP_CPP vs. COMP_BLAS; "
531 <<
" diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) <<
"\n\n";
537 *outStream <<
"\n************ Checking contractDataFieldTensor ************\n";
539 int c=5, p=9, l=7, d1=3, d2=13;
546 double zero = INTREPID_TOL*10000.0;
549 for (
int i=0; i<in_c_l_p_d_d.size(); i++) {
550 in_c_l_p_d_d[i] = Teuchos::ScalarTraits<double>::random();
552 for (
int i=0; i<data_c_p_d_d.size(); i++) {
553 data_c_p_d_d[i] = Teuchos::ScalarTraits<double>::random();
555 for (
int i=0; i<data_c_1_d_d.size(); i++) {
556 data_c_1_d_d[i] = Teuchos::ScalarTraits<double>::random();
560 art::contractDataFieldTensor<double>(out1_c_l, data_c_p_d_d, in_c_l_p_d_d, COMP_CPP);
561 art::contractDataFieldTensor<double>(out2_c_l, data_c_p_d_d, in_c_l_p_d_d, COMP_BLAS);
562 rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
563 if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
564 *outStream <<
"\n\nINCORRECT contractDataFieldTensor (1): check COMP_CPP vs. COMP_BLAS; "
565 <<
" diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) <<
"\n\n";
569 art::contractDataFieldTensor<double>(out1_c_l, data_c_1_d_d, in_c_l_p_d_d, COMP_CPP);
570 art::contractDataFieldTensor<double>(out2_c_l, data_c_1_d_d, in_c_l_p_d_d, COMP_BLAS);
571 rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
572 if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
573 *outStream <<
"\n\nINCORRECT contractDataFieldTensor (1): check COMP_CPP vs. COMP_BLAS; "
574 <<
" diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) <<
"\n\n";
578 out1_c_l.initialize(2.0); out2_c_l.initialize(2.0);
579 art::contractDataFieldTensor<double>(out1_c_l, data_c_p_d_d, in_c_l_p_d_d, COMP_CPP,
true);
580 art::contractDataFieldTensor<double>(out2_c_l, data_c_p_d_d, in_c_l_p_d_d, COMP_BLAS,
true);
581 rst::subtract(&out1_c_l[0], &out2_c_l[0], out2_c_l.size());
582 if (rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) > zero) {
583 *outStream <<
"\n\nINCORRECT contractDataFieldTensor (1): check COMP_CPP vs. COMP_BLAS; "
584 <<
" diff-1norm = " << rst::vectorNorm(&out1_c_l[0], out1_c_l.size(), NORM_ONE) <<
"\n\n";
590 *outStream <<
"\n************ Checking contractDataDataScalar ************\n";
598 double zero = INTREPID_TOL*10000.0;
601 for (
int i=0; i<inl_c_p.size(); i++) {
602 inl_c_p[i] = Teuchos::ScalarTraits<double>::random();
604 for (
int i=0; i<inr_c_p.size(); i++) {
605 inr_c_p[i] = Teuchos::ScalarTraits<double>::random();
608 art::contractDataDataScalar<double>(out1_c, inl_c_p, inr_c_p, COMP_CPP);
609 art::contractDataDataScalar<double>(out2_c, inl_c_p, inr_c_p, COMP_BLAS);
610 rst::subtract(&out1_c[0], &out2_c[0], out2_c.size());
611 if (rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) > zero) {
612 *outStream <<
"\n\nINCORRECT contractDataDataScalar (1): check COMP_CPP vs. COMP_BLAS; "
613 <<
" diff-1norm = " << rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) <<
"\n\n";
617 out1_c.initialize(2.0); out2_c.initialize(2.0);
618 art::contractDataDataScalar<double>(out1_c, inl_c_p, inr_c_p, COMP_CPP,
true);
619 art::contractDataDataScalar<double>(out2_c, inl_c_p, inr_c_p, COMP_BLAS,
true);
620 rst::subtract(&out1_c[0], &out2_c[0], out2_c.size());
621 if (rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) > zero) {
622 *outStream <<
"\n\nINCORRECT contractDataDataScalar (1): check COMP_CPP vs. COMP_BLAS; "
623 <<
" diff-1norm = " << rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) <<
"\n\n";
629 *outStream <<
"\n************ Checking contractDataDataVector ************\n";
637 double zero = INTREPID_TOL*10000.0;
640 for (
int i=0; i<inl_c_p_d.size(); i++) {
641 inl_c_p_d[i] = Teuchos::ScalarTraits<double>::random();
643 for (
int i=0; i<inr_c_p_d.size(); i++) {
644 inr_c_p_d[i] = Teuchos::ScalarTraits<double>::random();
647 art::contractDataDataVector<double>(out1_c, inl_c_p_d, inr_c_p_d, COMP_CPP);
648 art::contractDataDataVector<double>(out2_c, inl_c_p_d, inr_c_p_d, COMP_BLAS);
650 rst::subtract(&out1_c[0], &out2_c[0], out2_c.size());
651 if (rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) > zero) {
652 *outStream <<
"\n\nINCORRECT contractDataDataVector (1): check COMP_CPP vs. COMP_BLAS; "
653 <<
" diff-1norm = " << rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) <<
"\n\n";
658 out1_c.initialize(2.0); out2_c.initialize(2.0);
660 art::contractDataDataVector<double>(out1_c, inl_c_p_d, inr_c_p_d, COMP_CPP,
true);
661 art::contractDataDataVector<double>(out2_c, inl_c_p_d, inr_c_p_d, COMP_BLAS,
true);
663 rst::subtract(&out1_c[0], &out2_c[0], out2_c.size());
664 if (rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) > zero) {
665 *outStream <<
"\n\nINCORRECT contractDataDataVector (1): check COMP_CPP vs. COMP_BLAS; "
666 <<
" diff-1norm = " << rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) <<
"\n\n";
672 *outStream <<
"\n************ Checking contractDataDataTensor ************\n";
674 int c=5, p=9, d1=13, d2=5;
680 double zero = INTREPID_TOL*10000.0;
683 for (
int i=0; i<inl_c_p_d_d.size(); i++) {
684 inl_c_p_d_d[i] = Teuchos::ScalarTraits<double>::random();
686 for (
int i=0; i<inr_c_p_d_d.size(); i++) {
687 inr_c_p_d_d[i] = Teuchos::ScalarTraits<double>::random();
690 art::contractDataDataTensor<double>(out1_c, inl_c_p_d_d, inr_c_p_d_d, COMP_CPP);
691 art::contractDataDataTensor<double>(out2_c, inl_c_p_d_d, inr_c_p_d_d, COMP_BLAS);
693 rst::subtract(&out1_c[0], &out2_c[0], out2_c.size());
694 if (rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) > zero) {
695 *outStream <<
"\n\nINCORRECT contractDataDataTensor (1): check COMP_CPP vs. COMP_BLAS; "
696 <<
" diff-1norm = " << rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) <<
"\n\n";
701 out1_c.initialize(2.0); out2_c.initialize(2.0);
703 art::contractDataDataTensor<double>(out1_c, inl_c_p_d_d, inr_c_p_d_d, COMP_CPP,
true);
704 art::contractDataDataTensor<double>(out2_c, inl_c_p_d_d, inr_c_p_d_d, COMP_BLAS,
true);
706 rst::subtract(&out1_c[0], &out2_c[0], out2_c.size());
707 if (rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) > zero) {
708 *outStream <<
"\n\nINCORRECT contractDataDataTensor (1): check COMP_CPP vs. COMP_BLAS; "
709 <<
" diff-1norm = " << rst::vectorNorm(&out1_c[0], out1_c.size(), NORM_ONE) <<
"\n\n";
717 catch (
const std::logic_error & err) {
718 *outStream <<
"UNEXPECTED ERROR !!! ----------------------------------------------------------\n";
719 *outStream << err.what() <<
'\n';
720 *outStream <<
"-------------------------------------------------------------------------------" <<
"\n\n";
726 std::cout <<
"End Result: TEST FAILED\n";
728 std::cout <<
"End Result: TEST PASSED\n";
731 std::cout.copyfmt(oldFormatState);
Header file for utility class to provide multidimensional containers.