ADOL-C: Automatic Differentiation in C/C++ 2.7.3
Loading...
Searching...
No Matches
edfclasses.h
Go to the documentation of this file.
1/*----------------------------------------------------------------------------
2 ADOL-C -- Automatic Differentiation by Overloading in C++
3 File: edfclasses.h
4 Revision: $Id$
5 Contents: public functions and data types for extern (differentiated)
6 functions.
7
8 Copyright (c) Kshitij Kulshreshtha
9
10 This file is part of ADOL-C. This software is provided as open source.
11 Any use, reproduction, or distribution of the software constitutes
12 recipient's acceptance of the terms of the accompanying license file.
13
14----------------------------------------------------------------------------*/
15
16#if !defined(ADOLC_EDFCLASSES_H)
17#define ADOLC_EDFCLASSES_H 1
18
19#include <adolc/adolcexport.h>
20#include <adolc/advector.h>
21#include <adolc/externfcts.h>
22#include <adolc/externfcts2.h>
23
32protected:
34 void init_edf(EDFobject *ebase, short outerTapeId, short extTapeId);
35
36public:
37 EDFobject() = delete;
38 explicit EDFobject(short outerTapeId, short extTapeId) {
39 init_edf(this, outerTapeId, extTapeId);
40 }
41 virtual ~EDFobject() = default;
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,
44 double *y) = 0;
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,
61 double **Yd) = 0;
62 int call(size_t dim_x, adouble *xa, size_t dim_y, adouble *ya) {
63 return call_ext_fct(edf, static_cast<int>(dim_x), xa,
64 static_cast<int>(dim_y), ya);
65 }
66 int call(size_t dim_x, advector &x, size_t dim_y, advector &y) {
67 return call(dim_x, x.operator adouble *(), dim_y, y.operator adouble *());
68 }
69};
70
78protected:
81
82public:
83 EDFobject_iArr() { init_edf(this); }
84 virtual ~EDFobject_iArr() = default;
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,
91 double *Y) = 0;
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,
94 double **Y) = 0;
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,
103 double *y) = 0;
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,
106 double *y) = 0;
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,
109 double **Yd) = 0;
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,
114 size_t dim_y, adouble *ya) {
115 return call_ext_fct(edf, iArrLength, iArr, static_cast<int>(dim_x), xa,
116 static_cast<int>(dim_y), ya);
117 }
118 int call(size_t iArrLength, size_t *iArr, size_t dim_x, advector &x,
119 size_t dim_y, advector &y) {
120 return call(iArrLength, iArr, dim_x, x.operator adouble *(), dim_y,
121 y.operator adouble *());
122 }
123};
124
132protected:
134 void init_edf(EDFobject_v2 *ebase, short outerTapeId, short extTapeId);
135
136public:
137 EDFobject_v2() = delete;
138 explicit EDFobject_v2(short outerTapeId, short extTapeId) {
139 init_edf(this, outerTapeId, extTapeId);
140 }
141 virtual ~EDFobject_v2() = default;
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,
156 void *ctx) = 0;
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,
166 size_t *insz, adouble **x, size_t *outsz, adouble **y) {
167 return call_ext_fct(edf, iArrLen, iArr, dim_in, dim_out, insz, x, outsz, y);
168 }
169};
170
171#endif
#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
EDFobject_v2()=delete
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
EDFobject()=delete
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