source: stable/2.4/ADOL-C/src/interfaces.cpp @ 397

Last change on this file since 397 was 106, checked in by kulshres, 9 years ago

Squashed merge of branch 'master' of 'gitclone' into svn
and regenerated files to comply with coin-or repository guidelines.

  • 'master' of 'gitclone': (37 commits) fix a bug in the windows packaging script and add an examples packager add new files to dist remove old windows compile scripts and makefiles from dist allow nosparse compilation to do sparsity patterns too improve compilation and installation of windows Remove old windows Makefiles and scripts Add the examples readme file for vc++ also to dist. Add 64bit windows additions to the project files. add all the visual studio files to dist too regenerate documentation. add something about Visual Studio in the documentation. correct the documentation about include paths and the --enable- options add some more instructions for users in Readme files. ignore generated files from VC++ add project files for documented examples add ADOLC_DLL_EXPORT to taping functions add some readme instructions for users. ignore generated files from the windows build Add visual studio source files compile sparse sources only if SPARSE is defined ...

Details of the commit messages:

commit acd92df2e0402c5e2fb9853ae2185030e0e171c2
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Jun 29 11:28:18 2010 +0200

fix a bug in the windows packaging script and add an examples packager

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

commit 79c88a7f8bc6ceff687a7104accbb8a10661e5d0
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 28 17:27:58 2010 +0200

add new files to dist

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

commit 549de45ff5f748a2e532818ed505816cee0c6388
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 28 17:24:04 2010 +0200

remove old windows compile scripts and makefiles from dist

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

commit b016c67ae894e746b33df30169449066f60fba8e
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 28 17:08:22 2010 +0200

allow nosparse compilation to do sparsity patterns too

the only thing missing is colpack and we've already done a separation.

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

commit b3bf0950428c5608319054282faf1984b0498b24
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 28 17:07:28 2010 +0200

improve compilation and installation of windows

  • add NDEBUG everywhere so no debug libraries are required
  • add the redistributable vc++ packages
  • add a script to install the compiled files in a good directory structure and create a zipfile, also including the vc++ packages and a setup.bat

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

commit e3e3045db66ab4efd2d56c4cce1e47117bfd981b
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 28 15:25:23 2010 +0200

Remove old windows Makefiles and scripts

these are useless now and have not been maintained in ages

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

commit df7e7f651dd96ad54b8a0e179f3513f4157ad4cb
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Jun 22 11:11:40 2010 +0200

Add the examples readme file for vc++ also to dist.

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

commit 5b1503a589485296773cb867e0140ecd0c4ff2bb
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Jun 22 10:57:11 2010 +0200

Add 64bit windows additions to the project files.

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

commit fcb189798ea3f160ea8a2715c0a9b62bb0219c24
Merge: cf9681b e2de127
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 16:09:11 2010 +0200

Merge branch 'visualstudio'

  • visualstudio: add all the visual studio files to dist too

commit e2de127ad54537b0ae0a83a6ce4b2e19e8539c2a
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 16:08:05 2010 +0200

add all the visual studio files to dist too

in case we make a tarball using make dist these files should be
included too.

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

commit cf9681bbad4db565e2b4eb0657b34005048c656c
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 15:38:35 2010 +0200

regenerate documentation.

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

commit a1292b4d3374089ea675b65188a921a4a90235ae
Merge: f4b19a1 23f4d82
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 15:37:09 2010 +0200

Merge branch 'visualstudio'

  • visualstudio: add something about Visual Studio in the documentation. add some more instructions for users in Readme files. ignore generated files from VC++ add project files for documented examples add ADOLC_DLL_EXPORT to taping functions add some readme instructions for users. ignore generated files from the windows build Add visual studio source files compile sparse sources only if SPARSE is defined visual c++ doesn't like non-void functions without return

commit 23f4d8280b10b57651353ba1b00c56126d769d95
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 15:34:59 2010 +0200

add something about Visual Studio in the documentation.

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

commit f4b19a13d0bf95fc677fc4713dbb7f1de4803710
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 15:34:07 2010 +0200

correct the documentation about include paths and the --enable- options

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

