# 20. Wannier function calculation

In this section we introduce maximally localized Wannier function (MLWF)
calculations [MV97, SMV01, AM12].
Following a self-consistent calculation, one obtains the ground-state
density, from which the Kohn-Sham (KS) states can be calculated. The KS
state basis is usually delocalized in real space and non-smooth in
reciprocal space, which is impractical for certain applications. It is
possible to derive a maximally localized basis from the canonical KS
states (or a subset of them), a procedure called gauge optimization
which yields the MLWF. Note that the MLWF solver is only implemented for
LCAO calculations (`LCAO.status = true`

).

## 20.1. Example: MLWF of FCC copper

Suppose we have completed a self-consistent calculation of face-centered
cubic copper and that the results are in `./results/cu_lcao_scf.h5`

and `./results/cu_lcao_scf.mat`

. Following the instructions in section
Band structure calculation, we can produce a band structure which looks like
Fig. 20.1.1.

We now compute the Wannier functions for the bands comprised in the
interval \([-6 -2]\). Create the input file `cu_lcao_wan`

as
follows

```
info.savepath = './results/cu_lcao_wan'
info.calculationType = 'wannier'
rho.in = './results/cu_lcao_scf'
kpoint.gridn = [11 11 11]
units.energy = 'ev'
wannier.outwin = [-10 -1]
wannier.shiftEf = true
wannier.orbi = 6:10
```

then execute rescu

```
rescu -i cu_lcao_wan
```

The purpose of each keywords is mentioned hereafter

`info.calculationType`

is set to`wannier`

so that RESCU computes MLWF;`rho.in`

must be the path to the self-consistent calculation results,`./results/cu_lcao_scf`

in the present example;`kpoint.gridn`

defines the reciprocal space grid. It is a \(1\times 3\) vector specifying the number of grid points in the direction of each reciprocal lattice vectors. It is recommended to use a grid as fine or finer than that used in the self-consistent calculation;`units.energy`

sets the default input energy unit to electronvolt;`wannier.outwin`

specifies the*outer*energy window. By default, the window is absolute and in units of Hartree. Here, the unit of energy is electronvolt as specified by`units.energy`

and the values are relative to the Fermi energy as specified by`wannier.shiftEf`

. For every k-point, the MLWF calculator minimizes the spread functional within the subspace of the KS states comprises in the outer energy window. Too few or too many states can impede the optimization procedure. In the present case, we find that including the lowest \(s\)-band improves the MLWF description, and hence we set the lower window bound to (\(E_F-10\)) eV. The upper bound is not as important, but it should enclose all \(d\)-bands, so we set it to (\(E_F-1\)) eV;`wannier.shiftEf`

is set to`true`

such that the energies given by`wannier.outwin`

are relative to the Fermi level;`wannier.orbi`

is a vector of orbital indices that determines which orbitals to use as a projection basis. It is the most important keyword in Wannier function calculations. Firstly, the projection basis determines the dimensionality of the MLWF basis: one gets a MLWF for every projection orbital. It follows that the size of the Wannier Hamiltonian and other operators also has this dimensionality. Second, the projection basis provides an initial guess of sorts for the Wannier functions. It should thus be picked in accordance with the character of the bands in the target energy window, which can be determined from symmetry or physical intuition for example. Here, the bands in the given energy window have \(d\)-orbital character (as can be observed in a band decomposition calculation, section Band structure decomposition). Using the information in`LCAO.orbInfo`

, we see that the orbitals indices corresponding to \(d\)-orbitals are 6:15, for a total of 10 orbitals since there is one \(\zeta_1\)-shell and one \(\zeta_2\)-shell each with 5 orbitals. We use the \(\zeta_1\)-orbitals, which have indices [6,7,8,9,10], as a projection basis since they have the largest weights in the band structure decomposition.

There are two keywords controlling KS subspace selection besides
`wannier.outwin`

: `wannier.innwin`

and `wannier.bandi`

(which
stand for *inner* energy window and band index range respectively).
Copper being a metal, is has so-called entangled bands, which means that
it is not possible to isolate a subset of KS states and optimize the
spread functional with respect to a pure gauge transform. Semiconductors
however often have groups of bands isolated by energy gaps. It may then
be convenient to specify which bands to include in the KS subspace
specifying band indices instead of an energy window, hence the keyword
`wannier.bandi`

. For example, to generate Wannier functions for the
four valence bands of silicon, we should set `wannier.bandi = [1 4]`

,
assuming no core states are included in the pseudopotential’s reference
configuration. A user may sometimes want to force the inclusion of
certain KS states in the outer energy window, which is achievable via
`wannier.innwin`

.

The results of the Wannier function calculation are found in
`results/cu_lcao_wan.mat`

and `results/cu_lcao_wan_hamiltonian.wan`

.
The file `results/cu_lcao_wan.mat`

contains the usual output data and

`wannier.centers`

the wannier function positions (centers);`wannier.Uk`

the unitary transforms to convert Bloch functions to Wannier functions and vice versa (\(U_{\mathbf{k}}\));`wannier.Uk0`

the subspace projection transforms (\(U_{\mathbf{k}}^0\));`wannier.ham`

the*displaced*Hamiltonian in the Wannier function basis (\(H_{{\mathbf{R}}^W}\));`wannier.vec`

the Hamiltonian displacements (\(\mathbf{R}\)).

The \(\mathbf{k}\)-dependent Wannier functions can be recovered computing

where \(\psi_{j}^{\mathbf{k}\sigma}\) are the canonical Kohn-Sham states, and the MLWF computed by Fourier transform

The Wannier representation of the Hamiltonian is found in
`wannier.ham`

, but it is also saved in the Wannier90 code format in
`results/cu_lcao_wan_hamiltonian.wan`

.

The Wannier band structure can be calculated creating the input
`cu_lcao_wbs`

```
rho.in = 'results/cu_lcao_wan'
info.savepath = './results/cu_lcao_wbs'
info.outfile = 'fcu_lcao_wbs.out'
info.calculationType = 'wannier-bs'
```

and passing it to RESCU

```
rescu -i cu_lcao_wbs
```

The result can be plotted as follows

```
rescu -p result/cu_lcao_wbs
```

The Wannier band structure by itself may look a bit strange, so it is usually represented contextually with the standard band structure as in Fig. 20.1.2.

Nicola Marzari and David Vanderbilt. Maximally localized generalized Wannier functions for composite energy bands. Physical Review B - Condensed Matter and Materials Physics, 56.20 (1997), pp. 12847–12865.

Ivo Souza, Nicola Marzari, and David Vanderbilt. Maximally localized Wannier functions for entangled energy bands. Physical Review B - Condensed Matter and Materials Physics 65.3 (2001), pp. 1–13.

Arash A. Mostofi et al. Maximally localized Wannier functions: Theory and applications. Reviews of Modern Physics 84.4 (Oct. 2012), pp. 1419–1475.