Sacado Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
fad_expr_funcs.cpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // Sacado Package
4 //
5 // Copyright 2006 NTESS and the Sacado contributors.
6 // SPDX-License-Identifier: LGPL-2.1-or-later
7 // *****************************************************************************
8 // @HEADER
9 
10 #include "fad_expr_funcs.hpp"
11 
12 using std::sin;
13 
14 template <typename T>
15 void ExprFuncs::mult<T,1>::operator()(const T x[], T& y) const {
16  y =
17  x[0]*x[1];
18 }
19 
20 template <typename T>
21 void ExprFuncs::mult<T,2>::operator()(const T x[], T& y) const {
22  y =
23  x[0]*x[1]*x[2];
24 }
25 
26 template <typename T>
27 void ExprFuncs::mult<T,3>::operator()(const T x[], T& y) const {
28  y =
29  x[0]*x[1]*x[2]*x[3];
30 }
31 
32 template <typename T>
33 void ExprFuncs::mult<T,4>::operator()(const T x[], T& y) const {
34  y =
35  x[0]*x[1]*x[2]*x[3]*x[4];
36 }
37 
38 template <typename T>
39 void ExprFuncs::mult<T,5>::operator()(const T x[], T& y) const {
40  y =
41  x[0]*x[1]*x[2]*x[3]*x[4]*x[5];
42 }
43 
44 template <typename T>
45 void ExprFuncs::mult<T,10>::operator()(const T x[], T& y) const {
46  y =
47  x[0]*x[1]*x[2]*x[3]*x[4]*x[5]*x[6]*x[7]*
48  x[8]*x[9]*x[10];
49 }
50 
51 template <typename T>
52 void ExprFuncs::mult<T,15>::operator()(const T x[], T& y) const {
53  y =
54  x[0]*x[1]*x[2]*x[3]*x[4]*x[5]*x[6]*x[7]*
55  x[8]*x[9]*x[10]*x[11]*x[12]*x[13]*x[14]*x[15];
56 }
57 
58 template <typename T>
59 void ExprFuncs::mult<T,20>::operator()(const T x[], T& y) const {
60  y =
61  x[0]*x[1]*x[2]*x[3]*x[4]*x[5]*x[6]*x[7]*
62  x[8]*x[9]*x[10]*x[11]*x[12]*x[13]*x[14]*x[15]*
63  x[16]*x[17]*x[18]*x[19]* x[20];
64 }
65 
66 template <typename T>
67 void ExprFuncs::nest<T,1>::operator()(const T x[], T& y) const {
68  y = sin(x[0]);
69 }
70 
71 template <typename T>
72 void ExprFuncs::nest<T,2>::operator()(const T x[], T& y) const {
73  y = sin(sin(x[0]));
74 }
75 
76 template <typename T>
77 void ExprFuncs::nest<T,3>::operator()(const T x[], T& y) const {
78  y = sin(sin(sin(x[0])));
79 }
80 
81 template <typename T>
82 void ExprFuncs::nest<T,4>::operator()(const T x[], T& y) const {
83  y = sin(sin(sin(sin(x[0]))));
84 }
85 
86 template <typename T>
87 void ExprFuncs::nest<T,5>::operator()(const T x[], T& y) const {
88  y = sin(sin(sin(sin(sin(x[0])))));
89 }
90 
91 template <typename T>
92 void ExprFuncs::nest<T,10>::operator()(const T x[], T& y) const {
93  y = sin(sin(sin(sin(sin(
94  sin(sin(sin(sin(sin(x[0]))))))))));
95 }
96 
97 template <typename T>
98 void ExprFuncs::nest<T,15>::operator()(const T x[], T& y) const {
99  y = sin(sin(sin(sin(sin(
100  sin(sin(sin(sin(sin(
101  sin(sin(sin(sin(sin(x[0])))))))))))))));
102 }
103 
104 template <typename T>
105 void ExprFuncs::nest<T,20>::operator()(const T x[], T& y) const {
106  y = sin(sin(sin(sin(sin(
107  sin(sin(sin(sin(sin(
108  sin(sin(sin(sin(sin(
109  sin(sin(sin(sin(sin(x[0]))))))))))))))))))));
110 }
111 
112 template <typename T>
113 void ExprFuncs::add<T,1>::operator()(const T x[], T& y) const {
114  y =
115  x[0]+x[1];
116 }
117 
118 template <typename T>
119 void ExprFuncs::add<T,2>::operator()(const T x[], T& y) const {
120  y =
121  x[0]+x[1]+x[2];
122 }
123 
124 template <typename T>
125 void ExprFuncs::add<T,3>::operator()(const T x[], T& y) const {
126  y =
127  x[0]+x[1]+x[2]+x[3];
128 }
129 
130 template <typename T>
131 void ExprFuncs::add<T,4>::operator()(const T x[], T& y) const {
132  y =
133  x[0]+x[1]+x[2]+x[3]+x[4];
134 }
135 
136 template <typename T>
137 void ExprFuncs::add<T,5>::operator()(const T x[], T& y) const {
138  y =
139  x[0]+x[1]+x[2]+x[3]+x[4]+x[5];
140 }
141 
142 template <typename T>
143 void ExprFuncs::add<T,10>::operator()(const T x[], T& y) const {
144  y =
145  x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6]+x[7]+
146  x[8]+x[9]+x[10];
147 }
148 
149 template <typename T>
150 void ExprFuncs::add<T,15>::operator()(const T x[], T& y) const {
151  y =
152  x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6]+x[7]+
153  x[8]+x[9]+x[10]+x[11]+x[12]+x[13]+x[14]+x[15];
154 }
155 
156 template <typename T>
157 void ExprFuncs::add<T,20>::operator()(const T x[], T& y) const {
158  y =
159  x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6]+x[7]+
160  x[8]+x[9]+x[10]+x[11]+x[12]+x[13]+x[14]+x[15]+
161  x[16]+x[17]+x[18]+x[19]+x[20];
162 }
163 
164 const char* ExprFuncs::mult_names[ExprFuncs::nfunc] = {
165  "mult1",
166  "mult2",
167  "mult3",
168  "mult4",
169  "mult5",
170  "mult10",
171  "mult15",
172  "mult20"
173 };
174 
175 const char* ExprFuncs::nest_names[ExprFuncs::nfunc] = {
176  "nest1",
177  "nest2",
178  "nest3",
179  "nest4",
180  "nest5",
181  "nest10",
182  "nest15",
183  "nest20"
184 };
185 
186 const char* ExprFuncs::add_names[ExprFuncs::nfunc] = {
187  "add1",
188  "add2",
189  "add3",
190  "add4",
191  "add5",
192  "add10",
193  "add15",
194  "add20"
195 };
196 
197 #define INSTANTIATE_FUNCS(TYPE) \
198  template struct ExprFuncs::mult< TYPE,1>; \
199  template struct ExprFuncs::mult< TYPE,2>; \
200  template struct ExprFuncs::mult< TYPE,3>; \
201  template struct ExprFuncs::mult< TYPE,4>; \
202  template struct ExprFuncs::mult< TYPE,5>; \
203  template struct ExprFuncs::mult< TYPE,10>; \
204  template struct ExprFuncs::mult< TYPE,15>; \
205  template struct ExprFuncs::mult< TYPE,20>; \
206  \
207  template struct ExprFuncs::nest< TYPE,1>; \
208  template struct ExprFuncs::nest< TYPE,2>; \
209  template struct ExprFuncs::nest< TYPE,3>; \
210  template struct ExprFuncs::nest< TYPE,4>; \
211  template struct ExprFuncs::nest< TYPE,5>; \
212  template struct ExprFuncs::nest< TYPE,10>; \
213  template struct ExprFuncs::nest< TYPE,15>; \
214  template struct ExprFuncs::nest< TYPE,20>; \
215  \
216  template struct ExprFuncs::add< TYPE,1>; \
217  template struct ExprFuncs::add< TYPE,2>; \
218  template struct ExprFuncs::add< TYPE,3>; \
219  template struct ExprFuncs::add< TYPE,4>; \
220  template struct ExprFuncs::add< TYPE,5>; \
221  template struct ExprFuncs::add< TYPE,10>; \
222  template struct ExprFuncs::add< TYPE,15>; \
223  template struct ExprFuncs::add< TYPE,20>;
224 
225 INSTANTIATE_FUNCS(double)
226 INSTANTIATE_FUNCS(Sacado::Fad::DFad<double>)
227 INSTANTIATE_FUNCS(Sacado::ELRFad::DFad<double>)
228 INSTANTIATE_FUNCS(Sacado::CacheFad::DFad<double>)
229 INSTANTIATE_FUNCS(Sacado::ELRCacheFad::DFad<double>)
230 INSTANTIATE_FUNCS(Sacado::Fad::SimpleFad<double>)
231 #ifdef HAVE_ADOLC
232 INSTANTIATE_FUNCS(adouble)
233 #endif
234 
235 #undef INSTANTIATE_FUNCS
#define T
Definition: Sacado_rad.hpp:553
static const char * mult_names[nfunc]
static const char * add_names[nfunc]
GeneralFad< DynamicStorage< T > > DFad
#define INSTANTIATE_FUNCS(TYPE)
sin(expr.val())
static const int nfunc
static const char * nest_names[nfunc]
const double y