34 template <
typename FadType1,
typename FadType2>
35 bool checkFads(
const FadType1& x,
const FadType2& x2,
47 for (
int i=0; i<x.size(); ++i)
53 template <
typename fadtype,
typename ordinal>
56 const ordinal num_cols,
57 const ordinal fad_size,
61 typedef typename fadtype::value_type scalar;
62 fadtype x(fad_size, scalar(0.0));
64 const scalar x_row = 100.0 + scalar(num_rows) / scalar(row+1);
65 const scalar x_col = 10.0 + scalar(num_cols) / scalar(col+1);
66 x.val() = x_row + x_col;
67 for (ordinal i=0; i<fad_size; ++i) {
68 const scalar x_fad = 1.0 + scalar(fad_size) / scalar(i+1);
69 x.fastAccessDx(i) = x_row + x_col + x_fad;
79 template <
typename InputViewType1,
80 typename InputViewType2 = InputViewType1,
81 typename OutputViewType = InputViewType1>
84 typedef typename InputViewType1::size_type
size_type;
92 const InputViewType2 v2,
93 const OutputViewType v3,
107 static void apply(
const InputViewType1 v1,
108 const InputViewType2 v2,
109 const OutputViewType v3,
110 const bool update =
false) {
117 template <
typename ViewType,
typename ScalarType>
135 static void apply(
const ViewType& v,
const ScalarType& s) {
142 template <
typename InputViewType,
143 typename OutputViewType>
153 const OutputViewType v2,
156 static_assert(
unsigned(InputViewType::Rank) == 2 ,
157 "Require rank-2 input view" );
158 static_assert(
unsigned(OutputViewType::Rank) == 1 ,
159 "Require rank-1 output view" );
169 static void apply(
const InputViewType v1,
170 const OutputViewType v2,
178 Kokkos_View_Fad, Size,
FadType, Layout, Device )
180 typedef Kokkos::View<FadType*,Layout,Device> ViewType;
181 typedef typename ViewType::size_type size_type;
187 ViewType v(
"view", num_rows, fad_size+1);
192 Kokkos_View_Fad, DeepCopy,
FadType, Layout, Device )
194 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
195 typedef typename ViewType::size_type size_type;
196 typedef typename ViewType::HostMirror host_view_type;
203 ViewType v(
"view", num_rows, num_cols, fad_size+1);
204 host_view_type h_v = Kokkos::create_mirror_view(v);
205 for (size_type i=0; i<num_rows; ++i)
206 for (size_type j=0; j<num_cols; ++j)
207 h_v(i,j) = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
208 Kokkos::deep_copy(v, h_v);
211 host_view_type h_v2 = Kokkos::create_mirror_view(v);
212 Kokkos::deep_copy(h_v2, v);
216 for (size_type i=0; i<num_rows; ++i) {
217 for (size_type j=0; j<num_cols; ++j) {
218 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
219 success = success &&
checkFads(
f, h_v2(i,j), out);
225 Kokkos_View_Fad, DeepCopy_ConstantScalar,
FadType, Layout, Device )
227 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
228 typedef typename ViewType::size_type size_type;
229 typedef typename ViewType::HostMirror host_view_type;
230 typedef typename FadType::value_type value_type;
237 ViewType v(
"view", num_rows, num_cols, fad_size+1);
238 typename ViewType::array_type va = v;
239 Kokkos::deep_copy( va, 1.0 );
242 value_type
a = 2.3456;
243 Kokkos::deep_copy( v,
a );
246 host_view_type hv = Kokkos::create_mirror_view(v);
247 Kokkos::deep_copy(hv, v);
251 for (size_type i=0; i<num_rows; ++i) {
252 for (size_type j=0; j<num_cols; ++j) {
253 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC) 258 success = success &&
checkFads(
f, hv(i,j), out);
264 Kokkos_View_Fad, DeepCopy_ConstantZero,
FadType, Layout, Device )
266 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
267 typedef typename ViewType::size_type size_type;
268 typedef typename ViewType::HostMirror host_view_type;
269 typedef typename FadType::value_type value_type;
276 ViewType v(
"view", num_rows, num_cols, fad_size+1);
277 typename ViewType::array_type va = v;
278 Kokkos::deep_copy( va, 1.0 );
282 Kokkos::deep_copy( v,
a );
285 host_view_type hv = Kokkos::create_mirror_view(v);
286 Kokkos::deep_copy(hv, v);
290 for (size_type i=0; i<num_rows; ++i) {
291 for (size_type j=0; j<num_cols; ++j) {
292 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC) 297 success = success &&
checkFads(
f, hv(i,j), out);
303 Kokkos_View_Fad, DeepCopy_ConstantFad,
FadType, Layout, Device )
305 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
306 typedef typename ViewType::size_type size_type;
307 typedef typename ViewType::HostMirror host_view_type;
314 ViewType v(
"view", num_rows, num_cols, fad_size+1);
315 typename ViewType::array_type va = v;
316 Kokkos::deep_copy( va, 1.0 );
320 Kokkos::deep_copy( v,
a );
323 host_view_type hv = Kokkos::create_mirror_view(v);
324 Kokkos::deep_copy(hv, v);
328 for (size_type i=0; i<num_rows; ++i) {
329 for (size_type j=0; j<num_cols; ++j) {
330 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC) 335 success = success &&
checkFads(
f, hv(i,j), out);
341 Kokkos_View_Fad, DeepCopy_ConstantFadFull,
FadType, Layout, Device )
343 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
344 typedef typename ViewType::size_type size_type;
345 typedef typename ViewType::HostMirror host_view_type;
352 ViewType v(
"view", num_rows, num_cols, fad_size+1);
353 typename ViewType::array_type va = v;
354 Kokkos::deep_copy( va, 1.0 );
358 for (size_type i=0; i<fad_size; ++i)
359 a.fastAccessDx(i) = 7.89 + (i+1);
360 Kokkos::deep_copy( v,
a );
363 host_view_type hv = Kokkos::create_mirror_view(v);
364 Kokkos::deep_copy(hv, v);
368 for (size_type i=0; i<num_rows; ++i) {
369 for (size_type j=0; j<num_cols; ++j) {
370 success = success &&
checkFads(
a, hv(i,j), out);
376 Kokkos_View_Fad, ScalarAssign,
FadType, Layout, Device )
378 typedef Kokkos::View<FadType*,Layout,Device> ViewType;
379 typedef typename ViewType::size_type size_type;
380 typedef typename ViewType::HostMirror host_view_type;
381 typedef typename FadType::value_type value_type;
387 ViewType v(
"view", num_rows, fad_size+1);
388 typename ViewType::array_type va = v;
389 Kokkos::deep_copy( va, 1.0 );
392 value_type
a = 2.3456;
396 host_view_type hv = Kokkos::create_mirror_view(v);
397 Kokkos::deep_copy(hv, v);
401 for (size_type i=0; i<num_rows; ++i) {
402 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC) 407 success = success &&
checkFads(
f, hv(i), out);
412 Kokkos_View_Fad, Multiply,
FadType, Layout, Device )
414 typedef Kokkos::View<FadType*,Layout,Device> ViewType;
415 typedef typename ViewType::size_type size_type;
416 typedef typename ViewType::HostMirror host_view_type;
422 ViewType v1(
"view1", num_rows, fad_size+1), v2(
"view2", num_rows, fad_size+1);
423 host_view_type h_v1 = Kokkos::create_mirror_view(v1);
424 host_view_type h_v2 = Kokkos::create_mirror_view(v2);
425 for (size_type i=0; i<num_rows; ++i) {
426 h_v1(i) = generate_fad<FadType>(
427 num_rows, size_type(2), fad_size, i, size_type(0));
428 h_v2(i) = generate_fad<FadType>(
429 num_rows, size_type(2), fad_size, i, size_type(1));
431 Kokkos::deep_copy(v1, h_v1);
432 Kokkos::deep_copy(v2, h_v2);
435 ViewType v3(
"view3", num_rows, fad_size+1);
439 host_view_type h_v3 = Kokkos::create_mirror_view(v3);
440 Kokkos::deep_copy(h_v3, v3);
444 for (size_type i=0; i<num_rows; ++i) {
446 generate_fad<FadType>(num_rows, size_type(2), fad_size, i, size_type(0));
448 generate_fad<FadType>(num_rows, size_type(2), fad_size, i, size_type(1));
450 success = success &&
checkFads(f3, h_v3(i), out);
455 Kokkos_View_Fad, MultiplyUpdate,
FadType, Layout, Device )
457 typedef Kokkos::View<FadType*,Layout,Device> ViewType;
458 typedef typename ViewType::size_type size_type;
459 typedef typename ViewType::HostMirror host_view_type;
465 ViewType v1(
"view1", num_rows, fad_size+1), v2(
"view2", num_rows, fad_size+1);
466 host_view_type h_v1 = Kokkos::create_mirror_view(v1);
467 host_view_type h_v2 = Kokkos::create_mirror_view(v2);
468 for (size_type i=0; i<num_rows; ++i) {
469 h_v1(i) = generate_fad<FadType>(
470 num_rows, size_type(2), fad_size, i, size_type(0));
471 h_v2(i) = generate_fad<FadType>(
472 num_rows, size_type(2), fad_size, i, size_type(1));
474 Kokkos::deep_copy(v1, h_v1);
475 Kokkos::deep_copy(v2, h_v2);
478 ViewType v3(
"view3", num_rows, fad_size+1);
479 Kokkos::deep_copy(v3, 1.0);
483 host_view_type h_v3 = Kokkos::create_mirror_view(v3);
484 Kokkos::deep_copy(h_v3, v3);
488 for (size_type i=0; i<num_rows; ++i) {
490 generate_fad<FadType>(num_rows, size_type(2), fad_size, i, size_type(0));
492 generate_fad<FadType>(num_rows, size_type(2), fad_size, i, size_type(1));
494 success = success &&
checkFads(f3, h_v3(i), out);
499 Kokkos_View_Fad, MultiplyConst,
FadType, Layout, Device )
501 typedef Kokkos::View<const FadType*,Layout,Device,Kokkos::MemoryUnmanaged> ConstViewType;
502 typedef Kokkos::View<FadType*,Layout,Device> ViewType;
503 typedef typename ViewType::size_type size_type;
504 typedef typename ViewType::HostMirror host_view_type;
510 ViewType v1(
"view1", num_rows, fad_size+1);
511 ViewType v2(
"view2", num_rows, fad_size+1);
512 host_view_type h_v1 = Kokkos::create_mirror_view(v1);
513 host_view_type h_v2 = Kokkos::create_mirror_view(v2);
514 for (size_type i=0; i<num_rows; ++i) {
515 h_v1(i) = generate_fad<FadType>(
516 num_rows, size_type(2), fad_size, i, size_type(0));
517 h_v2(i) = generate_fad<FadType>(
518 num_rows, size_type(2), fad_size, i, size_type(1));
520 Kokkos::deep_copy(v1, h_v1);
521 Kokkos::deep_copy(v2, h_v2);
523 ConstViewType cv1 = v1;
526 ViewType v3(
"view3", num_rows, fad_size+1);
530 host_view_type h_v3 = Kokkos::create_mirror_view(v3);
531 Kokkos::deep_copy(h_v3, v3);
535 for (size_type i=0; i<num_rows; ++i) {
537 generate_fad<FadType>(num_rows, size_type(2), fad_size, i, size_type(0));
539 generate_fad<FadType>(num_rows, size_type(2), fad_size, i, size_type(1));
541 success = success &&
checkFads(f3, h_v3(i), out);
546 Kokkos_View_Fad, MultiplyMixed,
FadType, Layout, Device )
548 typedef Kokkos::View<FadType*,Layout,Device> ViewType;
549 typedef typename ViewType::size_type size_type;
550 typedef typename ViewType::HostMirror host_view_type;
552 const size_type num_rows = 2;
556 FadType f0 = generate_fad<FadType>(
557 num_rows, size_type(2), fad_size, size_type(0), size_type(0));
558 FadType f1 = generate_fad<FadType>(
559 num_rows, size_type(2), fad_size, size_type(1), size_type(0));
560 host_view_type h_v(
"view1", num_rows, fad_size+1);
572 Kokkos_View_Fad, Rank8,
FadType, Layout, Device )
574 typedef Kokkos::View<FadType*******,Layout,Device> ViewType;
575 typedef typename ViewType::size_type size_type;
576 typedef typename ViewType::HostMirror host_view_type;
581 ViewType v(
"view", 100, 1, 2, 3, 4, 5, 6, fad_size+1);
582 host_view_type h_v = Kokkos::create_mirror_view(v);
583 typename host_view_type::array_type h_a = h_v;
584 Kokkos::deep_copy(h_a, 1.0);
587 h_v(99,0,1,2,3,4,5) = f1;
588 FadType f2 = h_v(99,0,1,2,3,4,5);
595 Kokkos_View_Fad, Roger,
FadType, Layout, Device )
599 Kokkos::View<FadType*,Layout,Device>
a(
"a",4,fad_size+1);
600 Kokkos::View<FadType**,Layout,Device> b(
"b",4,4,fad_size+1);
601 Kokkos::View<FadType***,Layout,Device>
c(
"c",4,4,4,fad_size+1);
602 Kokkos::View<FadType****,Layout,Device> d(
"d",4,4,4,4,fad_size+1);
603 Kokkos::View<FadType*****,Layout,Device> e(
"e",4,4,4,4,4,fad_size+1);
604 Kokkos::View<FadType******,Layout,Device>
f(
"f",4,4,4,4,4,4,fad_size+1);
605 Kokkos::View<FadType*******,Layout,Device>
g(
"g",4,4,4,4,4,4,4,fad_size+1);
616 Kokkos_View_Fad, AssignDifferentStrides,
FadType, Layout, Device )
618 typedef Kokkos::View<FadType**,Layout,Device> ViewType1;
619 typedef Kokkos::View<FadType*,Layout,Device> ViewType2;
620 typedef typename ViewType1::size_type size_type;
621 typedef typename ViewType1::HostMirror host_view_type1;
622 typedef typename ViewType2::HostMirror host_view_type2;
629 ViewType1 v1(
"view1", num_rows, num_cols, fad_size+1);
630 host_view_type1 h_v1 = Kokkos::create_mirror_view(v1);
631 for (size_type i=0; i<num_rows; ++i) {
632 for (size_type j=0; j<num_cols; ++j) {
633 h_v1(i,j) = generate_fad<FadType>(
634 num_rows, num_cols, fad_size, i, j);
637 Kokkos::deep_copy(v1, h_v1);
640 ViewType2 v2(
"view2", num_rows, fad_size+1);
644 host_view_type2 h_v2 = Kokkos::create_mirror_view(v2);
645 Kokkos::deep_copy(h_v2, v2);
649 for (size_type i=0; i<num_rows; ++i) {
651 generate_fad<FadType>(num_rows, num_cols, fad_size, i, size_type(1));
652 success = success &&
checkFads(
f, h_v2(i), out);
656 #if defined(HAVE_SACADO_KOKKOSCONTAINERS) && defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC) 659 Kokkos_View_Fad, DynRankDimensionScalar,
FadType, Layout, Device )
661 typedef Kokkos::DynRankView<double,Layout,Device> DoubleViewType;
662 typedef Kokkos::DynRankView<FadType,Layout,Device> FadViewType;
663 typedef typename FadViewType::size_type size_type;
669 DoubleViewType v1(
"view", num_rows);
670 FadViewType v2(
"view", num_rows, fad_size+1);
678 Kokkos_View_Fad, DynRankMultiply,
FadType, Layout, Device )
680 typedef Kokkos::DynRankView<FadType,Layout,Device> ViewType;
681 typedef typename ViewType::size_type size_type;
682 typedef typename ViewType::HostMirror host_view_type;
688 ViewType v1(
"view1", num_rows, fad_size+1), v2(
"view2", num_rows, fad_size+1);
689 host_view_type h_v1 = Kokkos::Experimental::create_mirror_view(v1);
690 host_view_type h_v2 = Kokkos::Experimental::create_mirror_view(v2);
691 for (size_type i=0; i<num_rows; ++i) {
692 h_v1(i) = generate_fad<FadType>(
693 num_rows, size_type(2), fad_size, i, size_type(0));
694 h_v2(i) = generate_fad<FadType>(
695 num_rows, size_type(2), fad_size, i, size_type(1));
697 Kokkos::Experimental::deep_copy(v1, h_v1);
698 Kokkos::Experimental::deep_copy(v2, h_v2);
701 ViewType v3(
"view3", num_rows, fad_size+1);
705 host_view_type h_v3 = Kokkos::Experimental::create_mirror_view(v3);
706 Kokkos::Experimental::deep_copy(h_v3, v3);
711 for (size_type i=0; i<num_rows; ++i) {
713 generate_fad<FadType>(num_rows, size_type(2), fad_size, i, size_type(0));
715 generate_fad<FadType>(num_rows, size_type(2), fad_size, i, size_type(1));
717 success = success &&
checkFads(f3, h_v3(i), out);
722 Kokkos_View_Fad, SubdynrankviewCol,
FadType, Layout, Device )
724 typedef Kokkos::DynRankView<FadType,Layout,Device> ViewType;
725 typedef typename ViewType::size_type size_type;
726 typedef typename ViewType::HostMirror host_view_type;
733 ViewType v(
"view", num_rows, num_cols, fad_size+1);
734 host_view_type h_v = Kokkos::create_mirror_view(v);
735 for (size_type i=0; i<num_rows; ++i) {
736 for (size_type j=0; j<num_cols; ++j) {
737 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
741 Kokkos::deep_copy(v, h_v);
745 auto s = Kokkos::subdynrankview(v, Kokkos::ALL(), col);
748 typedef decltype(s) SubviewType;
749 typedef typename SubviewType::HostMirror HostSubviewType;
750 HostSubviewType h_s = Kokkos::create_mirror_view(s);
751 Kokkos::deep_copy(h_s, s);
757 for (size_type i=0; i<num_rows; ++i) {
758 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, col);
759 success = success &&
checkFads(f, h_s(i), out);
764 Kokkos_View_Fad, SubdynrankviewRow,
FadType, Layout, Device )
766 typedef Kokkos::DynRankView<FadType,Layout,Device> ViewType;
767 typedef typename ViewType::size_type size_type;
768 typedef typename ViewType::HostMirror host_view_type;
772 const size_type num_planes = 9;
776 ViewType v(
"view", num_rows, num_cols, num_planes, fad_size+1);
777 host_view_type h_v = Kokkos::create_mirror_view(v);
778 for (size_type i=0; i<num_rows; ++i) {
779 for (size_type j=0; j<num_cols; ++j) {
780 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
781 for (size_type k=0; k<num_planes; ++k) {
782 h_v(i,j,k) = (k+1)*f;
786 Kokkos::deep_copy(v, h_v);
790 auto s = Kokkos::subdynrankview(v, row, Kokkos::ALL(), Kokkos::ALL());
793 typedef decltype(s) SubviewType;
794 typedef typename SubviewType::HostMirror HostSubviewType;
795 HostSubviewType h_s = Kokkos::create_mirror_view(s);
796 Kokkos::deep_copy(h_s, s);
802 for (size_type j=0; j<num_cols; ++j) {
803 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, row, j);
804 for (size_type k=0; k<num_planes; ++k) {
806 success = success &&
checkFads(g, h_s(j,k), out);
812 Kokkos_View_Fad, SubdynrankviewScalar,
FadType, Layout, Device )
814 typedef Kokkos::DynRankView<FadType,Layout,Device> ViewType;
815 typedef typename ViewType::size_type size_type;
816 typedef typename ViewType::HostMirror host_view_type;
823 ViewType v(
"view", num_rows, num_cols, fad_size+1);
824 host_view_type h_v = Kokkos::create_mirror_view(v);
825 for (size_type i=0; i<num_rows; ++i) {
826 for (size_type j=0; j<num_cols; ++j) {
827 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
831 Kokkos::deep_copy(v, h_v);
836 auto s = Kokkos::subdynrankview(v, row, col);
839 typedef decltype(s) SubviewType;
840 typedef typename SubviewType::HostMirror HostSubviewType;
841 HostSubviewType h_s = Kokkos::create_mirror_view(s);
842 Kokkos::deep_copy(h_s, s);
848 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, row, col);
849 success = success &&
checkFads(f, h_s(), out);
855 Kokkos_View_Fad, DynRankDimensionScalar,
FadType, Layout, Device ) {}
857 Kokkos_View_Fad, DynRankMultiply,
FadType, Layout, Device ) {}
859 Kokkos_View_Fad, SubdynrankviewCol,
FadType, Layout, Device ) {}
861 Kokkos_View_Fad, SubdynrankviewRow,
FadType, Layout, Device ) {}
863 Kokkos_View_Fad, SubdynrankviewScalar,
FadType, Layout, Device ) {}
868 Kokkos_View_Fad, Subview,
FadType, Layout, Device )
870 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
871 typedef typename ViewType::size_type size_type;
872 typedef typename ViewType::HostMirror host_view_type;
879 ViewType v(
"view", num_rows, num_cols, fad_size+1);
880 host_view_type h_v = Kokkos::create_mirror_view(v);
881 for (size_type i=0; i<num_rows; ++i) {
882 for (size_type j=0; j<num_cols; ++j) {
883 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
887 Kokkos::deep_copy(v, h_v);
891 auto s = Kokkos::subview(v, Kokkos::ALL(), col);
894 typedef decltype(s) SubviewType;
895 typedef typename SubviewType::HostMirror HostSubviewType;
896 HostSubviewType h_s = Kokkos::create_mirror_view(s);
897 Kokkos::deep_copy(h_s, s);
901 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC) 905 for (size_type i=0; i<num_rows; ++i) {
906 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, col);
907 success = success &&
checkFads(
f, h_s(i), out);
913 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC) 915 Kokkos_View_Fad, ShmemSize,
FadType, Layout, Device )
917 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
918 typedef typename FadType::value_type value_type;
919 typedef typename ViewType::size_type size_type;
926 const size_type shmem_size =
927 ViewType::shmem_size(num_rows, num_cols, fad_size+1);
930 static const size_type align = 8;
931 static const size_type mask = align - 1;
932 const size_type shmem_size_expected =
939 Kokkos_View_Fad, Unmanaged,
FadType, Layout, Device )
941 typedef typename FadType::value_type scalar_type;
942 typedef Kokkos::View<scalar_type***,Layout,Device> ViewType;
943 typedef Kokkos::View<FadType**,Layout,Device,Kokkos::MemoryUnmanaged> FadViewType;
944 typedef typename ViewType::size_type size_type;
945 typedef typename ViewType::HostMirror host_view_type;
946 typedef typename FadViewType::HostMirror fad_host_view_type;
953 ViewType v(
"view", num_rows, num_cols, fad_size+1);
954 host_view_type h_v = Kokkos::create_mirror_view(v);
955 for (size_type i=0; i<num_rows; ++i) {
956 for (size_type j=0; j<num_cols; ++j) {
957 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
958 for (size_type k=0; k<fad_size; k++)
959 h_v(i,j,k) =
f.dx(k);
960 h_v(i,j,fad_size) =
f.val();
963 Kokkos::deep_copy(v, h_v);
966 FadViewType v_fad(v.ptr_on_device(), num_rows, num_cols, fad_size+1);
969 fad_host_view_type h_v_fad(
"host_view_fad", num_rows, num_cols, fad_size+1);
970 Kokkos::deep_copy(h_v_fad, v_fad);
974 for (size_type i=0; i<num_rows; ++i) {
975 for (size_type j=0; j<num_cols; ++j) {
976 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
977 success = success &&
checkFads(f, h_v_fad(i,j), out);
983 Kokkos_View_Fad, Unmanaged2,
FadType, Layout, Device )
985 typedef typename FadType::value_type scalar_type;
986 typedef Kokkos::View<scalar_type***,Layout,Device> ViewType;
987 typedef Kokkos::View<FadType**,Layout,Device> FadViewType;
988 typedef typename ViewType::size_type size_type;
989 typedef typename ViewType::HostMirror host_view_type;
990 typedef typename FadViewType::HostMirror fad_host_view_type;
997 ViewType v(
"view", num_rows, num_cols, fad_size+1);
998 host_view_type h_v = Kokkos::create_mirror_view(v);
999 for (size_type i=0; i<num_rows; ++i) {
1000 for (size_type j=0; j<num_cols; ++j) {
1001 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1002 for (size_type k=0; k<fad_size; k++)
1003 h_v(i,j,k) =
f.dx(k);
1004 h_v(i,j,fad_size) =
f.val();
1007 Kokkos::deep_copy(v, h_v);
1010 FadViewType v_fad( v.ptr_on_device(), num_rows, num_cols, fad_size+1);
1013 fad_host_view_type h_v_fad(
"host_view_fad", num_rows, num_cols, fad_size+1);
1014 Kokkos::deep_copy(h_v_fad, v_fad);
1018 for (size_type i=0; i<num_rows; ++i) {
1019 for (size_type j=0; j<num_cols; ++j) {
1020 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1021 success = success &&
checkFads(f, h_v_fad(i,j), out);
1027 Kokkos_View_Fad, UnmanagedConst,
FadType, Layout, Device )
1029 typedef typename FadType::value_type scalar_type;
1030 typedef Kokkos::View<scalar_type***,Layout,Device> ViewType;
1031 typedef Kokkos::View<const scalar_type***,Layout,Device> ConstViewType;
1032 typedef Kokkos::View<FadType**,Layout,Device,Kokkos::MemoryUnmanaged> FadViewType;
1033 typedef Kokkos::View<const FadType**,Layout,Device,Kokkos::MemoryUnmanaged> ConstFadViewType;
1034 typedef typename ViewType::size_type size_type;
1035 typedef typename ViewType::HostMirror host_view_type;
1036 typedef typename FadViewType::HostMirror fad_host_view_type;
1043 ViewType v(
"view", num_rows, num_cols, fad_size+1);
1044 host_view_type h_v = Kokkos::create_mirror_view(v);
1045 for (size_type i=0; i<num_rows; ++i) {
1046 for (size_type j=0; j<num_cols; ++j) {
1047 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1048 for (size_type k=0; k<fad_size; k++)
1049 h_v(i,j,k) =
f.dx(k);
1050 h_v(i,j,fad_size) =
f.val();
1053 Kokkos::deep_copy(v, h_v);
1054 ConstViewType v_const = v;
1057 ConstFadViewType v_fad(
1058 v_const.ptr_on_device(), num_rows, num_cols, fad_size+1);
1061 fad_host_view_type h_v_fad(
"host_view_fad", num_rows, num_cols, fad_size+1);
1062 Kokkos::deep_copy(h_v_fad, v_fad);
1066 for (size_type i=0; i<num_rows; ++i) {
1067 for (size_type j=0; j<num_cols; ++j) {
1068 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1069 success = success &&
checkFads(f, h_v_fad(i,j), out);
1075 Kokkos_View_Fad, UnmanagedConst2,
FadType, Layout, Device )
1077 typedef typename FadType::value_type scalar_type;
1078 typedef Kokkos::View<scalar_type***,Layout,Device> ViewType;
1079 typedef Kokkos::View<const scalar_type***,Layout,Device> ConstViewType;
1080 typedef Kokkos::View<FadType**,Layout,Device> FadViewType;
1081 typedef Kokkos::View<const FadType**,Layout,Device> ConstFadViewType;
1082 typedef typename ViewType::size_type size_type;
1083 typedef typename ViewType::HostMirror host_view_type;
1084 typedef typename FadViewType::HostMirror fad_host_view_type;
1091 ViewType v(
"view", num_rows, num_cols, fad_size+1);
1092 host_view_type h_v = Kokkos::create_mirror_view(v);
1093 for (size_type i=0; i<num_rows; ++i) {
1094 for (size_type j=0; j<num_cols; ++j) {
1095 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1096 for (size_type k=0; k<fad_size; k++)
1097 h_v(i,j,k) =
f.dx(k);
1098 h_v(i,j,fad_size) =
f.val();
1101 Kokkos::deep_copy(v, h_v);
1102 ConstViewType v_const = v;
1105 ConstFadViewType v_fad(v_const.ptr_on_device(), num_rows, num_cols, fad_size+1);
1108 fad_host_view_type h_v_fad(
"host_view_fad", num_rows, num_cols, fad_size+1);
1109 Kokkos::deep_copy(h_v_fad, v_fad);
1113 for (size_type i=0; i<num_rows; ++i) {
1114 for (size_type j=0; j<num_cols; ++j) {
1115 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1116 success = success &&
checkFads(f, h_v_fad(i,j), out);
1124 Kokkos_View_Fad, SFadNoSizeArg,
FadType, Layout, Device )
1126 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
1127 typedef typename ViewType::size_type size_type;
1128 typedef typename ViewType::HostMirror host_view_type;
1135 ViewType v(
"view", num_rows, num_cols);
1136 host_view_type h_v = Kokkos::create_mirror_view(v);
1137 for (size_type i=0; i<num_rows; ++i) {
1138 for (size_type j=0; j<num_cols; ++j) {
1139 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1143 Kokkos::deep_copy(v, h_v);
1146 Kokkos::deep_copy(h_v, v);
1152 for (size_type i=0; i<num_rows; ++i) {
1153 for (size_type j=0; j<num_cols; ++j) {
1154 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1155 success = success &&
checkFads(f, h_v(i,j), out);
1163 Kokkos_View_Fad, ShmemSize,
FadType, Layout, Device )
1165 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
1166 typedef typename ViewType::size_type size_type;
1172 const size_type shmem_size =
1173 ViewType::shmem_size(num_rows, num_cols);
1176 static const size_type align = 8;
1177 static const size_type mask = align - 1;
1178 const size_type shmem_size_expected =
1184 Kokkos_View_Fad, Unmanaged,
FadType, Layout, Device ) {}
1187 Kokkos_View_Fad, Unmanaged2,
FadType, Layout, Device ) {}
1190 Kokkos_View_Fad, UnmanagedConst,
FadType, Layout, Device ) {}
1193 Kokkos_View_Fad, UnmanagedConst2,
FadType, Layout, Device ) {}
1196 Kokkos_View_Fad, SFadNoSizeArg,
FadType, Layout, Device ) {}
1200 #define VIEW_FAD_TESTS_FLD( F, L, D ) \ 1201 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Size, F, L, D ) \ 1202 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DeepCopy, F, L, D ) \ 1203 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DeepCopy_ConstantScalar, F, L, D ) \ 1204 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DeepCopy_ConstantZero, F, L, D ) \ 1205 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DeepCopy_ConstantFad, F, L, D ) \ 1206 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DeepCopy_ConstantFadFull, F, L, D ) \ 1207 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, ScalarAssign, F, L, D ) \ 1208 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Unmanaged, F, L, D ) \ 1209 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Unmanaged2, F, L, D ) \ 1210 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, UnmanagedConst, F, L, D ) \ 1211 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, UnmanagedConst2, F, L, D ) \ 1212 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Multiply, F, L, D ) \ 1213 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, MultiplyUpdate, F, L, D ) \ 1214 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, MultiplyConst, F, L, D ) \ 1215 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, MultiplyMixed, F, L, D ) \ 1216 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Rank8, F, L, D ) \ 1217 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Roger, F, L, D ) \ 1218 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, AssignDifferentStrides, F, L, D ) \ 1219 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DynRankDimensionScalar, F, L, D ) \ 1220 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DynRankMultiply, F, L, D ) \ 1221 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, SubdynrankviewCol, F, L, D ) \ 1222 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, SubdynrankviewRow, F, L, D ) \ 1223 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, SubdynrankviewScalar, F, L, D ) \ 1224 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Subview, F, L, D ) \ 1225 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, ShmemSize, F, L, D ) 1227 #define VIEW_FAD_TESTS_SFLD( F, L, D ) \ 1228 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, SFadNoSizeArg, F, L, D ) 1230 #define VIEW_FAD_TESTS_FD( F, D ) \ 1231 using Kokkos::LayoutLeft; \ 1232 using Kokkos::LayoutRight; \ 1233 VIEW_FAD_TESTS_FLD( F, LayoutLeft, D) \ 1234 VIEW_FAD_TESTS_FLD( F, LayoutRight, D) 1236 #define VIEW_FAD_TESTS_SFD( F, D ) \ 1237 using Kokkos::LayoutLeft; \ 1238 using Kokkos::LayoutRight; \ 1239 VIEW_FAD_TESTS_SFLD( F, LayoutLeft, D) \ 1240 VIEW_FAD_TESTS_SFLD( F, LayoutRight, D) 1263 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC) 1264 #define VIEW_FAD_TESTS_D( D ) \ 1265 VIEW_FAD_TESTS_FD( SFadType, D ) \ 1266 VIEW_FAD_TESTS_FD( SLFadType, D ) \ 1267 VIEW_FAD_TESTS_FD( DFadType, D ) 1271 VIEW_FAD_TESTS_FD( ELRSLFadType,
D ) \
1272 VIEW_FAD_TESTS_FD( ELRDFadType,
D ) \
1273 VIEW_FAD_TESTS_FD( CacheSFadType,
D ) \
1274 VIEW_FAD_TESTS_FD( CacheSLFadType,
D ) \
1275 VIEW_FAD_TESTS_FD( CacheDFadType,
D ) \
1276 VIEW_FAD_TESTS_FD( ELRCacheSFadType,
D ) \
1277 VIEW_FAD_TESTS_FD( ELRCacheSLFadType,
D ) \
1278 VIEW_FAD_TESTS_FD( ELRCacheDFadType,
D ) \
1280 VIEW_FAD_TESTS_SFD( ELRSFadType,
D ) \
1281 VIEW_FAD_TESTS_SFD( CacheSFadType,
D ) \
1282 VIEW_FAD_TESTS_SFD( ELRCacheSFadType,
D )
1287 #define VIEW_FAD_TESTS_D( D ) \ 1288 VIEW_FAD_TESTS_FD( SFadType, D ) \ 1289 VIEW_FAD_TESTS_FD( SLFadType, D ) 1293 VIEW_FAD_TESTS_FD( ELRSLFadType,
D ) \
1294 VIEW_FAD_TESTS_FD( CacheSFadType,
D ) \
1295 VIEW_FAD_TESTS_FD( CacheSLFadType,
D ) \
1296 VIEW_FAD_TESTS_FD( ELRCacheSFadType,
D ) \
1297 VIEW_FAD_TESTS_FD( ELRCacheSLFadType,
D ) \
1299 VIEW_FAD_TESTS_SFD( ELRSFadType,
D ) \
1300 VIEW_FAD_TESTS_SFD( CacheSFadType,
D ) \
1301 VIEW_FAD_TESTS_SFD( ELRCacheSFadType,
D )
const int global_fad_size
bool checkFads(const FadType1 &x, const FadType2 &x2, Teuchos::FancyOStream &out, double tol=1.0e-15)
ViewType::size_type size_type
#define TEUCHOS_TEST_FLOATING_EQUALITY(v1, v2, tol, out, success)
Sacado::Fad::DFad< double > FadType
Sacado::Fad::SLFad< double, 2 *global_fad_size > SLFadType
#define VIEW_FAD_TESTS_FD(F, D)
const InputViewType1 m_v1
const OutputViewType m_v2
static void apply(const InputViewType v1, const OutputViewType v2, const size_type col)
#define KOKKOS_INLINE_FUNCTION
expr expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c *expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr2 expr1 expr2 expr1 expr1 expr1 c
ScalarAssignKernel(const ViewType &v, const ScalarType &s)
KOKKOS_INLINE_FUNCTION void operator()(const size_type i) const
Sacado::Fad::DFad< double > DFadType
static void apply(const InputViewType1 v1, const InputViewType2 v2, const OutputViewType v3, const bool update=false)
InputViewType1::execution_space execution_space
static void apply(const ViewType &v, const ScalarType &s)
const int global_num_rows
KOKKOS_INLINE_FUNCTION void operator()(const size_type i) const
AssignRank2Rank1Kernel(const InputViewType v1, const OutputViewType v2, const size_type col)
#define TEUCHOS_TEST_EQUALITY(v1, v2, out, success)
InputViewType::size_type size_type
InputViewType::execution_space execution_space
TEUCHOS_UNIT_TEST_TEMPLATE_3_DECL(Kokkos_View_Fad, Size, FadType, Layout, Device)
Sacado::Fad::SFad< double, global_fad_size > SFadType
MultiplyKernel(const InputViewType1 v1, const InputViewType2 v2, const OutputViewType v3, const bool update)
KOKKOS_INLINE_FUNCTION void operator()(const size_type i) const
InputViewType1::size_type size_type
const int global_num_cols
ViewType::execution_space execution_space
unsigned dimension_scalar(const View &v, const ViewPack &... views)
const InputViewType2 m_v2
const OutputViewType m_v3
fadtype generate_fad(const ordinal num_rows, const ordinal num_cols, const ordinal fad_size, const ordinal row, const ordinal col)