17#ifndef ADOLC_ADTL_HOV_H
18#define ADOLC_ADTL_HOV_H
29using std::logic_error;
49#ifdef USE_ADTL_REFCOUNTING
60 friend void setNumDir(
const size_t p);
61 friend void setDegree(
const size_t p);
62 friend void setMode(
enum Mode newmode);
66 refcounter() { ++refcnt; }
67 ~refcounter() { --refcnt; }
68 inline static size_t getNumLiveVar() {
return refcnt; }
95 inline adouble(
const double v,
const double *adv);
96 inline adouble(
const double v,
const double **hov);
221 inline int operator>(
const double)
const;
225 inline int operator<(
const double)
const;
230 inline void setValue(
const double v);
234 inline double getADValue(
const unsigned int p)
const;
235 inline void setADValue(
const unsigned int p,
const double v);
241 inline explicit operator double const &();
242 inline explicit operator double &&();
243 inline explicit operator double();
246 inline const list<unsigned int> &
get_pattern()
const;
253 unsigned int start_cnt);
255 unsigned int **&pat);
257 int repeat,
double *basepoints,
267 list<unsigned int> pattern;
268#ifdef USE_ADTL_REFCOUNTING
271 inline static bool _do_val();
272 inline static bool _do_adval();
273 inline static bool _do_hoval();
274 inline static bool _do_indo();
275 inline static size_t numDir = 1;
276 inline static size_t degree = 1;
278 inline friend void setNumDir(
const size_t p);
279 inline friend void setDegree(
const size_t p);
298#if defined(HAVE_BUILTIN_EXPECT) && HAVE_BUILTIN_EXPECT
299#define likely(x) __builtin_expect(!!(x), 1)
300#define unlikely(x) __builtin_expect(!!(x), 0)
307#define unlikely(x) (x)
310inline bool adouble::_do_val() {
314#define do_val() likely(adouble::_do_val())
315#define no_do_val() unlikely(!adouble::_do_val())
317inline bool adouble::_do_adval() {
321#define do_adval() likely(adouble::_do_adval())
322#define no_do_adval() unlikely(!adouble::_do_adval())
324inline bool adouble::_do_indo() {
328inline bool adouble::_do_hoval() {
333#define do_indo() unlikely(adouble::_do_indo())
334#define no_do_indo() likely(!adouble::_do_indo())
335#define do_hoval() unlikely(adouble::_do_hoval())
337inline void setNumDir(
const size_t p) {
338#ifdef USE_ADTL_REFCOUNTING
339 if (refcounter::refcnt > 0) {
341 "ADOL-C Warning: Traceless: Setting numDir will not change the "
342 "number of\n directional derivative in existing adoubles and may "
343 "lead to erroneous results\n or memory corruption\n Number of "
344 "currently existing adoubles = %zu\n",
349 fprintf(
DIAG_OUT,
"ADOL-C Error: Traceless: You are being a moron now.\n");
354inline void setDegree(
const size_t p) {
357 fprintf(
DIAG_OUT,
"ADOL-C Error: Traceless: p < 1 not possible.\n");
363inline void setMode(
enum Mode newmode) {
364#ifdef USE_ADTL_REFCOUNTING
365 if (refcounter::refcnt > 0) {
367 "ADOL-C Warning: Traceless: Setting mode will the change the mode "
368 "of\n computation in previously computed variables and may lead to "
369 "erroneous results\n or memory corruption\n Number of currently "
370 "existing adoubles = %zu\n",
375 "ADOL-C Warning: Traceless: Setting mode will the change the mode "
376 "of\n computation in previously computed variables and may lead to "
377 "erroneous results\n or memory corruption\n");
379 adouble::forward_mode = newmode;
383 return ADOLC_MATH_NSP::numeric_limits<double>::quiet_NaN();
387 return ADOLC_MATH_NSP::numeric_limits<double>::infinity();
390#define FOR_I_EQ_0_LT_NUMDIR for (size_t _i = 0; _i < adouble::numDir; ++_i)
391#define FOR_J_EQ_0_LT_DEGREE_FOR_I_EQ_0_LT_NUMDIR \
392 for (size_t _j = 0; _j < adouble::degree; ++_j) \
393 for (size_t _i = 0; _i < adouble::numDir; ++_i)
394#define FOR_I_EQ_0_LT_NUMDIR_FOR_J_EQ_0_LT_DEGREE \
395 for (size_t _i = 0; _i < adouble::numDir; ++_i) \
396 for (size_t _j = 0; _j < adouble::degree; ++_j)
397#define ADVAL_I adval[_i]
400#define HO_DER_I_J ho_deriv[_j][_i]
405 adval =
new double[adouble::numDir];
414 ho_deriv =
myalloc2(adouble::degree, adouble::numDir);
423 if (!pattern.empty())
430 adval =
new double[adouble::numDir];
436 ho_deriv =
myalloc2(adouble::degree, adouble::numDir);
441 if (!pattern.empty())
447 : val(v), adval(NULL) {
449 adval =
new double[adouble::numDir];
455 fprintf(
DIAG_OUT,
"Dimension mismatch.\n");
460 if (!pattern.empty())
465 : val(v), ho_deriv(NULL) {
468 ho_deriv =
myalloc2(adouble::degree, adouble::numDir);
473 fprintf(
DIAG_OUT,
"Dimension mismatch.\n");
478 if (!pattern.empty())
485 adval =
new double[adouble::numDir];
491 ho_deriv =
myalloc2(adouble::degree, adouble::numDir);
496 if (!pattern.empty())
510 if ( !pattern.empty() )
547 tmp.val = val + a.val;
550 tmp.ADVAL_I =
ADVAL_I + a.ADVAL_I;
567 std::cout <<
"Not implemented. " << std::endl;
568 throw std::exception();
572 adouble tmp(v + a.val, a.adval);
589 std::cout <<
"Not implemented. " << std::endl;
590 throw std::exception();
610 tmp.val = val - a.val;
613 tmp.ADVAL_I =
ADVAL_I - a.ADVAL_I;
633 tmp.ADVAL_I = -a.ADVAL_I;
638 tmp.HO_DER_I_J = -a.HO_DER_I_J;
665 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
666 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
667 "setMode(enum Mode mode)\n");
668 throw logic_error(
"incorrect function call, errorcode=1");
671 tmp.val = val * a.val;
676 for (
size_t l = 0; l < numDir; l++) {
677 for (
size_t k = 0; k < degree; k++) {
678 sum = val * a.ho_deriv[k][l] + ho_deriv[k][l] * a.val;
680 for (
size_t j = 0; j < k; j++) {
681 sum = sum + ho_deriv[j][l] * a.ho_deriv[i - j][l];
683 tmp.ho_deriv[k][l] = sum;
688 if (
likely(adouble::_do_adval() && adouble::_do_val()))
690 tmp.ADVAL_I =
ADVAL_I * a.val + val * a.ADVAL_I;
704 tmp.ADVAL_I = v * a.ADVAL_I;
709 tmp.HO_DER_I_J = v * a.HO_DER_I_J;
737 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
738 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
739 "setMode(enum Mode mode)\n");
740 throw logic_error(
"incorrect function call, errorcode=1");
743 tmp.val = val / a.val;
749 for (
size_t l = 0; l < adouble::numDir; l++) {
750 for (
size_t k = 0; k < adouble::degree; k++) {
751 sum = tmp.val * a.ho_deriv[k][l];
753 for (
size_t j = 0; j < k; j++) {
754 sum += tmp.ho_deriv[j][l] * a.ho_deriv[i - j][l];
756 tmp.ho_deriv[k][l] = (1.0 / a.val) * (ho_deriv[k][l] - sum);
762 if (
likely(adouble::_do_adval() && adouble::_do_val()))
764 tmp.ADVAL_I = (
ADVAL_I * a.val - val * a.ADVAL_I) / (a.val * a.val);
774 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
775 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
776 "setMode(enum Mode mode)\n");
777 throw logic_error(
"incorrect function call, errorcode=1");
786 for (
size_t l = 0; l < adouble::numDir; l++) {
787 for (
size_t k = 0; k < adouble::degree; k++) {
788 sum = tmp.val * a.ho_deriv[k][l];
790 for (
size_t j = 0; j < k; j++) {
791 sum += tmp.ho_deriv[j][l] * a.ho_deriv[i - j][l];
793 tmp.ho_deriv[k][l] = (1.0 / a.val) * (-sum);
799 if (
likely(adouble::_do_adval() && adouble::_do_val()))
801 tmp.ADVAL_I = (-v * a.ADVAL_I) / (a.val * a.val);
861 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
862 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
863 "setMode(enum Mode mode)\n");
864 throw logic_error(
"incorrect function call, errorcode=1");
867 tmp.val = ADOLC_MATH_NSP::tan(a.val);
868 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
869 tmp2 = ADOLC_MATH_NSP::cos(a.val);
872 tmp.ADVAL_I = a.ADVAL_I / tmp2;
877 std::cout <<
"error: higher order derivatives for tan have not been "
889 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
890 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
891 "setMode(enum Mode mode)\n");
892 throw logic_error(
"incorrect function call, errorcode=1");
895 tmp.val = ADOLC_MATH_NSP::exp(a.val);
897 if (
likely(adouble::_do_adval() && adouble::_do_val()))
899 tmp.ADVAL_I = tmp.val * a.ADVAL_I;
906 for (
size_t k = 0; k < adouble::degree; k++) {
907 sum = tmp.val * to_double(k + 1) * a.ho_deriv[k][_i];
909 for (
size_t j = 0; j < k; j++)
910 sum += tmp.ho_deriv[i - j][_i] * to_double(j + 1) * a.ho_deriv[j][_i];
911 tmp.ho_deriv[k][_i] = (1.0 / to_double(k + 1)) * sum;
922 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
923 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
924 "setMode(enum Mode mode)\n");
925 throw logic_error(
"incorrect function call, errorcode=1");
928 tmp.val = ADOLC_MATH_NSP::log(a.val);
929 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
932 tmp.ADVAL_I = a.ADVAL_I / a.val;
933 else if (a.val == 0 && a.ADVAL_I != 0.0) {
934 int sign = (a.ADVAL_I < 0) ? -1 : 1;
935 tmp.ADVAL_I = sign *
makeInf();
944 for (
size_t l = 0; l < adouble::numDir; l++) {
945 for (
size_t k = 0; k < adouble::degree; k++) {
948 for (
size_t j = 0; j < k; j++)
949 sum += a.ho_deriv[i - j][l] * to_double(j + 1) * tmp.ho_deriv[j][l];
950 tmp.ho_deriv[k][l] = (1.0 / to_double(k + 1)) * (1.0 / a.val) *
951 (to_double(k + 1) * a.ho_deriv[k][l] - sum);
963 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
964 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
965 "setMode(enum Mode mode)\n");
966 throw logic_error(
"incorrect function call, errorcode=1");
969 tmp.val = ADOLC_MATH_NSP::sqrt(a.val);
970 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
973 tmp.ADVAL_I = a.ADVAL_I / (tmp.val * 2);
974 else if (a.val == 0.0 && a.ADVAL_I != 0.0) {
975 int sign = (a.ADVAL_I < 0) ? -1 : 1;
976 tmp.ADVAL_I = sign *
makeInf();
985 for (
size_t l = 0; l < adouble::numDir; l++) {
986 for (
size_t k = 0; k < adouble::degree; k++) {
989 for (
size_t j = 0; j < k; j++)
990 sum += tmp.ho_deriv[j][l] * tmp.ho_deriv[i - j][l];
991 tmp.ho_deriv[k][l] = 1.0 / (2.0 * tmp.val) * (a.ho_deriv[k][l] - sum);
1004 "ADOL-C error: higher order mode of cbrt not implemented yet\n");
1005 throw logic_error(
"incorrect function call, errorcode=1");
1011 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1012 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1013 "setMode(enum Mode mode)\n");
1014 throw logic_error(
"incorrect function call, errorcode=1");
1017 tmp.val = ADOLC_MATH_NSP::sin(a.val);
1018 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1019 tmp2.val = ADOLC_MATH_NSP::cos(a.val);
1021 tmp.ADVAL_I = tmp2.val * a.ADVAL_I;
1027 double sum1 = 0.0, sum2 = 0.0;
1028 for (
size_t l = 0; l < adouble::numDir; l++) {
1029 for (
size_t k = 0; k < adouble::degree; k++) {
1032 sum1 = tmp2.val * to_double(m) * a.ho_deriv[k][l];
1033 sum2 = -tmp.val * to_double(m) * a.ho_deriv[k][l];
1035 for (
size_t j = 0; j < k; j++) {
1036 sum1 += to_double(j + 1) * a.ho_deriv[j][l] * tmp2.ho_deriv[i - j][l];
1037 sum2 += -to_double(j + 1) * a.ho_deriv[j][l] * tmp.ho_deriv[i - j][l];
1039 tmp.ho_deriv[k][l] = (1.0 / to_double(m)) * sum1;
1040 tmp2.ho_deriv[k][l] = (1.0 / to_double(m)) * sum2;
1054 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1055 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1056 "setMode(enum Mode mode)\n");
1057 throw logic_error(
"incorrect function call, errorcode=1");
1060 tmp.val = ADOLC_MATH_NSP::cos(a.val);
1061 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1062 tmp2.val = -ADOLC_MATH_NSP::sin(a.val);
1064 tmp.ADVAL_I = tmp2.val * a.ADVAL_I;
1070 double sum1 = 0.0, sum2 = 0.0;
1071 for (
size_t l = 0; l < adouble::numDir; l++) {
1072 for (
size_t k = 0; k < adouble::degree; k++) {
1075 sum1 = tmp2.val * to_double(m) * a.ho_deriv[k][l];
1076 sum2 = -tmp.val * to_double(m) * a.ho_deriv[k][l];
1078 for (
size_t j = 0; j < k; j++) {
1079 sum1 += to_double(j + 1) * a.ho_deriv[j][l] * tmp2.ho_deriv[i - j][l];
1081 -(to_double(j + 1) * a.ho_deriv[j][l] * tmp.ho_deriv[i - j][l]);
1083 tmp.ho_deriv[k][l] = (1.0 / to_double(m)) * sum1;
1084 tmp2.ho_deriv[k][l] = (1.0 / to_double(m)) * sum2;
1098 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1099 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1100 "setMode(enum Mode mode)\n");
1101 throw logic_error(
"incorrect function call, errorcode=1");
1104 tmp.val = ADOLC_MATH_NSP::asin(a.val);
1105 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1106 double tmp2 = ADOLC_MATH_NSP::sqrt(1 - a.val * a.val);
1108 tmp.ADVAL_I = a.ADVAL_I / tmp2;
1113 std::cout <<
"error: higher order derivatives for asin have not been "
1114 "implemented yet!!!"
1125 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1126 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1127 "setMode(enum Mode mode)\n");
1128 throw logic_error(
"incorrect function call, errorcode=1");
1131 tmp.val = ADOLC_MATH_NSP::acos(a.val);
1132 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1133 double tmp2 = -ADOLC_MATH_NSP::sqrt(1 - a.val * a.val);
1135 tmp.ADVAL_I = a.ADVAL_I / tmp2;
1140 std::cout <<
"error: higher order derivatives for acos have not been "
1141 "implemented yet!!!"
1152 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1153 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1154 "setMode(enum Mode mode)\n");
1155 throw logic_error(
"incorrect function call, errorcode=1");
1158 tmp.val = ADOLC_MATH_NSP::atan(a.val);
1159 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1160 double tmp2 = 1 + a.val * a.val;
1164 tmp.ADVAL_I = a.ADVAL_I * tmp2;
1170 std::cout <<
"error: higher order derivatives for atan have not been "
1171 "implemented yet!!!"
1182 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1183 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1184 "setMode(enum Mode mode)\n");
1185 throw logic_error(
"incorrect function call, errorcode=1");
1188 tmp.val = ADOLC_MATH_NSP::atan2(a.val, b.val);
1189 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1190 double tmp2 = a.val * a.val;
1191 double tmp3 = b.val * b.val;
1192 double tmp4 = tmp3 / (tmp2 + tmp3);
1195 tmp.ADVAL_I = (a.ADVAL_I * b.val - a.val * b.ADVAL_I) / tmp3 * tmp4;
1201 std::cout <<
"error: higher order derivatives for atan2 have not been "
1202 "implemented yet!!!"
1215 std::cout <<
"in adouble pow(const adouble &a, double v) prepping for debug"
1218 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1219 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1220 "setMode(enum Mode mode)\n");
1221 throw logic_error(
"incorrect function call, errorcode=1");
1224 tmp.val = ADOLC_MATH_NSP::pow(a.val, v);
1225 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1226 double tmp2 = v * ADOLC_MATH_NSP::pow(a.val, v - 1);
1228 tmp.ADVAL_I = tmp2 * a.ADVAL_I;
1239 double factorial_val = tgamma(v + 1.0);
1240 for (
size_t k = 0; k < adouble::degree; k++)
1241 for (
size_t l = 0; l < adouble::numDir; l++) {
1242 tmp.ho_deriv[k][l] =
1243 (1.0 / to_double(k + 1)) *
1250 double sum1 = 0.0, sum2 = 0.0;
1251 for (
size_t l = 0; l < adouble::numDir; l++) {
1252 for (
size_t k = 0; k < adouble::degree; k++) {
1254 sum1 = tmp.val * to_double(k + 1) * a.ho_deriv[k][l];
1256 for (
size_t j = 0; j < k; j++) {
1258 tmp.ho_deriv[i - j][l] * to_double(j + 1) * a.ho_deriv[j][l];
1260 a.ho_deriv[i - j][l] * to_double(1 + j) * tmp.ho_deriv[j][l];
1262 tmp.ho_deriv[k][l] =
1263 (1.0 / to_double(k + 1)) * (1.0 / a.val) *
1278 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1279 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1280 "setMode(enum Mode mode)\n");
1281 throw logic_error(
"incorrect function call, errorcode=1");
1284 tmp.val = ADOLC_MATH_NSP::pow(a.val, b.val);
1285 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1286 double tmp2 = b.val * ADOLC_MATH_NSP::pow(a.val, b.val - 1);
1287 double tmp3 = ADOLC_MATH_NSP::log(a.val) * tmp.val;
1289 tmp.ADVAL_I = tmp2 * a.ADVAL_I + tmp3 * b.ADVAL_I;
1294 std::cout <<
"error: higher order derivatives for pow(adouble,adouble) "
1295 "have not been implemented yet!!!"
1308 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1309 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1310 "setMode(enum Mode mode)\n");
1311 throw logic_error(
"incorrect function call, errorcode=1");
1314 tmp.val = ADOLC_MATH_NSP::pow(v, a.val);
1315 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1316 double tmp2 = tmp.val * ADOLC_MATH_NSP::log(v);
1318 tmp.ADVAL_I = tmp2 * a.ADVAL_I;
1325 for (
size_t l = 0; l < adouble::numDir; l++) {
1327 for (
size_t k = 0; k < adouble::degree; k++) {
1329 sum = tmp.val * to_double(k + 1) * a.ho_deriv[k][l];
1331 for (
size_t j = 0; j < k; j++)
1332 sum += tmp.ho_deriv[i - j][l] * to_double(j + 1) * a.ho_deriv[j][l];
1333 tmp.ho_deriv[k][l] =
1334 (1.0 / to_double(k + 1)) * sum * ADOLC_MATH_NSP::log(v);
1347 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1348 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1349 "setMode(enum Mode mode)\n");
1350 throw logic_error(
"incorrect function call, errorcode=1");
1353 tmp.val = ADOLC_MATH_NSP::log10(a.val);
1354 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1355 double tmp2 = ADOLC_MATH_NSP::log((
double)10) * a.val;
1357 tmp.ADVAL_I = a.ADVAL_I / tmp2;
1362 std::cout <<
"error: higher order derivatives for log10 have not been "
1363 "implemented yet!!!"
1374 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1375 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1376 "setMode(enum Mode mode)\n");
1377 throw logic_error(
"incorrect function call, errorcode=1");
1380 tmp.val = ADOLC_MATH_NSP::sinh(a.val);
1381 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1382 const double cosh_val = ADOLC_MATH_NSP::cosh(a.val);
1384 tmp.ADVAL_I = a.ADVAL_I * cosh_val;
1389 tmp2.val = ADOLC_MATH_NSP::cosh(a.val);
1391 double sum1 = 0.0, sum2 = 0.0;
1392 for (
size_t l = 0; l < adouble::numDir; l++) {
1393 for (
size_t k = 0; k < adouble::degree; k++) {
1396 sum1 = tmp2.val * to_double(m) * a.ho_deriv[k][l];
1397 sum2 = tmp.val * to_double(m) * a.ho_deriv[k][l];
1399 for (
size_t j = 0; j < k; j++) {
1400 sum1 += to_double(j + 1) * a.ho_deriv[j][l] * tmp2.ho_deriv[i - j][l];
1401 sum2 += to_double(j + 1) * a.ho_deriv[j][l] * tmp.ho_deriv[i - j][l];
1403 tmp.ho_deriv[k][l] = (1.0 / to_double(m)) * sum1;
1404 tmp2.ho_deriv[k][l] = (1.0 / to_double(m)) * sum2;
1418 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1419 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1420 "setMode(enum Mode mode)\n");
1421 throw logic_error(
"incorrect function call, errorcode=1");
1424 tmp.val = ADOLC_MATH_NSP::cosh(a.val);
1425 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1426 tmp2 = ADOLC_MATH_NSP::sinh(a.val);
1434 double sum1 = 0.0, sum2 = 0.0;
1435 tmp2 = ADOLC_MATH_NSP::sinh(a.val);
1436 for (
size_t l = 0; l < adouble::numDir; l++) {
1437 for (
size_t k = 0; k < adouble::degree; k++) {
1440 sum1 = tmp2.val * to_double(m) * a.ho_deriv[k][l];
1441 sum2 = tmp.val * to_double(m) * a.ho_deriv[k][l];
1443 for (
size_t j = 0; j < k; j++) {
1444 sum1 += to_double(j + 1) * a.ho_deriv[j][l] * tmp2.ho_deriv[i - j][l];
1445 sum2 += to_double(j + 1) * a.ho_deriv[j][l] * tmp.ho_deriv[i - j][l];
1447 tmp.ho_deriv[k][l] = (1.0 / to_double(m)) * sum1;
1448 tmp2.ho_deriv[k][l] = (1.0 / to_double(m)) * sum2;
1462 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1463 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1464 "setMode(enum Mode mode)\n");
1465 throw logic_error(
"incorrect function call, errorcode=1");
1468 tmp.val = ADOLC_MATH_NSP::tanh(a.val);
1469 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1470 double tmp2 = ADOLC_MATH_NSP::cosh(a.val);
1473 tmp.ADVAL_I = a.ADVAL_I / tmp2;
1478 std::cout <<
"error: higher order derivatives for tanh have not been "
1479 "implemented yet!!!"
1490 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1491 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1492 "setMode(enum Mode mode)\n");
1493 throw logic_error(
"incorrect function call, errorcode=1");
1496 tmp.val = ADOLC_MATH_NSP_ERF::asinh(a.val);
1497 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1498 double tmp2 = ADOLC_MATH_NSP::sqrt(a.val * a.val + 1);
1500 tmp.ADVAL_I = a.ADVAL_I / tmp2;
1505 std::cout <<
"error: higher order derivatives for asinh have not been "
1506 "implemented yet!!!"
1517 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1518 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1519 "setMode(enum Mode mode)\n");
1520 throw logic_error(
"incorrect function call, errorcode=1");
1523 tmp.val = ADOLC_MATH_NSP_ERF::acosh(a.val);
1524 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1525 double tmp2 = ADOLC_MATH_NSP::sqrt(a.val * a.val - 1);
1527 tmp.ADVAL_I = a.ADVAL_I / tmp2;
1532 std::cout <<
"error: higher order derivatives for acosh have not been "
1533 "implemented yet!!!"
1544 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1545 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1546 "setMode(enum Mode mode)\n");
1547 throw logic_error(
"incorrect function call, errorcode=1");
1550 tmp.val = ADOLC_MATH_NSP_ERF::atanh(a.val);
1551 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1552 double tmp2 = 1 - a.val * a.val;
1554 tmp.ADVAL_I = a.ADVAL_I / tmp2;
1559 std::cout <<
"error: higher order derivatives for atanh have not been "
1560 "implemented yet!!!"
1571 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
1572 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1573 "setMode(enum Mode mode)\n");
1574 throw logic_error(
"incorrect function call, errorcode=1");
1577 tmp.val = ADOLC_MATH_NSP::fabs(a.val);
1578 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
1586 tmp.ADVAL_I = a.ADVAL_I * as;
1593 tmp.ADVAL_I = a.ADVAL_I * as;
1603 int *leading_sgn = (
int *)alloca(
sizeof(
int) * adouble::degree);
1604 for (
size_t l = 0; l < adouble::numDir; l++)
1610 for (
size_t l = 0; l < adouble::numDir; l++) {
1611 for (
size_t k = 0; k < adouble::degree; k++) {
1612 if (tmp.ho_deriv[k][l] > 0 && (!found)) {
1619 if (tmp.ho_deriv[k][l] < 0 && (!found)) {
1622 leading_sgn[l] = -1;
1638 for (
size_t l = 0; l < adouble::numDir; l++) {
1639 for (
size_t k = 0; k < adouble::degree; k++) {
1640 tmp.ho_deriv[k][l] *= leading_sgn[l];
1653 tmp.val = ADOLC_MATH_NSP::ceil(a.val);
1660 std::cout <<
"error: higher order derivatives for ceil have not been "
1661 "implemented yet!!!"
1671 tmp.val = ADOLC_MATH_NSP::floor(a.val);
1678 std::cout <<
"error: higher order derivatives for floor have not been "
1679 "implemented yet!!!"
1688 if (
unlikely(!adouble::_do_val() &&
1689 (adouble::_do_adval() || adouble::_do_indo()))) {
1690 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1691 "setMode(enum Mode mode)\n");
1692 throw logic_error(
"incorrect function call, errorcode=1");
1694 double tmp2 = a.val - b.val;
1700 tmp.ADVAL_I = b.ADVAL_I;
1710 tmp.ADVAL_I = a.ADVAL_I;
1716 if (a.ADVAL_I < b.ADVAL_I)
1717 tmp.ADVAL_I = b.ADVAL_I;
1719 tmp.ADVAL_I = a.ADVAL_I;
1730 std::cout <<
"error: higher order derivatives for fmax have not been "
1731 "implemented yet!!!"
1740 if (
unlikely(!adouble::_do_val() &&
1741 (adouble::_do_adval() || adouble::_do_indo()))) {
1742 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1743 "setMode(enum Mode mode)\n");
1744 throw logic_error(
"incorrect function call, errorcode=1");
1746 double tmp2 = v - a.val;
1752 tmp.ADVAL_I = a.ADVAL_I;
1766 tmp.ADVAL_I = a.ADVAL_I;
1777 std::cout <<
"error: higher order derivatives for fmax have not been "
1778 "implemented yet!!!"
1787 if (
unlikely(!adouble::_do_val() &&
1788 (adouble::_do_adval() || adouble::_do_indo()))) {
1789 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1790 "setMode(enum Mode mode)\n");
1791 throw logic_error(
"incorrect function call, errorcode=1");
1793 double tmp2 = a.val - v;
1806 tmp.ADVAL_I = a.ADVAL_I;
1813 tmp.ADVAL_I = a.ADVAL_I;
1824 std::cout <<
"error: higher order derivatives for fmax have not been "
1825 "implemented yet!!!"
1834 if (
unlikely(!adouble::_do_val() &&
1835 (adouble::_do_adval() || adouble::_do_indo()))) {
1836 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1837 "setMode(enum Mode mode)\n");
1838 throw logic_error(
"incorrect function call, errorcode=1");
1840 double tmp2 = a.val - b.val;
1846 tmp.ADVAL_I = a.ADVAL_I;
1855 tmp.ADVAL_I = b.ADVAL_I;
1861 if (a.ADVAL_I < b.ADVAL_I)
1862 tmp.ADVAL_I = a.ADVAL_I;
1864 tmp.ADVAL_I = b.ADVAL_I;
1875 std::cout <<
"error: higher order derivatives for fmin have not been "
1876 "implemented yet!!!"
1885 if (
unlikely(!adouble::_do_val() &&
1886 (adouble::_do_adval() || adouble::_do_indo()))) {
1887 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1888 "setMode(enum Mode mode)\n");
1889 throw logic_error(
"incorrect function call, errorcode=1");
1891 double tmp2 = v - a.val;
1904 tmp.ADVAL_I = a.ADVAL_I;
1911 tmp.ADVAL_I = a.ADVAL_I;
1922 std::cout <<
"error: higher order derivatives for fmin have not been "
1923 "implemented yet!!!"
1932 if (
unlikely(!adouble::_do_val() &&
1933 (adouble::_do_adval() || adouble::_do_indo()))) {
1934 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
1935 "setMode(enum Mode mode)\n");
1936 throw logic_error(
"incorrect function call, errorcode=1");
1938 double tmp2 = a.val - v;
1944 tmp.ADVAL_I = a.ADVAL_I;
1958 tmp.ADVAL_I = a.ADVAL_I;
1969 std::cout <<
"error: higher order derivatives for fmin have not been "
1970 "implemented yet!!!"
1987 return a * ADOLC_MATH_NSP::pow(2., v);
1999 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2000 "setMode(enum Mode mode)\n");
2001 throw logic_error(
"incorrect function call, errorcode=1");
2003 return ADOLC_MATH_NSP::frexp(a.val, v);
2008 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
2009 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2010 "setMode(enum Mode mode)\n");
2011 throw logic_error(
"incorrect function call, errorcode=1");
2014 tmp.val = ADOLC_MATH_NSP_ERF::erf(a.val);
2015 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
2016 double tmp2 = 2.0 / ADOLC_MATH_NSP_ERF::sqrt(ADOLC_MATH_NSP::acos(-1.0)) *
2017 ADOLC_MATH_NSP_ERF::exp(-a.val * a.val);
2019 tmp.ADVAL_I = tmp2 * a.ADVAL_I;
2028 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
2029 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2030 "setMode(enum Mode mode)\n");
2031 throw logic_error(
"incorrect function call, errorcode=1");
2034 tmp.val = ADOLC_MATH_NSP_ERF::erfc(a.val);
2035 if (
likely(adouble::_do_adval() && adouble::_do_val())) {
2036 double tmp2 = -2.0 / ADOLC_MATH_NSP_ERF::sqrt(ADOLC_MATH_NSP::acos(-1.0)) *
2037 ADOLC_MATH_NSP_ERF::exp(-a.val * a.val);
2039 tmp.ADVAL_I = tmp2 * a.ADVAL_I;
2049 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2050 "setMode(enum Mode mode)\n");
2051 throw logic_error(
"incorrect function call, errorcode=1");
2063 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2064 "setMode(enum Mode mode)\n");
2065 throw logic_error(
"incorrect function call, errorcode=1");
2076 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2077 "setMode(enum Mode mode)\n");
2078 throw logic_error(
"incorrect function call, errorcode=1");
2091 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2092 "setMode(enum Mode mode)\n");
2093 throw logic_error(
"incorrect function call, errorcode=1");
2116 if (!pattern.empty())
2135 if (!pattern.empty())
2205 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
2206 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2207 "setMode(enum Mode mode)\n");
2208 throw logic_error(
"incorrect function call, errorcode=1");
2210 if (
likely(adouble::_do_adval() && adouble::_do_val()))
2217 tmp.val = val * a.val;
2223 for (
size_t l = 0; l < adouble::numDir; l++) {
2224 for (
size_t k = 0; k < degree; k++) {
2225 sum = val * a.ho_deriv[k][l] + ho_deriv[k][l] * a.val;
2227 for (
size_t j = 0; j < k; j++)
2228 sum += ho_deriv[j][l] * a.ho_deriv[i - j][l];
2229 tmp.ho_deriv[k][l] = sum;
2233 for (
size_t k = 0; k < degree; k++)
2234 ho_deriv[k][l] = tmp.ho_deriv[k][l];
2260 if (
unlikely(!adouble::_do_val() && adouble::_do_adval())) {
2261 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2262 "setMode(enum Mode mode)\n");
2263 throw logic_error(
"incorrect function call, errorcode=1");
2265 if (
likely(adouble::_do_adval() && adouble::_do_val()))
2276 for (
size_t l = 0; l < adouble::numDir; l++) {
2277 for (
size_t k = 0; k < degree; k++) {
2278 sum = tmp.val * a.ho_deriv[k][l];
2280 for (
size_t j = 0; j < k; j++)
2281 sum += tmp.ho_deriv[j][l] * a.ho_deriv[i - j][l];
2282 tmp.ho_deriv[k][l] = (1.0 / a.val) * (ho_deriv[k][l] - sum);
2286 for (
size_t k = 0; k < degree; k++)
2287 ho_deriv[k][l] = tmp.ho_deriv[k][l];
2299 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2300 "setMode(enum Mode mode)\n");
2301 throw logic_error(
"incorrect function call, errorcode=1");
2309 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2310 "setMode(enum Mode mode)\n");
2311 throw logic_error(
"incorrect function call, errorcode=1");
2313 return val != a.val;
2318 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2319 "setMode(enum Mode mode)\n");
2320 throw logic_error(
"incorrect function call, errorcode=1");
2325inline int operator!=(
const double v,
const adouble &a) {
2327 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2328 "setMode(enum Mode mode)\n");
2329 throw logic_error(
"incorrect function call, errorcode=1");
2336 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2337 "setMode(enum Mode mode)\n");
2338 throw logic_error(
"incorrect function call, errorcode=1");
2340 return val == a.val;
2345 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2346 "setMode(enum Mode mode)\n");
2347 throw logic_error(
"incorrect function call, errorcode=1");
2352inline int operator==(
const double v,
const adouble &a) {
2354 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2355 "setMode(enum Mode mode)\n");
2356 throw logic_error(
"incorrect function call, errorcode=1");
2363 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2364 "setMode(enum Mode mode)\n");
2365 throw logic_error(
"incorrect function call, errorcode=1");
2367 return val <= a.val;
2372 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2373 "setMode(enum Mode mode)\n");
2374 throw logic_error(
"incorrect function call, errorcode=1");
2379inline int operator<=(
const double v,
const adouble &a) {
2381 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2382 "setMode(enum Mode mode)\n");
2383 throw logic_error(
"incorrect function call, errorcode=1");
2390 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2391 "setMode(enum Mode mode)\n");
2392 throw logic_error(
"incorrect function call, errorcode=1");
2394 return val >= a.val;
2399 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2400 "setMode(enum Mode mode)\n");
2401 throw logic_error(
"incorrect function call, errorcode=1");
2406inline int operator>=(
const double v,
const adouble &a) {
2408 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2409 "setMode(enum Mode mode)\n");
2410 throw logic_error(
"incorrect function call, errorcode=1");
2417 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2418 "setMode(enum Mode mode)\n");
2419 throw logic_error(
"incorrect function call, errorcode=1");
2426 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2427 "setMode(enum Mode mode)\n");
2428 throw logic_error(
"incorrect function call, errorcode=1");
2433inline int operator>(
const double v,
const adouble &a) {
2435 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2436 "setMode(enum Mode mode)\n");
2437 throw logic_error(
"incorrect function call, errorcode=1");
2444 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2445 "setMode(enum Mode mode)\n");
2446 throw logic_error(
"incorrect function call, errorcode=1");
2453 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2454 "setMode(enum Mode mode)\n");
2455 throw logic_error(
"incorrect function call, errorcode=1");
2460inline int operator<(
const double v,
const adouble &a) {
2462 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2463 "setMode(enum Mode mode)\n");
2464 throw logic_error(
"incorrect function call, errorcode=1");
2470inline adouble::operator
double const &() {
2472 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2473 "setMode(enum Mode mode)\n");
2474 throw logic_error(
"incorrect function call, errorcode=1");
2479inline adouble::operator
double &&() {
2481 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2482 "setMode(enum Mode mode)\n");
2483 throw logic_error(
"incorrect function call, errorcode=1");
2485 return (
double &&)val;
2488inline adouble::operator double() {
2490 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2491 "setMode(enum Mode mode)\n");
2492 throw logic_error(
"incorrect function call, errorcode=1");
2499 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2500 "setMode(enum Mode mode)\n");
2501 throw logic_error(
"incorrect function call, errorcode=1");
2508 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2509 "setMode(enum Mode mode)\n");
2510 throw logic_error(
"incorrect function call, errorcode=1");
2517 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2518 "setMode(enum Mode mode)\n");
2519 throw logic_error(
"incorrect function call, errorcode=1");
2526 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2527 "setMode(enum Mode mode)\n");
2528 throw logic_error(
"incorrect function call, errorcode=1");
2536 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2537 "setMode(enum Mode mode)\n");
2538 throw logic_error(
"incorrect function call, errorcode=1");
2540 if (p >= adouble::numDir) {
2541 fprintf(
DIAG_OUT,
"Derivative array accessed out of bounds"
2542 " while \"getADValue(...)\"!!!\n");
2543 throw logic_error(
"incorrect function call, errorcode=-1");
2550 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2551 "setMode(enum Mode mode)\n");
2552 throw logic_error(
"incorrect function call, errorcode=1");
2554 if (p >= adouble::numDir) {
2555 fprintf(
DIAG_OUT,
"Derivative array accessed out of bounds"
2556 " while \"setADValue(...)\"!!!\n");
2557 throw logic_error(
"incorrect function call, errorcode=-1");
2563 std::cout <<
" getOneADValue : i= " << i << std::endl;
2571 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2572 "setMode(enum Mode mode)\n");
2573 throw logic_error(
"incorrect function call, errorcode=1");
2580 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2581 "setMode(enum Mode mode)\n");
2582 throw logic_error(
"incorrect function call, errorcode=1");
2584 if (!pattern.empty())
2590 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2591 "setMode(enum Mode mode)\n");
2592 throw logic_error(
"incorrect function call, errorcode=1");
2594 if (
likely(pattern != v)) {
2596 list<unsigned int> cv = v;
2609 fprintf(
DIAG_OUT,
"ADOL-C error: Traceless: Incorrect mode, call "
2610 "setMode(enum Mode mode)\n");
2611 throw logic_error(
"incorrect function call, errorcode=1");
2614 if (!pattern.empty())
ADOLC_API double ** myalloc2(size_t, size_t)
#define FOR_I_EQ_0_LT_NUMDIR
Definition adoublecuda.h:50
#define ADVAL_I
Definition adoublecuda.h:51
#define ADV_I
Definition adoublecuda.h:52
#define V_I
Definition adoublecuda.h:53
ADOLC_API void condeqassign(adouble &res, const adouble &cond, const adouble &arg1, const adouble &arg2)
ADOLC_API void condassign(adouble &res, const adouble &cond, const adouble &arg1, const adouble &arg2)
ADOLC_API adouble cbrt(const adouble &a)
#define no_do_indo()
Definition adtl_hov.h:334
#define likely(x)
Definition adtl_hov.h:304
#define do_indo()
Definition adtl_hov.h:333
#define FOR_J_EQ_0_LT_DEGREE_FOR_I_EQ_0_LT_NUMDIR
Definition adtl_hov.h:391
#define HO_DER_I_J
Definition adtl_hov.h:400
#define do_adval()
Definition adtl_hov.h:321
#define no_do_val()
Definition adtl_hov.h:315
#define do_hoval()
Definition adtl_hov.h:335
#define do_val()
Definition adtl_hov.h:314
#define no_do_adval()
Definition adtl_hov.h:322
#define unlikely(x)
Definition adtl_hov.h:307
Owning sparse matrix container in coordinate-format.
Definition sparsematrix.h:81
Taped active scalar for reusable forward and reverse differentiation.
Definition adtb_types.h:211
Active scalar for tapeless higher-order vector forward mode.
Definition adtl_hov.h:91
friend void setDegree(const size_t p)
Definition adtl_hov.h:354
friend adouble atanh(const adouble &a)
Definition adtl_hov.h:1542
friend adouble log(const adouble &a)
Definition adtl_hov.h:920
friend adouble atan(const adouble &a)
Definition adtl_hov.h:1150
friend void setNumDir(const size_t p)
Definition adtl.h:254
void delete_pattern()
Definition adtl_hov.h:2578
~adouble()
Definition adtl_hov.h:504
const list< unsigned int > & get_pattern() const
Definition adtl_hov.h:2569
friend void setMode(enum Mode newmode)
Definition adtl_hov.h:363
adouble operator-() const
Definition adtl_hov.h:517
friend adouble sin(const adouble &a)
Definition adtl_hov.h:1008
adouble operator++()
Definition adtl_hov.h:808
friend adouble operator*(const double v, const adouble &a)
Definition adtl_hov.h:698
friend void condassign(adouble &res, const adouble &cond, const adouble &arg1, const adouble &arg2)
Definition adtl_hov.h:2046
friend int operator==(const double, const adouble &)
Definition adtl_hov.h:2352
friend int ADOLC_get_sparse_pattern(const adouble *const b, int m, unsigned int **&pat)
friend adouble exp(const adouble &a)
Definition adtl_hov.h:887
friend adouble atan2(const adouble &a, const adouble &b)
Definition adtl_hov.h:1180
friend adouble acosh(const adouble &a)
Definition adtl_hov.h:1515
adouble & operator-=(const double v)
Definition adtl_hov.h:2166
friend adouble cosh(const adouble &a)
Definition adtl_hov.h:1416
friend adouble fmin(const adouble &a, const adouble &b)
Definition adtl_hov.h:1832
friend adouble acos(const adouble &a)
Definition adtl_hov.h:1123
int operator!() const
Definition adtl_hov.h:2297
void setValue(const double v)
Definition adtl_hov.h:2506
friend adouble log10(const adouble &a)
Definition adtl_hov.h:1345
void add_to_pattern(const list< unsigned int > &v)
Definition adtl_hov.h:2588
adouble & operator=(const double v)
Definition adtl_hov.h:2102
void setOneADValue(int i, double *v)
Definition adtl_hov.h:2567
adouble & operator/=(const double v)
Definition adtl_hov.h:2243
friend ostream & operator<<(ostream &, const adouble &)
friend int operator>=(const double, const adouble &)
Definition adtl_hov.h:2406
friend adouble sinh(const adouble &a)
Definition adtl_hov.h:1372
friend adouble cos(const adouble &a)
Definition adtl_hov.h:1051
friend adouble fmax(const adouble &a, const adouble &b)
Definition adtl_hov.h:1686
double getValue() const
Definition adtl_hov.h:2497
double * getADValue() const
Definition adtl_hov.h:2515
friend adouble cbrt(const adouble &a)
Definition adtl_hov.h:1002
friend int operator<=(const double, const adouble &)
Definition adtl_hov.h:2379
friend adouble asin(const adouble &a)
Definition adtl_hov.h:1096
friend adouble operator/(const double v, const adouble &a)
Definition adtl_hov.h:772
adouble & operator*=(const double v)
Definition adtl_hov.h:2190
adouble()
Definition adtl_hov.h:403
friend int operator>(const double, const adouble &)
Definition adtl_hov.h:2433
friend void condeqassign(adouble &res, const adouble &cond, const adouble &arg1, const adouble &arg2)
Definition adtl_hov.h:2073
friend adouble fabs(const adouble &a)
Definition adtl_hov.h:1569
void setADValue(const double *v)
Definition adtl_hov.h:2524
size_t get_pattern_size() const
Definition adtl_hov.h:2607
friend adouble pow(const adouble &a, double v)
Definition adtl_hov.h:1213
friend adouble sqrt(const adouble &a)
Definition adtl_hov.h:961
friend adouble tanh(const adouble &a)
Definition adtl_hov.h:1460
adouble operator--()
Definition adtl_hov.h:832
friend adouble erfc(const adouble &a)
Definition adtl_hov.h:2026
friend int ADOLC_Init_sparse_pattern(adouble *a, int n, unsigned int start_cnt)
adouble operator+() const
Definition adtl_hov.h:534
friend adouble tan(const adouble &a)
Definition adtl_hov.h:858
friend adouble ldexp(const adouble &a, const adouble &b)
Definition adtl_hov.h:1977
double * getOneADValue(int i) const
Definition adtl_hov.h:2562
friend adouble floor(const adouble &a)
Definition adtl_hov.h:1668
friend int ADOLC_get_sparse_jacobian(func_ad *const func, int n, int m, int repeat, double *basepoints, ADOLC::Sparse::SparseMatrix &sparseJac)
adouble & operator+=(const double v)
Definition adtl_hov.h:2142
friend istream & operator>>(istream &, adouble &)
friend adouble asinh(const adouble &a)
Definition adtl_hov.h:1488
friend int operator!=(const double, const adouble &)
Definition adtl_hov.h:2325
friend double frexp(const adouble &a, int *v)
Definition adtl_hov.h:1997
friend adouble ceil(const adouble &a)
Definition adtl_hov.h:1650
friend int operator<(const double, const adouble &)
Definition adtl_hov.h:2460
friend adouble erf(const adouble &a)
Definition adtl_hov.h:2006
Interface for functions evaluated with tapeless higher-order values.
Definition adtl_hov.h:78
virtual int operator()(int n, adouble *x, int m, adouble *y)=0
double makeInf()
Definition adtl_hov.h:386
Mode
Definition adtl_hov.h:37
@ ADTL_ZOS
Definition adtl_hov.h:38
@ ADTL_FOV
Definition adtl_hov.h:39
@ ADTL_DEFAULT
Definition adtl_hov.h:43
@ ADTL_HOV
Definition adtl_hov.h:42
@ ADTL_INDO
Definition adtl_hov.h:40
@ ADTL_FOV_INDO
Definition adtl_hov.h:41
double makeNaN()
Definition adtl_hov.h:382
#define DIAG_OUT
Definition usrparms.h:52