commit 1797588337947960a9f605f54accd77864320bd6
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 14:51:46 2010 +0200

add some more instructions for users in Readme files.

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

commit e289fe2d47fa7488021faf8e06d4331a599f1535
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 14:36:50 2010 +0200

ignore generated files from VC++

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

commit ba4d6262d1344af8a27ef4c4d4633f076b4a9440
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 14:35:24 2010 +0200

add project files for documented examples

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

commit 6b2ba4c6245b0cf0d9cc1655bbcd9bdd2187bc07
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 14:30:22 2010 +0200

add ADOLC_DLL_EXPORT to taping functions

otherwise the applications don't link with adolc.dll in VC++

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

commit b93770a0d8625740014bca29200f47c5ed891045
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 13:08:26 2010 +0200

add some readme instructions for users.

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

commit 9cd5a33abc32592b6f2348f651a1990520ebf731
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 12:45:09 2010 +0200

ignore generated files from the windows build

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

commit 23c23e08c207effe526c973992b9aab5c6b9dff9
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 12:02:19 2010 +0200

Add visual studio source files

the windows/adolc.sln file is the solution file which can be
used to compile both sparse and nosparse versions.
windows/adolc.vcxproj is the adolc project file containing the
configuration for both sparse and nosparse builds, the sparse build
requires the ThirdParty/ColPack/ColPack?.vcxproj project to be
compiled first.

In order to compile ColPack?, just unpack the ColPack? sources into
ThirdParty/ColPack? and apply the patch
Thirparty/ColPack?/colpack_vcxcompile.patch
which is needed for colpack to be compiled in VC++.
After this Visual Studio will be able to build the sparse version
of adolc which contains ColPack? as a static library within.

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

commit 5f7244ce2e64515020aa8ab619eea91bafb5159f
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 11:55:00 2010 +0200

compile sparse sources only if SPARSE is defined

in the autotools version -DSPARSE gets added to the command line
whenever sparse is enabled. Autotools also have a conditional
source files list. VC++ doesn't have any conditional sources
so we define SPARSE=1 in the additional defines and let the whole
source be only compiled if SPARSE was defined.

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

commit 17ad3477450ea40264f3055ec10965c5e9a3a635
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Thu Jun 17 11:50:57 2010 +0200

visual c++ doesn't like non-void functions without return

gcc usually only warns about it. visual c++ calls it an error.
in this case we really don't need an int to be returned so we
just make the function void.

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

commit fc5b44bd420bcd4dd6606ed5da853bcd2f959c93
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Jun 16 11:29:51 2010 +0200

correct the logic for the warning delay in configure

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

commit c8efb4d5811a8045bfbbfaebc96d356f87d07045
Merge: ec60772 6203077
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Jun 15 16:59:32 2010 +0200

Merge branch 'svn'

commit ec60772e229fb09c8d8f5a71c5b55602b8245601
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 14 18:06:14 2010 +0200

distcheck seems to behave differently on each computer

make it work for a third time

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

commit f7ba0328297712c575e25d88f3496b2503c7949d
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 14 17:59:29 2010 +0200

let make distcheck be even more happy

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

commit 5002f07123a276c45e0484e819c85f6e0e9c352f
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 14 16:13:39 2010 +0200

some more optimisations in configure

  • allow for simultaneous 32 and 64 bit installations whenever needed
  • writability test for the prefix directory or its parents
  • print the last comments about linking paths for all paths in ${HOME}
  • put in a pause between messages so that the user will notice the (red printed) warnings before they scroll away.
  • rename options that only enable or disable a feature appropriately

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

commit 9f86f1d391871f26f1a61c357764e63558ad078a
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Jun 9 10:18:40 2010 +0200

let make distcheck be happy.

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

commit fe27dfbae0a6ded19cec3e0205a60a5ee3db3ce5
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Jun 8 14:52:24 2010 +0200

ignore more generated files

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

commit 27ac799deb4cd5a162478d489212cc4eff821797
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Tue Jun 8 14:45:14 2010 +0200

hack in a --tag=XXX for old libtool

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

