FastDer++

FastDer++, efficient automatic differentiation for non-linear PDE solvers. FastDer++ is a C++ class library for automatic differentiation designed for use in situations where a set of dependent variables and their gradients are to be evaluated in a large number of points. Typical settings constitute non-linear systems of partial differential equations (PDEs) and ODEs. Although automatic differentiation is traditionally considered to slow for implementation in non-linear PDE and ODE solvers, it has recently been demonstrated [E. Tijskens, H. Ramon, J. De Baerdemaeker, Efficient operator overloading AD for solving non-linear PDEs, in: G. Corliss, C. Faure, A. Griewank, L. Hascoet, U. Nauman (Eds.), Automatic Differentiation of Algorithms-From Simulation to Optimisation, Springer, Verlag, 2002; Num. Algorithms 30 (2002) 259] that thanks to an extension called vectorised AD and careful design handcoded derivatives, finite differencing and state of the art AD tools can be outperformed in common situations. In addition, the user gains the advantage of directly dealing with the non-linear equations rather than with its linearised counterpart. This paper describes the FastDer++ library and its underlying principles in detail, both from the point of implementation and of user programming.