42 #if defined(RAD_DEBUG_BLOCKKEEP) && !defined(HAVE_SACADO_UNINIT)
43 #undef RAD_DEBUG_BLOCKKEEP
54 #undef RAD_ALLOW_WANTDERIV
55 #ifndef RAD_DISALLOW_WANTDERIV
56 #define RAD_ALLOW_WANTDERIV
62 #define RAD_REINIT_0(x)
63 #define RAD_REINIT_1(x)
64 #define RAD_REINIT_2(x)
67 #if RAD_REINIT == 1 //{{
69 #define RAD_REINIT_1(x) x
70 #ifdef RAD_ALLOW_WANTDERIV
71 #define ADvar ADvar_1n
72 #define IndepADvar IndepADvar_1n
75 #define IndepADvar IndepADvar_1
76 #endif //RAD_ALLOW_WANTDERIV
77 #elif RAD_REINIT == 2 //}{
79 #define RAD_REINIT_2(x) x
81 #define RAD_cvchk(x) if (x.gen != x.IndepADvar_root.gen) { x.cv = new ADvari<Double>(x.Val);\
82 x.gen = x.IndepADvar_root.gen; }
83 #ifdef RAD_ALLOW_WANTDERIV
84 #define IndepADvar IndepADvar_2n
85 #define ADvar ADvar_2n
87 #define IndepADvar IndepADvar_2
89 #endif //RAD_ALLOW_WANTDERIV
90 #elif RAD_REINIT != 0 //}{
91 Botch! Expected
"RAD_REINIT" to be 0, 1, or 2.
94 #undef RAD_ALLOW_WANTDERIV
96 #define RAD_REINIT_0(x) x
99 #ifdef RAD_ALLOW_WANTDERIV
100 #define Allow_noderiv(x) x
102 #define Allow_noderiv(x)
106 #undef RAD_Const_WARN
107 #undef RAD_AUTO_AD_Const
108 #undef RAD_DEBUG_BLOCKKEEP
114 #ifdef RAD_Const_WARN // ==> RAD_AUTO_AD_Const and RAD_DEBUG
115 #ifndef RAD_AUTO_AD_Const
116 #define RAD_AUTO_AD_Const
123 #endif // RAD_Const_WARN
130 #ifndef RAD_AUTO_AD_Const
131 #ifdef RAD_DEBUG_BLOCKKEEP
139 #ifdef RAD_AUTO_AD_Const
140 #undef RAD_DEBUG_BLOCKKEEP
142 #ifdef RAD_DEBUG_BLOCKKEEP
143 #if !(RAD_DEBUG_BLOCKKEEP > 0)
144 #undef RAD_DEBUG_BLOCKKEEP
146 extern "C" void _uninit_f2c(
void *x,
int type,
long len);
148 template <
typename T>
149 struct UninitType {};
152 struct UninitType<float> {
153 static const int utype = 4;
157 struct UninitType<double> {
158 static const int utype = 5;
161 template <
typename T>
162 struct UninitType< std::complex<T> > {
163 static const int utype = UninitType<T>::utype + 2;
172 template<
typename T>
class
205 #define Dtype typename DoubleAvoid<Double>::dtype
206 #define Ltype typename DoubleAvoid<Double>::ltype
207 #define Itype typename DoubleAvoid<Double>::itype
208 #define Ttype typename DoubleAvoid<Double>::ttype
213 template<
typename Double>
class ADvar;
220 template<
typename Double>
class Derp;
222 template<
typename Double>
struct
230 template<
typename Double>
class
237 ADMemblock *Busy, *First, *
Free;
242 ADMemblock *DBusy, *DFree;
243 size_t DMleft, nderps;
245 #ifdef RAD_DEBUG_BLOCKKEEP
247 ADMemblock *rad_Oldcurmb;
249 void *new_ADmemblock(
size_t);
252 static const Double
One, negOne;
254 void *Memalloc(
size_t len);
255 static void Gradcomp(
int wantgrad);
257 static void aval_reset();
258 static void free_all();
259 static void re_init();
260 static void Weighted_Gradcomp(
size_t, ADVar**, Double*);
261 static void Outvar_Gradcomp(ADVar&);
263 DErp *new_Derp(
const Double *,
const ADVari*,
const ADVari*);
269 template<
typename Double>
class
279 template<
typename Double>
class
286 inline void *
operator new(size_t,
Derp *x) {
return x; }
287 inline void operator delete(
void*,
Derp *) {}
296 Derp(
const ADVari *);
297 Derp(
const Double *,
const ADVari *);
298 Derp(
const Double *,
const ADVari *,
const ADVari *);
299 inline void *
operator new(
size_t len) {
return (
Derp*)ADVari::adc.Memalloc(len); }
303 #if RAD_REINIT > 0 //{
304 template<
typename Double> Derp<Double>*
305 ADcontext<Double>::new_Derp(
const Double *
a,
const ADvari<Double> *b,
const ADvari<Double> *
c)
310 if (this->DMleft == 0) {
317 this->DMleft = nderps;
319 rv = &((DErp*)DBusy->
memblk)[--this->DMleft];
327 #define Ai const Base< ADvari<Double> >&
328 #define AI const Base< IndepADvar<Double> >&
329 #define T template<typename Double>
356 #define F ADvari<Double>&
391 #ifdef HAVE_SACADO_CXX11
406 template<
typename Double>ADvari<Double>&
ADf1(Double f, Double g,
const IndepADvar<Double> &x);
407 template<
typename Double>ADvari<Double>&
ADf2(Double f, Double gx, Double gy,
408 const IndepADvar<Double> &x,
const IndepADvar<Double> &y);
409 template<
typename Double>ADvari<Double>&
ADfn(Double f,
int n,
410 const IndepADvar<Double> *x,
const Double *g);
412 template<
typename Double> IndepADvar<Double>&
ADvar_operatoreq(IndepADvar<Double>*,
413 const ADvari<Double>&);
414 template<
typename Double> ADvar<Double>&
ADvar_operatoreq(ADvar<Double>*,
const ADvari<Double>&);
415 template<
typename Double>
void AD_Const(
const IndepADvar<Double>&);
416 template<
typename Double>
void AD_Const1(Double*,
const IndepADvar<Double>&);
417 template<
typename Double> ADvari<Double>&
ADf1(Double, Double,
const ADvari<Double>&);
418 template<
typename Double> ADvari<Double>&
ADf2(Double, Double, Double,
419 const ADvari<Double>&,
const ADvari<Double>&);
420 template<
typename Double> ADvari<Double>&
ADf2(Double, Double, Double,
421 const IndepADvar<Double>&,
const ADvari<Double>&);
422 template<
typename Double> ADvari<Double>&
ADf2(Double, Double, Double,
423 const ADvari<Double>&,
const IndepADvar<Double>&);
424 template<
typename Double> Double
val(
const ADvari<Double>&);
426 template<
typename Double>
class
427 ADvari :
public Base< ADvari<Double> > {
432 #ifdef RAD_AUTO_AD_Const
434 #ifdef RAD_Const_WARN
435 mutable const IndepADVar *padv;
438 mutable const IndepADVar *padv;
439 #endif //RAD_Const_WARN
442 static ADvari *First_ADvari, **Last_ADvari;
444 inline void ADvari_padv(
const IndepADVar *v) {
446 Last_ADvari = &this->Next;
449 #endif //RAD_AUTO_AD_Const
453 static int gcgen_cur, last_opno, zap_gcgen, zap_gcgen1, zap_opno;
454 static FILE *debug_file;
459 void *
operator new(
size_t len) {
462 rv->gcgen = gcgen_cur;
463 rv->opno = ++last_opno;
464 if (last_opno == zap_opno && gcgen_cur == zap_gcgen)
465 printf(
"Got to opno %d\n", last_opno);
471 void operator delete(
void*) {}
472 #ifdef RAD_ALLOW_WANTDERIV
473 inline ADvari(Double t): Val(t), aval(0.), wantderiv(1) {}
474 inline ADvari(): Val(0.), aval(0.), wantderiv(1) {}
475 inline void no_deriv() { wantderiv = 0; }
477 inline ADvari(Double t): Val(t), aval(0.) {}
480 #ifdef RAD_AUTO_AD_Const
482 friend class ADvar<Double>;
483 friend class ADvar1<Double>;
485 friend class ADvar2<Double>;
488 ADvari(
const IndepADVar *, Double);
489 ADvari(
const IndepADVar *, Double, Double);
493 #define Ai const Base< ADvari >&
495 #define T1(r,f) F r f <>(Ai);
529 #ifdef HAVE_SACADO_CXX11
545 friend ADvari& ADf1<>(Double
f, Double
g,
const ADvari &x);
546 friend ADvari& ADf2<>(Double f, Double gx, Double gy,
const ADvari &x,
const ADvari &y);
547 friend ADvari& ADfn<>(Double f,
int n,
const IndepADVar *x,
const Double *g);
549 inline operator Double() {
return this->Val; }
550 inline operator Double()
const {
return this->Val; }
555 template<
typename Double>
class
561 ADvar1(Double val1,
const Double *a1,
const ADVari *c1): ADVari(val1) {
562 #ifdef RAD_ALLOW_WANTDERIV
563 if (!ADVari::adc.new_Derp(a1,
this,c1))
566 ADVari::adc.new_Derp(a1,
this,c1);
569 #else // RAD_REINIT == 0
571 ADvar1(Double val1,
const ADVari *c1): ADVari(val1), d(c1) {}
572 ADvar1(Double val1,
const Double *a1,
const ADVari *c1):
573 ADVari(val1), d(a1,this,c1) {}
574 #ifdef RAD_AUTO_AD_Const
575 typedef typename ADVari::IndepADVar IndepADVar;
577 ADvar1(
const IndepADVar*,
const IndepADVar&);
578 ADvar1(
const IndepADVar*,
const ADVari&);
579 ADvar1(
const Double val1,
const Double *a1,
const ADVari *c1,
const ADVar *v):
580 ADVari(val1), d(a1,this,c1) {
582 this->ADvari_padv(v);
585 #endif // RAD_REININT > 0
589 template<
typename Double>
class
590 ConstADvari:
public ADvari<Double> {
602 inline ConstADvari(Double t): ADVari(t) { prevcad = lastcad; lastcad =
this; }
604 inline void *
operator new(
size_t len) {
return ADVari::adc.Memalloc(len); }
605 inline ConstADvari(Double t): ADVari(t) {}
607 static void aval_reset(
void);
610 template<
typename Double>
class
616 #elif RAD_REINIT == 2
617 typedef unsigned long ADGenType;
618 mutable ADGenType gen;
624 template<
typename Double>
class
634 IndepADvar_root.ADvprev = (this->ADvprev = IndepADvar_root.ADvprev)->ADvnext =
this;
635 this->ADvnext = &IndepADvar_root;
646 (this->ADvnext->ADvprev = this->ADvprev)->ADvnext = this->ADvnext;
659 #if RAD_REINIT > 0 //{
660 template<
typename Double> IndepADvar_base0<Double>
661 IndepADvar_base<Double>::IndepADvar_root(0.);
663 template<
typename Double>
void
664 IndepADvar_base<Double>::Move_to_end() {
665 if (
this != IndepADvar_root.ADvprev) {
666 (this->ADvnext->ADvprev = this->ADvprev)->ADvnext = this->ADvnext;
667 IndepADvar_root.ADvprev = (this->ADvprev = IndepADvar_root.ADvprev)->ADvnext =
this;
668 this->ADvnext = &IndepADvar_root;
671 #elif RAD_REINIT == 2
672 template<
typename Double>
typename IndepADvar_base0<Double>::ADGenType
673 IndepADvar_base<Double>::gen0(1);
677 template<
typename Double>
class
678 IndepADvar:
protected IndepADvar_base<Double>,
public Base< IndepADvar<Double> > {
680 static void AD_Const(
const IndepADvar&);
686 #ifdef RAD_AUTO_AD_Const
691 #elif defined(RAD_EQ_ALIAS)
696 #endif //RAD_AUTO_AD_Const
701 typedef Double value_type;
713 #ifdef RAD_ALLOW_WANTDERIV
714 inline int Wantderiv() {
return this->wantderiv; }
723 #ifdef RAD_AUTO_AD_Const
725 inline IndepADvar() { cv = 0; }
726 inline ~IndepADvar() {
740 #ifdef RAD_Const_WARN
741 inline operator ADVari&()
const {
742 ADVari *tcv = this->cv;
747 inline operator ADVari*()
const {
748 ADVari *tcv = this->cv;
753 #else //RAD_Const_WARN
754 inline operator ADVari&()
const {
RAD_cvchk((*
this))
return *this->cv; }
755 inline operator ADVari*()
const {
RAD_cvchk((*
this))
return this->cv; }
756 #endif //RAD_Const_WARN
758 inline Double
val()
const {
765 inline Double
adj()
const {
771 friend void AD_Const1<>(Double*,
const IndepADvar&);
773 friend ADVari& ADf1<>(Double, Double,
const IndepADvar&);
774 friend ADVari& ADf2<>(Double, Double, Double,
const IndepADvar&,
const IndepADvar&);
775 friend ADVari& ADf2<>(Double, Double, Double,
const ADVari&,
const IndepADvar&);
776 friend ADVari& ADf2<>(Double, Double, Double,
const IndepADvar&,
const ADVari&);
792 #define Ai const Base< ADVari >&
793 #define AI const Base< IndepADvar >&
801 #define T1(f) friend ADVari& f<> (AI);
803 #define F friend ADVari&
842 #ifdef HAVE_SACADO_CXX11
855 template<
typename Double>
class
856 ADvar:
public IndepADvar<Double> {
866 #if RAD_REINIT == 0 //{
868 if (ConstADVari::cadc.fpval_implies_const)
869 x =
new ConstADVari(d);
871 #ifdef RAD_AUTO_AD_Const //{
872 x =
new ADVari((IndepADVar*)
this, d);
873 x->ADvari_padv(
this);
880 ADVari *x =
new ADVari(d);
891 inline ADvar(
double i) { ADvar_ctr(Double(i)); }
892 inline ADvar(
int i) { ADvar_ctr(Double(i)); }
893 inline ADvar(
long i) { ADvar_ctr(Double(i)); }
896 #ifdef RAD_AUTO_AD_Const
897 inline ADvar(IndepADVar &x) {
898 this->cv = x.cv ?
new ADVar1(
this, x) : 0;
901 inline ADvar(ADVari &x) { this->cv = &x; x.ADvari_padv(
this); }
902 inline ADvar& operator=(IndepADVar &x) {
905 this->cv =
new ADVar1(
this,x);
908 inline ADvar& operator=(ADVari &x) {
911 this->cv =
new ADVar1(
this, x);
915 friend ADvar& ADvar_operatoreq<>(ADvar*, const ADVari&);
918 inline ADvar(
const IndepADVar &x) {
920 this->cv = (ADVari*)x.cv;
922 inline ADvar(const ADVari &x) { this->cv = (ADVari*)&x; }
923 inline ADvar& operator=(IndepADVar &x) {
925 this->cv = (ADVari*)x.cv; return *this;
927 inline ADvar& operator=(const ADVari &x) { this->cv = (ADVari*)&x;
return *
this; }
929 ADvar(const IndepADVar &x) {
933 this->cv =
new ADVar1(x.cv->Val, &this->cv->adc.One, x.cv);
943 this->cv =
new ADVar1(x.
cv->Val, &this->cv->adc.One, (ADVari*)x.
cv);
951 this->cv =
new ADVar1(x.
Val, &this->cv->adc.One, &x);
957 ADvar& operator=(Double);
958 ADvar& operator+=(
const ADVari&);
959 ADvar& operator+=(Double);
960 ADvar& operator-=(
const ADVari&);
961 ADvar& operator-=(Double);
962 ADvar& operator*=(
const ADVari&);
963 ADvar& operator*=(Double);
964 ADvar& operator/=(
const ADVari&);
965 ADvar& operator/=(Double);
968 {
return ConstADVari::cadc.fpval_implies_const; }
970 { ConstADVari::cadc.fpval_implies_const = newval; }
972 bool oldval = ConstADVari::cadc.fpval_implies_const;
973 ConstADVari::cadc.fpval_implies_const = newval;
977 inline static bool get_fpval_implies_const(
void) {
return true; }
978 inline static void set_fpval_implies_const(
bool newval) {}
979 inline static bool setget_fpval_implies_const(
bool newval) {
return newval; }
985 static inline void aval_reset() { ConstADVari::aval_reset(); }
993 template<
typename Double>
997 template<
typename Double>
1000 template<
typename Double>
1001 inline void AD_Const(
const IndepADvar<Double>&v) {}
1002 #endif //RAD_REINIT == 0
1004 template<
typename Double>
class
1005 ConstADvar:
public ADvar<Double> {
1022 void ConstADvar_ctr(Double);
1032 #ifdef RAD_NO_CONST_UPDATE
1038 this->cv =
new ADVari(d);
1047 this->cv =
new ADVar1(
this,d);
1056 #ifdef RAD_ALLOW_WANTDERIV
1057 template<
typename Double>
class
1061 typedef ADvar<Double>
ADVar;
1062 typedef IndepADvar<Double> IndepADVar;
1063 typedef typename IndepADVar::ADVari ADVari;
1064 typedef ADvar1<Double> ADVar1;
1066 void ADvar_ndctr(Double d) {
1067 ADVari *x =
new ADVari(d);
1075 inline ADvar_nd(
double i): ADVar((
void*)0,0) { ADvar_ndctr(Double(i)); }
1076 inline ADvar_nd(
int i): ADVar((
void*)0,0) { ADvar_ndctr(Double(i)); }
1077 inline ADvar_nd(
long i): ADVar((
void*)0,0) { ADvar_ndctr(Double(i)); }
1078 inline ADvar_nd(Double d): ADVar((
void*)0,0) { ADvar_ndctr(d); }
1082 this->cv =
new ADVar1(x.cv->Val, &this->cv->adc.One, x.cv);
1089 this->cv =
new ADVar1(x.Val, &this->cv->adc.One, &x);
1095 #define ADvar_nd ADvar
1096 #endif //RAD_ALLOW_WANTDERIV
1098 template<
typename Double>
class
1099 ADvar1s:
public ADvar1<Double> {
1103 #if RAD_REINIT > 0 //{{
1104 inline ADvar1s(Double val1, Double a1,
const ADVari *c1): ADVar1(val1,&a1,c1) {}
1107 ADvar1s(Double val1, Double a1,
const ADVari *c1): ADVar1(val1,&a,c1), a(a1) {}
1108 #ifdef RAD_AUTO_AD_Const
1110 ADvar1s(Double val1, Double a1,
const ADVari *c1,
const ADVar *v):
1111 ADVar1(val1,&a,c1,v), a(a1) {}
1113 #endif // }} RAD_REINIT > 0
1116 template<
typename Double>
class
1117 ADvar2:
public ADvari<Double> {
1122 #if RAD_REINIT > 0 //{{
1123 ADvar2(Double val1,
const ADVari *Lcv,
const Double *Lc,
1124 const ADVari *Rcv,
const Double *Rc): ADVari(val1) {
1125 #ifdef RAD_ALLOW_WANTDERIV
1127 Ld = ADVari::adc.new_Derp(Lc,
this, Lcv);
1128 Rd = ADVari::adc.new_Derp(Rc,
this, Rcv);
1132 ADVari::adc.new_Derp(Lc, this, Lcv);
1133 ADVari::adc.new_Derp(Rc,
this, Rcv);
1134 #endif //RAD_ALLOW_WANTDERIV
1136 #else //}{ RAD_REINIT == 0
1138 ADvar2(Double val1,
const ADVari *Lcv,
const Double *Lc,
1139 const ADVari *Rcv,
const Double *Rc):
1141 dR.
next = DErp::LastDerp;
1143 DErp::LastDerp = &dL;
1150 #ifdef RAD_AUTO_AD_Const
1152 ADvar2(Double val1,
const ADVari *Lcv,
const Double *Lc,
1153 const ADVari *Rcv,
const Double *Rc, ADVar *v):
1155 dR.
next = DErp::LastDerp;
1157 DErp::LastDerp = &dL;
1164 this->ADvari_padv(v);
1167 #endif // }} RAD_REINIT
1170 template<
typename Double>
class
1171 ADvar2q:
public ADvar2<Double> {
1176 #if RAD_REINIT > 0 //{{
1177 inline ADvar2q(Double val1, Double Lp, Double Rp,
const ADVari *Lcv,
const ADVari *Rcv):
1179 #ifdef RAD_ALLOW_WANTDERIV
1181 Ld = ADVari::adc.new_Derp(&Lp,
this, Lcv);
1182 Rd = ADVari::adc.new_Derp(&Rp,
this, Rcv);
1186 ADVari::adc.new_Derp(&Lp, this, Lcv);
1187 ADVari::adc.new_Derp(&Rp,
this, Rcv);
1188 #endif //RAD_ALLOW_WANTDERIV
1190 #else //}{ RADINIT == 0
1192 ADvar2q(Double val1, Double Lp, Double Rp,
const ADVari *Lcv,
const ADVari *Rcv):
1193 ADVar2(val1), a(Lp), b(Rp) {
1194 this->dR.next = DErp::LastDerp;
1195 this->dL.next = &this->dR;
1196 DErp::LastDerp = &this->dL;
1201 this->dL.b = this->dR.b =
this;
1203 #ifdef RAD_AUTO_AD_Const
1205 ADvar2q(Double val1, Double Lp, Double Rp,
const ADVari *Lcv,
1206 const ADVari *Rcv,
const ADVar *v):
1207 ADVar2(val1), a(Lp), b(Rp) {
1208 this->dR.next = DErp::LastDerp;
1209 this->dL.next = &this->dR;
1210 DErp::LastDerp = &this->dL;
1215 this->dL.b = this->dR.b =
this;
1217 this->ADvari_padv(v);
1220 #endif //}} RAD_REINIT > 0
1223 template<
typename Double>
class
1224 ADvarn:
public ADvari<Double> {
1229 #if RAD_REINIT > 0 // {{
1230 ADvarn(Double val1,
int n1,
const IndepADVar *x,
const Double *g): ADVari(val1) {
1231 #ifdef RAD_ALLOW_WANTDERIV
1233 for(i = nd = 0; i < n1; i++)
1234 if (ADVari::adc.new_Derp(g+i,
this, x[i].cv))
1239 for(
int i = 0; i < n1; i++)
1240 ADVari::adc.new_Derp(g+i,
this, x[i].cv);
1241 #endif // RAD_ALLOW_WANTDERIV
1247 ADvarn(Double val1,
int n1,
const IndepADVar *x,
const Double *g):
1248 ADVari(val1), n(n1) {
1253 a1 = a = (Double*)ADVari::adc.Memalloc(n*
sizeof(*a));
1254 d1 = Da = (DErp*)ADVari::adc.Memalloc(n*
sizeof(DErp));
1255 dlast = DErp::LastDerp;
1256 for(i = 0; i < n1; i++, d1++) {
1264 DErp::LastDerp = dlast;
1266 #endif //}} RAD_REINIT > 0
1269 template<
typename Double>
1274 template<
typename Double>
1280 template<
typename Double>
1281 inline int operator<(const Base< ADvari<Double> > &LL, Double
R) {
1285 template<
typename Double>
1286 inline int operator<(Double L, const Base< ADvari<Double> > &RR) {
1291 template<
typename Double>
1297 template<
typename Double>
1298 inline int operator<=(const Base< ADvari<Double> > &LL, Double
R) {
1302 template<
typename Double>
1303 inline int operator<=(Double L, const Base< ADvari<Double> > &RR) {
1308 template<
typename Double>
1314 template<
typename Double>
1319 template<
typename Double>
1325 template<
typename Double>
1331 template<
typename Double>
1336 template<
typename Double>
1342 template<
typename Double>
1348 template<
typename Double>
1353 template<
typename Double>
1359 template<
typename Double>
1365 template<
typename Double>
1370 template<
typename Double>
1376 template<
typename Double>
1379 return Mbase + (Mleft -= len);
1380 return new_ADmemblock(len);
1382 #if RAD_REINIT > 0 //{{
1384 template<
typename Double>
1387 template<
typename Double>
1391 template<
typename Double>
1393 a(*a1), b(b1), c(c1) {}
1394 #else //}{ RAD_REINIT == 0
1396 template<
typename Double>
1402 template<
typename Double>
1409 template<
typename Double>
1414 #endif //}} RAD_REINIT
1428 #ifdef RAD_AUTO_AD_Const
1434 #ifndef RAD_DEBUG_gcgen1
1435 #define RAD_DEBUG_gcgen1 -1
1447 First =
new ADMemblock;
1451 Mbase = (
char*)First->
memblk;
1452 Mleft =
sizeof(First->
memblk);
1453 rad_need_reinit = 0;
1454 #ifdef RAD_DEBUG_BLOCKKEEP
1455 rad_busy_blocks = 0;
1460 DBusy =
new ADMemblock;
1463 DMleft = nderps =
sizeof(DBusy->
memblk)/
sizeof(DErp);
1470 ADMemblock *mb, *mb1;
1472 for(mb = ADVari::adc.Busy; mb; mb = mb1) {
1476 for(mb = ADVari::adc.Free; mb; mb = mb1) {
1480 for(mb = ConstADVari::cadc.Busy; mb; mb = mb1) {
1484 ConstADVari::cadc.Busy = ADVari::adc.Busy = ADVari::adc.Free = 0;
1485 ConstADVari::cadc.Mleft = ADVari::adc.Mleft = 0;
1486 ConstADVari::cadc.Mbase = ADVari::adc.Mbase = 0;
1488 for(mb = ADVari::adc.DBusy; mb; mb = mb1) {
1492 for(mb = ADVari::adc.DFree; mb; mb = mb1) {
1496 ADVari::adc.DBusy = ADVari::adc.DFree = 0;
1497 ADVari::adc.DMleft = 0;
1498 ConstADVari::cadc.Mbase = ADVari::adc.Mbase = 0;
1500 ConstADVari::lastcad = 0;
1501 Derp<Double>::LastDerp = 0;
1509 if (ConstADVari::cadc.Busy || ADVari::adc.Busy || ADVari::adc.Free
1511 || ADVari::adc.DBusy || ADVari::adc.DFree
1514 ADVari::adc.do_init();
1515 ConstADVari::cadc.do_init();
1518 template<
typename Double>
void*
1521 ADMemblock *mb, *mb0, *mb1, *mbf, *x;
1522 #ifdef RAD_AUTO_AD_Const
1525 #ifdef RAD_Const_WARN
1537 if ((rad_need_reinit & 1) &&
this == &ADVari::adc) {
1538 rad_need_reinit &= ~1;
1540 #ifdef RAD_DEBUG_BLOCKKEEP
1541 Mleft = rad_mleft_save;
1542 if (Mleft <
sizeof(First->
memblk))
1543 _uninit_f2c(Mbase + Mleft,
1544 UninitType<Double>::utype,
1545 (
sizeof(First->
memblk) - Mleft)
1547 if ((mb = Busy->
next)) {
1549 for(;; mb = mb->
next) {
1551 UninitType<Double>::utype,
1558 rad_Oldcurmb = Busy;
1559 if (rad_busy_blocks >= RAD_DEBUG_BLOCKKEEP) {
1560 rad_busy_blocks = 0;
1564 for(mb = Busy; mb != mb0; mb = mb1) {
1571 Mbase = (
char*)First->
memblk;
1572 Mleft =
sizeof(First->
memblk);
1579 for(mb = Busy; mb != mb0; mb = mb1) {
1586 Mbase = (
char*)First->
memblk;
1587 Mleft =
sizeof(First->
memblk);
1589 #ifdef RAD_AUTO_AD_Const // {
1590 *ADVari::Last_ADvari = 0;
1591 ADVari::Last_ADvari = &ADVari::First_ADvari;
1592 a = ADVari::First_ADvari;
1597 #ifdef RAD_Const_WARN
1598 if ((i = a->opno) > 0)
1601 v->
cv = cv =
new ADVari(v, a->
Val);
1605 v->
cv =
new ADVari(v, a->
Val);
1611 #endif // } RAD_AUTO_AD_Const
1612 #if RAD_REINIT > 0 //{
1614 while((mb1 = mb->
next)) {
1625 while((vb = vb->ADvnext) != vb0)
1626 if ((tcv = ((IADv*)vb)->cv))
1627 ((IADv*)vb)->cv =
new ADVari(tcv->
Val);
1628 #elif RAD_REINIT == 2
1633 return Mbase + (Mleft -= len);
1640 #ifdef RAD_DEBUG_BLOCKKEEP
1645 return (Mbase = (
char*)x->
memblk) +
1646 (Mleft =
sizeof(First->
memblk) - len);
1649 template<
typename Double>
void
1652 #if RAD_REINIT > 0 //{{
1656 if (ADVari::adc.rad_need_reinit && wantgrad) {
1657 mb = ADVari::adc.DBusy;
1658 d = ((DErp*)mb->
memblk) + ADVari::adc.DMleft;
1659 de = ((DErp*)mb->
memblk) + ADVari::adc.nderps;
1666 de = d + ADVari::adc.nderps;
1669 #else //}{ RAD_REINIT == 0
1672 if (ADVari::adc.rad_need_reinit && wantgrad) {
1673 for(d = DErp::LastDerp; d; d = d->
next)
1676 #endif //}} RAD_REINIT
1678 if (!(ADVari::adc.rad_need_reinit & 1)) {
1679 ADVari::adc.rad_need_reinit = 1;
1680 ADVari::adc.rad_mleft_save = ADVari::adc.Mleft;
1681 ADVari::adc.Mleft = 0;
1685 if (ADVari::gcgen_cur == ADVari::zap_gcgen1 && wantgrad) {
1687 if (!(fname = getenv(
"RAD_DEBUG_FILE")))
1688 fname =
"rad_debug.out";
1692 ADVari::debug_file = fopen(fname,
"w");
1693 ADVari::zap_gcgen1 = -1;
1696 #if RAD_REINIT > 0 //{{
1697 if (ADVari::adc.DMleft < ADVari::adc.nderps && wantgrad) {
1698 mb = ADVari::adc.DBusy;
1699 d = ((DErp*)mb->
memblk) + ADVari::adc.DMleft;
1700 de = ((DErp*)mb->
memblk) + ADVari::adc.nderps;
1704 if (ADVari::debug_file) {
1705 for(; d < de; d++) {
1706 fprintf(ADVari::debug_file,
"%d\t%d\t%g + %g * %g",
1709 fprintf(ADVari::debug_file,
" = %g\n", d->
c->
aval);
1719 de = d + ADVari::adc.nderps;
1722 #else //}{ RAD_REINIT == 0
1723 if ((d = DErp::LastDerp) && wantgrad) {
1726 if (ADVari::debug_file)
1728 fprintf(ADVari::debug_file,
"%d\t%d\t%g + %g * %g",
1731 fprintf(ADVari::debug_file,
" = %g\n", d->
c->
aval);
1732 }
while((d = d->
next));
1736 while((d = d->
next));
1739 if (ADVari::debug_file) {
1740 fclose(ADVari::debug_file);
1741 ADVari::debug_file = 0;
1744 #endif // }} RAD_REINIT
1746 if (ADVari::debug_file)
1747 fflush(ADVari::debug_file);
1748 ADVari::gcgen_cur++;
1749 ADVari::last_opno = 0;
1753 template<
typename Double>
void
1757 #if RAD_REINIT > 0 //{{
1761 if (ADVari::adc.rad_need_reinit) {
1762 mb = ADVari::adc.DBusy;
1763 d = ((DErp*)mb->
memblk) + ADVari::adc.DMleft;
1764 de = ((DErp*)mb->
memblk) + ADVari::adc.nderps;
1771 de = d + ADVari::adc.nderps;
1774 #else //}{ RAD_REINIT == 0
1777 if (ADVari::adc.rad_need_reinit) {
1778 for(d = DErp::LastDerp; d; d = d->
next)
1781 #endif //}} RAD_REINIT
1783 if (!(ADVari::adc.rad_need_reinit & 1)) {
1784 ADVari::adc.rad_need_reinit = 1;
1785 ADVari::adc.rad_mleft_save = ADVari::adc.Mleft;
1786 ADVari::adc.Mleft = 0;
1790 if (ADVari::gcgen_cur == ADVari::zap_gcgen1) {
1792 if (!(fname = getenv(
"RAD_DEBUG_FILE")))
1793 fname =
"rad_debug.out";
1797 ADVari::debug_file = fopen(fname,
"w");
1798 ADVari::zap_gcgen1 = -1;
1801 #if RAD_REINIT > 0 //{{
1802 if (ADVari::adc.DMleft < ADVari::adc.nderps) {
1803 for(i = 0; i < n; i++)
1804 V[i]->cv->
aval = w[i];
1805 mb = ADVari::adc.DBusy;
1806 d = ((DErp*)mb->
memblk) + ADVari::adc.DMleft;
1807 de = ((DErp*)mb->
memblk) + ADVari::adc.nderps;
1811 if (ADVari::debug_file) {
1812 for(; d < de; d++) {
1813 fprintf(ADVari::debug_file,
"%d\t%d\t%g + %g * %g",
1816 fprintf(ADVari::debug_file,
" = %g\n", d->
c->
aval);
1826 de = d + ADVari::adc.nderps;
1829 #else //}{ RAD_REINIT == 0
1830 if ((d = DErp::LastDerp) != 0) {
1831 for(i = 0; i < n; i++)
1832 V[i]->cv->
aval = w[i];
1834 if (ADVari::debug_file)
1836 fprintf(ADVari::debug_file,
"%d\t%d\t%g + %g * %g",
1839 fprintf(ADVari::debug_file,
" = %g\n", d->
c->
aval);
1840 }
while((d = d->
next));
1844 while((d = d->
next));
1847 if (ADVari::debug_file) {
1848 fclose(ADVari::debug_file);
1849 ADVari::debug_file = 0;
1852 #endif // }} RAD_REINIT
1854 if (ADVari::debug_file)
1855 fflush(ADVari::debug_file);
1856 ADVari::gcgen_cur++;
1857 ADVari::last_opno = 0;
1861 template<
typename Double>
void
1869 template<
typename Double>
1874 RAD_REINIT_2(Val = d; this->gen = this->IndepADvar_root.gen;)
1877 template<typename Double>
1881 cv =
new ADVari(Double(i));
1882 RAD_REINIT_2(Val = i; this->gen = this->IndepADvar_root.gen;)
1885 template<typename Double>
1889 cv =
new ADVari(Double(i));
1890 RAD_REINIT_2(Val = i; this->gen = this->IndepADvar_root.gen;)
1893 template<typename Double>
1897 cv =
new ADVari(Double(i));
1898 RAD_REINIT_2(Val = i; this->gen = this->IndepADvar_root.gen;)
1901 template<typename Double>
1905 this->cv =
new ConstADVari(0.);
1906 RAD_REINIT_2(this->Val = 0.; this->gen = this->IndepADvar_root.gen;)
1909 template<typename Double>
void
1913 this->cv =
new ConstADVari(d);
1914 RAD_REINIT_2(this->Val = d; this->gen = this->IndepADvar_root.gen;)
1917 template<typename Double>
1922 ConstADVari *y =
new ConstADVari(x.
cv->Val);
1924 x.
cv->adc.new_Derp(&x.adc.One, y, x.
cv);
1926 DErp *d =
new DErp(&x.adc.One, y, x.
cv);
1929 RAD_REINIT_2(this->Val = y->Val; this->gen = this->IndepADvar_root.gen;)
1932 template<
typename Double>
1937 ConstADVari *y =
new ConstADVari(x.
cv->Val);
1939 x.
cv->adc.new_Derp(&x.
cv->adc.One, y, x.
cv);
1941 DErp *d =
new DErp(&x.
cv->adc.One, y, (ADVari*)x.
cv);
1944 RAD_REINIT_2(this->Val = y->Val; this->gen = this->IndepADvar_root.gen;)
1947 template<
typename Double>
1951 ConstADVari *y =
new ConstADVari(x.
Val);
1953 x.
adc.new_Derp(&x.
adc.One, y, &x);
1955 DErp *d =
new DErp(&x.
adc.One, y, &x);
1958 RAD_REINIT_2(this->Val = y->Val; this->gen = this->IndepADvar_root.gen;)
1961 template<
typename Double>
1967 ConstADVari *ncv =
new ConstADVari(v.
val());
1968 #ifdef RAD_AUTO_AD_Const
1975 template<
typename Double>
1979 #ifdef RAD_ALLOW_WANTDERIV
1981 if (this->gen != this->IndepADvar_root.gen) {
1982 cv =
new ADVari(Val);
1983 this->gen = this->IndepADvar_root.gen;
1986 return this->wantderiv = cv->wantderiv = n;
1989 #endif // RAD_ALLOW_WANTDERIV
1992 template<
typename Double>
2002 #elif RAD_REINIT == 1
2007 #ifdef RAD_AUTO_AD_Const
2009 template<
typename Double>
2012 this->ADvari_padv(x);
2016 template<typename Double>
2019 this->ADvari_padv(x);
2023 template<typename Double>
2025 ADVari(y.cv->Val), d((const Double*)&
ADcontext<Double>::One, (ADVari*)this, y.cv)
2027 this->ADvari_padv(x);
2030 template<
typename Double>
2032 ADVari(y.Val), d((const Double*)&ADcontext<Double>::One, this, &y)
2034 this->ADvari_padv(x);
2039 template<
typename Double>
2045 RAD_REINIT_2(This->Val = x.
Val; This->gen = This->IndepADvar_root.gen;)
2049 template<
typename Double>
2055 RAD_REINIT_2(This->Val = x.
Val; This->gen = This->IndepADvar_root.gen;)
2062 template<
typename Double>
2066 #ifdef RAD_AUTO_AD_Const
2069 this->cv =
new ADVari(
this,d);
2071 this->cv =
new ADVari(d);
2078 template<
typename Double>
2082 #ifdef RAD_AUTO_AD_Const
2085 this->cv =
new ADVari(
this,d);
2087 this->cv =
RAD_REINIT_0(ConstADVari::cadc.fpval_implies_const
2088 ?
new ConstADVari(d)
2091 RAD_REINIT_2(this->Val = d; this->gen = this->IndepADvar_root.gen;)
2096 template<
typename Double>
2103 template<
typename Double>
2111 #ifdef RAD_AUTO_AD_Const
2112 #define RAD_ACA ,this
2117 template<
typename Double>
2120 ADVari *Lcv = this->cv;
2128 template<
typename Double>
2135 template<
typename Double>
2138 ADVari *tcv = this->cv;
2139 this->cv =
new ADVar1(tcv->
Val + R, &tcv->
adc.One, tcv
RAD_ACA);
2146 template<
typename Double>
2153 template<
typename Double>
2161 template<
typename Double>
2164 ADVari *Lcv = this->cv;
2172 template<
typename Double>
2179 template<
typename Double>
2182 ADVari *tcv = this->cv;
2183 this->cv =
new ADVar1(tcv->
Val - R, &tcv->
adc.One, tcv
RAD_ACA);
2190 template<
typename Double>
2197 template<
typename Double>
2205 template<
typename Double>
2208 ADVari *Lcv = this->cv;
2216 template<
typename Double>
2223 template<
typename Double>
2226 ADVari *Lcv = this->cv;
2234 template<
typename Double>
2241 template<
typename Double>
2246 Double Lv = L.
Val, Rv = R.
Val, pL = 1. / Rv, q = Lv/Rv;
2250 template<
typename Double>
2253 ADVari *Lcv = this->cv;
2254 Double Lv = Lcv->
Val, Rv = R.
Val, pL = 1. / Rv, q = Lv/Rv;
2262 template<
typename Double>
2269 template<
typename Double>
2273 Double recip = 1. / R.
Val;
2274 Double q = L * recip;
2278 template<
typename Double>
2281 ADVari *Lcv = this->cv;
2289 template<
typename Double>
2297 template<
typename Double>
2305 template<
typename Double>
2313 template<
typename Double>
2325 template<
typename Double>
2333 template<
typename Double>
2341 template<
typename Double>
2346 Double x = L.
Val, y = R.
Val, t = x*x + y*y;
2350 template<
typename Double>
2354 Double y = R.
Val, t = x*x + y*y;
2358 template<
typename Double>
2362 Double x = L.
Val, t = x*x + y*y;
2366 template<
typename Double>
2375 template<
typename Double>
2384 template<
typename Double>
2393 template<
typename Double>
2402 template<
typename Double>
2411 template<
typename Double>
2420 template<
typename Double>
2427 template<
typename Double>
2434 template<
typename Double>
2443 rcv->
d.a = &rcv->
Val;
2449 template<
typename Double>
2457 template<
typename Double>
2461 static double num = 1. /
std::log(10.);
2466 template<
typename Double>
2475 template<
typename Double>
2483 template<
typename Double>
2491 template<
typename Double>
2498 template<
typename Double>
2505 template<
typename Double>
2513 template<
typename Double>
2521 template<
typename Double>
2529 template<
typename Double>
2535 if ((t = v.
Val) < 0) {
2542 template<
typename Double>
2551 if ((t = v.
Val) < 0) {
2558 #ifdef HAVE_SACADO_CXX11
2559 template<
typename Double>
2561 cbrt(
const Base< ADvari<Double> > &vv) {
2562 const ADvari<Double>& v = vv.derived();
2564 return *(
new ADvar1s<Double>(t, 1.0/(3.0*t*t), &v));
2568 template<
typename Double>
2574 template<
typename Double>
2575 inline ADvari<Double>&
2580 template<
typename Double>
2586 template<
typename Double>
2592 template<
typename Double>
2598 template<
typename Double>
2604 template<
typename Double>
2610 template<
typename Double>
2611 inline ADvari<Double>&
2616 template<
typename Double>
2623 #define A (ADvari<Double>*)
2624 #ifdef RAD_Const_WARN
2625 #define C(x) (((x)->opno < 0) ? RAD_Const_Warn(x) : 0, *A x)
2629 #define T template<typename Double> inline
2630 #define F ADvari<Double>&
2631 #define Ai const Base< ADvari<Double> >&
2632 #define AI const Base< IndepADvar<Double> >&
2634 #define CAI(x,y) const IndepADvar<Double> & x = y.derived()
2635 #define CAi(x,y) const ADvari<Double> & x = y.derived()
2637 T r f(Ai LL, AI RR) { CAi(L,LL); CAI(R,RR); RAD_cvchk(R) return f(L, C(R.cv)); } \
2638 T r f(AI LL, Ai RR) { CAI(L,LL); CAi(R,RR); RAD_cvchk(L) return f(C(L.cv), R); }\
2639 T r f(AI LL, AI RR) { CAI(L,LL); CAI(R,RR); RAD_cvchk(L) RAD_cvchk(R) return f(C(L.cv), C(R.cv)); }\
2640 T r f(AI LL, D R) { CAI(L,LL); RAD_cvchk(L) return f(C(L.cv), R); } \
2641 T r f(D L, AI RR) { CAI(R,RR); RAD_cvchk(R) return f(L, C(R.cv)); } \
2642 T r f(Ai L, Dtype R) { return f(L, (D)R); }\
2643 T r f(AI L, Dtype R) { return f(L, (D)R); }\
2644 T r f(Ai L, Ltype R) { return f(L, (D)R); }\
2645 T r f(AI L, Ltype R) { return f(L, (D)R); }\
2646 T r f(Ai L, Itype R) { return f(L, (D)R); }\
2647 T r f(AI L, Itype R) { return f(L, (D)R); }\
2648 T r f(Dtype L, Ai R) { return f((D)L, R); }\
2649 T r f(Dtype L, AI R) {return f((D)L, R); }\
2650 T r f(Ltype L, Ai R) { return f((D)L, R); }\
2651 T r f(Ltype L, AI R) { return f((D)L, R); }\
2652 T r f(Itype L, Ai R) { return f((D)L, R); }\
2653 T r f(Itype L, AI R) { return f((D)L, R); }
2674 T F f(AI xx) { CAI(x,xx); RAD_cvchk(x) return f(C(x.cv)); }
2696 #ifdef HAVE_SACADO_CXX11
2731 #undef Allow_noderiv
static void Outvar_Gradcomp(ADVar &v)
ADvari< Double > & asinh(const Base< ADvari< Double > > &vv)
ADT_RAD ADvari< double > Ai
ADvari< Double > & pow(const Base< ADvari< Double > > &LL, const Base< ADvari< Double > > &RR)
static ADcontext< Double > adc
ADvari< Double > & operator/(const Base< ADvari< Double > > &LL, const Base< ADvari< Double > > &RR)
static void aval_reset(void)
ADvari< Double > & exp(const Base< ADvari< Double > > &vv)
ADvar2q(Double val1, Double Lp, Double Rp, const ADVari *Lcv, const ADVari *Rcv)
void AD_Const1(Double *, const IndepADvar< Double > &)
ADT_RAD IndepADvar< double > AI
static CADcontext< Double > cadc
ADvar & operator+=(const ADVari &)
Sacado::RadVec::ADvar< double > ADVar
ADvari< Double > & abs(const Base< ADvari< Double > > &vv)
ADvari< Double > & ADf2(Double f, Double gx, Double gy, const IndepADvar< Double > &x, const IndepADvar< Double > &y)
void AD_Const(const IndepADvar< Double > &)
ADvar & operator*=(const ADVari &)
int operator!=(const Base< ADvari< Double > > &LL, const Base< ADvari< Double > > &RR)
static bool setget_fpval_implies_const(bool newval)
ADvari< Double > & log(const Base< ADvari< Double > > &vv)
Double val(const ADvari< Double > &)
IndepADvar & operator=(IndepADvar &x)
Turn ADvar into a meta-function class usable with mpl::apply.
ADvari< Double > & atan2(const Base< ADvari< Double > > &LL, const Base< ADvari< Double > > &RR)
ADvar1(Double val1, const ADVari *c1)
ConstADvar & operator=(ADVari &d)
Base class for Sacado types to control overload resolution.
IndepADvar< Double > & ADvar_operatoreq(IndepADvar< Double > *, const ADvari< Double > &)
KOKKOS_INLINE_FUNCTION mpl::enable_if_c< ExprLevel< Expr< T1 > >::value==ExprLevel< Expr< T2 > >::value, Expr< PowerOp< Expr< T1 >, Expr< T2 > > > >::type pow(const Expr< T1 > &expr1, const Expr< T2 > &expr2)
ADvari< Double > & cosh(const Base< ADvari< Double > > &vv)
ADvari< Double > & sqrt(const Base< ADvari< Double > > &vv)
ADvari< Double > & max(const Base< ADvari< Double > > &LL, const Base< ADvari< Double > > &RR)
ADvar1s(Double val1, Double a1, const ADVari *c1)
static void AD_Const(const IndepADvar &)
IndepADvar() Allow_noderiv(
IndepADVar::ADVari ADVari
static void Gradcomp(int wantgrad)
ADvari< Double > & asin(const Base< ADvari< Double > > &vv)
static void Weighted_Gradcomp(size_t, ADVar **, Double *)
expr expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c *expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr2 expr1 expr2 expr1 expr1 expr1 c
ADvar2(Double val1, const ADVari *Lcv, const Double *Lc, const ADVari *Rcv, const Double *Rc)
int operator>(const Base< ADvari< Double > > &LL, const Base< ADvari< Double > > &RR)
static void set_fpval_implies_const(bool newval)
ADvari< Double > & atanh(const Base< ADvari< Double > > &vv)
ConstADvar & operator=(Double d)
int RAD_Const_Warn(void *v)
ADvar & operator-=(const ADVari &)
ADvar & operator=(const ADVari &x)
ADvar1(Double val1, const Double *a1, const ADVari *c1)
static void Weighted_Gradcomp(size_t n, ADVar **v, Double *w)
ScalarType< value_type >::type scalar_type
ADvari< Double > & acosh(const Base< ADvari< Double > > &vv)
static void Gradcomp(int wantgrad)
ADvari< Double > & min(const Base< ADvari< Double > > &LL, const Base< ADvari< Double > > &RR)
ADvar & operator/=(const ADVari &)
atan2(expr1.val(), expr2.val())
ADvari< Double > & tan(const Base< ADvari< Double > > &vv)
ADvari< Double > & log10(const Base< ADvari< Double > > &vv)
ADvari< Double > & acos(const Base< ADvari< Double > > &vv)
ADvari< Double > & operator-(const Base< ADvari< Double > > &TT)
ADvari< Double > & tanh(const Base< ADvari< Double > > &vv)
ADvari< Double > & fabs(const Base< ADvari< Double > > &vv)
ADmemblock< Double > ADMemblock
static void Outvar_Gradcomp(ADvar &v)
ADvari< Double > & operator*(const Base< ADvari< Double > > &LL, const Base< ADvari< Double > > &RR)
IndepADvar_base(Allow_noderiv(int wd))
ADvari< Double > & operator+(const Base< ADvari< Double > > &TT)
ADvarn(Double val1, int n1, const IndepADVar *x, const Double *g)
static void Outvar_Gradcomp(ADVar &)
int operator>=(const Base< ADvari< Double > > &LL, const Base< ADvari< Double > > &RR)
int operator==(const Base< ADvari< Double > > &LL, const Base< ADvari< Double > > &RR)
ADvari< Double > & sinh(const Base< ADvari< Double > > &vv)
const derived_type & derived() const
IndepADvar< Double > IndepADVar
ADVari::IndepADVar IndepADVar
ADvari< Double > & sin(const Base< ADvari< Double > > &vv)
void * new_ADmemblock(size_t)
ADvari< Double > & cos(const Base< ADvari< Double > > &vv)
ADvari< Double > & ADf1(Double f, Double g, const IndepADvar< Double > &x)
void * Memalloc(size_t len)
static void Weighted_Gradcomp(size_t n, ADvar **v, Double *w)
IndepADvar< Double > IndepADVar
ADvari< Double > & ADfn(Double f, int n, const IndepADvar< Double > *x, const Double *g)
static bool get_fpval_implies_const(void)
ConstADvari< Double > ConstADVari
ADVar::ConstADVari ConstADVari
ADvari< Double > & atan(const Base< ADvari< Double > > &vv)
ADVar::IndepADVar IndepADVar