AUTO_DERIV was designed to make the evaluation of analytic first and second derivatives feasible; computing them ``by hand'' is, in realistic cases, too time consuming and highly error prone. The emphasis was not on implementing it optimally. Efficiency is, for the most part, hampered by the primitive support FORTRAN 90 has for value-oriented programming. Most important was to make it work, with as little change in user's code as possible. We can see from the tests in the last section that AUTO_DERIV should not be considered as an option when the derivatives are, or can easily be, available analytically. Instead, it is a valuable tool when we deal with complicated mathematical functions with no derivatives available. We anticipate that as the compilers evolve and support more efficiently the advanced features of FORTRAN 90 this disproportionality in time performance between AUTO_DERIV and analytic derivatives shrinks and researchers will not be discouraged for using it.
The current standard [6] of FORTRAN 95 (F95) includes a few extra facilities (ELEMENTAL attribute of subroutines and functions) which would enable us to provide a much ``cleaner'' and more powerful implementation. However, the relative scarcity of FORTRAN 95 compilers led us to postpone these modifications for future upgrades.
As we have mentioned before, the applications that we have in mind are mainly from the area of Molecular Dynamics. Since we want to integrate the Hamilton equations and the variational equations one could implement AUTO_DERIV to compute the derivatives of the Hamiltonian function itself. However, the kinetic part can in most cases easily differentiated and AUTO_DERIV is only applied on the potential function. We may ask whether it is possible to compute higher order derivatives from the first and second ones. Recursive functions could be used in order to compute derivatives of arbitrarily high order. We leave such extensions for future upgrades.
Care was taken that the array notation provided by F90 is used throughout the code. It might assist a compiler to optimize, or, even, parallelize it. Unfortunately, the current definition of High Performance Fortran (v2.0) does not support distribution onto multiple processors of arrays of a derived type; otherwise, compiler directives could be inserted to indicate to the HPF compiler possible parallelisms.
When F95 compilers become widespread, and, most importantly, when the expected major revision in the year 2000 is standarized, some of the above limitations in the package will be overcome. We plan to follow closely all enhancements in the language and incorporate them to AUTO_DERIV.
Acknowledgement: We thank P. Maragakis for critically reading the manuscript and commenting on it.