commit 3f8bac48008b559219f965b23209be5c9761605e
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 7 17:56:17 2010 +0200

use shave and dolt to clean up the build

makes it easier to see errors and warnings

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

commit 5e05c52bc2ebb60a15b62753a25d8e7a930b3c9e
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 7 17:38:15 2010 +0200

Separate out ColPack? dependency from sparsity patterns

In order to compute sparsity patterns we don't need ColPack?. It is
only needed to compute the compressed structures or their seeds.
This way user also has the opportunity to specify where his ColPack?
installation is located and standard library paths are also searched.

In case someone switches sparse on and doesn't have ColPack?, ADOL-C
will still compile but configure will spit out a warning in the end
as well as the functions that use ColPack?, if called, will cause an
exit(-1) with an error message.

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

commit 5713dfa2a060859061890f60adc92353d9efd4f9
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Jun 7 15:31:50 2010 +0200

ignore more executables

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

commit ac57ebab0d23ee210129b9217661dc1598ef01f9
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Fri May 7 01:45:02 2010 +0200

one more generated file to be removed and ignored

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

commit 612016c5052146fea2a719d4235dfa14e9eab7c6
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Mon Apr 12 14:35:38 2010 +0200

correct the inclusion directories

since all public headers are pkginclude_HEADERS they must be prefixed
for inclusion always.

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

commit 5c11cac64c647fd0d129dfe53c9a2f0324ce3002
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Sep 23 11:58:24 2009 +0200

more generated files to be ignored.

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

commit c9a7a67b11aacf1db291a8d931b3ddfe7cfb223b
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Sep 23 11:55:59 2009 +0200

some more stuff to gitignore

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

commit 85c1a35c43aad249ec888d4fee184b0ac132d60f
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Sep 23 11:52:56 2009 +0200

Allow examples to be compile later

Even if the configure does not get the compile examples by default
flag, someone might want to compile one or two examples later by
calling make examplename in the examples subdirectory. This will
make that possible.

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

commit 16f920cfca7c013aecbf3a7fb7070882555a32e8
Author: Kshitij Kulshreshtha <kshitij@…>
Date: Wed Sep 23 11:43:27 2009 +0200

Remove files from git that are anyway generated

I don't know why svn people like to keep them anyway.

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

  • Property svn:keywords set to Author Date Id Revision
