sisl lets you interact with DFT codes (primarily siesta). Furthermore it interfaces a generic tight-binding utility to create Hamiltonians meant for transport calculations in tbtrans (part of the TranSIESTA package) as well as interfacing to more generic emperical potential codes such as GULP.
It is primarily written in Python and may be used in both Python 2 and Python 3 environments.
Creation of geometries is very easy and a subset of generic lattices are existing:
import sisl graphene10x10 = sisl.geom.graphene().repeat(10, 0).repeat(10, 1) graphene10x10.write('graphene10x10.xyz')
which creates an xyz file with a 10x10 basic unit cell of graphene.
Among one of the utilities accompanying the sisl suite is the ability to produce real-space plots of the wavefunctions. Currently this works intrinsically by reading the Hamiltonian and diagonalizing it:
import sisl H = sisl.get_sile('RUN.fdf').read_hamiltonian() # also reads basis set information etc. es = H.eigenstate() # calculate the eigenstates at Gamma grid = sisl.Grid(0.05, sc=H.geom.sc) es.sub(10).psi(grid) # plot the 11th wavefunction on the grid. grid.write('wavefunction_11.cube') # write to Cube file