Adept

Adept: A fast automatic differentiation library for C++. Adept (Automatic Differentiation using Expression Templates) is a free software library that enables algorithms written in C and C++ to be automatically differentiated. It uses an operator overloading approach, so very little code modification is required. Differentiation can be performed in forward mode, reverse mode (to compute the adjoint), or the full Jacobian matrix can be computed. Moreover, the way that expression templates have been used and several other important optimizations mean that reverse-mode differentiation is significantly faster than other libraries that provide equivalent functionality (ADOL-C, CppAD and Sacado) and less memory is used. In fact, Adept is also often only around 10-25% slower than an adjoint code you might write by hand, but immeasurably faster in terms of user time; adjoint coding is very time consuming and error-prone.