Symmetrization of Wannier Hamiltonian and matrices

By Xiaoxiong Liu : xxliu@physik.uzh.ch

The real-space Wannier Hamiltonian obtained by Wannier90 code generally does not strictly preserve the corresponding symmetry. The slight loss of symmetry will gap the expected band intersections. Berry curvature and orbital magnetic moment are more sensitive to symmetry than energy eigenvalues. In the following, I give details about the symmetrization of Wannier Hamiltonian and matrices.

In WannierBerri, our built-in symmetrization method can enforce symmetrizing Wannier Hamiltonian (Ham_R) and matrices (AA_R, BB_R, CC_R, SS_R) after reading them.

\(Ham\_R = <n0|\hat{H}|mR>\)

\(AA\_R = <n0|\hat{r}|mR>\)

\(BB\_R = <n0|\hat{H}\cdot(\hat{r}-\hat{R})|mR>\)

\(CC\_R_c = i \epsilon_{abc} <n0|\hat{r}_a\cdot\hat{H}\cdot(\hat{r}_b-\hat{R}_b)|mR>\)

\(SS\_R = <n0|\hat{\sigma}|mR>\)

They are needed when calculating different quantities: 1. Energy eigenvalue <– Ham_R 2. Berry Curvature <– Ham_R, AA_R 3. Orbital magnetic moment <– Ham_R, AA_R, BB_R, CC_R 4. Spin magnetic moment <– SS_R

NOTE: This method only works with Wannier Hamiltonian without maximal localized.

We will show you two examples: 1. Symmetrize nonmagnetic system with SOC (trigonal Te) 2. Symmetrize magnetic system with SOC (bcc Fe)

[1]:
#import necessary packages
import wannierberri as wberri
import numpy as np
import matplotlib.pyplot as plt #for plotting figures

Nonmagnetic system (trigonal Te)

[5]:
#Reading Wannier Hamiltonian and position element matrix from Te_tb.dat file.
#We bulit to system, `system_Te` without symmetrization and `system_Te_sym` with symmetrization

system_Te=wberri.System_tb(tb_file='./Te_data/Te_tb.dat',berry=True,use_ws=False)
system_Te_sym=wberri.System_tb(tb_file='./Te_data/Te_tb.dat',berry=True,use_ws=False)

#Symmetrization step.
system_Te_sym.symmetrize(
    # positions: positions of each atoms in a unitcell (direct coordinate system)
    positions = np.array([[0.274, 0.274, 0.0],
                    [0.726, 0.0, 0.33333333],
                   [0.0, 0.726, 0.66666667]]),
    # atom_name: name of each atoms, need to correspond to position order.
    atom_name = ['Te','Te','Te'],
    # projections: should be the same with projection card in wannier90.win
    proj = ['Te:s','Te:p'],
    # soc: with soc or spinless
    soc=True,
    # DFT_code: What code was used to complet the DFT calculation. only support VASP and QE now.
    DFT_code='vasp',
    )
