Farfel

AD {it in} Fortran: implementation via prepreprocessor We describe an implementation of the {it Farfel Fortran77 AD extensions} [{it A. Radul} et al., “AD in Fortran, Part 1: Design”, url{arXiv:1203.1448}]. These extensions integrate forward and reverse AD directly into the programming model, with attendant benefits to flexibility, modularity, and ease of use. The implementation we describe is a “prepreprocessor” that generates input to existing Fortran-based AD tools. In essence, blocks of code which are targeted for AD by Farfel constructs are put into subprograms which capture their lexical variable context, and these are closure-converted into top-level subprograms and specialized to eliminate { t EXTERNAL} arguments, rendering them amenable to existing AD preprocessors, which are then invoked, possibly repeatedly if the AD is nested.