405 lines
14 KiB
Fortran
405 lines
14 KiB
Fortran
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
MODULE GAMMA_ASYMPT
|
||
|
!
|
||
|
USE ACCURACY_REAL
|
||
|
!
|
||
|
! It contains the following functions/subroutines:
|
||
|
!
|
||
|
! * FUNCTION GAMMA_0_3D(RS,T)
|
||
|
!
|
||
|
! * FUNCTION GAMMA_I_3D(RS,T)
|
||
|
!
|
||
|
! * FUNCTION GAMMA_0_2D(RS,T)
|
||
|
!
|
||
|
! * FUNCTION GAMMA_I_2D(RS,T)
|
||
|
!
|
||
|
! * FUNCTION G0_INF_2D(X,RS,T)
|
||
|
!
|
||
|
!
|
||
|
CONTAINS
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
FUNCTION GAMMA_0_3D(RS,T)
|
||
|
!
|
||
|
! This function computes the coefficient gamma0 so that:
|
||
|
!
|
||
|
! lim (q --> 0) G(q) = gamma_0 (q / k_F)^2
|
||
|
!
|
||
|
!
|
||
|
! References: (1) S. Ichimaru, Rev. Mod. Phys. 54, 1017-1059 (1982)
|
||
|
! (3) K. Utsumi and S. Ichimaru, Phys. Rev. B 22, 1522-1533 (1980)
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature (SI)
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 2 Dec 2020
|
||
|
!
|
||
|
!
|
||
|
USE LF_VALUES, ONLY : GQ_TYPE,G0_TYPE
|
||
|
USE SF_VALUES, ONLY : SQ_TYPE
|
||
|
USE ENERGIES, ONLY : EC_TYPE
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : TWO,FOUR,HALF,FOURTH
|
||
|
USE PI_ETC, ONLY : PI
|
||
|
USE FERMI_SI, ONLY : KF_SI
|
||
|
USE UTILITIES_1, ONLY : ALFA
|
||
|
USE CORRELATION_ENERGIES, ONLY : DERIVE_EC_3D
|
||
|
USE SCREENING_VEC, ONLY : THOMAS_FERMI_VECTOR
|
||
|
USE SPECIFIC_INT_2
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
INTEGER :: IN_MODE,NMAX
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: RS,T
|
||
|
REAL (WP) :: GAMMA_0_3D
|
||
|
!
|
||
|
REAL (WP) :: ALPHA
|
||
|
REAL (WP) :: RS2,RS3
|
||
|
REAL (WP) :: D_EC_1,D_EC_2
|
||
|
REAL (WP) :: KS,X_TF
|
||
|
REAL (WP) :: X_MAX,IN
|
||
|
!
|
||
|
IF(G0_TYPE == 'EC') THEN !
|
||
|
!
|
||
|
ALPHA = ALFA('3D') !
|
||
|
RS2 = RS * RS !
|
||
|
RS3 = RS2 * RS !
|
||
|
!
|
||
|
! Computing the correlation energy derivatives
|
||
|
!
|
||
|
CALL DERIVE_EC_3D(EC_TYPE,1,5,RS,T,D_EC_1,D_EC_2) !
|
||
|
!
|
||
|
GAMMA_0_3D = FOURTH - (PI * ALPHA / 24.0E0_WP) * & ! ref. (1) eq. (3.30a)
|
||
|
(RS3 * D_EC_2 - TWO * RS2 * D_EC_1) !
|
||
|
!
|
||
|
ELSE IF(G0_TYPE == 'SQ') THEN !
|
||
|
!
|
||
|
IN_MODE = 2 !
|
||
|
NMAX = 1000 ! number of integration points
|
||
|
X_MAX = 50.0E0_WP !
|
||
|
!
|
||
|
! Computing Thomas-Fermi screening vector
|
||
|
!
|
||
|
CALL THOMAS_FERMI_VECTOR('3D',KS) !
|
||
|
X_TF = KS / KF_SI ! q_{TF} / k_F
|
||
|
!
|
||
|
! Computing the integral
|
||
|
!
|
||
|
CALL INT_SQM1(NMAX,X_MAX,IN_MODE,RS,T,X_TF,0,SQ_TYPE, & !
|
||
|
GQ_TYPE,IN)
|
||
|
!
|
||
|
GAMMA_0_3D = - HALF * IN ! ref. (3) eq. (5.5)
|
||
|
!
|
||
|
END IF !
|
||
|
!
|
||
|
END FUNCTION GAMMA_0_3D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
FUNCTION GAMMA_I_3D(RS,T)
|
||
|
!
|
||
|
! This function computes the coefficient gamma_i so that:
|
||
|
!
|
||
|
! lim (q --> 0) I(q) = gamma_i (q / k_F)^2 --> 3D
|
||
|
!
|
||
|
!
|
||
|
! References: (1) S. Ichimaru, Rev. Mod. Phys. 54, 1017-1059 (1982)
|
||
|
! (2) N. Iwamoto, Phys. Rev. A 30, 3289-3304 (1984)
|
||
|
! (3) K. Utsumi and S. Ichimaru, Phys. Rev. B 22, 1522-1533 (1980)
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature (SI)
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 2 Dec 2020
|
||
|
!
|
||
|
!
|
||
|
USE LF_VALUES, ONLY : GQ_TYPE,GI_TYPE
|
||
|
USE SF_VALUES, ONLY : SQ_TYPE
|
||
|
USE ENERGIES, ONLY : EC_TYPE
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : TWO,FOUR,TEN,FIFTH
|
||
|
USE PI_ETC, ONLY : PI
|
||
|
USE FERMI_SI, ONLY : KF_SI
|
||
|
USE UTILITIES_1, ONLY : ALFA
|
||
|
USE CORRELATION_ENERGIES, ONLY : DERIVE_EC_3D,EC_3D
|
||
|
USE SCREENING_VEC, ONLY : THOMAS_FERMI_VECTOR
|
||
|
USE SPECIFIC_INT_2
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
INTEGER :: IN_MODE,NMAX
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: RS,T
|
||
|
REAL (WP) :: GAMMA_I_3D
|
||
|
!
|
||
|
REAL (WP) :: ALPHA
|
||
|
REAL (WP) :: RS2
|
||
|
REAL (WP) :: EC,D_EC_1,D_EC_2
|
||
|
REAL (WP) :: KS,X_TF
|
||
|
REAL (WP) :: X_MAX,IN
|
||
|
!
|
||
|
IF(GI_TYPE == 'EC') THEN !
|
||
|
!
|
||
|
ALPHA = ALFA('3D') !
|
||
|
RS2 = RS * RS !
|
||
|
!
|
||
|
! Computing the correlation energy derivatives
|
||
|
!
|
||
|
EC = EC_3D(EC_TYPE,1,RS,T) !
|
||
|
CALL DERIVE_EC_3D(EC_TYPE,1,5,RS,T,D_EC_1,D_EC_2) !
|
||
|
!
|
||
|
GAMMA_I_3D = 0.15E0_WP - (PI * ALPHA / TEN) * & ! ref. (1) eq. (3.30b)
|
||
|
(RS2 * D_EC_1 + TWO* RS * EC) !
|
||
|
!
|
||
|
ELSE IF(GI_TYPE == 'SQ') THEN !
|
||
|
!
|
||
|
IN_MODE = 1 !
|
||
|
NMAX = 1000 ! number of integration points
|
||
|
X_MAX = 50.0E0_WP !
|
||
|
!
|
||
|
! Computing Thomas-Fermi screening vector
|
||
|
!
|
||
|
CALL THOMAS_FERMI_VECTOR('3D',KS) !
|
||
|
X_TF = KS / KF_SI ! q_{TF} / k_F
|
||
|
!
|
||
|
! Computing the integral
|
||
|
!
|
||
|
CALL INT_SQM1(NMAX,X_MAX,IN_MODE,RS,T,X_TF,0,SQ_TYPE, & !
|
||
|
GQ_TYPE,IN)
|
||
|
!
|
||
|
GAMMA_I_3D = - FIFTH * IN ! ref. (3) eq. (5.6)
|
||
|
!
|
||
|
END IF !
|
||
|
!
|
||
|
END FUNCTION GAMMA_I_3D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
FUNCTION GAMMA_0_2D(RS,T)
|
||
|
!
|
||
|
! This function computes the coefficient gamma0 so that:
|
||
|
!
|
||
|
! lim (q --> 0) G(q) = gamma_i (q / k_F) --> 2D
|
||
|
!
|
||
|
!
|
||
|
! References: (2) N. Iwamoto, Phys. Rev. A 30, 3289-3304 (1984)
|
||
|
! (3) K. Utsumi and S. Ichimaru, Phys. Rev. B 22, 1522-1533 (1980)
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature (SI)
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 3 Dec 2020
|
||
|
!
|
||
|
!
|
||
|
USE LF_VALUES, ONLY : GQ_TYPE,G0_TYPE
|
||
|
USE SF_VALUES, ONLY : SQ_TYPE
|
||
|
USE ENERGIES, ONLY : EC_TYPE
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ONE,HALF,EIGHTH
|
||
|
USE PI_ETC, ONLY : PI_INV
|
||
|
USE FERMI_SI, ONLY : KF_SI
|
||
|
USE UTILITIES_1, ONLY : ALFA
|
||
|
USE CORRELATION_ENERGIES, ONLY : DERIVE_EC_2D
|
||
|
USE ENERGIES, ONLY : EC_TYPE
|
||
|
USE SCREENING_VEC, ONLY : THOMAS_FERMI_VECTOR
|
||
|
USE SPECIFIC_INT_2
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
INTEGER :: IN_MODE,NMAX
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: RS,T
|
||
|
REAL (WP) :: GAMMA_0_2D
|
||
|
!
|
||
|
REAL (WP) :: ALPHA,RS2,RS3
|
||
|
REAL (WP) :: D_EC_1,D_EC_2
|
||
|
REAL (WP) :: KS,X_TF
|
||
|
REAL (WP) :: X_MAX,IN
|
||
|
!
|
||
|
IF(G0_TYPE == 'EC') THEN !
|
||
|
!
|
||
|
ALPHA = ALFA('2D') !
|
||
|
RS2 = RS * RS !
|
||
|
RS3 = RS2 * RS !
|
||
|
!
|
||
|
! Computing the correlation energy derivatives
|
||
|
!
|
||
|
CALL DERIVE_EC_2D(EC_TYPE,1,RS,T,D_EC_1,D_EC_2) !
|
||
|
!
|
||
|
GAMMA_0_2D = PI_INV + EIGHTH * ALPHA * ( & !
|
||
|
RS2 * D_EC_1 - RS3 * D_EC_2 & ! ref. (1) eq. (3.6c)
|
||
|
) !
|
||
|
!
|
||
|
ELSE IF(G0_TYPE == 'SQ') THEN !
|
||
|
!
|
||
|
IN_MODE = 2 !
|
||
|
NMAX = 1000 ! number of integration points
|
||
|
X_MAX = 50.0E0_WP !
|
||
|
!
|
||
|
! Computing Thomas-Fermi screening vector
|
||
|
!
|
||
|
CALL THOMAS_FERMI_VECTOR('2D',KS) !
|
||
|
X_TF = KS / KF_SI ! q_{TF} / k_F
|
||
|
!
|
||
|
! Computing the integral
|
||
|
!
|
||
|
CALL INT_SQM1(NMAX,X_MAX,IN_MODE,RS,T,X_TF,0,SQ_TYPE, & !
|
||
|
GQ_TYPE,IN)
|
||
|
!
|
||
|
GAMMA_0_2D = - HALF * IN ! ref. (3) eq. (5.5)
|
||
|
!
|
||
|
END IF !
|
||
|
!
|
||
|
END FUNCTION GAMMA_0_2D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
FUNCTION GAMMA_I_2D(RS,T)
|
||
|
!
|
||
|
! This function computes the coefficient gamma0 so that:
|
||
|
!{\bf 33}
|
||
|
! lim (q --> 0) I(q) = gamma_i (q / k_F) --> 2D
|
||
|
!
|
||
|
!
|
||
|
! References: (2) N. Iwamoto, Phys. Rev. A 30, 3289-3304 (1984)
|
||
|
! (3) K. Utsumi and S. Ichimaru, Phys. Rev. B 22, 1522-1533 (1980)
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature (SI)
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 3 Dec 2020
|
||
|
!
|
||
|
!
|
||
|
USE LF_VALUES, ONLY : GQ_TYPE,GI_TYPE
|
||
|
USE SF_VALUES, ONLY : SQ_TYPE
|
||
|
USE ENERGIES, ONLY : EC_TYPE
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : TWO,FIVE,SIX,FIFTH
|
||
|
USE PI_ETC, ONLY : PI_INV
|
||
|
USE FERMI_SI, ONLY : KF_SI
|
||
|
USE UTILITIES_1, ONLY : ALFA
|
||
|
USE CORRELATION_ENERGIES, ONLY : DERIVE_EC_2D,EC_2D
|
||
|
USE ENERGIES, ONLY : EC_TYPE
|
||
|
USE SCREENING_VEC, ONLY : THOMAS_FERMI_VECTOR
|
||
|
USE SPECIFIC_INT_2
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
INTEGER :: IN_MODE,NMAX
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: RS,T
|
||
|
REAL (WP) :: GAMMA_I_2D
|
||
|
!
|
||
|
REAL (WP) :: ALPHA,RS2
|
||
|
REAL (WP) :: EC,D_EC_1,D_EC_2
|
||
|
REAL (WP) :: KS,X_TF
|
||
|
REAL (WP) :: X_MAX,IN
|
||
|
!
|
||
|
IF(GI_TYPE == 'EC') THEN !
|
||
|
!
|
||
|
ALPHA = ALFA('3D') !
|
||
|
RS2 = RS * RS !
|
||
|
!
|
||
|
! Computing the correlation energy derivatives
|
||
|
!
|
||
|
EC = EC_2D(EC_TYPE,RS,T) !
|
||
|
CALL DERIVE_EC_2D(EC_TYPE,1,RS,T,D_EC_1,D_EC_2) !
|
||
|
!
|
||
|
GAMMA_I_2D = FIVE * PI_INV / SIX - & !
|
||
|
(FIVE * ALPHA / 16.0E0_WP) * & !
|
||
|
(RS2 * D_EC_1 + TWO * RS * EC) ! ref. (2) eq. (D9c)
|
||
|
!
|
||
|
ELSE IF(GI_TYPE == 'SQ') THEN !
|
||
|
!
|
||
|
IN_MODE = 1 !
|
||
|
NMAX = 1000 ! number of integration points
|
||
|
X_MAX = 50.0E0_WP !
|
||
|
!
|
||
|
! Computing Thomas-Fermi screening vector
|
||
|
!
|
||
|
CALL THOMAS_FERMI_VECTOR('3D',KS) !
|
||
|
X_TF = KS / KF_SI ! q_{TF} / k_F
|
||
|
!
|
||
|
! Computing the integral
|
||
|
!
|
||
|
CALL INT_SQM1(NMAX,X_MAX,IN_MODE,RS,T,X_TF,0,SQ_TYPE, & !
|
||
|
GQ_TYPE,IN)
|
||
|
!
|
||
|
GAMMA_I_2D = - FIFTH * IN ! ref. (3) eq. (5.6)
|
||
|
!
|
||
|
END IF !
|
||
|
!
|
||
|
END FUNCTION GAMMA_I_2D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
FUNCTION G0_INF_2D(X,RS,T)
|
||
|
!
|
||
|
! This function computes G(0,infinity), the value of the dynamic
|
||
|
! local-field correction for q --> 0 and omega = infinity, for 2D systems
|
||
|
!
|
||
|
! References: (1) B. Tanatar, Phys. Lett. A 158, 153-157 (1991)
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature (SI)
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 2 Dec 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ONE,SEVEN,EIGHT,HALF,THIRD
|
||
|
USE SQUARE_ROOTS, ONLY : SQR2
|
||
|
USE PI_ETC, ONLY : PI_INV
|
||
|
USE CORRELATION_ENERGIES, ONLY : DERIVE_EC_2D,EC_2D
|
||
|
USE ENERGIES, ONLY : EC_TYPE
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: X,RS,T
|
||
|
REAL (WP) :: G0_INF_2D
|
||
|
!
|
||
|
REAL (WP) :: Y
|
||
|
REAL (WP) :: A
|
||
|
REAL (WP) :: EC,D_EC_1,D_EC_2
|
||
|
!
|
||
|
Y = X + X ! Y = q / k_F
|
||
|
!
|
||
|
A = ONE / SQR2 !
|
||
|
!
|
||
|
! Computing the correlation energy derivatives
|
||
|
!
|
||
|
EC = EC_2D(EC_TYPE,RS,T) !
|
||
|
CALL DERIVE_EC_2D(EC_TYPE,1,RS,T,D_EC_1,D_EC_2) !
|
||
|
!
|
||
|
G0_INF_2D = Y *(0.20E0_WP * HALF * THIRD * PI_INV + & !
|
||
|
SEVEN * A * RS * EC / EIGHT + & ! ref. (1) eq. (7)
|
||
|
19.0E0_WP * A * RS * D_EC_1 / 16.0E0_WP) !
|
||
|
!
|
||
|
END FUNCTION G0_INF_2D
|
||
|
!
|
||
|
END MODULE GAMMA_ASYMPT
|