reading TB file ./Te_data/Te_tb.dat ( written on  9May2022 at 22:54:49 )
NOT using ws_dist
Number of wannier functions: 24
Number of R points: 195
Recommended size of FFT grid [7 9 5]
Reading the system from ./Te_data/Te_tb.dat finished successfully
reading TB file ./Te_data/Te_tb.dat ( written on  9May2022 at 22:54:49 )
NOT using ws_dist
Number of wannier functions: 24
Number of R points: 195
Recommended size of FFT grid [7 9 5]
Reading the system from ./Te_data/Te_tb.dat finished successfully
Wannier atoms info
(1, 'Te', array([0.274, 0.274, 0.   ]), ['s', 'p'], [[0, 12], [3, 4, 5, 15, 16, 17]])
(2, 'Te', array([0.726     , 0.        , 0.33333333]), ['s', 'p'], [[1, 13], [6, 7, 8, 18, 19, 20]])
(3, 'Te', array([0.        , 0.726     , 0.66666667]), ['s', 'p'], [[2, 14], [9, 10, 11, 21, 22, 23]])
[get_spacegroup]
  Spacegroup is P3_121 (152).
  ---------------    1 ---------------
 det =  0.9999999999999999
  rotation:                    cart:
     [ 1  0  0]                    [1.00 0.00 0.00]
     [ 0  1  0]                    [0.00 1.00 0.00]
     [ 0  0  1]                    [0.00 0.00 1.00]
  translation:
     (-0.00000 -0.00000 -0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------    2 ---------------
 det =  1.0
  rotation:                    cart:
     [ 0 -1  0]                    [-0.50 -0.87 0.00]
     [ 1 -1  0]                    [0.87 -0.50 0.00]
     [ 0  0  1]                    [0.00 0.00 1.00]
  translation:
     ( 0.00000  0.00000  0.33333)  ( 0.00000  0.00000  0.33333)
  ---------------    3 ---------------
 det =  1.0
  rotation:                    cart:
     [-1  1  0]                    [-0.50 0.87 0.00]
     [-1  0  0]                    [-0.87 -0.50 0.00]
     [ 0  0  1]                    [0.00 0.00 1.00]
  translation:
     ( 0.00000  0.00000  0.66667)  ( 0.00000  0.00000  0.66667)
  ---------------    4 ---------------
 det =  1.0
  rotation:                    cart:
     [ 0  1  0]                    [-0.50 0.87 0.00]
     [ 1  0  0]                    [0.87 0.50 0.00]
     [ 0  0 -1]                    [0.00 0.00 -1.00]
  translation:
     (-0.00000 -0.00000 -0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------    5 ---------------
 det =  0.9999999999999999
  rotation:                    cart:
     [ 1 -1  0]                    [1.00 0.00 0.00]
     [ 0 -1  0]                    [0.00 -1.00 0.00]
     [ 0  0 -1]                    [0.00 0.00 -1.00]
  translation:
     ( 0.00000  0.00000  0.66667)  ( 0.00000  0.00000  0.66667)
  ---------------    6 ---------------
 det =  1.0
  rotation:                    cart:
     [-1  0  0]                    [-0.50 -0.87 0.00]
     [-1  1  0]                    [-0.87 0.50 0.00]
     [ 0  0 -1]                    [0.00 0.00 -1.00]
  translation:
     ( 0.00000  0.00000  0.33333)  ( 0.00000  0.00000  0.33333)
##########################
Symmetrizing Start
rot =  1
rot =  2
rot =  3
rot =  4
rot =  5
rot =  6
number of symmetry oprations ==  12
nRvec_add = 288
rot =  1
rot =  2
rot =  3
rot =  4
rot =  5
rot =  6
number of symmetry oprations ==  12
Symmetrizing Finished

Output card Wannier atoms info is showing informations about orbitals.

Line (1, 'Te', array([0.274, 0.274, 0.   ]), ['s', 'p'], [[0, 12], [3, 4, 5, 15, 16, 17]]) read as: First atoms is Te at position 0.274, 0.274, 0. It contribute orbital \(s\) and \(p\). Index of s-orbitals are 0 and 12. Index of d-orbitals are 3, 4, 5, 15, 16, 17.

Informations of space group are showed as well.

We can check if real space Hamiltonian are symmetrized.

[6]:
#We check symmetry with operator 1 from Space group informations in the output.
#prepare operator
rot = np.array([[0., -1., 0.],[1, -1, 0.],[0., 0., 1.]]) # rotation matrix (direct)
trans = np.array([0., 0., 1./3.])  #translation (direct)
[7]:
#After operation, position of Te_1 match Te_2.
Te_1_position = np.array([0.274, 0.274, 0.])
position_rot = rot @ Te_1_position + trans
print('Before operation', Te_1_position)
print('After operation', position_rot, 'match Te_2_position')
Before operation [0.274 0.274 0.   ]
After operation [-0.274       0.          0.33333333] match Te_2_position

So the on-site energy of Te_1 s-orbitals should match on-site energy of Te_1 s-orbitals as well.

[8]:
#Check unsymmetrized system

#find index of R=[0,0,0] in R-vector list
#dimension of Hamiltonian is [num_wann, num_wann, num_Rvec]
R0 = system_Te.iRvec.tolist().index([0,0,0])
onsite_Te_1 = np.diagonal(system_Te.Ham_R[:,:,R0]).real[np.array([0, 12])]
onsite_Te_2 = np.diagonal(system_Te.Ham_R[:,:,R0]).real[np.array([1, 13])]

print('unsymmetrized')
print('on-site energy of Te_1 orbitals')
print(onsite_Te_1)
print('on-site energy of Te_2 orbitals')
print(onsite_Te_2)
print('not totaly the same')
unsymmetrized
on-site energy of Te_1 orbitals
[-5.585966  -5.5859776]
on-site energy of Te_2 orbitals
[-5.588091  -5.5880802]
not totaly the same
[9]:
#Check symmetrized system

#find index of R=[0,0,0] in R-vector list
#dimension of Hamiltonian is [num_wann, num_wann, num_Rvec]
R0 = system_Te.iRvec.tolist().index([0,0,0])
onsite_Te_1_sym = np.diagonal(system_Te_sym.Ham_R[:,:,R0]).real[np.array([0, 12])]
onsite_Te_2_sym = np.diagonal(system_Te_sym.Ham_R[:,:,R0]).real[np.array([1, 13])]

print('symmetrized')
print('on-site energy of Te_1 orbitals')
print(onsite_Te_1_sym)
print('on-site energy of Te_2 orbitals')
print(onsite_Te_2_sym)
print('totaly the same')
symmetrized
on-site energy of Te_1 orbitals
[-5.58668017 -5.58668017]
on-site energy of Te_2 orbitals
[-5.58668017 -5.58668017]
totaly the same

Checking band structures in k-space.

The Brillouin zone of trigonal Te is: 91c1be15ec744583a4c9308d97247466 We only consider kz=\(\pi\) plane. 7457e55d8731492dace79d7c83bd73e1 The band structures of the three path:

L1 -> H -> A1

L2 -> H -> A2

L3 -> H -> A3

should be the same because of C3 rotation symmetry.

But the Wannier Hamitonian break the symmetries slightly. So the band structure of the three path may not the same.

After symmetrization they are the same.

[21]:
#generate k-path
path=wberri.Path(system_Te,
    #start and end points of k_path.
    #If two paths are not consencutive, put `None` between them.
    k_nodes=[[0,0.5,0.5],[1./3,1./3,0.5],[1.,0.,0.5],None,
            [0.5,0.,0.5],[1./3,1./3,0.5],[0.,1.,0.5],None,
            [0.5,0.5,0.5],[1./3,1./3,0.5],[0.,0.,0.5]],
    labels=["L1","H","A1","L3","H","A3","L2","H","A2"],
    #length: proportional to number of kpoints.
    length=1000)

#calculate band structure with unsymmetrized and symmetrized system.
quantities = {"Energy":wberri.calculators.tabulate.Energy()}

calculators={}
calculators ["tabulate"] = wberri.calculators.TabulatorAll(quantities,ibands=[18,19],mode="path")

path_result_Te = wberri.run(
        system=system_Te,
        grid=path,
        calculators=calculators,
        print_Kpoints=False)

path_result_Te_sym = wberri.run(
        system=system_Te_sym,
        grid=path,
        calculators=calculators,
        print_Kpoints=False)
calculator not described

Calculation along a path - checking calculators for compatibility
tabulate <wannierberri.calculators.TabulatorAll object at 0x7f56ca5fc310>
All calculators are compatible
Symmetrization switched off for Path
Grid is regular
The set of k points is a Path() with 676 points and labels {0: 'L1', 75: 'H', 225: 'L3', 300: 'H', 450: 'L2', 525: 'H', 675: 'A2'}
WARNING : symmetry is not used for a tabulation along path
generating K_list
Done
Done, sum of weights:676.0
symgroup : None
processing 676 K points : in serial.
# K-points calculated  Wall time (sec)  Est. remaining (sec)
time for processing    676 K-points in serial:     1.1150 ; per K-point          0.0016 ; proc-sec per K-point          0.0016
time1 =  0.0456690788269043
Totally processed 676 K-points
Calculation along a path - checking calculators for compatibility
tabulate <wannierberri.calculators.TabulatorAll object at 0x7f56ca5fc310>
All calculators are compatible
Symmetrization switched off for Path
Grid is regular
The set of k points is a Path() with 676 points and labels {0: 'L1', 75: 'H', 225: 'L3', 300: 'H', 450: 'L2', 525: 'H', 675: 'A2'}
WARNING : symmetry is not used for a tabulation along path
generating K_list
Done
Done, sum of weights:676.0
symgroup : None
processing 676 K points : in serial.
# K-points calculated  Wall time (sec)  Est. remaining (sec)
time for processing    676 K-points in serial:     2.4738 ; per K-point          0.0037 ; proc-sec per K-point          0.0037
time1 =  0.03712153434753418
Totally processed 676 K-points
[11]:
#read energy eigenvalue data of band 18 and 19 from results.
band_Te = path_result_Te.results['tabulate'].get_data(quantity='Energy',iband=(0,1))
band_Te_sym = path_result_Te_sym.results['tabulate'].get_data(quantity='Energy',iband=(0,1))
#read k-path data
band_k=path.getKline()
[12]:
#plot band structure with unsymmetrized system
NK=len(band_k)
colour = ['r','y','b']
NK_one = NK//3
plt.figure()
for i in range(3):
    plt.plot(band_k[0:NK_one],band_Te[NK_one*i:NK_one*(i+1)],colour[i],linewidth=5)
plt.ylabel('Energy (eV)')
plt.xlabel('L -> H -> A')
[12]:
Text(0.5, 0, 'L -> H -> A')
../../_images/tutorials_5_symmetrization_tutorial_symmetrization-solution_15_1.png
[13]:
#plot band structure with symmetrized system
plt.figure()
for i in range(3):
    plt.plot(band_k[0:NK_one],band_Te_sym[NK_one*i:NK_one*(i+1)],colour[i],linewidth=5)
plt.ylabel('Energy (eV)')
plt.xlabel('L -> H -> A')
[13]:
Text(0.5, 0, 'L -> H -> A')
../../_images/tutorials_5_symmetrization_tutorial_symmetrization-solution_16_1.png

Symmetrization fix the symmetries of Hamiltonian

The Berry curvature is more sensitive to symmetry than energy eigenvalues.

[14]:
# calculate Berry curvature alone a k-path.
path_berry=wberri.Path(system_Te,
                 k_nodes=[[0,0.5,0.5],[1./3,1./3,0.5],[1./3,1./3,0.]],
                 labels=["L","H","K",],
                 length=500)

quantities = {"Energy":wberri.calculators.tabulate.Energy(),
              "berry":wberri.calculators.tabulate.BerryCurvature(),}

calculators={}
calculators ["tabulate"] = wberri.calculators.TabulatorAll(quantities,ibands=[18,19],mode="path")

berry_result_Te = wberri.run(
        system=system_Te,
        grid=path_berry,
        calculators=calculators)

berry_result_Te_sym = wberri.run(
        system=system_Te_sym,
        grid=path_berry,
        calculators=calculators)
calculator not described

calculator not described

Calculation along a path - checking calculators for compatibility
tabulate <wannierberri.calculators.TabulatorAll object at 0x7f56ca9aa4c0>
All calculators are compatible
Symmetrization switched off for Path
Grid is regular
The set of k points is a Path() with 80 points and labels {0: 'L', 37: 'H', 79: 'K'}
WARNING : symmetry is not used for a tabulation along path
generating K_list
Done
Done, sum of weights:80.0
iteration 0 - 80 points. New points are:
 K-point 0 : coord in rec.lattice = [   0.000000  ,   0.500000 ,    0.500000 ]
 K-point 1 : coord in rec.lattice = [   0.009009  ,   0.495495 ,    0.500000 ]
 K-point 2 : coord in rec.lattice = [   0.018018  ,   0.490991 ,    0.500000 ]
 K-point 3 : coord in rec.lattice = [   0.027027  ,   0.486486 ,    0.500000 ]
 K-point 4 : coord in rec.lattice = [   0.036036  ,   0.481982 ,    0.500000 ]
 K-point 5 : coord in rec.lattice = [   0.045045  ,   0.477477 ,    0.500000 ]
 K-point 6 : coord in rec.lattice = [   0.054054  ,   0.472973 ,    0.500000 ]
 K-point 7 : coord in rec.lattice = [   0.063063  ,   0.468468 ,    0.500000 ]
 K-point 8 : coord in rec.lattice = [   0.072072  ,   0.463964 ,    0.500000 ]
 K-point 9 : coord in rec.lattice = [   0.081081  ,   0.459459 ,    0.500000 ]
 K-point 10 : coord in rec.lattice = [   0.090090  ,   0.454955 ,    0.500000 ]
 K-point 11 : coord in rec.lattice = [   0.099099  ,   0.450450 ,    0.500000 ]
 K-point 12 : coord in rec.lattice = [   0.108108  ,   0.445946 ,    0.500000 ]
 K-point 13 : coord in rec.lattice = [   0.117117  ,   0.441441 ,    0.500000 ]
 K-point 14 : coord in rec.lattice = [   0.126126  ,   0.436937 ,    0.500000 ]
 K-point 15 : coord in rec.lattice = [   0.135135  ,   0.432432 ,    0.500000 ]
 K-point 16 : coord in rec.lattice = [   0.144144  ,   0.427928 ,    0.500000 ]
 K-point 17 : coord in rec.lattice = [   0.153153  ,   0.423423 ,    0.500000 ]
 K-point 18 : coord in rec.lattice = [   0.162162  ,   0.418919 ,    0.500000 ]
 K-point 19 : coord in rec.lattice = [   0.171171  ,   0.414414 ,    0.500000 ]
 K-point 20 : coord in rec.lattice = [   0.180180  ,   0.409910 ,    0.500000 ]
 K-point 21 : coord in rec.lattice = [   0.189189  ,   0.405405 ,    0.500000 ]
 K-point 22 : coord in rec.lattice = [   0.198198  ,   0.400901 ,    0.500000 ]
 K-point 23 : coord in rec.lattice = [   0.207207  ,   0.396396 ,    0.500000 ]
 K-point 24 : coord in rec.lattice = [   0.216216  ,   0.391892 ,    0.500000 ]
 K-point 25 : coord in rec.lattice = [   0.225225  ,   0.387387 ,    0.500000 ]
 K-point 26 : coord in rec.lattice = [   0.234234  ,   0.382883 ,    0.500000 ]
 K-point 27 : coord in rec.lattice = [   0.243243  ,   0.378378 ,    0.500000 ]
 K-point 28 : coord in rec.lattice = [   0.252252  ,   0.373874 ,    0.500000 ]
 K-point 29 : coord in rec.lattice = [   0.261261  ,   0.369369 ,    0.500000 ]
 K-point 30 : coord in rec.lattice = [   0.270270  ,   0.364865 ,    0.500000 ]
 K-point 31 : coord in rec.lattice = [   0.279279  ,   0.360360 ,    0.500000 ]
 K-point 32 : coord in rec.lattice = [   0.288288  ,   0.355856 ,    0.500000 ]
 K-point 33 : coord in rec.lattice = [   0.297297  ,   0.351351 ,    0.500000 ]
 K-point 34 : coord in rec.lattice = [   0.306306  ,   0.346847 ,    0.500000 ]
 K-point 35 : coord in rec.lattice = [   0.315315  ,   0.342342 ,    0.500000 ]
 K-point 36 : coord in rec.lattice = [   0.324324  ,   0.337838 ,    0.500000 ]
 K-point 37 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.500000 ]
 K-point 38 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.488095 ]
 K-point 39 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.476190 ]
 K-point 40 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.464286 ]
 K-point 41 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.452381 ]
 K-point 42 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.440476 ]
 K-point 43 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.428571 ]
 K-point 44 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.416667 ]
 K-point 45 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.404762 ]
 K-point 46 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.392857 ]
 K-point 47 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.380952 ]
 K-point 48 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.369048 ]
 K-point 49 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.357143 ]
 K-point 50 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.345238 ]
 K-point 51 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.333333 ]
 K-point 52 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.321429 ]
 K-point 53 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.309524 ]
 K-point 54 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.297619 ]
 K-point 55 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.285714 ]
 K-point 56 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.273810 ]
 K-point 57 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.261905 ]
 K-point 58 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.250000 ]
 K-point 59 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.238095 ]
 K-point 60 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.226190 ]
 K-point 61 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.214286 ]
 K-point 62 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.202381 ]
 K-point 63 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.190476 ]
 K-point 64 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.178571 ]
 K-point 65 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.166667 ]
 K-point 66 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.154762 ]
 K-point 67 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.142857 ]
 K-point 68 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.130952 ]
 K-point 69 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.119048 ]
 K-point 70 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.107143 ]
 K-point 71 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.095238 ]
 K-point 72 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.083333 ]
 K-point 73 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.071429 ]
 K-point 74 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.059524 ]
 K-point 75 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.047619 ]
 K-point 76 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.035714 ]
 K-point 77 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.023810 ]
 K-point 78 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.011905 ]
 K-point 79 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.000000 ]
