2082 lines
74 KiB
Fortran
2082 lines
74 KiB
Fortran
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
MODULE PLASMON_DISP_REAL
|
||
|
!
|
||
|
! This module computes analytical plasmon dispersion without damping
|
||
|
!
|
||
|
USE ACCURACY_REAL
|
||
|
!
|
||
|
CONTAINS
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE PLASMON_DISP_R(X,RS,T,PL_DISP,ENE_P_Q)
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||
|
! * RS : dimensionless factor
|
||
|
! * T : temperature in SI
|
||
|
! * PL_DISP : method used to compute the dispersion
|
||
|
!
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * ENE_P_Q : plasmon energy at q in J
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 26 Oct 2020
|
||
|
!
|
||
|
!
|
||
|
USE MATERIAL_PROP, ONLY : DMN
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
CHARACTER (LEN = 7) :: PL_DISP
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: X,RS,T
|
||
|
REAL (WP), INTENT(OUT) :: ENE_P_Q
|
||
|
!
|
||
|
IF(DMN == '3D') THEN !
|
||
|
CALL PLASMON_DISP_3D(X,RS,T,PL_DISP,ENE_P_Q) !
|
||
|
ELSE IF(DMN == '2D') THEN !
|
||
|
CALL PLASMON_DISP_2D(X,RS,T,PL_DISP,ENE_P_Q) !
|
||
|
ELSE IF(DMN == '1D') THEN !
|
||
|
CALL PLASMON_DISP_1D(X,RS,T,PL_DISP,ENE_P_Q) !
|
||
|
END IF !
|
||
|
!
|
||
|
END SUBROUTINE PLASMON_DISP_R
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE PLASMON_DISP_1D(X,RS,T,PL_DISP,ENE_P_Q)
|
||
|
!
|
||
|
! This subroutine computes the coefficients AR of the plasmon dispersion
|
||
|
! according to:
|
||
|
!
|
||
|
! ENE_Q^2 = AR(0) + AR(1)*Q + AR(2)*Q^2 + AR(3)*Q^3 +
|
||
|
! AR(4)*Q^4 + AR(5)*Q^5 + AR(6)*Q^6
|
||
|
!
|
||
|
! = ALPHA2 + BETA2 * Q^2 + GAMMA2 * Q^4 + DELTA^2 Q^6
|
||
|
!
|
||
|
! where Q = q/ k_F
|
||
|
!
|
||
|
! --> This is the real (q, hbar omega_q) case (no damping)
|
||
|
!
|
||
|
! Warnings: i) all input parameters are in SI units
|
||
|
! ii) in the literature, beta^2 and gamma^2 are given
|
||
|
! in atomic units (AU). Here, we work in SI.
|
||
|
! We recall:
|
||
|
!
|
||
|
! ENE : J --> energy
|
||
|
! Q : 1 / M --> wave vector
|
||
|
! V : M / S --> speed
|
||
|
! OMEGA : 1 / S --> angular momentum
|
||
|
! HBAR : J S --> Planck constant / 2 pi
|
||
|
!
|
||
|
! In order to obtain ENE_Q^2 in J^2, a dimension analysis
|
||
|
! shows that:
|
||
|
!
|
||
|
! BETA2_AU = COEF * V_F^2 --> BETA2_SI = HBAR^2 * BETA2_AU
|
||
|
! GAMMA2_AU = 1/4 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU / M^2
|
||
|
! GAMMA2_AU = COEF * V_F^4 / OMEGA_P^2 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU
|
||
|
!
|
||
|
! Alternatively, we can work in atomic units and then change
|
||
|
! from Hartrees to Joules. This is what is coded here.
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||
|
! * T : temperature in SI
|
||
|
! * PL_DISP : method used to compute the dispersion (3D)
|
||
|
! PL_DISP = 'HYDRODY' hydrodynamic model
|
||
|
! PL_DISP = 'RPA_MOD' RPA model
|
||
|
!
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * ENE_P_Q : plasmon energy at q in J
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 17 Nov 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO,TWO
|
||
|
USE CONSTANTS_P2, ONLY : HARTREE
|
||
|
USE FERMI_AU, ONLY : KF_AU
|
||
|
!
|
||
|
USE DISP_COEF_REAL
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
CHARACTER (LEN = 7) :: PL_DISP
|
||
|
!
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: X,RS,T
|
||
|
REAL (WP), INTENT(OUT) :: ENE_P_Q
|
||
|
!
|
||
|
REAL (WP) :: Q,Q2,Q3,Q4,Q5,Q6
|
||
|
REAL (WP) :: ENE2
|
||
|
!
|
||
|
REAL (WP) :: SQRT
|
||
|
!
|
||
|
INTEGER :: I
|
||
|
!
|
||
|
!
|
||
|
DO I = 0, 6 !
|
||
|
AR(I) = ZERO ! initialization
|
||
|
END DO !
|
||
|
!
|
||
|
Q = TWO * X * KF_AU ! q in AU
|
||
|
Q2 = Q * Q !
|
||
|
Q3 = Q2 * Q ! powers of q
|
||
|
Q4 = Q3 * Q !
|
||
|
Q5 = Q4 * Q !
|
||
|
Q6 = Q5 * Q !
|
||
|
!
|
||
|
IF(PL_DISP == 'HYDRODY') THEN !
|
||
|
CALL HYDRODY_DP_1D(RS,T,Q,AR) !
|
||
|
ELSE IF(PL_DISP == 'RPA_MOD') THEN !
|
||
|
CALL RPA_MOD_DP_1D(RS,T,Q,AR) !
|
||
|
END IF !
|
||
|
!
|
||
|
ENE2 = AR(0) + AR(1) * Q + AR(2) * Q2 + AR(3) * Q3 + & !energy^2 in AU
|
||
|
AR(4) * Q4 + AR(5) * Q5 + AR(6) * Q6 !
|
||
|
!
|
||
|
ENE_P_Q = SQRT(ENE2) ! plasmon energy at q in AU
|
||
|
!
|
||
|
! Change of units: AU --> SI
|
||
|
!
|
||
|
ENE_P_Q = ENE_P_Q * HARTREE !
|
||
|
!
|
||
|
END SUBROUTINE PLASMON_DISP_1D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE PLASMON_DISP_2D(X,RS,T,PL_DISP,ENE_P_Q)
|
||
|
!
|
||
|
! This subroutine computes the coefficients AR of the plasmon dispersion
|
||
|
! according to:
|
||
|
!
|
||
|
! ENE_Q^2 = AR(0) + AR(1)*Q + AR(2)*Q^2 + AR(3)*Q^3 +
|
||
|
! AR(4)*Q^4 + AR(5)*Q^5 + AR(6)*Q^6
|
||
|
!
|
||
|
! = ALPHA2 + BETA2 * Q^2 + GAMMA2 * Q^4 + DELTA^2 Q^6
|
||
|
!
|
||
|
! where Q = q/ k_F
|
||
|
!
|
||
|
! --> This is the real (q, hbar omega_q) case (no damping)
|
||
|
!
|
||
|
! Warnings: i) all input parameters are in SI units
|
||
|
! ii) in the literature, beta^2 and gamma^2 are given
|
||
|
! in atomic units (AU). Here, we work in SI.
|
||
|
! We recall:
|
||
|
!
|
||
|
! ENE : J --> energy
|
||
|
! Q : 1 / M --> wave vector
|
||
|
! V : M / S --> speed
|
||
|
! OMEGA : 1 / S --> angular momentum
|
||
|
! HBAR : J S --> Planck constant / 2 pi
|
||
|
!
|
||
|
! In order to obtain ENE_Q^2 in J^2, a dimension analysis
|
||
|
! shows that:
|
||
|
!
|
||
|
! BETA2_AU = COEF * V_F^2 --> BETA2_SI = HBAR^2 * BETA2_AU
|
||
|
! GAMMA2_AU = 1/4 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU / M^2
|
||
|
! GAMMA2_AU = COEF * V_F^4 / OMEGA_P^2 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU
|
||
|
!
|
||
|
! Alternatively, we can work in atomic units and then change
|
||
|
! from Hartrees to Joules. This is what is coded here.
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
! * PL_DISP : method used to compute the dispersion (3D)
|
||
|
! PL_DISP = 'HYDRODY' hydrodynamic model
|
||
|
! PL_DISP = 'RPA_MOD' RPA model
|
||
|
! PL_DISP = 'RAJAGOP' Rajagopal formula
|
||
|
!
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * ENE_P_Q : plasmon energy at q in J
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 17 Nov 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO,TWO
|
||
|
USE CONSTANTS_P2, ONLY : HARTREE
|
||
|
USE FERMI_AU, ONLY : KF_AU
|
||
|
!
|
||
|
USE DISP_COEF_REAL
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
CHARACTER (LEN = 7) :: PL_DISP
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: X,RS,T
|
||
|
REAL (WP), INTENT(OUT) :: ENE_P_Q
|
||
|
!
|
||
|
REAL (WP) :: Q,Q2,Q3,Q4,Q5,Q6
|
||
|
REAL (WP) :: ENE2
|
||
|
!
|
||
|
REAL (WP) :: SQRT
|
||
|
!
|
||
|
INTEGER :: I
|
||
|
!
|
||
|
DO I = 0, 6 !
|
||
|
AR(I) = ZERO ! initialization
|
||
|
END DO !
|
||
|
!
|
||
|
Q = TWO * X * KF_AU ! q in AU
|
||
|
Q2 = Q * Q !
|
||
|
Q3 = Q2 * Q ! powers of q
|
||
|
Q4 = Q3 * Q ! in AU
|
||
|
Q5 = Q4 * Q !
|
||
|
Q6 = Q5 * Q !
|
||
|
!
|
||
|
IF(PL_DISP == 'HYDRODY') THEN !
|
||
|
CALL HYDRODY_DP_2D(X,RS,T,AR) !
|
||
|
ELSE IF(PL_DISP == 'RPA_MOD') THEN !
|
||
|
CALL RPA_MOD_DP_2D(X,RS,T,AR) !
|
||
|
ELSE IF(PL_DISP == 'RAJAGOP') THEN !
|
||
|
CALL RAJAGOP_DP_2D(X,RS,T,AR) !
|
||
|
END IF !
|
||
|
!
|
||
|
ENE2 = AR(0) + AR(1) * Q + AR(2) * Q2 + AR(3) * Q3 + & !energy^2 in AU
|
||
|
AR(4) * Q4 + AR(5) * Q5 + AR(6) * Q6 !
|
||
|
!
|
||
|
ENE_P_Q = SQRT(ENE2) ! plasmon energy at q in AU
|
||
|
!
|
||
|
! Change of units: AU --> SI
|
||
|
!
|
||
|
ENE_P_Q = ENE_P_Q * HARTREE !
|
||
|
!
|
||
|
END SUBROUTINE PLASMON_DISP_2D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE PLASMON_DISP_3D(X,RS,T,PL_DISP,ENE_P_Q)
|
||
|
!
|
||
|
! This subroutine computes the coefficients AR of the plasmon dispersion
|
||
|
! according to:
|
||
|
!
|
||
|
! ENE_Q^2 = AR(0) + AR(1)*Q + AR(2)*Q^2 + AR(3)*Q^3 +
|
||
|
! AR(4)*Q^4 + AR(5)*Q^5 + AR(6)*Q^6
|
||
|
!
|
||
|
! = ALPHA2 + BETA2 * Q^2 + GAMMA2 * Q^4 + DELTA^2 Q^6 (1)
|
||
|
!
|
||
|
! or
|
||
|
!
|
||
|
! ENE_Q = omega_p + 2 alpha omega_F q^2 / k_F^2 (2)
|
||
|
!
|
||
|
! where Q = q/ k_F
|
||
|
!
|
||
|
! --> This is the real (q, hbar omega_q) case (no damping)
|
||
|
!
|
||
|
! Warnings: i) all input parameters are in SI units
|
||
|
! ii) in the literature, beta^2 and gamma^2 are given
|
||
|
! in atomic units (AU). Here, we work in SI.
|
||
|
! We recall:
|
||
|
!
|
||
|
! ENE : J --> energy
|
||
|
! Q : 1 / M --> wave vector
|
||
|
! V : M / S --> speed
|
||
|
! OMEGA : 1 / S --> angular momentum
|
||
|
! HBAR : J S --> Planck constant / 2 pi
|
||
|
!
|
||
|
! In order to obtain ENE_Q^2 in J^2, a dimension analysis
|
||
|
! shows that:
|
||
|
!
|
||
|
! BETA2_AU = COEF * V_F^2 --> BETA2_SI = HBAR^2 * BETA2_AU
|
||
|
! GAMMA2_AU = 1/4 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU / M^2
|
||
|
! GAMMA2_AU = COEF * V_F^4 / OMEGA_P^2 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU
|
||
|
!
|
||
|
! Alternatively, we can work in atomic units and then change
|
||
|
! from Hartrees to Joules. This is what is coded here.
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
! * PL_DISP : method used to compute the dispersion (3D)
|
||
|
! PL_DISP = 'ELASTIC' elastic model
|
||
|
! PL_DISP = 'GOA_MOD' Gorobchenko model
|
||
|
! PL_DISP = 'HER_APP' Hertel-Appel model <-- temperature-dependent
|
||
|
! PL_DISP = 'HUBBARD' Hubbard model
|
||
|
! PL_DISP = 'HYDRODY' hydrodynamic model
|
||
|
! PL_DISP = 'SGBBN_M' SGBBN model
|
||
|
! PL_DISP = 'RP1_MOD' RPA model up to q^2
|
||
|
! PL_DISP = 'RP2_MOD' RPA model up to q^4
|
||
|
! PL_DISP = 'AL0_MOD' gamma_0 limit
|
||
|
! PL_DISP = 'ALI_MOD' gamma_inf limit
|
||
|
! PL_DISP = 'NOP_MOD' Nozières-Pines model
|
||
|
! PL_DISP = 'UTI_MOD' Utsumi-Ichimaru model
|
||
|
! PL_DISP = 'TWA_MOD' Toigo-Woodruff model
|
||
|
! PL_DISP = 'SUM_RU2' f-sum rule sum_rule
|
||
|
! PL_DISP = 'SUM_RU3' 3rd-frequency sum_rule
|
||
|
!
|
||
|
! from Hartrees to Joules. This is what is coded here.
|
||
|
!
|
||
|
! Intermediate parameters:
|
||
|
!
|
||
|
! * I_SI : switch for unit of energy
|
||
|
! I_SI = 0 --> in AU unit
|
||
|
! I_SI = 1 --> in SI unit
|
||
|
! * I_SQ : switch for computation of E or E^2
|
||
|
! I_SQ = 0 --> energy computed
|
||
|
! I_SQ = 1 --> energy^2 computed
|
||
|
! * I_FO : switch for formula used to compute energy
|
||
|
! I_FO = 1 --> formula (1)
|
||
|
! I_FO = 2 --> formula (2)
|
||
|
!
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * ENE_P_Q : plasmon energy at q in J
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 7 Dec 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO,TWO,THREE
|
||
|
USE CONSTANTS_P2, ONLY : HARTREE
|
||
|
USE FERMI_AU, ONLY : KF_AU
|
||
|
USE LF_VALUES, ONLY : GQ_TYPE,IQ_TYPE
|
||
|
USE SF_VALUES, ONLY : SQ_TYPE
|
||
|
USE PLASMON_ENE_SI
|
||
|
!
|
||
|
USE DISP_COEF_REAL
|
||
|
!
|
||
|
USE OUT_VALUES_3, ONLY : I_ZE
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
CHARACTER (LEN = 7) :: PL_DISP
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: X,RS,T
|
||
|
REAL (WP), INTENT(OUT) :: ENE_P_Q
|
||
|
!
|
||
|
REAL (WP) :: Q,Q2,Q3,Q4,Q5,Q6
|
||
|
REAL (WP) :: ENE2,EN_P,C1,C2
|
||
|
!
|
||
|
REAL (WP) :: SQRT
|
||
|
!
|
||
|
INTEGER :: CHANGE,I
|
||
|
INTEGER :: I_SI,I_SQ,I_FO
|
||
|
!
|
||
|
C1 = THREE / 32.0E0_WP ! coefficient for 'GOA_MOD'
|
||
|
CHANGE = 0 ! set to 1 only for 'GOA_MOD'
|
||
|
!
|
||
|
I_SI = 0 ! switch for energy computed in SI
|
||
|
I_SQ = 0 ! omega(q) computed [ not omega^2(q) ]
|
||
|
I_FO = 1 ! formula (1) used to compute energy
|
||
|
!
|
||
|
Q = TWO * X * KF_AU ! q in AU
|
||
|
Q2 = Q * Q !
|
||
|
Q3 = Q2 * Q ! powers of q
|
||
|
Q4 = Q3 * Q !
|
||
|
Q5 = Q4 * Q !
|
||
|
Q6 = Q5 * Q !
|
||
|
!
|
||
|
! Computing the plasmon energy in atomic units
|
||
|
!
|
||
|
EN_P = ENE_P_SI / HARTREE ! plasmon energy in AU
|
||
|
!
|
||
|
IF(PL_DISP == 'GOA_MOD') THEN !
|
||
|
PL_DISP = 'RP1_MOD' !
|
||
|
CHANGE = 1 !
|
||
|
END IF !
|
||
|
!
|
||
|
DO I = 0, 6 !
|
||
|
AR(I) = ZERO ! initialization
|
||
|
END DO !
|
||
|
!
|
||
|
IF(PL_DISP == 'ELASTIC') THEN !
|
||
|
CALL ELASTIC_DP_3D(RS,T,AR) !
|
||
|
I_SQ = 1 !
|
||
|
ELSE IF(PL_DISP == ' EXACT') THEN !
|
||
|
I_ZE = 1 ! post-processing calculation
|
||
|
ELSE IF(PL_DISP == 'HER_APP') THEN !
|
||
|
CALL HER_APP_DP_3D(RS,T,AR) !
|
||
|
I_SQ = 1 !
|
||
|
ELSE IF(PL_DISP == 'HUBBARD') THEN !
|
||
|
CALL HUBBARD_DP_3D(RS,T,AR) !
|
||
|
I_SQ = 1 !
|
||
|
ELSE IF(PL_DISP == 'HYDRODY') THEN !
|
||
|
CALL HYDRODY_DP_3D(RS,T,AR) !
|
||
|
I_SQ = 1 !
|
||
|
ELSE IF(PL_DISP == 'RP2_MOD') THEN !
|
||
|
CALL RP2_MOD_DP_3D(RS,T,AR) !
|
||
|
I_SQ = 1 !
|
||
|
ELSE IF(PL_DISP == 'SGBBN_M') THEN !
|
||
|
CALL SGBBN_M_DP_3D(RS,T,AR) !
|
||
|
I_SQ = 1 !
|
||
|
ELSE IF(PL_DISP == 'SUM_RU2') THEN !
|
||
|
CALL SUMRULE1_DP_3D(X,ENE2) !
|
||
|
I_SQ = 1 !
|
||
|
I_SI = 1 !
|
||
|
I_FO = 2 !
|
||
|
ELSE IF(PL_DISP == 'SUM_RU3') THEN !
|
||
|
CALL SUMRULE3_DP_3D(X,ENE2) !
|
||
|
I_SQ = 1 !
|
||
|
I_SI = 1 !
|
||
|
I_FO = 2 !
|
||
|
ELSE !
|
||
|
CALL PLASMON_DISP_3D_2(X,RS,T,PL_DISP,ENE_P_Q) !
|
||
|
I_SI = 1 !
|
||
|
I_FO = 2 !
|
||
|
END IF !
|
||
|
!
|
||
|
IF(I_FO == 1) THEN !
|
||
|
ENE2 = AR(0) + AR(1) * Q + AR(2) * Q2 + AR(3) * Q3 + & !energy^2 in AU
|
||
|
AR(4) * Q4 + AR(5) * Q5 + AR(6) * Q6 !
|
||
|
END IF !
|
||
|
!
|
||
|
IF(I_SQ == 1) THEN !
|
||
|
ENE_P_Q = SQRT(ENE2) !
|
||
|
END IF !
|
||
|
!
|
||
|
IF(CHANGE == 1) THEN !
|
||
|
ENE_P_Q = ENE_P_Q / HARTREE - C1 * EN_P * Q2 ! 'GOA_MOD' case
|
||
|
PL_DISP = 'GOA_MOD' !
|
||
|
CHANGE = 0 !
|
||
|
I_SI = 0 !
|
||
|
I_SQ = 0 !
|
||
|
I_FO = 1 !
|
||
|
END IF !
|
||
|
!
|
||
|
! Change of units: AU --> SI
|
||
|
!
|
||
|
IF(I_SI == 0) THEN !
|
||
|
ENE_P_Q = ENE_P_Q * HARTREE !
|
||
|
END IF !
|
||
|
!
|
||
|
END SUBROUTINE PLASMON_DISP_3D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE ELASTIC_DP_3D(R_S,T,AD)
|
||
|
!
|
||
|
! This subroutine computes the coefficients of the plasmon dispersion
|
||
|
! within the elastic approach in 3D systems according to:
|
||
|
!
|
||
|
! ENE_Q^2 = AD(0) + AD(1)*Q + AD(2)*Q^2 + AD(3)*Q^3 +
|
||
|
! AD(4)*Q^4 + AD(5)*Q^5 + AD(6)*Q^6
|
||
|
!
|
||
|
! = ALPHA2 + BETA2 * Q^2 + GAMMA2 * Q^4 + DELTA^2 Q^6
|
||
|
!
|
||
|
! where Q = q/ k_F
|
||
|
!
|
||
|
!
|
||
|
! References: (1) Ll. Serra, F. Garcias, M. Barranco, N. Barberan
|
||
|
! and J. Navarro, Phys. Rev. B 44, 1492-1498 (1991)
|
||
|
!
|
||
|
!
|
||
|
! --> This is the real (q, hbar omega_q) case (no damping)
|
||
|
!
|
||
|
! Warnings: i) all input parameters are in SI units
|
||
|
! ii) in the literature, beta^2 and gamma^2 are given
|
||
|
! in atomic units (AU). Here, we work in SI.
|
||
|
! We recall:
|
||
|
!
|
||
|
! ENE : J --> energy
|
||
|
! Q : 1 / M --> wave vector
|
||
|
! V : M / S --> speed
|
||
|
! OMEGA : 1 / S --> angular momentum
|
||
|
! HBAR : J S --> Planck constant / 2 pi
|
||
|
!
|
||
|
! In order to obtain ENE_Q^2 in J^2, a dimension analysis
|
||
|
! shows that:
|
||
|
!
|
||
|
! BETA2_AU = COEF * V_F^2 --> BETA2_SI = HBAR^2 * BETA2_AU
|
||
|
! GAMMA2_AU = 1/4 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU / M^2
|
||
|
! GAMMA2_AU = COEF * V_F^4 / OMEGA_P^2 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU
|
||
|
!
|
||
|
! Alternatively, we can work in atomic units and then change
|
||
|
! from Hartrees to Joules. This is what is coded here.
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * R_S : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * AD(0:6) : coefficients of the squared dispersion in AU
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 7 Dec 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO,NINE,THREE,FOURTH
|
||
|
USE CONSTANTS_P2, ONLY : HARTREE
|
||
|
USE FERMI_AU, ONLY : VF_AU
|
||
|
USE PI_ETC, ONLY : PI
|
||
|
USE PLASMON_ENE_SI
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: R_S,T
|
||
|
REAL (WP), INTENT(OUT) :: AD(0:6)
|
||
|
!
|
||
|
REAL (WP) :: HAR2,VF2,RS
|
||
|
REAL (WP) :: DENOM,XI
|
||
|
!
|
||
|
INTEGER :: I
|
||
|
!
|
||
|
! Initialisations
|
||
|
!
|
||
|
DO I = 0, 6 !
|
||
|
AD(I) = ZERO !
|
||
|
END DO !
|
||
|
!
|
||
|
HAR2 = HARTREE * HARTREE !
|
||
|
RS = R_S ! rs in AU
|
||
|
VF2 = VF_AU * VF_AU ! v_F^2 in AU
|
||
|
DENOM = NINE * (7.8E0_WP + RS)**3 !
|
||
|
XI = 0.88E0_WP * RS * (7.80E0_WP + RS + RS) / DENOM !
|
||
|
!
|
||
|
! Coefficients in AU
|
||
|
!
|
||
|
AD(0) = ENE_P_SI * ENE_P_SI / HAR2 !
|
||
|
AD(2) = (0.60E0_WP * VF2 - VF_AU / (THREE * PI) - XI) ! ref. (1) eq. (6)
|
||
|
AD(4) = FOURTH !
|
||
|
!
|
||
|
END SUBROUTINE ELASTIC_DP_3D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE HER_APP_DP_3D(RS,T,AD)
|
||
|
!
|
||
|
! This subroutine computes the coefficients of the plasmon dispersion
|
||
|
! within the Hertel-Appel approach in 3D systems according to:
|
||
|
!
|
||
|
! ENE_Q^2 = AD(0) + AD(1)*Q + AD(2)*Q^2 + AD(3)*Q^3 +
|
||
|
! AD(4)*Q^4 + AD(5)*Q^5 + AD(6)*Q^6
|
||
|
!
|
||
|
! = ALPHA2 + BETA2 * Q^2 + GAMMA2 * Q^4 + DELTA^2 Q^6
|
||
|
!
|
||
|
! where Q = q/ k_F
|
||
|
!
|
||
|
!
|
||
|
! References: (1) P. Hertel and J. Appel, Phys. Rev. B 26, 5730-5742 (1982)
|
||
|
!
|
||
|
!
|
||
|
! --> This is the real (q, hbar omega_q) case (no damping)
|
||
|
!
|
||
|
! Warnings: i) all input parameters are in SI units
|
||
|
! ii) in the literature, beta^2 and gamma^2 are given
|
||
|
! in atomic units (AU). Here, we work in SI.
|
||
|
! We recall:
|
||
|
!
|
||
|
! ENE : J --> energy
|
||
|
! Q : 1 / M --> wave vector
|
||
|
! V : M / S --> speed
|
||
|
! OMEGA : 1 / S --> angular momentum
|
||
|
! HBAR : J S --> Planck constant / 2 pi
|
||
|
!
|
||
|
! In order to obtain ENE_Q^2 in J^2, a dimension analysis
|
||
|
! shows that:
|
||
|
!
|
||
|
! BETA2_AU = COEF * V_F^2 --> BETA2_SI = HBAR^2 * BETA2_AU
|
||
|
! GAMMA2_AU = 1/4 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU / M^2
|
||
|
! GAMMA2_AU = COEF * V_F^4 / OMEGA_P^2 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU
|
||
|
!
|
||
|
! Alternatively, we can work in atomic units and then change
|
||
|
! from Hartrees to Joules. This is what is coded here.
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * R_S : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * AD(0:6) : coefficients of the squared dispersion in AU
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 7 Dec 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO,THREE,SIX,HALF
|
||
|
USE CONSTANTS_P1, ONLY : H_BAR,M_E,K_B
|
||
|
USE CONSTANTS_P2, ONLY : HARTREE
|
||
|
USE PLASMON_ENE_SI
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: RS,T
|
||
|
REAL (WP), INTENT(OUT) :: AD(0:6)
|
||
|
!
|
||
|
REAL (WP) :: KBT,H2M
|
||
|
REAL (WP) :: HAR2,EN_P2
|
||
|
!
|
||
|
INTEGER :: I
|
||
|
!
|
||
|
! Initialisations !
|
||
|
!
|
||
|
DO I = 0, 6 !
|
||
|
AD(I) = ZERO !
|
||
|
END DO !
|
||
|
!
|
||
|
KBT = K_B * T / HARTREE ! k_B T in AU
|
||
|
!
|
||
|
HAR2 = HARTREE * HARTREE !
|
||
|
!
|
||
|
EN_P2 = ENE_P_SI * ENE_P_SI / HAR2 ! (plasmon energy)^2 in AU
|
||
|
!
|
||
|
! Coefficients in AU
|
||
|
!
|
||
|
AD(0) = EN_P2 !
|
||
|
AD(2) = THREE * KBT !
|
||
|
!
|
||
|
END SUBROUTINE HER_APP_DP_3D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE HUBBARD_DP_3D(RS,T,AD)
|
||
|
!
|
||
|
! This subroutine computes the coefficients of the plasmon dispersion
|
||
|
! within the Hubbard approach in 3D systems according to:
|
||
|
!
|
||
|
! ENE_Q^2 = AD(0) + AD(1)*Q + AD(2)*Q^2 + AD(3)*Q^3 +
|
||
|
! AD(4)*Q^4 + AD(5)*Q^5 + AD(6)*Q^6
|
||
|
!
|
||
|
! = ALPHA2 + BETA2 * Q^2 + GAMMA2 * Q^4 + DELTA^2 Q^6
|
||
|
!
|
||
|
! where Q = q/ k_F
|
||
|
!
|
||
|
!
|
||
|
! References: (1) P. Jewsbury, Aust. J. Phys. 32, 361-368 (1979)
|
||
|
!
|
||
|
!
|
||
|
! --> This is the real (q, hbar omega_q) case (no damping)
|
||
|
!
|
||
|
! Warnings: i) all input parameters are in SI units
|
||
|
! ii) in the literature, beta^2 and gamma^2 are given
|
||
|
! in atomic units (AU). Here, we work in SI.
|
||
|
! We recall:
|
||
|
!
|
||
|
! ENE : J --> energy
|
||
|
! Q : 1 / M --> wave vector
|
||
|
! V : M / S --> speed
|
||
|
! OMEGA : 1 / S --> angular momentum
|
||
|
! HBAR : J S --> Planck constant / 2 pi
|
||
|
!
|
||
|
! In order to obtain ENE_Q^2 in J^2, a dimension analysis
|
||
|
! shows that:
|
||
|
!
|
||
|
! BETA2_AU = COEF * V_F^2 --> BETA2_SI = HBAR^2 * BETA2_AU
|
||
|
! GAMMA2_AU = 1/4 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU / M^2
|
||
|
! GAMMA2_AU = COEF * V_F^4 / OMEGA_P^2 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU
|
||
|
!
|
||
|
! Alternatively, we can work in atomic units and then change
|
||
|
! from Hartrees to Joules. This is what is coded here.
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * AD(0:6) : coefficients of the squared dispersion in AU
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 7 Dec 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO,NINE,THIRD,FOURTH
|
||
|
USE CONSTANTS_P1, ONLY : BOHR,H_BAR
|
||
|
USE CONSTANTS_P2, ONLY : HARTREE
|
||
|
USE FERMI_AU, ONLY : KF_AU,VF_AU
|
||
|
USE PLASMON_ENE_SI
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: RS,T
|
||
|
REAL (WP), INTENT(OUT) :: AD(0:6)
|
||
|
!
|
||
|
REAL (WP) :: HAR2
|
||
|
REAL (WP) :: VF2,VF4,KF2,KF4
|
||
|
REAL (WP) :: OMP2,G1,G2
|
||
|
!
|
||
|
INTEGER :: I
|
||
|
!
|
||
|
! Initialisations !
|
||
|
!
|
||
|
DO I = 0, 6 !
|
||
|
AD(I) = ZERO !
|
||
|
END DO !
|
||
|
!
|
||
|
HAR2 = HARTREE * HARTREE !
|
||
|
!
|
||
|
VF2 = VF_AU * VF_AU ! v_F^2 in AU
|
||
|
VF4 = VF2 * VF2 ! v_F^4 in AU
|
||
|
KF2 = KF_AU * KF_AU ! k_F^2 in AU
|
||
|
KF4 = KF2 * KF2 ! k_F^4 in AU
|
||
|
!
|
||
|
OMP2 = ENE_P_SI * ENE_P_SI / HAR2 ! omega_p^2 in AU
|
||
|
!
|
||
|
G1 = FOURTH + 0.00636E0_WP * RS ! ref. (1) eq. (16)
|
||
|
G2 = - 0.0391E0_WP + 0.00248E0_WP * RS ! ref. (1) eq. (16)
|
||
|
!
|
||
|
! Coefficients in AU
|
||
|
!
|
||
|
AD(0) = OMP2 !
|
||
|
AD(2) = 0.60E0_WP * VF2 - G1 * OMP2 / KF2 ! ref. (1) eq. (18)
|
||
|
AD(4) = FOURTH + 12.0E0_WP * VF4 / (175.0E0_WP * OMP2) - & !
|
||
|
OMP2 * (G2 + G1 * G1) / KF4 ! ref. (1) eq. (18)
|
||
|
!
|
||
|
END SUBROUTINE HUBBARD_DP_3D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE HYDRODY_DP_1D(RS,T,Q_SI,AD)
|
||
|
!
|
||
|
! This subroutine computes the coefficients of the plasmon dispersion
|
||
|
! within the hydrodynamic approach in 1D systems according to:
|
||
|
!
|
||
|
! ENE_Q^2 = AD(0) + AD(1)*Q + AD(2)*Q^2 + AD(3)*Q^3 +
|
||
|
! AD(4)*Q^4 + AD(5)*Q^5 + AD(6)*Q^6
|
||
|
!
|
||
|
! = ALPHA2 + BETA2 * Q^2 + GAMMA2 * Q^4 + DELTA^2 Q^6
|
||
|
!
|
||
|
! where Q = q/ k_F
|
||
|
!
|
||
|
! --> This is the real (q, hbar omega_q) case (no damping)
|
||
|
!
|
||
|
! Warnings: i) all input parameters are in SI units
|
||
|
! ii) in the literature, beta^2 and gamma^2 are given
|
||
|
! in atomic units (AU). Here, we work in SI.
|
||
|
! We recall:
|
||
|
!
|
||
|
! ENE : J --> energy
|
||
|
! Q : 1 / M --> wave vector
|
||
|
! V : M / S --> speed
|
||
|
! OMEGA : 1 / S --> angular momentum
|
||
|
! HBAR : J S --> Planck constant / 2 pi
|
||
|
!
|
||
|
! In order to obtain ENE_Q^2 in J^2, a dimension analysis
|
||
|
! shows that:
|
||
|
!
|
||
|
! BETA2_AU = COEF * V_F^2 --> BETA2_SI = HBAR^2 * BETA2_AU
|
||
|
! GAMMA2_AU = 1/4 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU / M^2
|
||
|
! GAMMA2_AU = COEF * V_F^4 / OMEGA_P^2 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU
|
||
|
!
|
||
|
! Alternatively, we can work in atomic units and then change
|
||
|
! from Hartrees to Joules. This is what is coded here.
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
! * Q_SI : plasmon wave vector in 1/m
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * AD(0:6) : coefficients of the squared dispersion in AU
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 28 Jul 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO,TWO,THIRD
|
||
|
USE CONSTANTS_P1, ONLY : BOHR
|
||
|
USE CONSTANTS_P2, ONLY : HARTREE
|
||
|
USE FERMI_AU, ONLY : VF_AU
|
||
|
USE CONFIN_VAL, ONLY : R0
|
||
|
USE PLASMON_ENE_SI
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP) :: RS,T,Q_SI
|
||
|
REAL (WP) :: HAR2,Q,QR0,EN_P2,VF2
|
||
|
REAL (WP) :: AD(0:6)
|
||
|
!
|
||
|
INTEGER :: I
|
||
|
!
|
||
|
! Initialisations
|
||
|
!
|
||
|
DO I=0,6 !
|
||
|
AD(I)=ZERO !
|
||
|
END DO !
|
||
|
!
|
||
|
HAR2=HARTREE*HARTREE !
|
||
|
Q=Q_SI*BOHR ! q in atomic units
|
||
|
QR0=Q*R0 !
|
||
|
VF2=VF_AU*VF_AU ! v_F^2 in AU
|
||
|
!
|
||
|
EN_P2=ENE_P_SI*ENE_P_SI/HAR2 ! (plasmon energy)^2 in AU
|
||
|
!
|
||
|
! Coefficients in AU
|
||
|
!
|
||
|
AD(2)=EN_P2*(DLOG(TWO/QR0)+ & !
|
||
|
THIRD*VF2) !
|
||
|
!
|
||
|
END SUBROUTINE HYDRODY_DP_1D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE HYDRODY_DP_2D(X,RS,T,AD)
|
||
|
!
|
||
|
! This subroutine computes the coefficients of the plasmon dispersion
|
||
|
! within the hydrodynamic approach in 2D systems according to:
|
||
|
!
|
||
|
! ENE_Q^2 = AD(0) + AD(1)*Q + AD(2)*Q^2 + AD(3)*Q^3 +
|
||
|
! AD(4)*Q^4 + AD(5)*Q^5 + AD(6)*Q^6
|
||
|
!
|
||
|
! = ALPHA2 + BETA2 * Q^2 + GAMMA2 * Q^4 + DELTA^2 Q^6
|
||
|
!
|
||
|
! where Q = q/ k_F
|
||
|
!
|
||
|
! --> This is the real (q, hbar omega_q) case (no damping)
|
||
|
!
|
||
|
! Warnings: i) all input parameters are in SI units
|
||
|
! ii) in the literature, beta^2 and gamma^2 are given
|
||
|
! in atomic units (AU). Here, we work in SI.
|
||
|
! We recall:
|
||
|
!
|
||
|
! ENE : J --> energy
|
||
|
! Q : 1 / M --> wave vector
|
||
|
! V : M / S --> speed
|
||
|
! OMEGA : 1 / S --> angular momentum
|
||
|
! HBAR : J S --> Planck constant / 2 pi
|
||
|
!
|
||
|
! In order to obtain ENE_Q^2 in J^2, a dimension analysis
|
||
|
! shows that:
|
||
|
!
|
||
|
! BETA2_AU = COEF * V_F^2 --> BETA2_SI = HBAR^2 * BETA2_AU
|
||
|
! GAMMA2_AU = 1/4 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU / M^2
|
||
|
! GAMMA2_AU = COEF * V_F^4 / OMEGA_P^2 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU
|
||
|
!
|
||
|
! Alternatively, we can work in atomic units and then change
|
||
|
! from Hartrees to Joules. This is what is coded here.
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * AD(0:6) : coefficients of the squared dispersion in AU
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 28 Jul 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO,HALF
|
||
|
USE CONSTANTS_P2, ONLY : HARTREE
|
||
|
USE FERMI_AU, ONLY : VF_AU
|
||
|
USE PLASMON_ENE_SI
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP) :: X,RS,T
|
||
|
REAL (WP) :: HAR2
|
||
|
REAL (WP) :: AD(0:6)
|
||
|
!
|
||
|
INTEGER :: I
|
||
|
!
|
||
|
! Initialisations
|
||
|
!
|
||
|
DO I = 0, 6 !
|
||
|
AD(I)=ZERO !
|
||
|
END DO !
|
||
|
!
|
||
|
HAR2=HARTREE*HARTREE !
|
||
|
!
|
||
|
! Coefficients in AU
|
||
|
!
|
||
|
AD(0)=ENE_P_SI*ENE_P_SI/HAR2 !
|
||
|
AD(2)=HALF*VF_AU*VF_AU !
|
||
|
!
|
||
|
END SUBROUTINE HYDRODY_DP_2D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE HYDRODY_DP_3D(RS,T,AD)
|
||
|
!
|
||
|
! This subroutine computes the coefficients of the plasmon dispersion
|
||
|
! within the hydrodynamic approach in 3D systems according to:
|
||
|
!
|
||
|
! ENE_Q^2 = AD(0) + AD(1)*Q + AD(2)*Q^2 + AD(3)*Q^3 +
|
||
|
! AD(4)*Q^4 + AD(5)*Q^5 + AD(6)*Q^6
|
||
|
!
|
||
|
! = ALPHA2 + BETA2 * Q^2 + GAMMA2 * Q^4 + DELTA^2 Q^6
|
||
|
!
|
||
|
! where Q = q/ k_F
|
||
|
!
|
||
|
! --> This is the real (q, hbar omega_q) case (no damping)
|
||
|
!
|
||
|
! Warnings: i) all input parameters are in SI units
|
||
|
! ii) in the literature, beta^2 and gamma^2 are given
|
||
|
! in atomic units (AU). Here, we work in SI.
|
||
|
! We recall:
|
||
|
!
|
||
|
! ENE : J --> energy
|
||
|
! Q : 1 / M --> wave vector
|
||
|
! V : M / S --> speed
|
||
|
! OMEGA : 1 / S --> angular momentum
|
||
|
! HBAR : J S --> Planck constant / 2 pi
|
||
|
!
|
||
|
! In order to obtain ENE_Q^2 in J^2, a dimension analysis
|
||
|
! shows that:
|
||
|
!
|
||
|
! BETA2_AU = COEF * V_F^2 --> BETA2_SI = HBAR^2 * BETA2_AU
|
||
|
! GAMMA2_AU = 1/4 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU / M^2
|
||
|
! GAMMA2_AU = COEF * V_F^4 / OMEGA_P^2 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU
|
||
|
!
|
||
|
! Alternatively, we can work in atomic units and then change
|
||
|
! from Hartrees to Joules. This is what is coded here.
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * AD(0:6) : coefficients of the squared dispersion in AU
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 28 Jun 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO,THIRD,FOURTH
|
||
|
USE CONSTANTS_P2, ONLY : HARTREE
|
||
|
USE FERMI_AU, ONLY : VF_AU
|
||
|
USE PLASMON_ENE_SI
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: RS,T
|
||
|
REAL (WP), INTENT(OUT) :: AD(0:6)
|
||
|
!
|
||
|
REAL (WP) :: HAR2
|
||
|
!
|
||
|
INTEGER :: I
|
||
|
!
|
||
|
! Initialisations
|
||
|
!
|
||
|
DO I = 0, 6 !
|
||
|
AD(I) = ZERO !
|
||
|
END DO !
|
||
|
!
|
||
|
HAR2 = HARTREE * HARTREE !
|
||
|
!
|
||
|
! Coefficients in AU
|
||
|
!
|
||
|
AD(0) = ENE_P_SI * ENE_P_SI / HAR2 !
|
||
|
AD(2) = THIRD * VF_AU * VF_AU !
|
||
|
AD(4) = FOURTH !
|
||
|
!
|
||
|
END SUBROUTINE HYDRODY_DP_3D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE RPA_MOD_DP_1D(RS,T,Q_SI,AD)
|
||
|
!
|
||
|
! This subroutine computes the coefficients of the plasmon dispersion
|
||
|
! within the RPA approach in 1D systems according to:
|
||
|
!
|
||
|
! ENE_Q^2 = AD(0) + AD(1)*Q + AD(2)*Q^2 + AD(3)*Q^3 +
|
||
|
! AD(4)*Q^4 + AD(5)*Q^5 + AD(6)*Q^6
|
||
|
!
|
||
|
! = ALPHA2 + BETA2 * Q^2 + GAMMA2 * Q^4 + DELTA^2 Q^6
|
||
|
!
|
||
|
! where Q = q/ k_F
|
||
|
!
|
||
|
! --> This is the real (q, hbar omega_q) case (no damping)
|
||
|
!
|
||
|
! Warnings: i) all input parameters are in SI units
|
||
|
! ii) in the literature, beta^2 and gamma^2 are given
|
||
|
! in atomic units (AU). Here, we work in SI.
|
||
|
! We recall:
|
||
|
!
|
||
|
! ENE : J --> energy
|
||
|
! Q : 1 / M --> wave vector
|
||
|
! V : M / S --> speed
|
||
|
! OMEGA : 1 / S --> angular momentum
|
||
|
! HBAR : J S --> Planck constant / 2 pi
|
||
|
!
|
||
|
! In order to obtain ENE_Q^2 in J^2, a dimension analysis
|
||
|
! shows that:
|
||
|
!
|
||
|
! BETA2_AU = COEF * V_F^2 --> BETA2_SI = HBAR^2 * BETA2_AU
|
||
|
! GAMMA2_AU = 1/4 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU / M^2
|
||
|
! GAMMA2_AU = COEF * V_F^4 / OMEGA_P^2 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU
|
||
|
!
|
||
|
! Alternatively, we can work in atomic units and then change
|
||
|
! from Hartrees to Joules. This is what is coded here.
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
! * Q_SI : plasmon wave vector in 1/m
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * AD(0:6) : coefficients of the squared dispersion in AU
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 17 Nov 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO,TWO
|
||
|
USE CONSTANTS_P1, ONLY : BOHR
|
||
|
USE CONSTANTS_P2, ONLY : HARTREE
|
||
|
USE FERMI_AU, ONLY : VF_AU
|
||
|
USE CONFIN_VAL, ONLY : R0
|
||
|
USE PLASMON_ENE_SI
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: RS,T,Q_SI
|
||
|
REAL (WP), INTENT(OUT) :: AD(0:6)
|
||
|
!
|
||
|
REAL (WP) :: HAR2,Q,QR0,EN_P2,VF2
|
||
|
!
|
||
|
REAL (WP) :: LOG
|
||
|
!
|
||
|
INTEGER :: I
|
||
|
!
|
||
|
! Initialisations
|
||
|
!
|
||
|
DO I = 0,6 !
|
||
|
AD(I) = ZERO !
|
||
|
END DO !
|
||
|
!
|
||
|
HAR2 = HARTREE * HARTREE !
|
||
|
!
|
||
|
VF2 = VF_AU * VF_AU ! v_F^2 in AU
|
||
|
Q = Q_SI * BOHR ! q in atomic units
|
||
|
QR0 = Q * R0 !
|
||
|
!
|
||
|
EN_P2 = ENE_P_SI * ENE_P_SI / HAR2 ! (plasmon energy)^2 in AU
|
||
|
!
|
||
|
! Coefficients in AU
|
||
|
!
|
||
|
AD(2) = EN_P2 * ( DLOG(TWO / QR0) + VF2 ) !
|
||
|
!
|
||
|
END SUBROUTINE RPA_MOD_DP_1D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE RPA_MOD_DP_2D(X,RS,T,AD)
|
||
|
!
|
||
|
! This subroutine computes the coefficients of the plasmon dispersion
|
||
|
! within the RPA approach in 2D systems according to:
|
||
|
!
|
||
|
! ENE_Q^2 = AD(0) + AD(1)*Q + AD(2)*Q^2 + AD(3)*Q^3 +
|
||
|
! AD(4)*Q^4 + AD(5)*Q^5 + AD(6)*Q^6
|
||
|
!
|
||
|
! = ALPHA2 + BETA2 * Q^2 + GAMMA2 * Q^4 + DELTA^2 Q^6
|
||
|
!
|
||
|
! where Q = q/ k_F
|
||
|
!
|
||
|
! --> This is the real (q, hbar omega_q) case (no damping)
|
||
|
!
|
||
|
! Warnings: i) all input parameters are in SI units
|
||
|
! ii) in the literature, beta^2 and gamma^2 are given
|
||
|
! in atomic units (AU). Here, we work in SI.
|
||
|
! We recall:
|
||
|
!
|
||
|
! ENE : J --> energy
|
||
|
! Q : 1 / M --> wave vector
|
||
|
! V : M / S --> speed
|
||
|
! OMEGA : 1 / S --> angular momentum
|
||
|
! HBAR : J S --> Planck constant / 2 pi
|
||
|
!
|
||
|
! In order to obtain ENE_Q^2 in J^2, a dimension analysis
|
||
|
! shows that:
|
||
|
!
|
||
|
! BETA2_AU = COEF * V_F^2 --> BETA2_SI = HBAR^2 * BETA2_AU
|
||
|
! GAMMA2_AU = 1/4 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU / M^2
|
||
|
! GAMMA2_AU = COEF * V_F^4 / OMEGA_P^2 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU
|
||
|
!
|
||
|
! Alternatively, we can work in atomic units and then change
|
||
|
! from Hartrees to Joules. This is what is coded here.
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * AD(0:6) : coefficients of the squared dispersion in AU
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 17 Nov 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO,TWO
|
||
|
USE CONSTANTS_P1, ONLY : M_E
|
||
|
USE CONSTANTS_P2, ONLY : HARTREE
|
||
|
USE FERMI_SI, ONLY : KF_SI
|
||
|
USE FERMI_AU, ONLY : VF_AU
|
||
|
USE PLASMON_ENE_SI
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: X,RS,T
|
||
|
REAL (WP), INTENT(OUT) :: AD(0:6)
|
||
|
!
|
||
|
REAL (WP) :: Q_SI
|
||
|
REAL (WP) :: HAR2,EN_P2,VF2
|
||
|
!
|
||
|
INTEGER :: I
|
||
|
!
|
||
|
! Initialisations
|
||
|
!
|
||
|
DO I = 0, 6 !
|
||
|
AD(I) = ZERO !
|
||
|
END DO !
|
||
|
!
|
||
|
HAR2 = HARTREE * HARTREE !
|
||
|
!
|
||
|
Q_SI = TWO * X * KF_SI !
|
||
|
!
|
||
|
EN_P2 = ENE_P_SI * ENE_P_SI * Q_SI / HAR2 !
|
||
|
!
|
||
|
VF2 = VF_AU * VF_AU !
|
||
|
!
|
||
|
! Coefficients in AU
|
||
|
!
|
||
|
AD(0) = EN_P2 !
|
||
|
AD(2) = 0.75E0_WP * VF2 !
|
||
|
!
|
||
|
END SUBROUTINE RPA_MOD_DP_2D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE RAJAGOP_DP_2D(X,RS,T,AD)
|
||
|
!
|
||
|
! This subroutine computes the coefficients of the plasmon dispersion
|
||
|
! within the Rajagopal approach in 2D systems according to:
|
||
|
!
|
||
|
! ENE_Q^2 = AD(0) + AD(1)*Q + AD(2)*Q^2 + AD(3)*Q^3 +
|
||
|
! AD(4)*Q^4 + AD(5)*Q^5 + AD(6)*Q^6
|
||
|
!
|
||
|
! = ALPHA2 + BETA2 * Q^2 + GAMMA2 * Q^4 + DELTA^2 Q^6
|
||
|
!
|
||
|
! where Q = q/ k_F
|
||
|
!
|
||
|
! --> This is the real (q, hbar omega_q) case (no damping)
|
||
|
!
|
||
|
! Warnings: i) all input parameters are in SI units
|
||
|
! ii) in the literature, beta^2 and gamma^2 are given
|
||
|
! in atomic units (AU). Here, we work in SI.
|
||
|
! We recall:
|
||
|
!
|
||
|
! ENE : J --> energy
|
||
|
! Q : 1 / M --> wave vector
|
||
|
! V : M / S --> speed
|
||
|
! OMEGA : 1 / S --> angular momentum
|
||
|
! HBAR : J S --> Planck constant / 2 pi
|
||
|
!
|
||
|
! In order to obtain ENE_Q^2 in J^2, a dimension analysis
|
||
|
! shows that:
|
||
|
!
|
||
|
! BETA2_AU = COEF * V_F^2 --> BETA2_SI = HBAR^2 * BETA2_AU
|
||
|
! GAMMA2_AU = 1/4 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU / M^2
|
||
|
! GAMMA2_AU = COEF * V_F^4 / OMEGA_P^2 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU
|
||
|
!
|
||
|
! Alternatively, we can work in atomic units and then change
|
||
|
! from Hartrees to Joules. This is what is coded here.
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * AD(0:6) : coefficients of the squared dispersion in AU
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 17 Nov 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,THREE,FOUR,NINE,TEN
|
||
|
USE PI_ETC, ONLY : PI
|
||
|
USE SQUARE_ROOTS, ONLY : SQR2
|
||
|
USE CONSTANTS_P1, ONLY : M_E
|
||
|
USE CONSTANTS_P2, ONLY : HARTREE
|
||
|
USE FERMI_SI, ONLY : KF_SI
|
||
|
USE FERMI_AU, ONLY : VF_AU
|
||
|
USE PLASMON_ENE_SI
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: X,RS,T
|
||
|
REAL (WP), INTENT(OUT) :: AD(0:6)
|
||
|
!
|
||
|
REAL (WP) :: Q_SI
|
||
|
REAL (WP) :: HAR2,EN_P2,VF2
|
||
|
!
|
||
|
INTEGER :: I
|
||
|
!
|
||
|
! Initialisations
|
||
|
!
|
||
|
DO I = 0, 6 !
|
||
|
AD(I) = ZERO !
|
||
|
END DO !
|
||
|
!
|
||
|
HAR2 = HARTREE * HARTREE !
|
||
|
!
|
||
|
Q_SI = TWO * X * KF_SI !
|
||
|
!
|
||
|
EN_P2 = ENE_P_SI * ENE_P_SI * Q_SI / HAR2 !
|
||
|
!
|
||
|
VF2 = VF_AU * VF_AU !
|
||
|
!
|
||
|
! Coefficients in AU
|
||
|
!
|
||
|
AD(0) = EN_P2 !
|
||
|
AD(2) = EN_P2 * ( THREE * SQR2 / (FOUR * RS) ) * ( & !
|
||
|
ONE - TEN * RS / (NINE * SQR2 * PI) ) !
|
||
|
!
|
||
|
END SUBROUTINE RAJAGOP_DP_2D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE RP2_MOD_DP_3D(RS,T,AD)
|
||
|
!
|
||
|
! This subroutine computes the coefficients of the plasmon dispersion
|
||
|
! within the RPA approach in 3D systems according to:
|
||
|
!
|
||
|
! ENE_Q^2 = AD(0) + AD(1)*Q + AD(2)*Q^2 + AD(3)*Q^3 +
|
||
|
! AD(4)*Q^4 + AD(5)*Q^5 + AD(6)*Q^6
|
||
|
!
|
||
|
! = ALPHA2 + BETA2 * Q^2 + GAMMA2 * Q^4 + DELTA^2 Q^6
|
||
|
!
|
||
|
! where Q = q/ k_F
|
||
|
!
|
||
|
!
|
||
|
! References: (1) Ll. Serra, F. Garcias, M. Barranco, N. Barberan
|
||
|
! and J. Navarro, Phys. Rev. B 44, 1492-1498 (1991)
|
||
|
!
|
||
|
!
|
||
|
! --> This is the real (q, hbar omega_q) case (no damping)
|
||
|
!
|
||
|
! Warnings: i) all input parameters are in SI units
|
||
|
! ii) in the literature, beta^2 and gamma^2 are given
|
||
|
! in atomic units (AU). Here, we work in SI.
|
||
|
! We recall:
|
||
|
!
|
||
|
! ENE : J --> energy
|
||
|
! Q : 1 / M --> wave vector
|
||
|
! V : M / S --> speed
|
||
|
! OMEGA : 1 / S --> angular momentum
|
||
|
! HBAR : J S --> Planck constant / 2 pi
|
||
|
!
|
||
|
! In order to obtain ENE_Q^2 in J^2, a dimension analysis
|
||
|
! shows that:
|
||
|
!
|
||
|
! BETA2_AU = COEF * V_F^2 --> BETA2_SI = HBAR^2 * BETA2_AU
|
||
|
! GAMMA2_AU = 1/4 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU / M^2
|
||
|
! GAMMA2_AU = COEF * V_F^4 / OMEGA_P^2 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU
|
||
|
!
|
||
|
! Alternatively, we can work in atomic units and then change
|
||
|
! from Hartrees to Joules. This is what is coded here.
|
||
|
!
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * AD(0:6) : coefficients of the squared dispersion in AU
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 28 Jul 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO,FOURTH
|
||
|
USE CONSTANTS_P2, ONLY : HARTREE
|
||
|
USE FERMI_AU, ONLY : VF_AU
|
||
|
USE PLASMON_ENE_SI
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: RS,T
|
||
|
REAL (WP), INTENT(OUT) :: AD(0:6)
|
||
|
!
|
||
|
REAL (WP) :: HAR2,VF2,VF4
|
||
|
REAL (WP) :: EN_P2
|
||
|
!
|
||
|
INTEGER :: I
|
||
|
!
|
||
|
! Initialisations
|
||
|
!
|
||
|
DO I = 0, 6 !
|
||
|
AD(I) = ZERO !
|
||
|
END DO !
|
||
|
!
|
||
|
HAR2 = HARTREE * HARTREE !
|
||
|
!
|
||
|
VF2 = VF_AU * VF_AU !
|
||
|
VF4 = VF2 * VF2 !
|
||
|
!
|
||
|
EN_P2 = ENE_P_SI * ENE_P_SI / HAR2 !
|
||
|
!
|
||
|
! Coefficients in AU
|
||
|
!
|
||
|
AD(0) = EN_P2 !
|
||
|
AD(2) = 0.60E0_WP * VF2 !
|
||
|
AD(4) = FOURTH + 12.0E0_WP * VF4 / (175.0E0_WP * EN_P2) !
|
||
|
!
|
||
|
END SUBROUTINE RP2_MOD_DP_3D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE SGBBN_M_DP_3D(R_S,T,AD)
|
||
|
!
|
||
|
! This subroutine computes the coefficients of the plasmon dispersion
|
||
|
! within the SGBBN_M_DISP_3D approach in 3D systems according to:
|
||
|
!
|
||
|
! ENE_Q^2 = AD(0) + AD(1)*Q + AD(2)*Q^2 + AD(3)*Q^3 +
|
||
|
! AD(4)*Q^4 + AD(5)*Q^5 + AD(6)*Q^6
|
||
|
!
|
||
|
! = ALPHA2 + BETA2 * Q^2 + GAMMA2 * Q^4 + DELTA^2 Q^6
|
||
|
!
|
||
|
! where Q = q/ k_F
|
||
|
!
|
||
|
!
|
||
|
! References: (1) Ll. Serra, F. Garcias, M. Barranco, N. Barberan
|
||
|
! and J. Navarro, Phys. Rev. B 44, 1492-1498 (1991)
|
||
|
!
|
||
|
!
|
||
|
! --> This is the real (q, hbar omega_q) case (no damping)
|
||
|
!
|
||
|
! Warnings: i) all input parameters are in SI units
|
||
|
! ii) in the literature, beta^2 and gamma^2 are given
|
||
|
! in atomic units (AU). Here, we work in SI.
|
||
|
! We recall:
|
||
|
!
|
||
|
! ENE : J --> energy
|
||
|
! Q : 1 / M --> wave vector
|
||
|
! V : M / S --> speed
|
||
|
! OMEGA : 1 / S --> angular momentum
|
||
|
! HBAR : J S --> Planck constant / 2 pi
|
||
|
!
|
||
|
! In order to obtain ENE_Q^2 in J^2, a dimension analysis
|
||
|
! shows that:
|
||
|
!
|
||
|
! BETA2_AU = COEF * V_F^2 --> BETA2_SI = HBAR^2 * BETA2_AU
|
||
|
! GAMMA2_AU = 1/4 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU / M^2
|
||
|
! GAMMA2_AU = COEF * V_F^4 / OMEGA_P^2 --> GAMMA2_SI = HBAR^2 * GAMMA2_AU
|
||
|
!
|
||
|
! Alternatively, we can work in atomic units and then change
|
||
|
! from Hartrees to Joules. This is what is coded here.
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * R_S : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * AD(0:6) : coefficients of the squared dispersion in AU
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 8 Dec 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO,ONE,THREE,NINE, &
|
||
|
THIRD,FOURTH,NINTH
|
||
|
USE CONSTANTS_P1, ONLY : BOHR
|
||
|
USE CONSTANTS_P2, ONLY : HARTREE
|
||
|
USE FERMI_AU, ONLY : KF_AU,VF_AU
|
||
|
USE PI_ETC, ONLY : PI
|
||
|
USE PLASMON_ENE_SI
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: R_S,T
|
||
|
REAL (WP), INTENT(OUT) :: AD(0:6)
|
||
|
!
|
||
|
REAL (WP) :: HAR2,VF2,RS
|
||
|
REAL (WP) :: DENOM,XI
|
||
|
REAL (WP) :: BETA
|
||
|
!
|
||
|
INTEGER :: I
|
||
|
!
|
||
|
BETA = NINTH ! Weizsacker coefficient
|
||
|
!
|
||
|
! Initialisations
|
||
|
!
|
||
|
DO I = 0, 6 !
|
||
|
AD(I) = ZERO !
|
||
|
END DO !
|
||
|
!
|
||
|
HAR2 = HARTREE * HARTREE !
|
||
|
RS = R_S ! rs in AU
|
||
|
VF2 = VF_AU * VF_AU ! v_F^2 in AU
|
||
|
DENOM = NINE * (7.8E0_WP+RS)**3 !
|
||
|
XI = 0.88E0_WP * RS * (7.80E0_WP + RS + RS) / DENOM !
|
||
|
!
|
||
|
! Coefficients in AU
|
||
|
!
|
||
|
AD(0) = ENE_P_SI * ENE_P_SI / HAR2 !
|
||
|
AD(2) = (THIRD * VF2 - VF_AU / (THREE * PI) - XI) !
|
||
|
AD(4) = FOURTH * BETA !
|
||
|
AD(6) = ONE / (270.0E0_WP * VF2) !
|
||
|
!
|
||
|
END SUBROUTINE SGBBN_M_DP_3D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE SUMRULE1_DP_3D(X,OM12)
|
||
|
!
|
||
|
! This subroutine computes the coefficients of the plasmon dispersion
|
||
|
! within the 3rd-frequency sum rule approach in 3D systems.
|
||
|
!
|
||
|
! --> This is the real (q, hbar omega_q) case (no damping)
|
||
|
!
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * OM12 : squared dispersion frequency in SI
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 23 Nov 2020
|
||
|
!
|
||
|
!
|
||
|
USE CONSTANTS_P1, ONLY : H_BAR
|
||
|
USE LOSS_MOMENTS
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: X
|
||
|
REAL (WP), INTENT(OUT) :: OM12
|
||
|
!
|
||
|
REAL (WP) :: C0,C2,C4
|
||
|
!
|
||
|
! Computing the moments of the loss function
|
||
|
!
|
||
|
CALL LOSS_MOMENTS_AN(X,C0,C2,C4) !
|
||
|
!
|
||
|
! Squared energy in SI
|
||
|
!
|
||
|
OM12 = H_BAR * H_BAR * C2 / C0 !
|
||
|
!
|
||
|
END SUBROUTINE SUMRULE1_DP_3D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE SUMRULE3_DP_3D(X,OM22)
|
||
|
!
|
||
|
! This subroutine computes the coefficients of the plasmon dispersion
|
||
|
! within the 3rd-frequency sum rule approach in 3D systems.
|
||
|
!
|
||
|
! --> This is the real (q, hbar omega_q) case (no damping)
|
||
|
!
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * OM22 : squared dispersion frequency in SI
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 23 Nov 2020
|
||
|
!
|
||
|
!
|
||
|
USE CONSTANTS_P1, ONLY : H_BAR
|
||
|
USE LOSS_MOMENTS
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: X
|
||
|
REAL (WP), INTENT(OUT) :: OM22
|
||
|
!
|
||
|
REAL (WP) :: C0,C2,C4
|
||
|
!
|
||
|
! Computing the moments of the loss function
|
||
|
!
|
||
|
CALL LOSS_MOMENTS_AN(X,C0,C2,C4) !
|
||
|
!
|
||
|
! Squared energy in SI
|
||
|
!
|
||
|
OM22 = H_BAR * H_BAR * C4 / C2 !
|
||
|
!
|
||
|
END SUBROUTINE SUMRULE3_DP_3D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE PLASMON_DISP_3D_2(X,RS,T,PL_DISP,ENE_P_Q)
|
||
|
!
|
||
|
! This subroutine computes the plasmon dispersion omega(q)
|
||
|
! in the form
|
||
|
!
|
||
|
! Reference: (1) S. Ichimaru, Rev. Mod. Phys. 54, 1018-1059 (1982)
|
||
|
!
|
||
|
!
|
||
|
! 2
|
||
|
! ( q )
|
||
|
! omega(q) = omega_p + 2 alpha omega_F ( ----- )
|
||
|
! ( k_F )
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
! * PL_DISP : method used to compute the dispersion (3D)
|
||
|
! PL_DISP = 'RP1_MOD' RPA model up to q^2
|
||
|
! PL_DISP = 'AL0_MOD' gamma_0 limit
|
||
|
! PL_DISP = 'ALI_MOD' gamma_inf limit
|
||
|
! PL_DISP = 'NOP_MOD' Nozières-Pines model
|
||
|
! PL_DISP = 'UTI_MOD' Utsumi-Ichimaru model
|
||
|
! PL_DISP = 'TWA_MOD' Toigo-Woodruff model
|
||
|
!
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * ENE_P_Q : plasmon energy at q in J
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 7 Dec 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOURTH,FIFTH
|
||
|
USE SQUARE_ROOTS, ONLY : SQR2
|
||
|
USE CONSTANTS_P1, ONLY : H_BAR
|
||
|
USE FERMI_SI, ONLY : EF_SI
|
||
|
USE PLASMON_ENE_SI
|
||
|
USE UTIC_PARAMETERS, ONLY : UTIC_PARAM
|
||
|
USE ASYMPT, ONLY : G0,GI
|
||
|
USE EXT_FUNCTIONS, ONLY : PDF ! Plasma dispersion function Z(x)
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
CHARACTER (LEN = 7) :: PL_DISP
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: X,RS,T
|
||
|
REAL (WP), INTENT(OUT) :: ENE_P_Q
|
||
|
!
|
||
|
REAL (WP) :: Y
|
||
|
REAL (WP) :: OMP,OMF,RPF,RFP
|
||
|
REAL (WP) :: AL_RPA,ALPHA
|
||
|
REAL (WP) :: OMQ,OM0
|
||
|
REAL (WP) :: R1,R2,W
|
||
|
!
|
||
|
Y = X + X ! Y = q / k_F
|
||
|
!
|
||
|
OMP = ENE_P_SI / H_BAR ! omega_p in SI
|
||
|
OMF = EF_SI / H_BAR ! omega_F in SI
|
||
|
RPF = OMP / OMF !
|
||
|
RFP = OMF / OMP !
|
||
|
!
|
||
|
! Computing alpha
|
||
|
!
|
||
|
AL_RPA = THREE * FIFTH * RFP !
|
||
|
!
|
||
|
IF(PL_DISP == 'RP1_MOD') THEN !
|
||
|
ALPHA = AL_RPA ! ref. (1) eq. (3.97)
|
||
|
ELSE IF(PL_DISP == 'AL0_MOD') THEN !
|
||
|
ALPHA = AL_RPA - FOURTH * RPF * G0 ! ref. (1) eq. (3.98)
|
||
|
ELSE IF(PL_DISP == 'ALI_MOD') THEN !
|
||
|
ALPHA = AL_RPA - FOURTH * RPF * GI ! ref. (1) eq. (3.100)
|
||
|
ELSE IF(PL_DISP == 'NOP_MOD') THEN !
|
||
|
ALPHA = AL_RPA - THREE * RPF / 80.0E0_WP ! ref. (1) eq. (3.101)
|
||
|
ELSE IF(PL_DISP == 'UTI_MOD') THEN !
|
||
|
!
|
||
|
! Computing the Utsumi-Ichimaru parameters Omega(q) and Omega(0)
|
||
|
!
|
||
|
CALL UTIC_PARAM(X,RS,T,OMQ,OM0) !
|
||
|
!
|
||
|
R1 = OMP / OM0 ! argument of W
|
||
|
R2 = R1 / SQR2 ! argument of Z
|
||
|
!
|
||
|
! Computing the W function
|
||
|
!
|
||
|
W = ONE + R1 * REAL(PDF(R2),KIND = WP) !
|
||
|
!
|
||
|
ALPHA = AL_RPA - FOURTH * RPF * (GI * (G0 - GI) * W) ! ref. (1) eq. (3.96)
|
||
|
ELSE IF(PL_DISP == 'TWA_MOD') THEN !
|
||
|
ALPHA = AL_RPA - RPF / 16.0E0_WP ! ref. (1) eq. (3.99)
|
||
|
END IF !
|
||
|
!
|
||
|
ENE_P_Q = H_BAR * (OMP + TWO * ALPHA * OMF * Y * Y) ! ref. (1) eq. (3.95)
|
||
|
!
|
||
|
END SUBROUTINE PLASMON_DISP_3D_2
|
||
|
!
|
||
|
END MODULE PLASMON_DISP_REAL
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
MODULE PLASMON_DISP_CPLX
|
||
|
!
|
||
|
! This module computes analytical plasmon dispersion with damping
|
||
|
!
|
||
|
USE ACCURACY_REAL
|
||
|
!
|
||
|
CONTAINS
|
||
|
!
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE PLASMON_DISP_D_2D(PL_DISP,Q,RS,T,MASS_E,TAU, &
|
||
|
ENE_Q,Q_STAR)
|
||
|
!
|
||
|
! This subroutine computes the plasmon dispersion relation with damping
|
||
|
! for different cases, in the 2D case
|
||
|
!
|
||
|
! Warning: all input parameters are in SI units
|
||
|
!
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * PL_DISP : method used to compute the dispersion
|
||
|
! PL_DISP = 'GIQUI_D' Jewsbury' model
|
||
|
! * Q : plasmon wave vector
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in Kelvin
|
||
|
! * MASS_E : mass enhancement m*/m
|
||
|
! * TAU : relaxation time (used for damping) in SI
|
||
|
!
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * ENE_Q : plasmon energy at q in J * 1 / bar
|
||
|
! * Q_STAR : critical vector (2D) before which
|
||
|
! no plasmon can be excited
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 5 Jun 2020
|
||
|
!
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
CHARACTER (LEN = 7) :: PL_DISP
|
||
|
!
|
||
|
REAL (WP) :: RS,T,MASS_E,TAU
|
||
|
REAL (WP) :: Q_STAR
|
||
|
!
|
||
|
COMPLEX (WP) :: Q,ENE_Q
|
||
|
!
|
||
|
IF(PL_DISP == 'GIQUI_D') THEN !
|
||
|
!
|
||
|
CALL GIQUI_D_DP_2D(Q,RS,T,MASS_E,TAU,ENE_Q,Q_STAR) !
|
||
|
!
|
||
|
END IF !
|
||
|
!
|
||
|
END SUBROUTINE PLASMON_DISP_D_2D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE PLASMON_DISP_D_3D(PL_DISP,Q,RS,T,TAU,ENE_Q)
|
||
|
!
|
||
|
! This subroutine computes the plasmon dispersion relation with damping
|
||
|
! for different cases, in the 3D case
|
||
|
!
|
||
|
! Warning: all input parameters are in SI units
|
||
|
!
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * PL_DISP : method used to compute the dispersion
|
||
|
! PL_DISP = 'JEWSB_D' Jewsbury' model
|
||
|
! PL_DISP = 'HALEV_D' Halevi model
|
||
|
! * Q : plasmon wave vector
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in Kelvin
|
||
|
! * TAU : relaxation time (used for damping) in SI
|
||
|
!
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * ENE_Q : plasmon energy at q in J * 1 / bar
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 5 Jun 2020
|
||
|
!
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
CHARACTER (LEN = 7) :: PL_DISP
|
||
|
!
|
||
|
REAL (WP) :: RS,T,TAU
|
||
|
!
|
||
|
COMPLEX (WP) :: Q,ENE_Q
|
||
|
!
|
||
|
IF(PL_DISP == 'JEWSB_D') THEN !
|
||
|
!
|
||
|
CALL JEWSB_D_DP_3D(Q,RS,T,ENE_Q) !
|
||
|
!
|
||
|
ELSEIF(PL_DISP == 'HALEV_D') THEN !
|
||
|
!
|
||
|
CALL HALEV_D_DP_3D(Q,RS,TAU,ENE_Q) !
|
||
|
!
|
||
|
ENDIF !
|
||
|
!
|
||
|
END SUBROUTINE PLASMON_DISP_D_3D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE GIQUI_D_DP_2D(Q,RS,T,MASS_E,TAU,ENE_Q,Q_STAR)
|
||
|
!
|
||
|
! This subroutine computes the plasmon dispersion relation with damping
|
||
|
! for different cases, up to order 2 in q. The dispersion is written as
|
||
|
!
|
||
|
! ENE_Q^2 = ALPHA2 + BETA2 * Q^2
|
||
|
!
|
||
|
! --> This is the complex (q, hbar omega_q) case (includes damping)
|
||
|
!
|
||
|
! Warning: all input parameters are in SI units
|
||
|
!
|
||
|
!
|
||
|
! References: (1) L. Kong, B. Yan and X. Hu, Plasma Science and
|
||
|
! Technology 9, 519 (2007)
|
||
|
! (2) G. F. Giuliani and J. J. Quinn, Phys. Rev. B 26,
|
||
|
! 4421 (1982)
|
||
|
!
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * Q : plasmon wave vector
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in Kelvin
|
||
|
! * MASS_E : mass enhancement m*/m
|
||
|
! * TAU : relaxation time (used for damping) in SI
|
||
|
!
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * ENE_Q : plasmon energy at q in J * 1 / bar
|
||
|
! * Q_STAR : critical vector (2D) before which
|
||
|
! no plasmon can be excited
|
||
|
!
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 5 Jun 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO
|
||
|
USE COMPLEX_NUMBERS, ONLY : ZEROC,IC
|
||
|
USE CONSTANTS_P1, ONLY : BOHR
|
||
|
USE CONSTANTS_P2, ONLY : HARTREE
|
||
|
USE FERMI_SI, ONLY : VF_SI
|
||
|
USE PLASMON_ENE_SI
|
||
|
!
|
||
|
USE DISP_COEF_COMP
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
INTEGER :: BYPASS,I
|
||
|
!
|
||
|
REAL (WP) :: RS,T
|
||
|
REAL (WP) :: ENE_P2,VF2
|
||
|
REAL (WP) :: MASS_E,TAU
|
||
|
REAL (WP) :: K,Q_STAR
|
||
|
!
|
||
|
COMPLEX (WP) :: Q,Q2,Q4,Q6,ENE_Q,ENE2,X
|
||
|
COMPLEX (WP) :: ALPHA2,BETA2,GAMMA2
|
||
|
!
|
||
|
! Initialisation
|
||
|
!
|
||
|
Q_STAR=ZERO !
|
||
|
BYPASS=0 !
|
||
|
ALPHA2=ZEROC !
|
||
|
BETA2=ZEROC !
|
||
|
GAMMA2=ZEROC !
|
||
|
!
|
||
|
DO I=0,6 !
|
||
|
AC(I)=ZEROC !
|
||
|
END DO !
|
||
|
!
|
||
|
Q2=Q*Q !
|
||
|
Q4=Q2*Q2 !
|
||
|
Q6=Q4*Q2 !
|
||
|
!
|
||
|
VF2=VF_SI*VF_SI !
|
||
|
!
|
||
|
! Initialization of ALPHA2 = (hbar omega_p)^2
|
||
|
!
|
||
|
ENE_P2=ENE_P_SI*ENE_P_SI !
|
||
|
ALPHA2=ENE_P2 !
|
||
|
! ! mass-renormalized
|
||
|
K=MASS_E*TWO/BOHR ! Thomas-Fermi vector
|
||
|
X=Q/K !
|
||
|
ENE_Q=DCMPLX((ONE+X)/(TWO+X))* & !
|
||
|
(CDSQRT(X*(TWO+X)*VF2*K*K - & !
|
||
|
ONE/(TAU*TAU)) - IC/TAU) !
|
||
|
BYPASS=1 !
|
||
|
Q_STAR=K*(DSQRT(ONE + ONE/(VF2*K*K*TAU*TAU)) - ONE) !
|
||
|
!
|
||
|
! Dispersion relation:
|
||
|
!
|
||
|
IF(BYPASS == 0) THEN !
|
||
|
!
|
||
|
AC(1)=ALPHA2 !
|
||
|
AC(2)=BETA2 !
|
||
|
AC(4)=GAMMA2 !
|
||
|
!
|
||
|
END IF !
|
||
|
|
||
|
END SUBROUTINE GIQUI_D_DP_2D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE HALEV_D_DP_3D(Q,RS,TAU,ENE_Q)
|
||
|
!
|
||
|
! This subroutine computes the plasmon dispersion relation with damping
|
||
|
! for different cases, up to order 2 in q. The dispersion is written as
|
||
|
!
|
||
|
! ENE_Q^2 = ALPHA2 + BETA2 * Q^2
|
||
|
!
|
||
|
! --> This is the complex (q, hbar omega_q) case (includes damping)
|
||
|
!
|
||
|
! Warning: all input parameters are in SI units
|
||
|
!
|
||
|
!
|
||
|
! Input parameters:
|
||
|
! * Q : plasmon wave vector
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in Kelvin
|
||
|
! * TAU : relaxation time (used for damping) in SI
|
||
|
!
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * ENE_Q : plasmon energy at q in J * 1 / bar
|
||
|
!
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 5 Jun 2020
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO,ONE,THREE,FOUR,TEN, &
|
||
|
HALF
|
||
|
USE COMPLEX_NUMBERS, ONLY : ZEROC,IC
|
||
|
USE CONSTANTS_P1, ONLY : BOHR,H_BAR
|
||
|
USE FERMI_SI, ONLY : VF_SI
|
||
|
USE PLASMON_ENE_SI
|
||
|
!
|
||
|
USE DISP_COEF_COMP
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
INTEGER :: BYPASS,I
|
||
|
!
|
||
|
REAL (WP) :: RS,T
|
||
|
REAL (WP) :: ENE_P2,VF2
|
||
|
REAL (WP) :: TAU
|
||
|
REAL (WP) :: GAMMA,O_P2
|
||
|
!
|
||
|
COMPLEX (WP) :: Q,Q2,ENE_Q,RAT
|
||
|
COMPLEX (WP) :: ALPHA2,BETA2,GAMMA2,DELTA2
|
||
|
!
|
||
|
! Initialisation
|
||
|
!
|
||
|
BYPASS=0 !
|
||
|
ALPHA2=ZEROC !
|
||
|
BETA2=ZEROC !
|
||
|
GAMMA2=ZEROC !
|
||
|
DELTA2=ZEROC !
|
||
|
!
|
||
|
DO I=0,6 !
|
||
|
AC(I)=ZEROC !
|
||
|
END DO !
|
||
|
!
|
||
|
Q2=Q*Q !
|
||
|
!
|
||
|
VF2=VF_SI*VF_SI !
|
||
|
!
|
||
|
! Initialization of ALPHA2 = (hbar omega_p)^2
|
||
|
!
|
||
|
ENE_P2=ENE_P_SI*ENE_P_SI !
|
||
|
ALPHA2=ENE_P2 !
|
||
|
!
|
||
|
GAMMA=ONE/TAU !
|
||
|
O_P2=ENE_P2/(H_BAR*H_BAR) !
|
||
|
RAT=Q2*VF2/O_P2 !
|
||
|
!
|
||
|
!
|
||
|
ENE_Q=DSQRT(ENE_P2) + THREE*DSQRT(ENE_P2)*RAT/TEN - & !
|
||
|
IC*HALF*GAMMA*(ONE+FOUR*RAT/15.0E0_WP) !
|
||
|
!
|
||
|
! Dispersion relation:
|
||
|
!
|
||
|
IF(BYPASS == 0) THEN !
|
||
|
AC(0)=ALPHA2 !
|
||
|
AC(2)=BETA2 !
|
||
|
AC(4)=GAMMA2 !
|
||
|
AC(6)=DELTA2 !
|
||
|
END IF !
|
||
|
!
|
||
|
END SUBROUTINE HALEV_D_DP_3D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE JEWSB_D_DP_3D(Q,RS,T,ENE_Q)
|
||
|
!
|
||
|
! This subroutine computes the plasmon dispersion relation with damping
|
||
|
! for different cases, up to order 2 in q. The dispersion is written as
|
||
|
!
|
||
|
! ENE_Q^2 = ALPHA2 + BETA2 * Q^2
|
||
|
!
|
||
|
! --> This is the complex (q, hbar omega_q) case (includes damping)
|
||
|
!
|
||
|
! Warning: all input parameters are in SI units
|
||
|
!
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * Q : complex plasmon wave vector
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in Kelvin
|
||
|
!
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * ENE_Q : plasmon energy at q in J * 1 / bar
|
||
|
!
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 5 Jun 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : TWO,FIVE,SIX, &
|
||
|
HALF,FOURTH
|
||
|
USE COMPLEX_NUMBERS
|
||
|
USE CONSTANTS_P1, ONLY : BOHR
|
||
|
USE FERMI_SI, ONLY : EF_SI,KF_SI
|
||
|
USE PLASMON_ENE_SI
|
||
|
!
|
||
|
USE DISP_COEF_COMP
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
INTEGER :: BYPASS,I
|
||
|
!
|
||
|
REAL (WP) :: RS,T
|
||
|
REAL (WP) :: G1,BG0,BG1
|
||
|
REAL (WP) :: NUM,DENOM
|
||
|
REAL (WP) :: KF2,EF2
|
||
|
!
|
||
|
COMPLEX (WP) :: Q,Q2,Q4,Q6,ENE_Q,ENE2
|
||
|
COMPLEX (WP) :: A,B,ALPHA2,BETA2,GAMMA2,DELTA2
|
||
|
!
|
||
|
! Initialisation
|
||
|
!
|
||
|
BYPASS=0 !
|
||
|
ALPHA2=ZEROC !
|
||
|
BETA2=ZEROC !
|
||
|
GAMMA2=ZEROC !
|
||
|
DELTA2=ZEROC !
|
||
|
!
|
||
|
DO I=0,6 !
|
||
|
AC(I)=ZEROC !
|
||
|
END DO !
|
||
|
!
|
||
|
Q2=Q*Q !
|
||
|
Q4=Q2*Q2 !
|
||
|
Q6=Q4*Q2 !
|
||
|
!
|
||
|
KF2=KF_SI*KF_SI !
|
||
|
EF2=EF_SI*EF_SI !
|
||
|
!
|
||
|
! Initialization of ALPHA2 = (hbar omega_p)^2
|
||
|
!
|
||
|
ALPHA2=ENE_P_SI*ENE_P_SI !
|
||
|
!
|
||
|
G1=FOURTH+0.00636E0_WP*RS !
|
||
|
BG0=0.033E0_WP*RS !
|
||
|
BG1=0.15E0_WP*DSQRT(RS) !
|
||
|
NUM=SIX*EF2 !
|
||
|
DENOM=FIVE*ENE_P_SI*ENE_P_SI !
|
||
|
A=(ONEC-HALF*IC*BG0) !
|
||
|
B=(NUM/DENOM-HALF*(G1+IC*BG1))/KF2 !
|
||
|
!
|
||
|
ALPHA2=DCMPLX(A*A)*ENE_P_SI*ENE_P_SI !
|
||
|
BETA2=DCMPLX(TWO*A*B) !
|
||
|
GAMMA2=DCMPLX(B*B) !
|
||
|
!
|
||
|
!
|
||
|
! Dispersion relation:
|
||
|
!
|
||
|
IF(BYPASS == 0) THEN !
|
||
|
AC(0)=ALPHA2 !
|
||
|
AC(2)=BETA2 !
|
||
|
AC(4)=GAMMA2 !
|
||
|
AC(6)=DELTA2 !
|
||
|
END IF !
|
||
|
!
|
||
|
ENE2=AC(0)+AC(1)*Q+AC(2)*Q2+AC(3)*Q*Q2+AC(4)*Q4+ & !
|
||
|
AC(5)*Q*Q4+AC(6)*Q6 !
|
||
|
!
|
||
|
ENE_Q=CDSQRT(ENE2) !
|
||
|
!
|
||
|
END SUBROUTINE JEWSB_D_DP_3D
|
||
|
!
|
||
|
END MODULE PLASMON_DISP_CPLX
|