17#ifndef ADOLC_ADTL_INDO_H
18#define ADOLC_ADTL_INDO_H
33using std::logic_error;
50 std::vector<uint *> &pat);
54 int n,
int m,
int repeat,
double *basepoints,
70 inline adouble(
const double v,
const double *adv);
195 inline int operator>(
const double)
const;
199 inline int operator<(
const double)
const;
204 inline void setValue(
const double v);
206 inline explicit operator double const &()
const;
207 inline explicit operator double &&();
208 inline explicit operator double();
211 inline const list<unsigned int> &
get_pattern()
const;
218 unsigned int start_cnt);
220 std::vector<uint *> &pat);
227 list<unsigned int> pattern;
230#if defined(HAVE_BUILTIN_EXPECT) && HAVE_BUILTIN_EXPECT
231#define likely(x) __builtin_expect(!!(x), 1)
232#define unlikely(x) __builtin_expect(!!(x), 0)
239#define unlikely(x) (x)
243 return ADOLC_MATH_NSP::numeric_limits<double>::quiet_NaN();
247 return ADOLC_MATH_NSP::numeric_limits<double>::infinity();
252 if (!pattern.empty())
257 if (!pattern.empty())
263 if (!pattern.empty())
268 if (!pattern.empty())
277 if ( !pattern.empty() )
302 tmp.val = val + a.val;
323 tmp.val = val - a.val;
346 tmp.val = val * a.val;
369 tmp.val = val / a.val;
410 tmp.val = ADOLC_MATH_NSP::tan(a.val);
417 tmp.val = ADOLC_MATH_NSP::exp(a.val);
424 tmp.val = ADOLC_MATH_NSP::log(a.val);
431 tmp.val = ADOLC_MATH_NSP::sqrt(a.val);
438 tmp.val = ADOLC_MATH_NSP::cbrt(a.val);
445 tmp.val = ADOLC_MATH_NSP::sin(a.val);
452 tmp.val = ADOLC_MATH_NSP::cos(a.val);
459 tmp.val = ADOLC_MATH_NSP::asin(a.val);
466 tmp.val = ADOLC_MATH_NSP::acos(a.val);
473 tmp.val = ADOLC_MATH_NSP::atan(a.val);
480 tmp.val = ADOLC_MATH_NSP::atan2(a.val, b.val);
488 tmp.val = ADOLC_MATH_NSP::pow(a.val, v);
495 tmp.val = ADOLC_MATH_NSP::pow(a.val, b.val);
503 tmp.val = ADOLC_MATH_NSP::pow(v, a.val);
510 tmp.val = ADOLC_MATH_NSP::log10(a.val);
517 tmp.val = ADOLC_MATH_NSP::sinh(a.val);
524 tmp.val = ADOLC_MATH_NSP::cosh(a.val);
531 tmp.val = ADOLC_MATH_NSP::tanh(a.val);
538 tmp.val = ADOLC_MATH_NSP_ERF::asinh(a.val);
545 tmp.val = ADOLC_MATH_NSP_ERF::acosh(a.val);
552 tmp.val = ADOLC_MATH_NSP_ERF::atanh(a.val);
559 tmp.val = ADOLC_MATH_NSP::fabs(a.val);
566 tmp.val = ADOLC_MATH_NSP::ceil(a.val);
572 tmp.val = ADOLC_MATH_NSP::floor(a.val);
578 double tmp2 = a.val - b.val;
596 double tmp2 = v - a.val;
612 double tmp2 = a.val - v;
624 double tmp2 = a.val - b.val;
642 double tmp2 = v - a.val;
654 double tmp2 = a.val - v;
676 return a * ADOLC_MATH_NSP::pow(2., v);
686 return ADOLC_MATH_NSP::frexp(a.val, v);
691 tmp.val = ADOLC_MATH_NSP_ERF::erf(a.val);
698 tmp.val = ADOLC_MATH_NSP_ERF::erfc(a.val);
733 if (!pattern.empty())
740 if (!pattern.empty())
831inline adouble::operator
double const &()
const {
return val; }
833inline adouble::operator
double &&() {
return (
double &&)val; }
835inline adouble::operator double() {
return val; }
846 if (!pattern.empty())
851 if (
likely(pattern != v)) {
853 list<unsigned int> cv = v;
866 if (!pattern.empty())
#define likely(x)
Definition adtl_hov.h:304
Owning sparse matrix container in coordinate-format.
Definition sparsematrix.h:81
Index-domain active scalar used to propagate sparsity patterns.
Definition adtl_indo.h:66
friend adouble atanh(const adouble &a)
Definition adtl_indo.h:550
friend adouble log(const adouble &a)
Definition adtl_indo.h:422
friend int ADOLC_get_sparse_pattern(const adouble *const b, int m, std::vector< uint * > &pat)
friend adouble atan(const adouble &a)
Definition adtl_indo.h:471
void delete_pattern()
Definition adtl_indo.h:845
~adouble()
Definition adtl_indo.h:275
const list< unsigned int > & get_pattern() const
Definition adtl_indo.h:841
adouble operator-() const
Definition adtl_indo.h:284
friend adouble sin(const adouble &a)
Definition adtl_indo.h:443
adouble operator++()
Definition adtl_indo.h:383
friend adouble operator*(const double v, const adouble &a)
Definition adtl_indo.h:352
friend void condassign(adouble &res, const adouble &cond, const adouble &arg1, const adouble &arg2)
Definition adtl_indo.h:703
friend int operator==(const double, const adouble &)
Definition adtl_indo.h:804
friend adouble exp(const adouble &a)
Definition adtl_indo.h:415
friend adouble atan2(const adouble &a, const adouble &b)
Definition adtl_indo.h:478
friend adouble acosh(const adouble &a)
Definition adtl_indo.h:543
adouble & operator-=(const double v)
Definition adtl_indo.h:757
friend adouble cosh(const adouble &a)
Definition adtl_indo.h:522
friend adouble fmin(const adouble &a, const adouble &b)
Definition adtl_indo.h:622
friend adouble acos(const adouble &a)
Definition adtl_indo.h:464
int operator!() const
Definition adtl_indo.h:791
void setValue(const double v)
Definition adtl_indo.h:839
friend adouble log10(const adouble &a)
Definition adtl_indo.h:508
void add_to_pattern(const list< unsigned int > &v)
Definition adtl_indo.h:850
adouble & operator=(const double v)
Definition adtl_indo.h:731
adouble & operator/=(const double v)
Definition adtl_indo.h:779
friend ostream & operator<<(ostream &, const adouble &)
friend int operator>=(const double, const adouble &)
Definition adtl_indo.h:816
friend adouble sinh(const adouble &a)
Definition adtl_indo.h:515
friend adouble cos(const adouble &a)
Definition adtl_indo.h:450
friend adouble fmax(const adouble &a, const adouble &b)
Definition adtl_indo.h:576
double getValue() const
Definition adtl_indo.h:837
friend adouble cbrt(const adouble &a)
Definition adtl_indo.h:436
friend int operator<=(const double, const adouble &)
Definition adtl_indo.h:810
friend adouble asin(const adouble &a)
Definition adtl_indo.h:457
friend adouble operator/(const double v, const adouble &a)
Definition adtl_indo.h:375
adouble & operator*=(const double v)
Definition adtl_indo.h:768
adouble()
Definition adtl_indo.h:251
friend int operator>(const double, const adouble &)
Definition adtl_indo.h:822
friend void condeqassign(adouble &res, const adouble &cond, const adouble &arg1, const adouble &arg2)
Definition adtl_indo.h:716
friend adouble fabs(const adouble &a)
Definition adtl_indo.h:557
size_t get_pattern_size() const
Definition adtl_indo.h:864
friend adouble pow(const adouble &a, double v)
Definition adtl_indo.h:486
friend adouble sqrt(const adouble &a)
Definition adtl_indo.h:429
friend adouble tanh(const adouble &a)
Definition adtl_indo.h:529
adouble operator--()
Definition adtl_indo.h:395
friend adouble erfc(const adouble &a)
Definition adtl_indo.h:696
friend int ADOLC_Init_sparse_pattern(adouble *a, int n, unsigned int start_cnt)
adouble operator+() const
Definition adtl_indo.h:291
friend adouble tan(const adouble &a)
Definition adtl_indo.h:408
friend adouble ldexp(const adouble &a, const adouble &b)
Definition adtl_indo.h:668
friend adouble floor(const adouble &a)
Definition adtl_indo.h:570
adouble & operator+=(const double v)
Definition adtl_indo.h:746
friend istream & operator>>(istream &, adouble &)
friend adouble asinh(const adouble &a)
Definition adtl_indo.h:536
friend int operator!=(const double, const adouble &)
Definition adtl_indo.h:798
friend double frexp(const adouble &a, int *v)
Definition adtl_indo.h:685
friend adouble ceil(const adouble &a)
Definition adtl_indo.h:564
friend int operator<(const double, const adouble &)
Definition adtl_indo.h:828
friend adouble erf(const adouble &a)
Definition adtl_indo.h:689
Taped active scalar for reusable forward and reverse differentiation.
Definition adtb_types.h:211
Abstract function interface used by index-domain sparsity drivers.
Definition adtl_indo.h:41
virtual int operator()(int n, T *x, int m, T *y)=0
Definition adtl_indo.h:46
adouble exp(const adouble &a)
Definition adtl_indo.h:415
adouble cos(const adouble &a)
Definition adtl_indo.h:450
adouble cosh(const adouble &a)
Definition adtl_indo.h:522
adouble atan(const adouble &a)
Definition adtl_indo.h:471
int ADOLC_get_sparse_jacobian(func_ad< adtl::adouble > *const func, func_ad< adtl_indo::adouble > *const func_indo, int n, int m, int repeat, double *basepoints, SparseMatrix &sparseJac)
adouble tan(const adouble &a)
Definition adtl_indo.h:408
adouble fabs(const adouble &a)
Definition adtl_indo.h:557
adouble ceil(const adouble &a)
Definition adtl_indo.h:564
adouble log(const adouble &a)
Definition adtl_indo.h:422
adouble operator/(const double v, const adouble &a)
Definition adtl_indo.h:375
adouble sinh(const adouble &a)
Definition adtl_indo.h:515
adouble sin(const adouble &a)
Definition adtl_indo.h:443
double makeNaN()
Definition adtl_indo.h:242
adouble pow(const adouble &a, double v)
Definition adtl_indo.h:486
int ADOLC_Init_sparse_pattern(adouble *a, int n, unsigned int start_cnt)
adouble asinh(const adouble &a)
Definition adtl_indo.h:536
adouble atan2(const adouble &a, const adouble &b)
Definition adtl_indo.h:478
int operator<(const double v, const adouble &a)
Definition adtl_indo.h:828
int operator>=(const double v, const adouble &a)
Definition adtl_indo.h:816
adouble cbrt(const adouble &a)
Definition adtl_indo.h:436
adouble atanh(const adouble &a)
Definition adtl_indo.h:550
adouble asin(const adouble &a)
Definition adtl_indo.h:457
int operator>(const double v, const adouble &a)
Definition adtl_indo.h:822
adouble fmax(const adouble &a, const adouble &b)
Definition adtl_indo.h:576
adouble floor(const adouble &a)
Definition adtl_indo.h:570
adouble operator-(const double v, const adouble &a)
Definition adtl_indo.h:329
int operator!=(const double v, const adouble &a)
Definition adtl_indo.h:798
int ADOLC_get_sparse_pattern(const adouble *const b, int m, std::vector< uint * > &pat)
void condassign(adouble &res, const adouble &cond, const adouble &arg1, const adouble &arg2)
Definition adtl_indo.h:703
adouble acosh(const adouble &a)
Definition adtl_indo.h:543
adouble operator*(const double v, const adouble &a)
Definition adtl_indo.h:352
double frexp(const adouble &a, int *v)
Definition adtl_indo.h:685
adouble erfc(const adouble &a)
Definition adtl_indo.h:696
adouble ldexp(const adouble &a, const adouble &b)
Definition adtl_indo.h:668
int operator==(const double v, const adouble &a)
Definition adtl_indo.h:804
adouble fmin(const adouble &a, const adouble &b)
Definition adtl_indo.h:622
adouble acos(const adouble &a)
Definition adtl_indo.h:464
void condeqassign(adouble &res, const adouble &cond, const adouble &arg1, const adouble &arg2)
Definition adtl_indo.h:716
adouble log10(const adouble &a)
Definition adtl_indo.h:508
adouble erf(const adouble &a)
Definition adtl_indo.h:689
adouble sqrt(const adouble &a)
Definition adtl_indo.h:429
int operator<=(const double v, const adouble &a)
Definition adtl_indo.h:810
adouble operator+(const double v, const adouble &a)
Definition adtl_indo.h:308
double makeInf()
Definition adtl_indo.h:246
adouble tanh(const adouble &a)
Definition adtl_indo.h:529