symgroup : None
processing 80 K points : in serial.
# K-points calculated  Wall time (sec)  Est. remaining (sec)
time for processing     80 K-points in serial:     1.7330 ; per K-point          0.0217 ; proc-sec per K-point          0.0217
time1 =  0.004291534423828125
Totally processed 80 K-points
Calculation along a path - checking calculators for compatibility
tabulate <wannierberri.calculators.TabulatorAll object at 0x7f56ca9aa4c0>
All calculators are compatible
Symmetrization switched off for Path
Grid is regular
The set of k points is a Path() with 80 points and labels {0: 'L', 37: 'H', 79: 'K'}
WARNING : symmetry is not used for a tabulation along path
generating K_list
Done
Done, sum of weights:80.0
iteration 0 - 80 points. New points are:
 K-point 0 : coord in rec.lattice = [   0.000000  ,   0.500000 ,    0.500000 ]
 K-point 1 : coord in rec.lattice = [   0.009009  ,   0.495495 ,    0.500000 ]
 K-point 2 : coord in rec.lattice = [   0.018018  ,   0.490991 ,    0.500000 ]
 K-point 3 : coord in rec.lattice = [   0.027027  ,   0.486486 ,    0.500000 ]
 K-point 4 : coord in rec.lattice = [   0.036036  ,   0.481982 ,    0.500000 ]
 K-point 5 : coord in rec.lattice = [   0.045045  ,   0.477477 ,    0.500000 ]
 K-point 6 : coord in rec.lattice = [   0.054054  ,   0.472973 ,    0.500000 ]
 K-point 7 : coord in rec.lattice = [   0.063063  ,   0.468468 ,    0.500000 ]
 K-point 8 : coord in rec.lattice = [   0.072072  ,   0.463964 ,    0.500000 ]
 K-point 9 : coord in rec.lattice = [   0.081081  ,   0.459459 ,    0.500000 ]
 K-point 10 : coord in rec.lattice = [   0.090090  ,   0.454955 ,    0.500000 ]
 K-point 11 : coord in rec.lattice = [   0.099099  ,   0.450450 ,    0.500000 ]
 K-point 12 : coord in rec.lattice = [   0.108108  ,   0.445946 ,    0.500000 ]
 K-point 13 : coord in rec.lattice = [   0.117117  ,   0.441441 ,    0.500000 ]
 K-point 14 : coord in rec.lattice = [   0.126126  ,   0.436937 ,    0.500000 ]
 K-point 15 : coord in rec.lattice = [   0.135135  ,   0.432432 ,    0.500000 ]
 K-point 16 : coord in rec.lattice = [   0.144144  ,   0.427928 ,    0.500000 ]
 K-point 17 : coord in rec.lattice = [   0.153153  ,   0.423423 ,    0.500000 ]
 K-point 18 : coord in rec.lattice = [   0.162162  ,   0.418919 ,    0.500000 ]
 K-point 19 : coord in rec.lattice = [   0.171171  ,   0.414414 ,    0.500000 ]
 K-point 20 : coord in rec.lattice = [   0.180180  ,   0.409910 ,    0.500000 ]
 K-point 21 : coord in rec.lattice = [   0.189189  ,   0.405405 ,    0.500000 ]
 K-point 22 : coord in rec.lattice = [   0.198198  ,   0.400901 ,    0.500000 ]
 K-point 23 : coord in rec.lattice = [   0.207207  ,   0.396396 ,    0.500000 ]
 K-point 24 : coord in rec.lattice = [   0.216216  ,   0.391892 ,    0.500000 ]
 K-point 25 : coord in rec.lattice = [   0.225225  ,   0.387387 ,    0.500000 ]
 K-point 26 : coord in rec.lattice = [   0.234234  ,   0.382883 ,    0.500000 ]
 K-point 27 : coord in rec.lattice = [   0.243243  ,   0.378378 ,    0.500000 ]
 K-point 28 : coord in rec.lattice = [   0.252252  ,   0.373874 ,    0.500000 ]
 K-point 29 : coord in rec.lattice = [   0.261261  ,   0.369369 ,    0.500000 ]
 K-point 30 : coord in rec.lattice = [   0.270270  ,   0.364865 ,    0.500000 ]
 K-point 31 : coord in rec.lattice = [   0.279279  ,   0.360360 ,    0.500000 ]
 K-point 32 : coord in rec.lattice = [   0.288288  ,   0.355856 ,    0.500000 ]
 K-point 33 : coord in rec.lattice = [   0.297297  ,   0.351351 ,    0.500000 ]
 K-point 34 : coord in rec.lattice = [   0.306306  ,   0.346847 ,    0.500000 ]
 K-point 35 : coord in rec.lattice = [   0.315315  ,   0.342342 ,    0.500000 ]
 K-point 36 : coord in rec.lattice = [   0.324324  ,   0.337838 ,    0.500000 ]
 K-point 37 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.500000 ]
 K-point 38 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.488095 ]
 K-point 39 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.476190 ]
 K-point 40 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.464286 ]
 K-point 41 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.452381 ]
 K-point 42 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.440476 ]
 K-point 43 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.428571 ]
 K-point 44 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.416667 ]
 K-point 45 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.404762 ]
 K-point 46 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.392857 ]
 K-point 47 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.380952 ]
 K-point 48 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.369048 ]
 K-point 49 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.357143 ]
 K-point 50 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.345238 ]
 K-point 51 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.333333 ]
 K-point 52 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.321429 ]
 K-point 53 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.309524 ]
 K-point 54 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.297619 ]
 K-point 55 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.285714 ]
 K-point 56 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.273810 ]
 K-point 57 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.261905 ]
 K-point 58 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.250000 ]
 K-point 59 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.238095 ]
 K-point 60 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.226190 ]
 K-point 61 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.214286 ]
 K-point 62 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.202381 ]
 K-point 63 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.190476 ]
 K-point 64 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.178571 ]
 K-point 65 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.166667 ]
 K-point 66 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.154762 ]
 K-point 67 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.142857 ]
 K-point 68 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.130952 ]
 K-point 69 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.119048 ]
 K-point 70 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.107143 ]
 K-point 71 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.095238 ]
 K-point 72 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.083333 ]
 K-point 73 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.071429 ]
 K-point 74 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.059524 ]
 K-point 75 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.047619 ]
 K-point 76 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.035714 ]
 K-point 77 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.023810 ]
 K-point 78 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.011905 ]
 K-point 79 : coord in rec.lattice = [   0.333333  ,   0.333333 ,    0.000000 ]
