42 template <
typename ArrayType>
45 const std::string& tag,
47 typedef typename ArrayType::value_type
FadType;
50 bool success = (x.size() == x2.size());
51 out << tag <<
" Fad array size test";
56 out <<
": \n\tExpected: " << x.size() <<
", \n\tGot: " << x2.size()
60 const int sz = x.size();
61 for (
int i=0; i<sz; i++) {
63 out << tag <<
" Fad array comparison test " << i;
68 out <<
": \n\tExpected: " << x[i] <<
", \n\tGot: " << x2[i] <<
"." 70 success = success && success2;
76 template<
typename Ordinal>
83 out <<
"\nChecking that the above test passed in all processes ...";
84 int thisResult = ( result ? 1 : 0 );
88 const bool passed = sumResult==Teuchos::size(comm);
92 out <<
" (sumResult="<<sumResult<<
"!=numProcs="<<Teuchos::size(comm)<<
") failed\n";
96 #define FAD_BASE_COMM_TESTS(FadType, FAD) \ 97 TEUCHOS_UNIT_TEST( FAD##_Comm, Fad_Broadcast ) { \ 98 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 99 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 103 ValueTypeSerializer<int,FadType> fts( \ 104 rcp(new ValueTypeSerializer<int,double>), p); \ 106 Teuchos::Array<FadType> x(n), x2(n), x3(n); \ 107 for (int i=0; i<n; i++) { \ 108 x[i] = FadType(p, rnd.number()); \ 109 for (int j=0; j<p; j++) \ 110 x[i].fastAccessDx(j) = rnd.number(); \ 112 for (int i=0; i<n; i++) { \ 113 x2[i] = FadType(p, 0.0); \ 115 if (comm->getRank() == 0) { \ 120 Teuchos::broadcast(*comm, 0, n, &x2[0]); \ 121 bool success1 = checkFadArrays( \ 122 x, x2, std::string(#FAD)+" Broadcast", out); \ 123 success1 = checkResultOnAllProcs(*comm, out, success1); \ 125 Teuchos::broadcast(*comm, fts, 0, n, &x3[0]); \ 126 bool success2 = checkFadArrays( \ 127 x, x3, std::string(#FAD)+" Broadcast FTS", out); \ 128 success2 = checkResultOnAllProcs(*comm, out, success2); \ 130 success = success1 && success2; \ 133 TEUCHOS_UNIT_TEST( FAD##_Comm, Fad_GatherAll ) { \ 134 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 135 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 139 int size = comm->getSize(); \ 140 int rank = comm->getRank(); \ 142 ValueTypeSerializer<int,FadType> fts( \ 143 rcp(new ValueTypeSerializer<int,double>), p); \ 145 Teuchos::Array<FadType> x(n), x2(N), x3(N), x4(N); \ 146 for (int i=0; i<n; i++) { \ 147 x[i] = FadType(p, (rank+1)*(i+1)); \ 148 for (int j=0; j<p; j++) \ 149 x[i].fastAccessDx(j) = (rank+1)*(i+1)*(j+1); \ 151 for (int i=0; i<N; i++) { \ 152 x2[i] = FadType(p, 0.0); \ 154 for (int j=0; j<size; j++) { \ 155 for (int i=0; i<n; i++) { \ 156 x3[n*j+i] = FadType(p, (j+1)*(i+1)); \ 157 for (int k=0; k<p; k++) \ 158 x3[n*j+i].fastAccessDx(k) = (j+1)*(i+1)*(k+1); \ 162 Teuchos::gatherAll(*comm, n, &x[0], N, &x2[0]); \ 163 bool success1 = checkFadArrays( \ 164 x3, x2, std::string(#FAD)+" Gather All", out); \ 165 success1 = checkResultOnAllProcs(*comm, out, success1); \ 167 Teuchos::gatherAll(*comm, fts, n, &x[0], N, &x4[0]); \ 168 bool success2 = checkFadArrays( \ 169 x3, x4, std::string(#FAD)+" Gather All FTS", out); \ 170 success2 = checkResultOnAllProcs(*comm, out, success2); \ 172 success = success1 && success2; \ 175 TEUCHOS_UNIT_TEST( FAD##_Comm, Fad_SumAll ) { \ 176 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 177 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 181 int num_proc = comm->getSize(); \ 182 ValueTypeSerializer<int,FadType> fts( \ 183 rcp(new ValueTypeSerializer<int,double>), p); \ 185 Teuchos::Array<FadType> x(n), sums(n), sums2(n), sums3(n); \ 186 for (int i=0; i<n; i++) { \ 187 x[i] = FadType(p, 1.0*(i+1)); \ 188 for (int j=0; j<p; j++) \ 189 x[i].fastAccessDx(j) = 2.0*(i+1); \ 191 for (int i=0; i<n; i++) { \ 192 sums[i] = FadType(p, 1.0*(i+1)*num_proc); \ 193 for (int j=0; j<p; j++) \ 194 sums[i].fastAccessDx(j) = 2.0*(i+1)*num_proc; \ 196 for (int i=0; i<n; i++) { \ 197 sums2[i] = FadType(p, 0.0); \ 200 Teuchos::reduceAll(*comm, Teuchos::REDUCE_SUM, n, &x[0], &sums2[0]); \ 201 bool success1 = checkFadArrays( \ 202 sums, sums2, std::string(#FAD)+" Sum All", out); \ 203 success1 = checkResultOnAllProcs(*comm, out, success1); \ 205 Teuchos::reduceAll(*comm, fts, Teuchos::REDUCE_SUM, n, &x[0], &sums3[0]); \ 206 bool success2 = checkFadArrays( \ 207 sums, sums3, std::string(#FAD)+" Sum All FTS", out); \ 208 success2 = checkResultOnAllProcs(*comm, out, success2); \ 210 success = success1 && success2; \ 213 TEUCHOS_UNIT_TEST( FAD##_Comm, Fad_MaxAll ) { \ 214 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 215 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 219 int rank = comm->getRank(); \ 220 int num_proc = comm->getSize(); \ 221 ValueTypeSerializer<int,FadType> fts( \ 222 rcp(new ValueTypeSerializer<int,double>), p); \ 224 Teuchos::Array<FadType> x(n), maxs(n), maxs2(n), maxs3(n); \ 225 for (int i=0; i<n; i++) { \ 226 x[i] = FadType(p, 1.0*(i+1)*(rank+1)); \ 227 for (int j=0; j<p; j++) \ 228 x[i].fastAccessDx(j) = 2.0*(i+1)*(rank+1); \ 230 for (int i=0; i<n; i++) { \ 231 maxs[i] = FadType(p, 1.0*(i+1)*num_proc); \ 232 for (int j=0; j<p; j++) \ 233 maxs[i].fastAccessDx(j) = 2.0*(i+1)*num_proc; \ 235 for (int i=0; i<n; i++) { \ 236 maxs2[i] = FadType(p, 0.0); \ 239 Teuchos::reduceAll(*comm, Teuchos::REDUCE_MAX, n, &x[0], &maxs2[0]); \ 240 bool success1 = checkFadArrays( \ 241 maxs, maxs2, std::string(#FAD)+" Max All", out); \ 242 success1 = checkResultOnAllProcs(*comm, out, success1); \ 244 Teuchos::reduceAll(*comm, fts, Teuchos::REDUCE_MAX, n, &x[0], &maxs3[0]); \ 245 bool success2 = checkFadArrays( \ 246 maxs, maxs3, std::string(#FAD)+" Max All FTS", out); \ 247 success2 = checkResultOnAllProcs(*comm, out, success2); \ 249 success = success1 && success2; \ 252 TEUCHOS_UNIT_TEST( FAD##_Comm, Fad_MinAll ) { \ 253 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 254 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 258 int rank = comm->getRank(); \ 259 ValueTypeSerializer<int,FadType> fts( \ 260 rcp(new ValueTypeSerializer<int,double>), p); \ 262 Teuchos::Array<FadType> x(n), mins(n), mins2(n), mins3(n); \ 263 for (int i=0; i<n; i++) { \ 264 x[i] = FadType(p, 1.0*(i+1)*(rank+1)); \ 265 for (int j=0; j<p; j++) \ 266 x[i].fastAccessDx(j) = 2.0*(i+1)*(rank+1); \ 268 for (int i=0; i<n; i++) { \ 269 mins[i] = FadType(p, 1.0*(i+1)); \ 270 for (int j=0; j<p; j++) \ 271 mins[i].fastAccessDx(j) = 2.0*(i+1); \ 273 for (int i=0; i<n; i++) { \ 274 mins2[i] = FadType(p, 0.0); \ 277 Teuchos::reduceAll(*comm, Teuchos::REDUCE_MIN, n, &x[0], &mins2[0]); \ 278 bool success1 = checkFadArrays( \ 279 mins, mins2, std::string(#FAD)+" Min All", out); \ 280 success1 = checkResultOnAllProcs(*comm, out, success1); \ 282 Teuchos::reduceAll(*comm, fts, Teuchos::REDUCE_MIN, n, &x[0], &mins3[0]); \ 283 bool success2 = checkFadArrays( \ 284 mins, mins3, std::string(#FAD)+" Min All FTS", out); \ 285 success2 = checkResultOnAllProcs(*comm, out, success2); \ 287 success = success1 && success2; \ 290 TEUCHOS_UNIT_TEST( FAD##_Comm, Fad_ScanSum ) { \ 291 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 292 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 296 int rank = comm->getRank(); \ 297 ValueTypeSerializer<int,FadType> fts( \ 298 rcp(new ValueTypeSerializer<int,double>), p); \ 300 Teuchos::Array<FadType> x(n), sums(n), sums2(n), sums3(n); \ 301 for (int i=0; i<n; i++) { \ 302 x[i] = FadType(p, 1.0*(i+1)); \ 303 for (int j=0; j<p; j++) \ 304 x[i].fastAccessDx(j) = 2.0*(i+1); \ 306 for (int i=0; i<n; i++) { \ 307 sums[i] = FadType(p, 1.0*(i+1)*(rank+1)); \ 308 for (int j=0; j<p; j++) \ 309 sums[i].fastAccessDx(j) = 2.0*(i+1)*(rank+1); \ 311 for (int i=0; i<n; i++) { \ 312 sums2[i] = FadType(p, 0.0); \ 315 Teuchos::scan(*comm, Teuchos::REDUCE_SUM, n, &x[0], &sums2[0]); \ 316 bool success1 = checkFadArrays( \ 317 sums, sums2, std::string(#FAD)+" Scan Sum", out); \ 318 success1 = checkResultOnAllProcs(*comm, out, success1); \ 320 Teuchos::scan(*comm, fts, Teuchos::REDUCE_SUM, n, &x[0], &sums3[0]); \ 321 bool success2 = checkFadArrays( \ 322 sums, sums3, std::string(#FAD)+" Scan Sum FTS", out); \ 323 success2 = checkResultOnAllProcs(*comm, out, success2); \ 325 success = success1 && success2; \ 328 TEUCHOS_UNIT_TEST( FAD##_Comm, Fad_ScanMax ) { \ 329 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 330 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 334 int rank = comm->getRank(); \ 335 ValueTypeSerializer<int,FadType> fts( \ 336 rcp(new ValueTypeSerializer<int,double>), p); \ 338 Teuchos::Array<FadType> x(n), maxs(n), maxs2(n), maxs3(n); \ 339 for (int i=0; i<n; i++) { \ 340 x[i] = FadType(p, 1.0*(i+1)*(rank+1)); \ 341 for (int j=0; j<p; j++) \ 342 x[i].fastAccessDx(j) = 2.0*(i+1)*(rank+1); \ 344 for (int i=0; i<n; i++) { \ 345 maxs[i] = FadType(p, 1.0*(i+1)*(rank+1)); \ 346 for (int j=0; j<p; j++) \ 347 maxs[i].fastAccessDx(j) = 2.0*(i+1)*(rank+1); \ 349 for (int i=0; i<n; i++) { \ 350 maxs2[i] = FadType(p, 0.0); \ 353 Teuchos::scan(*comm, Teuchos::REDUCE_MAX, n, &x[0], &maxs2[0]); \ 354 bool success1 = checkFadArrays( \ 355 maxs, maxs2, std::string(#FAD)+" Scan Max", out); \ 356 success1 = checkResultOnAllProcs(*comm, out, success1); \ 358 Teuchos::scan(*comm, fts, Teuchos::REDUCE_MAX, n, &x[0], &maxs3[0]); \ 359 bool success2 = checkFadArrays( \ 360 maxs, maxs3, std::string(#FAD)+" Scan Max FTS", out); \ 361 success2 = checkResultOnAllProcs(*comm, out, success2); \ 363 success = success1 && success2; \ 366 TEUCHOS_UNIT_TEST( FAD##_Comm, Fad_ScanMin ) { \ 367 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 368 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 372 int rank = comm->getRank(); \ 373 ValueTypeSerializer<int,FadType> fts( \ 374 rcp(new ValueTypeSerializer<int,double>), p); \ 376 Teuchos::Array<FadType> x(n), mins(n), mins2(n), mins3(n); \ 377 for (int i=0; i<n; i++) { \ 378 x[i] = FadType(p, 1.0*(i+1)*(rank+1)); \ 379 for (int j=0; j<p; j++) \ 380 x[i].fastAccessDx(j) = 2.0*(i+1)*(rank+1); \ 382 for (int i=0; i<n; i++) { \ 383 mins[i] = FadType(p, 1.0*(i+1)); \ 384 for (int j=0; j<p; j++) \ 385 mins[i].fastAccessDx(j) = 2.0*(i+1); \ 387 for (int i=0; i<n; i++) { \ 388 mins2[i] = FadType(p, 0.0); \ 391 Teuchos::scan(*comm, Teuchos::REDUCE_MIN, n, &x[0], &mins2[0]); \ 392 bool success1 = checkFadArrays( \ 393 mins, mins2, std::string(#FAD)+" Scan Min", out); \ 394 success1 = checkResultOnAllProcs(*comm, out, success1); \ 396 Teuchos::scan(*comm, fts, Teuchos::REDUCE_MIN, n, &x[0], &mins3[0]); \ 397 bool success2 = checkFadArrays( \ 398 mins, mins3, std::string(#FAD)+" Scan Min FTS", out); \ 399 success2 = checkResultOnAllProcs(*comm, out, success2); \ 401 success = success1 && success2; \ 404 TEUCHOS_UNIT_TEST( FAD##_Comm, Fad_SendReceive ) { \ 405 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 406 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 408 int num_proc = comm->getSize(); \ 409 if (num_proc > 1) { \ 410 int rank = comm->getRank(); \ 413 ValueTypeSerializer<int,FadType> fts( \ 414 rcp(new ValueTypeSerializer<int,double>), p); \ 416 Teuchos::Array<FadType> x(n), x2(n), x3(n); \ 417 for (int i=0; i<n; i++) { \ 418 x[i] = FadType(p, 1.0*(i+1)); \ 419 for (int j=0; j<p; j++) \ 420 x[i].fastAccessDx(j) = 2.0*(i+1)*(j+1); \ 422 for (int i=0; i<n; i++) { \ 423 x2[i] = FadType(p, 0.0); \ 430 if (rank == 0) Teuchos::send(*comm, n, &x[0], 1); \ 431 if (rank == 1) Teuchos::receive(*comm, 0, n, &x2[0]); \ 432 bool success1 = checkFadArrays( \ 433 x, x2, std::string(#FAD)+" Send/Receive", out); \ 434 success1 = checkResultOnAllProcs(*comm, out, success1); \ 436 if (rank == 0) Teuchos::send(*comm, fts, n, &x[0], 1); \ 437 if (rank == 1) Teuchos::receive(*comm, fts, 0, n, &x3[0]); \ 438 bool success2 = checkFadArrays( \ 439 x, x3, std::string(#FAD)+" Send/Receive FTS", out); \ 440 success2 = checkResultOnAllProcs(*comm, out, success2); \ 442 success = success1 && success2; \ 448 TEUCHOS_UNIT_TEST( FAD##_Comm, FadFad_Broadcast ) { \ 449 typedef Sacado::mpl::apply<FadType,FadType>::type FadFadType; \ 450 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 451 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 456 RCP< ValueTypeSerializer<int,FadType> > fts = \ 457 rcp(new ValueTypeSerializer<int,FadType>( \ 458 rcp(new ValueTypeSerializer<int,double>), p1)); \ 459 ValueTypeSerializer<int,FadFadType> ffts(fts, p2); \ 461 Teuchos::Array<FadFadType> x(n), x2(n), x3(n); \ 462 for (int i=0; i<n; i++) { \ 463 FadType f(p1, rnd.number()); \ 464 for (int k=0; k<p1; k++) \ 465 f.fastAccessDx(k) = rnd.number(); \ 466 x[i] = FadFadType(p2, f); \ 467 for (int j=0; j<p2; j++) { \ 468 FadType g(p1, rnd.number()); \ 469 for (int k=0; k<p1; k++) \ 470 g.fastAccessDx(k) = rnd.number(); \ 471 x[i].fastAccessDx(j) = g; \ 474 for (int i=0; i<n; i++) { \ 475 x2[i] = FadFadType(p2, FadType(p1, 0.0)); \ 476 for (int j=0; j<p2; j++) \ 477 x2[i].fastAccessDx(j) = FadType(p1, 0.0); \ 479 if (comm->getRank() == 0) { \ 484 Teuchos::broadcast(*comm, 0, n, &x2[0]); \ 485 bool success1 = checkFadArrays( \ 486 x, x2, std::string(#FAD)+"<"+#FAD+"> Broadcast", out); \ 487 success1 = checkResultOnAllProcs(*comm, out, success1); \ 489 Teuchos::broadcast(*comm, ffts, 0, n, &x3[0]); \ 490 bool success2 = checkFadArrays( \ 491 x, x3, std::string(#FAD)+"<"+#FAD+"> Broadcast FTS", out); \ 492 success2 = checkResultOnAllProcs(*comm, out, success2); \ 494 success = success1 && success2; \ 497 TEUCHOS_UNIT_TEST( FAD##_Comm, FadFad_GatherAll ) { \ 498 typedef Sacado::mpl::apply<FadType,FadType>::type FadFadType; \ 499 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 500 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 505 int size = comm->getSize(); \ 506 int rank = comm->getRank(); \ 508 RCP< ValueTypeSerializer<int,FadType> > fts = \ 509 rcp(new ValueTypeSerializer<int,FadType>( \ 510 rcp(new ValueTypeSerializer<int,double>), p1)); \ 511 ValueTypeSerializer<int,FadFadType> ffts(fts, p2); \ 513 Teuchos::Array<FadFadType> x(n), x2(N), x3(N), x4(N); \ 514 for (int i=0; i<n; i++) { \ 515 FadType f(p1, (rank+1)*(i+1)); \ 516 for (int k=0; k<p1; k++) \ 517 f.fastAccessDx(k) = (rank+1)*(i+1)*(k+1); \ 518 x[i] = FadFadType(p2, f); \ 519 for (int j=0; j<p2; j++) { \ 520 x[i].fastAccessDx(j) = f; \ 523 for (int i=0; i<N; i++) { \ 524 x2[i] = FadFadType(p2, FadType(p1, 0.0)); \ 525 for (int j=0; j<p2; j++) \ 526 x2[i].fastAccessDx(j) = FadType(p1, 0.0); \ 528 for (int j=0; j<size; j++) { \ 529 for (int i=0; i<n; i++) { \ 530 FadType f(p1, (j+1)*(i+1)); \ 531 for (int k=0; k<p1; k++) \ 532 f.fastAccessDx(k) = (j+1)*(i+1)*(k+1); \ 533 x3[n*j+i] = FadFadType(p2, f); \ 534 for (int k=0; k<p2; k++) \ 535 x3[n*j+i].fastAccessDx(k) = f; \ 539 Teuchos::gatherAll(*comm, n, &x[0], N, &x2[0]); \ 540 bool success1 = checkFadArrays( \ 541 x3, x2, std::string(#FAD)+"<"+#FAD+"> Gather All", out); \ 542 success1 = checkResultOnAllProcs(*comm, out, success1); \ 544 Teuchos::gatherAll(*comm, ffts, n, &x[0], N, &x4[0]); \ 545 bool success2 = checkFadArrays( \ 546 x3, x4, std::string(#FAD)+"<"+#FAD+"> Gather All FTS", out); \ 547 success2 = checkResultOnAllProcs(*comm, out, success2); \ 549 success = success1 && success2; \ 552 TEUCHOS_UNIT_TEST( FAD##_Comm, FadFad_SumAll ) { \ 553 typedef Sacado::mpl::apply<FadType,FadType>::type FadFadType; \ 554 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 555 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 560 int num_proc = comm->getSize(); \ 561 RCP< ValueTypeSerializer<int,FadType> > fts = \ 562 rcp(new ValueTypeSerializer<int,FadType>( \ 563 rcp(new ValueTypeSerializer<int,double>), p1)); \ 564 ValueTypeSerializer<int,FadFadType> ffts(fts, p2); \ 566 Teuchos::Array<FadFadType> x(n), sums(n), sums2(n), sums3(n); \ 567 for (int i=0; i<n; i++) { \ 568 FadType f(p1, 1.0*(i+1)); \ 569 for (int k=0; k<p1; k++) \ 570 f.fastAccessDx(k) = 2.0*(i+1); \ 571 x[i] = FadFadType(p2, f); \ 572 for (int j=0; j<p2; j++) { \ 573 x[i].fastAccessDx(j) = f; \ 576 for (int i=0; i<n; i++) { \ 577 FadType f(p1, 1.0*(i+1)*num_proc); \ 578 for (int k=0; k<p1; k++) \ 579 f.fastAccessDx(k) = 2.0*(i+1)*num_proc; \ 580 sums[i] = FadFadType(p2, f); \ 581 for (int j=0; j<p2; j++) \ 582 sums[i].fastAccessDx(j) = f; \ 584 for (int i=0; i<n; i++) { \ 585 sums2[i] = FadFadType(p2, FadType(p1, 0.0)); \ 586 for (int j=0; j<p2; j++) \ 587 sums2[i].fastAccessDx(j) = FadType(p1, 0.0); \ 590 Teuchos::reduceAll(*comm, Teuchos::REDUCE_SUM, n, &x[0], &sums2[0]); \ 591 bool success1 = checkFadArrays( \ 592 sums, sums2, std::string(#FAD)+"<"+#FAD+"> Sum All", out); \ 593 success1 = checkResultOnAllProcs(*comm, out, success1); \ 595 Teuchos::reduceAll(*comm, ffts, Teuchos::REDUCE_SUM, n, &x[0], &sums3[0]); \ 596 bool success2 = checkFadArrays( \ 597 sums, sums3, std::string(#FAD)+"<"+#FAD+"> Sum All", out); \ 598 success2 = checkResultOnAllProcs(*comm, out, success2); \ 600 success = success1 && success2; \ 603 TEUCHOS_UNIT_TEST( FAD##_Comm, FadFad_MaxAll ) { \ 604 typedef Sacado::mpl::apply<FadType,FadType>::type FadFadType; \ 605 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 606 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 611 int rank = comm->getRank(); \ 612 int num_proc = comm->getSize(); \ 613 RCP< ValueTypeSerializer<int,FadType> > fts = \ 614 rcp(new ValueTypeSerializer<int,FadType>( \ 615 rcp(new ValueTypeSerializer<int,double>), p1)); \ 616 ValueTypeSerializer<int,FadFadType> ffts(fts, p2); \ 618 Teuchos::Array<FadFadType> x(n), maxs(n), maxs2(n), maxs3(n); \ 619 for (int i=0; i<n; i++) { \ 620 FadType f(p1, 1.0*(i+1)*(rank+1)); \ 621 for (int k=0; k<p1; k++) \ 622 f.fastAccessDx(k) = 2.0*(i+1)*(rank+1); \ 623 x[i] = FadFadType(p2, f); \ 624 for (int j=0; j<p2; j++) { \ 625 x[i].fastAccessDx(j) = f; \ 628 for (int i=0; i<n; i++) { \ 629 FadType f(p1, 1.0*(i+1)*num_proc); \ 630 for (int k=0; k<p1; k++) \ 631 f.fastAccessDx(k) = 2.0*(i+1)*num_proc; \ 632 maxs[i] = FadFadType(p2, f); \ 633 for (int j=0; j<p2; j++) \ 634 maxs[i].fastAccessDx(j) = f; \ 636 for (int i=0; i<n; i++) { \ 637 maxs2[i] = FadFadType(p2, FadType(p1, 0.0)); \ 638 for (int j=0; j<p2; j++) \ 639 maxs2[i].fastAccessDx(j) = FadType(p1, 0.0); \ 642 Teuchos::reduceAll(*comm, Teuchos::REDUCE_MAX, n, &x[0], &maxs2[0]); \ 643 bool success1 = checkFadArrays( \ 644 maxs, maxs2, std::string(#FAD)+"<"+#FAD+"> Max All", out); \ 645 success1 = checkResultOnAllProcs(*comm, out, success1); \ 647 Teuchos::reduceAll(*comm, ffts, Teuchos::REDUCE_MAX, n, &x[0], &maxs3[0]); \ 648 bool success2 = checkFadArrays( \ 649 maxs, maxs3, std::string(#FAD)+"<"+#FAD+"> Max All FTS", out); \ 650 success2 = checkResultOnAllProcs(*comm, out, success2); \ 652 success = success1 && success2; \ 655 TEUCHOS_UNIT_TEST( FAD##_Comm, FadFad_MinAll ) { \ 656 typedef Sacado::mpl::apply<FadType,FadType>::type FadFadType; \ 657 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 658 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 663 int rank = comm->getRank(); \ 664 RCP< ValueTypeSerializer<int,FadType> > fts = \ 665 rcp(new ValueTypeSerializer<int,FadType>( \ 666 rcp(new ValueTypeSerializer<int,double>), p1)); \ 667 ValueTypeSerializer<int,FadFadType> ffts(fts, p2); \ 669 Teuchos::Array<FadFadType> x(n), mins(n), mins2(n), mins3(n); \ 670 for (int i=0; i<n; i++) { \ 671 FadType f(p1, 1.0*(i+1)*(rank+1)); \ 672 for (int k=0; k<p1; k++) \ 673 f.fastAccessDx(k) = 2.0*(i+1)*(rank+1); \ 674 x[i] = FadFadType(p2, f); \ 675 for (int j=0; j<p2; j++) { \ 676 x[i].fastAccessDx(j) = f; \ 679 for (int i=0; i<n; i++) { \ 680 FadType f(p1, 1.0*(i+1)); \ 681 for (int k=0; k<p1; k++) \ 682 f.fastAccessDx(k) = 2.0*(i+1); \ 683 mins[i] = FadFadType(p2, f); \ 684 for (int j=0; j<p2; j++) \ 685 mins[i].fastAccessDx(j) = f; \ 687 for (int i=0; i<n; i++) { \ 688 mins2[i] = FadFadType(p2, FadType(p1, 0.0)); \ 689 for (int j=0; j<p2; j++) \ 690 mins2[i].fastAccessDx(j) = FadType(p1, 0.0); \ 693 Teuchos::reduceAll(*comm, Teuchos::REDUCE_MIN, n, &x[0], &mins2[0]); \ 694 bool success1 = checkFadArrays( \ 695 mins, mins2, std::string(#FAD)+"<"+#FAD+"> Min All", out); \ 696 success1 = checkResultOnAllProcs(*comm, out, success1); \ 698 Teuchos::reduceAll(*comm, ffts, Teuchos::REDUCE_MIN, n, &x[0], &mins3[0]); \ 699 bool success2 = checkFadArrays( \ 700 mins, mins3, std::string(#FAD)+"<"+#FAD+"> Min All FTS", out); \ 701 success2 = checkResultOnAllProcs(*comm, out, success2); \ 703 success = success1 && success2; \ 706 TEUCHOS_UNIT_TEST( FAD##_Comm, FadFad_ScanSum ) { \ 707 typedef Sacado::mpl::apply<FadType,FadType>::type FadFadType; \ 708 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 709 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 714 int rank = comm->getRank(); \ 715 RCP< ValueTypeSerializer<int,FadType> > fts = \ 716 rcp(new ValueTypeSerializer<int,FadType>( \ 717 rcp(new ValueTypeSerializer<int,double>), p1)); \ 718 ValueTypeSerializer<int,FadFadType> ffts(fts, p2); \ 720 Teuchos::Array<FadFadType> x(n), sums(n), sums2(n), sums3(n); \ 721 for (int i=0; i<n; i++) { \ 722 FadType f(p1, 1.0*(i+1)); \ 723 for (int k=0; k<p1; k++) \ 724 f.fastAccessDx(k) = 2.0*(i+1); \ 725 x[i] = FadFadType(p2, f); \ 726 for (int j=0; j<p2; j++) { \ 727 x[i].fastAccessDx(j) = f; \ 730 for (int i=0; i<n; i++) { \ 731 FadType f(p1, 1.0*(i+1)*(rank+1)); \ 732 for (int k=0; k<p1; k++) \ 733 f.fastAccessDx(k) = 2.0*(i+1)*(rank+1); \ 734 sums[i] = FadFadType(p2, f); \ 735 for (int j=0; j<p2; j++) \ 736 sums[i].fastAccessDx(j) = f; \ 738 for (int i=0; i<n; i++) { \ 739 sums2[i] = FadFadType(p2, FadType(p1, 0.0)); \ 740 for (int j=0; j<p2; j++) \ 741 sums2[i].fastAccessDx(j) = FadType(p1, 0.0); \ 744 Teuchos::scan(*comm, Teuchos::REDUCE_SUM, n, &x[0], &sums2[0]); \ 745 bool success1 = checkFadArrays( \ 746 sums, sums2, std::string(#FAD)+"<"+#FAD+"> Scan Sum", out); \ 747 success1 = checkResultOnAllProcs(*comm, out, success1); \ 749 Teuchos::scan(*comm, ffts, Teuchos::REDUCE_SUM, n, &x[0], &sums3[0]); \ 750 bool success2 = checkFadArrays( \ 751 sums, sums3, std::string(#FAD)+"<"+#FAD+"> Scan Sum FTS", out); \ 752 success2 = checkResultOnAllProcs(*comm, out, success2); \ 754 success = success1 && success2; \ 757 TEUCHOS_UNIT_TEST( FAD##_Comm, FadFad_ScanMax ) { \ 758 typedef Sacado::mpl::apply<FadType,FadType>::type FadFadType; \ 759 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 760 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 765 int rank = comm->getRank(); \ 766 RCP< ValueTypeSerializer<int,FadType> > fts = \ 767 rcp(new ValueTypeSerializer<int,FadType>( \ 768 rcp(new ValueTypeSerializer<int,double>), p1)); \ 769 ValueTypeSerializer<int,FadFadType> ffts(fts, p2); \ 771 Teuchos::Array<FadFadType> x(n), maxs(n), maxs2(n), maxs3(n); \ 772 for (int i=0; i<n; i++) { \ 773 FadType f(p1, 1.0*(i+1)*(rank+1)); \ 774 for (int k=0; k<p1; k++) \ 775 f.fastAccessDx(k) = 2.0*(i+1)*(rank+1); \ 776 x[i] = FadFadType(p2, f); \ 777 for (int j=0; j<p2; j++) { \ 778 x[i].fastAccessDx(j) = f; \ 781 for (int i=0; i<n; i++) { \ 782 FadType f(p1, 1.0*(i+1)*(rank+1)); \ 783 for (int k=0; k<p1; k++) \ 784 f.fastAccessDx(k) = 2.0*(i+1)*(rank+1); \ 785 maxs[i] = FadFadType(p2, f); \ 786 for (int j=0; j<p2; j++) \ 787 maxs[i].fastAccessDx(j) = f; \ 789 for (int i=0; i<n; i++) { \ 790 maxs2[i] = FadFadType(p2, FadType(p1, 0.0)); \ 791 for (int j=0; j<p2; j++) \ 792 maxs2[i].fastAccessDx(j) = FadType(p1, 0.0); \ 795 Teuchos::scan(*comm, Teuchos::REDUCE_MAX, n, &x[0], &maxs2[0]); \ 796 bool success1 = checkFadArrays( \ 797 maxs, maxs2, std::string(#FAD)+"<"+#FAD+"> Scan Max", out); \ 798 success1 = checkResultOnAllProcs(*comm, out, success1); \ 800 Teuchos::scan(*comm, ffts, Teuchos::REDUCE_MAX, n, &x[0], &maxs3[0]); \ 801 bool success2 = checkFadArrays( \ 802 maxs, maxs3, std::string(#FAD)+"<"+#FAD+"> Scan Max FTS", out); \ 803 success2 = checkResultOnAllProcs(*comm, out, success2); \ 805 success = success1 && success2; \ 808 TEUCHOS_UNIT_TEST( FAD##_Comm, FadFad_ScanMin ) { \ 809 typedef Sacado::mpl::apply<FadType,FadType>::type FadFadType; \ 810 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 811 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 816 int rank = comm->getRank(); \ 817 RCP< ValueTypeSerializer<int,FadType> > fts = \ 818 rcp(new ValueTypeSerializer<int,FadType>( \ 819 rcp(new ValueTypeSerializer<int,double>), p1)); \ 820 ValueTypeSerializer<int,FadFadType> ffts(fts, p2); \ 822 Teuchos::Array<FadFadType> x(n), mins(n), mins2(n), mins3(n); \ 823 for (int i=0; i<n; i++) { \ 824 FadType f(p1, 1.0*(i+1)*(rank+1)); \ 825 for (int k=0; k<p1; k++) \ 826 f.fastAccessDx(k) = 2.0*(i+1)*(rank+1); \ 827 x[i] = FadFadType(p2, f); \ 828 for (int j=0; j<p2; j++) { \ 829 x[i].fastAccessDx(j) = f; \ 832 for (int i=0; i<n; i++) { \ 833 FadType f(p1, 1.0*(i+1)); \ 834 for (int k=0; k<p1; k++) \ 835 f.fastAccessDx(k) = 2.0*(i+1); \ 836 mins[i] = FadFadType(p2, f); \ 837 for (int j=0; j<p2; j++) \ 838 mins[i].fastAccessDx(j) = f; \ 840 for (int i=0; i<n; i++) { \ 841 mins2[i] = FadFadType(p2, FadType(p1, 0.0)); \ 842 for (int j=0; j<p2; j++) \ 843 mins2[i].fastAccessDx(j) = FadType(p1, 0.0); \ 846 Teuchos::scan(*comm, Teuchos::REDUCE_MIN, n, &x[0], &mins2[0]); \ 847 bool success1 = checkFadArrays( \ 848 mins, mins2, std::string(#FAD)+"<"+#FAD+"> Scan Min", out); \ 849 success1 = checkResultOnAllProcs(*comm, out, success1); \ 851 Teuchos::scan(*comm, ffts, Teuchos::REDUCE_MIN, n, &x[0], &mins3[0]); \ 852 bool success2 = checkFadArrays( \ 853 mins, mins3, std::string(#FAD)+"<"+#FAD+"> Scan Min FTS", out); \ 854 success2 = checkResultOnAllProcs(*comm, out, success2); \ 856 success = success1 && success2; \ 859 TEUCHOS_UNIT_TEST( FAD##_Comm, FadFad_SendReceive ) { \ 860 typedef Sacado::mpl::apply<FadType,FadType>::type FadFadType; \ 861 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 862 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 864 int num_proc = comm->getSize(); \ 865 if (num_proc > 1) { \ 866 int rank = comm->getRank(); \ 870 RCP< ValueTypeSerializer<int,FadType> > fts = \ 871 rcp(new ValueTypeSerializer<int,FadType>( \ 872 rcp(new ValueTypeSerializer<int,double>), p1)); \ 873 ValueTypeSerializer<int,FadFadType> ffts(fts, p2); \ 875 Teuchos::Array<FadFadType> x(n), x2(n), x3(n); \ 876 for (int i=0; i<n; i++) { \ 877 FadType f(p1, 1.0*(i+1)); \ 878 for (int k=0; k<p1; k++) \ 879 f.fastAccessDx(k) = 2.0*(i+1)*(k+1); \ 880 x[i] = FadFadType(p2, f); \ 881 for (int j=0; j<p2; j++) \ 882 x[i].fastAccessDx(j) = f; \ 884 for (int i=0; i<n; i++) { \ 885 x2[i] = FadFadType(p2, FadType(p1, 0.0)); \ 886 for (int j=0; j<p2; j++) \ 887 x2[i].fastAccessDx(j) = FadType(p1, 0.0); \ 894 if (rank == 0) Teuchos::send(*comm, n, &x[0], 1); \ 895 if (rank == 1) Teuchos::receive(*comm, 0, n, &x2[0]); \ 896 bool success1 = checkFadArrays( \ 897 x, x2, std::string(#FAD)+"<"+#FAD+"> Send/Receive", out); \ 898 success1 = checkResultOnAllProcs(*comm, out, success1); \ 900 if (rank == 0) Teuchos::send(*comm, ffts, n, &x[0], 1); \ 901 if (rank == 1) Teuchos::receive(*comm, ffts, 0, n, &x3[0]); \ 902 bool success2 = checkFadArrays( \ 903 x, x3, std::string(#FAD)+"<"+#FAD+"> Send/Receive FTS", out); \ 904 success2 = checkResultOnAllProcs(*comm, out, success2); \ 906 success = success1 && success2; \ 912 #if defined(HAVE_SACADO_KOKKOSCORE) && defined(HAVE_SACADO_TEUCHOSKOKKOSCOMM) 914 #include "Kokkos_Core.hpp" 916 #define FAD_KOKKOS_COMM_TESTS_DEV(FadType, FAD, Device) \ 917 TEUCHOS_UNIT_TEST( FAD##_Comm_Kokkos_##Device, Fad_Broadcast ) { \ 918 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 919 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 924 ValueTypeSerializer<int,FadType> fts( \ 925 rcp(new ValueTypeSerializer<int,double>), p); \ 927 typedef Kokkos::View<FadType*,Device> ViewType; \ 928 typedef ViewType::HostMirror HostViewType; \ 929 ViewType x("x",n,p+1), x2("x2",n,p+1), x3("x3",n,p+1); \ 930 HostViewType h_x = Kokkos::create_mirror_view(x); \ 931 HostViewType h_x2 = Kokkos::create_mirror_view(x2); \ 932 HostViewType h_x3 = Kokkos::create_mirror_view(x3); \ 933 for (int i=0; i<n; i++) { \ 934 h_x[i] = FadType(p, rnd.number()); \ 935 for (int j=0; j<p; j++) \ 936 h_x[i].fastAccessDx(j) = rnd.number(); \ 938 for (int i=0; i<n; i++) { \ 939 h_x2[i] = FadType(p, 0.0); \ 941 Kokkos::deep_copy(x, h_x); \ 942 Kokkos::deep_copy(x2, h_x2); \ 943 if (comm->getRank() == 0) { \ 948 Teuchos::broadcast(*comm, 0, n, x2); \ 949 Kokkos::deep_copy(h_x2, x2); \ 950 bool success1 = checkFadArrays( \ 951 h_x, h_x2, std::string(#FAD)+" Broadcast", out); \ 952 success1 = checkResultOnAllProcs(*comm, out, success1); \ 954 Teuchos::broadcast(*comm, fts, 0, n, x3); \ 955 Kokkos::deep_copy(h_x3, x3); \ 956 bool success2 = checkFadArrays( \ 957 h_x, h_x3, std::string(#FAD)+" Broadcast FTS", out); \ 958 success2 = checkResultOnAllProcs(*comm, out, success2); \ 960 success = success1 && success2; \ 962 TEUCHOS_UNIT_TEST( FAD##_Comm_Kokkos_##Device, Fad_SumAll ) { \ 963 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 964 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 969 int num_proc = comm->getSize(); \ 970 ValueTypeSerializer<int,FadType> fts( \ 971 rcp(new ValueTypeSerializer<int,double>), p); \ 973 typedef Kokkos::View<FadType*,Device> ViewType; \ 974 typedef ViewType::HostMirror HostViewType; \ 975 ViewType x("x",n,p+1), sums("sums",n,p+1), \ 976 sums2("sums2",n,p+1), sums3("sums3",n,p+1); \ 977 HostViewType h_x = Kokkos::create_mirror_view(x); \ 978 HostViewType h_sums = Kokkos::create_mirror_view(sums); \ 979 HostViewType h_sums2 = Kokkos::create_mirror_view(sums2); \ 980 HostViewType h_sums3 = Kokkos::create_mirror_view(sums3); \ 981 for (int i=0; i<n; i++) { \ 982 h_x[i] = FadType(p, 1.0*(i+1)); \ 983 for (int j=0; j<p; j++) \ 984 h_x[i].fastAccessDx(j) = 2.0*(i+1); \ 986 for (int i=0; i<n; i++) { \ 987 h_sums[i] = FadType(p, 1.0*(i+1)*num_proc); \ 988 for (int j=0; j<p; j++) \ 989 h_sums[i].fastAccessDx(j) = 2.0*(i+1)*num_proc; \ 991 for (int i=0; i<n; i++) { \ 992 h_sums2[i] = FadType(p, 0.0); \ 994 Kokkos::deep_copy(x, h_x); \ 995 Kokkos::deep_copy(sums, h_sums); \ 996 Kokkos::deep_copy(sums2, h_sums2); \ 998 Teuchos::reduceAll(*comm, Teuchos::REDUCE_SUM, n, x, sums2); \ 999 Kokkos::deep_copy(h_sums2, sums2); \ 1000 bool success1 = checkFadArrays( \ 1001 h_sums, h_sums2, std::string(#FAD)+" Sum All", out); \ 1002 success1 = checkResultOnAllProcs(*comm, out, success1); \ 1004 Teuchos::reduceAll(*comm, fts, Teuchos::REDUCE_SUM, n, x, sums3); \ 1005 Kokkos::deep_copy(h_sums3, sums3); \ 1006 bool success2 = checkFadArrays( \ 1007 h_sums, h_sums3, std::string(#FAD)+" Sum All FTS", out); \ 1008 success2 = checkResultOnAllProcs(*comm, out, success2); \ 1009 success = success1 && success2; \ 1012 TEUCHOS_UNIT_TEST( FAD##_Comm_Kokkos_##Device, Fad_MaxAll ) { \ 1013 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 1014 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 1019 int rank = comm->getRank(); \ 1020 int num_proc = comm->getSize(); \ 1021 ValueTypeSerializer<int,FadType> fts( \ 1022 rcp(new ValueTypeSerializer<int,double>), p); \ 1024 typedef Kokkos::View<FadType*,Device> ViewType; \ 1025 typedef ViewType::HostMirror HostViewType; \ 1026 ViewType x("x",n,p+1), maxs("maxs",n,p+1), \ 1027 maxs2("maxs2",n,p+1), maxs3("maxs3",n,p+1); \ 1028 HostViewType h_x = Kokkos::create_mirror_view(x); \ 1029 HostViewType h_maxs = Kokkos::create_mirror_view(maxs); \ 1030 HostViewType h_maxs2 = Kokkos::create_mirror_view(maxs2); \ 1031 HostViewType h_maxs3 = Kokkos::create_mirror_view(maxs3); \ 1032 for (int i=0; i<n; i++) { \ 1033 h_x[i] = FadType(p, 1.0*(i+1)*(rank+1)); \ 1034 for (int j=0; j<p; j++) \ 1035 h_x[i].fastAccessDx(j) = 2.0*(i+1)*(rank+1); \ 1037 for (int i=0; i<n; i++) { \ 1038 h_maxs[i] = FadType(p, 1.0*(i+1)*num_proc); \ 1039 for (int j=0; j<p; j++) \ 1040 h_maxs[i].fastAccessDx(j) = 2.0*(i+1)*num_proc; \ 1042 for (int i=0; i<n; i++) { \ 1043 h_maxs2[i] = FadType(p, 0.0); \ 1045 Kokkos::deep_copy(x, h_x); \ 1046 Kokkos::deep_copy(maxs, h_maxs); \ 1047 Kokkos::deep_copy(maxs2, h_maxs2); \ 1049 Teuchos::reduceAll(*comm, Teuchos::REDUCE_MAX, n, x, maxs2); \ 1050 Kokkos::deep_copy(h_maxs2, maxs2); \ 1051 bool success1 = checkFadArrays( \ 1052 h_maxs, h_maxs2, std::string(#FAD)+" Max All", out); \ 1053 success1 = checkResultOnAllProcs(*comm, out, success1); \ 1055 Teuchos::reduceAll(*comm, fts, Teuchos::REDUCE_MAX, n, x, maxs3); \ 1056 Kokkos::deep_copy(h_maxs3, maxs3); \ 1057 bool success2 = checkFadArrays( \ 1058 h_maxs, h_maxs3, std::string(#FAD)+" Max All FTS", out); \ 1059 success2 = checkResultOnAllProcs(*comm, out, success2); \ 1060 success = success1 && success2; \ 1063 TEUCHOS_UNIT_TEST( FAD##_Comm_Kokkos_##Device, Fad_MinAll ) { \ 1064 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \ 1065 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \ 1070 int rank = comm->getRank(); \ 1071 ValueTypeSerializer<int,FadType> fts( \ 1072 rcp(new ValueTypeSerializer<int,double>), p); \ 1074 typedef Kokkos::View<FadType*,Device> ViewType; \ 1075 typedef ViewType::HostMirror HostViewType; \ 1076 ViewType x("x",n,p+1), mins("mins",n,p+1), \ 1077 mins2("mins2",n,p+1), mins3("mins3",n,p+1); \ 1078 HostViewType h_x = Kokkos::create_mirror_view(x); \ 1079 HostViewType h_mins = Kokkos::create_mirror_view(mins); \ 1080 HostViewType h_mins2 = Kokkos::create_mirror_view(mins2); \ 1081 HostViewType h_mins3 = Kokkos::create_mirror_view(mins3); \ 1082 for (int i=0; i<n; i++) { \ 1083 h_x[i] = FadType(p, 1.0*(i+1)*(rank+1)); \ 1084 for (int j=0; j<p; j++) \ 1085 h_x[i].fastAccessDx(j) = 2.0*(i+1)*(rank+1); \ 1087 for (int i=0; i<n; i++) { \ 1088 h_mins[i] = FadType(p, 1.0*(i+1)); \ 1089 for (int j=0; j<p; j++) \ 1090 h_mins[i].fastAccessDx(j) = 2.0*(i+1); \ 1092 for (int i=0; i<n; i++) { \ 1093 h_mins2[i] = FadType(p, 0.0); \ 1095 Kokkos::deep_copy(x, h_x); \ 1096 Kokkos::deep_copy(mins, h_mins); \ 1097 Kokkos::deep_copy(mins2, h_mins2); \ 1099 Teuchos::reduceAll(*comm, Teuchos::REDUCE_MIN, n, x, mins2); \ 1100 Kokkos::deep_copy(h_mins2, mins2); \ 1101 bool success1 = checkFadArrays( \ 1102 h_mins, h_mins2, std::string(#FAD)+" Min All", out); \ 1103 success1 = checkResultOnAllProcs(*comm, out, success1); \ 1105 Teuchos::reduceAll(*comm, fts, Teuchos::REDUCE_MIN, n, x, mins3); \ 1106 Kokkos::deep_copy(h_mins3, mins3); \ 1107 bool success2 = checkFadArrays( \ 1108 h_mins, h_mins3, std::string(#FAD)+" Min All FTS", out); \ 1109 success2 = checkResultOnAllProcs(*comm, out, success2); \ 1110 success = success1 && success2; \ 1114 #ifdef KOKKOS_ENABLE_OPENMP 1115 #define FAD_KOKKOS_COMM_TESTS_OPENMP(FadType, FAD) \ 1116 using Kokkos::OpenMP; \ 1117 FAD_KOKKOS_COMM_TESTS_DEV(FadType, FAD, OpenMP) 1119 #define FAD_KOKKOS_COMM_TESTS_OPENMP(FadType, FAD) 1122 #ifdef KOKKOS_ENABLE_THREADS 1123 #define FAD_KOKKOS_COMM_TESTS_THREADS(FadType, FAD) \ 1124 using Kokkos::Threads; \ 1125 FAD_KOKKOS_COMM_TESTS_DEV(FadType, FAD, Threads) 1127 #define FAD_KOKKOS_COMM_TESTS_THREADS(FadType, FAD) 1130 #ifdef KOKKOS_ENABLE_CUDA 1131 #define FAD_KOKKOS_COMM_TESTS_CUDA(FadType, FAD) \ 1132 using Kokkos::Cuda; \ 1133 FAD_KOKKOS_COMM_TESTS_DEV(FadType, FAD, Cuda) 1135 #define FAD_KOKKOS_COMM_TESTS_CUDA(FadType, FAD) 1138 #ifdef KOKKOS_ENABLE_SERIAL 1139 #define FAD_KOKKOS_COMM_TESTS_SERIAL(FadType, FAD) \ 1140 using Kokkos::Serial; \ 1141 FAD_KOKKOS_COMM_TESTS_DEV(FadType, FAD, Serial) 1143 #define FAD_KOKKOS_COMM_TESTS_SERIAL(FadType, FAD) 1146 #define FAD_KOKKOS_COMM_TESTS(FadType, FAD) \ 1147 FAD_KOKKOS_COMM_TESTS_OPENMP(FadType, FAD) \ 1148 FAD_KOKKOS_COMM_TESTS_THREADS(FadType, FAD) \ 1149 FAD_KOKKOS_COMM_TESTS_CUDA(FadType, FAD) \ 1150 FAD_KOKKOS_COMM_TESTS_SERIAL(FadType, FAD) 1154 #define FAD_KOKKOS_COMM_TESTS(FadType, FAD) 1158 #define FAD_COMM_TESTS(FadType, FAD) \ 1159 FAD_BASE_COMM_TESTS(FadType, FAD) static KOKKOS_INLINE_FUNCTION bool eval(const T &x, const T &y)
Sacado::Fad::DFad< double > FadType
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
bool checkFadArrays(const ArrayType &x, const ArrayType &x2, const std::string &tag, Teuchos::FancyOStream &out)
bool checkResultOnAllProcs(const Teuchos::Comm< Ordinal > &comm, Teuchos::FancyOStream &out, const bool result)
TEUCHOS_DEPRECATED void reduceAll(const Comm< Ordinal > &comm, const EReductionType reductType, const Packet &send, Packet *globalReduct)