First calculate band structure using one of these techniques:
http://cms.mpi.univie.ac.at/wiki/index. ... dstructure
Plot it with p4v. When plot appears, pick the 4 relevant E-k points using shift key, in order: G->L, G, G->X, VB. Export them and copy them to variable "Ek" in Matlab, then run the Matlab script below.
% eigenval2mass
% Extract effective mass from EIGENVAL file.
% Run this file in same directory as EIGENVAL. When plot appears, pick
% the 4 relevant E-k points using shift key, in order: G->L, G, G->X, VB.
% Requires import_eigenval() from vasplab. See
% See
http://www.mathworks.com/matlabcentral/ ... eigenval.m
%
deltakL = 0.024541; % L to Gamma in 39 steps (1 to 40)
deltakX = 0.028337; % X to Gamma in 39 steps (41 to 80)
q = 1.602*10^-19; % Coulomb
hbar_eV = 6.58E-16; % eV*sec
hbar_J = 1.05E-34; % J*sec
m0_kg = 9.11E-31; % kg
%[eig,kp,nelec]=import_eigenval('/path/to/EIGENVAL');
[eig,kp,nelec]=import_eigenval;
%[m1,i1]=max(e1,[],2);
%plot(eig)
plot(eig(:,250:265))
display('Pick 4 points in order, with shift key: G->L, G, G->X, VBmax')
display('Export them to Ek, then press enter to continue.')
pause
Ek.Position
ev=Ek(1).Position; % L side of Gamma
ex=Ek(2).Position; % Gamma
eg=Ek(3).Position; % X side of Gamma
el=Ek(4).Position; % Valence band
mel=hbar_eV*hbar_J*deltakL^2/2/(el(2)-eg(2))*10^20/m0_kg;
mex=hbar_eV*hbar_J*deltakL^2/2/(ex(2)-eg(2))*10^20/m0_kg;
Eg=eg(2)-ev(2);
display(pwd)
display(sprintf('G->L \tGamma \tG->X \tVB'))
display(sprintf('%f\t%f\t%f\t%f',el(2),eg(2),ex(2),ev(2)))
display(sprintf('mG->L = %f\tmG->X = %f\tEg(eV) = %f',mel,mex,Eg))