ADOL-C: Automatic Differentiation in C/C++ 2.7.3
Loading...
Searching...
No Matches
adtl_indo.h
Go to the documentation of this file.
1/*----------------------------------------------------------------------------
2 ADOL-C -- Automatic Differentiation by Overloading in C++
3 File: adouble.cpp
4 Revision: $Id$
5 Contents: adtl_indo.h contains that declaratins of procedures used
6 for sparsity pattern recognition.
7
8 Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz,
9 Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel,
10 Benjamin Letschert, Kshitij Kulshreshtha
11
12 This file is part of ADOL-C. This software is provided as open source.
13 Any use, reproduction, or distribution of the software constitutes
14 recipient's acceptance of the terms of the accompanying license file.
15
16----------------------------------------------------------------------------*/
17#ifndef ADOLC_ADTL_INDO_H
18#define ADOLC_ADTL_INDO_H
19
20#include <adolc/adolcexport.h>
21#include <adolc/adtl.h>
23#include <cmath>
24#include <iostream>
25#include <limits>
26#include <list>
27#include <ostream>
28#include <stdexcept>
29#include <vector>
30
31using std::istream;
32using std::list;
33using std::logic_error;
34using std::ostream;
35
41template <typename T> class func_ad {
42public:
43 virtual int operator()(int n, T *x, int m, T *y) = 0;
44};
45
47class adouble;
48int ADOLC_Init_sparse_pattern(adouble *a, int n, unsigned int start_cnt);
49int ADOLC_get_sparse_pattern(const adouble *const b, int m,
50 std::vector<uint *> &pat);
51
53 func_ad<adtl_indo::adouble> *const func_indo,
54 int n, int m, int repeat, double *basepoints,
55 SparseMatrix &sparseJac);
56
57double makeNaN();
58double makeInf();
59
66class adouble {
67public:
68 inline adouble();
69 inline adouble(const double v);
70 inline adouble(const double v, const double *adv);
71 inline adouble(const adouble &a);
72 inline ~adouble();
73
74 // sign
75 inline adouble operator-() const;
76 inline adouble operator+() const;
77
78 // addition
79 inline adouble operator+(const double v) const;
80 inline adouble operator+(const adouble &a) const;
81 inline friend adouble operator+(const double v, const adouble &a);
82
83 // subtraction
84 inline adouble operator-(const double v) const;
85 inline adouble operator-(const adouble &a) const;
86 inline friend adouble operator-(const double v, const adouble &a);
87
88 // multiplication
89 inline adouble operator*(const double v) const;
90 inline adouble operator*(const adouble &a) const;
91 inline friend adouble operator*(const double v, const adouble &a);
92
93 // division
94 inline adouble operator/(const double v) const;
95 inline adouble operator/(const adouble &a) const;
96 inline friend adouble operator/(const double v, const adouble &a);
97
98 // inc/dec
99 inline adouble operator++();
100 inline adouble operator++(int);
101 inline adouble operator--();
102 inline adouble operator--(int);
103
104 // functions
105 inline friend adouble tan(const adouble &a);
106 inline friend adouble exp(const adouble &a);
107 inline friend adouble log(const adouble &a);
108 inline friend adouble sqrt(const adouble &a);
109 inline friend adouble cbrt(const adouble &a);
110 inline friend adouble sin(const adouble &a);
111 inline friend adouble cos(const adouble &a);
112 inline friend adouble asin(const adouble &a);
113 inline friend adouble acos(const adouble &a);
114 inline friend adouble atan(const adouble &a);
115
116 inline friend adouble atan2(const adouble &a, const adouble &b);
117 inline friend adouble pow(const adouble &a, double v);
118 inline friend adouble pow(const adouble &a, const adouble &b);
119 inline friend adouble pow(double v, const adouble &a);
120 inline friend adouble log10(const adouble &a);
121
122 inline friend adouble sinh(const adouble &a);
123 inline friend adouble cosh(const adouble &a);
124 inline friend adouble tanh(const adouble &a);
125 inline friend adouble asinh(const adouble &a);
126 inline friend adouble acosh(const adouble &a);
127 inline friend adouble atanh(const adouble &a);
128 inline friend adouble fabs(const adouble &a);
129 inline friend adouble ceil(const adouble &a);
130 inline friend adouble floor(const adouble &a);
131 inline friend adouble fmax(const adouble &a, const adouble &b);
132 inline friend adouble fmax(double v, const adouble &a);
133 inline friend adouble fmax(const adouble &a, double v);
134 inline friend adouble fmin(const adouble &a, const adouble &b);
135 inline friend adouble fmin(double v, const adouble &a);
136 inline friend adouble fmin(const adouble &a, double v);
137 inline friend adouble ldexp(const adouble &a, const adouble &b);
138 inline friend adouble ldexp(const adouble &a, const double v);
139 inline friend adouble ldexp(const double v, const adouble &a);
140 inline friend double frexp(const adouble &a, int *v);
141 inline friend adouble erf(const adouble &a);
142 inline friend adouble erfc(const adouble &a);
143
144 inline friend void condassign(adouble &res, const adouble &cond,
145 const adouble &arg1, const adouble &arg2);
146 inline friend void condassign(adouble &res, const adouble &cond,
147 const adouble &arg);
148 inline friend void condeqassign(adouble &res, const adouble &cond,
149 const adouble &arg1, const adouble &arg2);
150 inline friend void condeqassign(adouble &res, const adouble &cond,
151 const adouble &arg);
152
153 /******************* nontemporary results ***************************/
154 // assignment
155 inline adouble &operator=(const double v);
156 inline adouble &operator=(const adouble &a);
157
158 // addition
159 inline adouble &operator+=(const double v);
160 inline adouble &operator+=(const adouble &a);
161
162 // subtraction
163 inline adouble &operator-=(const double v);
164 inline adouble &operator-=(const adouble &a);
165
166 // multiplication
167 inline adouble &operator*=(const double v);
168 inline adouble &operator*=(const adouble &a);
169
170 // division
171 inline adouble &operator/=(const double v);
172 inline adouble &operator/=(const adouble &a);
173
174 // not
175 inline int operator!() const;
176
177 // comparison
178 inline int operator!=(const adouble &) const;
179 inline int operator!=(const double) const;
180 inline friend int operator!=(const double, const adouble &);
181
182 inline int operator==(const adouble &) const;
183 inline int operator==(const double) const;
184 inline friend int operator==(const double, const adouble &);
185
186 inline int operator<=(const adouble &) const;
187 inline int operator<=(const double) const;
188 inline friend int operator<=(const double, const adouble &);
189
190 inline int operator>=(const adouble &) const;
191 inline int operator>=(const double) const;
192 inline friend int operator>=(const double, const adouble &);
193
194 inline int operator>(const adouble &) const;
195 inline int operator>(const double) const;
196 inline friend int operator>(const double, const adouble &);
197
198 inline int operator<(const adouble &) const;
199 inline int operator<(const double) const;
200 inline friend int operator<(const double, const adouble &);
201
202 /******************* getter / setter ********************************/
203 inline double getValue() const;
204 inline void setValue(const double v);
205
206 inline explicit operator double const &() const;
207 inline explicit operator double &&();
208 inline explicit operator double();
209
210protected:
211 inline const list<unsigned int> &get_pattern() const;
212 inline void add_to_pattern(const list<unsigned int> &v);
213 inline size_t get_pattern_size() const;
214 inline void delete_pattern();
215
216public:
217 friend int ADOLC_Init_sparse_pattern(adouble *a, int n,
218 unsigned int start_cnt);
219 friend int ADOLC_get_sparse_pattern(const adouble *const b, int m,
220 std::vector<uint *> &pat);
221 /******************* i/o operations *********************************/
222 friend ostream &operator<<(ostream &, const adouble &);
223 friend istream &operator>>(istream &, adouble &);
224
225private:
226 double val;
227 list<unsigned int> pattern;
228};
229
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)
233#endif
234
235#ifndef likely
236#define likely(x) (x)
237#endif
238#ifndef unlikely
239#define unlikely(x) (x)
240#endif
241
242inline double makeNaN() {
243 return ADOLC_MATH_NSP::numeric_limits<double>::quiet_NaN();
244}
245
246inline double makeInf() {
247 return ADOLC_MATH_NSP::numeric_limits<double>::infinity();
248}
249
250/******************************* ctors ************************************/
251inline adouble::adouble() : val(0) {
252 if (!pattern.empty())
253 pattern.clear();
254}
255
256inline adouble::adouble(const double v) : val(v) {
257 if (!pattern.empty())
258 pattern.clear();
259}
260
261inline adouble::adouble(const double v, [[maybe_unused]] const double *adv)
262 : val(v) {
263 if (!pattern.empty())
264 pattern.clear();
265}
266
267inline adouble::adouble(const adouble &a) : val(a.val) {
268 if (!pattern.empty())
269 pattern.clear();
270
272}
273
274/******************************* dtors ************************************/
276#if 0
277 if ( !pattern.empty() )
278 pattern.clear();
279#endif
280}
281
282/************************* temporary results ******************************/
283// sign
285 adouble tmp;
286 tmp.val = -val;
288 return tmp;
289}
290
291inline adouble adouble::operator+() const { return *this; }
292
293// addition
294inline adouble adouble::operator+(const double v) const {
295 adouble tmp(val + v);
297 return tmp;
298}
299
300inline adouble adouble::operator+(const adouble &a) const {
301 adouble tmp;
302 tmp.val = val + a.val;
305 return tmp;
306}
307
308inline adouble operator+(const double v, const adouble &a) {
309 adouble tmp(v + a.val);
311 return tmp;
312}
313
314// subtraction
315inline adouble adouble::operator-(const double v) const {
316 adouble tmp(val - v);
318 return tmp;
319}
320
321inline adouble adouble::operator-(const adouble &a) const {
322 adouble tmp;
323 tmp.val = val - a.val;
326 return tmp;
327}
328
329inline adouble operator-(const double v, const adouble &a) {
330 adouble tmp;
331 tmp.val = v - a.val;
333 return tmp;
334}
335
336// multiplication
337inline adouble adouble::operator*(const double v) const {
338 adouble tmp;
339 tmp.val = val * v;
341 return tmp;
342}
343
344inline adouble adouble::operator*(const adouble &a) const {
345 adouble tmp;
346 tmp.val = val * a.val;
349 return tmp;
350}
351
352inline adouble operator*(const double v, const adouble &a) {
353 adouble tmp;
354 tmp.val = v * a.val;
356 return tmp;
357}
358
359// division
360inline adouble adouble::operator/(const double v) const {
361 adouble tmp;
362 tmp.val = val / v;
364 return tmp;
365}
366
367inline adouble adouble::operator/(const adouble &a) const {
368 adouble tmp;
369 tmp.val = val / a.val;
372 return tmp;
373}
374
375inline adouble operator/(const double v, const adouble &a) {
376 adouble tmp;
377 tmp.val = v / a.val;
379 return tmp;
380}
381
382// inc/dec
384 ++val;
385 return *this;
386}
387
389 adouble tmp;
390 tmp.val = val++;
392 return tmp;
393}
394
396 --val;
397 return *this;
398}
399
401 adouble tmp;
402 tmp.val = val--;
404 return tmp;
405}
406
407// functions
408inline adouble tan(const adouble &a) {
409 adouble tmp;
410 tmp.val = ADOLC_MATH_NSP::tan(a.val);
412 return tmp;
413}
414
415inline adouble exp(const adouble &a) {
416 adouble tmp;
417 tmp.val = ADOLC_MATH_NSP::exp(a.val);
419 return tmp;
420}
421
422inline adouble log(const adouble &a) {
423 adouble tmp;
424 tmp.val = ADOLC_MATH_NSP::log(a.val);
426 return tmp;
427}
428
429inline adouble sqrt(const adouble &a) {
430 adouble tmp;
431 tmp.val = ADOLC_MATH_NSP::sqrt(a.val);
433 return tmp;
434}
435
436inline adouble cbrt(const adouble &a) {
437 adouble tmp;
438 tmp.val = ADOLC_MATH_NSP::cbrt(a.val);
440 return tmp;
441}
442
443inline adouble sin(const adouble &a) {
444 adouble tmp;
445 tmp.val = ADOLC_MATH_NSP::sin(a.val);
447 return tmp;
448}
449
450inline adouble cos(const adouble &a) {
451 adouble tmp;
452 tmp.val = ADOLC_MATH_NSP::cos(a.val);
454 return tmp;
455}
456
457inline adouble asin(const adouble &a) {
458 adouble tmp;
459 tmp.val = ADOLC_MATH_NSP::asin(a.val);
461 return tmp;
462}
463
464inline adouble acos(const adouble &a) {
465 adouble tmp;
466 tmp.val = ADOLC_MATH_NSP::acos(a.val);
468 return tmp;
469}
470
471inline adouble atan(const adouble &a) {
472 adouble tmp;
473 tmp.val = ADOLC_MATH_NSP::atan(a.val);
475 return tmp;
476}
477
478inline adouble atan2(const adouble &a, const adouble &b) {
479 adouble tmp;
480 tmp.val = ADOLC_MATH_NSP::atan2(a.val, b.val);
483 return tmp;
484}
485
486inline adouble pow(const adouble &a, double v) {
487 adouble tmp;
488 tmp.val = ADOLC_MATH_NSP::pow(a.val, v);
490 return tmp;
491}
492
493inline adouble pow(const adouble &a, const adouble &b) {
494 adouble tmp;
495 tmp.val = ADOLC_MATH_NSP::pow(a.val, b.val);
498 return tmp;
499}
500
501inline adouble pow(double v, const adouble &a) {
502 adouble tmp;
503 tmp.val = ADOLC_MATH_NSP::pow(v, a.val);
505 return tmp;
506}
507
508inline adouble log10(const adouble &a) {
509 adouble tmp;
510 tmp.val = ADOLC_MATH_NSP::log10(a.val);
512 return tmp;
513}
514
515inline adouble sinh(const adouble &a) {
516 adouble tmp;
517 tmp.val = ADOLC_MATH_NSP::sinh(a.val);
519 return tmp;
520}
521
522inline adouble cosh(const adouble &a) {
523 adouble tmp;
524 tmp.val = ADOLC_MATH_NSP::cosh(a.val);
526 return tmp;
527}
528
529inline adouble tanh(const adouble &a) {
530 adouble tmp;
531 tmp.val = ADOLC_MATH_NSP::tanh(a.val);
533 return tmp;
534}
535
536inline adouble asinh(const adouble &a) {
537 adouble tmp;
538 tmp.val = ADOLC_MATH_NSP_ERF::asinh(a.val);
540 return tmp;
541}
542
543inline adouble acosh(const adouble &a) {
544 adouble tmp;
545 tmp.val = ADOLC_MATH_NSP_ERF::acosh(a.val);
547 return tmp;
548}
549
550inline adouble atanh(const adouble &a) {
551 adouble tmp;
552 tmp.val = ADOLC_MATH_NSP_ERF::atanh(a.val);
554 return tmp;
555}
556
557inline adouble fabs(const adouble &a) {
558 adouble tmp;
559 tmp.val = ADOLC_MATH_NSP::fabs(a.val);
561 return tmp;
562}
563
564inline adouble ceil(const adouble &a) {
565 adouble tmp;
566 tmp.val = ADOLC_MATH_NSP::ceil(a.val);
567 return tmp;
568}
569
570inline adouble floor(const adouble &a) {
571 adouble tmp;
572 tmp.val = ADOLC_MATH_NSP::floor(a.val);
573 return tmp;
574}
575
576inline adouble fmax(const adouble &a, const adouble &b) {
577 adouble tmp;
578 double tmp2 = a.val - b.val;
579 if (tmp2 < 0) {
580 tmp.val = b.val;
582 } else {
583 tmp.val = a.val;
584 if (tmp2 > 0) {
586 } else {
589 }
590 }
591 return tmp;
592}
593
594inline adouble fmax(double v, const adouble &a) {
595 adouble tmp;
596 double tmp2 = v - a.val;
597 if (tmp2 < 0) {
598 tmp.val = a.val;
600 } else {
601 tmp.val = v;
602 if (tmp2 > 0) {
603 } else {
605 }
606 }
607 return tmp;
608}
609
610inline adouble fmax(const adouble &a, double v) {
611 adouble tmp;
612 double tmp2 = a.val - v;
613 if (tmp2 < 0) {
614 tmp.val = v;
615 } else {
616 tmp.val = a.val;
618 }
619 return tmp;
620}
621
622inline adouble fmin(const adouble &a, const adouble &b) {
623 adouble tmp;
624 double tmp2 = a.val - b.val;
625 if (tmp2 < 0) {
626 tmp.val = a.val;
628 } else {
629 tmp.val = b.val;
630 if (tmp2 > 0) {
632 } else {
635 }
636 }
637 return tmp;
638}
639
640inline adouble fmin(double v, const adouble &a) {
641 adouble tmp;
642 double tmp2 = v - a.val;
643 if (tmp2 < 0) {
644 tmp.val = v;
645 } else {
646 tmp.val = a.val;
648 }
649 return tmp;
650}
651
652inline adouble fmin(const adouble &a, double v) {
653 adouble tmp;
654 double tmp2 = a.val - v;
655 if (tmp2 < 0) {
656 tmp.val = a.val;
658 } else {
659 tmp.val = v;
660 if (tmp2 > 0) {
661 } else {
663 }
664 }
665 return tmp;
666}
667
668inline adouble ldexp(const adouble &a, const adouble &b) {
669 adouble tmp = a * pow(2., b);
672 return tmp;
673}
674
675inline adouble ldexp(const adouble &a, const double v) {
676 return a * ADOLC_MATH_NSP::pow(2., v);
677}
678
679inline adouble ldexp(const double v, const adouble &a) {
680 adouble tmp = v * pow(2., a);
682 return tmp;
683}
684
685inline double frexp(const adouble &a, int *v) {
686 return ADOLC_MATH_NSP::frexp(a.val, v);
687}
688
689inline adouble erf(const adouble &a) {
690 adouble tmp;
691 tmp.val = ADOLC_MATH_NSP_ERF::erf(a.val);
693 return tmp;
694}
695
696inline adouble erfc(const adouble &a) {
697 adouble tmp;
698 tmp.val = ADOLC_MATH_NSP_ERF::erfc(a.val);
700 return tmp;
701}
702
703inline void condassign(adouble &res, const adouble &cond, const adouble &arg1,
704 const adouble &arg2) {
705 if (cond.getValue() > 0)
706 res = arg1;
707 else
708 res = arg2;
709}
710
711inline void condassign(adouble &res, const adouble &cond, const adouble &arg) {
712 if (cond.getValue() > 0)
713 res = arg;
714}
715
716inline void condeqassign(adouble &res, const adouble &cond, const adouble &arg1,
717 const adouble &arg2) {
718 if (cond.getValue() >= 0)
719 res = arg1;
720 else
721 res = arg2;
722}
723
724inline void condeqassign(adouble &res, const adouble &cond,
725 const adouble &arg) {
726 if (cond.getValue() >= 0)
727 res = arg;
728}
729
730/******************* nontemporary results *********************************/
731inline adouble &adouble::operator=(const double v) {
732 val = v;
733 if (!pattern.empty())
734 pattern.clear();
735 return *this;
736}
737
739 val = a.val;
740 if (!pattern.empty())
741 pattern.clear();
743 return *this;
744}
745
746inline adouble &adouble::operator+=(const double v) {
747 val += v;
748 return *this;
749}
750
752 val = val + a.val;
754 return *this;
755}
756
757inline adouble &adouble::operator-=(const double v) {
758 val -= v;
759 return *this;
760}
761
763 val = val - a.val;
765 return *this;
766}
767
768inline adouble &adouble::operator*=(const double v) {
769 val = val * v;
770 return *this;
771}
772
774 val *= a.val;
776 return *this;
777}
778
779inline adouble &adouble::operator/=(const double v) {
780 val /= v;
781 return *this;
782}
783
785 val = val / a.val;
787 return *this;
788}
789
790// not
791inline int adouble::operator!() const { return val == 0.0; }
792
793// comparison
794inline int adouble::operator!=(const adouble &a) const { return val != a.val; }
795
796inline int adouble::operator!=(const double v) const { return val != v; }
797
798inline int operator!=(const double v, const adouble &a) { return v != a.val; }
799
800inline int adouble::operator==(const adouble &a) const { return val == a.val; }
801
802inline int adouble::operator==(const double v) const { return val == v; }
803
804inline int operator==(const double v, const adouble &a) { return v == a.val; }
805
806inline int adouble::operator<=(const adouble &a) const { return val <= a.val; }
807
808inline int adouble::operator<=(const double v) const { return val <= v; }
809
810inline int operator<=(const double v, const adouble &a) { return v <= a.val; }
811
812inline int adouble::operator>=(const adouble &a) const { return val >= a.val; }
813
814inline int adouble::operator>=(const double v) const { return val >= v; }
815
816inline int operator>=(const double v, const adouble &a) { return v >= a.val; }
817
818inline int adouble::operator>(const adouble &a) const { return val > a.val; }
819
820inline int adouble::operator>(const double v) const { return val > v; }
821
822inline int operator>(const double v, const adouble &a) { return v > a.val; }
823
824inline int adouble::operator<(const adouble &a) const { return val < a.val; }
825
826inline int adouble::operator<(const double v) const { return val < v; }
827
828inline int operator<(const double v, const adouble &a) { return v < a.val; }
829
830/******************* getter / setter **************************************/
831inline adouble::operator double const &() const { return val; }
832
833inline adouble::operator double &&() { return (double &&)val; }
834
835inline adouble::operator double() { return val; }
836
837inline double adouble::getValue() const { return val; }
838
839inline void adouble::setValue(const double v) { val = v; }
840
841inline const list<unsigned int> &adouble::get_pattern() const {
842 return pattern;
843}
844
846 if (!pattern.empty())
847 pattern.clear();
848}
849
850inline void adouble::add_to_pattern(const list<unsigned int> &v) {
851 if (likely(pattern != v)) {
852 if (!v.empty()) {
853 list<unsigned int> cv = v;
854 // pattern.splice(pattern.end(), cv);
855 pattern.merge(cv);
856 // if (pattern.size() > refcounter::refcnt) {
857 // pattern.sort();
858 pattern.unique();
859 //}
860 }
861 }
862}
863
864inline size_t adouble::get_pattern_size() const {
865 size_t s = 0;
866 if (!pattern.empty())
867 s = pattern.size();
868 return s;
869}
870
871} // namespace ADOLC::Sparse::adtl_indo
872
873#endif
#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