8. Interpolation of Fermi surface

In this tutorial, we will run the disentanglement algorithm on the copper and then compute the Fermi surface.

  1. generate the amn, mmn, and eig files by using Quantum ESPRESSO (QE)
  2. construct a Model for Wannier.jl, by reading the win, amn, mmn, and eig files
  3. run Wannier.jl disentangle on the Model to minimize the spread
  4. write the maximal localized gauge to a new amn file
Tip

This is a HTML version of the tutorial, you can download corresponding

Preparation

Load the package

using WannierIO
using Wannier
using WannierPlots
Tip

Use the run.sh script which automate the scf, nscf, pw2wannier90 steps.

Model generation

We will use the read_w90 function to read the win, amn, mmn, and eig files, and construct a Model that abstracts the calculation

model = read_w90("cu")
lattice: Å
  a1: -1.44310  1.44310  1.36308
  a2:  1.44310 -1.44310  1.36308
  a3:  1.44310  1.44310 -1.36308

atoms: fractional
  Cu:  0.00000  0.00000  0.00000

n_bands: 12
n_wann : 7
kgrid  : 4 4 4
n_kpts : 64
n_bvecs: 12

b-vectors:
         [bx, by, bz] / Å⁻¹                weight
  1       0.54424   -0.54424    0.00000    0.46751
  2      -0.54424    0.54424   -0.00000    0.46751
  3      -0.54424   -0.54424    0.00000    0.46751
  4       0.54424    0.54424    0.00000    0.46751
  5       0.00000   -0.54424   -0.57619    0.37651
  6      -0.54424    0.00000   -0.57619    0.37651
  7       0.00000   -0.54424    0.57619    0.37651
  8       0.54424    0.00000    0.57619    0.37651
  9       0.00000    0.54424   -0.57619    0.37651
 10       0.54424    0.00000   -0.57619    0.37651
 11       0.00000    0.54424    0.57619    0.37651
 12      -0.54424    0.00000    0.57619    0.37651
Tip

The read_w90 function will parse the win file and set the frozen window for the Model according to the dis_froz_min and dis_froz_max parameters in the win file. However, you can also change these parameters by calling the set_frozen_win! function.

Disentanglement and maximal localization

The disentangle function will disentangle and maximally localize the spread functional, and returns the gauge matrices U,

