42 template <
typename TayType>
45 const std::string& tag,
49 bool success = (x.
size() == x2.
size());
50 out << tag <<
" Taylor array size test";
55 out <<
": \n\tExpected: " << x.
size() <<
", \n\tGot: " << x2.
size()
59 for (
int i=0; i<x.
size(); i++) {
61 out << tag <<
" Taylor array comparison test " << i;
66 out <<
": \n\tExpected: " << x[i] <<
", \n\tGot: " << x2[i] <<
"."
68 success = success && success2;
74 template<
typename Ordinal>
81 out <<
"\nChecking that the above test passed in all processes ...";
82 int thisResult = ( result ? 1 : 0 );
86 const bool passed = sumResult==Teuchos::size(comm);
90 out <<
" (sumResult="<<sumResult<<
"!=numProcs="<<Teuchos::size(comm)<<
") failed\n";
94 #define TAY_COMM_TESTS(TayType, TAY) \
95 TEUCHOS_UNIT_TEST( TAY##_Comm, Broadcast ) { \
96 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
97 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
101 ValueTypeSerializer<int,TayType> tts( \
102 rcp(new ValueTypeSerializer<int,double>), p+1); \
104 Teuchos::Array<TayType> x(n), x2(n), x3(n); \
105 for (int i=0; i<n; i++) { \
106 x[i] = TayType(p, rnd.number()); \
107 for (int j=0; j<=p; j++) \
108 x[i].fastAccessCoeff(j) = rnd.number(); \
110 for (int i=0; i<n; i++) { \
111 x2[i] = TayType(p, 0.0); \
113 if (comm->getRank() == 0) { \
118 Teuchos::broadcast(*comm, 0, n, &x2[0]); \
119 bool success1 = checkFadArrays( \
120 x, x2, std::string(#TAY)+" Broadcast", out); \
121 success1 = checkResultOnAllProcs(*comm, out, success1); \
123 Teuchos::broadcast(*comm, tts, 0, n, &x3[0]); \
124 bool success2 = checkFadArrays( \
125 x, x3, std::string(#TAY)+" Broadcast TTS", out); \
126 success2 = checkResultOnAllProcs(*comm, out, success2); \
128 success = success1 && success2; \
131 TEUCHOS_UNIT_TEST( TAY##_Comm, GatherAll ) { \
132 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
133 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
137 int size = comm->getSize(); \
138 int rank = comm->getRank(); \
140 ValueTypeSerializer<int,TayType> tts( \
141 rcp(new ValueTypeSerializer<int,double>), p+1); \
143 Teuchos::Array<TayType> x(n), x2(N), x3(N), x4(N); \
144 for (int i=0; i<n; i++) { \
145 x[i] = TayType(p, (rank+1)*(i+1)); \
146 for (int j=0; j<=p; j++) \
147 x[i].fastAccessCoeff(j) = (rank+1)*(i+1)*(j+1); \
149 for (int i=0; i<N; i++) { \
150 x2[i] = TayType(p, 0.0); \
152 for (int j=0; j<size; j++) { \
153 for (int i=0; i<n; i++) { \
154 x3[n*j+i] = TayType(p, (j+1)*(i+1)); \
155 for (int k=0; k<=p; k++) \
156 x3[n*j+i].fastAccessCoeff(k) = (j+1)*(i+1)*(k+1); \
160 Teuchos::gatherAll(*comm, n, &x[0], N, &x2[0]); \
161 bool success1 = checkFadArrays( \
162 x3, x2, std::string(#TAY)+" Gather All", out); \
163 success1 = checkResultOnAllProcs(*comm, out, success1); \
165 Teuchos::gatherAll(*comm, tts, n, &x[0], N, &x4[0]); \
166 bool success2 = checkFadArrays( \
167 x3, x4, std::string(#TAY)+" Gather All TTS", out); \
168 success2 = checkResultOnAllProcs(*comm, out, success2); \
170 success = success1 && success2; \
173 TEUCHOS_UNIT_TEST( TAY##_Comm, SumAll ) { \
174 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
175 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
179 int num_proc = comm->getSize(); \
180 ValueTypeSerializer<int,TayType> tts( \
181 rcp(new ValueTypeSerializer<int,double>), p+1); \
183 Teuchos::Array<TayType> x(n), sums(n), sums2(n), sums3(n); \
184 for (int i=0; i<n; i++) { \
185 x[i] = TayType(p, 1.0*(i+1)); \
186 for (int j=0; j<=p; j++) \
187 x[i].fastAccessCoeff(j) = 2.0*(i+1); \
189 for (int i=0; i<n; i++) { \
190 sums[i] = TayType(p, 1.0*(i+1)*num_proc); \
191 for (int j=0; j<=p; j++) \
192 sums[i].fastAccessCoeff(j) = 2.0*(i+1)*num_proc; \
194 for (int i=0; i<n; i++) { \
195 sums2[i] = TayType(p, 0.0); \
198 Teuchos::reduceAll(*comm, Teuchos::REDUCE_SUM, n, &x[0], &sums2[0]); \
199 bool success1 = checkFadArrays( \
200 sums, sums2, std::string(#TAY)+" Sum All", out); \
201 success1 = checkResultOnAllProcs(*comm, out, success1); \
203 Teuchos::reduceAll(*comm, tts, Teuchos::REDUCE_SUM, n, &x[0], &sums3[0]); \
204 bool success2 = checkFadArrays( \
205 sums, sums3, std::string(#TAY)+" Sum All TTS", out); \
206 success2 = checkResultOnAllProcs(*comm, out, success2); \
208 success = success1 && success2; \
211 TEUCHOS_UNIT_TEST( TAY##_Comm, MaxAll ) { \
212 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
213 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
217 int rank = comm->getRank(); \
218 int num_proc = comm->getSize(); \
219 ValueTypeSerializer<int,TayType> tts( \
220 rcp(new ValueTypeSerializer<int,double>), p+1); \
222 Teuchos::Array<TayType> x(n), maxs(n), maxs2(n), maxs3(n); \
223 for (int i=0; i<n; i++) { \
224 x[i] = TayType(p, 1.0*(i+1)*(rank+1)); \
225 for (int j=0; j<=p; j++) \
226 x[i].fastAccessCoeff(j) = 2.0*(i+1)*(rank+1); \
228 for (int i=0; i<n; i++) { \
229 maxs[i] = TayType(p, 1.0*(i+1)*num_proc); \
230 for (int j=0; j<=p; j++) \
231 maxs[i].fastAccessCoeff(j) = 2.0*(i+1)*num_proc; \
233 for (int i=0; i<n; i++) { \
234 maxs2[i] = TayType(p, 0.0); \
237 Teuchos::reduceAll(*comm, Teuchos::REDUCE_MAX, n, &x[0], &maxs2[0]); \
238 bool success1 = checkFadArrays( \
239 maxs, maxs2, std::string(#TAY)+" Max All", out); \
240 success1 = checkResultOnAllProcs(*comm, out, success1); \
242 Teuchos::reduceAll(*comm, tts, Teuchos::REDUCE_MAX, n, &x[0], &maxs3[0]); \
243 bool success2 = checkFadArrays( \
244 maxs, maxs3, std::string(#TAY)+" Max All TTS", out); \
245 success2 = checkResultOnAllProcs(*comm, out, success2); \
247 success = success1 && success2; \
250 TEUCHOS_UNIT_TEST( TAY##_Comm, MinAll ) { \
251 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
252 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
256 int rank = comm->getRank(); \
257 ValueTypeSerializer<int,TayType> tts( \
258 rcp(new ValueTypeSerializer<int,double>), p+1); \
260 Teuchos::Array<TayType> x(n), mins(n), mins2(n), mins3(n); \
261 for (int i=0; i<n; i++) { \
262 x[i] = TayType(p, 1.0*(i+1)*(rank+1)); \
263 for (int j=0; j<=p; j++) \
264 x[i].fastAccessCoeff(j) = 2.0*(i+1)*(rank+1); \
266 for (int i=0; i<n; i++) { \
267 mins[i] = TayType(p, 1.0*(i+1)); \
268 for (int j=0; j<=p; j++) \
269 mins[i].fastAccessCoeff(j) = 2.0*(i+1); \
271 for (int i=0; i<n; i++) { \
272 mins2[i] = TayType(p, 0.0); \
275 Teuchos::reduceAll(*comm, Teuchos::REDUCE_MIN, n, &x[0], &mins2[0]); \
276 bool success1 = checkFadArrays( \
277 mins, mins2, std::string(#TAY)+" Min All", out); \
278 success1 = checkResultOnAllProcs(*comm, out, success1); \
280 Teuchos::reduceAll(*comm, tts, Teuchos::REDUCE_MIN, n, &x[0], &mins3[0]); \
281 bool success2 = checkFadArrays( \
282 mins, mins3, std::string(#TAY)+" Min All TTS", out); \
283 success2 = checkResultOnAllProcs(*comm, out, success2); \
285 success = success1 && success2; \
288 TEUCHOS_UNIT_TEST( TAY##_Comm, ScanSum ) { \
289 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
290 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
294 int rank = comm->getRank(); \
295 ValueTypeSerializer<int,TayType> tts( \
296 rcp(new ValueTypeSerializer<int,double>), p+1); \
298 Teuchos::Array<TayType> x(n), sums(n), sums2(n), sums3(n); \
299 for (int i=0; i<n; i++) { \
300 x[i] = TayType(p, 1.0*(i+1)); \
301 for (int j=0; j<=p; j++) \
302 x[i].fastAccessCoeff(j) = 2.0*(i+1); \
304 for (int i=0; i<n; i++) { \
305 sums[i] = TayType(p, 1.0*(i+1)*(rank+1)); \
306 for (int j=0; j<=p; j++) \
307 sums[i].fastAccessCoeff(j) = 2.0*(i+1)*(rank+1); \
309 for (int i=0; i<n; i++) { \
310 sums2[i] = TayType(p, 0.0); \
313 Teuchos::scan(*comm, Teuchos::REDUCE_SUM, n, &x[0], &sums2[0]); \
314 bool success1 = checkFadArrays( \
315 sums, sums2, std::string(#TAY)+" Scan Sum", out); \
316 success1 = checkResultOnAllProcs(*comm, out, success1); \
318 Teuchos::scan(*comm, tts, Teuchos::REDUCE_SUM, n, &x[0], &sums3[0]); \
319 bool success2 = checkFadArrays( \
320 sums, sums3, std::string(#TAY)+" Scan Sum TTS", out); \
321 success2 = checkResultOnAllProcs(*comm, out, success2); \
323 success = success1 && success2; \
326 TEUCHOS_UNIT_TEST( TAY##_Comm, ScanMax ) { \
327 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
328 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
332 int rank = comm->getRank(); \
333 ValueTypeSerializer<int,TayType> tts( \
334 rcp(new ValueTypeSerializer<int,double>), p+1); \
336 Teuchos::Array<TayType> x(n), maxs(n), maxs2(n), maxs3(n); \
337 for (int i=0; i<n; i++) { \
338 x[i] = TayType(p, 1.0*(i+1)*(rank+1)); \
339 for (int j=0; j<=p; j++) \
340 x[i].fastAccessCoeff(j) = 2.0*(i+1)*(rank+1); \
342 for (int i=0; i<n; i++) { \
343 maxs[i] = TayType(p, 1.0*(i+1)*(rank+1)); \
344 for (int j=0; j<=p; j++) \
345 maxs[i].fastAccessCoeff(j) = 2.0*(i+1)*(rank+1); \
347 for (int i=0; i<n; i++) { \
348 maxs2[i] = TayType(p, 0.0); \
351 Teuchos::scan(*comm, Teuchos::REDUCE_MAX, n, &x[0], &maxs2[0]); \
352 bool success1 = checkFadArrays( \
353 maxs, maxs2, std::string(#TAY)+" Scan Max", out); \
354 success1 = checkResultOnAllProcs(*comm, out, success1); \
356 Teuchos::scan(*comm, tts, Teuchos::REDUCE_MAX, n, &x[0], &maxs3[0]); \
357 bool success2 = checkFadArrays( \
358 maxs, maxs3, std::string(#TAY)+" Scan Max TTS", out); \
359 success2 = checkResultOnAllProcs(*comm, out, success2); \
361 success = success1 && success2; \
364 TEUCHOS_UNIT_TEST( TAY##_Comm, ScanMin ) { \
365 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
366 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
370 int rank = comm->getRank(); \
371 ValueTypeSerializer<int,TayType> tts( \
372 rcp(new ValueTypeSerializer<int,double>), p+1); \
374 Teuchos::Array<TayType> x(n), mins(n), mins2(n), mins3(n); \
375 for (int i=0; i<n; i++) { \
376 x[i] = TayType(p, 1.0*(i+1)*(rank+1)); \
377 for (int j=0; j<=p; j++) \
378 x[i].fastAccessCoeff(j) = 2.0*(i+1)*(rank+1); \
380 for (int i=0; i<n; i++) { \
381 mins[i] = TayType(p, 1.0*(i+1)); \
382 for (int j=0; j<=p; j++) \
383 mins[i].fastAccessCoeff(j) = 2.0*(i+1); \
385 for (int i=0; i<n; i++) { \
386 mins2[i] = TayType(p, 0.0); \
389 Teuchos::scan(*comm, Teuchos::REDUCE_MIN, n, &x[0], &mins2[0]); \
390 bool success1 = checkFadArrays( \
391 mins, mins2, std::string(#TAY)+" Scan Min", out); \
392 success1 = checkResultOnAllProcs(*comm, out, success1); \
394 Teuchos::scan(*comm, tts, Teuchos::REDUCE_MIN, n, &x[0], &mins3[0]); \
395 bool success2 = checkFadArrays( \
396 mins, mins3, std::string(#TAY)+" Scan Min TTS", out); \
397 success2 = checkResultOnAllProcs(*comm, out, success2); \
399 success = success1 && success2; \
402 TEUCHOS_UNIT_TEST( TAY##_Comm, SendReceive ) { \
403 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
404 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
406 int num_proc = comm->getSize(); \
407 if (num_proc > 1) { \
408 int rank = comm->getRank(); \
411 ValueTypeSerializer<int,TayType> tts( \
412 rcp(new ValueTypeSerializer<int,double>), p+1); \
414 Teuchos::Array<TayType> x(n), x2(n), x3(n); \
415 for (int i=0; i<n; i++) { \
416 x[i] = TayType(p, 1.0*(i+1)); \
417 for (int j=0; j<=p; j++) \
418 x[i].fastAccessCoeff(j) = 2.0*(i+1)*(j+1); \
420 for (int i=0; i<n; i++) { \
421 x2[i] = TayType(p, 0.0); \
428 if (rank == 0) Teuchos::send(*comm, n, &x[0], 1); \
429 if (rank == 1) Teuchos::receive(*comm, 0, n, &x2[0]); \
430 bool success1 = checkFadArrays( \
431 x, x2, std::string(#TAY)+" Send/Receive", out); \
432 success1 = checkResultOnAllProcs(*comm, out, success1); \
434 if (rank == 0) Teuchos::send(*comm, tts, n, &x[0], 1); \
435 if (rank == 1) Teuchos::receive(*comm, tts, 0, n, &x3[0]); \
436 bool success2 = checkFadArrays( \
437 x, x3, std::string(#TAY)+" Send/Receive TTS", out); \
438 success2 = checkResultOnAllProcs(*comm, out, success2); \
440 success = success1 && success2; \
446 TEUCHOS_UNIT_TEST( TAY##_Comm, NestedBroadcast ) { \
447 typedef Sacado::mpl::apply<TayType,TayType>::type TayTayType; \
448 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
449 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
454 RCP< ValueTypeSerializer<int,TayType> > tts = \
455 rcp(new ValueTypeSerializer<int,TayType>( \
456 rcp(new ValueTypeSerializer<int,double>), p1+1)); \
457 ValueTypeSerializer<int,TayTayType> ttts(tts, p2+1); \
459 Teuchos::Array<TayTayType> x(n), x2(n), x3(n); \
460 for (int i=0; i<n; i++) { \
461 TayType f(p1, rnd.number()); \
462 for (int k=0; k<=p1; k++) \
463 f.fastAccessCoeff(k) = rnd.number(); \
464 x[i] = TayTayType(p2, f); \
465 for (int j=0; j<=p2; j++) { \
466 TayType g(p1, rnd.number()); \
467 for (int k=0; k<=p1; k++) \
468 g.fastAccessCoeff(k) = rnd.number(); \
469 x[i].fastAccessCoeff(j) = g; \
472 for (int i=0; i<n; i++) { \
473 x2[i] = TayTayType(p2, TayType(p1, 0.0)); \
474 for (int j=0; j<=p2; j++) \
475 x2[i].fastAccessCoeff(j) = TayType(p1, 0.0); \
477 if (comm->getRank() == 0) { \
482 Teuchos::broadcast(*comm, 0, n, &x2[0]); \
483 bool success1 = checkFadArrays( \
484 x, x2, std::string(#TAY)+"<"+#TAY+"> Broadcast", out); \
485 success1 = checkResultOnAllProcs(*comm, out, success1); \
487 Teuchos::broadcast(*comm, ttts, 0, n, &x3[0]); \
488 bool success2 = checkFadArrays( \
489 x, x3, std::string(#TAY)+"<"+#TAY+"> Broadcast TTS", out); \
490 success2 = checkResultOnAllProcs(*comm, out, success2); \
492 success = success1 && success2; \
495 TEUCHOS_UNIT_TEST( TAY##_Comm, NestedGatherAll ) { \
496 typedef Sacado::mpl::apply<TayType,TayType>::type TayTayType; \
497 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
498 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
503 RCP< ValueTypeSerializer<int,TayType> > tts = \
504 rcp(new ValueTypeSerializer<int,TayType>( \
505 rcp(new ValueTypeSerializer<int,double>), p1+1)); \
506 ValueTypeSerializer<int,TayTayType> ttts(tts, p2+1); \
508 int size = comm->getSize(); \
509 int rank = comm->getRank(); \
511 Teuchos::Array<TayTayType> x(n), x2(N), x3(N), x4(N); \
512 for (int i=0; i<n; i++) { \
513 TayType f(p1, (rank+1)*(i+1)); \
514 for (int k=0; k<=p1; k++) \
515 f.fastAccessCoeff(k) = (rank+1)*(i+1)*(k+1); \
516 x[i] = TayTayType(p2, f); \
517 for (int j=0; j<=p2; j++) { \
518 x[i].fastAccessCoeff(j) = f; \
521 for (int i=0; i<N; i++) { \
522 x2[i] = TayTayType(p2, TayType(p1, 0.0)); \
523 for (int j=0; j<=p2; j++) \
524 x2[i].fastAccessCoeff(j) = TayType(p1, 0.0); \
526 for (int j=0; j<size; j++) { \
527 for (int i=0; i<n; i++) { \
528 TayType f(p1, (j+1)*(i+1)); \
529 for (int k=0; k<=p1; k++) \
530 f.fastAccessCoeff(k) = (j+1)*(i+1)*(k+1); \
531 x3[n*j+i] = TayTayType(p2, f); \
532 for (int k=0; k<=p2; k++) \
533 x3[n*j+i].fastAccessCoeff(k) = f; \
537 Teuchos::gatherAll(*comm, n, &x[0], N, &x2[0]); \
538 bool success1 = checkFadArrays( \
539 x3, x2, std::string(#TAY)+"<"+#TAY+"> Gather All", out); \
540 success1 = checkResultOnAllProcs(*comm, out, success1); \
542 Teuchos::gatherAll(*comm, ttts, n, &x[0], N, &x4[0]); \
543 bool success2 = checkFadArrays( \
544 x3, x4, std::string(#TAY)+"<"+#TAY+"> Gather All FTS", out); \
545 success2 = checkResultOnAllProcs(*comm, out, success2); \
547 success = success1 && success2; \
550 TEUCHOS_UNIT_TEST( TAY##_Comm, NestedSumAll ) { \
551 typedef Sacado::mpl::apply<TayType,TayType>::type TayTayType; \
552 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
553 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
558 int num_proc = comm->getSize(); \
559 RCP< ValueTypeSerializer<int,TayType> > tts = \
560 rcp(new ValueTypeSerializer<int,TayType>( \
561 rcp(new ValueTypeSerializer<int,double>), p1+1)); \
562 ValueTypeSerializer<int,TayTayType> ttts(tts, p2+1); \
564 Teuchos::Array<TayTayType> x(n), sums(n), sums2(n), sums3(n); \
565 for (int i=0; i<n; i++) { \
566 TayType f(p1, 1.0*(i+1)); \
567 for (int k=0; k<=p1; k++) \
568 f.fastAccessCoeff(k) = 2.0*(i+1); \
569 x[i] = TayTayType(p2, f); \
570 for (int j=0; j<=p2; j++) { \
571 x[i].fastAccessCoeff(j) = f; \
574 for (int i=0; i<n; i++) { \
575 TayType f(p1, 1.0*(i+1)*num_proc); \
576 for (int k=0; k<=p1; k++) \
577 f.fastAccessCoeff(k) = 2.0*(i+1)*num_proc; \
578 sums[i] = TayTayType(p2, f); \
579 for (int j=0; j<=p2; j++) \
580 sums[i].fastAccessCoeff(j) = f; \
582 for (int i=0; i<n; i++) { \
583 sums2[i] = TayTayType(p2, TayType(p1, 0.0)); \
584 for (int j=0; j<=p2; j++) \
585 sums2[i].fastAccessCoeff(j) = TayType(p1, 0.0); \
588 Teuchos::reduceAll(*comm, Teuchos::REDUCE_SUM, n, &x[0], &sums2[0]); \
589 bool success1 = checkFadArrays( \
590 sums, sums2, std::string(#TAY)+"<"+#TAY+"> Sum All", out); \
591 success1 = checkResultOnAllProcs(*comm, out, success1); \
593 Teuchos::reduceAll(*comm, ttts, Teuchos::REDUCE_SUM, n, &x[0], &sums3[0]); \
594 bool success2 = checkFadArrays( \
595 sums, sums3, std::string(#TAY)+"<"+#TAY+"> Sum All", out); \
596 success2 = checkResultOnAllProcs(*comm, out, success2); \
598 success = success1 && success2; \
601 TEUCHOS_UNIT_TEST( TAY##_Comm, NestedMaxAll ) { \
602 typedef Sacado::mpl::apply<TayType,TayType>::type TayTayType; \
603 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
604 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
609 int rank = comm->getRank(); \
610 int num_proc = comm->getSize(); \
611 RCP< ValueTypeSerializer<int,TayType> > tts = \
612 rcp(new ValueTypeSerializer<int,TayType>( \
613 rcp(new ValueTypeSerializer<int,double>), p1+1)); \
614 ValueTypeSerializer<int,TayTayType> ttts(tts, p2+1); \
616 Teuchos::Array<TayTayType> x(n), maxs(n), maxs2(n), maxs3(n); \
617 for (int i=0; i<n; i++) { \
618 TayType f(p1, 1.0*(i+1)*(rank+1)); \
619 for (int k=0; k<=p1; k++) \
620 f.fastAccessCoeff(k) = 2.0*(i+1)*(rank+1); \
621 x[i] = TayTayType(p2, f); \
622 for (int j=0; j<=p2; j++) { \
623 x[i].fastAccessCoeff(j) = f; \
626 for (int i=0; i<n; i++) { \
627 TayType f(p1, 1.0*(i+1)*num_proc); \
628 for (int k=0; k<=p1; k++) \
629 f.fastAccessCoeff(k) = 2.0*(i+1)*num_proc; \
630 maxs[i] = TayTayType(p2, f); \
631 for (int j=0; j<=p2; j++) \
632 maxs[i].fastAccessCoeff(j) = f; \
634 for (int i=0; i<n; i++) { \
635 maxs2[i] = TayTayType(p2, TayType(p1, 0.0)); \
636 for (int j=0; j<=p2; j++) \
637 maxs2[i].fastAccessCoeff(j) = TayType(p1, 0.0); \
640 Teuchos::reduceAll(*comm, Teuchos::REDUCE_MAX, n, &x[0], &maxs2[0]); \
641 bool success1 = checkFadArrays( \
642 maxs, maxs2, std::string(#TAY)+"<"+#TAY+"> Max All", out); \
643 success1 = checkResultOnAllProcs(*comm, out, success1); \
645 Teuchos::reduceAll(*comm, ttts, Teuchos::REDUCE_MAX, n, &x[0], &maxs3[0]); \
646 bool success2 = checkFadArrays( \
647 maxs, maxs3, std::string(#TAY)+"<"+#TAY+"> Max All FTS", out); \
648 success2 = checkResultOnAllProcs(*comm, out, success2); \
650 success = success1 && success2; \
653 TEUCHOS_UNIT_TEST( TAY##_Comm, NestedMinAll ) { \
654 typedef Sacado::mpl::apply<TayType,TayType>::type TayTayType; \
655 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
656 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
661 int rank = comm->getRank(); \
662 RCP< ValueTypeSerializer<int,TayType> > tts = \
663 rcp(new ValueTypeSerializer<int,TayType>( \
664 rcp(new ValueTypeSerializer<int,double>), p1+1)); \
665 ValueTypeSerializer<int,TayTayType> ttts(tts, p2+1); \
667 Teuchos::Array<TayTayType> x(n), mins(n), mins2(n), mins3(n); \
668 for (int i=0; i<n; i++) { \
669 TayType f(p1, 1.0*(i+1)*(rank+1)); \
670 for (int k=0; k<=p1; k++) \
671 f.fastAccessCoeff(k) = 2.0*(i+1)*(rank+1); \
672 x[i] = TayTayType(p2, f); \
673 for (int j=0; j<=p2; j++) { \
674 x[i].fastAccessCoeff(j) = f; \
677 for (int i=0; i<n; i++) { \
678 TayType f(p1, 1.0*(i+1)); \
679 for (int k=0; k<=p1; k++) \
680 f.fastAccessCoeff(k) = 2.0*(i+1); \
681 mins[i] = TayTayType(p2, f); \
682 for (int j=0; j<=p2; j++) \
683 mins[i].fastAccessCoeff(j) = f; \
685 for (int i=0; i<n; i++) { \
686 mins2[i] = TayTayType(p2, TayType(p1, 0.0)); \
687 for (int j=0; j<=p2; j++) \
688 mins2[i].fastAccessCoeff(j) = TayType(p1, 0.0); \
691 Teuchos::reduceAll(*comm, Teuchos::REDUCE_MIN, n, &x[0], &mins2[0]); \
692 bool success1 = checkFadArrays( \
693 mins, mins2, std::string(#TAY)+"<"+#TAY+"> Min All", out); \
694 success1 = checkResultOnAllProcs(*comm, out, success1); \
696 Teuchos::reduceAll(*comm, ttts, Teuchos::REDUCE_MIN, n, &x[0], &mins3[0]); \
697 bool success2 = checkFadArrays( \
698 mins, mins3, std::string(#TAY)+"<"+#TAY+"> Min All FTS", out); \
699 success2 = checkResultOnAllProcs(*comm, out, success2); \
701 success = success1 && success2; \
704 TEUCHOS_UNIT_TEST( TAY##_Comm, NestedScanSum ) { \
705 typedef Sacado::mpl::apply<TayType,TayType>::type TayTayType; \
706 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
707 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
712 int rank = comm->getRank(); \
713 RCP< ValueTypeSerializer<int,TayType> > tts = \
714 rcp(new ValueTypeSerializer<int,TayType>( \
715 rcp(new ValueTypeSerializer<int,double>), p1+1)); \
716 ValueTypeSerializer<int,TayTayType> ttts(tts, p2+1); \
718 Teuchos::Array<TayTayType> x(n), sums(n), sums2(n), sums3(n); \
719 for (int i=0; i<n; i++) { \
720 TayType f(p1, 1.0*(i+1)); \
721 for (int k=0; k<=p1; k++) \
722 f.fastAccessCoeff(k) = 2.0*(i+1); \
723 x[i] = TayTayType(p2, f); \
724 for (int j=0; j<=p2; j++) { \
725 x[i].fastAccessCoeff(j) = f; \
728 for (int i=0; i<n; i++) { \
729 TayType f(p1, 1.0*(i+1)*(rank+1)); \
730 for (int k=0; k<=p1; k++) \
731 f.fastAccessCoeff(k) = 2.0*(i+1)*(rank+1); \
732 sums[i] = TayTayType(p2, f); \
733 for (int j=0; j<=p2; j++) \
734 sums[i].fastAccessCoeff(j) = f; \
736 for (int i=0; i<n; i++) { \
737 sums2[i] = TayTayType(p2, TayType(p1, 0.0)); \
738 for (int j=0; j<=p2; j++) \
739 sums2[i].fastAccessCoeff(j) = TayType(p1, 0.0); \
742 Teuchos::scan(*comm, Teuchos::REDUCE_SUM, n, &x[0], &sums2[0]); \
743 bool success1 = checkFadArrays( \
744 sums, sums2, std::string(#TAY)+"<"+#TAY+"> Scan Sum", out); \
745 success1 = checkResultOnAllProcs(*comm, out, success1); \
747 Teuchos::scan(*comm, ttts, Teuchos::REDUCE_SUM, n, &x[0], &sums3[0]); \
748 bool success2 = checkFadArrays( \
749 sums, sums3, std::string(#TAY)+"<"+#TAY+"> Scan Sum FTS", out); \
750 success2 = checkResultOnAllProcs(*comm, out, success2); \
752 success = success1 && success2; \
755 TEUCHOS_UNIT_TEST( TAY##_Comm, NestedScanMax ) { \
756 typedef Sacado::mpl::apply<TayType,TayType>::type TayTayType; \
757 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
758 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
763 int rank = comm->getRank(); \
764 RCP< ValueTypeSerializer<int,TayType> > tts = \
765 rcp(new ValueTypeSerializer<int,TayType>( \
766 rcp(new ValueTypeSerializer<int,double>), p1+1)); \
767 ValueTypeSerializer<int,TayTayType> ttts(tts, p2+1); \
769 Teuchos::Array<TayTayType> x(n), maxs(n), maxs2(n), maxs3(n); \
770 for (int i=0; i<n; i++) { \
771 TayType f(p1, 1.0*(i+1)*(rank+1)); \
772 for (int k=0; k<=p1; k++) \
773 f.fastAccessCoeff(k) = 2.0*(i+1)*(rank+1); \
774 x[i] = TayTayType(p2, f); \
775 for (int j=0; j<=p2; j++) { \
776 x[i].fastAccessCoeff(j) = f; \
779 for (int i=0; i<n; i++) { \
780 TayType f(p1, 1.0*(i+1)*(rank+1)); \
781 for (int k=0; k<=p1; k++) \
782 f.fastAccessCoeff(k) = 2.0*(i+1)*(rank+1); \
783 maxs[i] = TayTayType(p2, f); \
784 for (int j=0; j<=p2; j++) \
785 maxs[i].fastAccessCoeff(j) = f; \
787 for (int i=0; i<n; i++) { \
788 maxs2[i] = TayTayType(p2, TayType(p1, 0.0)); \
789 for (int j=0; j<=p2; j++) \
790 maxs2[i].fastAccessCoeff(j) = TayType(p1, 0.0); \
793 Teuchos::scan(*comm, Teuchos::REDUCE_MAX, n, &x[0], &maxs2[0]); \
794 bool success1 = checkFadArrays( \
795 maxs, maxs2, std::string(#TAY)+"<"+#TAY+"> Scan Max", out); \
796 success1 = checkResultOnAllProcs(*comm, out, success1); \
798 Teuchos::scan(*comm, ttts, Teuchos::REDUCE_MAX, n, &x[0], &maxs3[0]); \
799 bool success2 = checkFadArrays( \
800 maxs, maxs3, std::string(#TAY)+"<"+#TAY+"> Scan Max FTS", out); \
801 success2 = checkResultOnAllProcs(*comm, out, success2); \
803 success = success1 && success2; \
806 TEUCHOS_UNIT_TEST( TAY##_Comm, NestedScanMin ) { \
807 typedef Sacado::mpl::apply<TayType,TayType>::type TayTayType; \
808 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
809 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
814 int rank = comm->getRank(); \
815 RCP< ValueTypeSerializer<int,TayType> > tts = \
816 rcp(new ValueTypeSerializer<int,TayType>( \
817 rcp(new ValueTypeSerializer<int,double>), p1+1)); \
818 ValueTypeSerializer<int,TayTayType> ttts(tts, p2+1); \
820 Teuchos::Array<TayTayType> x(n), mins(n), mins2(n), mins3(n); \
821 for (int i=0; i<n; i++) { \
822 TayType f(p1, 1.0*(i+1)*(rank+1)); \
823 for (int k=0; k<=p1; k++) \
824 f.fastAccessCoeff(k) = 2.0*(i+1)*(rank+1); \
825 x[i] = TayTayType(p2, f); \
826 for (int j=0; j<=p2; j++) { \
827 x[i].fastAccessCoeff(j) = f; \
830 for (int i=0; i<n; i++) { \
831 TayType f(p1, 1.0*(i+1)); \
832 for (int k=0; k<=p1; k++) \
833 f.fastAccessCoeff(k) = 2.0*(i+1); \
834 mins[i] = TayTayType(p2, f); \
835 for (int j=0; j<=p2; j++) \
836 mins[i].fastAccessCoeff(j) = f; \
838 for (int i=0; i<n; i++) { \
839 mins2[i] = TayTayType(p2, TayType(p1, 0.0)); \
840 for (int j=0; j<=p2; j++) \
841 mins2[i].fastAccessCoeff(j) = TayType(p1, 0.0); \
844 Teuchos::scan(*comm, Teuchos::REDUCE_MIN, n, &x[0], &mins2[0]); \
845 bool success1 = checkFadArrays( \
846 mins, mins2, std::string(#TAY)+"<"+#TAY+"> Scan Min", out); \
847 success1 = checkResultOnAllProcs(*comm, out, success1); \
849 Teuchos::scan(*comm, ttts, Teuchos::REDUCE_MIN, n, &x[0], &mins3[0]); \
850 bool success2 = checkFadArrays( \
851 mins, mins3, std::string(#TAY)+"<"+#TAY+"> Scan Min FTS", out); \
852 success2 = checkResultOnAllProcs(*comm, out, success2); \
854 success = success1 && success2; \
857 TEUCHOS_UNIT_TEST( TAY##_Comm, NestedSendReceive ) { \
858 typedef Sacado::mpl::apply<TayType,TayType>::type TayTayType; \
859 Teuchos::RCP<const Teuchos::Comm<Ordinal> > \
860 comm = Teuchos::DefaultComm<Ordinal>::getComm(); \
862 int num_proc = comm->getSize(); \
863 if (num_proc > 1) { \
864 int rank = comm->getRank(); \
868 RCP< ValueTypeSerializer<int,TayType> > tts = \
869 rcp(new ValueTypeSerializer<int,TayType>( \
870 rcp(new ValueTypeSerializer<int,double>), p1+1)); \
871 ValueTypeSerializer<int,TayTayType> ttts(tts, p2+1); \
873 Teuchos::Array<TayTayType> x(n), x2(n), x3(n); \
874 for (int i=0; i<n; i++) { \
875 TayType f(p1, 1.0*(i+1)); \
876 for (int k=0; k<=p1; k++) \
877 f.fastAccessCoeff(k) = 2.0*(i+1)*(k+1); \
878 x[i] = TayTayType(p2, f); \
879 for (int j=0; j<=p2; j++) \
880 x[i].fastAccessCoeff(j) = f; \
882 for (int i=0; i<n; i++) { \
883 x2[i] = TayTayType(p2, TayType(p1, 0.0)); \
884 for (int j=0; j<=p2; j++) \
885 x2[i].fastAccessCoeff(j) = TayType(p1, 0.0); \
892 if (rank == 0) Teuchos::send(*comm, n, &x[0], 1); \
893 if (rank == 1) Teuchos::receive(*comm, 0, n, &x2[0]); \
894 bool success1 = checkFadArrays( \
895 x, x2, std::string(#TAY)+"<"+#TAY+"> Send/Receive", out); \
896 success1 = checkResultOnAllProcs(*comm, out, success1); \
898 if (rank == 0) Teuchos::send(*comm, ttts, n, &x[0], 1); \
899 if (rank == 1) Teuchos::receive(*comm, ttts, 0, n, &x3[0]); \
900 bool success2 = checkFadArrays( \
901 x, x3, std::string(#TAY)+"<"+#TAY+"> Send/Receive FTS", out); \
902 success2 = checkResultOnAllProcs(*comm, out, success2); \
904 success = success1 && success2; \
static KOKKOS_INLINE_FUNCTION bool eval(const T &x, const T &y)
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)