Expression templates for primal value taping in the reverse mode of algorithmic differentiation. (English) Zbl 1401.65164

Summary: The reverse mode of Algorithmic Differentiation (AD) can be implemented in several ways. The major choices are primal value taping vs. Jacobian taping, managed indices vs. unmanaged indices and operator level taping vs. statement level taping. Most of the current AD tools have implemented only one of the eight possible choices, and the data management of the implementation adds another complexity hierarchy. The focus in this paper is the implementation of primal value taping on a statement level. Statement level taping removes the need to create intermediate values on the AD tape which results in reduced memory compared to operator level taping. The implementation will be done for managed and unmanaged indices in the AD tool CoDiPack. Primal value taping with statement level taping has not yet been implemented in any other AD tool, thus we will analyse the properties of the taping approaches and highlight the important details for an efficient implementation. Furthermore, all existing taping approaches in CoDiPack will be compared with the new primal value taping approach. The comparison have been conducted on a simple toy problem and a fully featured computational fluid dynamics solver in the multi-physics suite SU2.


65Y20 Complexity and performance of numerical algorithms
68N19 Other programming paradigms (object-oriented, sequential, concurrent, automatic, etc.)
68N30 Mathematical aspects of software engineering (specification, verification, metrics, requirements, etc.)
68Q25 Analysis of algorithms and problem complexity
Full Text: DOI


[1] Adept User Guide. Available at
[2] Development of a consistent discrete adjoint solver in an evolving aerodynamic design framework, 16th AIAA/ISSMO Multidisciplinary Analysis and Optimization Conference, AIAA Aviation, American Institute of Aeronautics and Astronautics, 2015. Available at
[3] Expression templates and forward mode automatic differentiation, in Automatic Differentiation of Algorithms: From Simulation to Optimization, G. Corliss, C. Faure, A. Griewank, L. Hascoët, and U. Naumann, eds., Springer New York, New York, NY, 2002, pp. 311–315. Available at
[4] Algorithmic differentiation of implicit functions and optimal values, in Advances in Automatic Differentiation, C.H. Bischof, H.M. Bücker, P.D. Hovland, U. Naumann, and J. Utke, eds., Springer, Berlin, Heidelberg20086777
[5] FADBAD, a flexible C++ package for automatic differentiation, Technical Report IMM–REP–1996–17, Department of Mathematical Modelling, Technical University of Denmark, Lyngby, Denmark, 1996
[6] Biazar, J.; Aminikhah, H., exact and numerical solutions for non-linear Burger’s equation by VIM, Math. Comput. Model., 49, 1394-1400, (2009) · Zbl 1165.65395
[7] Budd, T., Multiparadigm Programming in Leda, (1995), Addison-Wesley, Reading, MA
[8] CoDiPack AD Tool. Available at
[9] Coplien, J. O., curiously recurring template patterns, C++ Report, 7, 24-27, (1995)
[10] Economon, T. D.; Palacios, F.; Copeland, S. R.; Lukaczyk, T. W.; Alonso, J. J., SU2: an open-source suite for multiphysics simulation and design, AIAA J., 54, 828-846, (2015)
[11] Using automatic differentiation for adjoint CFD code development, Post SAROD Workshop, 2005
[12] Griewank, A., Evaluating Derivatives: Principles and Techniques of Algorithmic Differentiation, 19, (2000), SIAM, Philadelphia · Zbl 0958.65028
[13] Hogan, R. J., fast reverse-mode automatic differentiation using expression templates in C++, ACM Trans. Math. Softw., 40, 26, (2014) · Zbl 1369.65037
[14] Musser, D. R.; Derge, G. J.; Saini, A., STL Tutorial and Reference Guide: C++ Programming with the Standard Template Library, (2009), Addison-Wesley Professional, Boston, MA, USA
[15] Naumann, U., The Art of Differentiating Computer Programs: An Introduction to Algorithmic Differentiation, Vol. 24, (2012), Siam, Philadelphia, PA, USA · Zbl 1275.65015
[16] Large-scale transient sensitivity analysis of a radiation-damaged bipolar junction transistor via automatic differentiation, in Advances in Automatic Differentiation, C.H. Bischof, H.M. Bücker, P.D. Hovland, U. Naumann, and J. Utke, eds., Springer, Berlin, Heidelberg2008351362 · Zbl 1147.78003
[17] Veldhuizen, T., expression templates, C++ Report, 7, 26-31, (1995)
[18] Getting started with ADOL-C, in Combinatorial Scientific Computing, U. Naumann and O. Schenk, eds., Chapman-Hall CRC Computational Science, London, UK2009181202
[19] An efficient unsteady aerodynamic and aeroacoustic design framework using discrete adjoint, 17th AIAA/ISSMO Multidisciplinary Analysis and Optimization Conference, AIAA 2016-33692016
This reference list is based on information provided by the publisher or from digital mathematics libraries. Its items are heuristically matched to zbMATH identifiers and may contain data conversion errors. It attempts to reflect the references listed in the original paper as accurately as possible without claiming the completeness or perfect precision of the matching.