PROP1E: populations and density of states

This page provides guidance in using the PROP1E one-electron properties post-processing code.


PROP1E computes atomic electron populations and a total density of states from a DFT calculation. In addition, it can compute an projected density of states: atom-resolved, angular-momentum (l-)resolved, and m_l resolved. It does these analyses with either the Mulliken or Lowdin approach.

Overview of use

To use the post-processing code, the user must run a final calculation with the “do post” flag set in the command section, and then save a set of scratch and output files from the calculation for input to the post-processing code. The post-processing code can be run interactively. The user needs give instructions to the code about what analyses to perform and on which atoms. The output of the code is a set of files (the number and names of the files are dependent upon the particular analyses the user selects) that can be input to a graphics program, and are particularly suitable for visualization using XMGRACE.


Note that this code is under active development, and the conventions used for the input are subject to change.
To run the post-processing code, you will need to do the following steps:

  1. Set “do post” flag in a final Quest run
  2. Save the following files from the Quest calculation:
    • lcao.s – overlap matrix
    • lcao.vec – eigenvectors
    • lcao.hist – history file
    • – additional data for the post-processing code
  3. Prepare a “pdos.list” file to specify which atoms to be analyzed
  4. Run the post-processing code (either interactively, or batch)
  5. Do visualization from the resulting output files (viz code not provided)
  6. Troubleshooting

“do post” in final Quest run

This triggers additional output from the final Quest calculation that is needed for input to the post-processing code, generates a “” file with the extra data need for the analysis.

Quest output files needed for input to post-processing code

From the output of the final Quest calculation, the populations/DOS analysis needs the eigenvector file “lcao.vec” and the overlap matrix file “lcao.s”, along with the history file “lcao.hist” and post-processing file “”, with those exact names.

The lcao.* files can get quite large, so it is usual practice to delete all the lcao.* scratch files at the end of production runs to eliminate unnecessary disk usage. It is usually best to turn on “do post” only for the final converged system for which an analysis is desired and keeping the necessary scratch files from the final run, rather than saving the scratch files from all intermediate calculations.

Identify target atoms in a “pdos.list” file

The pdos.list file is a simple ASCII text file that identifies the atoms for which projected population analyses are to be performed. Note: this file can be renamed for convenience. In this list file, the first line indicates the number of atoms for which projected densities of states. Each line after that is the ordinal number of the atom (the order used in the Quest calculations) to do the analyses for. This file …

4    = total number of atoms from input to perform pDOS
 3   = ordinal number of first DOS atom (atom #3 in calculation)
 5   = ordinal number of second DOS atom  ...

… would compute pDOS for four atoms, the third, fifth, seventh, and eight atoms in the Quest input file.

Running the post-processing code

The code is interactive, and asks a series of questions.

  1. Which DFT code, Quest or GAMESS?
    Enter “1” to analyze Quest results (the GAMESS analysis is unsupported)
  2. What is the name of the pdos.list file?
    The name need not be “pdos.list”.
  3. How much of an analysis?
    The default is to only do a Mulliken population analysis and stop.
    • Enter “0” to only to a population analysis
    • Enter “1” to add an atom-resolved pDOS
    • Enter “2” to further add an angular-resolved pDOS over each atom
    • Enter “3” to yet further add an m_l resolved pDOS over each atom
    • Enter other options as offered in the menu help listing.
  4. Do a Lowdin analysis of this as well?
    Enter “true”/”false”

The post-processing does not (yet) offer the option to modify the range of energy to perform the DOS over, it uses the entire energy range from the output of the DFT calculation. The code does offer the option to change the Gaussian width used (default width=0.05 eV) in constructing the DOS from the eigenstate energies.

Post-processing output

The post-processing code always produces a “dos.dat” file that contains a total density of states over all atoms.
The Mulliken and Lowdin atomic populations are reported in the “out_test” file.
If requested to perform a projected density of states, the post-processing code outputs a series of atom-resolved files named “atomm{num}.dat” (Mulliken analysis) and “atoml{num}.dat” (Lowdin analysis), one for each atom in the list in the {pdos.list} file, enumerated by {num}.
The contents of these files is a multi-column list:
the first column being the energy,
the second-fourth columns being the s-,p-,d-projected density of states on that atom,
and the final entry being the total pDOS of that atom at that energy.
The units of the energy are in eV.

Visualize results

The atom*.dat files are in a format that can directly be read into a visualization code such as XMGRACE.


PROP1E is a working research code, not well-polished, still being actively revised. You are mostly on your own, but PROP1E is relatively simple code and should not be a difficult to modify. A few things to check:

  • Check that you have the necessary input files and that these files are not corrupted.
  • Perhaps the server you ran the DFT calculation on (e.g. parallel server) and where you compiled the PROP1E code (e.g. your local workstation) have incompatible binary formats (e.g., little- vs. big-endian)? Convert the binary input files, or run the DFT and DOS analysis on the same platform.
  • Check that PROP1E is adequately dimensioned with respect to the Quest calculation you are attempting to analyze.
  • Some internal issue in the PROP1E code – it is a simple f77 code, you should be able to make simple modifications to accommodate your specific needs.