dos_get_levelspacing Subroutine

public subroutine dos_get_levelspacing(del_eig, kmesh, levelspacing, num_wann, recip_lattice)

Uses

  • proc~~dos_get_levelspacing~~UsesGraph proc~dos_get_levelspacing dos_get_levelspacing module~w90_postw90_common w90_postw90_common proc~dos_get_levelspacing->module~w90_postw90_common module~w90_constants w90_constants module~w90_postw90_common->module~w90_constants module~w90_error w90_error module~w90_postw90_common->module~w90_error module~w90_comms w90_comms module~w90_error->module~w90_comms module~w90_error_base w90_error_base module~w90_error->module~w90_error_base module~w90_comms->module~w90_constants module~w90_comms->module~w90_error_base

This subroutine calculates the level spacing, i.e. how much the level changes near a given point of the interpolation mesh

Arguments

Type IntentOptional 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)

Calls

proc~~dos_get_levelspacing~~CallsGraph proc~dos_get_levelspacing dos_get_levelspacing interface~pw90common_kmesh_spacing pw90common_kmesh_spacing proc~dos_get_levelspacing->interface~pw90common_kmesh_spacing proc~kmesh_spacing_mesh kmesh_spacing_mesh interface~pw90common_kmesh_spacing->proc~kmesh_spacing_mesh proc~kmesh_spacing_singleinteger kmesh_spacing_singleinteger interface~pw90common_kmesh_spacing->proc~kmesh_spacing_singleinteger

Called by

proc~~dos_get_levelspacing~~CalledByGraph proc~dos_get_levelspacing dos_get_levelspacing proc~calctdfanddos calcTDFandDOS proc~calctdfanddos->proc~dos_get_levelspacing proc~dos_main dos_main proc~dos_main->proc~dos_get_levelspacing proc~boltzwann_main boltzwann_main proc~boltzwann_main->proc~calctdfanddos program~postw90 postw90 program~postw90->proc~dos_main program~postw90->proc~boltzwann_main

Source Code

  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