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

Last change on this file since 741 was 741, checked in by kulshres, 2 years ago

add headers for implicit inclusions in edfclasses.h

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