32 #ifndef SACADO_FAD_SIMPLEFADOPS_HPP
33 #define SACADO_FAD_SIMPLEFADOPS_HPP
42 template <
typename ValueT>
48 template <
typename ValueT>
54 template <
typename ValueT>
61 template <
typename ValueT>
67 template <
typename ValueT>
74 template <
typename ValueT>
78 ValueT t2 = 1.0/(2.0*t1);
82 template <
typename ValueT>
86 ValueT t2 = 1.0/(3.0*t1*t1);
90 template <
typename ValueT>
96 template <
typename ValueT>
102 template <
typename ValueT>
106 ValueT t2 = 1.0 + t1*t1;
110 template <
typename ValueT>
117 template <
typename ValueT>
124 template <
typename ValueT>
128 1.0/(1.0 + a.
val()*a.
val()));
131 template <
typename ValueT>
137 template <
typename ValueT>
143 template <
typename ValueT>
150 template <
typename ValueT>
157 template <
typename ValueT>
164 template <
typename ValueT>
168 1.0 /(1.0 - a.
val()*a.
val()));
171 template <
typename ValueT>
180 template <
typename ValueT>
189 template <
typename ValueT>
196 for (
int i=0;
i<sz;
i++)
199 for (
int i=0;
i<sz;
i++)
202 for (
int i=0;
i<sz;
i++)
208 template <
typename ValueT>
215 template <
typename ValueT>
222 template <
typename ValueT>
229 for (
int i=0;
i<sz;
i++)
232 for (
int i=0;
i<sz;
i++)
235 for (
int i=0;
i<sz;
i++)
241 template <
typename ValueT>
248 template <
typename ValueT>
255 template <
typename ValueT>
262 for (
int i=0;
i<sz;
i++)
266 for (
int i=0;
i<sz;
i++)
269 for (
int i=0;
i<sz;
i++)
275 template <
typename ValueT>
282 template <
typename ValueT>
289 template <
typename ValueT>
296 ValueT t = b.
val()*b.
val();
297 for (
int i=0;
i<sz;
i++)
302 for (
int i=0;
i<sz;
i++)
306 for (
int i=0;
i<sz;
i++)
313 template <
typename ValueT>
320 template <
typename ValueT>
327 template <
typename ValueT>
335 if (a.
val() != value_type(0)) {
338 for (
int i=0;
i<sz;
i++)
344 if (b.
val() == value_type(1)) {
345 for (
int i=0;
i<sz;
i++)
348 else if (a.
val() != value_type(0)) {
350 for (
int i=0;
i<sz;
i++)
355 if (a.
val() != value_type(0)) {
357 for (
int i=0;
i<sz;
i++)
365 template <
typename ValueT>
371 if (a != value_type(0))
377 template <
typename ValueT>
383 if (b == value_type(1))
385 else if (a.
val() != value_type(0))
391 template <
typename ValueT>
399 ValueT t1 = b.
val()/t;
400 ValueT t2 = a.
val()/t;
401 for (
int i=0;
i<sz;
i++)
407 for (
int i=0;
i<sz;
i++)
412 for (
int i=0;
i<sz;
i++)
419 template <
typename ValueT>
424 -a/(a*a + b.
val()*b.
val()));
427 template <
typename ValueT>
432 b/(a.
val()*a.
val() + b*b));
435 template <
typename ValueT>
443 for (
int i=0;
i<sz;
i++)
446 for (
int i=0;
i<sz;
i++)
451 for (
int i=0;
i<sz;
i++)
454 for (
int i=0;
i<sz;
i++)
459 for (
int i=0;
i<sz;
i++)
462 for (
int i=0;
i<sz;
i++)
469 template <
typename ValueT>
484 template <
typename ValueT>
499 template <
typename ValueT>
507 for (
int i=0;
i<sz;
i++)
510 for (
int i=0;
i<sz;
i++)
515 for (
int i=0;
i<sz;
i++)
518 for (
int i=0;
i<sz;
i++)
523 for (
int i=0;
i<sz;
i++)
526 for (
int i=0;
i<sz;
i++)
533 template <
typename ValueT>
548 template <
typename ValueT>
569 #define FAD_RELOP_MACRO(OP) \
572 template <typename ValueT> \
574 operator OP (const SimpleFad<ValueT>& a, \
575 const SimpleFad<ValueT>& b) \
577 return a.val() OP b.val(); \
580 template <typename ValueT> \
582 operator OP (const ValueT& a, \
583 const SimpleFad<ValueT>& b) \
585 return a OP b.val(); \
588 template <typename ValueT> \
590 operator OP (const SimpleFad<ValueT>& a, \
593 return a.val() OP b; \
609 #undef FAD_RELOP_MACRO
615 template <
typename ValueT>
630 template <
typename T>
632 bool is_zero = (x.
val() == 0.0);
634 is_zero = is_zero && (x.
dx(
i) == 0.0);
642 #define FAD_BOOL_MACRO(OP) \
645 template <typename T1, typename T2> \
647 operator OP (const SimpleFad<T1>& expr1, \
648 const SimpleFad<T2>& expr2) \
650 return toBool(expr1) OP toBool(expr2); \
653 template <typename T2> \
655 operator OP (const typename SimpleFad<T2>::value_type& a, \
656 const SimpleFad<T2>& expr2) \
658 return a OP toBool(expr2); \
661 template <typename T1> \
663 operator OP (const SimpleFad<T1>& expr1, \
664 const typename SimpleFad<T1>::value_type& b) \
666 return toBool(expr1) OP b; \
674 #undef FAD_BOOL_MACRO
682 template <
typename ValueT>
685 os << x.
val() <<
" [";
687 for (
int i=0;
i< x.
size();
i++) {
688 os <<
" " << x.
dx(
i);
699 #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)