52 #ifndef SACADO_FAD_OPS_HPP 53 #define SACADO_FAD_OPS_HPP 59 #define FAD_UNARYOP_MACRO(OPNAME,OP,VALUE,DX,FASTACCESSDX) \ 63 template <typename ExprT> \ 66 template <typename ExprT> \ 67 struct ExprSpec< OP<ExprT> > { \ 68 typedef typename ExprSpec<ExprT>::type type; \ 71 template <typename ExprT> \ 72 class Expr< OP<ExprT>,ExprSpecDefault > { \ 75 typedef typename ExprT::value_type value_type; \ 76 typedef typename ExprT::scalar_type scalar_type; \ 77 typedef typename ExprT::base_expr_type base_expr_type; \ 79 KOKKOS_INLINE_FUNCTION \ 80 Expr(const ExprT& expr_) : expr(expr_) {} \ 82 KOKKOS_INLINE_FUNCTION \ 83 int size() const { return expr.size(); } \ 85 KOKKOS_INLINE_FUNCTION \ 86 bool hasFastAccess() const { return expr.hasFastAccess(); } \ 88 KOKKOS_INLINE_FUNCTION \ 89 bool isPassive() const { return expr.isPassive();} \ 91 KOKKOS_INLINE_FUNCTION \ 92 bool updateValue() const { return expr.updateValue(); } \ 94 KOKKOS_INLINE_FUNCTION \ 95 value_type val() const { \ 99 KOKKOS_INLINE_FUNCTION \ 100 value_type dx(int i) const { \ 104 KOKKOS_INLINE_FUNCTION \ 105 value_type fastAccessDx(int i) const { \ 106 return FASTACCESSDX; \ 114 template <typename T> \ 115 KOKKOS_INLINE_FUNCTION \ 116 Expr< OP< Expr<T> > > \ 117 OPNAME (const Expr<T>& expr) \ 119 typedef OP< Expr<T> > expr_t; \ 121 return Expr<expr_t>(expr); \ 131 expr.fastAccessDx(i))
136 -expr.fastAccessDx(i))
141 std::exp(expr.val())*expr.fastAccessDx(i))
145 expr.dx(i)/expr.val(),
146 expr.fastAccessDx(i)/expr.val())
150 expr.dx(i)/(
std::log(value_type(10))*expr.val()),
151 expr.fastAccessDx(i) / (
std::log(value_type(10))*expr.val()))
189 expr.
dx(i)/(value_type(1)+expr.
val()*expr.
val()),
211 (expr.
val()+value_type(1))),
213 (expr.
val()+value_type(1))))
223 expr.
dx(i)/(value_type(1)-expr.
val()*expr.
val()),
229 expr.
val() >= 0 ? value_type(+expr.
dx(i)) :
230 value_type(-expr.
dx(i)),
236 expr.
val() >= 0 ? value_type(+expr.
dx(i)) :
237 value_type(-expr.
dx(i)),
240 #ifdef HAVE_SACADO_CXX11 243 std::cbrt(expr.val()),
244 expr.dx(i)/(value_type(3)*std::cbrt(expr.val()*expr.val())),
245 expr.fastAccessDx(i)/(value_type(3)*std::cbrt(expr.val()*expr.val())))
250 #define
FAD_BINARYOP_MACRO(OPNAME,OP,VALUE,DX,FASTACCESSDX,VAL_CONST_DX_1,VAL_CONST_DX_2,CONST_DX_1,CONST_DX_2,CONST_FASTACCESSDX_1,CONST_FASTACCESSDX_2) \
254 template <typename ExprT1, typename ExprT2> \
257 template <typename ExprT1, typename ExprT2> \
258 struct ExprSpec< OP< ExprT1, ExprT2 > > { \
259 typedef
typename ExprSpec<ExprT1>::type type; \
262 template <typename ExprT1, typename ExprT2> \
263 class Expr< OP< ExprT1, ExprT2 >,ExprSpecDefault > { \
267 typedef
typename ExprT1::value_type value_type_1; \
268 typedef
typename ExprT2::value_type value_type_2; \
270 value_type_2>::type value_type; \
272 typedef
typename ExprT1::scalar_type scalar_type_1; \
273 typedef
typename ExprT2::scalar_type scalar_type_2; \
275 scalar_type_2>::type scalar_type; \
277 typedef
typename ExprT1::base_expr_type base_expr_type_1; \
278 typedef
typename ExprT2::base_expr_type base_expr_type_2; \
280 base_expr_type_2>::type base_expr_type; \
282 KOKKOS_INLINE_FUNCTION \
283 Expr(
const ExprT1& expr1_,
const ExprT2& expr2_) : \
284 expr1(expr1_), expr2(expr2_) {} \
286 KOKKOS_INLINE_FUNCTION \
288 int sz1 = expr1.size(), sz2 = expr2.size(); \
289 return sz1 > sz2 ? sz1 : sz2; \
292 KOKKOS_INLINE_FUNCTION \
293 bool hasFastAccess()
const { \
294 return expr1.hasFastAccess() && expr2.hasFastAccess(); \
297 KOKKOS_INLINE_FUNCTION \
298 bool isPassive()
const { \
299 return expr1.isPassive() && expr2.isPassive(); \
302 KOKKOS_INLINE_FUNCTION \
303 bool updateValue()
const { \
304 return expr1.updateValue() && expr2.updateValue(); \
307 KOKKOS_INLINE_FUNCTION \
308 const value_type
val()
const { \
312 KOKKOS_INLINE_FUNCTION \
313 const value_type
dx(
int i)
const { \
317 KOKKOS_INLINE_FUNCTION \
319 return FASTACCESSDX; \
324 const ExprT1& expr1; \
325 const ExprT2& expr2; \
329 template <typename ExprT1, typename T2> \
330 struct ExprSpec< OP< ExprT1, ConstExpr<T2> > > { \
331 typedef
typename ExprSpec<ExprT1>::type type; \
334 template <typename ExprT1, typename T2> \
335 class Expr< OP< ExprT1, ConstExpr<T2> >,ExprSpecDefault > { \
339 typedef ConstExpr<T2> ConstT; \
340 typedef ConstExpr<T2> ExprT2; \
341 typedef
typename ExprT1::value_type value_type_1; \
342 typedef
typename ExprT2::value_type value_type_2; \
344 value_type_2>::type value_type; \
346 typedef
typename ExprT1::scalar_type scalar_type_1; \
347 typedef
typename ExprT2::scalar_type scalar_type_2; \
349 scalar_type_2>::type scalar_type; \
351 typedef
typename ExprT1::base_expr_type base_expr_type_1; \
352 typedef
typename ExprT2::base_expr_type base_expr_type_2; \
354 base_expr_type_2>::type base_expr_type; \
356 KOKKOS_INLINE_FUNCTION \
357 Expr(
const ExprT1& expr1_,
const ConstT& c_) : \
358 expr1(expr1_),
c(c_) {} \
360 KOKKOS_INLINE_FUNCTION \
362 return expr1.size(); \
365 KOKKOS_INLINE_FUNCTION \
366 bool hasFastAccess()
const { \
367 return expr1.hasFastAccess(); \
370 KOKKOS_INLINE_FUNCTION \
371 bool isPassive()
const { \
372 return expr1.isPassive(); \
375 KOKKOS_INLINE_FUNCTION \
376 bool updateValue()
const {
return expr1.updateValue(); } \
378 KOKKOS_INLINE_FUNCTION \
379 const value_type
val()
const { \
380 return VAL_CONST_DX_2; \
383 KOKKOS_INLINE_FUNCTION \
384 const value_type
dx(
int i)
const { \
388 KOKKOS_INLINE_FUNCTION \
390 return CONST_FASTACCESSDX_2; \
395 const ExprT1& expr1; \
399 template <typename T1, typename ExprT2> \
400 struct ExprSpec< OP< ConstExpr<T1>, ExprT2 > > { \
401 typedef
typename ExprSpec<ExprT2>::type type; \
404 template <typename T1, typename ExprT2> \
405 class Expr< OP< ConstExpr<T1>, ExprT2 >,ExprSpecDefault > { \
409 typedef ConstExpr<T1> ConstT; \
410 typedef ConstExpr<T1> ExprT1; \
411 typedef
typename ExprT1::value_type value_type_1; \
412 typedef
typename ExprT2::value_type value_type_2; \
414 value_type_2>::type value_type; \
416 typedef
typename ExprT1::scalar_type scalar_type_1; \
417 typedef
typename ExprT2::scalar_type scalar_type_2; \
419 scalar_type_2>::type scalar_type; \
421 typedef
typename ExprT1::base_expr_type base_expr_type_1; \
422 typedef
typename ExprT2::base_expr_type base_expr_type_2; \
424 base_expr_type_2>::type base_expr_type; \
427 KOKKOS_INLINE_FUNCTION \
428 Expr(
const ConstT& c_,
const ExprT2& expr2_) : \
429 c(c_), expr2(expr2_) {} \
431 KOKKOS_INLINE_FUNCTION \
433 return expr2.size(); \
436 KOKKOS_INLINE_FUNCTION \
437 bool hasFastAccess()
const { \
438 return expr2.hasFastAccess(); \
441 KOKKOS_INLINE_FUNCTION \
442 bool isPassive()
const { \
443 return expr2.isPassive(); \
446 KOKKOS_INLINE_FUNCTION \
447 bool updateValue()
const {
return expr2.updateValue(); } \
449 KOKKOS_INLINE_FUNCTION \
450 const value_type
val()
const { \
451 return VAL_CONST_DX_1; \
454 KOKKOS_INLINE_FUNCTION \
455 const value_type
dx(
int i)
const { \
459 KOKKOS_INLINE_FUNCTION \
461 return CONST_FASTACCESSDX_1; \
467 const ExprT2& expr2; \
470 template <typename T1, typename T2>
\ 473 OPNAME (
const T1& expr1,
const T2& expr2) \
475 typedef OP< T1, T2 > expr_t; \
477 return Expr<expr_t>(expr1, expr2); \
480 template <typename T> \
481 KOKKOS_INLINE_FUNCTION \
482 Expr< OP< Expr<T>, Expr<T> > > \
483 OPNAME (
const Expr<T>& expr1,
const Expr<T>& expr2) \
485 typedef OP< Expr<T>, Expr<T> > expr_t; \
487 return Expr<expr_t>(expr1, expr2); \
490 template <typename T> \
491 KOKKOS_INLINE_FUNCTION \
492 Expr< OP< ConstExpr<typename Expr<T>::value_type>, \
494 OPNAME (
const typename Expr<T>::value_type&
c, \
495 const Expr<T>& expr) \
497 typedef ConstExpr<typename Expr<T>::value_type> ConstT; \
498 typedef OP< ConstT, Expr<T> > expr_t; \
500 return Expr<expr_t>(ConstT(
c), expr); \
503 template <typename T> \
504 KOKKOS_INLINE_FUNCTION \
506 ConstExpr<typename Expr<T>::value_type> > > \
507 OPNAME (
const Expr<T>& expr, \
508 const typename Expr<T>::value_type&
c) \
510 typedef ConstExpr<typename Expr<T>::value_type> ConstT; \
511 typedef OP< Expr<T>, ConstT > expr_t; \
513 return Expr<expr_t>(expr, ConstT(
c)); \
516 template <typename T>
\ 519 OPNAME (
const typename Expr<T>::scalar_type&
c, \
520 const Expr<T>& expr) \
522 typedef ConstExpr<typename Expr<T>::scalar_type> ConstT; \
523 typedef OP< ConstT, Expr<T> > expr_t; \
525 return Expr<expr_t>(ConstT(
c), expr); \
528 template <typename T>
\ 531 OPNAME (
const Expr<T>& expr, \
532 const typename Expr<T>::scalar_type&
c) \
534 typedef ConstExpr<typename Expr<T>::scalar_type> ConstT; \
535 typedef OP< Expr<T>, ConstT > expr_t; \
537 return Expr<expr_t>(expr, ConstT(
c)); \
546 expr1.val() + expr2.val(),
547 expr1.dx(i) + expr2.dx(i),
548 expr1.fastAccessDx(i) + expr2.fastAccessDx(i),
549 c.val() + expr2.val(),
550 expr1.val() +
c.val(),
553 expr2.fastAccessDx(i),
554 expr1.fastAccessDx(i))
557 expr1.val() - expr2.val(),
558 expr1.dx(i) - expr2.dx(i),
559 expr1.fastAccessDx(i) - expr2.fastAccessDx(i),
560 c.val() - expr2.val(),
561 expr1.val() -
c.val(),
564 -expr2.fastAccessDx(i),
565 expr1.fastAccessDx(i))
580 expr1.val() / expr2.val(),
581 (expr1.dx(i)*expr2.val() - expr2.dx(i)*expr1.val()) /
582 (expr2.val()*expr2.val()),
583 (expr1.fastAccessDx(i)*expr2.val() -
584 expr2.fastAccessDx(i)*expr1.val()) /
585 (expr2.val()*expr2.val()),
586 c.val() / expr2.val(),
587 expr1.val() /
c.val(),
588 -expr2.dx(i)*
c.val() / (expr2.val()*expr2.val()),
590 -expr2.fastAccessDx(i)*
c.val() / (expr2.val()*expr2.val()),
591 expr1.fastAccessDx(i)/
c.val())
595 (expr2.val()*expr1.dx(i) - expr1.val()*expr2.dx(i))/
596 (expr1.val()*expr1.val() + expr2.val()*expr2.val()),
597 (expr2.val()*expr1.fastAccessDx(i) - expr1.val()*expr2.fastAccessDx(i))/
598 (expr1.val()*expr1.val() + expr2.val()*expr2.val()),
601 (-
c.val()*expr2.dx(i)) / (
c.val()*
c.val() + expr2.val()*expr2.val()),
602 (
c.val()*expr1.dx(i))/ (expr1.val()*expr1.val() +
c.val()*
c.val()),
603 (-
c.val()*expr2.fastAccessDx(i))/ (
c.val()*
c.val() + expr2.val()*expr2.val()),
604 (
c.val()*expr1.fastAccessDx(i))/ (expr1.val()*expr1.val() +
c.val()*
c.val()))
613 expr1.
val() == value_type(0) ? value_type(0.0) : value_type(
c.
val()*expr1.
dx(i)/expr1.
val()*
std::
pow(expr1.
val(),
c.
val())),
619 expr1.
val() >= expr2.
val() ? expr1.
dx(i) : expr2.
dx(i),
624 c.
val() >= expr2.
val() ? value_type(0) : expr2.
dx(i),
625 expr1.
val() >=
c.
val() ? expr1.
dx(i) : value_type(0),
631 expr1.
val() <= expr2.
val() ? expr1.
dx(i) : expr2.
dx(i),
636 c.
val() <= expr2.
val() ? value_type(0) : expr2.
dx(i),
637 expr1.
val() <=
c.
val() ? expr1.
dx(i) : value_type(0),
642 #undef FAD_BINARYOP_MACRO 647 template <
typename ExprT1,
typename ExprT2>
650 template <
typename ExprT1,
typename ExprT2>
655 template <
typename ExprT1,
typename ExprT2>
660 typedef typename ExprT1::value_type value_type_1;
661 typedef typename ExprT2::value_type value_type_2;
663 value_type_2>::type value_type;
665 typedef typename ExprT1::scalar_type scalar_type_1;
666 typedef typename ExprT2::scalar_type scalar_type_2;
668 scalar_type_2>::type scalar_type;
670 typedef typename ExprT1::base_expr_type base_expr_type_1;
671 typedef typename ExprT2::base_expr_type base_expr_type_2;
673 base_expr_type_2>::type base_expr_type;
676 Expr(
const ExprT1& expr1_,
const ExprT2& expr2_) :
677 expr1(expr1_), expr2(expr2_) {}
681 int sz1 = expr1.size(), sz2 = expr2.size();
682 return sz1 > sz2 ? sz1 : sz2;
686 bool hasFastAccess()
const {
687 return expr1.hasFastAccess() && expr2.hasFastAccess();
691 bool isPassive()
const {
692 return expr1.isPassive() && expr2.isPassive();
696 bool updateValue()
const {
697 return expr1.updateValue() && expr2.updateValue();
701 const value_type
val()
const {
702 return expr1.val()*expr2.val();
706 const value_type
dx(
int i)
const {
707 if (expr1.size() > 0 && expr2.size() > 0)
708 return expr1.val()*expr2.dx(i) + expr1.dx(i)*expr2.val();
709 else if (expr1.size() > 0)
710 return expr1.dx(i)*expr2.val();
712 return expr1.val()*expr2.dx(i);
717 return expr1.val()*expr2.fastAccessDx(i) +
718 expr1.fastAccessDx(i)*expr2.val();
728 template <
typename ExprT1,
typename T2>
733 template <
typename ExprT1,
typename T2>
738 typedef ConstExpr<T2> ConstT;
739 typedef ConstExpr<T2> ExprT2;
740 typedef typename ExprT1::value_type value_type_1;
741 typedef typename ExprT2::value_type value_type_2;
743 value_type_2>::type value_type;
745 typedef typename ExprT1::scalar_type scalar_type_1;
746 typedef typename ExprT2::scalar_type scalar_type_2;
748 scalar_type_2>::type scalar_type;
750 typedef typename ExprT1::base_expr_type base_expr_type_1;
751 typedef typename ExprT2::base_expr_type base_expr_type_2;
753 base_expr_type_2>::type base_expr_type;
756 Expr(
const ExprT1& expr1_,
const ConstT& c_) :
757 expr1(expr1_),
c(c_) {}
765 bool hasFastAccess()
const {
766 return expr1.hasFastAccess();
770 bool isPassive()
const {
771 return expr1.isPassive();
775 bool updateValue()
const {
return expr1.updateValue(); }
778 const value_type
val()
const {
779 return expr1.val()*
c.val();
783 const value_type
dx(
int i)
const {
784 return expr1.dx(i)*
c.val();
789 return expr1.fastAccessDx(i)*
c.val();
798 template <
typename T1,
typename ExprT2>
803 template <
typename T1,
typename ExprT2>
808 typedef ConstExpr<T1> ConstT;
809 typedef ConstExpr<T1> ExprT1;
810 typedef typename ExprT1::value_type value_type_1;
811 typedef typename ExprT2::value_type value_type_2;
813 value_type_2>::type value_type;
815 typedef typename ExprT1::scalar_type scalar_type_1;
816 typedef typename ExprT2::scalar_type scalar_type_2;
818 scalar_type_2>::type scalar_type;
820 typedef typename ExprT1::base_expr_type base_expr_type_1;
821 typedef typename ExprT2::base_expr_type base_expr_type_2;
823 base_expr_type_2>::type base_expr_type;
826 Expr(
const ConstT& c_,
const ExprT2& expr2_) :
827 c(c_), expr2(expr2_) {}
835 bool hasFastAccess()
const {
836 return expr2.hasFastAccess();
840 bool isPassive()
const {
841 return expr2.isPassive();
845 bool updateValue()
const {
return expr2.updateValue(); }
848 const value_type
val()
const {
849 return c.val()*expr2.val();
853 const value_type
dx(
int i)
const {
854 return c.val()*expr2.dx(i);
859 return c.val()*expr2.fastAccessDx(i);
868 template <
typename T1,
typename T2>
873 typedef MultiplicationOp< T1, T2 > expr_t;
875 return Expr<expr_t>(expr1, expr2);
878 template <
typename T>
880 Expr< MultiplicationOp< Expr<T>, Expr<T> > >
881 operator* (
const Expr<T>& expr1,
const Expr<T>& expr2)
883 typedef MultiplicationOp< Expr<T>, Expr<T> > expr_t;
885 return Expr<expr_t>(expr1, expr2);
888 template <
typename T>
890 Expr< MultiplicationOp< ConstExpr<typename Expr<T>::value_type>, Expr<T> > >
891 operator* (
const typename Expr<T>::value_type&
c,
895 typedef MultiplicationOp< ConstT, Expr<T> > expr_t;
897 return Expr<expr_t>(ConstT(
c), expr);
900 template <
typename T>
904 const typename Expr<T>::value_type&
c)
907 typedef MultiplicationOp< Expr<T>, ConstT > expr_t;
909 return Expr<expr_t>(expr, ConstT(
c));
912 template <
typename T>
915 operator* (
const typename Expr<T>::scalar_type&
c,
919 typedef MultiplicationOp< ConstT, Expr<T> > expr_t;
921 return Expr<expr_t>(ConstT(
c), expr);
924 template <
typename T>
928 const typename Expr<T>::scalar_type&
c)
931 typedef MultiplicationOp< Expr<T>, ConstT > expr_t;
933 return Expr<expr_t>(expr, ConstT(
c));
940 #define FAD_RELOP_MACRO(OP) \ 943 template <typename ExprT1, typename ExprT2> \ 944 KOKKOS_INLINE_FUNCTION \ 946 operator OP (const Expr<ExprT1>& expr1, \ 947 const Expr<ExprT2>& expr2) \ 949 return expr1.val() OP expr2.val(); \ 952 template <typename ExprT2> \ 953 KOKKOS_INLINE_FUNCTION \ 955 operator OP (const typename Expr<ExprT2>::value_type& a, \ 956 const Expr<ExprT2>& expr2) \ 958 return a OP expr2.val(); \ 961 template <typename ExprT1> \ 962 KOKKOS_INLINE_FUNCTION \ 964 operator OP (const Expr<ExprT1>& expr1, \ 965 const typename Expr<ExprT1>::value_type& b) \ 967 return expr1.val() OP b; \ 983 #undef FAD_RELOP_MACRO 989 template <
typename ExprT>
1005 template <
typename ExprT>
1007 bool toBool(
const Expr<ExprT>& x) {
1008 bool is_zero = (x.val() == 0.0);
1009 for (
int i=0; i<x.size(); i++)
1010 is_zero = is_zero && (x.dx(i) == 0.0);
1018 #define FAD_BOOL_MACRO(OP) \ 1019 namespace Sacado { \ 1021 template <typename ExprT1, typename ExprT2> \ 1022 KOKKOS_INLINE_FUNCTION \ 1024 operator OP (const Expr<ExprT1>& expr1, \ 1025 const Expr<ExprT2>& expr2) \ 1027 return toBool(expr1) OP toBool(expr2); \ 1030 template <typename ExprT2> \ 1031 KOKKOS_INLINE_FUNCTION \ 1033 operator OP (const typename Expr<ExprT2>::value_type& a, \ 1034 const Expr<ExprT2>& expr2) \ 1036 return a OP toBool(expr2); \ 1039 template <typename ExprT1> \ 1040 KOKKOS_INLINE_FUNCTION \ 1042 operator OP (const Expr<ExprT1>& expr1, \ 1043 const typename Expr<ExprT1>::value_type& b) \ 1045 return toBool(expr1) OP b; \ 1053 #undef FAD_BOOL_MACRO 1061 template <
typename ExprT>
1062 std::ostream& operator << (std::ostream& os, const Expr<ExprT>& x) {
1063 os << x.val() <<
" [";
1065 for (
int i=0; i< x.size(); i++) {
1066 os <<
" " << x.dx(i);
1078 #endif // SACADO_FAD_OPS_HPP
expr expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 SubtractionOp
ScalarType< value_type >::type scalar_type
Typename of scalar's (which may be different from ConstT)
expr expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 MultiplicationOp
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 Atan2Op
#define SACADO_FAD_OP_ENABLE_EXPR_EXPR(OP)
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 MaxOp
SimpleFad< ValueT > atan2(const SimpleFad< ValueT > &a, const SimpleFad< ValueT > &b)
#define SACADO_FAD_OP_ENABLE_SCALAR_EXPR(OP)
SimpleFad< ValueT > sqrt(const SimpleFad< ValueT > &a)
SimpleFad< ValueT > asin(const SimpleFad< ValueT > &a)
bool toBool(const SimpleFad< T > &x)
SimpleFad< ValueT > log(const SimpleFad< ValueT > &a)
#define KOKKOS_INLINE_FUNCTION
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
#define FAD_BOOL_MACRO(OP)
SimpleFad< ValueT > log10(const SimpleFad< ValueT > &a)
SimpleFad< ValueT > min(const SimpleFad< ValueT > &a, const SimpleFad< ValueT > &b)
SimpleFad< ValueT > sin(const SimpleFad< ValueT > &a)
#define FAD_BINARYOP_MACRO(OPNAME, OP, VALUE, DX, FASTACCESSDX, VAL_CONST_DX_1, VAL_CONST_DX_2, CONST_DX_1, CONST_DX_2, CONST_FASTACCESSDX_1, CONST_FASTACCESSDX_2)
SimpleFad< ValueT > sinh(const SimpleFad< ValueT > &a)
SimpleFad< ValueT > pow(const SimpleFad< ValueT > &a, const SimpleFad< ValueT > &b)
#define FAD_UNARYOP_MACRO(OPNAME, OP, VALUE, DX, FASTACCESSDX)
SimpleFad< ValueT > tan(const SimpleFad< ValueT > &a)
expr acosh(expr.val())) FAD_UNARYOP_MACRO(asinh
#define SACADO_FAD_OP_ENABLE_EXPR_SCALAR(OP)
expr asinh(expr.val())) FAD_UNARYOP_MACRO(atanh
SimpleFad< ValueT > cos(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 DivisionOp
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)
ConstT value_type
Typename of argument values.
#define FAD_RELOP_MACRO(OP)
KOKKOS_INLINE_FUNCTION Expr< AbsOp< Expr< T > > > abs(const Expr< T > &expr)
KOKKOS_INLINE_FUNCTION Expr< FAbsOp< Expr< T > > > fabs(const Expr< T > &expr)
expr expr expr expr expr Log10Op
expr atanh(expr.val())) FAD_UNARYOP_MACRO(abs
bool operator!(const SimpleFad< ValueT > &a)
SimpleFad< ValueT > acos(const SimpleFad< ValueT > &a)
SimpleFad< ValueT > tanh(const SimpleFad< ValueT > &a)
expr expr expr fastAccessDx(i)) FAD_UNARYOP_MACRO(exp
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