symgroup : None
processing 80 K points : in serial.
# K-points calculated  Wall time (sec)  Est. remaining (sec)
time for processing     80 K-points in serial:     4.7883 ; per K-point          0.0599 ; proc-sec per K-point          0.0599
time1 =  0.003511667251586914
Totally processed 80 K-points
[15]:
# use built-in plotting method to plot berry cuvature.
# red means positive, blue means negative.
# size of the dots shows the amplitude of the quantity.
# unsymmetrized:
berry_result_Te.results['tabulate'].plot_path_fat(path_berry,
              quantity='berry',
              component='z', # only take z compoment
              Emin=6.0,  Emax=6.8,
              mode="fatband",
              fatfactor=20,  # size of dots.
              )
../../_images/tutorials_5_symmetrization_tutorial_symmetrization-solution_19_0.png
[16]:
# symmetrized:
berry_result_Te_sym.results['tabulate'].plot_path_fat(path_berry,
              quantity='berry',
              component='z', # only take z compoment
              Emin=6.0,  Emax=6.8,
              mode="fatband",
              fatfactor=20,  # size of dots.
              )
../../_images/tutorials_5_symmetrization_tutorial_symmetrization-solution_20_0.png

z-component of Berry curvature alone L-H path should be zero because of symmetry. The loss of symmetry has a big impact to Berry curvature of single k-point. It is fixed by symmetrization.

