Stokhos Package Browser (Single Doxygen Collection)  Version of the Day
kokkos_pce_specializations.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Stokhos Package
5 // Copyright (2009) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Eric T. Phipps (etphipp@sandia.gov).
38 //
39 // ***********************************************************************
40 // @HEADER
41 
42 #ifndef KOKKOS_PCE_SPECIALIZATIONS_HPP
43 #define KOKKOS_PCE_SPECIALIZATIONS_HPP
44 
45 #include "Stokhos_Sacado.hpp"
46 #include "Kokkos_MultiVectorKernelOps.hpp"
47 
48 // Specializations of several Kokkos kernels for PCE scalar types
49 
50 namespace KokkosClassic {
51 
52  template <typename ScalarType, typename StorageType>
53  struct WeightNormOp< Sacado::PCE::OrthogPoly<ScalarType,StorageType> > {
55  typedef Teuchos::ScalarTraits<Scalar> SCT;
56  typedef typename SCT::innerProductType ipType;
57  const Scalar *x, *w;
59  inline static ipType KERNEL_PREFIX identity() {
60  return Teuchos::ScalarTraits<ipType>::zero();
61  }
62  inline static ipType KERNEL_PREFIX reduce(ipType x, ipType y) {
63  return x+y;
64  }
65  inline ipType KERNEL_PREFIX generate(int i) {
66  Scalar tmp = x[i] / w[i];
67  return SCT::innerProduct(tmp,tmp);
68  }
69  };
70 
71  template <typename ScalarType, typename StorageType>
72  struct DotOp1< Sacado::PCE::OrthogPoly<ScalarType,StorageType> > {
74  typedef Teuchos::ScalarTraits<Scalar> SCT;
75  typedef typename SCT::innerProductType ipType;
76  const Scalar *x;
78  inline static ipType KERNEL_PREFIX identity() {
79  return Teuchos::ScalarTraits<ipType>::zero();
80  }
81  inline static ipType KERNEL_PREFIX reduce(ipType x, ipType y) {
82  return x+y;
83  }
84  inline ipType KERNEL_PREFIX generate(int i) {
85  Scalar xi = x[i];
86  return SCT::innerProduct(xi,xi);
87  }
88  };
89 
90  template <typename ScalarType, typename StorageType>
91  struct DotOp2< Sacado::PCE::OrthogPoly<ScalarType,StorageType> > {
93  typedef Teuchos::ScalarTraits<Scalar> SCT;
94  typedef typename SCT::innerProductType ipType;
95  const Scalar *x, *y;
97  inline static ipType KERNEL_PREFIX identity() {
98  return Teuchos::ScalarTraits<ipType>::zero();
99  }
100  inline static ipType KERNEL_PREFIX reduce(ipType x, ipType y) {
101  return x+y;
102  }
103  inline ipType KERNEL_PREFIX generate(int i) {
104  Scalar xi = x[i]; Scalar yi = y[i];
105  return SCT::innerProduct(xi, yi);
106  }
107  };
108 
109 } // namespace KokkosClassic
110 
111 
112 #endif
const IndexType const IndexType const IndexType const IndexType const ValueType const ValueType * x
Definition: csr_vector.h:260
const IndexType const IndexType const IndexType const IndexType const ValueType const ValueType ValueType * y
Definition: csr_vector.h:267