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)