Magnetic system with SOC (bcc Fe)

bcc Fe is a magnetic system with magnetic moment -2.31 \mu_B point to -z direction of cartesian coordinate system of lattice. We need to set parameter ‘magmom’.

[17]:
system_Fe=wberri.System_tb(tb_file='./Fe_data/Fe_tb.dat',berry=True, use_ws=False)
system_Fe_sym=wberri.System_tb(tb_file='./Fe_data/Fe_tb.dat',berry=True, use_ws=False)
system_Fe_sym.symmetrize(
             proj = ['Fe:sp3d2;t2g'],
             atom_name = ['Fe'],
             positions = [[0,0,0]],
             #magmom: magnetic moment of each atoms.
             magmom = [[0.,0.,-2.31]],
             soc=True,
             DFT_code = 'qe'
             )

reading TB file ./Fe_data/Fe_tb.dat ( written on 13May2022 at 01:23:14 )
NOT using ws_dist
Number of wannier functions: 18
Number of R points: 27
Recommended size of FFT grid [5 5 5]
Reading the system from ./Fe_data/Fe_tb.dat finished successfully
reading TB file ./Fe_data/Fe_tb.dat ( written on 13May2022 at 01:23:14 )
NOT using ws_dist
Number of wannier functions: 18
Number of R points: 27
Recommended size of FFT grid [5 5 5]
Reading the system from ./Fe_data/Fe_tb.dat finished successfully
Wannier atoms info
(1, 'Fe', [0, 0, 0], ['sp3d2', 't2g'], [[0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 14], [6, 7, 8, 15, 16, 17]], [0.0, 0.0, -2.31])
[get_spacegroup]
  Spacegroup is Im-3m (229).
  ---------------    1 ---------------
 det =  1.0
  rotation:                    cart:
     [ 1  0  0]                    [1.00 0.00 -0.00]
     [ 0  1  0]                    [0.00 1.00 -0.00]
     [ 0  0  1]                    [0.00 -0.00 1.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------    2 ---------------
 det =  -1.0
  rotation:                    cart:
     [-1  0  0]                    [-1.00 -0.00 0.00]
     [ 0 -1  0]                    [0.00 -1.00 0.00]
     [ 0  0 -1]                    [0.00 0.00 -1.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------    3 ---------------
 det =  1.0
  rotation:                    cart:
     [ 0  0  1]                    [0.00 -1.00 0.00]
     [ 1  0 -1]                    [1.00 0.00 -0.00]
     [ 0  1  1]                    [0.00 -0.00 1.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------    4 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 0  0 -1]                    [0.00 1.00 -0.00]
     [-1  0  1]                    [-1.00 -0.00 0.00]
     [ 0 -1 -1]                    [0.00 0.00 -1.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------    5 ---------------
 det =  1.0
  rotation:                    cart:
     [ 0  1  1]                    [-1.00 -0.00 0.00]
     [ 0 -1  0]                    [0.00 -1.00 0.00]
     [ 1  1  0]                    [0.00 -0.00 1.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------    6 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 0 -1 -1]                    [1.00 0.00 -0.00]
     [ 0  1  0]                    [0.00 1.00 -0.00]
     [-1 -1  0]                    [0.00 0.00 -1.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------    7 ---------------
 det =  1.0
  rotation:                    cart:
     [ 1  1  0]                    [0.00 1.00 -0.00]
     [-1  0  1]                    [-1.00 -0.00 0.00]
     [ 1  0  0]                    [0.00 -0.00 1.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------    8 ---------------
 det =  -1.0
  rotation:                    cart:
     [-1 -1  0]                    [0.00 -1.00 0.00]
     [ 1  0 -1]                    [1.00 0.00 -0.00]
     [-1  0  0]                    [0.00 0.00 -1.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------    9 ---------------
 det =  1.0
  rotation:                    cart:
     [ 0 -1 -1]                    [1.00 0.00 -0.00]
     [-1  0  1]                    [0.00 -1.00 0.00]
     [ 0  0 -1]                    [0.00 0.00 -1.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   10 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 0  1  1]                    [-1.00 -0.00 0.00]
     [ 1  0 -1]                    [0.00 1.00 -0.00]
     [ 0  0  1]                    [0.00 -0.00 1.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   11 ---------------
 det =  1.0
  rotation:                    cart:
     [-1 -1  0]                    [0.00 -1.00 0.00]
     [ 0  1  0]                    [-1.00 -0.00 0.00]
     [ 0 -1 -1]                    [0.00 0.00 -1.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   12 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 1  1  0]                    [0.00 1.00 -0.00]
     [ 0 -1  0]                    [1.00 0.00 -0.00]
     [ 0  1  1]                    [0.00 -0.00 1.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   13 ---------------
 det =  1.0
  rotation:                    cart:
     [-1  0  0]                    [-1.00 -0.00 0.00]
     [ 1  0 -1]                    [0.00 1.00 -0.00]
     [-1 -1  0]                    [0.00 0.00 -1.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   14 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 1  0  0]                    [1.00 0.00 -0.00]
     [-1  0  1]                    [0.00 -1.00 0.00]
     [ 1  1  0]                    [0.00 -0.00 1.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   15 ---------------
 det =  1.0
  rotation:                    cart:
     [ 0  0 -1]                    [0.00 1.00 -0.00]
     [ 0 -1  0]                    [1.00 0.00 -0.00]
     [-1  0  0]                    [0.00 0.00 -1.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   16 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 0  0  1]                    [0.00 -1.00 0.00]
     [ 0  1  0]                    [-1.00 -0.00 0.00]
     [ 1  0  0]                    [0.00 -0.00 1.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   17 ---------------
 det =  1.0
  rotation:                    cart:
     [ 1  1  0]                    [0.00 -0.00 1.00]
     [ 0 -1 -1]                    [1.00 0.00 -0.00]
     [ 0  1  0]                    [0.00 1.00 -0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   18 ---------------
 det =  -1.0
  rotation:                    cart:
     [-1 -1  0]                    [0.00 0.00 -1.00]
     [ 0  1  1]                    [-1.00 -0.00 0.00]
     [ 0 -1  0]                    [0.00 -1.00 0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   19 ---------------
 det =  1.0
  rotation:                    cart:
     [ 1  0  0]                    [0.00 -0.00 1.00]
     [-1 -1  0]                    [0.00 -1.00 0.00]
     [ 1  0 -1]                    [1.00 0.00 -0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   20 ---------------
 det =  -1.0
  rotation:                    cart:
     [-1  0  0]                    [0.00 0.00 -1.00]
     [ 1  1  0]                    [0.00 1.00 -0.00]
     [-1  0  1]                    [-1.00 -0.00 0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   21 ---------------
 det =  1.0
  rotation:                    cart:
     [ 0  0  1]                    [0.00 -0.00 1.00]
     [-1  0  0]                    [-1.00 -0.00 0.00]
     [ 0 -1  0]                    [0.00 -1.00 0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   22 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 0  0 -1]                    [0.00 0.00 -1.00]
     [ 1  0  0]                    [1.00 0.00 -0.00]
     [ 0  1  0]                    [0.00 1.00 -0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   23 ---------------
 det =  1.0
  rotation:                    cart:
     [ 0  1  1]                    [0.00 -0.00 1.00]
     [ 0  0 -1]                    [0.00 1.00 -0.00]
     [-1  0  1]                    [-1.00 -0.00 0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   24 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 0 -1 -1]                    [0.00 0.00 -1.00]
     [ 0  0  1]                    [0.00 -1.00 0.00]
     [ 1  0 -1]                    [1.00 0.00 -0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   25 ---------------
 det =  1.0
  rotation:                    cart:
     [-1 -1  0]                    [0.00 0.00 -1.00]
     [ 1  0  0]                    [1.00 0.00 -0.00]
     [-1  0  1]                    [0.00 -1.00 0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   26 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 1  1  0]                    [0.00 -0.00 1.00]
     [-1  0  0]                    [-1.00 -0.00 0.00]
     [ 1  0 -1]                    [0.00 1.00 -0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   27 ---------------
 det =  1.0
  rotation:                    cart:
     [-1  0  0]                    [0.00 0.00 -1.00]
     [ 0  0  1]                    [0.00 -1.00 0.00]
     [ 0  1  0]                    [-1.00 -0.00 0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   28 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 1  0  0]                    [0.00 -0.00 1.00]
     [ 0  0 -1]                    [0.00 1.00 -0.00]
     [ 0 -1  0]                    [1.00 0.00 -0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   29 ---------------
 det =  1.0
  rotation:                    cart:
     [ 0  0 -1]                    [0.00 0.00 -1.00]
     [ 0  1  1]                    [-1.00 -0.00 0.00]
     [ 1  0 -1]                    [0.00 1.00 -0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   30 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 0  0  1]                    [0.00 -0.00 1.00]
     [ 0 -1 -1]                    [1.00 0.00 -0.00]
     [-1  0  1]                    [0.00 -1.00 0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   31 ---------------
 det =  1.0
  rotation:                    cart:
     [ 0 -1 -1]                    [0.00 0.00 -1.00]
     [ 1  1  0]                    [0.00 1.00 -0.00]
     [ 0 -1  0]                    [1.00 0.00 -0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   32 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 0  1  1]                    [0.00 -0.00 1.00]
     [-1 -1  0]                    [0.00 -1.00 0.00]
     [ 0  1  0]                    [-1.00 -0.00 0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   33 ---------------
 det =  1.0
  rotation:                    cart:
     [ 1  0 -1]                    [0.00 1.00 -0.00]
     [ 0  0  1]                    [0.00 -0.00 1.00]
     [ 0 -1 -1]                    [1.00 0.00 -0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   34 ---------------
 det =  -1.0
  rotation:                    cart:
     [-1  0  1]                    [0.00 -1.00 0.00]
     [ 0  0 -1]                    [0.00 0.00 -1.00]
     [ 0  1  1]                    [-1.00 -0.00 0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   35 ---------------
 det =  1.0
  rotation:                    cart:
     [ 0 -1  0]                    [1.00 0.00 -0.00]
     [ 0  1  1]                    [0.00 -0.00 1.00]
     [-1 -1  0]                    [0.00 -1.00 0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   36 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 0  1  0]                    [-1.00 -0.00 0.00]
     [ 0 -1 -1]                    [0.00 0.00 -1.00]
     [ 1  1  0]                    [0.00 1.00 -0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   37 ---------------
 det =  1.0
  rotation:                    cart:
     [-1  0  1]                    [0.00 -1.00 0.00]
     [ 1  1  0]                    [0.00 -0.00 1.00]
     [-1  0  0]                    [-1.00 -0.00 0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   38 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 1  0 -1]                    [0.00 1.00 -0.00]
     [-1 -1  0]                    [0.00 0.00 -1.00]
     [ 1  0  0]                    [1.00 0.00 -0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   39 ---------------
 det =  1.0
  rotation:                    cart:
     [ 0  1  0]                    [-1.00 -0.00 0.00]
     [ 1  0  0]                    [0.00 -0.00 1.00]
     [ 0  0 -1]                    [0.00 1.00 -0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   40 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 0 -1  0]                    [1.00 0.00 -0.00]
     [-1  0  0]                    [0.00 0.00 -1.00]
     [ 0  0  1]                    [0.00 -1.00 0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   41 ---------------
 det =  1.0
  rotation:                    cart:
     [ 0 -1  0]                    [0.00 -1.00 0.00]
     [ 0  0 -1]                    [0.00 0.00 -1.00]
     [ 1  0  0]                    [1.00 0.00 -0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   42 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 0  1  0]                    [0.00 1.00 -0.00]
     [ 0  0  1]                    [0.00 -0.00 1.00]
     [-1  0  0]                    [-1.00 -0.00 0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   43 ---------------
 det =  1.0
  rotation:                    cart:
     [-1  0  1]                    [-1.00 -0.00 0.00]
     [ 0 -1 -1]                    [0.00 0.00 -1.00]
     [ 0  0  1]                    [0.00 -1.00 0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   44 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 1  0 -1]                    [1.00 0.00 -0.00]
     [ 0  1  1]                    [0.00 -0.00 1.00]
     [ 0  0 -1]                    [0.00 1.00 -0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   45 ---------------
 det =  1.0
  rotation:                    cart:
     [ 0  1  0]                    [0.00 1.00 -0.00]
     [-1 -1  0]                    [0.00 0.00 -1.00]
     [ 0  1  1]                    [-1.00 -0.00 0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   46 ---------------
 det =  -1.0
  rotation:                    cart:
     [ 0 -1  0]                    [0.00 -1.00 0.00]
     [ 1  1  0]                    [0.00 -0.00 1.00]
     [ 0 -1 -1]                    [1.00 0.00 -0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   47 ---------------
 det =  1.0
  rotation:                    cart:
     [ 1  0 -1]                    [1.00 0.00 -0.00]
     [-1  0  0]                    [0.00 0.00 -1.00]
     [ 1  1  0]                    [0.00 1.00 -0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
  ---------------   48 ---------------
 det =  -1.0
  rotation:                    cart:
     [-1  0  1]                    [-1.00 -0.00 0.00]
     [ 1  0  0]                    [0.00 -0.00 1.00]
     [-1 -1  0]                    [0.00 -1.00 0.00]
  translation:
     ( 0.00000  0.00000  0.00000)  ( 0.00000  0.00000  0.00000)
====================
System have inversion symmetry
====================
##########################
Symmetrizing Start
Symmetry operator 1 respect magnetic moment
rot =  1
Symmetry operator 2 respect magnetic moment
rot =  2
Symmetry operator 3 respect magnetic moment
rot =  3
Symmetry operator 4 respect magnetic moment
rot =  4
Symmetry operator 5 respect magnetic moment
rot =  5
Symmetry operator 6 respect magnetic moment
rot =  6
Symmetry operator 7 respect magnetic moment
rot =  7
Symmetry operator 8 respect magnetic moment
rot =  8
Symmetry operator 9*T respect magnetic moment
rot =  9
Symmetry operator 10*T respect magnetic moment
rot =  10
Symmetry operator 11*T respect magnetic moment
rot =  11
Symmetry operator 12*T respect magnetic moment
rot =  12
Symmetry operator 13*T respect magnetic moment
rot =  13
Symmetry operator 14*T respect magnetic moment
rot =  14
Symmetry operator 15*T respect magnetic moment
rot =  15
Symmetry operator 16*T respect magnetic moment
rot =  16
number of symmetry oprations ==  16
nRvec_add = 0
Symmetrizing Finished

Important explanations: 1. The projection card in wannier90.win of bcc Fe is 'Fe':sp3d2;dxz,dyz,dxy. But in the symmetrization, orbitals must project to complete sets of coordinates after symmetry opration. So we must label orbitals which shares the same complete sets of coordinates. eg: sp3d2, dxz,dyz,dxy -> sp3d2, t2g and sp,px,py -> sp,p2 2. We print out all the symmetry operators in the space group. But magnetic moments break some of them. Afte line Symmetrizing start. You can find details about which operator belong to the magnetic group.

bcc Fe have inversion symmetry, so the Berry curvature dipole should be zero. Ref: https://journals.aps.org/prl/pdf/10.1103/PhysRevLett.115.216806

[22]:
#calculate berry curvature dipole
Efermi_Fe = np.linspace(15.5,16,301)
NK = 10

result_Fe = wberri.run(system_Fe,
            grid=wberri.Grid(system_Fe,NK=NK,NKFFT=1),
            calculators = {"BerryDipole":wberri.calculators.static.BerryDipole_FermiSea(Efermi=Efermi_Fe,tetra=True)},
            adpt_num_iter=0,
            fout_name='Fe',
            restart=False,
            print_Kpoints=False
            )

result_Fe_sym = wberri.run(system_Fe_sym,
            grid=wberri.Grid(system_Fe_sym,NK=NK,NKFFT=1),
            calculators = {"BerryDipole":wberri.calculators.static.BerryDipole_FermiSea(Efermi=Efermi_Fe,tetra=True)},
            adpt_num_iter=0,
            fout_name='Fe_sym',
            restart=False,
            print_Kpoints=False
            )
determining grids from NK=10 (<class 'int'>), NKdiv=None (<class 'NoneType'>), NKFFT=1 (<class 'NoneType'>)
The grids were set to NKdiv=[10 10 10], NKFFT=[1 1 1], NKtot=[10 10 10]
Berry curvature dipole (dimensionless)

        | With Fermi sea integral. Eq(29) in `Ref <https://www.nature.com/articles/s41524-021-00498-5>`_
        | Output: :math:`D_{\beta\delta} = \int [dk] \partial_\beta \Omega_\delta f`

Grid is regular
The set of k points is a Grid() with NKdiv=[10 10 10], NKFFT=[1 1 1], NKtot=[10 10 10]
generating K_list
Done in 0.013763904571533203 s
excluding symmetry-equivalent K-points from initial grid
Done in 0.04297304153442383 s
Done in 0.043154001235961914 s
K_list contains 1000 Irreducible points(100.0%) out of initial 10x10x10=1000 grid
Done, sum of weights:1.0000000000000007
symgroup : <wannierberri.symmetry.Group object at 0x7f56cb96a0a0>
processing 1000 K points : in serial.
# K-points calculated  Wall time (sec)  Est. remaining (sec)
time for processing   1000 K-points in serial:     9.0876 ; per K-point          0.0091 ; proc-sec per K-point          0.0091
time1 =  0.03978538513183594
Totally processed 1000 K-points
determining grids from NK=10 (<class 'int'>), NKdiv=None (<class 'NoneType'>), NKFFT=1 (<class 'NoneType'>)
The grids were set to NKdiv=[10 10 10], NKFFT=[1 1 1], NKtot=[10 10 10]
Berry curvature dipole (dimensionless)

        | With Fermi sea integral. Eq(29) in `Ref <https://www.nature.com/articles/s41524-021-00498-5>`_
        | Output: :math:`D_{\beta\delta} = \int [dk] \partial_\beta \Omega_\delta f`

Grid is regular
The set of k points is a Grid() with NKdiv=[10 10 10], NKFFT=[1 1 1], NKtot=[10 10 10]
generating K_list
Done in 0.09415769577026367 s
excluding symmetry-equivalent K-points from initial grid
Done in 0.02924966812133789 s
Done in 0.029316425323486328 s
K_list contains 1000 Irreducible points(100.0%) out of initial 10x10x10=1000 grid
Done, sum of weights:1.0000000000000007
symgroup : <wannierberri.symmetry.Group object at 0x7f56caed8880>
processing 1000 K points : in serial.
# K-points calculated  Wall time (sec)  Est. remaining (sec)
time for processing   1000 K-points in serial:    10.8592 ; per K-point          0.0109 ; proc-sec per K-point          0.0109
time1 =  0.03904366493225098
Totally processed 1000 K-points
[19]:
#read data
Fe_BCD = result_Fe.results["BerryDipole"].data
Fe_sym_BCD = result_Fe_sym.results["BerryDipole"].data
[20]:
#unsymmetrized
#print zz component of berry dipole
fig=plt.figure()
plt.plot(Efermi_Fe,Fe_BCD[:,2,2],'r',label="Unsymmetrized")
plt.plot(Efermi_Fe,Fe_sym_BCD[:,2,2],'b:',label="Symmetrized")
plt.legend()
plt.xlabel('Energy (eV)')
plt.ylabel('Berry curvature dipole')
[20]:
Text(0, 0.5, 'Berry curvature dipole')
../../_images/tutorials_5_symmetrization_tutorial_symmetrization-solution_29_1.png

Symmetrized system gives us better results with low-density k-grid. But it still looks like not perfect zero. At some energy where have band intersections, we can see some little peaks come from digital error. There are very large Berry curvature and it’s divergent around band intersections. They may enlarge digital errors.