M. Anitescu, O. Roderick, J. Utke, "Derivative-Based Uncertainty Quantification: Automatic Differentiation Tools for SAS," Argonne Report ANL/MCS-TM-328, September 2012. [pdf]
Automatic differentiation, or more properly algorithmic differentiation (AD), is a technique for efficiently computing accurate derivatives for numerical models. It is based on augmenting the code with partial derivatives of elementary mathematical operations on important variables and retracing the calculation flow (in forward or reverse direction) to assemble derivatives by chain rule. The relative computational overhead associated with AD is bounded, independent of dimension, and is largely independent of the mathematical model.
In our larger body of work on advanced uncertainty analysis of simulation models of nuclear engineering, AD serves as the driving element behind such methods as polynomial regression with derivatives, gradient-enhanced universal kriging, and sensitivity-based dimensionality reduction of the uncertainty space. In fact, the main alternative to using AD to get sensitivity information is hand coding of direct and adjoint derivatives, which is always a significant development effort and often cannot be expected from the developers.
In this report, we discuss the findings and intermediate benefits of the latest effort to enable algorithmic differentiation of the SHARP safety code SAS. This effort was planned as an exercise to demonstrate the effectiveness of AD on simulations of professional interest. The subject is a legacy code comprising 120,000 lines of uncommented Fortran 77 code; it thus presents significant challenges for manual analysis. An intermediate outcome of the preparation work required for AD is a semi-automatically generated code annotation, with identification and characterization of code features in the context of AD.
While no principal, mathematical model-related reason prevents algorithmic differentiation for SAS, certain features in model implementation pose steep technical hurdles. We report the categories of the problematic features found in SAS and recommend possible remedies, amounting to a future effort in code rewriting.
Because the full capability for differentiation of SAS was not achieved, we redirected the effort to differentiation of the SHARP component neutronics code UNIC. We report on the outcome differentiation in forward mode achieved and outline other capabilities that can now be acquired and verified.