Tutorial Si with SOC (WIEN2k) - rubel75/mstar GitHub Wiki

We calculate the effective masses in Si with spin-orbit coupling (SOC) with GGA-PBE XC. Here is a master script to run the tutorial:

#!/bin/bash

# SCRATCH setting will ensure that vector files are in the case folder
export SCRATCH=./

# case name = directory name
case=${PWD##*/}

# change editor settings
EDITOR2=$EDITOR # save settings
export EDITOR=cat # prevent opening files for editing

# initialization
cp /path/to/mstar/test_files/W2k/Si.struct ${case}.struct
init_lapw -b -vxc 13 -rkmax 7 -numk 500

# run SCF without SOC
run_lapw -ec 0.00001 -cc 0.0001
save_lapw -d noSOC

# init SOC
echo -e "0 0 1\n\n\n\nN\n" | init_so_lapw

# run with SOC
run_lapw -ec 0.00001 -cc 0.0001 -so

# increase Emax
sed -i 's/4   -9\.0       5\.0/4   -9.0      10.0/g' ${case}.in1 # Emax=10 Ry for LAPW1
sed -i 's/^-10  1\.9/-10  7.0/g' ${case}.inso # Emax=7 Ry for LAPWSO

# WFs and eigenvalues with increased band range
x lapw1
x lapwso

# fake spin-polarized calculation for optic
rm ${case}.vspup
ln -s ${case}.vsp ${case}.vspup
rm ${case}.vspdn
ln -s ${case}.vsp ${case}.vspdn
ln -s ${case}.vectorso ${case}.vectorsoup

# optics
cp $WIENROOT/SRC_templates/case.inop ${case}.inop # get input file template
sed -i 's/^OFF/ON/g' ${case}.inop # enable writing of momentum matrix elements in *.mommat2*
sed -i 's/^-5\.0 3\.0/-5.0 7.0/g' ${case}.inop # extend Emax = 7 Ry
x optic -so -up

# run mstar
/path/to/mstar/mstar ${case}.mommat2up 1e-5

# reset the editor settings back
export EDITOR=$EDITOR2 

Results for m* are quite forgiving to RKmax parameter and k-mesh density since it is not a finite difference technique. There is no need to make a dense k mesh as one would normally do for optical calculations.

When mstar calculation is executed, you will see this output (20 k points, ~180 bands each):

 Detected input arguments = 2
 Input mommat file = mass.mommat2up
 Degeneracy tolerance dEtol = 1e-5 [Ha]
 Confirming text-to-number conversion dEtol =  1.00000E-05 [Ha]
 The input file mass.mommat2up was found.
  number of lines in mommat file = 327804
 Entering the main loop...
 KP: 1 bands: 180 progress:   4%
 KP: 2 bands: 176 progress:   9%
 KP: 3 bands: 180 progress:  14%
 KP: 4 bands: 176 progress:  19%
 KP: 5 bands: 176 progress:  24%
 KP: 6 bands: 176 progress:  28%
 KP: 7 bands: 178 progress:  33%
 KP: 8 bands: 180 progress:  38%
 KP: 9 bands: 180 progress:  43%
 KP: 10 bands: 182 progress:  48%
 KP: 11 bands: 176 progress:  53%
 KP: 12 bands: 180 progress:  58%
 KP: 13 bands: 186 progress:  63%
 KP: 14 bands: 180 progress:  68%
 KP: 15 bands: 184 progress:  74%
 KP: 16 bands: 188 progress:  79%
 KP: 17 bands: 180 progress:  84%
 KP: 18 bands: 180 progress:  89%
 KP: 19 bands: 186 progress:  94%
 KP: 20 bands: 186 progress: 100%
 Summary of the output:
 (1) Components of the (m0/m*_ij) tensor are stored in file minv_ij-up.dat
 (2) The conductivity inverse eff. masses m0/m_c = 1/3*Tr(m0/m*_ij)
     are stored in file minv_c-up.dat
 (3) Principal components of the (m0/m*_ij) tensor
     are stored in file minv_pr-up.dat
 (4) Density of states inverse effective mass
     m0/m*_d = m0/(m_1*m_2*m_3)**(1/3) are stored in file minv_d-up.dat

Let's inspect the output file minv_ij-up.dat and locate the 1st k point (Gamma point). Bands 3-8 correspond to split off (SO), light hole (LH), and heavy hole (HH):

...
# band 1=xx;     2=yy;      3=zz;     4=yz;       5=xz;      6=xy
# KP: 1 NBCDER: 180 NEMAX: 180
...
  3 -4.335E+00 -4.335E+00 -4.335E+00 -6.862E-09 -2.179E-07 -4.309E-07
  4 -4.335E+00 -4.335E+00 -4.335E+00  5.618E-07  4.223E-07  4.312E-07
  5 -5.159E+00 -5.159E+00 -5.159E+00 -2.639E+00 -2.639E+00 -2.639E+00
  6 -5.159E+00 -5.159E+00 -5.159E+00 -2.639E+00 -2.639E+00 -2.639E+00
  7 -3.738E+00 -3.738E+00 -3.738E+00  2.639E+00  2.639E+00  2.639E+00
  8 -3.738E+00 -3.738E+00 -3.738E+00  2.639E+00  2.639E+00  2.639E+00
...

Each eigenstate is double degenerate (due to SOC and Gamma symmetry). The effective masses in [100] direction are

m_SO(xx)/m0 = 1/(-4.335) = -0.23
m_LH(xx)/m0 = 1/(-5.159) = -0.19
m_HH(xx)/m0 = 1/(-3.738) = -0.27

and well agree with results obtained from the band curvature -0.23, -0.19, and -0.26.

Bottom of the conduction band (bands 9-10) is located at k point #15. Here is the relevant section of the output file minv_ij-up.dat:

# KP: 15 NBCDER: 184 NEMAX: 184
...
  9  1.071E+00  5.186E+00  5.186E+00 -3.791E-07 -3.873E-11 -2.610E-11
 10  1.071E+00  5.186E+00  5.186E+00 -4.346E-08  3.840E-11  9.193E-12
...

We can determine longitudinal and transverse masses in the conduction band:

m_CB(xx)/m0 = 1/1.071 = 0.93
m_CB(yy)/m0 = 1/5.186 = 0.19

The corresponding band curvature masses are 0.96 and 0.20. The error of 3% is acceptable.

If you want to get a feel for convergence with respect to Emax, you can edit ${case}.inop and set Emax to a smaller value (e.g., 1 Ry). Then re-run optic and mstar. You should see fewer bands in the output minv_ij-up.dat file. Also, the accuracy of m* will drop (see Fig. 1 in arXiv:2007.03816 [cond-mat.mtrl-sci]).