| 8 | |

| 9 | '''Functionality''' |

| 10 | |

| 11 | ADOL-C uses the operator overloading concept to compute in forward and reverse mode of automatic differentiation: |

| 12 | |

| 13 | * derivatives of any order |

| 14 | * one-sided derivatives in non-smooth cases (e.g. evaluation of fabs) |

| 15 | |

| 16 | for a function that is given as a C/C++ code. The user has to make a few modifications to the evaluation code: |

| 17 | |

| 18 | * redeclare type of all variables that are involved in the evaluation code (active variables) to the new type adouble, |

| 19 | * mark the evaluation section, |

| 20 | * specify independent and dependent variables and pass their values, |

| 21 | * recompile the code and link the ADOL-C library. |

| 22 | |

| 23 | ADOL-C provides: |

| 24 | |

| 25 | * convenient drivers for common differentiation tasks, |

| 26 | * application oriented drivers, e.g. |

| 27 | |

| 28 | o for the computation of sparsity patterns |

| 29 | |

| 30 | o for ordinary differential equations |

| 31 | |

| 32 | o for the calculation of full higher-derivative tensors |

| 33 | |

| 34 | * advanced adutomatic differentiation, i.e. |

| 35 | |

| 36 | o optimal checkpointing for time integrations |

| 37 | |

| 38 | o adapted automatic differentiation of fixpoint iterations |

| 39 | |

| 40 | * parallel automatic differentiation of OpenMP parallel programs |

| 41 | |

| 42 | 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 |

| 43 | |

| 44 | * truncated Taylor series are propagated in the forward mode |

| 45 | * the corresponding adjoint operations are performed on the adjoint variables in the reverse mode. |