ruoitrau86 / emc

Effective Mass Calculator for Semiconductors

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Effective Mass Calculator for Semiconductors

Effective mass calculator (EMC) implements calculation of the effective masses at the bands extrema using finite difference method (not the band fitting method). There are two versions of the program: written in FORTRAN and Python. Currently CRYSTAL and VASP are supported, Quantum Espresso is coming!

Build Status Coverage Status

Theory

Effective mass (m*) is defined as:

Eq. 1

where x, y, z are the directions in the reciprocal Cartesian space (2π/A), En(k) is the dispersion relation for the n-th electronic band. The explicit form of the right-side symmetric tensor from the above eq. is:

Eq. 1

where the derivatives can be evaluated numerically using the finite difference method. Eigenvalues of the above matrix are inverses of the effective masses, eigenvectors are the directions of the principal effective mass components.

For the theory behind the code and validation of the code against known data see the paper. Let us know if you find any bugs or mistakes, thanks!

Notes

  1. Atomic units (a.u.) are used throughout the code: ħ = 1, energy is in Hartree, effective mass is in the electron mass at rest (m0), distance is in Bohr
  2. For the top of the VB (valence band) eigenvalues are negative, for the bottom of the CB (conduction band) eigenvalues are positive
  3. In some cases, not all eigenvalues have the same sign, meaning that the chosen k-point is not a global minimum (maximum)
  4. Effective masses can be highly anisotropic (see tests section)

Installation

Download and unpack the current version: 1.50.

Python version

emc.py is a Python script, that depends only on the Python Standard Library. Code is being tested with Python v 2.7.

To install:

  • check that emc.py has executable flag using ls -la, if it doesn't do chmod +x ./emc.py
  • check that emc.py is in your path $PATH (to print the $PATH variable do echo $PATH)
  • enjoy the results!

Fortran version

Fortran version depends on LAPACK and BLAS libraries.

To install:

  • edit Makefile from the fortran folder for you needs
  • run make
  • check that emc_gen and emc_calc are in your path $PATH (to print the $PATH variable do echo $PATH)
  • enjoy the results!

Input file structure

0.000 0.000 0.000                       ! K-POINT in the reciprocal crystal coord. (3 floats)
0.01                                    ! step size in 1/Bohr units (1 float)
81                                      ! band number, (1 integer)
V                                       ! program identifier (1 char)
6.291999817  0.000000000  0.000000000   ! direct lattice vectors (3 floats)
0.755765092  7.652872670  0.000000000   ! direct lattice vectors (3 floats)
0.462692761  3.245907103 14.032346772   ! direct lattice vectors (3 floats)
  • band number. If CRYSTAL is employed, band number should be set to 1. Helper script cry-getE.pl reads-in the desired band number (see below). For VASP valence band number can be obtained as a half of the NELECT variable from the OUTCAR file (for non spin-polarized calculations).
  • program identifier: C for CRYSTAL or V for VASP. (TODO: Quantum Espresso)
  • direct lattice components in CRYSTAL can be found in the SCF output under: DIRECT LATTICE VECTORS COMPON. (A.U.), in VASP in the OUTCAR under: direct lattice vectors.

Usage

  1. Run SCF.
  2. Generate k-point grid (in KPOINT file):
  • Python version: emc.py input_file
  • FORTRAN version: emc_gen. Note: FORTRAN version requires input file to be named inp
  1. Run non-self consistent calculation using obtained k-point grid:
  • in the case of CRYSTAL: run helper script cry-getE.pl (see below)
  • in the case of VASP: set ICHARG=11 in the INCAR. Don't forget to copy CHGCAR file from the converged SCF run
  1. Calculate effective masses and principal directions using EIGENVAL file generated in previous step:
  • Python version: emc.py input_file EIGENVAL_file
  • FORTRAN version: emc_calc. Current folder should contain both inp and EIGENVAL files

Helper script for CRYSTAL: cry-getE.pl

In case of CRYSTAL, cry-getE.pl script should be used in order to obtain file with the energies on the grid. The script takes two k-points at a time and runs band structure calculations (using runprop script from the CRYSTAL package).

cry-getE.pl has the following command line options:

  • -f SCF output filename (.f98)
  • -b band number

Example: cry-getE.pl -f ../input.f98 -b 131

Note that runprop needs to be in the current $PATH, otherwise script will quit.

Running tests

To run tests, in the distribution directory run:
python -m unittest discover

Tests are located in the test folder.

Authors

Alexandr Fonari and Christopher Sutton
If you have any questions or suggestions don't hesitate to contact us at: alexandr[dot]fonari[nospam]gmail.com or csutton[nospam]gatech.edu. You can also submit as issue.

License: MIT

Copyright (c) 2012, Alexandr Fonari, Christopher Sutton
Cite as: "Effective Mass Calculator, A. Fonari, C. Sutton, (2012)."

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

About

Effective Mass Calculator for Semiconductors

License:Other


Languages

Language:Python 64.5%Language:Fortran 28.2%Language:Shell 4.0%Language:Makefile 3.3%