![]() |
|
Volume 7, Issue 1 - Spring/Summer 1999 Volume 6, Issue 2 Volume
3, Issue 1 Volume
2, Issue 4 Volume
2, Issue 1 |
ADIFOR Provides Valuable Derivative Information for Fortran CodesChristian Bischof, George Corliss, and Andreas Griewank, Mathematics and Computer Science Division, Argonne National Laboratory; Alan Carle, Department of Computer Science, Rice University; John Dennis, Department of Computer Science and Department of Computational and Applied Mathematics, Rice University; and Karen Williamson, Department of Computational and Applied Mathematics, Rice UniversityVirtually all modeling and optimization projects in scientific computing require qualitative information on the sensitivity of output variables with respect to input parameters. To meet this need, a joint CRPC project was initiated between the Mathematics and Computer Science Division at Argonne, the compiler group of the Computer Science Department at Rice University, and the optimization group of the Computational and Applied Mathematics Department at Rice University. The resulting automatic differentiation tool, referred to as ADIFOR (Automatic Differentiation of Fortran), has convincingly demonstrated that large real-life Fortran codes can be automatically processed to provide the user with valuable derivative information. As a result, iterative processes can be accelerated, model parameters optimized, and the sensitivity of results with respect to initial conditions and control actions quantified. These beneficial effects have been obtained on trajectory optimization programs (Boeing), optimal design of membrane filtration processes (Rice), three-dimensional Navier-Stokes codes for transonic flow (NASA), car engine lubrication simulations (GM), and biomechanical models of complex human organs (National Institute of Standards and Technology). The key to ADIFOR's success is its utilization of interprocedural information provided by the ParaScope Parallel Programming Environment developed at Rice. This information allows ADIFOR to determine efficiently, for each subroutine in the calling tree, which calling parameters, global variables, and local variables are active, i.e., lie on the dependency path between the independent and dependent variables specified by the user. Each program line involving active variables is augmented with additional instructions for propagating the corresponding derivative information by a suitable version of the chain rule. The resulting portable code computes derivative values correct to working accuracy and frequently does so significantly faster than divided differences. Table of Contents |