source: trunk/ADOL-C/src/externfcts.h @ 71

Last change on this file since 71 was 42, checked in by awalther, 10 years ago

set svn keywords property

  • Property svn:keywords set to Author Date Id Revision
File size: 3.8 KB
Line 
1/*----------------------------------------------------------------------------
2 ADOL-C -- Automatic Differentiation by Overloading in C++
3 File:     externfcts.h
4 Revision: $Id: externfcts.h 42 2009-07-15 18:37:17Z awalther $
5 Contents: public functions and data types for extern (differentiated)
6           functions.
7 
8 Copyright (c) Andreas Kowarz
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_EXTERNFCTS_H)
17#define ADOLC_EXTERNFCTS_H 1
18
19#include <common.h>
20#include <adouble.h>
21
22BEGIN_C_DECLS
23
24typedef int (*ADOLC_ext_fct) (int n, double *x, int m, double *y);
25
26/* A variable of this type is created by reg_ext_fct and a pointer to it is
27 * returned. Please do not create a variable of this type yourself. The index
28 * is likely to be wrong in this case. Use pointers instead. */
29typedef struct {
30    ADOLC_ext_fct function;
31
32    int (*zos_forward) (int n, double *dp_x,
33                        int m, double *dp_y);
34    int (*fos_forward) (int n, double *dp_x, double *dp_X,
35                        int m, double *dp_y, double *dp_Y);
36    int (*fov_forward) (int n, double *dp_x, double **dpp_X,
37                        int m, double *dp_y, double **dpp_Y);
38    int (*hos_forward) (int n, double *dp_x, double **dpp_X,
39                        int m, double *dp_y, double **dpp_Y);
40    int (*hov_forward) (int n, double *dp_x, double ***dppp_X,
41                        int m, double *dp_y, double ***dppp_Y);
42
43    int (*fos_reverse) (int m, double *dp_U,
44                        int n, double *dp_Z);
45    int (*fov_reverse) (int m, double **dpp_U,
46                        int n, double **dpp_Z);
47    int (*hos_reverse) (int m, double *dp_U,
48                        int n, double **dpp_Z);
49    int (*hov_reverse) (int m, double **dpp_U,
50                        int n, double ***dppp_Z,
51                        short **spp_nz);
52
53    /* This variables must be set before calling the functions above. */
54    double *dp_x;                /* x[n], x0[n]        - forward mode */
55    double *dp_X;                /* x1[n]              - forward mode */
56    double **dpp_X;              /* X[n][p], X[n][d]   - forward mode */
57    double ***dppp_X;            /* X[n][p][d]         - forward mode */
58    double *dp_y;                /* y[n], y0[n]        - forward mode */
59    double *dp_Y;                /* y1[n]              - forward mode */
60    double **dpp_Y;              /* Y[m][p], Y[m][d]   - forward mode */
61    double ***dppp_Y;            /* Y[m][p][d]         - forward mode */
62
63    double *dp_U;                /* u[m]               - reverse mode */
64    double **dpp_U;              /* U[q][m]            - reverse mode */
65    double *dp_Z;                /* z[n]               - reverse mode */
66    double **dpp_Z;              /* Z[q][n], Z[n][d+1] - reverse mode */
67    double ***dppp_Z;            /* Z[q][n][d+1]       - reverse mode */
68
69    short **spp_nz;              /* nz[q][n]           - reverse mode */
70
71    locint index;                      /* please do not change */
72}
73ext_diff_fct;
74
75END_C_DECLS
76
77#if defined(__cplusplus)
78/****************************************************************************/
79/*                                                          This is all C++ */
80
81ADOLC_DLL_EXPORT ext_diff_fct *reg_ext_fct(ADOLC_ext_fct ext_fct);
82
83ADOLC_DLL_EXPORT int call_ext_fct (ext_diff_fct *edfct,
84                                   int n, double *xp, adouble *xa,
85                                   int m, double *yp, adouble *ya);
86
87#endif /* __CPLUSPLUS */
88
89/****************************************************************************/
90#endif /* ADOLC_EXTERNFCTS_H */
91
Note: See TracBrowser for help on using the repository browser.