U = disentangle(model);
[ Info: Initial spread
  WF     center [rx, ry, rz]/Š             spread/Ų
   1     0.00000    -0.00000    -0.00000     0.29556
   2    -0.00000     0.00000     0.00000     0.29921
   3    -0.00000     0.00000    -0.00000     0.29850
   4    -0.00000     0.00000    -0.00000     0.29610
   5    -0.00000     0.00000    -0.00000     0.29724
   6     0.41179     0.41315     0.38773     1.08580
   7    -0.41176    -0.41318    -0.38773     1.08580
Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
   ΩI  =     3.37069
   Ω̃   =     0.28750
   ΩOD =     0.28143
   ΩD  =     0.00607
   Ω   =     3.65820


[ Info: Initial spread (with states freezed)
  WF     center [rx, ry, rz]/Š             spread/Ų
   1    -0.00000     0.00019    -0.00005     0.40757
   2    -0.00004     0.00004     0.00009     0.39823
   3     0.00000    -0.00001    -0.00006     0.39830
   4    -0.00000     0.00000    -0.00000     0.41045
   5    -0.00080     0.00054     0.00015     0.40549
   6     0.36331     0.34755     0.45626     1.80609
   7    -0.40018    -0.29634    -0.44707     2.11927
Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
   ΩI  =     4.25181
   Ω̃   =     1.69359
   ΩOD =     0.95589
   ΩD  =     0.73771
   Ω   =     5.94540


Iter     Function value   Gradient norm
     0     5.945400e+00     6.018493e-01
 * time: 0.005949974060058594
     1     5.725834e+00     7.150968e-01
 * time: 0.03482699394226074
     2     5.640980e+00     1.562278e-01
 * time: 0.07561206817626953
     3     5.543174e+00     1.030625e-01
 * time: 0.12872600555419922
     4     5.370197e+00     7.959626e-02
 * time: 0.22693586349487305
     5     5.282800e+00     1.767597e-01
 * time: 0.2656700611114502
     6     5.231577e+00     6.713778e-02
 * time: 0.3043100833892822
     7     5.143145e+00     5.528864e-02
 * time: 0.34281086921691895
     8     4.972023e+00     4.090662e-02
 * time: 0.38121604919433594
     9     4.843133e+00     3.438416e-02
 * time: 0.4201948642730713
    10     4.717256e+00     3.628740e-02
 * time: 0.459104061126709
    11     4.641015e+00     6.564247e-02
 * time: 0.5579800605773926
    12     4.584183e+00     5.480580e-02
 * time: 0.5971949100494385
    13     4.517354e+00     5.339716e-02
 * time: 0.6361730098724365
    14     4.439083e+00     2.791892e-02
 * time: 0.6753878593444824
    15     4.347408e+00     2.612798e-02
 * time: 0.7140390872955322
    16     4.258748e+00     1.702710e-02
 * time: 0.7527790069580078
    17     4.174788e+00     2.626917e-02
 * time: 0.7916889190673828
    18     4.094986e+00     2.281691e-02
 * time: 0.8304510116577148
    19     4.046226e+00     1.185400e-02
 * time: 0.9286820888519287
    20     4.020935e+00     9.952090e-03
 * time: 0.9681189060211182
    21     4.005662e+00     1.011075e-02
 * time: 1.0072829723358154
    22     3.995297e+00     7.594121e-03
 * time: 1.0468499660491943
    23     3.986316e+00     5.328271e-03
 * time: 1.0855000019073486
    24     3.977877e+00     5.550387e-03
 * time: 1.1241850852966309
    25     3.970719e+00     5.550581e-03
 * time: 1.1636509895324707
    26     3.964633e+00     6.431396e-03
 * time: 1.2020270824432373
    27     3.959654e+00     4.242392e-03
 * time: 1.2950549125671387
    28     3.954924e+00     5.301431e-03
 * time: 1.3347599506378174
    29     3.951214e+00     4.605608e-03
 * time: 1.3737399578094482
    30     3.947625e+00     4.261241e-03
 * time: 1.4128129482269287
    31     3.944472e+00     3.663219e-03
 * time: 1.451596975326538
    32     3.941542e+00     4.344669e-03
 * time: 1.4903788566589355
    33     3.938920e+00     4.221461e-03
 * time: 1.5293500423431396
    34     3.936679e+00     3.705176e-03
 * time: 1.5685319900512695
    35     3.935125e+00     2.185481e-03
 * time: 1.6613318920135498
    36     3.933934e+00     2.053159e-03
 * time: 1.7001230716705322
    37     3.932926e+00     2.252898e-03
 * time: 1.7393128871917725
    38     3.931959e+00     2.017718e-03
 * time: 1.7783639430999756
    39     3.931049e+00     2.224020e-03
 * time: 1.8171429634094238
    40     3.930126e+00     2.332612e-03
 * time: 1.8566210269927979
    41     3.929152e+00     2.019223e-03
 * time: 1.8953800201416016
    42     3.928163e+00     2.466227e-03
 * time: 1.934237003326416
    43     3.927183e+00     2.576915e-03
 * time: 2.027906894683838
    44     3.926204e+00     1.900912e-03
 * time: 2.0672309398651123
    45     3.925371e+00     1.917581e-03
 * time: 2.1058640480041504
    46     3.924718e+00     1.800910e-03
 * time: 2.1443440914154053
    47     3.924204e+00     1.379964e-03
 * time: 2.183656930923462
    48     3.923815e+00     1.366774e-03
 * time: 2.2227060794830322
    49     3.923511e+00     1.137560e-03
 * time: 2.2612719535827637
    50     3.923295e+00     9.301296e-04
 * time: 2.3547098636627197
    51     3.923138e+00     8.576719e-04
 * time: 2.393449068069458
    52     3.923015e+00     7.367094e-04
 * time: 2.4330530166625977
    53     3.922923e+00     6.508527e-04
 * time: 2.4720349311828613
    54     3.922860e+00     6.010141e-04
 * time: 2.510503053665161
    55     3.922820e+00     3.764225e-04
 * time: 2.5499589443206787
    56     3.922789e+00     3.871831e-04
 * time: 2.5898659229278564
    57     3.922770e+00     3.484080e-04
 * time: 2.6284239292144775
    58     3.922756e+00     2.173264e-04
 * time: 2.721118927001953
    59     3.922747e+00     1.938598e-04
 * time: 2.7599310874938965
    60     3.922740e+00     1.260008e-04
 * time: 2.7993710041046143
    61     3.922736e+00     1.419997e-04
 * time: 2.837862014770508
    62     3.922733e+00     1.202965e-04
 * time: 2.8770408630371094
    63     3.922731e+00     8.791209e-05
 * time: 2.9155209064483643
    64     3.922729e+00     7.687049e-05
 * time: 2.9555599689483643
    65     3.922728e+00     7.171078e-05
 * time: 2.996001958847046
    66     3.922727e+00     9.216779e-05
 * time: 3.090070962905884
    67     3.922726e+00     7.463645e-05
 * time: 3.1295700073242188
    68     3.922725e+00     8.362810e-05
 * time: 3.1686289310455322
    69     3.922724e+00     7.642571e-05
 * time: 3.2079739570617676
    70     3.922723e+00     9.284451e-05
 * time: 3.246767997741699
    71     3.922723e+00     6.775415e-05
 * time: 3.285844087600708
    72     3.922722e+00     6.073504e-05
 * time: 3.324599027633667
    73     3.922720e+00     6.291847e-05
 * time: 3.363409996032715
    74     3.922719e+00     5.892059e-05
 * time: 3.4560458660125732
    75     3.922718e+00     6.150046e-05
 * time: 3.495112895965576
    76     3.922717e+00     8.285469e-05
 * time: 3.5338900089263916
    77     3.922716e+00     9.172187e-05
 * time: 3.5730600357055664
    78     3.922716e+00     5.823562e-05
 * time: 3.6120290756225586
    79     3.922715e+00     5.644178e-05
 * time: 3.650196075439453
    80     3.922714e+00     5.189340e-05
 * time: 3.6887080669403076
    81     3.922713e+00     6.106287e-05
 * time: 3.7809910774230957
    82     3.922713e+00     4.471689e-05
 * time: 3.8200008869171143
    83     3.922712e+00     5.031222e-05
 * time: 3.859323024749756
    84     3.922712e+00     5.079695e-05
 * time: 3.897631883621216
    85     3.922711e+00     4.390271e-05
 * time: 3.936171054840088
    86     3.922711e+00     4.296242e-05
 * time: 3.9746320247650146
    87     3.922711e+00     4.583711e-05
 * time: 4.014034032821655
    88     3.922710e+00     5.854615e-05
 * time: 4.053232908248901
    89     3.922709e+00     6.310616e-05
 * time: 4.145679950714111
    90     3.922709e+00     7.323834e-05
 * time: 4.184866905212402
    91     3.922708e+00     9.289483e-05
 * time: 4.223891973495483
    92     3.922706e+00     9.263183e-05
 * time: 4.262513875961304
    93     3.922704e+00     1.425304e-04
 * time: 4.301100969314575
    94     3.922701e+00     1.280827e-04
 * time: 4.339781999588013
    95     3.922697e+00     1.558534e-04
 * time: 4.37904691696167
    96     3.922692e+00     1.785881e-04
 * time: 4.417636871337891
    97     3.922684e+00     2.177571e-04
 * time: 4.5101189613342285
    98     3.922671e+00     2.512923e-04
 * time: 4.549170970916748
    99     3.922652e+00     3.838376e-04
 * time: 4.588129043579102
   100     3.922629e+00     3.102477e-04
 * time: 4.626976013183594
   101     3.922599e+00     4.012662e-04
 * time: 4.665582895278931
   102     3.922563e+00     3.487047e-04
 * time: 4.70409893989563
   103     3.922520e+00     4.146889e-04
 * time: 4.742558002471924
   104     3.922482e+00     4.289512e-04
 * time: 4.780972003936768
   105     3.922448e+00     4.863980e-04
 * time: 4.873786926269531
   106     3.922418e+00     3.773631e-04
 * time: 4.912800073623657
   107     3.922393e+00     3.150388e-04
 * time: 4.951379060745239
   108     3.922375e+00     2.932648e-04
 * time: 4.9904398918151855
   109     3.922364e+00     2.037247e-04
 * time: 5.028568983078003
   110     3.922356e+00     1.560597e-04
 * time: 5.0672008991241455
   111     3.922352e+00     1.579636e-04
 * time: 5.105813026428223
   112     3.922348e+00     1.517249e-04
 * time: 5.143816947937012
   113     3.922344e+00     1.254882e-04
 * time: 5.236392021179199
   114     3.922341e+00     1.449002e-04
 * time: 5.275335073471069
   115     3.922337e+00     1.280168e-04
 * time: 5.3144850730896
   116     3.922334e+00     1.523895e-04
 * time: 5.352657079696655
   117     3.922330e+00     1.361758e-04
 * time: 5.391524076461792
   118     3.922325e+00     1.478328e-04
 * time: 5.430221080780029
   119     3.922321e+00     1.540572e-04
 * time: 5.468085050582886
   120     3.922315e+00     1.390974e-04
 * time: 5.5617570877075195
   121     3.922310e+00     1.277912e-04
 * time: 5.600548028945923
   122     3.922306e+00     1.552370e-04
 * time: 5.63948392868042
   123     3.922303e+00     1.235631e-04
 * time: 5.67841100692749
   124     3.922301e+00     1.010800e-04
 * time: 5.716861963272095
   125     3.922299e+00     8.009731e-05
 * time: 5.755070924758911
   126     3.922298e+00     7.508684e-05
 * time: 5.7936060428619385
   127     3.922297e+00     6.784898e-05
 * time: 5.832308053970337
   128     3.922297e+00     4.730279e-05
 * time: 5.925214052200317
   129     3.922296e+00     4.450937e-05
 * time: 5.964046001434326
   130     3.922296e+00     2.724382e-05
 * time: 6.003540992736816
[ Info: Final spread
  WF     center [rx, ry, rz]/Š             spread/Ų
   1     0.00000    -0.00002    -0.00001     0.30379
   2     0.00000    -0.00000    -0.00003     0.33142
   3     0.00000     0.00003     0.00003     0.43591
   4    -0.00005     0.00001     0.00000     0.38562
   5     0.00000    -0.00003     0.00000     0.34529
   6     0.72132    -0.00183     1.36269     1.06015
   7    -0.72008     0.00123    -1.36334     1.06011
Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
   ΩI  =     3.56456
   Ω̃   =     0.35774
   ΩOD =     0.34787
   ΩD  =     0.00986
   Ω   =     3.92230

The initial spread is

omega(model)
  WF     center [rx, ry, rz]/Š             spread/Ų
   1     0.00000    -0.00000    -0.00000     0.29556
   2    -0.00000     0.00000     0.00000     0.29921
   3    -0.00000     0.00000    -0.00000     0.29850
   4    -0.00000     0.00000    -0.00000     0.29610
   5    -0.00000     0.00000    -0.00000     0.29724
   6     0.41179     0.41315     0.38773     1.08580
   7    -0.41176    -0.41318    -0.38773     1.08580
Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
   ΩI  =     3.37069
   Ω̃   =     0.28750
   ΩOD =     0.28143
   ΩD  =     0.00607
   Ω   =     3.65820

The final spread is

omega(model, U)
  WF     center [rx, ry, rz]/Š             spread/Ų
   1     0.00000    -0.00002    -0.00001     0.30379
   2     0.00000    -0.00000    -0.00003     0.33142
   3     0.00000     0.00003     0.00003     0.43591
   4    -0.00005     0.00001     0.00000     0.38562
   5     0.00000    -0.00003     0.00000     0.34529
   6     0.72132    -0.00183     1.36269     1.06015
   7    -0.72008     0.00123    -1.36334     1.06011
Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
   ΩI  =     3.56456
   Ω̃   =     0.35774
   ΩOD =     0.34787
   ΩD  =     0.00986
   Ω   =     3.92230

save the new gauge to the model

model.U .= U;
Note

The convergence thresholds is determined by the keyword arguments of disentangle, e.g., f_tol for the tolerance on spread, and g_tol for the tolerance on the norm of spread gradient, etc. You can use stricter thresholds to further minimize a bit the spread.

load QE band structure

kpoints_qe, E_qe = WannierIO.read_qe_band("qe_bands.dat");

the Fermi energy from scf calculation

ef = 16.8985
16.8985

Generate an InterpModel

Force using kpoint_path in win file

win = read_win("cu.win")
kpath = Wannier.get_kpath(win.unit_cell, win.kpoint_path)

interp_model = Wannier.InterpModel(model; kpath=kpath)

interpolate band structure

kpi, E = Wannier.interpolate(interp_model)

plot band difference

P = plot_band_diff(kpi, E_qe, E; fermi_energy=ef)
Main.HTMLPlot(P, 500)  # hide

then interpolate the Fermi surface on a $30 \times 30 \times 30$ mesh

kpoints, E_fs = Wannier.fermi_surface(interp_model; n_k=30);
nothing #hide

save to a bxsf file origin of the grid, always zeros

origin = zeros(Float64, 3)
WannierIO.write_bxsf("cu.bxsf", ef, origin, interp_model.recip_lattice, E_fs)

show the Brillouin zone

using Brillouin
using PlotlyJS

primitive reciprocal basis associated with k-path

bxsf = Wannier.read_bxsf("cu.bxsf")
fig = WannierPlots.plot_fermisurf_plotly(bxsf.rgrid, bxsf.fermi_energy, bxsf.E; kpath=kpath)
fig.layout.width = 500
fig.layout.height = 500
fig.layout.autosize = false
fig
Main.HTMLPlot(fig, 500)  # hide

This page was generated using Literate.jl.