30#ifndef SACADO_FAD_EXP_MATHFUNCTIONS_HPP
31#define SACADO_FAD_EXP_MATHFUNCTIONS_HPP
40#define UNARYFUNC_MACRO(OP,FADOP) \
45 template <typename T> class Expr; \
46 template <typename T> \
47 SACADO_INLINE_FUNCTION \
48 FADOP< typename Expr<T>::derived_type, \
49 typename T::expr_spec_type > \
50 OP (const Expr<T>&); \
57 using Sacado::Fad::Exp::OP; \
83#define BINARYFUNC_MACRO(OP,FADOP) \
88 template <typename T> class Expr; \
89 template <typename T> struct IsFadExpr; \
90 template <typename T> struct ExprLevel; \
91 template <typename T1, typename T2> \
92 SACADO_INLINE_FUNCTION \
93 SACADO_FAD_EXP_OP_ENABLE_EXPR_EXPR(FADOP) \
94 OP (const T1&, const T2&); \
96 template <typename T> \
97 SACADO_INLINE_FUNCTION \
98 FADOP< typename T::value_type, typename Expr<T>::derived_type, \
99 true, false, typename T::expr_spec_type > \
100 OP (const typename T::value_type&, const Expr<T>&); \
102 template <typename T> \
103 SACADO_INLINE_FUNCTION \
104 FADOP< typename Expr<T>::derived_type, typename T::value_type, \
105 false, true, typename T::expr_spec_type > \
106 OP (const Expr<T>&, const typename T::value_type&); \
108 template <typename T> \
109 SACADO_INLINE_FUNCTION \
110 SACADO_FAD_EXP_OP_ENABLE_SCALAR_EXPR(FADOP) \
111 OP (const typename T::scalar_type&, const Expr<T>&); \
113 template <typename T> \
114 SACADO_INLINE_FUNCTION \
115 SACADO_FAD_EXP_OP_ENABLE_EXPR_SCALAR(FADOP) \
116 OP (const Expr<T>&, const typename T::scalar_type&); \
123 using Sacado::Fad::Exp::OP; \
131#undef BINARYFUNC_MACRO
133#if defined(HAVE_SACADO_KOKKOSCORE)
138 template <
typename S>
class GeneralFad;
139 template <
typename ValT,
unsigned sl,
unsigned ss,
typename U>
142 template <
typename S>
144 void atomic_add(GeneralFad<S>* dst,
const GeneralFad<S>&
x);
145 template <
typename ValT,
unsigned sl,
unsigned ss,
typename U,
typename T>
147 void atomic_add(ViewFadPtr<ValT,sl,ss,U> dst,
const Expr<T>&
x);
149 template <
typename S>
151 atomic_max_fetch(GeneralFad<S>* dest,
const GeneralFad<S>&
val);
152 template <
typename ValT,
unsigned sl,
unsigned ss,
typename U,
typename T>
154 atomic_max_fetch(ViewFadPtr<ValT,sl,ss,U> dest,
const Expr<T>&
val);
155 template <
typename S>
157 atomic_min_fetch(GeneralFad<S>* dest,
const GeneralFad<S>&
val);
158 template <
typename ValT,
unsigned sl,
unsigned ss,
typename U,
typename T>
160 atomic_min_fetch(ViewFadPtr<ValT,sl,ss,U> dest,
const Expr<T>&
val);
161 template <
typename S>
163 atomic_add_fetch(GeneralFad<S>* dst,
const GeneralFad<S>&
x);
164 template <
typename ValT,
unsigned sl,
unsigned ss,
typename U,
typename T>
166 atomic_add_fetch(ViewFadPtr<ValT,sl,ss,U> dst,
const Expr<T>&
x);
167 template <
typename S>
169 atomic_sub_fetch(GeneralFad<S>* dest,
const GeneralFad<S>&
val);
170 template <
typename ValT,
unsigned sl,
unsigned ss,
typename U,
typename T>
172 atomic_sub_fetch(ViewFadPtr<ValT,sl,ss,U> dest,
const Expr<T>&
val);
173 template <
typename S>
175 atomic_mul_fetch(GeneralFad<S>* dest,
const GeneralFad<S>&
val);
176 template <
typename ValT,
unsigned sl,
unsigned ss,
typename U,
typename T>
178 atomic_mul_fetch(ViewFadPtr<ValT,sl,ss,U> dest,
const Expr<T>&
val);
179 template <
typename S>
181 atomic_div_fetch(GeneralFad<S>* dest,
const GeneralFad<S>&
val);
182 template <
typename ValT,
unsigned sl,
unsigned ss,
typename U,
typename T>
184 atomic_div_fetch(ViewFadPtr<ValT,sl,ss,U> dest,
const Expr<T>&
val);
186 template <
typename S>
188 atomic_fetch_max(GeneralFad<S>* dest,
const GeneralFad<S>&
val);
189 template <
typename ValT,
unsigned sl,
unsigned ss,
typename U,
typename T>
191 atomic_fetch_max(ViewFadPtr<ValT,sl,ss,U> dest,
const Expr<T>&
val);
192 template <
typename S>
194 atomic_fetch_min(GeneralFad<S>* dest,
const GeneralFad<S>&
val);
195 template <
typename ValT,
unsigned sl,
unsigned ss,
typename U,
typename T>
197 atomic_fetch_min(ViewFadPtr<ValT,sl,ss,U> dest,
const Expr<T>&
val);
198 template <
typename S>
200 atomic_fetch_add(GeneralFad<S>* dst,
const GeneralFad<S>&
x);
201 template <
typename ValT,
unsigned sl,
unsigned ss,
typename U,
typename T>
203 atomic_fetch_add(ViewFadPtr<ValT,sl,ss,U> dst,
const Expr<T>&
x);
204 template <
typename S>
206 atomic_fetch_sub(GeneralFad<S>* dest,
const GeneralFad<S>&
val);
207 template <
typename ValT,
unsigned sl,
unsigned ss,
typename U,
typename T>
209 atomic_fetch_sub(ViewFadPtr<ValT,sl,ss,U> dest,
const Expr<T>&
val);
210 template <
typename S>
212 atomic_fetch_mul(GeneralFad<S>* dest,
const GeneralFad<S>&
val);
213 template <
typename ValT,
unsigned sl,
unsigned ss,
typename U,
typename T>
215 atomic_fetch_mul(ViewFadPtr<ValT,sl,ss,U> dest,
const Expr<T>&
val);
216 template <
typename S>
218 atomic_fetch_div(GeneralFad<S>* dest,
const GeneralFad<S>&
val);
219 template <
typename ValT,
unsigned sl,
unsigned ss,
typename U,
typename T>
221 atomic_fetch_div(ViewFadPtr<ValT,sl,ss,U> dest,
const Expr<T>&
val);
227 using Sacado::Fad::Exp::atomic_add;
228 using Sacado::Fad::Exp::atomic_max_fetch;
229 using Sacado::Fad::Exp::atomic_min_fetch;
230 using Sacado::Fad::Exp::atomic_add_fetch;
231 using Sacado::Fad::Exp::atomic_sub_fetch;
232 using Sacado::Fad::Exp::atomic_mul_fetch;
233 using Sacado::Fad::Exp::atomic_div_fetch;
234 using Sacado::Fad::Exp::atomic_fetch_max;
235 using Sacado::Fad::Exp::atomic_fetch_min;
236 using Sacado::Fad::Exp::atomic_fetch_add;
237 using Sacado::Fad::Exp::atomic_fetch_sub;
238 using Sacado::Fad::Exp::atomic_fetch_mul;
239 using Sacado::Fad::Exp::atomic_fetch_div;
#define SACADO_INLINE_FUNCTION
#define UNARYFUNC_MACRO(OP, FADOP)
#define BINARYFUNC_MACRO(OP, FADOP)
expr2 expr1 expr2 expr2 c *expr2 c *expr1 c *expr2 c *expr1 MaxOp
expr1 expr1 expr2 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 expr1 expr1 c *expr2 expr1 c *expr2 expr1 c *expr2 expr1 expr1 expr1 expr2 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 Atan2Op
expr expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c *expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr2 expr1 expr2 expr1 PowerOp