8. Interpolation of Fermi surface
In this tutorial, we will run the disentanglement algorithm on the copper and then compute the Fermi surface.
- generate the
amn,mmn, andeigfiles by usingQuantum ESPRESSO(QE) - construct a
ModelforWannier.jl, by reading thewin,amn,mmn, andeigfiles - run
Wannier.jldisentangleon theModelto minimize the spread - write the maximal localized gauge to a new
amnfile
This is a HTML version of the tutorial, you can download corresponding
- Jupyter notebook:
tutorial.ipynb - Julia script:
tutorial.jl
Preparation
Load the package
using WannierIO
using Wannier
using WannierPlotsUse 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.37651The 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.92230The 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;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.898516.8985Generate 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) # hidethen interpolate the Fermi surface on a $30 \times 30 \times 30$ mesh
kpoints, E_fs = Wannier.fermi_surface(interp_model; n_k=30);
nothing #hidesave 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 PlotlyJSprimitive 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) # hideThis page was generated using Literate.jl.