36 static const bool value =
false;
39 template <
typename T,
int N>
46 static const bool value =
false;
54 template <
typename FadType1,
typename FadType2>
55 bool checkFads(
const FadType1& x,
const FadType2& x2,
67 for (
int i=0; i<x.size(); ++i)
73 template <
typename fadtype,
typename ordinal>
76 const ordinal num_cols,
77 const ordinal fad_size,
81 typedef typename fadtype::value_type scalar;
82 fadtype x(fad_size, scalar(0.0));
84 const scalar x_row = 100.0 + scalar(num_rows) / scalar(row+1);
85 const scalar x_col = 10.0 + scalar(num_cols) / scalar(col+1);
86 x.val() = x_row + x_col;
87 for (ordinal i=0; i<fad_size; ++i) {
88 const scalar x_fad = 1.0 + scalar(fad_size) / scalar(i+1);
89 x.fastAccessDx(i) = x_row + x_col + x_fad;
94 #ifndef GLOBAL_FAD_SIZE
95 #define GLOBAL_FAD_SIZE 5
102 template <
typename InputViewType1,
103 typename InputViewType2 = InputViewType1,
104 typename OutputViewType = InputViewType1>
118 const InputViewType2 v2,
119 const OutputViewType v3,
135 const size_type i = team.league_rank()*team.team_size() + team.team_rank();
136 if (i <
m_v1.extent(0))
141 static void apply(
const InputViewType1 v1,
142 const InputViewType2 v2,
143 const OutputViewType v3,
144 const bool update =
false) {
147 #if defined (KOKKOS_ENABLE_CUDA) && defined (SACADO_VIEW_CUDA_HIERARCHICAL)
148 const size_type stride = Kokkos::ViewScalarStride<InputViewType1>::stride;
149 const bool use_team =
150 std::is_same<execution_space, Kokkos::Cuda>::value &&
151 ( Kokkos::is_view_fad_contiguous<InputViewType1>::value ||
152 Kokkos::is_dynrankview_fad_contiguous<InputViewType1>::value ) &&
154 #elif defined (KOKKOS_ENABLE_CUDA) && defined (SACADO_VIEW_CUDA_HIERARCHICAL_DFAD)
156 const bool use_team =
157 std::is_same<execution_space, Kokkos::Cuda>::value &&
158 ( Kokkos::is_view_fad_contiguous<InputViewType1>::value ||
159 Kokkos::is_dynrankview_fad_contiguous<InputViewType1>::value ) &&
163 const bool use_team =
false;
167 const size_type team_size = 256 / stride;
179 template <
typename ViewType>
183 typedef typename ViewType::value_type::value_type
ScalarType;
204 const size_type i = team.league_rank()*team.team_size() + team.team_rank();
205 if (i <
m_v.extent(0))
213 #if defined (KOKKOS_ENABLE_CUDA) && defined (SACADO_VIEW_CUDA_HIERARCHICAL)
214 const bool use_team =
215 std::is_same<execution_space, Kokkos::Cuda>::value &&
216 ( Kokkos::is_view_fad_contiguous<ViewType>::value ||
217 Kokkos::is_dynrankview_fad_contiguous<ViewType>::value ) &&
219 #elif defined (KOKKOS_ENABLE_CUDA) && defined (SACADO_VIEW_CUDA_HIERARCHICAL_DFAD)
220 const bool use_team =
221 std::is_same<execution_space, Kokkos::Cuda>::value &&
222 ( Kokkos::is_view_fad_contiguous<ViewType>::value ||
223 Kokkos::is_dynrankview_fad_contiguous<ViewType>::value ) &&
226 const bool use_team =
false;
242 template <
typename ViewType>
269 const size_type i = team.league_rank()*team.team_size() + team.team_rank();
270 if (i <
m_v.extent(0))
278 #if defined (KOKKOS_ENABLE_CUDA) && defined (SACADO_VIEW_CUDA_HIERARCHICAL)
279 const bool use_team =
280 std::is_same<execution_space, Kokkos::Cuda>::value &&
281 ( Kokkos::is_view_fad_contiguous<ViewType>::value ||
282 Kokkos::is_dynrankview_fad_contiguous<ViewType>::value ) &&
284 #elif defined (KOKKOS_ENABLE_CUDA) && defined (SACADO_VIEW_CUDA_HIERARCHICAL_DFAD)
285 const bool use_team =
286 std::is_same<execution_space, Kokkos::Cuda>::value &&
287 ( Kokkos::is_view_fad_contiguous<ViewType>::value ||
288 Kokkos::is_dynrankview_fad_contiguous<ViewType>::value ) &&
291 const bool use_team =
false;
307 template <
typename InputViewType,
308 typename OutputViewType,
309 typename Enabled =
void>
323 const OutputViewType v2,
326 static_assert(
unsigned(InputViewType::Rank) == 2 ,
327 "Require rank-2 input view" );
328 static_assert(
unsigned(OutputViewType::Rank) == 1 ,
329 "Require rank-1 output view" );
341 const size_type i = team.league_rank()*team.team_size() + team.team_rank();
342 if (i <
m_v1.extent(0))
347 static void apply(
const InputViewType v1,
348 const OutputViewType v2,
352 #if defined (KOKKOS_ENABLE_CUDA) && defined (SACADO_VIEW_CUDA_HIERARCHICAL)
353 const bool use_team =
354 std::is_same<execution_space, Kokkos::Cuda>::value &&
355 ( Kokkos::is_view_fad_contiguous<InputViewType>::value ||
356 Kokkos::is_dynrankview_fad_contiguous<InputViewType>::value ) &&
358 #elif defined (KOKKOS_ENABLE_CUDA) && defined (SACADO_VIEW_CUDA_HIERARCHICAL_DFAD)
359 const bool use_team =
360 std::is_same<execution_space, Kokkos::Cuda>::value &&
361 ( Kokkos::is_view_fad_contiguous<InputViewType>::value ||
362 Kokkos::is_dynrankview_fad_contiguous<InputViewType>::value ) &&
365 const bool use_team =
false;
381 template <
typename ViewType,
typename ScalarViewType>
401 Kokkos::atomic_add(&(
m_s()), x);
407 const size_type i = team.league_rank()*team.team_size() + team.team_rank();
408 if (i <
m_v.extent(0))
413 static void apply(
const ViewType& v,
const ScalarViewType& s) {
416 #if defined (KOKKOS_ENABLE_CUDA) && defined (SACADO_VIEW_CUDA_HIERARCHICAL)
417 const bool use_team =
418 std::is_same<execution_space, Kokkos::Cuda>::value &&
419 ( Kokkos::is_view_fad_contiguous<ViewType>::value ||
420 Kokkos::is_dynrankview_fad_contiguous<ViewType>::value ) &&
422 #elif defined (KOKKOS_ENABLE_CUDA) && defined (SACADO_VIEW_CUDA_HIERARCHICAL_DFAD)
423 const bool use_team =
424 std::is_same<execution_space, Kokkos::Cuda>::value &&
425 ( Kokkos::is_view_fad_contiguous<ViewType>::value ||
426 Kokkos::is_dynrankview_fad_contiguous<ViewType>::value ) &&
429 const bool use_team =
false;
445 Kokkos_View_Fad, Size,
FadType, Layout, Device )
447 typedef Kokkos::View<FadType*,Layout,Device> ViewType;
448 typedef typename ViewType::size_type size_type;
454 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
455 v = ViewType(
"view", num_rows);
458 v = ViewType(
"view", num_rows, fad_size+1);
464 Kokkos_View_Fad, DeepCopy,
FadType, Layout, Device )
466 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
467 typedef typename ViewType::size_type size_type;
468 typedef typename ViewType::HostMirror host_view_type;
476 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
477 v = ViewType (
"view", num_rows, num_cols);
479 v = ViewType (
"view", num_rows, num_cols, fad_size+1);
481 host_view_type h_v = Kokkos::create_mirror_view(v);
482 for (size_type i=0; i<num_rows; ++i)
483 for (size_type j=0; j<num_cols; ++j)
484 h_v(i,j) = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
485 Kokkos::deep_copy(v, h_v);
488 host_view_type h_v2 = Kokkos::create_mirror_view(v);
489 Kokkos::deep_copy(h_v2, v);
493 for (size_type i=0; i<num_rows; ++i) {
494 for (size_type j=0; j<num_cols; ++j) {
495 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
496 success = success &&
checkFads(f, h_v2(i,j), out);
502 Kokkos_View_Fad, DeepCopy_ConstantScalar,
FadType, Layout, Device )
504 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
505 typedef typename ViewType::size_type size_type;
506 typedef typename ViewType::HostMirror host_view_type;
507 typedef typename FadType::value_type value_type;
514 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
515 v = ViewType (
"view", num_rows, num_cols);
518 v = ViewType (
"view", num_rows, num_cols, fad_size+1);
520 typename ViewType::array_type va = v;
521 Kokkos::deep_copy( va, 1.0 );
524 value_type
a = 2.3456;
525 Kokkos::deep_copy( v, a );
528 host_view_type hv = Kokkos::create_mirror_view(v);
529 Kokkos::deep_copy(hv, v);
533 for (size_type i=0; i<num_rows; ++i) {
534 for (size_type j=0; j<num_cols; ++j) {
535 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
540 success = success &&
checkFads(f, hv(i,j), out);
546 Kokkos_View_Fad, DeepCopy_ConstantZero,
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;
551 typedef typename FadType::value_type value_type;
558 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
559 v = ViewType (
"view", num_rows, num_cols);
562 v = ViewType (
"view", num_rows, num_cols, fad_size+1);
564 typename ViewType::array_type va = v;
565 Kokkos::deep_copy( va, 1.0 );
569 Kokkos::deep_copy( v, a );
572 host_view_type hv = Kokkos::create_mirror_view(v);
573 Kokkos::deep_copy(hv, v);
577 for (size_type i=0; i<num_rows; ++i) {
578 for (size_type j=0; j<num_cols; ++j) {
579 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
584 success = success &&
checkFads(f, hv(i,j), out);
590 Kokkos_View_Fad, DeepCopy_ConstantFad,
FadType, Layout, Device )
592 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
593 typedef typename ViewType::size_type size_type;
594 typedef typename ViewType::HostMirror host_view_type;
601 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
602 v = ViewType (
"view", num_rows, num_cols);
605 v = ViewType (
"view", num_rows, num_cols, fad_size+1);
607 typename ViewType::array_type va = v;
608 Kokkos::deep_copy( va, 1.0 );
612 Kokkos::deep_copy( v, a );
615 host_view_type hv = Kokkos::create_mirror_view(v);
616 Kokkos::deep_copy(hv, v);
620 for (size_type i=0; i<num_rows; ++i) {
621 for (size_type j=0; j<num_cols; ++j) {
622 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
627 success = success &&
checkFads(f, hv(i,j), out);
633 Kokkos_View_Fad, DeepCopy_ConstantFadFull,
FadType, Layout, Device )
635 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
636 typedef typename ViewType::size_type size_type;
637 typedef typename ViewType::HostMirror host_view_type;
645 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
646 v = ViewType (
"view", num_rows, num_cols);
648 v = ViewType (
"view", num_rows, num_cols, fad_size+1);
650 typename ViewType::array_type va = v;
651 Kokkos::deep_copy( va, 1.0 );
655 for (size_type i=0; i<fad_size; ++i)
656 a.fastAccessDx(i) = 7.89 + (i+1);
657 Kokkos::deep_copy( v, a );
660 host_view_type hv = Kokkos::create_mirror_view(v);
661 Kokkos::deep_copy(hv, v);
665 for (size_type i=0; i<num_rows; ++i) {
666 for (size_type j=0; j<num_cols; ++j) {
667 success = success &&
checkFads(a, hv(i,j), out);
673 Kokkos_View_Fad, ScalarAssign,
FadType, Layout, Device )
675 typedef Kokkos::View<FadType*,Layout,Device> ViewType;
676 typedef typename ViewType::size_type size_type;
677 typedef typename ViewType::HostMirror host_view_type;
678 typedef typename FadType::value_type value_type;
684 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
685 v = ViewType (
"view", num_rows);
688 v = ViewType (
"view", num_rows, fad_size+1);
690 typename ViewType::array_type va = v;
691 Kokkos::deep_copy( va, 1.0 );
694 value_type
a = 2.3456;
698 host_view_type hv = Kokkos::create_mirror_view(v);
699 Kokkos::deep_copy(hv, v);
703 for (size_type i=0; i<num_rows; ++i) {
704 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
709 success = success &&
checkFads(f, hv(i), out);
714 Kokkos_View_Fad, ValueAssign,
FadType, Layout, Device )
716 typedef Kokkos::View<FadType*,Layout,Device> ViewType;
717 typedef typename ViewType::size_type size_type;
718 typedef typename ViewType::HostMirror host_view_type;
725 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
726 v = ViewType (
"view", num_rows);
728 v = ViewType (
"view", num_rows, fad_size+1);
730 typename ViewType::array_type va = v;
731 Kokkos::deep_copy( va, 1.0 );
735 for (size_type i=0; i<fad_size; ++i)
736 a.fastAccessDx(i) = 7.89+i;
740 host_view_type hv = Kokkos::create_mirror_view(v);
741 Kokkos::deep_copy(hv, v);
745 for (size_type i=0; i<num_rows; ++i) {
746 success = success &&
checkFads(a, hv(i), out);
751 Kokkos_View_Fad, Resize,
FadType, Layout, Device )
753 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
754 typedef typename ViewType::size_type size_type;
755 typedef typename ViewType::HostMirror host_view_type;
763 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
764 v = ViewType (
"view", num_rows, num_cols);
766 v = ViewType (
"view", num_rows, num_cols, fad_size+1);
768 host_view_type h_v = Kokkos::create_mirror_view(v);
769 for (size_type i=0; i<num_rows; ++i)
770 for (size_type j=0; j<num_cols; ++j)
771 h_v(i,j) = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
772 Kokkos::deep_copy(v, h_v);
775 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
776 Kokkos::resize(v, num_rows, num_cols+1);
778 Kokkos::resize(v, num_rows, num_cols+1, fad_size+1);
782 host_view_type h_v2 = Kokkos::create_mirror_view(v);
783 Kokkos::deep_copy(h_v2, v);
787 for (size_type i=0; i<num_rows; ++i) {
788 for (size_type j=0; j<num_cols; ++j) {
789 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
790 success = success &&
checkFads(f, h_v2(i,j), out);
792 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
797 success = success &&
checkFads(f, h_v2(i,num_cols), out);
802 Kokkos_View_Fad, Multiply,
FadType, Layout, Device )
804 typedef Kokkos::View<FadType*,Layout,Device> ViewType;
805 typedef typename ViewType::size_type size_type;
806 typedef typename ViewType::HostMirror host_view_type;
813 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
814 v1 = ViewType (
"view1", num_rows);
815 v2 = ViewType (
"view2", num_rows);
817 v1 = ViewType (
"view1", num_rows, fad_size+1);
818 v2 = ViewType (
"view2", num_rows, fad_size+1);
820 host_view_type h_v1 = Kokkos::create_mirror_view(v1);
821 host_view_type h_v2 = Kokkos::create_mirror_view(v2);
822 for (size_type i=0; i<num_rows; ++i) {
823 h_v1(i) = generate_fad<FadType>(
824 num_rows, size_type(2), fad_size, i, size_type(0));
825 h_v2(i) = generate_fad<FadType>(
826 num_rows, size_type(2), fad_size, i, size_type(1));
828 Kokkos::deep_copy(v1, h_v1);
829 Kokkos::deep_copy(v2, h_v2);
833 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
834 v3 = ViewType (
"view3", num_rows);
836 v3 = ViewType (
"view3", num_rows, fad_size+1);
841 host_view_type h_v3 = Kokkos::create_mirror_view(v3);
842 Kokkos::deep_copy(h_v3, v3);
846 for (size_type i=0; i<num_rows; ++i) {
848 generate_fad<FadType>(num_rows, size_type(2), fad_size, i, size_type(0));
850 generate_fad<FadType>(num_rows, size_type(2), fad_size, i, size_type(1));
852 success = success &&
checkFads(f3, h_v3(i), out);
857 Kokkos_View_Fad, MultiplyUpdate,
FadType, Layout, Device )
859 typedef Kokkos::View<FadType*,Layout,Device> ViewType;
860 typedef typename ViewType::size_type size_type;
861 typedef typename ViewType::HostMirror host_view_type;
868 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
869 v1 = ViewType (
"view1", num_rows);
870 v2 = ViewType (
"view2", num_rows);
872 v1 = ViewType (
"view1", num_rows, fad_size+1);
873 v2 = ViewType (
"view2", num_rows, fad_size+1);
875 host_view_type h_v1 = Kokkos::create_mirror_view(v1);
876 host_view_type h_v2 = Kokkos::create_mirror_view(v2);
877 for (size_type i=0; i<num_rows; ++i) {
878 h_v1(i) = generate_fad<FadType>(
879 num_rows, size_type(2), fad_size, i, size_type(0));
880 h_v2(i) = generate_fad<FadType>(
881 num_rows, size_type(2), fad_size, i, size_type(1));
883 Kokkos::deep_copy(v1, h_v1);
884 Kokkos::deep_copy(v2, h_v2);
888 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
889 v3 = ViewType (
"view3", num_rows);
891 v3 = ViewType (
"view3", num_rows, fad_size+1);
893 Kokkos::deep_copy(v3, 1.0);
897 host_view_type h_v3 = Kokkos::create_mirror_view(v3);
898 Kokkos::deep_copy(h_v3, v3);
902 for (size_type i=0; i<num_rows; ++i) {
904 generate_fad<FadType>(num_rows, size_type(2), fad_size, i, size_type(0));
906 generate_fad<FadType>(num_rows, size_type(2), fad_size, i, size_type(1));
908 success = success &&
checkFads(f3, h_v3(i), out);
913 Kokkos_View_Fad, MultiplyConst,
FadType, Layout, Device )
915 typedef Kokkos::View<const FadType*,Layout,Device,Kokkos::MemoryUnmanaged> ConstViewType;
916 typedef Kokkos::View<FadType*,Layout,Device> ViewType;
917 typedef typename ViewType::size_type size_type;
918 typedef typename ViewType::HostMirror host_view_type;
925 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
926 v1 = ViewType (
"view1", num_rows);
927 v2 = ViewType (
"view2", num_rows);
929 v1 = ViewType (
"view1", num_rows, fad_size+1);
930 v2 = ViewType (
"view2", num_rows, fad_size+1);
932 host_view_type h_v1 = Kokkos::create_mirror_view(v1);
933 host_view_type h_v2 = Kokkos::create_mirror_view(v2);
934 for (size_type i=0; i<num_rows; ++i) {
935 h_v1(i) = generate_fad<FadType>(
936 num_rows, size_type(2), fad_size, i, size_type(0));
937 h_v2(i) = generate_fad<FadType>(
938 num_rows, size_type(2), fad_size, i, size_type(1));
940 Kokkos::deep_copy(v1, h_v1);
941 Kokkos::deep_copy(v2, h_v2);
943 ConstViewType cv1 = v1;
947 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
948 v3 = ViewType (
"view3", num_rows);
950 v3 = ViewType (
"view3", num_rows, fad_size+1);
955 host_view_type h_v3 = Kokkos::create_mirror_view(v3);
956 Kokkos::deep_copy(h_v3, v3);
960 for (size_type i=0; i<num_rows; ++i) {
962 generate_fad<FadType>(num_rows, size_type(2), fad_size, i, size_type(0));
964 generate_fad<FadType>(num_rows, size_type(2), fad_size, i, size_type(1));
966 success = success &&
checkFads(f3, h_v3(i), out);
971 Kokkos_View_Fad, MultiplyMixed,
FadType, Layout, Device )
973 typedef Kokkos::View<FadType*,Layout,Device> ViewType;
974 typedef typename ViewType::size_type size_type;
975 typedef typename ViewType::HostMirror host_view_type;
977 const size_type num_rows = 2;
981 FadType f0 = generate_fad<FadType>(
982 num_rows, size_type(2), fad_size, size_type(0), size_type(0));
983 FadType f1 = generate_fad<FadType>(
984 num_rows, size_type(2), fad_size, size_type(1), size_type(0));
986 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
987 h_v = host_view_type (
"view1", num_rows);
989 h_v = host_view_type (
"view1", num_rows, fad_size+1);
1002 Kokkos_View_Fad, AtomicAdd,
FadType, Layout, Device )
1004 typedef Kokkos::View<FadType*,Layout,Device> ViewType;
1005 typedef Kokkos::View<FadType,Layout,Device> ScalarViewType;
1006 typedef typename ViewType::size_type size_type;
1007 typedef typename ScalarViewType::HostMirror host_scalar_view_type;
1014 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
1015 v = ViewType (
"view", num_rows);
1017 v = ViewType (
"view", num_rows, fad_size+1);
1020 for (size_type i=0; i<fad_size; ++i)
1021 a.fastAccessDx(i) = 7.89+i;
1022 Kokkos::deep_copy( v, a );
1026 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
1027 s = ScalarViewType (
"scalar view");
1029 s = ScalarViewType (
"scalar view", fad_size+1);
1031 Kokkos::deep_copy( s,
FadType(fad_size,0.0) );
1037 host_scalar_view_type hs = Kokkos::create_mirror_view(s);
1038 Kokkos::deep_copy(hs, s);
1046 Kokkos_View_Fad, Rank8,
FadType, Layout, Device )
1048 typedef Kokkos::View<FadType*******,Layout,Device> ViewType;
1049 typedef typename ViewType::size_type size_type;
1050 typedef typename ViewType::HostMirror host_view_type;
1056 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
1057 v = ViewType (
"view", 100, 1, 2, 3, 4, 5, 6);
1059 v = ViewType (
"view", 100, 1, 2, 3, 4, 5, 6, fad_size+1);
1061 host_view_type h_v = Kokkos::create_mirror_view(v);
1062 typename host_view_type::array_type h_a = h_v;
1063 Kokkos::deep_copy(h_a, 1.0);
1066 h_v(99,0,1,2,3,4,5) = f1;
1067 FadType f2 = h_v(99,0,1,2,3,4,5);
1074 Kokkos_View_Fad, Roger,
FadType, Layout, Device )
1076 Kokkos::View<FadType*,Layout,Device>
a;
1077 Kokkos::View<FadType**,Layout,Device> b;
1078 Kokkos::View<FadType***,Layout,Device>
c;
1079 Kokkos::View<FadType****,Layout,Device> d;
1080 Kokkos::View<FadType*****,Layout,Device> e;
1081 Kokkos::View<FadType******,Layout,Device>
f;
1082 Kokkos::View<FadType*******,Layout,Device>
g;
1084 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
1085 a = Kokkos::View<FadType*,Layout,Device>(
"a",4);
1086 b = Kokkos::View<FadType**,Layout,Device> (
"b",4,4);
1087 c = Kokkos::View<FadType***,Layout,Device> (
"c",4,4,4);
1088 d = Kokkos::View<FadType****,Layout,Device> (
"d",4,4,4,4);
1089 e = Kokkos::View<FadType*****,Layout,Device> (
"e",4,4,4,4,4);
1090 f = Kokkos::View<FadType******,Layout,Device> (
"f",4,4,4,4,4,4);
1091 g = Kokkos::View<FadType*******,Layout,Device> (
"g",4,4,4,4,4,4,4);
1094 a = Kokkos::View<FadType*,Layout,Device>(
"a",4,fad_size+1);
1095 b = Kokkos::View<FadType**,Layout,Device> (
"b",4,4,fad_size+1);
1096 c = Kokkos::View<FadType***,Layout,Device> (
"c",4,4,4,fad_size+1);
1097 d = Kokkos::View<FadType****,Layout,Device> (
"d",4,4,4,4,fad_size+1);
1098 e = Kokkos::View<FadType*****,Layout,Device> (
"e",4,4,4,4,4,fad_size+1);
1099 f = Kokkos::View<FadType******,Layout,Device> (
"f",4,4,4,4,4,4,fad_size+1);
1100 g = Kokkos::View<FadType*******,Layout,Device> (
"g",4,4,4,4,4,4,4,fad_size+1);
1103 typedef typename Device::memory_space memory_space;
1104 const bool is_accessible =
1105 Kokkos::Impl::MemorySpaceAccess<Kokkos::HostSpace,
1106 memory_space>::accessible;
1107 if (is_accessible) {
1109 f(0,0,0,0,0,0) =
FadType(1.0);
1110 g(0,0,0,0,0,0,0) =
FadType(1.0);
1118 Kokkos_View_Fad, AssignDifferentStrides,
FadType, Layout, Device )
1120 typedef Kokkos::View<FadType**,Layout,Device> ViewType1;
1121 typedef Kokkos::View<FadType*,Layout,Device> ViewType2;
1122 typedef typename ViewType1::size_type size_type;
1123 typedef typename ViewType1::HostMirror host_view_type1;
1124 typedef typename ViewType2::HostMirror host_view_type2;
1132 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
1133 v1 = ViewType1 (
"view1", num_rows, num_cols);
1135 v1 = ViewType1 (
"view1", num_rows, num_cols, fad_size+1);
1137 host_view_type1 h_v1 = Kokkos::create_mirror_view(v1);
1138 for (size_type i=0; i<num_rows; ++i) {
1139 for (size_type j=0; j<num_cols; ++j) {
1140 h_v1(i,j) = generate_fad<FadType>(
1141 num_rows, num_cols, fad_size, i, j);
1144 Kokkos::deep_copy(v1, h_v1);
1148 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
1149 v2 = ViewType2 (
"view2", num_rows);
1151 v2 = ViewType2 (
"view2", num_rows, fad_size+1);
1156 host_view_type2 h_v2 = Kokkos::create_mirror_view(v2);
1157 Kokkos::deep_copy(h_v2, v2);
1161 for (size_type i=0; i<num_rows; ++i) {
1163 generate_fad<FadType>(num_rows, num_cols, fad_size, i, size_type(1));
1164 success = success &&
checkFads(f, h_v2(i), out);
1168 #if defined(HAVE_SACADO_KOKKOSCONTAINERS) && defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
1171 Kokkos_View_Fad, DynRankDimensionScalar,
FadType, Layout, Device )
1173 typedef Kokkos::DynRankView<double,Layout,Device> DoubleViewType;
1174 typedef Kokkos::DynRankView<FadType,Layout,Device> FadViewType;
1175 typedef typename FadViewType::size_type size_type;
1181 DoubleViewType v1(
"view1", num_rows);
1182 FadViewType v2 (
"view2", num_rows, fad_size+1);
1190 Kokkos_View_Fad, DynRankAssignStatic0,
FadType, Layout, Device )
1192 typedef Kokkos::View<FadType,Layout,Device> StaticViewType;
1193 typedef Kokkos::DynRankView<FadType,Layout,Device> DynamicViewType;
1194 typedef typename StaticViewType::size_type size_type;
1201 StaticViewType v1(
"view", fad_size+1);
1202 auto h_v1 = Kokkos::create_mirror_view(v1);
1203 h_v1() = generate_fad<FadType>(num_rows, num_cols, fad_size, size_type(0), size_type(0));
1204 Kokkos::deep_copy(v1, h_v1);
1207 DynamicViewType v2 = v1;
1210 auto h_v2 = Kokkos::create_mirror_view(v2);
1211 Kokkos::deep_copy(h_v2, v2);
1219 generate_fad<FadType>(num_rows, num_cols, fad_size, size_type(0), size_type(0));
1220 success = success &&
checkFads(f, h_v2(), out);
1224 Kokkos_View_Fad, DynRankAssignStatic1,
FadType, Layout, Device )
1226 typedef Kokkos::View<FadType*,Layout,Device> StaticViewType;
1227 typedef Kokkos::DynRankView<FadType,Layout,Device> DynamicViewType;
1228 typedef typename StaticViewType::size_type size_type;
1235 StaticViewType v1(
"view", num_rows, fad_size+1);
1236 auto h_v1 = Kokkos::create_mirror_view(v1);
1237 for (size_type i=0; i<num_rows; ++i)
1239 generate_fad<FadType>(num_rows, num_cols, fad_size, i, size_type(0));
1240 Kokkos::deep_copy(v1, h_v1);
1243 DynamicViewType v2 = v1;
1246 auto h_v2 = Kokkos::create_mirror_view(v2);
1247 Kokkos::deep_copy(h_v2, v2);
1256 for (size_type i=0; i<num_rows; ++i) {
1258 generate_fad<FadType>(num_rows, num_cols, fad_size, i, size_type(0));
1259 success = success &&
checkFads(f, h_v2(i), out);
1264 Kokkos_View_Fad, DynRankAssignStatic2,
FadType, Layout, Device )
1266 typedef Kokkos::View<FadType**,Layout,Device> StaticViewType;
1267 typedef Kokkos::DynRankView<FadType,Layout,Device> DynamicViewType;
1268 typedef typename StaticViewType::size_type size_type;
1275 StaticViewType v1(
"view", num_rows, num_cols, fad_size+1);
1276 auto h_v1 = Kokkos::create_mirror_view(v1);
1277 for (size_type i=0; i<num_rows; ++i)
1278 for (size_type j=0; j<num_cols; ++j)
1279 h_v1(i,j) = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1280 Kokkos::deep_copy(v1, h_v1);
1283 DynamicViewType v2 = v1;
1286 auto h_v2 = Kokkos::create_mirror_view(v2);
1287 Kokkos::deep_copy(h_v2, v2);
1298 for (size_type i=0; i<num_rows; ++i) {
1299 for (size_type j=0; j<num_cols; ++j) {
1300 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1301 success = success &&
checkFads(f, h_v2(i,j), out);
1307 Kokkos_View_Fad, DynRankMultiply,
FadType, Layout, Device )
1309 typedef Kokkos::DynRankView<FadType,Layout,Device> ViewType;
1310 typedef typename ViewType::size_type size_type;
1311 typedef typename ViewType::HostMirror host_view_type;
1317 ViewType v1(
"view1", num_rows, fad_size+1);
1318 ViewType v2(
"view2", num_rows, fad_size+1);
1319 host_view_type h_v1 = Kokkos::create_mirror_view(v1);
1320 host_view_type h_v2 = Kokkos::create_mirror_view(v2);
1321 for (size_type i=0; i<num_rows; ++i) {
1322 h_v1(i) = generate_fad<FadType>(
1323 num_rows, size_type(2), fad_size, i, size_type(0));
1324 h_v2(i) = generate_fad<FadType>(
1325 num_rows, size_type(2), fad_size, i, size_type(1));
1327 Kokkos::deep_copy(v1, h_v1);
1328 Kokkos::deep_copy(v2, h_v2);
1331 ViewType v3(
"view3", num_rows, fad_size+1);
1335 host_view_type h_v3 = Kokkos::create_mirror_view(v3);
1336 Kokkos::deep_copy(h_v3, v3);
1341 for (size_type i=0; i<num_rows; ++i) {
1343 generate_fad<FadType>(num_rows, size_type(2), fad_size, i, size_type(0));
1345 generate_fad<FadType>(num_rows, size_type(2), fad_size, i, size_type(1));
1347 success = success &&
checkFads(f3, h_v3(i), out);
1352 Kokkos_View_Fad, SubdynrankviewCol,
FadType, Layout, Device )
1354 typedef Kokkos::DynRankView<FadType,Layout,Device> ViewType;
1355 typedef typename ViewType::size_type size_type;
1356 typedef typename ViewType::HostMirror host_view_type;
1363 ViewType v(
"view", num_rows, num_cols, fad_size+1);
1364 host_view_type h_v = Kokkos::create_mirror_view(v);
1365 for (size_type i=0; i<num_rows; ++i) {
1366 for (size_type j=0; j<num_cols; ++j) {
1367 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1371 Kokkos::deep_copy(v, h_v);
1375 auto s = Kokkos::subdynrankview(v, Kokkos::ALL(), col);
1378 typedef decltype(s) SubviewType;
1379 typedef typename SubviewType::HostMirror HostSubviewType;
1385 HostSubviewType h_s = Kokkos::subdynrankview(h_v, Kokkos::ALL(), col);
1389 TEUCHOS_TEST_EQUALITY(Kokkos::dimension_scalar(s), fad_size+1, out, success);
1390 TEUCHOS_TEST_EQUALITY(Kokkos::dimension_scalar(h_s), fad_size+1, out, success);
1391 TEUCHOS_TEST_EQUALITY(h_s.extent(0), num_rows, out, success);
1392 TEUCHOS_TEST_EQUALITY(h_s.extent(1), 1, out, success);
1393 TEUCHOS_TEST_EQUALITY(h_s.extent(7), 1, out, success);
1395 for (size_type i=0; i<num_rows; ++i) {
1396 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, col);
1397 success = success &&
checkFads(f, h_s(i), out);
1402 Kokkos_View_Fad, SubdynrankviewRow,
FadType, Layout, Device )
1404 typedef Kokkos::DynRankView<FadType,Layout,Device> ViewType;
1405 typedef typename ViewType::size_type size_type;
1406 typedef typename ViewType::HostMirror host_view_type;
1410 const size_type num_planes = 9;
1414 ViewType v(
"view", num_rows, num_cols, num_planes, fad_size+1);
1415 host_view_type h_v = Kokkos::create_mirror_view(v);
1416 for (size_type i=0; i<num_rows; ++i) {
1417 for (size_type j=0; j<num_cols; ++j) {
1418 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1419 for (size_type k=0; k<num_planes; ++k) {
1420 h_v(i,j,k) = (k+1)*f;
1424 Kokkos::deep_copy(v, h_v);
1428 auto s = Kokkos::subdynrankview(v, row, Kokkos::ALL(), Kokkos::ALL());
1431 typedef decltype(s) SubviewType;
1432 typedef typename SubviewType::HostMirror HostSubviewType;
1438 HostSubviewType h_s =
1439 Kokkos::subdynrankview(h_v, row, Kokkos::ALL(), Kokkos::ALL());
1443 TEUCHOS_TEST_EQUALITY(Kokkos::dimension_scalar(s), fad_size+1, out, success);
1444 TEUCHOS_TEST_EQUALITY(Kokkos::dimension_scalar(h_s), fad_size+1, out, success);
1445 TEUCHOS_TEST_EQUALITY(h_s.extent(0), num_cols, out, success);
1446 TEUCHOS_TEST_EQUALITY(h_s.extent(1), num_planes, out, success);
1447 TEUCHOS_TEST_EQUALITY(h_s.extent(2), 1, out, success);
1448 TEUCHOS_TEST_EQUALITY(h_s.extent(7), 1, out, success);
1450 for (size_type j=0; j<num_cols; ++j) {
1451 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, row, j);
1452 for (size_type k=0; k<num_planes; ++k) {
1454 success = success &&
checkFads(g, h_s(j,k), out);
1460 Kokkos_View_Fad, SubdynrankviewScalar,
FadType, Layout, Device )
1462 typedef Kokkos::DynRankView<FadType,Layout,Device> ViewType;
1463 typedef typename ViewType::size_type size_type;
1464 typedef typename ViewType::HostMirror host_view_type;
1471 ViewType v(
"view", num_rows, num_cols, fad_size+1);
1472 host_view_type h_v = Kokkos::create_mirror_view(v);
1473 for (size_type i=0; i<num_rows; ++i) {
1474 for (size_type j=0; j<num_cols; ++j) {
1475 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1479 Kokkos::deep_copy(v, h_v);
1484 auto s = Kokkos::subdynrankview(v, row, col);
1487 typedef decltype(s) SubviewType;
1488 typedef typename SubviewType::HostMirror HostSubviewType;
1494 HostSubviewType h_s = Kokkos::subdynrankview(h_v, row, col);
1498 TEUCHOS_TEST_EQUALITY(Kokkos::dimension_scalar(s), fad_size+1, out, success);
1499 TEUCHOS_TEST_EQUALITY(Kokkos::dimension_scalar(h_s), fad_size+1, out, success);
1501 success = success &&
checkFads(f, h_s(), out);
1507 Kokkos_View_Fad, DynRankDimensionScalar,
FadType, Layout, Device ) {}
1509 Kokkos_View_Fad, DynRankAssignStatic0,
FadType, Layout, Device ) {}
1511 Kokkos_View_Fad, DynRankAssignStatic1,
FadType, Layout, Device ) {}
1513 Kokkos_View_Fad, DynRankAssignStatic2,
FadType, Layout, Device ) {}
1515 Kokkos_View_Fad, DynRankMultiply,
FadType, Layout, Device ) {}
1517 Kokkos_View_Fad, SubdynrankviewCol,
FadType, Layout, Device ) {}
1519 Kokkos_View_Fad, SubdynrankviewRow,
FadType, Layout, Device ) {}
1521 Kokkos_View_Fad, SubdynrankviewScalar,
FadType, Layout, Device ) {}
1526 Kokkos_View_Fad, Subview,
FadType, Layout, Device )
1528 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
1529 typedef typename ViewType::size_type size_type;
1530 typedef typename ViewType::HostMirror host_view_type;
1538 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
1539 v = ViewType (
"view", num_rows, num_cols);
1541 v = ViewType (
"view", num_rows, num_cols, fad_size+1);
1543 host_view_type h_v = Kokkos::create_mirror_view(v);
1544 for (size_type i=0; i<num_rows; ++i) {
1545 for (size_type j=0; j<num_cols; ++j) {
1546 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1550 Kokkos::deep_copy(v, h_v);
1554 auto s = Kokkos::subview(v, Kokkos::ALL(), col);
1557 typedef decltype(s) SubviewType;
1558 typedef typename SubviewType::HostMirror HostSubviewType;
1564 HostSubviewType h_s = Kokkos::subview(h_v, Kokkos::ALL(), col);
1568 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
1572 for (size_type i=0; i<num_rows; ++i) {
1573 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, col);
1574 success = success &&
checkFads(f, h_s(i), out);
1580 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
1582 Kokkos_View_Fad, ShmemSize,
FadType, Layout, Device )
1584 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
1585 typedef typename FadType::value_type value_type;
1586 typedef typename ViewType::size_type size_type;
1593 const size_type shmem_size =
1594 ViewType::shmem_size(num_rows, num_cols, fad_size+1);
1597 const size_type align = 8;
1598 const size_type mask = align - 1;
1600 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
1601 v = ViewType (
"view", num_rows, num_cols);
1603 v = ViewType (
"view", num_rows, num_cols, fad_size+1);
1605 const size_type shmem_size_expected =
1611 Kokkos_View_Fad, Unmanaged,
FadType, Layout, Device )
1616 typedef typename FadType::value_type scalar_type;
1617 typedef Kokkos::View<scalar_type***,TestLayout,Device> ViewType;
1618 typedef Kokkos::View<FadType**,TestLayout,Device,Kokkos::MemoryUnmanaged> FadViewType;
1619 typedef typename ViewType::size_type size_type;
1620 typedef typename ViewType::HostMirror host_view_type;
1621 typedef typename FadViewType::HostMirror fad_host_view_type;
1630 if (Kokkos::is_view_fad_contiguous<FadViewType>::value &&
1631 std::is_same<TestLayout, Kokkos::LayoutLeft >::value) {
1632 v = ViewType (
"view", fad_size+1, num_rows, num_cols);
1633 h_v = Kokkos::create_mirror_view(v);
1634 for (size_type i=0; i<num_rows; ++i) {
1635 for (size_type j=0; j<num_cols; ++j) {
1636 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1637 for (size_type k=0; k<fad_size; k++)
1638 h_v(k,i,j) = f.dx(k);
1639 h_v(fad_size,i,j) = f.val();
1644 v = ViewType (
"view", num_rows, num_cols, fad_size+1);
1645 h_v = Kokkos::create_mirror_view(v);
1646 for (size_type i=0; i<num_rows; ++i) {
1647 for (size_type j=0; j<num_cols; ++j) {
1648 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1649 for (size_type k=0; k<fad_size; k++)
1650 h_v(i,j,k) = f.dx(k);
1651 h_v(i,j,fad_size) = f.val();
1655 Kokkos::deep_copy(v, h_v);
1659 fad_host_view_type h_v_fad;
1660 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
1661 v_fad = FadViewType ( v.data(), num_rows, num_cols);
1662 h_v_fad = fad_host_view_type (
"host_view_fad", num_rows, num_cols);
1664 v_fad = FadViewType ( v.data(), num_rows, num_cols, fad_size+1);
1665 h_v_fad = fad_host_view_type (
"host_view_fad", num_rows, num_cols, fad_size+1);
1669 Kokkos::deep_copy(h_v_fad, v_fad);
1673 for (size_type i=0; i<num_rows; ++i) {
1674 for (size_type j=0; j<num_cols; ++j) {
1675 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1676 success = success &&
checkFads(f, h_v_fad(i,j), out);
1682 Kokkos_View_Fad, Unmanaged2,
FadType, Layout, Device )
1687 typedef typename FadType::value_type scalar_type;
1688 typedef Kokkos::View<scalar_type***,TestLayout,Device> ViewType;
1689 typedef Kokkos::View<FadType**,TestLayout,Device> FadViewType;
1690 typedef typename ViewType::size_type size_type;
1691 typedef typename ViewType::HostMirror host_view_type;
1692 typedef typename FadViewType::HostMirror fad_host_view_type;
1701 if (Kokkos::is_view_fad_contiguous<FadViewType>::value &&
1702 std::is_same<TestLayout, Kokkos::LayoutLeft >::value) {
1703 v = ViewType (
"view", fad_size+1, num_rows, num_cols);
1704 h_v = Kokkos::create_mirror_view(v);
1705 for (size_type i=0; i<num_rows; ++i) {
1706 for (size_type j=0; j<num_cols; ++j) {
1707 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1708 for (size_type k=0; k<fad_size; k++)
1709 h_v(k,i,j) = f.dx(k);
1710 h_v(fad_size,i,j) = f.val();
1715 v = ViewType (
"view", num_rows, num_cols, fad_size+1);
1716 h_v = Kokkos::create_mirror_view(v);
1717 for (size_type i=0; i<num_rows; ++i) {
1718 for (size_type j=0; j<num_cols; ++j) {
1719 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1720 for (size_type k=0; k<fad_size; k++)
1721 h_v(i,j,k) = f.dx(k);
1722 h_v(i,j,fad_size) = f.val();
1726 Kokkos::deep_copy(v, h_v);
1730 fad_host_view_type h_v_fad;
1731 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
1732 v_fad = FadViewType ( v.data(), num_rows, num_cols);
1733 h_v_fad = fad_host_view_type (
"host_view_fad", num_rows, num_cols);
1735 v_fad = FadViewType ( v.data(), num_rows, num_cols, fad_size+1);
1736 h_v_fad = fad_host_view_type (
"host_view_fad", num_rows, num_cols, fad_size+1);
1740 Kokkos::deep_copy(h_v_fad, v_fad);
1744 for (size_type i=0; i<num_rows; ++i) {
1745 for (size_type j=0; j<num_cols; ++j) {
1746 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1747 success = success &&
checkFads(f, h_v_fad(i,j), out);
1753 Kokkos_View_Fad, UnmanagedConst,
FadType, Layout, Device )
1758 typedef typename FadType::value_type scalar_type;
1759 typedef Kokkos::View<scalar_type***,TestLayout,Device> ViewType;
1760 typedef Kokkos::View<const scalar_type***,TestLayout,Device> ConstViewType;
1761 typedef Kokkos::View<FadType**,TestLayout,Device,Kokkos::MemoryUnmanaged> FadViewType;
1762 typedef Kokkos::View<const FadType**,TestLayout,Device,Kokkos::MemoryUnmanaged> ConstFadViewType;
1763 typedef typename ViewType::size_type size_type;
1764 typedef typename ViewType::HostMirror host_view_type;
1765 typedef typename FadViewType::HostMirror fad_host_view_type;
1774 if (Kokkos::is_view_fad_contiguous<FadViewType>::value &&
1775 std::is_same<TestLayout, Kokkos::LayoutLeft >::value) {
1776 v = ViewType (
"view", fad_size+1, num_rows, num_cols);
1777 h_v = Kokkos::create_mirror_view(v);
1778 for (size_type i=0; i<num_rows; ++i) {
1779 for (size_type j=0; j<num_cols; ++j) {
1780 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1781 for (size_type k=0; k<fad_size; k++)
1782 h_v(k,i,j) = f.dx(k);
1783 h_v(fad_size,i,j) = f.val();
1788 v = ViewType (
"view", num_rows, num_cols, fad_size+1);
1789 h_v = Kokkos::create_mirror_view(v);
1790 for (size_type i=0; i<num_rows; ++i) {
1791 for (size_type j=0; j<num_cols; ++j) {
1792 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1793 for (size_type k=0; k<fad_size; k++)
1794 h_v(i,j,k) = f.dx(k);
1795 h_v(i,j,fad_size) = f.val();
1799 Kokkos::deep_copy(v, h_v);
1800 ConstViewType v_const = v;
1804 ConstFadViewType v_fad;
1805 fad_host_view_type h_v_fad;
1806 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
1807 v_fad = ConstFadViewType ( v_const.data(), num_rows, num_cols);
1808 h_v_fad = fad_host_view_type (
"host_view_fad", num_rows, num_cols);
1810 v_fad = ConstFadViewType ( v_const.data(), num_rows, num_cols, fad_size+1);
1811 h_v_fad = fad_host_view_type (
"host_view_fad", num_rows, num_cols, fad_size+1);
1815 Kokkos::deep_copy(h_v_fad, v_fad);
1819 for (size_type i=0; i<num_rows; ++i) {
1820 for (size_type j=0; j<num_cols; ++j) {
1821 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1822 success = success &&
checkFads(f, h_v_fad(i,j), out);
1828 Kokkos_View_Fad, UnmanagedConst2,
FadType, Layout, Device )
1832 typedef typename FadType::value_type scalar_type;
1833 typedef Kokkos::View<scalar_type***,TestLayout,Device> ViewType;
1834 typedef Kokkos::View<const scalar_type***,TestLayout,Device> ConstViewType;
1835 typedef Kokkos::View<FadType**,TestLayout,Device> FadViewType;
1836 typedef Kokkos::View<const FadType**,TestLayout,Device> ConstFadViewType;
1837 typedef typename ViewType::size_type size_type;
1838 typedef typename ViewType::HostMirror host_view_type;
1839 typedef typename FadViewType::HostMirror fad_host_view_type;
1848 if (Kokkos::is_view_fad_contiguous<FadViewType>::value &&
1849 std::is_same<TestLayout, Kokkos::LayoutLeft >::value) {
1850 v = ViewType (
"view", fad_size+1, num_rows, num_cols);
1851 h_v = Kokkos::create_mirror_view(v);
1852 for (size_type i=0; i<num_rows; ++i) {
1853 for (size_type j=0; j<num_cols; ++j) {
1854 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1855 for (size_type k=0; k<fad_size; k++)
1856 h_v(k,i,j) = f.dx(k);
1857 h_v(fad_size,i,j) = f.val();
1862 v = ViewType (
"view", num_rows, num_cols, fad_size+1);
1863 h_v = Kokkos::create_mirror_view(v);
1864 for (size_type i=0; i<num_rows; ++i) {
1865 for (size_type j=0; j<num_cols; ++j) {
1866 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1867 for (size_type k=0; k<fad_size; k++)
1868 h_v(i,j,k) = f.dx(k);
1869 h_v(i,j,fad_size) = f.val();
1873 Kokkos::deep_copy(v, h_v);
1874 ConstViewType v_const = v;
1877 ConstFadViewType v_fad;
1878 fad_host_view_type h_v_fad;
1879 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
1880 v_fad = ConstFadViewType (v_const.data(), num_rows, num_cols);
1881 h_v_fad = fad_host_view_type (
"host_view_fad", num_rows, num_cols);
1883 v_fad = ConstFadViewType (v_const.data(), num_rows, num_cols, fad_size+1);
1884 h_v_fad = fad_host_view_type (
"host_view_fad", num_rows, num_cols, fad_size+1);
1888 Kokkos::deep_copy(h_v_fad, v_fad);
1892 for (size_type i=0; i<num_rows; ++i) {
1893 for (size_type j=0; j<num_cols; ++j) {
1894 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1895 success = success &&
checkFads(f, h_v_fad(i,j), out);
1903 Kokkos_View_Fad, SFadNoSizeArg,
FadType, Layout, Device )
1905 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
1906 typedef typename ViewType::size_type size_type;
1907 typedef typename ViewType::HostMirror host_view_type;
1914 ViewType v(
"view", num_rows, num_cols);
1915 host_view_type h_v = Kokkos::create_mirror_view(v);
1916 for (size_type i=0; i<num_rows; ++i) {
1917 for (size_type j=0; j<num_cols; ++j) {
1918 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1922 Kokkos::deep_copy(v, h_v);
1925 Kokkos::deep_copy(h_v, v);
1931 for (size_type i=0; i<num_rows; ++i) {
1932 for (size_type j=0; j<num_cols; ++j) {
1933 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1934 success = success &&
checkFads(f, h_v(i,j), out);
1940 Kokkos_View_Fad, Partition,
FadType, Layout, Device )
1942 #if !defined(SACADO_VIEW_CUDA_HIERARCHICAL) && !defined(SACADO_VIEW_CUDA_HIERARCHICAL_DFAD)
1943 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
1944 typedef typename ViewType::size_type size_type;
1945 typedef typename ViewType::HostMirror host_view_type;
1953 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
1954 v = ViewType (
"view", num_rows, num_cols);
1956 v = ViewType (
"view", num_rows, num_cols, fad_size+1);
1958 host_view_type h_v = Kokkos::create_mirror_view(v);
1960 for (size_type i=0; i<num_rows; ++i) {
1961 for (size_type j=0; j<num_cols; ++j) {
1962 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1966 Kokkos::deep_copy(v, h_v);
1969 Kokkos::deep_copy(h_v, v);
1973 const size_type stride = 2;
1974 auto h_v1 = Kokkos::partition<2>(h_v, 0, stride);
1975 auto h_v2 = Kokkos::partition<2>(h_v, 1, stride);
1978 const size_type fad_size_1 = (fad_size + stride - 0 - 1) / stride;
1979 const size_type fad_size_2 = (fad_size + stride - 1 - 1) / stride;
1983 for (size_type i=0; i<num_rows; ++i) {
1984 for (size_type j=0; j<num_cols; ++j) {
1985 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
1988 for (
unsigned int k=0; k<fad_size_1; ++k)
1989 if (2*k < fad_size) f1.fastAccessDx(k) = f.dx(2*k);
1990 for (
unsigned int k=0; k<fad_size_2; ++k)
1991 if (2*k+1 < fad_size) f2.fastAccessDx(k) = f.dx(2*k+1);
1992 success = success &&
checkFads(f1, h_v1(i,j), out);
1993 success = success &&
checkFads(f2, h_v2(i,j), out);
2000 Kokkos_View_Fad, AssignLayoutContiguousToLayoutStride,
FadType, Layout, Device )
2002 typedef Kokkos::View<FadType**,Kokkos::LayoutContiguous<Layout>,Device> ContViewType;
2003 typedef Kokkos::View<FadType**,Kokkos::LayoutStride,Device> StrideViewType;
2004 typedef typename ContViewType::size_type size_type;
2005 typedef typename ContViewType::HostMirror cont_host_view_type;
2006 typedef typename StrideViewType::HostMirror stride_host_view_type;
2014 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
2015 v = ContViewType (
"view", num_rows, num_cols);
2017 v = ContViewType (
"view", num_rows, num_cols, fad_size+1);
2019 cont_host_view_type h_v = Kokkos::create_mirror_view(v);
2021 for (size_type i=0; i<num_rows; ++i) {
2022 for (size_type j=0; j<num_cols; ++j) {
2023 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
2027 Kokkos::deep_copy(v, h_v);
2030 StrideViewType vs = v;
2037 stride_host_view_type h_vs = h_v;
2044 for (size_type i=0; i<num_rows; ++i) {
2045 for (size_type j=0; j<num_cols; ++j) {
2046 FadType f = generate_fad<FadType>(num_rows, num_cols, fad_size, i, j);
2047 success = success &&
checkFads(f, h_vs(i,j), out);
2053 Kokkos_View_Fad, CommonViewAllocMixedSpec,
FadType, Layout, Device )
2055 typedef Kokkos::View<FadType**,Kokkos::LayoutContiguous<Layout>,Device> ContViewType;
2056 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
2057 typedef typename ContViewType::size_type size_type;
2065 #if defined (SACADO_DISABLE_FAD_VIEW_SPEC)
2066 v1 = ContViewType (
"view", num_rows, num_cols);
2068 v1 = ContViewType (
"view", num_rows, num_cols, fad_size+1);
2072 auto cprop = Kokkos::common_view_alloc_prop(v1);
2073 ViewType v2(Kokkos::view_alloc(
"v2",cprop), num_rows, num_cols);
2085 Kokkos_View_Fad, ShmemSize,
FadType, Layout, Device )
2087 typedef Kokkos::View<FadType**,Layout,Device> ViewType;
2088 typedef typename ViewType::size_type size_type;
2094 const size_type shmem_size =
2095 ViewType::shmem_size(num_rows, num_cols);
2098 static const size_type align = 8;
2099 static const size_type mask = align - 1;
2100 const size_type shmem_size_expected =
2106 Kokkos_View_Fad, Unmanaged,
FadType, Layout, Device ) {}
2109 Kokkos_View_Fad, Unmanaged2,
FadType, Layout, Device ) {}
2112 Kokkos_View_Fad, UnmanagedConst,
FadType, Layout, Device ) {}
2115 Kokkos_View_Fad, UnmanagedConst2,
FadType, Layout, Device ) {}
2118 Kokkos_View_Fad, SFadNoSizeArg,
FadType, Layout, Device ) {}
2121 Kokkos_View_Fad, Partition,
FadType, Layout, Device ) {}
2124 Kokkos_View_Fad, AssignLayoutContiguousToLayoutStride,
FadType, Layout, Device ) {}
2127 Kokkos_View_Fad, CommonViewAllocMixedSpec,
FadType, Layout, Device ) {}
2131 #define VIEW_FAD_TESTS_FLD( F, L, D ) \
2132 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Size, F, L, D ) \
2133 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DeepCopy, F, L, D ) \
2134 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DeepCopy_ConstantScalar, F, L, D ) \
2135 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DeepCopy_ConstantZero, F, L, D ) \
2136 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DeepCopy_ConstantFad, F, L, D ) \
2137 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DeepCopy_ConstantFadFull, F, L, D ) \
2138 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, ScalarAssign, F, L, D ) \
2139 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, ValueAssign, F, L, D ) \
2140 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Resize, F, L, D ) \
2141 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Unmanaged, F, L, D ) \
2142 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Unmanaged2, F, L, D ) \
2143 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, UnmanagedConst, F, L, D ) \
2144 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, UnmanagedConst2, F, L, D ) \
2145 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Multiply, F, L, D ) \
2146 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, MultiplyUpdate, F, L, D ) \
2147 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, MultiplyConst, F, L, D ) \
2148 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, MultiplyMixed, F, L, D ) \
2149 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, AtomicAdd, F, L, D ) \
2150 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Rank8, F, L, D ) \
2151 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Roger, F, L, D ) \
2152 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, AssignDifferentStrides, F, L, D ) \
2153 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DynRankDimensionScalar, F, L, D ) \
2154 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DynRankAssignStatic0, F, L, D ) \
2155 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DynRankAssignStatic1, F, L, D ) \
2156 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DynRankAssignStatic2, F, L, D ) \
2157 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, DynRankMultiply, F, L, D ) \
2158 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, SubdynrankviewCol, F, L, D ) \
2159 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, SubdynrankviewRow, F, L, D ) \
2160 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, SubdynrankviewScalar, F, L, D ) \
2161 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Subview, F, L, D ) \
2162 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, ShmemSize, F, L, D )
2164 #define VIEW_FAD_TESTS_SFLD( F, L, D ) \
2165 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, SFadNoSizeArg, F, L, D )
2167 #define VIEW_FAD_TESTS_FDI( F, D ) \
2168 using Kokkos::LayoutLeft; \
2169 using Kokkos::LayoutRight; \
2170 VIEW_FAD_TESTS_FLD( F, LayoutLeft, D ) \
2171 VIEW_FAD_TESTS_FLD( F, LayoutRight, D ) \
2172 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, AssignLayoutContiguousToLayoutStride, F, LayoutLeft, D ) \
2173 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, AssignLayoutContiguousToLayoutStride, F, LayoutRight, D ) \
2174 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, CommonViewAllocMixedSpec, F, LayoutLeft, D ) \
2175 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, CommonViewAllocMixedSpec, F, LayoutRight, D )
2177 #define VIEW_FAD_TESTS_SFDI( F, D ) \
2178 using Kokkos::LayoutLeft; \
2179 using Kokkos::LayoutRight; \
2180 VIEW_FAD_TESTS_SFLD( F, LayoutLeft, D ) \
2181 VIEW_FAD_TESTS_SFLD( F, LayoutRight, D )
2183 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
2186 #define VIEW_FAD_TESTS_FDC( F, D ) \
2187 VIEW_FAD_TESTS_FLD( F, LeftContiguous, D ) \
2188 VIEW_FAD_TESTS_FLD( F, RightContiguous, D ) \
2189 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Partition, F, LeftContiguous, D ) \
2190 TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT( Kokkos_View_Fad, Partition, F, RightContiguous, D )
2192 #define VIEW_FAD_TESTS_SFDC( F, D ) \
2193 VIEW_FAD_TESTS_SFLD( F, LeftContiguous, D ) \
2194 VIEW_FAD_TESTS_SFLD( F, RightContiguous, D )
2196 #define VIEW_FAD_TESTS_FDC( F, D )
2197 #define VIEW_FAD_TESTS_SFDC( F, D )
2200 #define VIEW_FAD_TESTS_FD( F, D ) \
2201 VIEW_FAD_TESTS_FDI( F, D ) \
2202 VIEW_FAD_TESTS_FDC( F, D )
2204 #define VIEW_FAD_TESTS_SFD( F, D ) \
2205 VIEW_FAD_TESTS_SFDI( F, D ) \
2206 VIEW_FAD_TESTS_SFDC( F, D )
2229 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC) && SACADO_TEST_DFAD
2230 #define VIEW_FAD_TESTS_D( D ) \
2231 VIEW_FAD_TESTS_FD( SFadType, D ) \
2232 VIEW_FAD_TESTS_FD( SLFadType, D ) \
2233 VIEW_FAD_TESTS_FD( DFadType, D ) \
2234 VIEW_FAD_TESTS_SFD( SFadType, D )
2254 #define VIEW_FAD_TESTS_D( D ) \
2255 VIEW_FAD_TESTS_FD( SFadType, D ) \
2256 VIEW_FAD_TESTS_FD( SLFadType, D ) \
2257 VIEW_FAD_TESTS_SFD( SFadType, D )
InputViewType::size_type size_type
team_policy_type::member_type team_handle
Sacado::Fad::SFad< InnerFadType, global_outer_fad_size > SFadType
static const size_type stride
ViewType::value_type::value_type ScalarType
ViewType::execution_space execution_space
Kokkos::TeamPolicy< execution_space > team_policy_type
Kokkos::TeamPolicy< execution_space > team_policy_type
static const size_type stride
KOKKOS_INLINE_FUNCTION void operator()(const team_handle &team) const
ViewType::size_type size_type
static const size_type stride
ViewType::size_type size_type
#define TEUCHOS_TEST_FLOATING_EQUALITY(v1, v2, tol, out, success)
KOKKOS_INLINE_FUNCTION void operator()(const team_handle &team) const
KOKKOS_INLINE_FUNCTION void operator()(const size_type i) const
static void apply(const ViewType &v, const ValueType &s)
#define VIEW_FAD_TESTS_SFD(F, D)
KOKKOS_INLINE_FUNCTION void operator()(const size_type i) const
KOKKOS_INLINE_FUNCTION void operator()(const size_type i) const
Sacado::Fad::DFad< double > FadType
Sacado::Fad::DFad< double > DFadType
KOKKOS_INLINE_FUNCTION void operator()(const size_type i) const
#define VIEW_FAD_TESTS_FD(F, D)
Kokkos::ThreadLocalScalarType< ViewType >::type local_scalar_type
Kokkos::RangePolicy< execution_space > range_policy_type
const InputViewType1 m_v1
static const size_type stride
InputViewType::execution_space execution_space
static void apply(const InputViewType v1, const OutputViewType v2, const size_type col)
bool checkFads(const FadType1 &x, const FadType2 &x2, Teuchos::FancyOStream &out, double tol=1.0e-15)
const int global_num_rows
Kokkos::RangePolicy< execution_space > range_policy_type
ViewType::execution_space execution_space
const OutputViewType m_v2
#define KOKKOS_INLINE_FUNCTION
const int global_fad_size
TEUCHOS_UNIT_TEST_TEMPLATE_3_DECL(Kokkos_View_FadFad, DeepCopy, FadFadType, Layout, Device)
AssignRank2Rank1Kernel(const InputViewType v1, const OutputViewType v2, const size_type col)
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
team_policy_type::member_type team_handle
const int global_num_cols
KOKKOS_INLINE_FUNCTION void operator()(const team_handle &team) const
ViewType::size_type size_type
GeneralFad< DynamicStorage< T > > DFad
team_policy_type::member_type team_handle
Sacado::Fad::SLFad< InnerFadType, 2 *global_outer_fad_size > SLFadType
static void apply(const InputViewType1 v1, const InputViewType2 v2, const OutputViewType v3, const bool update=false)
InputViewType1::execution_space execution_space
Kokkos::TeamPolicy< execution_space > team_policy_type
static void apply(const ViewType &v, const ScalarViewType &s)
KOKKOS_INLINE_FUNCTION void operator()(const team_handle &team) const
ViewType::value_type ValueType
Kokkos::TeamPolicy< execution_space > team_policy_type
ScalarAssignKernel(const ViewType &v, const ScalarType &s)
ValueAssignKernel(const ViewType &v, const ValueType &s)
AtomicAddKernel(const ViewType &v, const ScalarViewType &s)
#define TEUCHOS_TEST_EQUALITY(v1, v2, out, success)
KOKKOS_INLINE_FUNCTION void operator()(const team_handle &team) const
team_policy_type::member_type team_handle
ViewType::execution_space execution_space
static void apply(const ViewType &v, const ScalarType &s)
Kokkos::ThreadLocalScalarType< ViewType >::type local_scalar_type
MultiplyKernel(const InputViewType1 v1, const InputViewType2 v2, const OutputViewType v3, const bool update)
team_policy_type::member_type team_handle
InputViewType1::size_type size_type
Kokkos::RangePolicy< execution_space > range_policy_type
Kokkos::RangePolicy< execution_space > range_policy_type
KOKKOS_INLINE_FUNCTION void operator()(const size_type i) const
GeneralFad< StaticFixedStorage< T, Num > > SFad
const InputViewType2 m_v2
Kokkos::RangePolicy< execution_space > range_policy_type
Kokkos::TeamPolicy< execution_space > team_policy_type
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)