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
SynopsisThe 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.
FunctionalityADOL-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) | ![$f^\prime(x) = J(x) = \left[\frac{\partial f_i}{\partial x_j}\right] \left. \right\vert _x$](http://www.math.tu-dresden.de/~adol-c/jacobian.gif) |
| 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.
AvailabilityADOL-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 ArticlesSoftware:
- 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 ContactAndreas 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; (Apr/26/2001)