Evaluate DOS using the tetrahedron method. More...
#include <TetrahedralDOS.h>
Public Types | |
typedef std::pair< double, std::vector< double > > | LsplineElem |
Single rnergy and DOS values with all weights at that energy. | |
typedef std::vector< LsplineElem > | Lspline |
Set of all energy and DOS values as a linear spline. | |
Public Member Functions | |
TetrahedralDOS (std::vector< vector3<>> kmesh, std::vector< int > iReduced, const matrix3<> &R, const matrix3< int > &super, int nSpins, int nBands, int nWeights, double weightSum=1.) | |
double & | e (int iState, int iBand) |
access eigenvalue | |
const double & | e (int iState, int iBand) const |
access eigenvalue (const version) | |
double & | w (int iWeight, int iState, int iBand) |
access weight | |
const double & | w (int iWeight, int iState, int iBand) const |
access weight (const version) | |
void | setEigs (const std::vector< diagMatrix > &E) |
set all eigenvalues together (instead of using e()) | |
void | setWeights (int iWeight, const std::vector< diagMatrix > &weights) |
set all weights for given iWeight together (instead of using e()); all weights are initially 1 | |
void | weldEigenvalues (double Etol) |
Replace clusters of eigenvalues that differ by less than Etol by a single value equal to their mean. | |
Lspline | getDOS (int iSpin, double Etol) const |
Lspline | gaussSmooth (const Lspline &in, double Esigma) const |
Apply gaussian smoothing of width Esigma. | |
void | printDOS (const Lspline &dos, string filename, string header=string()) |
Write the given DOS Lspline to a file (optionally with a header) | |
Public Attributes | |
const int | nSpins |
number of separate spin channels | |
const int | nBands |
number of bands | |
const int | nWeights |
number of weighted-DOS's beig calculated (also counting total DOS i.e. weight = 1) | |
const int | nReduced |
number of reduced k-points | |
const int | nStates |
nReduced * nSpins | |
Evaluate DOS using the tetrahedron method.
TetrahedralDOS::TetrahedralDOS | ( | std::vector< vector3<>> | kmesh, |
std::vector< int > | iReduced, | ||
const matrix3<> & | R, | ||
const matrix3< int > & | super, | ||
int | nSpins, | ||
int | nBands, | ||
int | nWeights, | ||
double | weightSum = 1. |
||
) |
Initialize calculator for a given uniform k-point mesh kmesh and indices iReduced to reduced mesh. If iReduced is empty, then nReduced = kmesh.size() and eigenvalues / weights must be provided on the full mesh R is the unit cell lattice vectors, while super are its linear combinations in the k-point sampled supercell. nSpins, nBands and nWeights initialize corresponding members of class. weightSum sets the net contribution from the BZ integral (can include spin-degeneracy factors here, if any).
Lspline TetrahedralDOS::getDOS | ( | int | iSpin, |
double | Etol | ||
) | const |
Generate the density of states for a given spin channel Etol sets the width of the delta-function DOS of bands that are completely flat (potentially welded within Etol)