source: stable/2.4/ADOL-C/src/drivers/drivers.c @ 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: 9.8 KB
Line 
1/*----------------------------------------------------------------------------
2 ADOL-C -- Automatic Differentiation by Overloading in C++
3 File:     drivers/drivers.c
4 Revision: $Id: drivers.c 106 2010-06-29 17:19:50Z kulshres $
5 Contents: Easy to use drivers for optimization and nonlinear equations
6           (Implementation of the C/C++ callable interfaces).
7 
8 Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz,
9               Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel
10 
11 This file is part of ADOL-C. This software is provided as open source.
12 Any use, reproduction, or distribution of the software constitutes
13 recipient's acceptance of the terms of the accompanying license file.
14 
15----------------------------------------------------------------------------*/
16#include <adolc/drivers/drivers.h>
17#include <adolc/interfaces.h>
18#include <adolc/adalloc.h>
19
20#include <math.h>
21
22BEGIN_C_DECLS
23
24/****************************************************************************/
25/*                         DRIVERS FOR OPTIMIZATION AND NONLINEAR EQUATIONS */
26
27/*--------------------------------------------------------------------------*/
28/*                                                                 function */
29/* function(tag, m, n, x[n], y[m])                                          */
30int function(short tag,
31             int m,
32             int n,
33             double* argument,
34             double* result) {
35    int rc= -1;
36
37    rc= zos_forward(tag,m,n,0,argument,result);
38
39    return rc;
40}
41
42/*--------------------------------------------------------------------------*/
43/*                                                                 gradient */
44/* gradient(tag, n, x[n], g[n])                                             */
45int gradient(short tag,
46             int n,
47             const double* argument,
48             double* result) {
49    int rc= -1;
50    double one = 1.0;
51
52    rc = zos_forward(tag,1,n,1,argument,result);
53    if(rc < 0)
54        return rc;
55    MINDEC(rc, fos_reverse(tag,1,n,&one,result));
56    return rc;
57}
58
59/*--------------------------------------------------------------------------*/
60/*                                                                          */
61/* vec_jac(tag, m, n, repeat, x[n], u[m], v[n])                             */
62int vec_jac(short tag,
63            int m,
64            int n,
65            int repeat,
66            double* argument,
67            double* lagrange,
68            double* row) {
69    int rc= -1;
70    double *y = NULL;
71
72    if(!repeat) {
73        y = myalloc1(m);
74        rc = zos_forward(tag,m,n,1, argument, y);
75        if(rc < 0) return rc;
76    }
77    MINDEC(rc, fos_reverse(tag,m,n,lagrange,row));
78    if (!repeat) myfree1(y);
79    return rc;
80}
81
82/*--------------------------------------------------------------------------*/
83/*                                                                 jacobian */
84/* jacobian(tag, m, n, x[n], J[m][n])                                       */
85
86int jacobian(short tag,
87             int depen,
88             int indep,
89             const double *argument,
90             double **jacobian) {
91    int rc;
92    double *result, **I;
93
94    result = myalloc1(depen);
95
96    if (indep/2 < depen) {
97        I = myallocI2(indep);
98        rc = fov_forward(tag,depen,indep,indep,argument,I,result,jacobian);
99        myfreeI2(indep, I);
100    } else {
101        I = myallocI2(depen);
102        rc = zos_forward(tag,depen,indep,1,argument,result);
103        if (rc < 0) return rc;
104        MINDEC(rc,fov_reverse(tag,depen,indep,depen,I,jacobian));
105        myfreeI2(depen, I);
106    }
107
108    myfree1(result);
109
110    return rc;
111}
112
113/*--------------------------------------------------------------------------*/
114/*                                                           large_jacobian */
115/* large_jacobian(tag, m, n, k, x[n], y[m], J[m][n])                        */
116
117int large_jacobian(short tag,
118                   int depen,
119                   int indep,
120                   int runns,
121                   double *argument,
122                   double *result,
123                   double **jacobian)
124{
125    int rc, dirs, i;
126    double **I;
127
128        I = myallocI2(indep);
129    if (runns > indep) runns = indep;
130    if (runns < 1)     runns = 1;
131    dirs = indep / runns;
132    if (indep % runns) ++dirs;
133    for (i=0; i<runns-1; ++i) {
134        rc = fov_offset_forward(tag, depen, indep, dirs, i * dirs, argument,
135                I, result, jacobian);
136    }
137    dirs = indep - (runns-1) * dirs;
138    rc = fov_offset_forward(tag, depen, indep, dirs, indep-dirs, argument,
139                     I, result, jacobian);
140    myfreeI2(indep, I);
141    return rc;
142}
143
144/*--------------------------------------------------------------------------*/
145/*                                                                  jac_vec */
146/* jac_vec(tag, m, n, x[n], v[n], u[m]);                                    */
147int jac_vec(short tag,
148            int m,
149            int n,
150            double* argument,
151            double* tangent,
152            double* column) {
153    int rc= -1;
154    double *y;
155
156    y = myalloc1(m);
157
158    rc = fos_forward(tag, m, n, 0, argument, tangent, y, column);
159    myfree1(y);
160
161    return rc;
162}
163
164/*--------------------------------------------------------------------------*/
165/*                                                                 hess_vec */
166/* hess_vec(tag, n, x[n], v[n], w[n])                                       */
167int hess_vec(short tag,
168             int n,
169             double *argument,
170             double *tangent,
171             double *result) {
172    double one = 1.0;
173    return lagra_hess_vec(tag,1,n,argument,tangent,&one,result);
174}
175
176/*--------------------------------------------------------------------------*/
177/*                                                                 hess_mat */
178/* hess_mat(tag, n, q, x[n], V[n][q], W[n][q])                              */
179int hess_mat(short tag,
180             int n,
181             int q,
182             double *argument,
183             double **tangent,
184             double **result) {
185    int rc;
186    int i,j;
187    double y;
188    double*** Xppp;
189    double*** Yppp;
190    double*** Zppp;
191    double**  Upp;
192
193    Xppp = myalloc3(n,q,1);   /* matrix on right-hand side  */
194    Yppp = myalloc3(1,q,1);   /* results of hos_wk_forward  */
195    Zppp = myalloc3(q,n,2);   /* result of Up x H x XPPP */
196    Upp  = myalloc2(1,2);     /* vector on left-hand side */
197
198    for (i = 0; i < n; ++i)
199        for (j = 0; j < q; ++j)
200            Xppp[i][j][0] = tangent[i][j];
201
202    Upp[0][0] = 1;
203    Upp[0][1] = 0;
204
205    rc = hov_wk_forward(tag, 1, n, 1, 2, q, argument, Xppp, &y, Yppp);
206    MINDEC(rc, hos_ov_reverse(tag, 1, n, 1, q, Upp, Zppp));
207
208    for (i = 0; i < q; ++i)
209        for (j = 0; j < n; ++j)
210            result[j][i] = Zppp[i][j][1];
211
212    myfree2(Upp);
213    myfree3(Zppp);
214    myfree3(Yppp);
215    myfree3(Xppp);
216
217    return rc;
218}
219
220/*--------------------------------------------------------------------------*/
221/*                                                                  hessian */
222/* hessian(tag, n, x[n], lower triangle of H[n][n])                         */
223/* uses Hessian-vector product                                              */
224int hessian(short tag,
225            int n,
226            double* argument,
227            double** hess) {
228    int rc= 3;
229    int i,j;
230    double *v = myalloc1(n);
231    double *w = myalloc1(n);
232    for(i=0;i<n;i++) v[i] = 0;
233    for(i=0;i<n;i++) {
234        v[i] = 1;
235        MINDEC(rc, hess_vec(tag, n, argument, v, w));
236        if( rc < 0) {
237            free((char *)v);
238            free((char *) w);
239            return rc;
240        }
241        for(j=0;j<=i;j++)
242            hess[i][j] = w[j];
243        v[i] = 0;
244    }
245
246    free((char *)v);
247    free((char *) w);
248    return rc;
249    /* Note that only the lower triangle of hess is filled */
250}
251
252/*--------------------------------------------------------------------------*/
253/*                                                                 hessian2 */
254/* hessian2(tag, n, x[n], lower triangle of H[n][n])                        */
255/* uses Hessian-matrix product                                              */
256int hessian2(short tag,
257             int n,
258             double* argument,
259             double** hess) {
260    int rc;
261    int i,j;
262
263    double*** Xppp = myalloc3(n,n,1);   /* matrix on right-hand side  */
264    double*   y    = myalloc1(1);       /* results of function evaluation */
265    double*** Yppp = myalloc3(1,n,1);   /* results of hos_wk_forward  */
266    double*** Zppp = myalloc3(n,n,2);   /* result of Up x H x XPPP */
267    double**  Upp  = myalloc2(1,2);     /* vector on left-hand side */
268
269    for (i=0; i<n; i++) {
270        for (j=0;j<n;j++)
271            Xppp[i][j][0] = 0;
272        Xppp[i][i][0] = 1;
273    }
274
275    Upp[0][0] = 1;
276    Upp[0][1] = 0;
277
278    rc = hov_wk_forward(tag,1,n,1,2,n,argument,Xppp,y,Yppp);
279    MINDEC(rc,hos_ov_reverse(tag,1,n,1,n,Upp,Zppp));
280
281    for (i=0; i<n; i++)
282        for (j=0;j<=i;j++)
283            hess[i][j] = Zppp[i][j][1];
284
285    myfree2(Upp);
286    myfree3(Zppp);
287    myfree3(Yppp);
288    myfree1(y);
289    myfree3(Xppp);
290    return rc;
291    /* Note that only the lower triangle of hess is filled */
292}
293
294/*--------------------------------------------------------------------------*/
295/*                                                           lagra_hess_vec */
296/* lagra_hess_vec(tag, m, n, x[n], v[n], u[m], w[n])                        */
297int lagra_hess_vec(short tag,
298                   int m,
299                   int n,
300                   double *argument,
301                   double *tangent,
302                   double *lagrange,
303                   double *result) {
304    int rc=-1;
305    int i;
306    int degree = 1;
307    int keep = degree+1;
308    double **X, *y, *y_tangent;
309
310    X = myalloc2(n,2);
311    y = myalloc1(m);
312    y_tangent = myalloc1(m);
313
314    rc = fos_forward(tag, m, n, keep, argument, tangent, y, y_tangent);
315
316    if(rc < 0) return rc;
317
318    MINDEC(rc, hos_reverse(tag, m, n, degree, lagrange, X));
319
320    for(i = 0; i < n; ++i)
321        result[i] = X[i][1];
322
323    myfree1(y_tangent);
324    myfree1(y);
325    myfree2(X);
326
327    return rc;
328}
329
330END_C_DECLS
Note: See TracBrowser for help on using the repository browser.