  There are several AD tools available, which all implement different
strategies for the reverse mode of AD. The major strategies are primal value
taping (implemented e.g. by ADOL-c) and Jacobi taping (implemented e.g. by
adept and dco/c++). Especially for Jacobi taping, recent advances by using
expression templates make this approach very attractive for large scale
software. The current implementations are either closed source or miss
essential features and flexibility. Therefore, we present the new AD tool
CoDiPack (Code Differentiation Package) in this paper. It is specifically
designed for a minimal memory consumption and optimal runtime, such that it can
be used for the differentiation of large scale software. An essential part of
the design of CoDiPack is the modular layout and the recursive data structures,
which do not only allow the efficient implementation of the Jacobi taping
approach, but will also enable other approaches like the primal value taping or
new research ideas. We will also present the performance value of CoDiPack on a
generic PDE example and on the SU2 code.
