ADOL-C
A Package for Automatic Differentiation
of Algorithms Written in C/C++
Current versions:
-
For UNIX / LINUX:
-
For Windows / DOS:
|
ADOL-C 1.8.7 (March 2000)
ADOL-C 1.8.? (Please contact us
for detailed information!) |
go to: Synopsis
- Functionality
- Availability
- Sources
and Articles - Applications - Contact
Synopsis
The package ADOL-C facilitates the evaluation of first and higher derivatives
of vector functions that are defined by computer programs written in C
or C++. The resulting derivative evaluation routines may be called from
C/C++, Fortran, or any other language that can be linked with C.
The numerical values of derivative vectors are obtained free of truncation
errors at a small multiple of the run time and randomly accessed memory
of the given function evaluation program.
Functionality
ADOL-C uses the operator overloading concept to compute in forward
and reverse mode of automatic differentiation:
-
derivatives of any order
-
and one-sided derivatives in non-smooth cases (e.g. evaluation of fabs)
for a function that is given as a C/C++ code. The user has to make a few
modifications to the evaluation code:
-
redeclare type of all variables that are involved in the evaluation code
(active variables) to the new type adouble,
-
mark the evaluation section,
-
specify independent and dependent variables and pass their values,
-
recompile the code and link the ADOL-C library.
ADOL-C provides:
-
convenient drivers for the common tasks,
-
application oriented drivers,
-
active vector and matrix classes.
The operator overloading is used to produce the tape, an internal
representation of the evaluation section marked. For each operation on
the tape
-
truncated Taylor series are propagated in the forward mode
-
the corresponding adjoint operations are performed on the adjoint variables
in the reverse mode.
Instead of calling the routines for the forward and reverse mode directly
the user may apply appropriate drivers to get the desired derivatives for
a scalar-valued function .
Some of these comvientient drivers are listed in the following table:
function(tag,m,n,x,y) |
|
gradient(tag,n,x,g) |
|
hessian(tag,n,x,H) |
lower triangle of |
hess_vec(tag,n,x,v,z) |
|
lagra_hess_vec(tag,m,n,x,v,u,h) |
|
For vector-valued functions
ADOL-C provides also easy to use drivers. Again some of them are listed
below:
function(tag,m,n,x,y) |
|
jacobian(tag,m,n,x,J) |
|
jac_vec(tag,m,n,x,v,j) |
|
vec_jac(tag,m,n,repeat,x,u,j) |
|
Drivers for ODE's and routines to get full higher order derivative tensors
are available. Storage and runtime requirements are clearly predictable.
The tape is transferred to external mass storage devices and only
strictly sequentially accessed. The much smaller randomly accessed memory
can be precalculated using information on the tape.
We have developed a beta version of a FORTRAN90 front-end for ADOL-C
which is called ADOL-F.
It provides almost the same range of functionality of ADOL-C Version 1.7
for the differentiation of FORTRAN code.
Availability
ADOL-C is available free of charge. Check the ftp
sites for the source, the manual and examples. ADOL-C was tested on
several
platforms
including Sun, LinuX, SGI, DEC, and IBM. ADOL-C Version 1.6 for Borland
C++ is available on the same sites (README
of the PC version). There are some ports of the new ADOL-C versions to
Windows; please, contact us for detailed information.
Read about the features planned for ADOL-C
2.0.
Source and Articles
Software:
-
Version for UNIX / LINUX:
-
Pretty old version for Windows using Borland C++ 4.02 (Version 1.6) Please,
contact
us to obtain information about ports of newer ADOL-C versions to Windows!
Papers:
-
A. Griewank, D. Juedes, H. Mitev, J. Utke, O. Vogel, and A. Walther:
ADOL-C:
A Package for the Automatic Differentiation of Algorithms Written in C/C++;
this is the updated version of the paper published in ACM TOMS,
vol. 22(2) June 1996, pp. 131-167, Algor. 755
-
T. Coleman and G. Jonsson,
The
Efficient Computation of Structured Gradients using Automatic Differentiation,
Technical Report CTC97TR272, Cornell 1997.
-
M. Berz et al.,
Computational Differentiation,
Proceedings of the Second International Workshop, SIAM, Philadelphia,
Penn., 1996
-
J. Benary,
Parallelism
in the Reverse Mode,
pp. 137 - 147
-
S. Campbell and R. Hollenbeck,
Automatic
Differentiation and Implicit Differential Equations,
pp. 215 - 227
-
T. Coleman and A. Verma,
Structure
and efficient Jacobian Calculation,
pp. 149 - 159 (Tech. Report TR95-1557, Cornell, 1995.)
-
U. Geitner, J. Utke and A. Griewank,
Automatic
Computation of Sparse Jacobians by Applying the Method of Newsam and Ramsdell,
pp. 161-172
-
U. Hutschenreiter,
A
New Method for Bevel Gear Tooth Flank Computation,
pp. 329 - 341
-
D. Juedes and K. Balakrishnan
Generalized
Neural Networks, Computational Differentiation, and Evolution,
pp. 273 - 285
-
W. Klein
Comparisons of Different Automatic Differentiation Tools in Circuit
Simulation,
pp. 297 - 307
-
A. Griewank,
ODE
Solving via Automatic Differentiation and Rational Prediction,
Preprint IOKOMO-06-95, TU Dresden, Inst. of Scientific Computing, 1995.
-
A. Griewank, J. Utke, and A. Walther
Evaluating
higher derivative tensors by forward propagation of univariate Taylor series,
Preprint IOKOMO-09-97t, TU Dresden, Inst. of Scientific Computing,
1997. To appear in Mathematics of Computation.
Applications
The NEOS Server
at Argonne National Laboratory
(a Network Enabled Optimization System
for solving optimization problems remotely over the Internet)
The ADMIT-Project
at Cornell University
(a MATLAB interface to ADOL-C and other AD related links)
Whom to Contact
Andreas
Griewank
Institute of Scientific Computing
Technical University of Dresden
Mommsenstr. 13
01062 Dresden, Germany
phone: +49 (0)351 463 4266
FAX: +49 (0)351 463 7114
griewank@math.tu-dresden.de
Olaf
Vogel
Institute of Scientific Computing
Technical University of Dresden
Mommsenstr. 13
01062 Dresden, Germany
phone: +49 (0)351 463 4082
FAX: +49 (0)351 463 7114
vogel@math.tu-dresden.de
or mail to adol-c@math.tu-dresden.de
Institute homepage
vogel@math.tu-dresden.de;
(Feb/14/2000)