MsSpec-DFM/New_libraries/DFM_library/PLASMON_LIBRARY/plasmon_dispersion_2.f90

82 lines
2.1 KiB
Fortran

!
!=======================================================================
!
MODULE PLASMON_DISP_EXACT
!
! This module computes the exact plasmon dispersion
!
USE ACCURACY_REAL
!
CONTAINS
!
!=======================================================================
!
SUBROUTINE PLASMON_DISP_EX(IS,IC,YB,ENE_P_Q)
!
! This subroutine computes exact plasmon dispersion from the
! dielectric function
!
!
! Output variables :
!
! * YB : q / k_F
! * ENE_P_Q : plasmon energy at q in SI
!
!
! Author : D. Sébilleau
!
! Last modified : 16 Dec 2020
!
!
USE Q_GRID
!
USE REAL_NUMBERS, ONLY : ZERO
USE FERMI_SI, ONLY : EF_SI
!
USE CALCULATORS_3
USE RE_EPS_0_TREATMENT
!
IMPLICIT NONE
!
INTEGER, PARAMETER :: N_ZERO = 10000 ! max number of zeros
!
INTEGER, INTENT(OUT) :: IS,IC
!
INTEGER :: IQ
INTEGER :: NB
INTEGER :: IB
!
REAL (WP), INTENT(OUT) :: ENE_P_Q(N_ZERO)
REAL (WP), INTENT(OUT) :: YB(N_ZERO)
!
REAL (WP) :: Y,X
REAL (WP) :: ZERO_B(N_ZERO)
REAL (WP) :: QS,QC
!
REAL (WP) :: FLOAT
!
! Initialisation of ENE_P_Q
!
DO IB = 1,N_ZERO !
ENE_P_Q(IB) = ZERO !
END DO !
!
! Extract the upper branch of Re[ eps(q,omega) ] = 0
! which is contained in unit IO_ZE
!
CALL SELECT_BRANCH(2,NB,YB,ZERO_B) !
!
! Get the q-bounds
!
CALL COMPUTE_QBOUNDS_3D(NB,YB,ZERO_B,IS,IC,QS,QC) !
!
! Storing the plasmon energy in SI
!
DO IB = IS,IC !
ENE_P_Q(IB) = ZERO_B(IB) * EF_SI !
END DO !
!
END SUBROUTINE PLASMON_DISP_EX
!
END MODULE PLASMON_DISP_EXACT