The package ADOL-C (Automatic Differentiation by OverLoading in 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.
ADOL-C uses the operator overloading concept to compute in forward and reverse mode of automatic differentiation:
* derivatives of any order * 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.
* convenient drivers for common differentiation tasks, * application oriented drivers, e.g. * for the computation of sparsity patterns * for ordinary differential equations * for the calculation of full higher-derivative tensors * advanced automatic differentiation, i.e. * optimal checkpointing for time integrations * adapted automatic differentiation of fixpoint iterations * parallel automatic differentiation of MPI and OpenMP parallel programs
The operator overloading is used to produce the tape, an internal representation of the evaluation section marked for differentiation. 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.
Individual files can also be obtained from the svn web interface (see the "Browse Source" button above).
We provide this program in the hope that it may be useful to others, and we would very much like to hear about your experience with it. If you found it helpful and are using it within our software, we encourage you to add your feedback to these wiki-based webpages, Success Stories.
Since a lot of time and effort has gone into the development of ADOL-C, please cite the following publication if you are using ADOL-C for your own research:
A. Walther und A. Griewank: Getting started with ADOL-C. In U. Naumann und O. Schenk, Combinatorial Scientific Computing, Chapman-Hall CRC Computational Science, pp. 181-202 (2012).
The PDF version of the ADOL-C documentation can be downloaded here
<a href="http://list.coin-or.org/mailman/listinfo/adol-c">Mailing List</a>
<a href="https://plus.google.com/104951971193034754671" rel="publisher">Google+</a>