Using SIESTA, I want to plot the wavefunctions around the Fermi level (similar to HOMO/LUMO). Also, I want to do COOP analysis.

From the SIESTA manual, I can setup to write the wavefunctions associated to a set of bands or selecting them by energy:

The user can optionally request that the wavefunctions corresponding to the computed bands be written to file. They are written to the SystemLabel.bands.WFSX file.


The user can optionally request that specific wavefunctions are written to file. These wavefunctions are re-computed after the geometry loop (if any) finishes, using the last (presumably converged) density matrix produced during the last self-consistent field loop (after a final mixing). They are written to the SystemLabel.selected.WFSX file.

Note that the complete set of wavefunctions obtained during the last iteration of the SCF loop will be written to SystemLabel.fullBZ.WFSX if the COOP.Write option is in effect.

I am using the following keywords:

WFS.Write.For.Bands     T
COOP.Write              T
WriteEigenvalues        T
WriteKbands             T
WriteBands              T
WriteWaveFunctions      T

The results are two files a SystemLabel.fullBZ.WFSX with ~800MB and a SystemLabel.bands.WFSX with 14GB.

A doubt:
Which one should I use to plot the wavefunctions corresponding to eigenvalues around the Fermi energy?

Thanks in advance.


I believe both can technically be used. Let me first point out that your calculation must have been long and heavy ! Good luck with those. Your fullBZ.WFSX files are used for the COOP bonding analysis you want to do and .bands.WFSX will give you your fat bands which you can use for your wave-functions around the Fermi.

Here's a tutorial from SIESTA that might help.


The two different files contain different things:

  • *.fullBZ.WFSX contains all wavefunctions for the SCF sampled Brillouin zone, i.e. for all k-points defined in the kgrid.MonkhorstPack block. The k-point order can manually be inferred from the KP file.
  • *bands.WFSX contains the wavefunctions for the bandstructure sampled Brillouin zone, i.e. from the blocks BandLines or BandPoints.

Since you are interested in the Fermi-level and that the band-structure contains the Fermi-level this would be easier to deal with, but both contains the relevant information in this case.

I would however suggest you used sisl (disclaimer, I am the author) for reading wavefunction coefficients and coop analysis.

Something like this would suffice:

import numpy as np
import sisl
H = sisl.get_sile("RUN.fdf").read_hamiltonian()
wfsx = sisl.get_sile("*.fullBZ.WFSX", parent=H)

E = np.linspace(-2, 2, 201)
for es in wfsx.yield_eigenstate():

which will print COOP curves for every eigenstate contained in the WFSX file. Then you can selectively decide which ones you want.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.