A combined automatic differentiation and array library for C++


Adept has been developed on Linux using the GNU C++ compiler, and tested with the Clang, Intel and (on Windows) Microsoft compilers. Since most of the difficulty in compiling on other platforms (particularly Windows) arises from building and linking to a dynamic library, there is a "library-free" option described in the User Guide.

Version 2: Automatic differentiation and array capability

  • Latest snapshot: Available on GitHub
  • Version 2.0.3 (latest stable version): adept-2.0.3.gz (30 October 2017)
    • Works with Clang, Intel and Microsoft compilers, in addition to GNU compiler
    • Vectorized passive sqrt, min, max and reduce operations (sum, mean etc.)
  • Version 2.0: adept-2.0.gz (1 October 2017) - User Guide (PDF)
    • Fixed pausable recording and library-free compilation to provide full backwards compatibility with version 1.1
    • C++11 features such as initializer lists
    • Automatic vectorization of passive array statements if possible
    • Additional mathematical functions: round, trunc, rint, nearbyint, atan2, fmin, fmax
    • Additional array operations: spread, outer_product, count, maxval, minval, reshape
    • Many more test programs
  • Version 1.9.8: adept-1.9.8.tar.gz (10 April 2016)
    • Added FixedArray class for arrays whose dimensions are known at compile time.
    • Added bounds checking option by defining ADEPT_BOUNDS_CHECKING
    • Any BLAS and LAPACK library may be used, rather than just OpenBLAS.
  • Version 1.9.4: adept-1.9.4.tar.gz (27 January 2016).
    • First release after major rewrite to combine automatic differentiation and array functionality into a single library.

Version 1: Automatic differentiation capability only

If you are not interested in array features then version 1.1 may be a preferable option to version 2.0 since it has virtually the same automatic differentiation capability and is more lightweight.

  • Latest snapshot: Available on GitHub
  • Version 1.1 (latest stable version): adept-1.1.tar.gz (3 June 2015) - User Guide (PDF)
    • Changed license from GNU General Public License to the more permissive Apache License, Version 2.0. Users are permitted to use instead the ESA Software Community License Type 1, if they prefer.
    • Build system now uses an autotools-generated configure script.
    • Support for additional mathematical functions: asinh, acosh, atanh, expm1, log1p, cbrt, erf, erfc, exp2 and log2.
    • Jacobian calculation can use OpenMP parallelization.
    • Windows support via the capability to compile code to be differentiated without the need to link to an external library.
    • More test programs and a benchmarking tool.
  • Version 1.0: adept-1.0.tar.gz (3 September 2013)
    • LIFO requirement removed in allocation of active objects in memory: more efficient for codes that don't deallocate objects in the reverse order from their allocation.
    • Interface change: independent variables no longer need to be initialized using set_value; they can now be initialized using the ordinary assignment operator (=) provided that the new_recording function is called immediately after they are initialized (see section 5.2 of the User Guide).
    • Ability to interface to code components that compute their own Jacobian (e.g. those written in Fortran).
    • More test programs, including one that interfaces to the GNU Scientific Library to perform a real minimization.
    • C++ exceptions are thrown when an error occurs.
    • Recording of derivative information can be "paused" so that the same function can be called from within the program both with and without automatic differentiation.
    • Source code can be compiled twice to produce two versions of a function, one with automatic differentiation and one without.
  • Version 0.9: adept-0.9.tar.gz (2 May 2012).

Return to Clouds Group | Department of Meteorology | University of ReadingThis page is maintained by Robin Hogan