Limitations of the Fortran version of ATOMS
Development of ATOMS began many years ago
as a Fortran program. Because of many limitations imposed by
the choice of Fortran as the programming language, in 1997 I
started rewriting ATOMS. The language I
chose was Perl. While we
could debate at great length the merits of choosing that
language or some other language, the topic that deserves no
discussion is that the Fortran version has many crippling
limitations. Regardless, of my choice of languages, it was
necessary for me to abandon Fortran so that I could address
these many problems.
Most of the problem reports I get from users of the old Fortran
version fall into one of the categories discussed below and are
fully resolved in the new version.
Here is a partial list of the issues that are resolved in the
current version of ATOMS that are
unresolved (and never will be resolved by me) in the Fortran
version:
-
Very poor handling of monoclinic space groups. The Fortran
version does not handle any but the standard setting. Making
the Fortran version handle other monoclinic cell settings
would have required altering the incredibly cryptic engine
that interprets space group symbols or to perform the complex
transformations between settings. Much better was to write a
better interpreter for the space group symbols.
-
Limited sizes of atom lists in the ATOMS
and FEFF input files. Well ... Fortran
has no dynamic memory allocation. The only solution for large
atom lists was to edit source code and recompile. Perl has
dynamic memory allocation. 'Nuff said.
-
Perl is an excellent language for GUI and Web application
programming. Fortran sucks for that. Atoms now exists in GUI
and Web forms. Again, 'nuff said.
-
The number of input file options in the the Fortran version
which controlled small details of how the FEFF input files were written was expanding out
of control. The new version used a template system for
formatting output which is vastly more powerful, flexible, and
extensible than piles of obscure input file options.
-
Perl has object oriented capabilities. Consequently I was
able to reuse much of the code from ATOMS
to write programs to perform such interesting chores as powder
pattern simulation, DAFS simulation, and calculations based on
tables of absorption coefficients. All that would have been
much more work in Fortran.
Bruce Ravel
This page modified: 22-Oct-2002