Interpolation
This page lists struct and functions for Wannier interpolation.
There are two flavors of interpolation:
- WS: the Wigner-Seitz interpolation
- MDRS: the Minimal-distance replica selection method
MDRS has better interpolation quality[WAN20], so it should be used in most cases. Moreover, we implement two versions of MDRS:
MDRSv1: the original version inWannier90[WAN20]. This is slower than the WS interpolation.MDRSv2: a slightly modified version which removes some for loops, same as what is implemented inWannier Berri[WBERRI]. The speed is similar to the WS interpolation.
By default, we use the MDRSv2 interpolation.
Contents
Index
R vectors
RVectors
The R vectors are automatically generated by calling either of these two approaches:
read_w90_with_chkto read theWannier90outputseedname.chk.fmtfile, and generate anInterpModel,InterpModela constructor to generate theInterpModelfrom a WannierizationModel.
So usually the user does not need to call the following functions.
KRVectors
The KRVectors contains both kpoint mappings and RVectors, allowing both forward and inverse Fourier transform.
Fourier transforms
Performs Fourier transform between k and R spaces defined by KRVectors.
In general, the user only need to call the fourier(kRvectors, Oᵏ) and invfourier(kRvectors, Oᴿ, kpoints) functions directly, irrespective of the type of kRVectors. Other functions are internally used based on the type of KRVectors, thanks to multiple dispatch.
InterpModel
To separate the Wannier interpolation from Wannierization, we have another model, the InterpModel, which is solely for the purpose of interpolation, while Model works only for Wannierization.
Band structure
Need some care when comparing the band interpolation between Wannier.jl and Wannier90, after running the Wannier.jl disentanglement and writing an optimized amn file for Wannier90 to interpolate band structure.
When Wannier90 read an amn file, it will (Wannier90 v3.1.0)
- Lowdin orthogonalize the
amnmatrices, indisentangle.F90:dis_project, line 1418 This should do no harm, since the optimized amn is already semi-unitary, a SVD of it should not change the optimized amn (apart from numerical noise) - generate a new
amnaccording to the frozen window, indisentangle.F90:dis_proj_froz, line 1830. This will DESTROY the optimizedamnmatrices, if we restartWannier90from the optimizedamnwithdis_num_iter = 0, the spreads inwoutfile is very different from the output ofWannier.jl, we must skip this step by commenting out ALL thedis_froz_min/maxin thewinfile, then useWannier90to interpolate bands, remember also setnum_iteranddis_num_ite = 0.
Fermi surface
The fermi_surface function will use WS or MDRS interpolation based on the type of Rvectors. However, Wannier90 only use WS interpolation when plotting Fermi surface (even if the use_ws_distance is set as true in the win file). So the fermi_surface function will output different result than Wannier90 if using MDRS.
Derivatives
- WAN20Pizzi, G.; Vitale, V.; Arita, R.; Blügel, S.; Freimuth, F.; Géranton, G.; Gibertini, M.; Gresch, D.; Johnson, C.; Koretsune, T.; Ibañez-Azpiroz, J.; Lee, H.; Lihm, J.-M.; Marchand, D.; Marrazzo, A.; Mokrousov, Y.; Mustafa, J. I.; Nohara, Y.; Nomura, Y.; Paulatto, L.; Poncé, S.; Ponweiser, T.; Qiao, J.; Thöle, F.; Tsirkin, S. S.; Wierzbowska, M.; Marzari, N.; Vanderbilt, D.; Souza, I.; Mostofi, A. A. & Yates, J. R., Wannier90 as a community code: new features and applications, Journal of Physics: Condensed Matter, 2020, 32, 165902
- WBERRITsirkin, S. S., High performance Wannier interpolation of Berry curvature and related quantities with WannierBerri code, npj Computational Materials, 2021, 7