NeoPZ
tfadlog.h
Go to the documentation of this file.
1 // Emacs will be in -*- Mode: c++ -*-
2 //
3 // ************ DO NOT REMOVE THIS BANNER ****************
4 //
5 // Nicolas Di Cesare <Nicolas.Dicesare@ann.jussieu.fr>
6 // http://www.ann.jussieu.fr/~dicesare
7 //
8 // CEMRACS 98 : C++ courses,
9 // templates : new C++ techniques
10 // for scientific computing
11 //
12 //********************************************************
13 //
14 // A short implementation ( not all operators and
15 // functions are overloaded ) of 1st order Automatic
16 // Differentiation in forward mode (FAD) using
17 // EXPRESSION TEMPLATES.
18 //
19 //********************************************************
20 #ifndef _tfadlog_h_
21 #define _tfadlog_h_
22 
23 #define FAD_LOG_MACRO(OP) \
24 template <int Num,class T> inline bool \
25 operator OP(const TFad<Num,T> &a, const TFad<Num,T> &b) \
26 { \
27  return (a.val() OP b.val()); \
28 } \
29  \
30 template <int Num,class T> inline bool \
31 operator OP(const TFad<Num,T> &a, const T &b) \
32 { \
33  return (a.val() OP b); \
34 } \
35  \
36 template <int Num,class T> inline bool \
37 operator OP(const T &a, const TFad<Num,T> &b) \
38 { \
39  return (a OP b.val()); \
40 } \
41  \
42 template <int Num, class T> inline bool \
43 operator OP(const TFadExpr<T> &a, const TFad<Num,T> &b) \
44 { \
45  return (a.val() OP b.val()); \
46 } \
47  \
48 template <int Num, class T> inline bool \
49 operator OP(const TFad<Num,T> &a, const TFadExpr<T> &b) \
50 { \
51  return (a.val() OP b.val()); \
52 } \
53  \
54 template <class T> inline bool \
55 operator OP(const TFadExpr<T> &a, const TFadExpr<T> &b) \
56 { \
57  return (a.val() OP b.val()); \
58 } \
59  \
60 template <class T> inline bool \
61 operator OP(const T &a, const TFadExpr<T> &b) \
62 { \
63  return (a OP b.val()); \
64 } \
65  \
66 template <class T> inline bool \
67 operator OP(const TFadExpr<T> &a, const T &b) \
68 { \
69  return (a.val() OP b); \
70 } \
71  \
72 template <class T> inline bool \
73 operator OP(const double &a, const TFadExpr<T> &b) \
74 { \
75  return (a OP b.val()); \
76 } \
77  \
78 template <class T> inline bool \
79 operator OP(const TFadExpr<T> &a, const double &b) \
80 { \
81  return (a.val() OP b); \
82 }
83 
84 
85 
86 FAD_LOG_MACRO(==)
87 FAD_LOG_MACRO(!=)
90 FAD_LOG_MACRO(<=)
91 FAD_LOG_MACRO(>=)
92 FAD_LOG_MACRO(<<=)
93 FAD_LOG_MACRO(>>=)
95 
96 #undef FAD_LOG_MACRO
97 
98 
99 template <int Num,class T> inline bool operator !(const TFad<Num,T> &a) {
100  return ( !a.val() );
101 }
102 
103 template <class T> inline bool operator !(const TFadExpr<T> &a) {
104  return ( !a.val() );
105 }
106 
107 #endif
value_type val() const
Definition: tfad.h:398
bool operator!(const TFad< Num, T > &a)
Definition: tfadlog.h:99
#define FAD_LOG_MACRO(OP)
Definition: tfadlog.h:23
Definition: tfad.h:64
Definition: tfad.h:41
const T & val() const
Definition: tfad.h:89