Version 3 (modified by awalther, 11 years ago) (diff) |
---|

# Welcome to the ADOL-C home page

**Introduction**

The package ADOL-C (**A**utomatic **D**ifferentiation by **O**ver**L**oading 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.

**Functionality**

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.

ADOL-C provides:

- convenient drivers for common differentiation tasks,
- application oriented drivers, e.g.

o for the computation of sparsity patterns

o for ordinary differential equations

o for the calculation of full higher-derivative tensors

- advanced adutomatic differentiation, i.e.

o optimal checkpointing for time integrations

o adapted automatic differentiation of fixpoint iterations

- parallel automatic differentiation of OpenMP parallel programs

The operator overloading is used to produce the tape, an internal representation of the evaluation section marked for differentuatuin. 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.