10 #ifndef KOKKOS_VIEW_FAD_FWD_HPP
11 #define KOKKOS_VIEW_FAD_FWD_HPP
14 #if defined(HAVE_SACADO_KOKKOS)
18 #ifndef KOKKOS_IMPL_PUBLIC_INCLUDE
19 #define KOKKOS_IMPL_PUBLIC_INCLUDE
20 #define KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_CORE
24 #include "Kokkos_Core_fwd.hpp"
25 #include "Kokkos_View.hpp"
26 #ifdef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_CORE
27 #undef KOKKOS_IMPL_PUBLIC_INCLUDE
28 #undef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_CORE
31 #if (KOKKOS_VERSION > 40700) && !defined(KOKKOS_ENABLE_IMPL_VIEW_LEGACY) \
32 && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
33 #define SACADO_HAS_NEW_KOKKOS_VIEW_IMPL
37 #ifdef SACADO_HAS_NEW_KOKKOS_VIEW_IMPL
41 template <
typename view_type>
47 using Sacado::is_view_fad;
53 template <
typename view_type>
59 #ifndef SACADO_HAS_NEW_KOKKOS_VIEW_IMPL
61 #if defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
66 struct ViewSpecializeSacadoFad;
67 struct ViewSpecializeSacadoFadContiguous;
77 template<
class DT,
class ... DP,
78 class ST,
class ... SP>
79 typename std::enable_if< is_view_fad< Kokkos::View<DT,DP...> >
::value &&
80 is_view_fad< Kokkos::View<ST,SP...> >
::value
82 view_copy(
const Kokkos::View<DT,DP...>& dst,
const Kokkos::View<ST,SP...>& src);
84 template<
class ExecutionSpace,
85 class DT,
class ... DP,
86 class ST,
class ... SP>
87 typename std::enable_if< is_view_fad< Kokkos::View<DT,DP...> >
::value &&
88 is_view_fad< Kokkos::View<ST,SP...> >
::value
90 view_copy(
const ExecutionSpace& space,
91 const Kokkos::View<DT,DP...>& dst,
const Kokkos::View<ST,SP...>& src);
93 template<
class Space,
class T,
class ... P>
94 struct MirrorViewType;
101 template<
class T ,
class ... P >
103 typename std::enable_if<
104 ( std::is_same<
typename ViewTraits<
T,P...>::specialize ,
105 Kokkos::Impl::ViewSpecializeSacadoFad >
::value ||
106 std::is_same<
typename ViewTraits<
T,P...>::specialize ,
107 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >
::value ) &&
108 !std::is_same<
typename Kokkos::ViewTraits<T,P...>::array_layout,
109 Kokkos::LayoutStride >::
value,
110 typename Kokkos::View<T,P...>::host_mirror_type>::type
111 create_mirror(
const Kokkos::View<T,P...> & src);
113 template<
class T ,
class ... P >
115 typename std::enable_if<
116 ( std::is_same<
typename ViewTraits<
T,P...>::specialize ,
117 Kokkos::Impl::ViewSpecializeSacadoFad >
::value ||
118 std::is_same<
typename ViewTraits<
T,P...>::specialize ,
119 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >
::value ) &&
120 std::is_same<
typename Kokkos::ViewTraits<T,P...>::array_layout,
121 Kokkos::LayoutStride >::
value,
122 typename Kokkos::View<T,P...>::host_mirror_type>::type
123 create_mirror(
const Kokkos::View<T,P...> & src);
125 template<
class Space,
class T,
class ... P,
127 typename std::enable_if<
128 std::is_same<
typename ViewTraits<
T,P...>::specialize ,
129 Kokkos::Impl::ViewSpecializeSacadoFad >
::value ||
130 std::is_same<
typename ViewTraits<
T,P...>::specialize ,
131 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >
::value,
132 typename Impl::MirrorViewType<Space,
T,P ...>::dest_view_type>::type
133 create_mirror(
const Space&,
const Kokkos::View<T,P...> & src);
135 template<
class T ,
class ... P >
137 typename std::enable_if<
138 ( std::is_same<
typename ViewTraits<
T,P...>::specialize ,
139 Kokkos::Impl::ViewSpecializeSacadoFad >
::value ||
140 std::is_same<
typename ViewTraits<
T,P...>::specialize ,
141 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >
::value ) &&
142 !std::is_same<
typename Kokkos::ViewTraits<T,P...>::array_layout,
143 Kokkos::LayoutStride >::
value,
144 typename Kokkos::View<T,P...>::host_mirror_type>::type
145 create_mirror(Kokkos::Impl::WithoutInitializing_t wi,
146 const Kokkos::View<T,P...> & src);
148 template<
class T ,
class ... P >
150 typename std::enable_if<
151 ( std::is_same<
typename ViewTraits<
T,P...>::specialize ,
152 Kokkos::Impl::ViewSpecializeSacadoFad >
::value ||
153 std::is_same<
typename ViewTraits<
T,P...>::specialize ,
154 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >
::value ) &&
155 std::is_same<
typename Kokkos::ViewTraits<T,P...>::array_layout,
156 Kokkos::LayoutStride >::
value,
157 typename Kokkos::View<T,P...>::host_mirror_type>::type
158 create_mirror(Kokkos::Impl::WithoutInitializing_t wi,
159 const Kokkos::View<T,P...> & src);
161 template<
class Space,
class T,
class ... P,
163 typename std::enable_if<
164 ( std::is_same<
typename ViewTraits<
T,P...>::specialize ,
165 Kokkos::Impl::ViewSpecializeSacadoFad >
::value ||
166 std::is_same<
typename ViewTraits<
T,P...>::specialize ,
167 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >
::value ),
168 typename Impl::MirrorViewType<Space,T,P ...>::dest_view_type>::type
169 create_mirror(Kokkos::Impl::WithoutInitializing_t wi,
170 const Space&,
const Kokkos::View<T,P...> & src);
172 template <
class Space,
class T,
class... P>
173 typename Impl::MirrorViewType<Space,
T, P...>::view_type
174 create_mirror_view_and_copy(
175 const Space&,
const Kokkos::View<T, P...>& src,
176 std::string
const& name =
"",
177 typename std::enable_if<
178 ( std::is_same<
typename ViewTraits<T, P...>::specialize,
179 Kokkos::Impl::ViewSpecializeSacadoFad>::
value ||
180 std::is_same<
typename ViewTraits<T,P...>::specialize ,
181 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::
value ) &&
182 Impl::MirrorViewType<Space, T, P...>::is_same_memspace>::type* =
185 template <
class Space,
class T,
class... P>
186 typename Impl::MirrorViewType<Space,
T, P...>::view_type
187 create_mirror_view_and_copy(
188 const Space&,
const Kokkos::View<T, P...>& src,
189 std::string
const& name =
"",
190 typename std::enable_if<
191 ( std::is_same<
typename ViewTraits<T, P...>::specialize,
192 Kokkos::Impl::ViewSpecializeSacadoFad>::
value ||
193 std::is_same<
typename ViewTraits<T,P...>::specialize ,
194 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::
value ) &&
195 !Impl::MirrorViewType<Space, T, P...>::is_same_memspace>::type* =
200 template <
unsigned N,
typename... Args>
201 KOKKOS_FUNCTION std::enable_if_t<
202 N ==
View<Args...>::Rank &&
203 (std::is_same<
typename ViewTraits<Args...>::specialize,
204 Kokkos::Impl::ViewSpecializeSacadoFad>
::value ||
205 std::is_same<
typename ViewTraits<Args...>::specialize,
206 Kokkos::Impl::ViewSpecializeSacadoFadContiguous>
::value),
208 as_view_of_rank_n(View<Args...> v);
212 template <
unsigned N,
typename T,
typename... Args>
214 N !=
View<
T, Args...>::Rank &&
215 (std::is_same<
typename ViewTraits<
T, Args...>::specialize,
216 Kokkos::Impl::ViewSpecializeSacadoFad>
::value ||
217 std::is_same<
typename ViewTraits<
T, Args...>::specialize,
218 Kokkos::Impl::ViewSpecializeSacadoFadContiguous>
::value),
219 View<
typename RankDataType<
typename View<T, Args...>::value_type,
N>::type,
221 as_view_of_rank_n(View<T, Args...>);
225 namespace Experimental {
227 template <
class DT,
class... DP>
228 void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(
229 const View<DT, DP...>& dst,
230 typename ViewTraits<DT, DP...>::const_value_type&
value,
231 typename std::enable_if<(
232 ( std::is_same<
typename ViewTraits<DT,DP...>::specialize,
233 Kokkos::Impl::ViewSpecializeSacadoFad >::value
235 std::is_same<
typename ViewTraits<DT,DP...>::specialize,
236 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
237 && (
unsigned(ViewTraits<DT, DP...>::rank) == 1))>::type* =
nullptr);
239 template <
class DT,
class... DP>
240 void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(
241 const View<DT, DP...>& dst,
242 typename ViewTraits<DT, DP...>::const_value_type& value,
243 typename std::enable_if<(
244 ( std::is_same<
typename ViewTraits<DT,DP...>::specialize,
245 Kokkos::Impl::ViewSpecializeSacadoFad >::value
247 std::is_same<
typename ViewTraits<DT,DP...>::specialize,
248 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
249 && (
unsigned(ViewTraits<DT, DP...>::rank) == 2))>::type* =
nullptr);
251 template <
class DT,
class... DP>
252 void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(
253 const View<DT, DP...>& dst,
254 typename ViewTraits<DT, DP...>::const_value_type& value,
255 typename std::enable_if<(
256 ( std::is_same<
typename ViewTraits<DT,DP...>::specialize,
257 Kokkos::Impl::ViewSpecializeSacadoFad >::value
259 std::is_same<
typename ViewTraits<DT,DP...>::specialize,
260 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
261 && (
unsigned(ViewTraits<DT, DP...>::rank) == 3))>::type* =
nullptr);
263 template <
class DT,
class... DP>
264 void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(
265 const View<DT, DP...>& dst,
266 typename ViewTraits<DT, DP...>::const_value_type& value,
267 typename std::enable_if<(
268 ( std::is_same<
typename ViewTraits<DT,DP...>::specialize,
269 Kokkos::Impl::ViewSpecializeSacadoFad >::value
271 std::is_same<
typename ViewTraits<DT,DP...>::specialize,
272 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
273 && (
unsigned(ViewTraits<DT, DP...>::rank) == 4))>::type* =
nullptr);
275 template <
class DT,
class... DP>
276 void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(
277 const View<DT, DP...>& dst,
278 typename ViewTraits<DT, DP...>::const_value_type& value,
279 typename std::enable_if<(
280 ( std::is_same<
typename ViewTraits<DT,DP...>::specialize,
281 Kokkos::Impl::ViewSpecializeSacadoFad >::value
283 std::is_same<
typename ViewTraits<DT,DP...>::specialize,
284 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
285 && (
unsigned(ViewTraits<DT, DP...>::rank) == 5))>::type* =
nullptr);
287 template <
class DT,
class... DP>
288 void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(
289 const View<DT, DP...>& dst,
290 typename ViewTraits<DT, DP...>::const_value_type& value,
291 typename std::enable_if<(
292 ( std::is_same<
typename ViewTraits<DT,DP...>::specialize,
293 Kokkos::Impl::ViewSpecializeSacadoFad >::value
295 std::is_same<
typename ViewTraits<DT,DP...>::specialize,
296 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
297 && (
unsigned(ViewTraits<DT, DP...>::rank) == 6))>::type* =
nullptr);
299 template <
class DT,
class... DP>
300 void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(
301 const View<DT, DP...>& dst,
302 typename ViewTraits<DT, DP...>::const_value_type& value,
303 typename std::enable_if<(
304 ( std::is_same<
typename ViewTraits<DT,DP...>::specialize,
305 Kokkos::Impl::ViewSpecializeSacadoFad >::value
307 std::is_same<
typename ViewTraits<DT,DP...>::specialize,
308 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
309 && (
unsigned(ViewTraits<DT, DP...>::rank) == 7))>::type* =
nullptr);
311 template <
class TeamType,
class DT,
class... DP>
312 void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(
313 const TeamType& team,
const View<DT, DP...>& dst,
314 typename ViewTraits<DT, DP...>::const_value_type& value,
315 typename std::enable_if<(
316 ( std::is_same<
typename ViewTraits<DT,DP...>::specialize,
317 Kokkos::Impl::ViewSpecializeSacadoFad >::value
319 std::is_same<
typename ViewTraits<DT,DP...>::specialize,
320 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
321 && (
unsigned(ViewTraits<DT, DP...>::rank) == 1))>::type* =
nullptr);
323 template <
class TeamType,
class DT,
class... DP>
324 void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(
325 const TeamType& team,
const View<DT, DP...>& dst,
326 typename ViewTraits<DT, DP...>::const_value_type& value,
327 typename std::enable_if<(
328 ( std::is_same<
typename ViewTraits<DT,DP...>::specialize,
329 Kokkos::Impl::ViewSpecializeSacadoFad >::value
331 std::is_same<
typename ViewTraits<DT,DP...>::specialize,
332 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
333 && (
unsigned(ViewTraits<DT, DP...>::rank) == 2))>::type* =
nullptr);
335 template <
class TeamType,
class DT,
class... DP>
336 void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(
337 const TeamType& team,
const View<DT, DP...>& dst,
338 typename ViewTraits<DT, DP...>::const_value_type& value,
339 typename std::enable_if<(
340 ( std::is_same<
typename ViewTraits<DT,DP...>::specialize,
341 Kokkos::Impl::ViewSpecializeSacadoFad >::value
343 std::is_same<
typename ViewTraits<DT,DP...>::specialize,
344 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
345 && (
unsigned(ViewTraits<DT, DP...>::rank) == 3))>::type* =
nullptr);
347 template <
class TeamType,
class DT,
class... DP>
348 void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(
349 const TeamType& team,
const View<DT, DP...>& dst,
350 typename ViewTraits<DT, DP...>::const_value_type& value,
351 typename std::enable_if<(
352 ( std::is_same<
typename ViewTraits<DT,DP...>::specialize,
353 Kokkos::Impl::ViewSpecializeSacadoFad >::value
355 std::is_same<
typename ViewTraits<DT,DP...>::specialize,
356 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
357 && (
unsigned(ViewTraits<DT, DP...>::rank) == 4))>::type* =
nullptr);
359 template <
class TeamType,
class DT,
class... DP>
360 void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(
361 const TeamType& team,
const View<DT, DP...>& dst,
362 typename ViewTraits<DT, DP...>::const_value_type& value,
363 typename std::enable_if<(
364 ( std::is_same<
typename ViewTraits<DT,DP...>::specialize,
365 Kokkos::Impl::ViewSpecializeSacadoFad >::value
367 std::is_same<
typename ViewTraits<DT,DP...>::specialize,
368 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
369 && (
unsigned(ViewTraits<DT, DP...>::rank) == 5))>::type* =
nullptr);
371 template <
class TeamType,
class DT,
class... DP>
372 void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(
373 const TeamType& team,
const View<DT, DP...>& dst,
374 typename ViewTraits<DT, DP...>::const_value_type& value,
375 typename std::enable_if<(
376 ( std::is_same<
typename ViewTraits<DT,DP...>::specialize,
377 Kokkos::Impl::ViewSpecializeSacadoFad >::value
379 std::is_same<
typename ViewTraits<DT,DP...>::specialize,
380 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
381 && (
unsigned(ViewTraits<DT, DP...>::rank) == 6))>::type* =
nullptr);
383 template <
class TeamType,
class DT,
class... DP>
384 void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(
385 const TeamType& team,
const View<DT, DP...>& dst,
386 typename ViewTraits<DT, DP...>::const_value_type& value,
387 typename std::enable_if<(
388 ( std::is_same<
typename ViewTraits<DT,DP...>::specialize,
389 Kokkos::Impl::ViewSpecializeSacadoFad >::value
391 std::is_same<
typename ViewTraits<DT,DP...>::specialize,
392 Kokkos::Impl::ViewSpecializeSacadoFadContiguous >::value )
393 && (
unsigned(ViewTraits<DT, DP...>::rank) == 7))>::type* =
nullptr);
399 #endif // defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
402 #endif // defined(HAVE_SACADO_KOKKOS)