File size: 14.8 KB
Line 
1/*----------------------------------------------------------------------------
2 ADOL-C -- Automatic Differentiation by Overloading in C++
3 File:     interfaces.cpp
4 Revision: $Id: interfaces.cpp 106 2010-06-29 17:19:50Z kulshres $
5 Contents: Genuine C++ Interfaces to ADOL-C forward & reverse calls.
6 
7 Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz,
8               Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel
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#include <adolc/interfaces.h>
17#include <adolc/adalloc.h>
18
19/****************************************************************************/
20/*                                                                   MACROS */
21#define fabs(x) ((x) > 0 ? (x) : -(x))
22#define ceil(x) ((int)((x)+1) - (int)((x) == (int)(x)))
23
24
25/****************************************************************************/
26/*                                           FORWARD MODE, overloaded calls */
27
28/****************************************************************************/
29/*                                                             general call */
30/*                                                                          */
31int forward( short  tag,
32             int    m,
33             int    n,
34             int    d,
35             int    keep,
36             double **X,
37             double **Y)
38/* forward(tag, m, n, d, keep, X[n][d+1], Y[m][d+1])                        */
39{ /* olvo 980729 general ec */
40    static double *x, *y, *xp, *yp;
41    static int maxn, maxm;
42    int rc = -1, i, k;
43    if (n > maxn) {
44        if (x)
45            myfree1(x);
46        if (xp)
47            myfree1(xp);
48        x  = myalloc1(maxn = n);
49        xp = myalloc1(maxn);
50    }
51    if (m > maxm) {
52        if (y)
53            myfree1(y);
54        if (yp)
55            myfree1(yp);
56        y  = myalloc1(maxm = m);
57        yp = myalloc1(maxm);
58    }
59
60    /*------------------------------------------------------------------------*/
61    /* prepare input */
62    for (i=0; i<n; i++) {
63        x[i] = X[i][0];
64        if (d == 1)
65            xp[i] = X[i][1];
66        else
67            for (k=0; k<d; k++)
68                X[i][k] = X[i][k+1];
69    }
70
71    /*------------------------------------------------------------------------*/
72    /* function calls */
73    if (d == 0)
74        rc = zos_forward(tag,m,n,keep,x,y);
75    else
76        if (d == 1)
77            rc = fos_forward(tag,m,n,keep,x,xp,y,yp);
78        else
79            rc = hos_forward(tag,m,n,d,keep,x,X,y,Y);
80
81    /*------------------------------------------------------------------------*/
82    /* prepare output */
83    for (i=0; i<n; i++)
84        if (d > 1) {
85            for (k=d; k>0; k--)
86                X[i][k] = X[i][k-1];
87            X[i][0] = x[i];
88        }
89
90    for (i=0; i<m; i++) {
91        if (d == 1)
92            Y[i][1] = yp[i];
93        else
94            for (k=d; k>0; k--)
95                Y[i][k] = Y[i][k-1];
96        Y[i][0] = y[i];
97    }
98
99    return rc;
100}
101
102
103/****************************************************************************/
104/*         Y can be one dimensional if m=1                                  */
105/*                                                                          */
106int forward( short  tag,
107             int    m,
108             int    n,
109             int    d,
110             int    keep,
111             double **X,
112             double *Y)
113/* forward(tag, 1, n, d, keep, X[n][d+1], Y[d+1]), m=1                      */
114{ /* olvo 980729 general ec */
115    static double *x, *xp;
116    static int maxn;
117    double y;
118    int rc= -1, i, k;
119
120    if (m == 1) {
121        if (n > maxn) {
122            if (x)
123                myfree1(x);
124            if (xp)
125                myfree1(xp);
126            x  = myalloc1(maxn = n);
127            xp = myalloc1(maxn);
128        }
129
130        /*----------------------------------------------------------------------*/
131        /* prepare input */
132        for (i=0; i<n; i++) {
133            x[i] = X[i][0];
134            if (d == 1)
135                xp[i] = X[i][1];
136            else
137                for (k=0; k<d; k++)
138                    X[i][k] = X[i][k+1];
139        }
140
141        /*----------------------------------------------------------------------*/
142        /* function calls */
143        if (d == 0)
144            rc = zos_forward(tag,m,n,keep,x,&y);
145        else
146            if (d == 1)
147                rc = fos_forward(tag,m,n,keep,x,xp,&y,Y);
148            else
149                rc = hos_forward(tag,m,n,d,keep,x,X,&y,&Y);
150
151        /*----------------------------------------------------------------------*/
152        /* prepare output */
153        for (i=0; i<n; i++)
154            if (d > 1) {
155                for (k=d; k>0; k--)
156                    X[i][k] = X[i][k-1];
157                X[i][0] = x[i];
158            }
159
160        for (k=d; k>0; k--)
161            Y[k] = Y[k-1];
162        Y[0] = y;
163    } else {
164        fprintf(DIAG_OUT,"ADOL-C error: wrong Y dimension in forward \n");
165        exit(-1);
166    }
167
168    return rc;
169}
170
171
172/****************************************************************************/
173/*         X and Y can be one dimensional if d = 0                          */
174/*                                                                          */
175int forward( short  tag,
176             int    m,
177             int    n,
178             int    d,
179             int    keep,
180             double *X,
181             double *Y)
182/* forward(tag, m, n, 0, keep, X[n], Y[m]), d=0                             */
183{ int rc = -1;
184
185    if (d != 0) {
186        fprintf(DIAG_OUT,"ADOL-C error:  wrong X and Y dimensions in forward \n");
187        exit(-1);
188    } else
189        rc = zos_forward(tag,m,n,keep,X,Y);
190
191    return rc;
192}
193
194
195/****************************************************************************/
196/*         X and Y can be one dimensional if d omitted                      */
197/*                                                                          */
198int forward(short  tag,
199            int    m,
200            int    n,
201            int    keep,
202            double *X,
203            double *Y)
204/* forward(tag, m, n, keep, X[n], Y[m])                                     */
205{ return zos_forward(tag,m,n,keep,X,Y);
206}
207
208
209/****************************************************************************/
210/*                                                             general call */
211/*                                                                          */
212int forward( short  tag,
213             int    m,
214             int    n,
215             int    d,
216             int    p,
217             double *x,
218             double ***X,
219             double *y,
220             double ***Y)
221/* forward(tag, m, n, d, p, x[n], X[n][p][d], y[m], Y[m][p][d])             */
222{ return hov_forward(tag,m,n,d,p,x,X,y,Y);
223}
224
225
226/****************************************************************************/
227/*                                                             general call */
228/*                                                                          */
229int forward( short  tag,
230             int    m,
231             int    n,
232             int    p,
233             double *x,
234             double **X,
235             double *y,
236             double **Y)
237/* forward(tag, m, n, p, x[n], X[n][p], y[m], Y[m][p])                      */
238{ return fov_forward(tag,m,n,p,x,X,y,Y);
239}
240
241
242/****************************************************************************/
243/*                                           REVERSE MODE, overloaded calls */
244
245/****************************************************************************/
246/*                                                             general call */
247/*                                                                          */
248int reverse( short  tag,
249             int    m,
250             int    n,
251             int    d,
252             double *u,
253             double **Z)
254/* reverse(tag, m, n, d, u[m], Z[n][d+1])                                   */
255{ return hos_reverse(tag,m,n,d,u,Z);
256}
257
258
259/****************************************************************************/
260/*         u can be a scalar if m=1                                         */
261/*                                                                          */
262int reverse( short  tag,
263             int    m,
264             int    n,
265             int    d,
266             double u,
267             double **Z)
268/* reverse(tag, 1, n, 0, u, Z[n][d+1]), m=1 => u scalar                     */
269{ int rc=-1;
270
271    if (m != 1) {
272        fprintf(DIAG_OUT,"ADOL-C error:  wrong u dimension in scalar-reverse \n");
273        exit(-1);
274    } else
275        rc = hos_reverse(tag,m,n,d,&u,Z);
276
277    return rc;
278}
279
280
281/****************************************************************************/
282/*         Z can be vector if d = 0; Done by specialized code               */
283/*                                                                          */
284int reverse( short  tag,
285             int    m,
286             int    n,
287             int    d,
288             double *u,
289             double *Z)
290/* reverse(tag, m, n, 0, u[m], Z[n]), d=0                                   */
291{ if (d != 0) {
292        fprintf(DIAG_OUT,"ADOL-C error:  wrong Z dimension in scalar-reverse \n");
293        exit(-1);
294    }
295
296    return fos_reverse(tag,m,n,u,Z);
297}
298
299
300/****************************************************************************/
301/*         u and Z can be scalars if m=1 and d=0;                           */
302/*                                                                          */
303int reverse( short  tag,
304             int    m,
305             int    n,
306             int    d,
307             double u,
308             double *Z)
309/* reverse(tag, 1, n, 0, u, Z[n]), m=1 and d=0 => u and Z scalars           */
310{ int rc=-1;
311
312    if (m != 1 || d != 0 ) {
313        fprintf(DIAG_OUT,"ADOL-C error:  wrong u or Z dimension in scalar-reverse \n");
314        exit(-1);
315    } else
316        rc = fos_reverse(tag,m,n,&u,Z);
317    \
318    return rc;
319}
320
321
322/****************************************************************************/
323/*                                                             general call */
324/*                                                                          */
325int reverse( short  tag,
326             int    m,
327             int    n,
328             int    d,
329             int    q,
330             double **U,
331             double ***Z,
332             short  **nz)
333/* reverse(tag, m, n, d, q, U[q][m], Z[q][n][d+1], nz[q][n])                */
334{ return hov_reverse(tag,m,n,d,q,U,Z,nz);
335}
336
337
338/****************************************************************************/
339/*         U can be a vector if m=1                                         */
340/*                                                                          */
341int reverse( short  tag,
342             int    m,
343             int    n,
344             int    d,
345             int    q,
346             double *U,
347             double ***Z,
348             short  **nz)
349/* reverse(tag, 1, n, d, q, U[q], Z[q][n][d+1], nz[q][n]), m=1 => u vector  */
350{ int rc=-1;
351
352    if (m != 1) {
353        fprintf(DIAG_OUT,"ADOL-C error:  wrong U dimension in vector-reverse \n");
354        exit(-1);
355    } else { /* olvo 980727 ??? */
356        /* double** upp = new double*[nrows]; */
357        double **upp = (double**) malloc(q*sizeof(double*));
358        for (int i=0; i<q; i++)
359            upp[i] = &U[i];
360        rc=hov_reverse(tag,m,n,d,q,upp,Z,nz);
361        /* delete[] upp; */
362        free((char*)upp);
363    }
364    return rc;
365}
366
367
368/****************************************************************************/
369/*                                                                          */
370/*         If d=0 then Z may be matrix; Done by specialized code            */
371/*                                                                          */
372int reverse( short  tag,
373             int    m,
374             int    n,
375             int    d,
376             int    q,
377             double **U,
378             double **Z)
379/* reverse(tag, m, n, 0, q, U[q][m], Z[q][n]), d=0 => Z matrix              */
380{ int rc=-1;
381
382    if (d != 0) {
383        fprintf(DIAG_OUT,"ADOL-C error:  wrong degree in vector-reverse \n");
384        exit(-1);
385    } else
386        rc = fov_reverse(tag,m,n,q,U,Z);
387
388    return rc;
389}
390
391
392/****************************************************************************/
393/*                                                                          */
394/*         d=0 may be omitted, then Z may be a matrix; specialized code     */
395/*                                                                          */
396int reverse( short  tag,
397             int    m,
398             int    n,
399             int    q,
400             double **U,
401             double **Z)
402/* reverse(tag, m, n, q, U[q][m], Z[q][n]), d=0 => Z matrix                 */
403{ int rc=-1;
404
405    rc = fov_reverse(tag,m,n,q,U,Z);
406
407    return rc;
408}
409
410
411/****************************************************************************/
412/*                                                                          */
413/*         If m=1 and d=0 then U can be vector and Z a matrix but no nz.    */
414/*                                                                          */
415int reverse( short  tag,
416             int    m,
417             int    n,
418             int    d,
419             int    q,
420             double *U,
421             double **Z)
422/* reverse(tag, 1, n, 0, q, U[q], Z[q][n]),
423                            m=1 and d=0 => U vector and Z matrix but no nz  */
424{ int rc=-1;
425
426    /* olvo 981126 ??? what's that: */
427    /* (++d)--; *//* degre is reserved for the future use. Ingore this line */
428
429    if ((m != 1) || (d != 0)) {
430        fprintf(DIAG_OUT,"ADOL-C error:  wrong U dimension in vector-reverse \n");
431        exit(-1);
432    } else { /* olvo 980727 ??? */
433        /* double ** upp = new double*[nrows]; */
434        double **upp = (double**) malloc(q*sizeof(double*));
435        for (int i=0; i<q; i++)
436            upp[i] = &U[i];
437        rc = fov_reverse(tag,m,n,q,upp,Z);
438        /* delete[] upp; */
439        free((char*) upp);
440    }
441
442    return rc;
443}
444
445
446/****************************************************************************/
447/*                                                                          */
448/*         If p and U are omitted they default to m and I so that as above  */
449/*                                                                          */
450int reverse( short  tag,
451             int    m,
452             int    n,
453             int    d,
454             double ***Z,
455             short  **nz)
456/* reverse(tag, m, n, d, Z[p][n][d+1], nz[p][n]),
457           If p and U are omitted they default to m and I                   */
458{ static int depax;
459    static double** I;
460    if (m compsize depax) {
461        if (depax)
462            myfreeI2(depax,I);
463        I = myallocI2(depax = m);
464    }
465    return hov_reverse(tag,m,n,d,m,I,Z,nz);
466}
467
468/****************************************************************************/
469/*                                                               THAT'S ALL */
Note: See TracBrowser for help on using the repository browser.