Source Code Generation for Automatic Differentiation using Operator Overloading
C++ CMake C Other
Latest commit 0260a4c Feb 22, 2017 @joaoleal fixed potential issue in EvaluatorBase when evals_ is resized to a lo…
…wer size or when some values are explicitly deleted from the CodeHandler by the user
Failed to load latest commit information.
debian updated debian changelog Aug 3, 2016
doc improved debian documentation package (uses doxygen generated documen… Nov 4, 2015
example bugfix in CMakeLists.txt of examples related with graphviz Aug 3, 2016
include fixed potential issue in EvaluatorBase when evals_ is resized to a lo… Feb 22, 2017
.gitignore added CLion build directory to the list of ignored files Nov 25, 2016
.travis.yml it is now possible to define a preferred version for llvm and clang i… Oct 1, 2016
CMakeLists.txt it is now possible to define a preferred version for llvm and clang i… Oct 1, 2016
COPYING changed licenses to EPL1 and GPL3 Oct 11, 2013

CppADCodeGen Build Status DOI

CppADCodeGen performs hybrid Automatic Differentiation (AD), that is, uses operator-overloading and produces source-code. Such source-code can be statically compiled at runtime using an existing compiler and linked dynamically or, alternatively, go through a JIT compilation using Clang/LLVM.

In addition to C source generation, CppADCodeGen can also produce Latex, html+MathML, and dot source-code files for your algorithm. Latex sources can be used to create PDF files for documentation purposes, html+MathML can be used to display your algorithm in a web browser, and dot files can be used to create images with a graph of your model (see graphviz).

CppADCodeGen can also be used to perform differentiation index reduction of Differential Algebraic Equations (DAE) through Pantelides, Soares-Secchi, and Dummy Derivatives methods.

CppADCodeGen is built on top of the CppAD library, which is a header only C++ AD library using operator overloading.


CppADCodeGen is available with both the EPL and GPL licenses (suitable for both open-source and closed-source commercial projects). See epl-v10.txt and gpl3.txt for a copy of the licenses.


CppADCodeGen is a C++11 header only library so there aren't many dependencies:

  • CppAD (2016),
  • A C++11 compiler (such as GCC and Clang),
  • Clang/LLVM 3.2, 3.4, 3.6, or 3.8 (only for JIT compilation), and
  • Eigen 3 (only for DAE differentiation index reduction).

Runtime compilation and dynamic linking:

  • Linux (it might be very easy to support other OSes but it is not implemented yet)


General installation

Just copy the contents of the folder include to anywhere you would like to include from.


A debian installation package can be created at the root of the project. Typically you can create the installer by just typing:


It will create a debian package outside the project's folder.

Using CppADCodeGen

See the wiki.

The folder example includes some simple use cases.

Repository Content

Directories Description
bin Helper shell and sed scripts used for CppAD development.
bug Directory containing demonstration of known bugs (may be empty).
doc Holds files for generation of developer documentation.
debian Debian package creation files (Linux).
include The CppADCodeGen header files.
example CppADCodegen example files are here.
pkgconfig pkg-config support files.
test Contains tests for CppADCodeGen.
speed Contains some benchmarks for CppADCodeGen.
Files Description
AUTHORS Statement of authorship and copyright.
CMakeLists.txt CppADCodeGen CMake input file.
COPYING Statement of user license to use software.
epl-v10.txt A copy of the Eclipse Public License version 1.
gpl3.txt A copy of the GNU General Public License version 3.
INSTALL Points to this file.