10 #ifndef KOKKOS_DYN_RANK_VIEW_SACADO_FAD_HPP
11 #define KOKKOS_DYN_RANK_VIEW_SACADO_FAD_HPP
18 #if defined(HAVE_SACADO_KOKKOS)
22 #ifndef KOKKOS_IMPL_PUBLIC_INCLUDE
23 #define KOKKOS_IMPL_PUBLIC_INCLUDE
24 #define KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_CORE
28 #include "Kokkos_Core_fwd.hpp"
29 #include "Kokkos_Layout.hpp"
31 #ifdef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_CORE
32 #undef KOKKOS_IMPL_PUBLIC_INCLUDE
33 #undef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_CORE
36 #ifndef SACADO_HAS_NEW_KOKKOS_VIEW_IMPL
39 template<
class DataType ,
class ... Properties >
42 template<
class DataType ,
class ... Properties >
47 template<
class Space,
class T,
class ... P>
48 struct MirrorDRViewType;
52 template <
typename view_type>
53 struct is_dynrankview_fad {
static const bool value =
false; };
55 template <
typename view_type>
56 struct is_dynrankview_fad_contiguous {
static const bool value =
false; };
60 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
69 template<
class T ,
class ... P >
71 typename Kokkos::DynRankView<
T,P...>::host_mirror_type
73 const Kokkos::DynRankView<T,P...> & src,
74 typename std::enable_if<
75 ( std::is_same<
typename ViewTraits<T,P...>::specialize ,
76 Kokkos::Impl::ViewSpecializeSacadoFad >::
value ||
77 std::is_same<
typename ViewTraits<T,P...>::specialize ,
78 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::
value ) &&
79 !std::is_same<
typename Kokkos::ViewTraits<T,P...>::array_layout,
80 Kokkos::LayoutStride >::
value >::type * = 0);
83 template<
class T ,
class ... P >
85 typename Kokkos::DynRankView<
T,P...>::host_mirror_type
87 const Kokkos::DynRankView<T,P...> & src,
88 typename std::enable_if<
89 ( std::is_same<
typename ViewTraits<T,P...>::specialize ,
90 Kokkos::Impl::ViewSpecializeSacadoFad >::
value ||
91 std::is_same<
typename ViewTraits<T,P...>::specialize ,
92 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::
value ) &&
93 std::is_same<
typename Kokkos::ViewTraits<T,P...>::array_layout,
94 Kokkos::LayoutStride >::
value >::type * = 0);
96 template<
class Space,
class T,
class ... P>
97 typename Impl::MirrorDRViewType<Space,
T,P ...>::dest_view_type
100 const Kokkos::DynRankView<T,P...> & src,
101 typename std::enable_if<
102 std::is_same<
typename ViewTraits<T,P...>::specialize ,
103 Kokkos::Impl::ViewSpecializeSacadoFad >::
value ||
104 std::is_same<
typename ViewTraits<T,P...>::specialize ,
105 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::
value >::type * = 0);
109 template <
unsigned N,
typename T,
typename... Args>
110 KOKKOS_FUNCTION
auto as_view_of_rank_n(
111 DynRankView<T, Args...> v,
112 typename std::enable_if<
113 ( std::is_same<
typename ViewTraits<T,Args...>::specialize,
114 Kokkos::Impl::ViewSpecializeSacadoFad >::
value ||
115 std::is_same<
typename ViewTraits<T,Args...>::specialize ,
116 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::
value )
123 #include "Kokkos_DynRankView.hpp"
129 struct DynRankDimTraits<Kokkos::Impl::ViewSpecializeSacadoFad> {
131 enum :
size_t{unspecified = ~size_t(0)};
135 KOKKOS_INLINE_FUNCTION
136 static size_t computeRank(
const size_t N0
146 ( (N7 == unspecified && N6 == unspecified && N5 == unspecified && N4 == unspecified && N3 == unspecified && N2 == unspecified && N1 == unspecified && N0 == unspecified) ? 0
147 : ( (N7 == unspecified && N6 == unspecified && N5 == unspecified && N4 == unspecified && N3 == unspecified && N2 == unspecified && N1 == unspecified) ? 0
148 : ( (N7 == unspecified && N6 == unspecified && N5 == unspecified && N4 == unspecified && N3 == unspecified && N2 == unspecified) ? 1
149 : ( (N7 == unspecified && N6 == unspecified && N5 == unspecified && N4 == unspecified && N3 == unspecified) ? 2
150 : ( (N7 == unspecified && N6 == unspecified && N5 == unspecified && N4 == unspecified) ? 3
151 : ( (N7 == unspecified && N6 == unspecified && N5 == unspecified) ? 4
152 : ( (N7 == unspecified && N6 == unspecified) ? 5
153 : ( (N7 == unspecified) ? 6
158 template <
typename Layout>
159 KOKKOS_INLINE_FUNCTION
160 static size_t computeRank(
const Layout& layout )
162 return computeRank( layout.dimension[0]
163 , layout.dimension[1]
164 , layout.dimension[2]
165 , layout.dimension[3]
166 , layout.dimension[4]
167 , layout.dimension[5]
168 , layout.dimension[6]
169 , layout.dimension[7] );
173 template <
typename Layout,
typename ... P>
174 KOKKOS_INLINE_FUNCTION
175 static size_t computeRank(
const ViewCtorProp<P...>& ,
const Layout& layout )
177 size_t rank = computeRank( layout.dimension[0]
178 , layout.dimension[1]
179 , layout.dimension[2]
180 , layout.dimension[3]
181 , layout.dimension[4]
182 , layout.dimension[5]
183 , layout.dimension[6]
184 , layout.dimension[7] );
187 enum { test_traits_check = Kokkos::Impl::check_has_common_view_alloc_prop< P... >
::value };
188 return (test_traits_check ==
true) ? rank+1 : rank;
194 template <
typename Layout>
195 KOKKOS_INLINE_FUNCTION
198 Layout l( layout.dimension[0] != unspecified ? layout.dimension[0] : 1
199 , layout.dimension[1] != unspecified ? layout.dimension[1] : 1
200 , layout.dimension[2] != unspecified ? layout.dimension[2] : 1
201 , layout.dimension[3] != unspecified ? layout.dimension[3] : 1
202 , layout.dimension[4] != unspecified ? layout.dimension[4] : 1
203 , layout.dimension[5] != unspecified ? layout.dimension[5] : 1
204 , layout.dimension[6] != unspecified ? layout.dimension[6] : 1
205 , layout.dimension[7] != unspecified ? layout.dimension[7] : 1 );
206 const unsigned fad_dim = computeRank(layout);
207 const size_t fad_size = layout.dimension[
fad_dim];
209 l.dimension[7] = fad_size;
215 template <
typename Layout>
216 KOKKOS_INLINE_FUNCTION
219 Layout l( layout.dimension[0] != unspecified ? layout.dimension[0] : 1
221 , layout.dimension[1] != unspecified ? layout.dimension[1] : 1
223 , layout.dimension[2] != unspecified ? layout.dimension[2] : 1
225 , layout.dimension[3] != unspecified ? layout.dimension[3] : 1
227 , layout.dimension[4] != unspecified ? layout.dimension[4] : 1
229 , layout.dimension[5] != unspecified ? layout.dimension[5] : 1
231 , layout.dimension[6] != unspecified ? layout.dimension[6] : 1
233 , layout.dimension[7] != unspecified ? layout.dimension[7] : 1
236 const unsigned fad_dim = computeRank(layout);
237 const size_t fad_size = layout.dimension[
fad_dim];
239 l.dimension[7] = fad_size;
240 const size_t fad_stride = layout.stride[
fad_dim];
242 l.stride[7] = fad_stride;
249 template <
typename Traits,
typename ... P>
250 KOKKOS_INLINE_FUNCTION
253 using Layout =
typename Traits::array_layout;
255 Layout l( layout.dimension[0] != unspecified ? layout.dimension[0] : 1
256 , layout.dimension[1] != unspecified ? layout.dimension[1] : 1
257 , layout.dimension[2] != unspecified ? layout.dimension[2] : 1
258 , layout.dimension[3] != unspecified ? layout.dimension[3] : 1
259 , layout.dimension[4] != unspecified ? layout.dimension[4] : 1
260 , layout.dimension[5] != unspecified ? layout.dimension[5] : 1
261 , layout.dimension[6] != unspecified ? layout.dimension[6] : 1
262 , layout.dimension[7] != unspecified ? layout.dimension[7] : 1 );
264 enum { test_traits_check = Kokkos::Impl::check_has_common_view_alloc_prop< P... >
::value };
265 if (test_traits_check ==
true) {
266 l.dimension[7] = compute_fad_dim_from_alloc_prop<P...>::eval(arg_prop);
269 const unsigned fad_dim = computeRank(layout);
270 const size_t fad_size = layout.dimension[
fad_dim];
272 l.dimension[7] = fad_size;
280 template <
typename Traits,
typename ... P>
281 KOKKOS_INLINE_FUNCTION
284 using Layout =
typename Traits::array_layout;
286 Layout l( layout.dimension[0] != unspecified ? layout.dimension[0] : 1
288 , layout.dimension[1] != unspecified ? layout.dimension[1] : 1
290 , layout.dimension[2] != unspecified ? layout.dimension[2] : 1
292 , layout.dimension[3] != unspecified ? layout.dimension[3] : 1
294 , layout.dimension[4] != unspecified ? layout.dimension[4] : 1
296 , layout.dimension[5] != unspecified ? layout.dimension[5] : 1
298 , layout.dimension[6] != unspecified ? layout.dimension[6] : 1
300 , layout.dimension[7] != unspecified ? layout.dimension[7] : 1
304 enum { test_traits_check = Kokkos::Impl::check_has_common_view_alloc_prop< P... >
::value };
305 const unsigned fad_dim = computeRank(layout);
306 if (test_traits_check ==
true) {
308 l.dimension[7] = compute_fad_dim_from_alloc_prop<P...>::eval(arg_prop);
311 const size_t fad_size = layout.dimension[
fad_dim];
313 l.dimension[7] = fad_size;
315 const size_t fad_stride = layout.stride[
fad_dim];
317 l.stride[7] = fad_stride;
324 template <
typename ViewType,
typename ViewArg>
325 static ViewType createView(
const ViewArg& arg
335 typename ViewType::array_layout l( N0, N1, N2, N3, N4, N5, N6, N7 );
336 typename ViewType::array_layout l_fad = createLayout(l);
345 , l_fad.dimension[7] );
355 template <
unsigned>
struct AssignDim7 {
356 template <
typename Dst>
357 KOKKOS_INLINE_FUNCTION
358 static void eval(Dst& dst,
const size_t src_dim) {}
360 template <>
struct AssignDim7<0u> {
361 template <
typename Dst>
362 KOKKOS_INLINE_FUNCTION
363 static void eval(Dst& dst,
const size_t src_dim) {
369 template <
unsigned,
unsigned>
struct AssignFadDimStride {};
370 template <
unsigned StaticDim>
struct AssignFadDimStride<0u,StaticDim> {
371 template <
typename Src,
typename Dst>
372 KOKKOS_INLINE_FUNCTION
373 static void eval(Dst& dst,
const Src& src) {
374 dst.m_stride.S0 = 0 ;
375 dst.m_stride.S1 = 0 ;
376 dst.m_stride.S2 = 0 ;
377 dst.m_stride.S3 = 0 ;
378 dst.m_stride.S4 = 0 ;
379 dst.m_stride.S5 = 0 ;
380 dst.m_stride.S6 = 0 ;
381 dst.m_stride.S7 = src.m_stride.S0 ;
390 AssignDim7<StaticDim>::eval( dst.m_dim, src.m_dim.N0 );
393 template <
unsigned StaticDim>
struct AssignFadDimStride<1u,StaticDim> {
394 template <
typename Src,
typename Dst>
395 KOKKOS_INLINE_FUNCTION
396 static void eval(Dst& dst,
const Src& src) {
397 dst.m_stride.S0 = src.m_stride.S0 ;
398 dst.m_stride.S1 = 0 ;
399 dst.m_stride.S2 = 0 ;
400 dst.m_stride.S3 = 0 ;
401 dst.m_stride.S4 = 0 ;
402 dst.m_stride.S5 = 0 ;
403 dst.m_stride.S6 = 0 ;
404 dst.m_stride.S7 = src.m_stride.S1 ;
406 dst.m_dim.N0 = src.m_dim.N0 ;
413 AssignDim7<StaticDim>::eval( dst.m_dim, src.m_dim.N1 );
416 template <
unsigned StaticDim>
struct AssignFadDimStride<2u,StaticDim> {
417 template <
typename Src,
typename Dst>
418 KOKKOS_INLINE_FUNCTION
419 static void eval(Dst& dst,
const Src& src) {
420 dst.m_stride.S0 = src.m_stride.S0 ;
421 dst.m_stride.S1 = src.m_stride.S1 ;
422 dst.m_stride.S2 = 0 ;
423 dst.m_stride.S3 = 0 ;
424 dst.m_stride.S4 = 0 ;
425 dst.m_stride.S5 = 0 ;
426 dst.m_stride.S6 = 0 ;
427 dst.m_stride.S7 = src.m_stride.S2 ;
429 dst.m_dim.N0 = src.m_dim.N0 ;
430 dst.m_dim.N1 = src.m_dim.N1 ;
436 AssignDim7<StaticDim>::eval( dst.m_dim, src.m_dim.N2 );
439 template <
unsigned StaticDim>
struct AssignFadDimStride<3u,StaticDim> {
440 template <
typename Src,
typename Dst>
441 KOKKOS_INLINE_FUNCTION
442 static void eval(Dst& dst,
const Src& src) {
443 dst.m_stride.S0 = src.m_stride.S0 ;
444 dst.m_stride.S1 = src.m_stride.S1 ;
445 dst.m_stride.S2 = src.m_stride.S2 ;
446 dst.m_stride.S3 = 0 ;
447 dst.m_stride.S4 = 0 ;
448 dst.m_stride.S5 = 0 ;
449 dst.m_stride.S6 = 0 ;
450 dst.m_stride.S7 = src.m_stride.S3 ;
452 dst.m_dim.N0 = src.m_dim.N0 ;
453 dst.m_dim.N1 = src.m_dim.N1 ;
454 dst.m_dim.N2 = src.m_dim.N2 ;
459 AssignDim7<StaticDim>::eval( dst.m_dim, src.m_dim.N3 );
462 template <
unsigned StaticDim>
struct AssignFadDimStride<4u,StaticDim> {
463 template <
typename Src,
typename Dst>
464 KOKKOS_INLINE_FUNCTION
465 static void eval(Dst& dst,
const Src& src) {
466 dst.m_stride.S0 = src.m_stride.S0 ;
467 dst.m_stride.S1 = src.m_stride.S1 ;
468 dst.m_stride.S2 = src.m_stride.S2 ;
469 dst.m_stride.S3 = src.m_stride.S3 ;
470 dst.m_stride.S4 = 0 ;
471 dst.m_stride.S5 = 0 ;
472 dst.m_stride.S6 = 0 ;
473 dst.m_stride.S7 = src.m_stride.S4 ;
475 dst.m_dim.N0 = src.m_dim.N0 ;
476 dst.m_dim.N1 = src.m_dim.N1 ;
477 dst.m_dim.N2 = src.m_dim.N2 ;
478 dst.m_dim.N3 = src.m_dim.N3 ;
482 AssignDim7<StaticDim>::eval( dst.m_dim, src.m_dim.N4 );
485 template <
unsigned StaticDim>
struct AssignFadDimStride<5u,StaticDim> {
486 template <
typename Src,
typename Dst>
487 KOKKOS_INLINE_FUNCTION
488 static void eval(Dst& dst,
const Src& src) {
489 dst.m_stride.S0 = src.m_stride.S0 ;
490 dst.m_stride.S1 = src.m_stride.S1 ;
491 dst.m_stride.S2 = src.m_stride.S2 ;
492 dst.m_stride.S3 = src.m_stride.S3 ;
493 dst.m_stride.S4 = src.m_stride.S4 ;
494 dst.m_stride.S5 = 0 ;
495 dst.m_stride.S6 = 0 ;
496 dst.m_stride.S7 = src.m_stride.S5 ;
498 dst.m_dim.N0 = src.m_dim.N0 ;
499 dst.m_dim.N1 = src.m_dim.N1 ;
500 dst.m_dim.N2 = src.m_dim.N2 ;
501 dst.m_dim.N3 = src.m_dim.N3 ;
502 dst.m_dim.N4 = src.m_dim.N4 ;
505 AssignDim7<StaticDim>::eval( dst.m_dim, src.m_dim.N5 );
508 template <
unsigned StaticDim>
struct AssignFadDimStride<6u,StaticDim> {
509 template <
typename Src,
typename Dst>
510 KOKKOS_INLINE_FUNCTION
511 static void eval(Dst& dst,
const Src& src) {
512 dst.m_stride.S0 = src.m_stride.S0 ;
513 dst.m_stride.S1 = src.m_stride.S1 ;
514 dst.m_stride.S2 = src.m_stride.S2 ;
515 dst.m_stride.S3 = src.m_stride.S3 ;
516 dst.m_stride.S4 = src.m_stride.S4 ;
517 dst.m_stride.S5 = src.m_stride.S5 ;
518 dst.m_stride.S6 = 0 ;
519 dst.m_stride.S7 = src.m_stride.S6 ;
521 dst.m_dim.N0 = src.m_dim.N0 ;
522 dst.m_dim.N1 = src.m_dim.N1 ;
523 dst.m_dim.N2 = src.m_dim.N2 ;
524 dst.m_dim.N3 = src.m_dim.N3 ;
525 dst.m_dim.N4 = src.m_dim.N4 ;
526 dst.m_dim.N5 = src.m_dim.N5 ;
528 AssignDim7<StaticDim>::eval( dst.m_dim, src.m_dim.N6 );
531 template <
unsigned StaticDim>
struct AssignFadDimStride<7u,StaticDim> {
532 template <
typename Src,
typename Dst>
533 KOKKOS_INLINE_FUNCTION
534 static void eval(Dst& dst,
const Src& src) {
535 dst.m_stride.S0 = src.m_stride.S0 ;
536 dst.m_stride.S1 = src.m_stride.S1 ;
537 dst.m_stride.S2 = src.m_stride.S2 ;
538 dst.m_stride.S3 = src.m_stride.S3 ;
539 dst.m_stride.S4 = src.m_stride.S4 ;
540 dst.m_stride.S5 = src.m_stride.S5 ;
541 dst.m_stride.S6 = src.m_stride.S6 ;
542 dst.m_stride.S7 = src.m_stride.S7 ;
544 dst.m_dim.N0 = src.m_dim.N0 ;
545 dst.m_dim.N1 = src.m_dim.N1 ;
546 dst.m_dim.N2 = src.m_dim.N2 ;
547 dst.m_dim.N3 = src.m_dim.N3 ;
548 dst.m_dim.N4 = src.m_dim.N4 ;
549 dst.m_dim.N5 = src.m_dim.N5 ;
550 dst.m_dim.N6 = src.m_dim.N6 ;
551 AssignDim7<StaticDim>::eval( dst.m_dim, src.m_dim.N7 );
556 template<
class SrcTraits ,
class ... Args >
558 < typename std::enable_if<(
559 std::is_same< typename SrcTraits::specialize ,
560 Kokkos::Impl::ViewSpecializeSacadoFad >::value
563 std::is_same< typename SrcTraits::array_layout
564 , Kokkos::LayoutLeft >::value ||
565 std::is_same< typename SrcTraits::array_layout
566 , Kokkos::LayoutRight >::value ||
567 std::is_same< typename SrcTraits::array_layout
568 , Kokkos::LayoutStride >::value
570 ), Kokkos::Impl::DynRankSubviewTag >::type
587 enum { rank = unsigned(R0) + unsigned(R1) + unsigned(R2) + unsigned(R3)
588 + unsigned(R4) + unsigned(R5) + unsigned(R6) };
590 typedef Kokkos::LayoutStride array_layout ;
592 typedef typename SrcTraits::value_type value_type ;
594 typedef value_type******* data_type ;
598 typedef Kokkos::ViewTraits
601 ,
typename SrcTraits::device_type
602 ,
typename SrcTraits::memory_traits > traits_type ;
607 ,
typename SrcTraits::device_type
608 ,
typename SrcTraits::memory_traits > type ;
611 template<
class MemoryTraits >
616 typedef Kokkos::ViewTraits
619 ,
typename SrcTraits::device_type
620 , MemoryTraits > traits_type ;
625 ,
typename SrcTraits::device_type
626 , MemoryTraits > type ;
629 template <
class Arg0 =
int,
class Arg1 =
int,
class Arg2 =
int,
class Arg3 =
int,
class Arg4 =
int,
class Arg5 =
int,
class Arg6 =
int >
630 struct ExtentGenerator {
631 template <
typename dimension>
632 KOKKOS_INLINE_FUNCTION
633 static SubviewExtents< 7 , rank > generator (
const dimension & dim , Arg0 arg0 = Arg0(), Arg1 arg1 = Arg1(), Arg2 arg2 = Arg2(), Arg3 arg3 = Arg3(), Arg4 arg4 = Arg4(), Arg5 arg5 = Arg5(), Arg6 arg6 = Arg6() )
635 return SubviewExtents< 7 , rank >( dim , arg0 , arg1 , arg2 , arg3 ,
636 arg4 , arg5 , arg6 );
640 template <
class Arg0 =
int,
class Arg1 =
int,
class Arg2 =
int,
class Arg3 =
int,
class Arg4 =
int,
class Arg5 =
int,
class Arg6 =
int >
641 struct ArrayExtentGenerator {
642 template <
typename dimension>
643 KOKKOS_INLINE_FUNCTION
644 static SubviewExtents< 8 , rank+1 > generator (
const dimension & dim , Arg0 arg0 = Arg0(), Arg1 arg1 = Arg1(), Arg2 arg2 = Arg2(), Arg3 arg3 = Arg3(), Arg4 arg4 = Arg4(), Arg5 arg5 = Arg5(), Arg6 arg6 = Arg6() )
646 return SubviewExtents< 8 , rank+1 >( dim , arg0 , arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , Kokkos::ALL() );
650 typedef DynRankView< value_type , array_layout , typename SrcTraits::device_type , typename SrcTraits::memory_traits > ret_type;
652 template <
typename T ,
class ... P >
653 KOKKOS_INLINE_FUNCTION
654 static ret_type
subview(
const unsigned src_rank , Kokkos::DynRankView< T , P...>
const & src , Args ... args )
657 typedef ViewMapping< traits_type, typename traits_type::specialize> DstType ;
658 typedef ViewMapping< SrcTraits, typename SrcTraits::specialize> SrcType;
659 enum { FadStaticDim = SrcType::FadStaticDimension };
660 typedef typename std::conditional< (rank==0) , ViewDimension<>
661 ,
typename std::conditional< (rank==1) , ViewDimension<0>
662 ,
typename std::conditional< (rank==2) , ViewDimension<0,0>
663 ,
typename std::conditional< (rank==3) , ViewDimension<0,0,0>
664 ,
typename std::conditional< (rank==4) , ViewDimension<0,0,0,0>
665 ,
typename std::conditional< (rank==5) , ViewDimension<0,0,0,0,0>
666 ,
typename std::conditional< (rank==6) , ViewDimension<0,0,0,0,0,0>
667 , ViewDimension<0,0,0,0,0,0,0>
668 >::type >::type >::type >::type >::type >::type >::type DstDimType ;
669 typedef typename std::conditional< (rank==0) , ViewDimension<FadStaticDim>
670 ,
typename std::conditional< (rank==1) , ViewDimension<0,FadStaticDim>
671 ,
typename std::conditional< (rank==2) , ViewDimension<0,0,FadStaticDim>
672 ,
typename std::conditional< (rank==3) , ViewDimension<0,0,0,FadStaticDim>
673 ,
typename std::conditional< (rank==4) , ViewDimension<0,0,0,0,FadStaticDim>
674 ,
typename std::conditional< (rank==5) , ViewDimension<0,0,0,0,0,FadStaticDim>
675 ,
typename std::conditional< (rank==6) , ViewDimension<0,0,0,0,0,0,FadStaticDim>
676 , ViewDimension<0,0,0,0,0,0,0,FadStaticDim>
677 >::type >::type >::type >::type >::type >::type >::type DstArrayDimType ;
679 typedef ViewOffset< DstDimType , Kokkos::LayoutStride > dst_offset_type ;
680 typedef ViewOffset< DstArrayDimType , Kokkos::LayoutStride > dst_array_offset_type ;
681 typedef typename DstType::handle_type dst_handle_type ;
685 const SubviewExtents< 7 , rank > extents =
686 ExtentGenerator< Args ... >::generator(
687 src.m_map.m_impl_offset.m_dim , args... ) ;
688 const SubviewExtents< 8 , rank+1 > array_extents =
689 ArrayExtentGenerator< Args ... >::generator(
690 src.m_map.m_array_offset.m_dim , args... ) ;
692 dst_offset_type tempdst( src.m_map.m_impl_offset , extents ) ;
693 dst_array_offset_type temparraydst(
694 src.m_map.m_array_offset , array_extents ) ;
696 dst.m_track = src.m_track ;
698 dst.m_map.m_impl_offset.m_dim.N0 = tempdst.m_dim.N0 ;
699 dst.m_map.m_impl_offset.m_dim.N1 = tempdst.m_dim.N1 ;
700 dst.m_map.m_impl_offset.m_dim.N2 = tempdst.m_dim.N2 ;
701 dst.m_map.m_impl_offset.m_dim.N3 = tempdst.m_dim.N3 ;
702 dst.m_map.m_impl_offset.m_dim.N4 = tempdst.m_dim.N4 ;
703 dst.m_map.m_impl_offset.m_dim.N5 = tempdst.m_dim.N5 ;
704 dst.m_map.m_impl_offset.m_dim.N6 = tempdst.m_dim.N6 ;
706 dst.m_map.m_impl_offset.m_stride.S0 = tempdst.m_stride.S0;
707 dst.m_map.m_impl_offset.m_stride.S1 = tempdst.m_stride.S1;
708 dst.m_map.m_impl_offset.m_stride.S2 = tempdst.m_stride.S2;
709 dst.m_map.m_impl_offset.m_stride.S3 = tempdst.m_stride.S3;
710 dst.m_map.m_impl_offset.m_stride.S4 = tempdst.m_stride.S4;
711 dst.m_map.m_impl_offset.m_stride.S5 = tempdst.m_stride.S5;
712 dst.m_map.m_impl_offset.m_stride.S6 = tempdst.m_stride.S6;
721 AssignFadDimStride<rank,FadStaticDim>::eval( dst.m_map.m_array_offset, temparraydst );
723 dst.m_track = src.m_track ;
725 dst.m_map.m_impl_handle =
727 src.m_map.m_impl_handle +
728 src.m_map.m_array_offset( array_extents.domain_offset(0)
729 , array_extents.domain_offset(1)
730 , array_extents.domain_offset(2)
731 , array_extents.domain_offset(3)
732 , array_extents.domain_offset(4)
733 , array_extents.domain_offset(5)
734 , array_extents.domain_offset(6)
735 , array_extents.domain_offset(7)
738 dst.m_map.m_fad_size = src.m_map.m_fad_size;
739 dst.m_map.m_fad_stride = src.m_map.m_fad_stride.value;
741 dst.m_rank = ( src_rank > 0 ? unsigned(R0) : 0 )
742 + ( src_rank > 1 ? unsigned(R1) : 0 )
743 + ( src_rank > 2 ? unsigned(R2) : 0 )
744 + ( src_rank > 3 ? unsigned(R3) : 0 )
745 + ( src_rank > 4 ? unsigned(R4) : 0 )
746 + ( src_rank > 5 ? unsigned(R5) : 0 )
747 + ( src_rank > 6 ? unsigned(R6) : 0 ) ;
754 template <
unsigned>
struct AssignFadDim7 {
755 template <
typename Src,
typename Dst>
756 KOKKOS_INLINE_FUNCTION
757 static void eval(Dst& dst,
const Src& src ,
const unsigned dim ) {}
760 template <>
struct AssignFadDim7<0u> {
761 template <
typename Src,
typename Dst>
762 KOKKOS_INLINE_FUNCTION
763 static void eval(Dst& dst,
const Src& src ,
const unsigned dim ) {
764 dst.m_dim.N7 = src.m_dim.extent(dim);
769 template <
typename Layout>
770 KOKKOS_INLINE_FUNCTION
772 permute_fad_layout(
const Layout& src,
const unsigned rank) {
774 dst.dimension[rank] = 1;
775 dst.dimension[7] = src.dimension[rank];
778 KOKKOS_INLINE_FUNCTION
780 permute_fad_layout(
const LayoutStride& src,
const unsigned rank) {
781 LayoutStride dst = src;
782 dst.dimension[rank] = 1;
783 dst.stride[rank] = 1;
784 dst.dimension[7] = src.dimension[rank];
785 dst.stride[7] = src.stride[rank];
793 template<
class DstTraits ,
class SrcTraits >
794 class ViewMapping< DstTraits , SrcTraits ,
795 typename std::enable_if<(
796 Kokkos::Impl::MemorySpaceAccess
797 < typename DstTraits::memory_space
798 , typename SrcTraits::memory_space >::assignable
801 std::is_same< typename DstTraits::specialize
802 , Kokkos::Impl::ViewSpecializeSacadoFad >::value
805 std::is_same< typename SrcTraits::specialize
806 , Kokkos::Impl::ViewSpecializeSacadoFad >::value
807 ), Kokkos::Impl::ViewToDynRankViewTag >::type >
811 enum { is_assignable =
true };
812 enum { is_assignable_data_type =
true };
814 typedef Kokkos::Impl::SharedAllocationTracker TrackType ;
815 typedef ViewMapping< DstTraits , typename DstTraits::specialize > DstType ;
816 typedef ViewMapping< SrcTraits , typename SrcTraits::specialize > SrcFadType ;
818 template <
typename DT ,
typename ... DP ,
typename ST ,
typename ... SP >
819 KOKKOS_INLINE_FUNCTION
static
820 void assign( Kokkos::DynRankView< DT , DP... > & dst
821 ,
const Kokkos::View< ST , SP... >& src )
825 std::is_same<
typename DstTraits::array_layout
826 , Kokkos::LayoutLeft >::
value ||
827 std::is_same<
typename DstTraits::array_layout
828 , Kokkos::LayoutRight >::
value ||
829 std::is_same<
typename DstTraits::array_layout
830 , Kokkos::LayoutStride >::
value
834 std::is_same<
typename SrcTraits::array_layout
835 , Kokkos::LayoutLeft >::
value ||
836 std::is_same<
typename SrcTraits::array_layout
837 , Kokkos::LayoutRight >::
value ||
838 std::is_same<
typename SrcTraits::array_layout
839 , Kokkos::LayoutStride >::
value
841 ,
"View of FAD requires LayoutLeft, LayoutRight, or LayoutStride" );
844 std::is_same<
typename DstTraits::value_type
845 ,
typename SrcTraits::value_type >::
value ||
846 std::is_same<
typename DstTraits::value_type
847 ,
typename SrcTraits::const_value_type >::
value ,
848 "View assignment must have same value type or const = non-const" );
850 typedef typename DstType::offset_type dst_offset_type;
851 typedef typename DstType::array_offset_type dst_array_offset_type;
852 dst.m_map.m_array_offset =
853 dst_array_offset_type(std::integral_constant<unsigned,0>(),
854 permute_fad_layout(src.m_map.m_array_offset.layout(),
856 dst.m_map.m_impl_offset =
857 dst_offset_type(std::integral_constant<unsigned,0>(),
858 src.m_map.m_impl_offset.layout() );
860 dst.m_map.m_impl_handle = src.m_map.m_impl_handle ;
861 dst.m_rank = src.rank ;
863 dst.m_map.m_fad_size = src.m_map.m_fad_size ;
864 dst.m_map.m_fad_stride = src.m_map.m_fad_stride ;
872 template<
class DstTraits ,
class SrcTraits >
873 class ViewMapping< DstTraits , SrcTraits ,
874 typename std::enable_if<(
875 Kokkos::Impl::MemorySpaceAccess
876 < typename DstTraits::memory_space
877 , typename SrcTraits::memory_space >::assignable
880 std::is_same< typename DstTraits::specialize , void >::value
883 std::is_same< typename SrcTraits::specialize
884 , ViewSpecializeSacadoFad >::value
885 ), Kokkos::Impl::ViewToDynRankViewTag >::type >
889 enum { is_assignable =
true };
890 enum { is_assignable_data_type =
true };
892 typedef Kokkos::Impl::SharedAllocationTracker TrackType ;
893 typedef ViewMapping< DstTraits , typename DstTraits::specialize > DstType ;
894 typedef ViewMapping< SrcTraits , typename SrcTraits::specialize > SrcFadType ;
896 template <
typename DT ,
typename ... DP ,
typename ST ,
typename ... SP >
897 KOKKOS_INLINE_FUNCTION
static
898 void assign( Kokkos::DynRankView< DT , DP... > & dst
899 ,
const Kokkos::View< ST , SP... >& src )
903 std::is_same<
typename DstTraits::array_layout
904 , Kokkos::LayoutLeft >::
value ||
905 std::is_same<
typename DstTraits::array_layout
906 , Kokkos::LayoutRight >::
value ||
907 std::is_same<
typename DstTraits::array_layout
908 , Kokkos::LayoutStride >::
value
912 std::is_same<
typename SrcTraits::array_layout
913 , Kokkos::LayoutLeft >::
value ||
914 std::is_same<
typename SrcTraits::array_layout
915 , Kokkos::LayoutRight >::
value ||
916 std::is_same<
typename SrcTraits::array_layout
917 , Kokkos::LayoutStride >::
value
919 ,
"View of FAD requires LayoutLeft, LayoutRight, or LayoutStride" );
922 std::is_same<
typename DstTraits::value_type
923 ,
typename SrcTraits::value_type >::
value ||
924 std::is_same<
typename DstTraits::value_type
925 ,
typename SrcTraits::const_value_type >::
value ,
926 "View assignment must have same value type or const = non-const" );
928 typedef typename DstType::offset_type dst_offset_type;
929 dst.m_map.m_impl_offset =
930 dst_offset_type(std::integral_constant<unsigned,0>(),
931 permute_fad_layout(src.m_map.m_array_offset.layout(),
934 dst.m_map.m_impl_handle = src.m_map.m_impl_handle ;
935 dst.m_rank = src.Rank ;
943 template <
typename T,
typename ... P>
944 struct is_dynrankview_fad< DynRankView<
T,P...> > {
945 typedef DynRankView<
T,P...> view_type;
946 static const bool value =
947 std::is_same<
typename view_type::traits::specialize,
948 Impl::ViewSpecializeSacadoFad >
::value ||
949 std::is_same<
typename view_type::traits::specialize,
950 Impl::ViewSpecializeSacadoFadContiguous >
::value;
953 template <
typename T,
typename ... P>
954 struct is_dynrankview_fad_contiguous< DynRankView<
T,P...> > {
955 typedef DynRankView<
T,P...> view_type;
956 static const bool value =
957 std::is_same<
typename view_type::traits::specialize,
958 Impl::ViewSpecializeSacadoFadContiguous >
::value;
961 template <
typename T,
typename ... P>
962 KOKKOS_INLINE_FUNCTION
964 std::enable_if< is_dynrankview_fad< DynRankView<
T,P...> >
::value,
unsigned >::type
965 dimension_scalar(
const DynRankView<T,P...>& view) {
966 #ifdef KOKKOS_ENABLE_DEPRECATED_CODE
967 return view.implementation_map().dimension_scalar();
969 return view.impl_map().dimension_scalar();
975 template<
class DT,
class ... DP >
977 const DynRankView<DT,DP...> & view ,
979 ,
typename std::enable_if<(
980 std::is_same<
typename ViewTraits<DT,DP...>::specialize
981 , Kokkos::Impl::ViewSpecializeSacadoFad >::value ||
982 std::is_same<
typename ViewTraits<DT,DP...>::specialize
983 , Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value
987 std::is_same<
typename ViewTraits<DT,DP...>::value_type ,
988 typename ViewTraits<DT,DP...>::non_const_value_type >::value
989 ,
"Can only deep copy into non-const type" );
991 switch(view.rank()) {
992 case 0: deep_copy(Impl::as_view_of_rank_n<0>(view), value);
break;
993 case 1: deep_copy(Impl::as_view_of_rank_n<1>(view), value);
break;
994 case 2: deep_copy(Impl::as_view_of_rank_n<2>(view), value);
break;
995 case 3: deep_copy(Impl::as_view_of_rank_n<3>(view), value);
break;
996 case 4: deep_copy(Impl::as_view_of_rank_n<4>(view), value);
break;
997 case 5: deep_copy(Impl::as_view_of_rank_n<5>(view), value);
break;
998 case 6: deep_copy(Impl::as_view_of_rank_n<6>(view), value);
break;
999 case 7: deep_copy(Impl::as_view_of_rank_n<7>(view), value);
break;
1004 template<
class DT,
class ... DP >
1006 const DynRankView<DT,DP...> & view ,
1007 const typename DynRankView<DT,DP...>::value_type & value
1008 ,
typename std::enable_if<(
1009 std::is_same<
typename ViewTraits<DT,DP...>::specialize
1010 , Kokkos::Impl::ViewSpecializeSacadoFad >::value ||
1011 std::is_same<
typename ViewTraits<DT,DP...>::specialize
1012 , Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value
1016 std::is_same<
typename ViewTraits<DT,DP...>::value_type ,
1017 typename ViewTraits<DT,DP...>::non_const_value_type >::value
1018 ,
"Can only deep copy into non-const type" );
1020 switch(view.rank()) {
1021 case 0: deep_copy(Impl::as_view_of_rank_n<0>(view), value);
break;
1022 case 1: deep_copy(Impl::as_view_of_rank_n<1>(view), value);
break;
1023 case 2: deep_copy(Impl::as_view_of_rank_n<2>(view), value);
break;
1024 case 3: deep_copy(Impl::as_view_of_rank_n<3>(view), value);
break;
1025 case 4: deep_copy(Impl::as_view_of_rank_n<4>(view), value);
break;
1026 case 5: deep_copy(Impl::as_view_of_rank_n<5>(view), value);
break;
1027 case 6: deep_copy(Impl::as_view_of_rank_n<6>(view), value);
break;
1028 case 7: deep_copy(Impl::as_view_of_rank_n<7>(view), value);
break;
1032 template<
class DstType ,
class SrcType >
1035 (
const DstType & dst
1036 ,
const SrcType & src
1037 ,
typename std::enable_if<(
1038 ( std::is_same<
typename DstType::traits::specialize
1039 , Kokkos::Impl::ViewSpecializeSacadoFad >::value ||
1040 std::is_same<
typename DstType::traits::specialize
1041 , Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
1043 ( std::is_same<
typename SrcType::traits::specialize
1044 , Kokkos::Impl::ViewSpecializeSacadoFad >::value ||
1045 std::is_same<
typename SrcType::traits::specialize
1046 , Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
1053 std::is_same<
typename DstType::traits::value_type ,
1054 typename DstType::traits::non_const_value_type >::value
1055 ,
"deep_copy requires non-const destination type" );
1057 typedef DstType dst_type ;
1058 typedef SrcType src_type ;
1060 typedef typename dst_type::execution_space dst_execution_space ;
1061 typedef typename src_type::execution_space src_execution_space ;
1062 typedef typename dst_type::memory_space dst_memory_space ;
1063 typedef typename src_type::memory_space src_memory_space ;
1065 enum { DstExecCanAccessSrc =
1066 Kokkos::SpaceAccessibility< typename dst_execution_space::memory_space, src_memory_space >::accessible };
1068 enum { SrcExecCanAccessDst =
1069 Kokkos::SpaceAccessibility< typename src_execution_space::memory_space, dst_memory_space >::accessible };
1071 if ( (
void *) dst.data() != (
void*) src.data() ) {
1077 if ( rank(src) == 0 && rank(dst) == 0 )
1079 typedef typename dst_type::value_type::value_type value_type ;
1080 const size_t nbytes =
sizeof(value_type) * dst.span() ;
1082 Kokkos::Impl::DeepCopy< dst_memory_space , src_memory_space >( dst.data() , src.data() , nbytes );
1085 else if ( std::is_same<
typename DstType::traits::value_type ,
1086 typename SrcType::traits::non_const_value_type >::value &&
1088 ( std::is_same<
typename DstType::traits::array_layout ,
1089 typename SrcType::traits::array_layout >::value
1091 ( std::is_same<
typename DstType::traits::array_layout ,
1092 typename Kokkos::LayoutLeft>::value
1094 std::is_same<
typename DstType::traits::array_layout ,
1095 typename Kokkos::LayoutRight>::value
1105 dst.span_is_contiguous() &&
1106 src.span_is_contiguous() &&
1107 dst.span() == src.span() &&
1108 dst.extent(0) == src.extent(0) &&
1109 dst.extent(1) == src.extent(1) &&
1110 dst.extent(2) == src.extent(2) &&
1111 dst.extent(3) == src.extent(3) &&
1112 dst.extent(4) == src.extent(4) &&
1113 dst.extent(5) == src.extent(5) &&
1114 dst.extent(6) == src.extent(6) &&
1115 dst.extent(7) == src.extent(7) ) {
1119 const size_t nbytes =
sizeof(
typename dst_type::value_type::value_type) * dst.span() ;
1122 Kokkos::Impl::DeepCopy< dst_memory_space , src_memory_space >( dst.data() , src.data() , nbytes );
1125 else if ( std::is_same<
typename DstType::traits::value_type ,
1126 typename SrcType::traits::non_const_value_type >::value &&
1128 ( std::is_same<
typename DstType::traits::array_layout ,
1129 typename SrcType::traits::array_layout >::value
1131 std::is_same<
typename DstType::traits::array_layout ,
1132 typename Kokkos::LayoutStride>::value
1141 dst.span_is_contiguous() &&
1142 src.span_is_contiguous() &&
1143 dst.span() == src.span() &&
1144 dst.extent(0) == src.extent(0) &&
1145 dst.extent(1) == src.extent(1) &&
1146 dst.extent(2) == src.extent(2) &&
1147 dst.extent(3) == src.extent(3) &&
1148 dst.extent(4) == src.extent(4) &&
1149 dst.extent(5) == src.extent(5) &&
1150 dst.extent(6) == src.extent(6) &&
1151 dst.extent(7) == src.extent(7) &&
1152 #if KOKKOS_VERSION >= 40799
1153 dst.stride(0) == src.stride(0) &&
1154 dst.stride(1) == src.stride(1) &&
1155 dst.stride(2) == src.stride(2) &&
1156 dst.stride(3) == src.stride(3) &&
1157 dst.stride(4) == src.stride(4) &&
1158 dst.stride(5) == src.stride(5) &&
1159 dst.stride(6) == src.stride(6) &&
1160 dst.stride(7) == src.stride(7)
1162 dst.stride_0() == src.stride_0() &&
1163 dst.stride_1() == src.stride_1() &&
1164 dst.stride_2() == src.stride_2() &&
1165 dst.stride_3() == src.stride_3() &&
1166 dst.stride_4() == src.stride_4() &&
1167 dst.stride_5() == src.stride_5() &&
1168 dst.stride_6() == src.stride_6() &&
1169 dst.stride_7() == src.stride_7()
1173 const size_t nbytes =
sizeof(
typename dst_type::value_type::value_type) * dst.span() ;
1175 Kokkos::Impl::DeepCopy< dst_memory_space , src_memory_space >( dst.data() , src.data() , nbytes );
1178 else if ( DstExecCanAccessSrc ) {
1181 Kokkos::Impl::DynRankViewRemap< dst_type , src_type >( dst , src );
1184 else if ( SrcExecCanAccessDst ) {
1187 Kokkos::Impl::DynRankViewRemap< dst_type , src_type , src_execution_space >( dst , src );
1191 Kokkos::Impl::throw_runtime_exception(
"deep_copy given views that would require a temporary allocation");
1199 template<
class T ,
class ... P >
1201 typename Kokkos::DynRankView<
T,P...>::host_mirror_type
1202 create_mirror(
const Kokkos::DynRankView<T,P...> & src
1203 ,
typename std::enable_if<
1204 ( std::is_same<
typename ViewTraits<T,P...>::specialize ,
1205 Kokkos::Impl::ViewSpecializeSacadoFad >::value ||
1206 std::is_same<
typename ViewTraits<T,P...>::specialize ,
1207 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
1209 ! std::is_same<
typename Kokkos::ViewTraits<T,P...>::array_layout
1210 , Kokkos::LayoutStride >::value
1214 typedef DynRankView<
T,P...> src_type ;
1215 typedef typename src_type::host_mirror_type dst_type ;
1217 typename src_type::array_layout layout = src.layout();
1218 layout.dimension[src.rank()] = Kokkos::dimension_scalar(src);
1220 return dst_type(std::string(src.label()).append(
"_mirror"),
1221 Impl::reconstructLayout(layout, src.rank()+1));
1224 template<
class T ,
class ... P >
1226 typename Kokkos::DynRankView<
T,P...>::host_mirror_type
1227 create_mirror(
const Kokkos::DynRankView<T,P...> & src
1228 ,
typename std::enable_if<
1229 ( std::is_same<
typename ViewTraits<T,P...>::specialize ,
1230 Kokkos::Impl::ViewSpecializeSacadoFad >::value ||
1231 std::is_same<
typename ViewTraits<T,P...>::specialize ,
1232 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
1234 std::is_same<
typename Kokkos::ViewTraits<T,P...>::array_layout
1235 , Kokkos::LayoutStride >::value
1239 typedef DynRankView<
T,P...> src_type ;
1240 typedef typename src_type::host_mirror_type dst_type ;
1242 Kokkos::LayoutStride layout ;
1244 layout.dimension[0] = src.extent(0);
1245 layout.dimension[1] = src.extent(1);
1246 layout.dimension[2] = src.extent(2);
1247 layout.dimension[3] = src.extent(3);
1248 layout.dimension[4] = src.extent(4);
1249 layout.dimension[5] = src.extent(5);
1250 layout.dimension[6] = src.extent(6);
1251 layout.dimension[7] = src.extent(7);
1253 layout.stride[0] = src.stride_0();
1254 layout.stride[1] = src.stride_1();
1255 layout.stride[2] = src.stride_2();
1256 layout.stride[3] = src.stride_3();
1257 layout.stride[4] = src.stride_4();
1258 layout.stride[5] = src.stride_5();
1259 layout.stride[6] = src.stride_6();
1260 layout.stride[7] = src.stride_7();
1262 layout.dimension[src.rank()] = Kokkos::dimension_scalar(src);
1263 #ifdef KOKKOS_ENABLE_DEPRECATED_CODE
1264 layout.stride[src.rank()] = src.implementation_map().stride_scalar();
1266 layout.stride[src.rank()] = src.impl_map().stride_scalar();
1269 return dst_type(std::string(src.label()).append(
"_mirror"),
1270 Impl::reconstructLayout(layout, src.rank()+1));
1273 template<
class Space,
class T,
class ... P>
1274 typename Impl::MirrorDRViewType<Space,
T,P ...>::dest_view_type
1275 create_mirror(
const Space& ,
const Kokkos::DynRankView<T,P...> & src
1276 ,
typename std::enable_if<
1277 ( std::is_same<
typename ViewTraits<T,P...>::specialize ,
1278 Kokkos::Impl::ViewSpecializeSacadoFad >::value ||
1279 std::is_same<
typename ViewTraits<T,P...>::specialize ,
1280 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
1282 typedef DynRankView<
T,P...> src_type ;
1283 typename src_type::array_layout layout = src.layout();
1284 layout.dimension[src.rank()] = Kokkos::dimension_scalar(src);
1285 return typename Impl::MirrorDRViewType<Space,T,P ...>::dest_view_type(
1286 src.label(),Impl::reconstructLayout(layout, src.rank()+1));
1291 template <
unsigned N,
typename T,
typename... Args>
1292 KOKKOS_FUNCTION
auto as_view_of_rank_n(
1293 DynRankView<T, Args...> v,
1294 typename std::enable_if<
1295 ( std::is_same<
typename ViewTraits<T,Args...>::specialize,
1296 Kokkos::Impl::ViewSpecializeSacadoFad >::value ||
1297 std::is_same<
typename ViewTraits<T,Args...>::specialize ,
1298 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
1301 if (v.rank() !=
N) {
1303 const std::string message =
1304 "Converting DynRankView of rank " + std::to_string(v.rank()) +
1305 " to a View of mis-matched rank " + std::to_string(
N) +
"!";
1306 Kokkos::abort(message.c_str());)
1307 KOKKOS_IF_ON_DEVICE(
1308 Kokkos::abort(
"Converting DynRankView to a View of mis-matched rank!");)
1311 auto layout = v.impl_map().layout();
1312 layout.dimension[v.rank()] = Kokkos::dimension_scalar(v);
1313 return View<typename RankDataType<T, N>::type, Args...>(
1314 v.data(), Impl::reconstructLayout(layout, v.rank()+1));
1322 #endif //defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
1324 #endif // defined(HAVE_SACADO_KOKKOS)
1326 #ifndef SACADO_HAS_NEW_KOKKOS_VIEW_IMPL
Base template specification for ScalarType.
KOKKOS_INLINE_FUNCTION auto subview(const View< D, Kokkos::LayoutContiguous< LayoutSrc, StrideSrc >, P...> &src, Args...args)