10 #ifndef SACADO_FAD_SIMPLEFADOPS_HPP
11 #define SACADO_FAD_SIMPLEFADOPS_HPP
20 template <
typename ValueT>
26 template <
typename ValueT>
32 template <
typename ValueT>
39 template <
typename ValueT>
45 template <
typename ValueT>
52 template <
typename ValueT>
56 ValueT t2 = 1.0/(2.0*t1);
60 template <
typename ValueT>
64 ValueT t2 = 1.0/(3.0*t1*t1);
68 template <
typename ValueT>
74 template <
typename ValueT>
80 template <
typename ValueT>
84 ValueT t2 = 1.0 + t1*t1;
88 template <
typename ValueT>
95 template <
typename ValueT>
102 template <
typename ValueT>
106 1.0/(1.0 + a.
val()*a.
val()));
109 template <
typename ValueT>
115 template <
typename ValueT>
121 template <
typename ValueT>
128 template <
typename ValueT>
135 template <
typename ValueT>
142 template <
typename ValueT>
146 1.0 /(1.0 - a.
val()*a.
val()));
149 template <
typename ValueT>
158 template <
typename ValueT>
167 template <
typename ValueT>
174 for (
int i=0;
i<sz;
i++)
177 for (
int i=0;
i<sz;
i++)
180 for (
int i=0;
i<sz;
i++)
186 template <
typename ValueT>
193 template <
typename ValueT>
200 template <
typename ValueT>
207 for (
int i=0;
i<sz;
i++)
210 for (
int i=0;
i<sz;
i++)
213 for (
int i=0;
i<sz;
i++)
219 template <
typename ValueT>
226 template <
typename ValueT>
233 template <
typename ValueT>
240 for (
int i=0;
i<sz;
i++)
244 for (
int i=0;
i<sz;
i++)
247 for (
int i=0;
i<sz;
i++)
253 template <
typename ValueT>
260 template <
typename ValueT>
267 template <
typename ValueT>
274 ValueT t = b.
val()*b.
val();
275 for (
int i=0;
i<sz;
i++)
280 for (
int i=0;
i<sz;
i++)
284 for (
int i=0;
i<sz;
i++)
291 template <
typename ValueT>
298 template <
typename ValueT>
305 template <
typename ValueT>
313 if (a.
val() != value_type(0)) {
316 for (
int i=0;
i<sz;
i++)
322 if (b.
val() == value_type(1)) {
323 for (
int i=0;
i<sz;
i++)
326 else if (a.
val() != value_type(0)) {
328 for (
int i=0;
i<sz;
i++)
333 if (a.
val() != value_type(0)) {
335 for (
int i=0;
i<sz;
i++)
343 template <
typename ValueT>
349 if (a != value_type(0))
355 template <
typename ValueT>
361 if (b == value_type(1))
363 else if (a.
val() != value_type(0))
369 template <
typename ValueT>
377 ValueT t1 = b.
val()/t;
378 ValueT t2 = a.
val()/t;
379 for (
int i=0;
i<sz;
i++)
385 for (
int i=0;
i<sz;
i++)
390 for (
int i=0;
i<sz;
i++)
397 template <
typename ValueT>
402 -a/(a*a + b.
val()*b.
val()));
405 template <
typename ValueT>
410 b/(a.
val()*a.
val() + b*b));
413 template <
typename ValueT>
421 for (
int i=0;
i<sz;
i++)
424 for (
int i=0;
i<sz;
i++)
429 for (
int i=0;
i<sz;
i++)
432 for (
int i=0;
i<sz;
i++)
437 for (
int i=0;
i<sz;
i++)
440 for (
int i=0;
i<sz;
i++)
447 template <
typename ValueT>
462 template <
typename ValueT>
477 template <
typename ValueT>
485 for (
int i=0;
i<sz;
i++)
488 for (
int i=0;
i<sz;
i++)
493 for (
int i=0;
i<sz;
i++)
496 for (
int i=0;
i<sz;
i++)
501 for (
int i=0;
i<sz;
i++)
504 for (
int i=0;
i<sz;
i++)
511 template <
typename ValueT>
526 template <
typename ValueT>
547 #define FAD_RELOP_MACRO(OP) \
550 template <typename ValueT> \
552 operator OP (const SimpleFad<ValueT>& a, \
553 const SimpleFad<ValueT>& b) \
555 return a.val() OP b.val(); \
558 template <typename ValueT> \
560 operator OP (const ValueT& a, \
561 const SimpleFad<ValueT>& b) \
563 return a OP b.val(); \
566 template <typename ValueT> \
568 operator OP (const SimpleFad<ValueT>& a, \
571 return a.val() OP b; \
587 #undef FAD_RELOP_MACRO
593 template <
typename ValueT>
608 template <
typename T>
610 bool is_zero = (x.
val() == 0.0);
612 is_zero = is_zero && (x.
dx(
i) == 0.0);
620 #define FAD_BOOL_MACRO(OP) \
623 template <typename T1, typename T2> \
625 operator OP (const SimpleFad<T1>& expr1, \
626 const SimpleFad<T2>& expr2) \
628 return toBool(expr1) OP toBool(expr2); \
631 template <typename T2> \
633 operator OP (const typename SimpleFad<T2>::value_type& a, \
634 const SimpleFad<T2>& expr2) \
636 return a OP toBool(expr2); \
639 template <typename T1> \
641 operator OP (const SimpleFad<T1>& expr1, \
642 const typename SimpleFad<T1>::value_type& b) \
644 return toBool(expr1) OP b; \
652 #undef FAD_BOOL_MACRO
660 template <
typename ValueT>
663 os << x.
val() <<
" [";
665 for (
int i=0;
i< x.
size();
i++) {
666 os <<
" " << x.
dx(
i);
677 #endif // SACADO_FAD_SIMPLEFADOPS_HPP
SimpleFad< ValueT > atan2(const SimpleFad< ValueT > &a, const SimpleFad< ValueT > &b)
SimpleFad< ValueT > abs(const SimpleFad< ValueT > &a)
SimpleFad< ValueT > sqrt(const SimpleFad< ValueT > &a)
SimpleFad< ValueT > asin(const SimpleFad< ValueT > &a)
Forward-mode AD class using dynamic memory allocation but no expression templates.
SimpleFad< ValueT > acosh(const SimpleFad< ValueT > &a)
SimpleFad< ValueT > log(const SimpleFad< ValueT > &a)
SACADO_INLINE_FUNCTION bool hasFastAccess() const
Returns true if derivative array is not empty.
SACADO_INLINE_FUNCTION bool toBool(const Expr< ExprT > &x)
SimpleFad< ValueT > exp(const SimpleFad< ValueT > &a)
SimpleFad< ValueT > atan(const SimpleFad< ValueT > &a)
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 expr1 expr1 expr2 expr1 expr2 expr1 expr1 expr1 c
SimpleFad< ValueT > fabs(const SimpleFad< ValueT > &a)
SimpleFad< ValueT > log10(const SimpleFad< ValueT > &a)
#define FAD_RELOP_MACRO(OP)
SimpleFad< ValueT > min(const SimpleFad< ValueT > &a, const SimpleFad< ValueT > &b)
SACADO_INLINE_FUNCTION ValueT & fastAccessDx(int i)
Returns derivative component i without bounds checking.
SimpleFad< ValueT > sin(const SimpleFad< ValueT > &a)
SACADO_INLINE_FUNCTION const ValueT & val() const
Returns value.
SimpleFad< ValueT > atanh(const SimpleFad< ValueT > &a)
SimpleFad< ValueT > sinh(const SimpleFad< ValueT > &a)
SimpleFad< ValueT > operator/(const SimpleFad< ValueT > &a, const SimpleFad< ValueT > &b)
atan2(expr1.val(), expr2.val())
SimpleFad< ValueT > cbrt(const SimpleFad< ValueT > &a)
#define FAD_BOOL_MACRO(OP)
std::ostream & operator<<(std::ostream &os, const Expr< ExprT > &x)
GeneralFadType::value_type value_type
Typename of values.
SimpleFad< ValueT > tan(const SimpleFad< ValueT > &a)
SACADO_INLINE_FUNCTION int size() const
Returns number of derivative components.
SACADO_INLINE_FUNCTION bool operator!(const Expr< ExprT > &expr)
SimpleFad< ValueT > cos(const SimpleFad< ValueT > &a)
SimpleFad< ValueT > cosh(const SimpleFad< ValueT > &a)
SimpleFad< ValueT > operator*(const SimpleFad< ValueT > &a, const SimpleFad< ValueT > &b)
SimpleFad< ValueT > max(const SimpleFad< ValueT > &a, const SimpleFad< ValueT > &b)
SimpleFad< ValueT > operator-(const SimpleFad< ValueT > &a)
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)
SimpleFad< ValueT > acos(const SimpleFad< ValueT > &a)
SimpleFad< ValueT > tanh(const SimpleFad< ValueT > &a)
SACADO_INLINE_FUNCTION const ValueT * dx() const
Returns derivative array.
SimpleFad< ValueT > asinh(const SimpleFad< ValueT > &a)
SimpleFad< ValueT > operator+(const SimpleFad< ValueT > &a)