c2x and Inversion
From version 2.15b, c2x can report the inversion symmetry of bands. So herewith a few notes on inversion symmetry.
Inversion and Periodicity
In a periodic system, extra inversion points appear. Considering a 1D system, with an inversion point at a, then
f(a+x)=f(a-x)
but periodicity of repeat distance L means that
f(x)=f(x+L)
One can combine these to givef(a+x)=f(a-x)
f(a+x)=f(L+a-x)
f(a+L/2+(x-L/2))=f(a+L/2-(x-L/2))
f(a'+x')=f(a'-x')
So there is another inversion point at a'=a+L/2. This also means that, if there is an inversion point, then there will be an inversion point in the range -L/4<a<=L/4. This is the one which c2x will report.
Inversion and Parity
There are two, related forms of inversion:
Positive parity: f(a+x)=f(a-x)
Negative parity: f(a+x)=-f(a-x)
If one is considering a charge density, which is always positive, then negative parity is impossible. But for an individual band of the wavefunction, it is possible.
Inversion away from the Gamma point
The k-points with halves in their co-ordinates are also of interest. In 1D a k-point at a half means that
f(x)=-f(x+L)=f(x+2L)
This sign change leads to the second inversion point introduced by the periodicity being of opposite parity to the first.
In higher dimensions
In 3D the above arguments mean that, if there is any inversion point, there are always at least eight in the unit cell. If one is considering the Gamma point, then all have the same parity. At k-points containing halves, four will have odd parity and four even.
C2x will report the parity of just one of those inversion points, the one (joint) closest to the origin. An equal number of other inversion points of the opposite parity will exist.
C2x and Band Inversion
Inversion about the origin and FFTs commute. Inversions about other points need to be considered as a combination of an inversion about the origin, and a co-ordinate shift. A co-ordinate shift in real space becomes a linear phase shift in reciprocal space.
So if the origin is an inversion point for a band, the band in reciprocal space also has the origin as an inversion point, and has the same parity under inversion in reciprocal space.
For an arbitrary origin in real space, in reciprocal space an extra linear phase shift removes the inversion symmetry. But this is just a phase shift, so the modulus of the band retains inversion symmetry, but always has positive parity.
So to detect band inversion symmetry, c2x first considers whether the modulus of the band has inversion symmetry. If it does, it then attempts to find a linear phase shift. Whereas for inversion about the origin in reciprocal space one has:
ψ(k)=±ψ(-k)
depending on whether the parity is odd or even, with the inversion point away from the origin one has
ψ(k)=±exp(2ikx0)ψ(-k)
where x0 is the position of the inversion point.
So c2x considers the phase of ψ(k)/ψ(-k), which we shall define as φ(k). If there is an inversion point this will vary linearly, with the linear coefficient giving the location of the inversion point, and the value at zero will be either zero (positive parity) or ±π (negative parity).
The linear term in the phase can only be determined modulo 2π, and for an inversion point far from the origin it will vary rapidly. However, the first part of this page shows that, if there is an inversion point, there will always be one in the range ±L/4. At this point the phase change in φ(k) between adjacent grid points can be no more than ±π. Any larger change implies that one has gained (or lost) a single extra 2π from the modulus operation.
So by considering the change in φ(k) between adjacent points on the reciprocal space grid one can eliminate the difficulties introduced by only knowing the phases modulo 2π and readily determine the linear shift and the value at the origin. Once the modulo 2π issue is resolved, one is simply trying to fit:
φ(k)=A+Bk
to the data, with A being zero for even parity and ±π for odd parity, and the position of the inversion point being -BL/4π independently for each axis (L being the real space axis length, and k being discretised to consecutive integers).
C2x averages over all adjacent pairs of grid points, and weights by the product of the moduli of ψ at each of the pair. This approach seems to be sufficiently robust, and c2x reports also the final residual for the fit. It cannot distringuish between inversions which are inexact because the calculation is incompletely converged (which will always be true), and those which are inexact because the system almost, but not quite, has the given symmetry.
It should be noted that many values of ψ may be close to zero due to symmetry. Most obviously, inversion symmetry with negative parity implies that ψ(0)=0, and therefore its phase cannot be determined. A mirror plane with negative parity can set a whole axis in reciprocal space to zero, e.g. ψ(kx=0)=0. Thus in its averaging c2x weights by the modulus of ψ to avoid giving significance to noise from components whose value is around zero.