# Band structure output from Exciting - what are the X units?

I'm using Exciting Code to calculate some electronic band structures. Starting with the example of Si I get sensible output and can plot BAND.OUT and BAND-QP.OUT using PLOT-gwbands.py or directly in any plotting software (using BANDLINES.OUT to label the critical points).

Looking in BAND.OUT, the x coordinate is rather puzzling. I know it comes from the distance along the path W-L-Γ-X-W-K as specified in input.xml, but I can't get to the numbers in BANDLINES.OUT (the positions of the specified high-symmetry points) from first principles.

From input.xml we have:

<point coord=" 0.750   0.500   0.250" label="W"/>
<point coord=" 0.500   0.500   0.500" label="L"/>
<point coord=" 0.000   0.000   0.000" label="GAMMA"/>
<point coord=" 0.500   0.500   0.000" label="X"/>
<point coord=" 0.750   0.500   0.250" label="W"/>
<point coord=" 0.750   0.375   0.375" label="K"/>


If I calculate the length of each segment by $$\sqrt((h2-h1)^2+(k2-k1)^2+(l2-l1)^2)$$ and compare to BANDLINES.OUT:

Segment distance (BANDLINES.OUT) distance (between coordinates)
W-L 0.4330295261 0.353553390593274
L-Γ 0.9633802174 1.21957879437771
Γ-X 1.575776446 1.92668557556426
X-W 1.881974561 2.28023896615753
W-K 2.098489324 2.45701566145417

I get a non-constant difference - the first row differs by a factor of about 0.82, the other rows by 1.17--1.27 (not close enough for rounding error)

I've tried looking at the source (and am still trying) but as an experimentalist who has never done any Fortran, progress is very slow, so hopefully someone just knows.

• Are they not reciprocal unit cell units? It should be dimensionless if I understand correctly. Jan 13, 2021 at 16:02
• @TristanMaxson we're making progress, and while they are reciprocal they're not dimensionless (or Si and diamond would be the same). I may be in a position to answer myself tomorrow with a reverse-engineered answer; it appears to use a different basis to input.xml, explaining the non-constant difference. Jan 13, 2021 at 16:06
• Reciprocal angstroms would be my next guess...anything else would be slightly strange for a modeling code I think. Jan 13, 2021 at 18:07
• @Tristan Exciting uses atomic units so you have to convert lengths into Bohr. It looks like 2 pi/a_0 where a_0 is in Bohr, after converting the basis - a combination of goid guesswork (mostly not me) and RTFS (me). You can see why I hoped someone would just know. Jan 13, 2021 at 18:47
• Be sure to answer your own question to document this long term :) Glad you figured it out Jan 13, 2021 at 18:52

By knowing the coordinates of the L point in reciprocal space are (0.5, 0.5, 0.5) we know its distance from Γ to be $$\sqrt(0.5^2+0.5^2+0.5^2)$$ multiplied by a conversion factor. This conversion factor must take into account the lattice constant $$a$$, to account for the difference between diamond and silicon, and given that Exciting uses atomic units with lengths in Bohr radii ($$a_0 = 0.529~Å$$) that factor should appear too. There's also a factor of $$2 \pi$$, which is omitted from some notations.
The x scale is the distance along a series of straight lines between the points specified. The difference between L and Γ is 0.53 x units, which means a scale factor of $${\frac{2\pi}{(a / a_0)}}$$.
The further complication is that while input.xml uses a Wigner-Seitz primitive basis in which X is at (0.5,0.5,0), the output uses a conventional basis with X at (0,1,0). For interpreting the data, this means that you can't copy the coordinates of the critical points from input.xml. You need to change the basis. A comparison, for the cubic structure I'm interested in, is here. That's enough to use the output, using the distances between points expressed in the conventional basis (BANDLINES.OUT contains the cumulative distance along the 3d polyline). Note that I chose L for the calculation above, as it has the same coordinates in both bases.
I've never written Fortran, or even tried to read it until now. Without trying to add debug output to the source, I think I know what happens: initlattice.f90 seems to call a vector-matrix multiplication (r3mv.f90) on the atom coordinates and the (inverse of the) basevect input. That this process happens isn't obvious from the doucmentation; though How to Start an exciting Calculation tells us about the input basis used. It says: