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; \
81 #undef UNARYFUNC_MACRO
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_KOKKOS)
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;
244 #endif // SACADO_FAD_EXP_MATHFUNCTIONS_HPP
expr2 expr1 expr2 expr2 c *expr2 c *expr1 c *expr2 c *expr1 MaxOp
#define BINARYFUNC_MACRO(OP, FADOP)
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
#define UNARYFUNC_MACRO(OP, FADOP)
SimpleFad< ValueT > min(const SimpleFad< ValueT > &a, const SimpleFad< ValueT > &b)
atan2(expr1.val(), expr2.val())
SACADO_INLINE_FUNCTION T safe_sqrt(const T &x)
SimpleFad< ValueT > max(const SimpleFad< ValueT > &a, const SimpleFad< ValueT > &b)
SACADO_INLINE_FUNCTION mpl::enable_if_c< ExprLevel< Expr< T1 > >::value==ExprLevel< Expr< T2 > >::value, Expr< PowerOp< Expr< T1 >, Expr< T2 > > > >::type pow(const Expr< T1 > &expr1, const Expr< T2 > &expr2)
#define SACADO_INLINE_FUNCTION
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