This subroutine calculates the level spacing, i.e. how much the level changes near a given point of the interpolation mesh
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | del_eig(:,:) |
Band velocities, already corrected when degeneracies occur |
||
| integer, | intent(in) | :: | kmesh(3) |
array of three integers, giving the number of k points along each of the three directions defined by the reciprocal lattice vectors |
||
| real(kind=dp), | intent(out) | :: | levelspacing(num_wann) |
On output, the spacing for each of the bands (in eV) |
||
| integer, | intent(in) | :: | num_wann | |||
| real(kind=dp), | intent(in) | :: | recip_lattice(3,3) |
subroutine dos_get_levelspacing(del_eig, kmesh, levelspacing, num_wann, recip_lattice) !================================================== !! This subroutine calculates the level spacing, i.e. how much the level changes !! near a given point of the interpolation mesh !================================================== use w90_postw90_common, only: pw90common_kmesh_spacing integer, intent(in) :: num_wann real(kind=dp), intent(in) :: del_eig(:, :) !! Band velocities, already corrected when degeneracies occur integer, intent(in) :: kmesh(3) !! array of three integers, giving the number of k points along !! each of the three directions defined by the reciprocal lattice vectors real(kind=dp), intent(out) :: levelspacing(num_wann) !! On output, the spacing for each of the bands (in eV) real(kind=dp), intent(in) :: recip_lattice(3, 3) real(kind=dp) :: Delta_k integer :: band Delta_k = pw90common_kmesh_spacing(kmesh, recip_lattice) do band = 1, num_wann levelspacing(band) = & sqrt(dot_product(del_eig(band, :), del_eig(band, :)))*Delta_k end do end subroutine dos_get_levelspacing