16#if !defined(ADOLC_EDFCLASSES_H)
17#define ADOLC_EDFCLASSES_H 1
38 explicit EDFobject(
short outerTapeId,
short extTapeId) {
39 init_edf(
this, outerTapeId, extTapeId);
42 virtual int function(
short tapeId,
int m,
int n,
double *x,
double *y) = 0;
43 virtual int zos_forward(
short tapeId,
int m,
int n,
int keep,
double *x,
45 virtual int fos_forward(
short tapeId,
int m,
int n,
int keep,
double *x,
46 double *X,
double *y,
double *Y) = 0;
47 virtual int fov_forward(
short tapeId,
int m,
int n,
int p,
double *x,
48 double **X,
double *y,
double **Y) = 0;
49 virtual int hos_forward(
short tapeId,
int m,
int n,
int d,
int keep,
50 double *x,
double **X,
double *y,
double **Y) = 0;
51 virtual int hov_forward(
short tapeId,
int m,
int n,
int d,
int p,
double *x,
52 double ***X,
double *y,
double ***Y) = 0;
53 virtual int fos_reverse(
short tapeId,
int m,
int n,
double *u,
double *z,
54 double *x,
double *y) = 0;
55 virtual int fov_reverse(
short tapeId,
int m,
int n,
int q,
double **Uq,
56 double **Zq,
double *x,
double *y) = 0;
57 virtual int hos_reverse(
short tapeId,
int m,
int n,
int d,
double *u,
58 double **Zd,
double **Xd,
double **Yd) = 0;
59 virtual int hov_reverse(
short tapeId,
int m,
int n,
int d,
int q,
double **Uq,
60 double ***Zqd,
short **nz,
double **Xd,
64 static_cast<int>(dim_y), ya);
67 return call(dim_x, x.operator
adouble *(), dim_y, y.operator
adouble *());
85 virtual int function(
short tapeId,
size_t iArrLength,
size_t *iArr,
int m,
86 int n,
double *x,
double *y) = 0;
87 virtual int zos_forward(
short tapeId,
size_t iArrLength,
size_t *iArr,
int m,
88 int n,
int keep,
double *x,
double *y) = 0;
89 virtual int fos_forward(
short tapeId,
size_t iArrLength,
size_t *iArr,
int m,
90 int n,
int keep,
double *x,
double *X,
double *y,
92 virtual int fov_forward(
short tapeId,
size_t iArrLength,
size_t *iArr,
int m,
93 int n,
int p,
double *x,
double **X,
double *y,
95 virtual int hos_forward(
short tapeId,
size_t iArrLength,
size_t *iArr,
int m,
96 int n,
int d,
int keep,
double *x,
double **X,
97 double *y,
double **Y) = 0;
98 virtual int hov_forward(
short tapeId,
size_t iArrLength,
size_t *iArr,
int m,
99 int n,
int d,
int p,
double *x,
double ***X,
100 double *y,
double ***Y) = 0;
101 virtual int fos_reverse(
short tapeId,
size_t iArrLength,
size_t *iArr,
int m,
102 int n,
double *u,
double *z,
double *x,
104 virtual int fov_reverse(
short tapeId,
size_t iArrLength,
size_t *iArr,
int m,
105 int n,
int q,
double **Uq,
double **Zq,
double *x,
107 virtual int hos_reverse(
short tapeId,
size_t iArrLength,
size_t *iArr,
int m,
108 int n,
int d,
double *u,
double **Zd,
double **Xd,
110 virtual int hov_reverse(
short tapeId,
size_t iArrLength,
size_t *iArr,
int m,
111 int n,
int d,
int q,
double **Uq,
double ***Zqd,
112 short **nz,
double **Xd,
double **Yd) = 0;
113 int call(
size_t iArrLength,
size_t *iArr,
size_t dim_x,
adouble *xa,
115 return call_ext_fct(edf, iArrLength, iArr,
static_cast<int>(dim_x), xa,
116 static_cast<int>(dim_y), ya);
120 return call(iArrLength, iArr, dim_x, x.operator
adouble *(), dim_y,
139 init_edf(
this, outerTapeId, extTapeId);
142 virtual int function(
short tapeId,
size_t iArrLen,
size_t *iArr,
143 size_t dim_in,
size_t dim_out,
size_t *insz,
double **x,
144 size_t *outsz,
double **y,
void *ctx) = 0;
145 virtual int zos_forward(
short tapeId,
size_t iArrLen,
size_t *iArr,
146 size_t dim_in,
size_t dim_out,
size_t *insz,
147 double **x,
size_t *outsz,
double **y,
void *ctx) = 0;
148 virtual int fos_forward(
short tapeId,
size_t iArrLen,
size_t *iArr,
149 size_t dim_in,
size_t dim_out,
size_t *insz,
150 double **x,
double **xp,
size_t *outsz,
double **y,
151 double **yp,
void *ctx) = 0;
152 virtual int fov_forward(
short tapeId,
size_t iArrLen,
size_t *iArr,
153 size_t dim_in,
size_t dim_out,
size_t *insz,
154 double **x,
size_t num_dirs,
double ***Xp,
155 size_t *outsz,
double **y,
double ***Yp,
157 virtual int fos_reverse(
short tapeId,
size_t iArrLen,
size_t *iArr,
158 size_t dim_out,
size_t dim_in,
size_t *outsz,
159 double **up,
size_t *insz,
double **zp,
double **x,
160 double **y,
void *ctx) = 0;
161 virtual int fov_reverse(
short tapeId,
size_t iArrLen,
size_t *iArr,
162 size_t dim_out,
size_t dim_in,
size_t *outsz,
163 size_t num_weights,
double ***Up,
size_t *insz,
164 double ***Zp,
double **x,
double **y,
void *ctx) = 0;
165 int call(
size_t iArrLen,
size_t *iArr,
size_t dim_in,
size_t dim_out,
167 return call_ext_fct(edf, iArrLen, iArr, dim_in, dim_out, insz, x, outsz, y);
#define ADOLC_API
Definition adolcexport.h:16
External differentiated function with an additional integer array.
Definition edfclasses.h:77
virtual int fos_forward(short tapeId, size_t iArrLength, size_t *iArr, int m, int n, int keep, double *x, double *X, double *y, double *Y)=0
EDFobject_iArr()
Definition edfclasses.h:83
virtual int zos_forward(short tapeId, size_t iArrLength, size_t *iArr, int m, int n, int keep, double *x, double *y)=0
virtual int hos_forward(short tapeId, size_t iArrLength, size_t *iArr, int m, int n, int d, int keep, double *x, double **X, double *y, double **Y)=0
void init_edf(EDFobject_iArr *ebase)
virtual int hov_forward(short tapeId, size_t iArrLength, size_t *iArr, int m, int n, int d, int p, double *x, double ***X, double *y, double ***Y)=0
int call(size_t iArrLength, size_t *iArr, size_t dim_x, adouble *xa, size_t dim_y, adouble *ya)
Definition edfclasses.h:113
virtual ~EDFobject_iArr()=default
virtual int fov_forward(short tapeId, size_t iArrLength, size_t *iArr, int m, int n, int p, double *x, double **X, double *y, double **Y)=0
virtual int hos_reverse(short tapeId, size_t iArrLength, size_t *iArr, int m, int n, int d, double *u, double **Zd, double **Xd, double **Yd)=0
ext_diff_fct * edf
Definition edfclasses.h:79
virtual int hov_reverse(short tapeId, size_t iArrLength, size_t *iArr, int m, int n, int d, int q, double **Uq, double ***Zqd, short **nz, double **Xd, double **Yd)=0
int call(size_t iArrLength, size_t *iArr, size_t dim_x, advector &x, size_t dim_y, advector &y)
Definition edfclasses.h:118
virtual int function(short tapeId, size_t iArrLength, size_t *iArr, int m, int n, double *x, double *y)=0
virtual int fov_reverse(short tapeId, size_t iArrLength, size_t *iArr, int m, int n, int q, double **Uq, double **Zq, double *x, double *y)=0
virtual int fos_reverse(short tapeId, size_t iArrLength, size_t *iArr, int m, int n, double *u, double *z, double *x, double *y)=0
Block-structured external differentiated function interface.
Definition edfclasses.h:131
virtual int fos_forward(short tapeId, size_t iArrLen, size_t *iArr, size_t dim_in, size_t dim_out, size_t *insz, double **x, double **xp, size_t *outsz, double **y, double **yp, void *ctx)=0
ext_diff_fct_v2 * edf
Definition edfclasses.h:133
virtual int fov_reverse(short tapeId, size_t iArrLen, size_t *iArr, size_t dim_out, size_t dim_in, size_t *outsz, size_t num_weights, double ***Up, size_t *insz, double ***Zp, double **x, double **y, void *ctx)=0
virtual int fov_forward(short tapeId, size_t iArrLen, size_t *iArr, size_t dim_in, size_t dim_out, size_t *insz, double **x, size_t num_dirs, double ***Xp, size_t *outsz, double **y, double ***Yp, void *ctx)=0
void init_edf(EDFobject_v2 *ebase, short outerTapeId, short extTapeId)
virtual int zos_forward(short tapeId, size_t iArrLen, size_t *iArr, size_t dim_in, size_t dim_out, size_t *insz, double **x, size_t *outsz, double **y, void *ctx)=0
int call(size_t iArrLen, size_t *iArr, size_t dim_in, size_t dim_out, size_t *insz, adouble **x, size_t *outsz, adouble **y)
Definition edfclasses.h:165
virtual int fos_reverse(short tapeId, size_t iArrLen, size_t *iArr, size_t dim_out, size_t dim_in, size_t *outsz, double **up, size_t *insz, double **zp, double **x, double **y, void *ctx)=0
EDFobject_v2(short outerTapeId, short extTapeId)
Definition edfclasses.h:138
virtual int function(short tapeId, size_t iArrLen, size_t *iArr, size_t dim_in, size_t dim_out, size_t *insz, double **x, size_t *outsz, double **y, void *ctx)=0
virtual ~EDFobject_v2()=default
C++ base class for an externally differentiated function.
Definition edfclasses.h:31
int call(size_t dim_x, adouble *xa, size_t dim_y, adouble *ya)
Definition edfclasses.h:62
EDFobject(short outerTapeId, short extTapeId)
Definition edfclasses.h:38
int call(size_t dim_x, advector &x, size_t dim_y, advector &y)
Definition edfclasses.h:66
virtual int hos_reverse(short tapeId, int m, int n, int d, double *u, double **Zd, double **Xd, double **Yd)=0
virtual int function(short tapeId, int m, int n, double *x, double *y)=0
virtual int fos_reverse(short tapeId, int m, int n, double *u, double *z, double *x, double *y)=0
virtual ~EDFobject()=default
virtual int fos_forward(short tapeId, int m, int n, int keep, double *x, double *X, double *y, double *Y)=0
virtual int fov_reverse(short tapeId, int m, int n, int q, double **Uq, double **Zq, double *x, double *y)=0
void init_edf(EDFobject *ebase, short outerTapeId, short extTapeId)
virtual int hos_forward(short tapeId, int m, int n, int d, int keep, double *x, double **X, double *y, double **Y)=0
virtual int fov_forward(short tapeId, int m, int n, int p, double *x, double **X, double *y, double **Y)=0
ext_diff_fct * edf
Definition edfclasses.h:33
virtual int zos_forward(short tapeId, int m, int n, int keep, double *x, double *y)=0
virtual int hov_forward(short tapeId, int m, int n, int d, int p, double *x, double ***X, double *y, double ***Y)=0
virtual int hov_reverse(short tapeId, int m, int n, int d, int q, double **Uq, double ***Zqd, short **nz, double **Xd, double **Yd)=0
Taped active scalar for reusable forward and reverse differentiation.
Definition adtb_types.h:211
Contiguous vector of taped active values with active indexing.
Definition advector.h:126
ADOLC_API int call_ext_fct(ext_diff_fct *edfct, int n, adouble *xa, int m, adouble *ya)
Callback descriptor for a block-structured external function.
Definition externfcts2.h:68
Callback descriptor for an externally differentiated function.
Definition externfcts.h:106