Stokhos Package Browser (Single Doxygen Collection)  Version of the Day
Tpetra_KokkosRefactor_Details_MultiVectorLocalDeepCopy_MP_Vector.hpp
Go to the documentation of this file.
1 /*
2 // @HEADER
3 // ***********************************************************************
4 //
5 // Tpetra: Templated Linear Algebra Services Package
6 // Copyright (2008) Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
39 //
40 // ************************************************************************
41 // @HEADER
42 */
43 
44 #ifndef TPETRA_KOKKOS_REFACTOR_DETAILS_MULTI_VECTOR_LOCAL_DEEP_COPY_MP_VECTOR_HPP
45 #define TPETRA_KOKKOS_REFACTOR_DETAILS_MULTI_VECTOR_LOCAL_DEEP_COPY_MP_VECTOR_HPP
46 
47 #include "Tpetra_KokkosRefactor_Details_MultiVectorLocalDeepCopy.hpp"
49 
50 namespace Tpetra {
51 namespace Details {
52 
53  template<class DT, class ... DP,
54  class ST, class ... SP,
55  class DstWhichVecsType,
56  class SrcWhichVecsType>
57  typename std::enable_if<
58  Kokkos::is_view_mp_vector< Kokkos::View<DT,DP...> >::value &&
59  Kokkos::is_view_mp_vector< Kokkos::View<ST,SP...> >::value >::type
61  const Kokkos::View<DT,DP...>& dst,
62  const Kokkos::View<ST,SP...>& src,
63  const bool dstConstStride, const bool srcConstStride,
64  const DstWhichVecsType& dstWhichVecs,
65  const SrcWhichVecsType& srcWhichVecs)
66  {
67  typedef Kokkos::View<DT,DP...> DstViewType;
68  typedef Kokkos::View<ST,SP...> SrcViewType;
69  typename Kokkos::FlatArrayType<DstViewType>::type dst_flat = dst;
70  typename Kokkos::FlatArrayType<SrcViewType>::type src_flat = src;
71  localDeepCopy( dst_flat, src_flat, dstConstStride, srcConstStride,
72  dstWhichVecs, srcWhichVecs );
73  }
74 
75  template<class DT, class ... DP,
76  class ST, class ... SP>
77  typename std::enable_if<
78  Kokkos::is_view_mp_vector< Kokkos::View<DT,DP...> >::value &&
79  Kokkos::is_view_mp_vector< Kokkos::View<ST,SP...> >::value >::type
81  const Kokkos::View<DT,DP...>& dst,
82  const Kokkos::View<ST,SP...>& src)
83  {
84  typedef Kokkos::View<DT,DP...> DstViewType;
85  typedef Kokkos::View<ST,SP...> SrcViewType;
86  typename Kokkos::FlatArrayType<DstViewType>::type dst_flat = dst;
87  typename Kokkos::FlatArrayType<SrcViewType>::type src_flat = src;
88  localDeepCopyConstStride( dst_flat, src_flat );
89  }
90 
91 } // Details namespace
92 } // Tpetra namespace
93 
94 #endif // TPETRA_KOKKOS_REFACTOR_DETAILS_MULTI_VECTOR_LOCAL_DEEP_COPY_MP_VECTOR_HPP
std::enable_if< Kokkos::is_view_uq_pce< Kokkos::View< DT, DP... > >::value &&Kokkos::is_view_uq_pce< Kokkos::View< ST, SP... > >::value >::type localDeepCopy(const Kokkos::View< DT, DP... > &dst, const Kokkos::View< ST, SP... > &src, const bool dstConstStride, const bool srcConstStride, const DstWhichVecsType &dstWhichVecs, const SrcWhichVecsType &srcWhichVecs)
std::enable_if< Kokkos::is_view_uq_pce< Kokkos::View< DT, DP... > >::value &&Kokkos::is_view_uq_pce< Kokkos::View< ST, SP... > >::value >::type localDeepCopyConstStride(const Kokkos::View< DT, DP... > &dst, const Kokkos::View< ST, SP... > &src)