Once the orbital population (charges) for the system had been obtained, the band
structure can be calculated at any chosen k-points. The following input calculates the
GaAs band structure along the line L-
-X.
Geometry = {
Periodic = Yes
LatticeVectors [Angstrom] = {
2.80 2.80 0.00
2.80 0.00 2.80
0.00 2.80 2.80
}
TypeNames = { "Ga" "As" }
TypesAndCoordinates [relative] = {
1 0.00 0.00 0.00
2 0.25 0.25 0.25
}
}
Driver = {}
Hamiltonian = DFTB {
SCC = Yes
SCCTolerance = 1e-5
MaxSCCIterations = 1
Mixer = Broyden {}
MaxAngularMomentum = {
Ga = "d"; As = "d"
}
SlaterKosterFiles = Type2FileNames {
Prefix = "./hyb-0-1/"
Separator = "-"
Suffix = ".skf"
}
KPointsAndWeights = KLines {
1 0.5 0.0 0.0 # L (11-1)
20 0.0 0.0 0.0 # Gamma (000)
20 0.5 0.5 0.0 # X (100)
}
ReadInitialCharges = Yes
}
Options = {
RestartFrequency = 0
}
Some notes on the input:
Driver option must to be set to the empty value, since geometry
optimisation during band structure calculation does not make any sense.
1:
MaxSCCIterations = 1This is essential in order to prevent DFTB+ from making SCC cycles that may change the charges.
DFTB block contains the
ReadInitialCharges = Yesoption, which advises DFTB+ to read in the charges from the file
charges.bin and use those to initialise the SCC loop. The
charges.bin file should be the one containing the converged charges for
the current structure (produced by the previous DFTB+ run).
KLines directive:
KPointsAndWeights = KLines {
1 0.5 0.0 0.0 # L (11-1)
20 0.0 0.0 0.0 # Gamma (000)
20 0.5 0.5 0.0 # X (100)
}
Every line specifies a line segment. The first column gives the number of
K-points along the line segment between (but excluding) the end of the
previous line segment and the K-point specified in the next three columns
(which is the end point of the current line segment). The specified number of
K-points is evenly distributed along the line, the last K-point coincides with
the end point of the segment. The coordinates of the K-points are relative
coordinates (given in the coordinate system spawned by the reciprocal lattice
vectors of the periodic structures). The starting point of the first line
segment is the
The example above calculates first the line segment between the
point
and the L-point using only one K-point. The starting point of a line segment
is always excluded and the last K-point along it always coincides with the
specified end point, therefore, the line
1 0.5 0.0 0.0 # L (11-1)
instructs DFTB+ to do a single K-point calculation for the L point. Then 20
K-points are calculated along the L-
Options block contains
RestartFrequency = 0This prevents DFTB+ from writing restart information to the disc and thus from overwriting the
charges.bin file (with the converged charges) with
meaningless charges obtained during the band structure calculation.
Running DFTB+ with the input above, the eigenlevel spectrum is calculated at the
required k-points. The results are written to the file detailed.out and
in more readable format to band.out. You can again use the script
band2dat to extract the data from it, which can be then directly plotted
by some data visualisation tool (like xmgrace):
band2dat band.out bandstruct.datIf you import the data file
bandstruct.dat into xmgrace as NXY
set, you should obtain a band structure similar to
Fig.
.
![]() |