FDA engine from D.Heisterberg

From djh@ccl.net Thu Apr 13 17:17:27 1995
From: David Heisterberg 
Date: Thu, 13 Apr 1995 17:17:25 -0400
Message-Id: <199504132117.RAA04145@xipe.ccl.net>
To: chemistry@ccl.net
Subject: fda: a C++ atomic code

FDA, a finite difference C++ atomic structure code is available from
the CCL ftp server in


FDA is an "object inclined" (it may be stretching it to call it
object oriented) program for density functional atomic structure
calculations.  It bears a striking similarity to Herman and Skillman's
1963 code (and in its initial release doesn't push the level of
theory any farther).

However, FDA does have some nice features:

  a simple input form, but one that allows for pretty complete
  control of grid generation, convergence, functional calculation,
  and orbital occupation;

  a total energy and energy breakdown;

  a simple dump file that can be used to extract additional
  orbital-related quantities, or generate basis sets suitable
  for Fenske-Hall or Ellis' DVXA;

  a reasonably easy to follow source code that should build
  without difficulty on most platforms.

Dave Heisterberg
The Ohio Supercomputer Center

Input for FDA version 0.10 (12-Apr-95)
David J. Heisterberg
Department of Chemistry
The Ohio State University

Line 1:
    int    np - number of grid points
    double x0 - coordinate of first grid point
    double xn - coordinate of last grid point

Line 2:
    int    niter - maximum number of iterations
    double cnv   - convergence criterion
    double mix1  - initial density mixing
    double mix2  - asymptotic density mixing
    double alpha - X-alpha alpha parameter
    double beta  - Becke's beta parameter (not used but required)

Line 3:
    double zn - nuclear charge
    int    no - number of orbitals

Line 4 (no times):
    int    n         - principal quantum number
    int    l         - angular quantum number
    double alpha occ - alpha occupation
    double beta occ  - beta occupation


If alpha is < 0, |alpha| is used, but no potential "tail" correction
is performed.

Beta is a place-holder for now.  If gradient corrections are ever
implemented it should be set to 0.0042.

Alpha and beta occupations are checked but then added together as this
version isn't spin polarized.

General Description:

FDA is a knock-off of Herman and Skillman's 1963 code, sort of.

The Hamiltonian was supposed to be the same, yet fda gets
significantly different results, which, happily enough, are
much closer to those obtained with Froese Fischer's MCHF code.

FDA uses a different grid, with the spacing between grid points
growing by a constant factor.

FDA determines oribtals by finding eigenvectors of a tri-diagonal
operator matrix rather than using outward-inward integration.
Inverse iteration is used and sometimes eigenvectors will "collapse,"
especially for heavier atoms.  Should that happen, turn down the
mixing factors and turn up the iterations.

FDA requires no initial guess as to potential or eigenvalues.
Rather, it starts from a bare nucleus guess.

FDA calculates a total energy as well as a virial ratio (that
still isn't where it ought to be).

Finally, FDA is written in C++, with the aim of making the overall
structure of the calculation clear.

Building and Running:

FDA compiles reasonably cleanly with g++ and CRI's CC.  It should do
ok on most platforms, but you may need to change the .cxx extension
to .C (as on the Cray).

FDA will either read from stdin and write to stdout, or, if run as

    fda name

will read from name.inp, write to name.out, and generate an ASCII
dump file, name.dmp.  The contents of the dump file should be clear
from the source.  The dump file will eventually find use in generating
basis sets for a molecular code.  Eventually...

FDA is copyright 1995 by David J. Heisterberg.  Permission is hereby
granted to freely use FDA and redistribute it so long as this copy-
rigth notice is maintained and you don't laugh at the author.

Part of the reason for doing FDA was as an exercise in learning C++,
but the intention is to turn it into a real, usable code someday, so
please direct comments and scathing criticisms to

    djh@osc.edu    or
    heisterberg.1@osu.edu (both links are inactive, 2010)