Stokhos Package Browser (Single Doxygen Collection) Version of the Day
Loading...
Searching...
No Matches
Stokhos_Sacado_Kokkos_MathFunctions.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 STOKHOS_SACADO_KOKKOS_MATHFUNCTIONS_HPP
43#define STOKHOS_SACADO_KOKKOS_MATHFUNCTIONS_HPP
44
45#include <cmath>
46
47#include "Stokhos_ConfigDefs.h"
48
49#include "Kokkos_Macros.hpp"
50
51#ifdef HAVE_STOKHOS_ENSEMBLE_SCALAR_TYPE
52
53#if STOKHOS_USE_MP_VECTOR_SFS_SPEC
54#define UNARYFUNC_MACRO_SFS(OP,FADOP) \
55namespace Stokhos { \
56 template <typename O, typename T, int N, typename D> \
57 class StaticFixedStorage; \
58} \
59namespace Sacado { \
60 namespace MP { \
61 template <typename S> class Vector; \
62 template <typename O, typename T, int N, typename D> \
63 KOKKOS_INLINE_FUNCTION \
64 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \
65 OP (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >&); \
66 } \
67}
68#else
69#define UNARYFUNC_MACRO_SFS(OP,FADOP) /* */
70#endif
71
72#define UNARYFUNC_MACRO(OP,FADOP) \
73UNARYFUNC_MACRO_SFS(OP,FADOP) \
74namespace Sacado { \
75 \
76 namespace MP { \
77 template <typename T> class FADOP; \
78 template <typename T> class Expr; \
79 \
80 template <typename T> \
81 KOKKOS_INLINE_FUNCTION \
82 FADOP< T > \
83 OP (const Expr<T>&); \
84 } \
85 \
86} \
87 \
88namespace std { \
89 using Sacado::MP::OP; \
90}
91
93UNARYFUNC_MACRO(log, LogOp)
111UNARYFUNC_MACRO(ceil, CeilOp)
112
113#undef UNARYFUNC_MACRO
114#undef UNARYFUNC_MACRO_SFS
115
116#if STOKHOS_USE_MP_VECTOR_SFS_SPEC
117#define BINARYFUNC_MACRO_SFS(OP,FADOP) \
118namespace Stokhos { \
119 template <typename O, typename T, int N, typename D> \
120 class StaticFixedStorage; \
121} \
122namespace Sacado { \
123 namespace MP { \
124 template <typename S> class Vector; \
125 template <typename O, typename T, int N, typename D> \
126 KOKKOS_INLINE_FUNCTION \
127 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \
128 OP (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >&, \
129 const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >&); \
130 \
131 template <typename O, typename T, int N, typename D> \
132 KOKKOS_INLINE_FUNCTION \
133 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \
134 OP (const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type&, \
135 const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >&); \
136 \
137 template <typename O, typename T, int N, typename D> \
138 KOKKOS_INLINE_FUNCTION \
139 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \
140 OP (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >&, \
141 const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type&); \
142 } \
143}
144#else
145#define BINARYFUNC_MACRO_SFS(OP,FADOP) /* */
146#endif
147
148#define BINARYFUNC_MACRO(OP,FADOP) \
149BINARYFUNC_MACRO_SFS(OP,FADOP) \
150namespace Sacado { \
151 \
152 namespace MP { \
153 template <typename T1, typename T2> class FADOP; \
154 template <typename T> class Expr; \
155 \
156 template <typename T1, typename T2> \
157 KOKKOS_INLINE_FUNCTION \
158 FADOP< T1, T2 > \
159 OP (const Expr<T1>&, \
160 const Expr<T2>&); \
161 \
162 template <typename T> \
163 KOKKOS_INLINE_FUNCTION \
164 FADOP< typename T::value_type, T > \
165 OP (const typename T::value_type&, \
166 const Expr<T>&); \
167 \
168 template <typename T> \
169 KOKKOS_INLINE_FUNCTION \
170 FADOP< T, typename T::value_type > \
171 OP (const Expr<T>&, \
172 const typename T::value_type&); \
173 } \
174} \
175 \
176namespace std { \
177 using Sacado::MP::OP; \
178}
179
181BINARYFUNC_MACRO(pow, PowerOp)
184
185#undef BINARYFUNC_MACRO
186#undef BINARYFUNC_MACRO_SFS
187
188#endif
189
190#ifdef HAVE_STOKHOS_PCE_SCALAR_TYPE
191
192#define UNARYFUNC_MACRO(OP,FADOP) \
193namespace Sacado { \
194 \
195 namespace UQ { \
196 template <typename S> class PCE; \
197 template <typename S> \
198 KOKKOS_INLINE_FUNCTION \
199 PCE<S> OP (const PCE<S>&); \
200 } \
201} \
202 \
203namespace std { \
204 using Sacado::UQ::OP; \
205}
206
208UNARYFUNC_MACRO(log, LogOp)
226UNARYFUNC_MACRO(ceil, CeilOp)
227
228#undef UNARYFUNC_MACRO
229
230#define BINARYFUNC_MACRO(OP) \
231namespace Sacado { \
232 \
233 namespace UQ { \
234 template <typename S> class PCE; \
235 template <typename S> \
236 KOKKOS_INLINE_FUNCTION \
237 PCE<S> OP (const PCE<S>&, const PCE<S>&); \
238 template <typename S> \
239 KOKKOS_INLINE_FUNCTION \
240 PCE<S> OP (const typename PCE<S>::value_type&, const PCE<S>&); \
241 template <typename S> \
242 KOKKOS_INLINE_FUNCTION \
243 PCE<S> OP (const PCE<S>&, const typename PCE<S>::value_type&); \
244 } \
245} \
246 \
247namespace std { \
248 using Sacado::UQ::OP; \
249}
250
251BINARYFUNC_MACRO(atan2)
253
254#undef BINARYFUNC_MACRO
255
256#define BINARYFUNC_MACRO(OP) \
257namespace Sacado { \
258 \
259 namespace UQ { \
260 template <typename S> class PCE; \
261 template <typename S> \
262 KOKKOS_INLINE_FUNCTION \
263 PCE<S> OP (const typename S::value_type&, const PCE<S>&); \
264 template <typename S> \
265 KOKKOS_INLINE_FUNCTION \
266 PCE<S> OP (const PCE<S>&, const typename S::value_type&); \
267 } \
268} \
269 \
270namespace std { \
271 using Sacado::UQ::OP; \
272}
273
276
277#undef BINARYFUNC_MACRO
278
279#endif
280
281#endif // STOKHOS_SACADO_KOKKOS_MATHFUNCTIONS_HPP
expr expr SinOp
expr expr SinhOp
expr expr SqrtOp
expr expr ACosOp
expr expr ATanOp
expr2 j expr1 expr1 expr2 expr2 j expr1 c c c c MinOp
expr expr ACoshOp
expr expr ASinOp
expr expr TanhOp
expr expr TanOp
expr expr CoshOp
expr expr ASinhOp
expr1 expr1 expr1 expr2 expr1 expr1 c expr2 expr1 c expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 j expr1 expr1 expr1 expr1 j expr1 c *expr2 expr1 c expr1 c expr1 c expr1 expr1 expr1 expr1 j *expr1 expr2 expr1 expr1 j *expr1 c expr2 expr1 c expr1 expr2 expr1 expr2 expr1 Atan2Op
expr expr AbsOp
expr expr ATanhOp
expr expr expr expr ExpOp
expr expr CosOp
expr2 j expr1 expr1 expr2 expr2 j expr1 c c c c MaxOp
#define UNARYFUNC_MACRO(OP, FADOP)
#define BINARYFUNC_MACRO(OP, FADOP)