16 #ifndef dealii_differentiation_ad_adolc_product_types_h 17 #define dealii_differentiation_ad_adolc_product_types_h 19 #include <deal.II/base/config.h> 21 #ifdef DEAL_II_WITH_ADOLC 23 # include <deal.II/base/template_constraints.h> 25 # include <adolc/adouble.h> 26 # include <adolc/adtl.h> 28 DEAL_II_NAMESPACE_OPEN
37 struct ProductTypeImpl<adouble, adouble>
47 struct ProductTypeImpl<adub, adouble>
53 struct ProductTypeImpl<adouble, adub>
61 struct ProductTypeImpl<double, adouble>
67 struct ProductTypeImpl<adouble, double>
73 struct ProductTypeImpl<double, adub>
79 struct ProductTypeImpl<adub, double>
87 struct ProductTypeImpl<float, adouble>
93 struct ProductTypeImpl<adouble, float>
99 struct ProductTypeImpl<float, adub>
101 using type = adouble;
105 struct ProductTypeImpl<adub, float>
107 using type = adouble;
113 struct ProductTypeImpl<
std::complex<double>, std::complex<adouble>>
115 using type = std::complex<adouble>;
119 struct ProductTypeImpl<
std::complex<adouble>, std::complex<double>>
121 using type = std::complex<adouble>;
125 struct ProductTypeImpl<
std::complex<adouble>, std::complex<adouble>>
127 using type = std::complex<adouble>;
131 struct ProductTypeImpl<
std::complex<adub>, std::complex<adouble>>
133 using type = std::complex<adouble>;
137 struct ProductTypeImpl<
std::complex<adouble>, std::complex<adub>>
139 using type = std::complex<adouble>;
145 struct ProductTypeImpl<
std::complex<float>, std::complex<adouble>>
147 using type = std::complex<adouble>;
151 struct ProductTypeImpl<
std::complex<adouble>, std::complex<float>>
153 using type = std::complex<adouble>;
161 using type = adouble;
167 using type = std::complex<adouble>;
174 using type = adouble;
181 using type = std::complex<adouble>;
193 struct ProductTypeImpl<double, adtl::adouble>
195 using type = adtl::adouble;
199 struct ProductTypeImpl<adtl::adouble, double>
201 using type = adtl::adouble;
205 struct ProductTypeImpl<adtl::adouble, adtl::adouble>
207 using type = adtl::adouble;
213 struct ProductTypeImpl<float, adtl::adouble>
215 using type = adtl::adouble;
219 struct ProductTypeImpl<adtl::adouble, float>
221 using type = adtl::adouble;
227 struct ProductTypeImpl<
std::complex<double>, std::complex<adtl::adouble>>
229 using type = std::complex<adtl::adouble>;
233 struct ProductTypeImpl<
std::complex<adtl::adouble>, std::complex<double>>
235 using type = std::complex<adtl::adouble>;
239 struct ProductTypeImpl<
std::complex<adtl::adouble>,
240 std::complex<adtl::adouble>>
242 using type = std::complex<adtl::adouble>;
248 struct ProductTypeImpl<
std::complex<float>, std::complex<adtl::adouble>>
250 using type = std::complex<adtl::adouble>;
254 struct ProductTypeImpl<
std::complex<adtl::adouble>, std::complex<float>>
256 using type = std::complex<adtl::adouble>;
265 using type = adtl::adouble;
272 using type = std::complex<adtl::adouble>;
276 DEAL_II_NAMESPACE_CLOSE
278 #endif // DEAL_II_WITH_ADOLC