source: trunk/ADOL-C/include/adolc/edfclasses.h @ 737

Last change on this file since 737 was 737, checked in by kulshres, 15 months ago

init_edf() must not be overloaded by child classes

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

File size: 3.8 KB
Line 
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
19class EDFobject {
20protected:
21    ext_diff_fct *edf;
22    void init_edf(EDFobject *ebase);
23public:
24    EDFobject() { init_edf(this); }
25    virtual ~EDFobject() { edf_zero(edf); }
26    virtual int function(int n, double *x, int m, double *y) = 0;
27    virtual int zos_forward(int n, double *x, int m, double *y) = 0;
28    virtual int fos_forward(int n, double *dp_x, double *dp_X, int m, double *dp_y, double *dp_Y) = 0;
29    virtual int fov_forward(int n, double *dp_x, int p, double **dpp_X, int m, double *dp_y, double **dpp_Y) = 0;
30    virtual int fos_reverse(int m, double *dp_U, int n, double *dp_Z, double *dp_x, double *dp_y) = 0;
31    virtual int fov_reverse(int m, int p, double **dpp_U, int n, double **dpp_Z, double *dp_x, double *dp_y) = 0;
32    virtual int call(int n, adouble *xa, int m, adouble *ya) {
33        return call_ext_fct(edf,n,xa,m,ya);
34    }
35};
36
37class EDFobject_iArr {
38protected:
39    ext_diff_fct *edf;
40    void init_edf(EDFobject_iArr *ebase);
41public:
42    EDFobject_iArr() { init_edf(this); }
43    virtual ~EDFobject_iArr() { edf_zero(edf); }
44    virtual int function(int iArrLength, int *iArr, int n, double *x, int m, double *y) = 0;
45    virtual int zos_forward(int iArrLength, int *iArr, int n, double *x, int m, double *y) = 0;
46    virtual int fos_forward(int iArrLength, int *iArr, int n, double *dp_x, double *dp_X, int m, double *dp_y, double *dp_Y) = 0;
47    virtual int fov_forward(int iArrLength, int *iArr, int n, double *dp_x, int p, double **dpp_X, int m, double *dp_y, double **dpp_Y) = 0;
48    virtual int fos_reverse(int iArrLength, int *iArr, int m, double *dp_U, int n, double *dp_Z, double *dp_x, double *dp_y) = 0;
49    virtual int fov_reverse(int iArrLength, int *iArr, int m, int p, double **dpp_U, int n, double **dpp_Z, double *dp_x, double *dp_y) = 0;
50    virtual int call(int iArrLength, int *iArr, int n, adouble *xa, int m, adouble *ya) {
51        return call_ext_fct(edf,iArrLength,iArr,n,xa,m,ya);
52    }
53};
54
55class EDFobject_v2 {
56protected:
57    ext_diff_fct_v2 *edf;
58    void init_edf(EDFobject_v2 *ebase);
59public:
60    EDFobject_v2() { init_edf(this); }
61    virtual ~EDFobject_v2() { edf_zero(edf); }
62    virtual int function(int iArrLen, int *iArr, int nin, int nout, int *insz, double **x, int *outsz, double **y, void* ctx) = 0;
63    virtual int zos_forward(int iArrLen, int *iArr, int nin, int nout, int *insz, double **x, int *outsz, double **y, void* ctx) = 0;
64    virtual int fos_forward(int iArrLen, int* iArr, int nin, int nout, int *insz, double **x, double **xp, int *outsz, double **y, double **yp, void *ctx) = 0;
65    virtual int fov_forward(int iArrLen, int* iArr, int nin, int nout, int *insz, double **x, int ndir, double ***Xp, int *outsz, double **y, double ***Yp, void* ctx) = 0;
66    virtual int fos_reverse(int iArrLen, int* iArr, int nout, int nin, int *outsz, double **up, int *insz, double **zp, double **x, double **y, void *ctx) = 0;
67    virtual int fov_reverse(int iArrLen, int* iArr, int nout, int nin, int *outsz, int dir, double ***Up, int *insz, double ***Zp, double **x, double **y, void* ctx) = 0;
68    virtual int call(int iArrLen, int* iArr, int nin, int nout, int *insz, adouble **x, int *outsz, adouble **y) {
69        return call_ext_fct(edf,iArrLen,iArr,nin,nout,insz,x,outsz,y);
70    }
71};
72
73#endif
Note: See TracBrowser for help on using the repository browser.