393 lines
13 KiB
Fortran
393 lines
13 KiB
Fortran
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
MODULE PAIR_DISTRIBUTION
|
||
|
!
|
||
|
USE ACCURACY_REAL
|
||
|
!
|
||
|
CONTAINS
|
||
|
!
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE PAIR_DISTRIBUTION_3D(R,RS,T,RH_TYPE,R2)
|
||
|
!
|
||
|
! This subroutine computes the pair distribution function rho2(r)
|
||
|
! for 3D systems.
|
||
|
!
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * R : grid point (in units of a_0)
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
! * RH_TYPE : pair distribution function approximation (3D)
|
||
|
! RH_TYPE = 'CDI' chain diagram improved
|
||
|
! RH_TYPE = 'CEG' classical electron gas
|
||
|
! RH_TYPE = 'DEB' Debye electron gas
|
||
|
! RH_TYPE = 'FUA' correct to order 2 in epsilon
|
||
|
! RH_TYPE = 'SDC' short-distance correlations
|
||
|
! RH_TYPE = 'WDA' watermelon diagrams summed
|
||
|
!
|
||
|
! Output parameters:
|
||
|
!
|
||
|
! * R2 : value of the pair correlation function
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 4 Jun 2020
|
||
|
!
|
||
|
!
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
CHARACTER (LEN = 3) :: RH_TYPE
|
||
|
!
|
||
|
REAL (WP) :: R,RS,T,R2
|
||
|
!
|
||
|
IF(RH_TYPE == 'CDI') THEN !
|
||
|
R2=CDI_PDF(R,RS,T) !
|
||
|
ELSE IF(RH_TYPE == 'CEG') THEN !
|
||
|
R2=CEG_PDF(R,RS,T) !
|
||
|
ELSE IF(RH_TYPE == 'DEB') THEN !
|
||
|
R2=DEB_PDF(R,RS,T) !
|
||
|
ELSE IF(RH_TYPE == 'FUA') THEN !
|
||
|
R2=FUA_PDF(R,RS,T) !
|
||
|
ELSE IF(RH_TYPE == 'SDC') THEN !
|
||
|
R2=SDC_PDF(R,RS,T) !
|
||
|
ELSE IF(RH_TYPE == 'WDA') THEN !
|
||
|
R2=WDA_PDF(R,RS,T) !
|
||
|
ENDIF !
|
||
|
!
|
||
|
END SUBROUTINE PAIR_DISTRIBUTION_3D
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
FUNCTION CDI_PDF(R,RS,T)
|
||
|
!
|
||
|
! This function computes the electron gas pair distribution function
|
||
|
! rho2(r) for 3D systems, with a chain diagram improved
|
||
|
!
|
||
|
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
||
|
! Springer Series in Solid-State Sciences 96,
|
||
|
! (Springer, 1998) p. 33
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * R : grid point in unit of a_0
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 2 Jun 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ONE,TWO
|
||
|
USE CONSTANTS_P1, ONLY : BOHR,E,K_B
|
||
|
USE SQUARE_ROOTS, ONLY : SQR2
|
||
|
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||
|
USE UTILITIES_1, ONLY : RS_TO_N0
|
||
|
USE EXT_FUNCTIONS, ONLY : ERFC ! Error function
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP) :: R,RS,T
|
||
|
REAL (WP) :: CDI_PDF
|
||
|
REAL (WP) :: X,EPS,ALP,BETA
|
||
|
REAL (WP) :: N0,KD_SI
|
||
|
!
|
||
|
REAL (WP) :: DSQRT,DEXP
|
||
|
!
|
||
|
N0=RS_TO_N0('3D',RS) !
|
||
|
!
|
||
|
! Computing the Debye screening vector
|
||
|
!
|
||
|
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||
|
!
|
||
|
X=KD_SI*R*BOHR !
|
||
|
EPS=E*E*KD_SI/(K_B*T) ! ref. (1) eq. (1.1.2)
|
||
|
BETA=ONE/(K_B*T) !
|
||
|
ALP=KD_SI*DSQRT(BETA) !
|
||
|
!
|
||
|
CDI_PDF=N0*N0*( ONE -EPS*( & !
|
||
|
DEXP(-X)/X - & !
|
||
|
DEXP(-X/(TWO*ALP))/X + & ! ref. (1) eq. (3.3.14)
|
||
|
SQR2*ERFC(X/(SQR2*ALP))/ALP & !
|
||
|
) & !
|
||
|
) !
|
||
|
!
|
||
|
END FUNCTION CDI_PDF
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
FUNCTION CEG_PDF(R,RS,T)
|
||
|
!
|
||
|
! This function computes very dilute classical electron gas
|
||
|
! pair distribution function rho2(r) for 3D systems
|
||
|
!
|
||
|
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
||
|
! Springer Series in Solid-State Sciences 96,
|
||
|
! (Springer, 1998) p. 33
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * R : grid point in unit of a_0
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 30 Jul 2020
|
||
|
!
|
||
|
!
|
||
|
USE CONSTANTS_P1, ONLY : BOHR,E,K_B
|
||
|
USE UTILITIES_1, ONLY : RS_TO_N0
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP) :: R,RS,T
|
||
|
REAL (WP) :: CEG_PDF
|
||
|
REAL (WP) :: N0
|
||
|
!
|
||
|
REAL (WP) :: DEXP
|
||
|
!
|
||
|
N0=RS_TO_N0('3D',RS) !
|
||
|
!
|
||
|
CEG_PDF=N0*N0*DEXP(-E*E/(R*BOHR*K_B*T)) ! ref. (1) eq. (3.1.1)
|
||
|
!
|
||
|
END FUNCTION CEG_PDF
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
FUNCTION DEB_PDF(R,RS,T)
|
||
|
!
|
||
|
! This function computes Debye electron gas
|
||
|
! pair distribution function rho2(r) for 3D systems
|
||
|
!
|
||
|
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
||
|
! Springer Series in Solid-State Sciences 96,
|
||
|
! (Springer, 1998) p. 33
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * R : grid point in unit of a_0
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 4 Jun 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : FOUR
|
||
|
USE CONSTANTS_P1, ONLY : BOHR
|
||
|
USE PI_ETC, ONLY : PI
|
||
|
USE UTILITIES_1, ONLY : RS_TO_N0
|
||
|
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP) :: R,RS,T
|
||
|
REAL (WP) :: DEB_PDF
|
||
|
REAL (WP) :: RA
|
||
|
REAL (WP) :: N0,KD_SI
|
||
|
!
|
||
|
REAL (WP) :: DEXP
|
||
|
!
|
||
|
N0=RS_TO_N0('3D',RS) !
|
||
|
!
|
||
|
! Computing the Debye screening vector
|
||
|
!
|
||
|
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||
|
!
|
||
|
RA=R*BOHR ! r in SI
|
||
|
!
|
||
|
DEB_PDF=N0*N0 - N0*KD_SI*KD_SI*DEXP(-KD_SI*RA)/(FOUR*PI*RA) ! ref. (1) eq. (3.1.4)
|
||
|
!
|
||
|
END FUNCTION DEB_PDF
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
FUNCTION FUA_PDF(R,RS,T)
|
||
|
!
|
||
|
! This function computes the electron gas pair distribution function
|
||
|
! rho2(r) for 3D systems, correct to order 2 in epsilon, the plasma
|
||
|
! parameter
|
||
|
!
|
||
|
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
||
|
!C (Springer, 1998) p. 33
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * R : grid point in unit of a_0
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 21 Jul 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : TWO,THREE,HALF,THIRD,FOURTH
|
||
|
USE CONSTANTS_P1, ONLY : BOHR,E,K_B
|
||
|
USE UTILITIES_1, ONLY : RS_TO_N0
|
||
|
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||
|
USE EXT_FUNCTIONS, ONLY : DEI
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP) :: R,RS,T
|
||
|
REAL (WP) :: FUA_PDF
|
||
|
REAL (WP) :: ARG_E
|
||
|
REAL (WP) :: X,EPS,TX
|
||
|
REAL (WP) :: N0,KD_SI
|
||
|
!
|
||
|
REAL (WP) :: DEXP,DLOG
|
||
|
!
|
||
|
N0=RS_TO_N0('3D',RS) !
|
||
|
!
|
||
|
! Computing the Debye screening vector
|
||
|
!
|
||
|
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||
|
!
|
||
|
X=KD_SI*R*BOHR !
|
||
|
EPS=E*E*KD_SI/(K_B*T) ! ref. (1) eq. (1.1.2)
|
||
|
TX=THREE*X !
|
||
|
!
|
||
|
ARG_E=EPS*DEXP(-X)/X + HALF*EPS*EPS/X * ( & !
|
||
|
DEXP(-X)*( -THREE*FOURTH*DLOG(THREE) + & !
|
||
|
X*FOURTH*DLOG(THREE) - THIRD ) + & !
|
||
|
FOURTH*DEXP(X)*(X*DEI(-TX)) + & ! ref. (1) eq. (3.1.13)
|
||
|
FOURTH*DEXP(-X)*(X*DEI(-X)) + & !
|
||
|
THREE*FOURTH*DEXP(X)*DEI(-TX)- & !
|
||
|
THREE*FOURTH*DEXP(-X)*DEI(-X)+ & !
|
||
|
THIRD*DEXP(-TWO*X) ) !
|
||
|
!
|
||
|
FUA_PDF=N0*N0*DEXP(-ARG_E) ! ref. (1) eq. (3.1.12)
|
||
|
!
|
||
|
END FUNCTION FUA_PDF
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
FUNCTION SDC_PDF(R,RS,T)
|
||
|
!
|
||
|
! This function computes the electron gas pair distribution function
|
||
|
! rho2(r) for 3D systems, for short-distance correlations
|
||
|
!
|
||
|
!
|
||
|
! --> Warning: valid if T >> k_B * (a_0 / 2)^2
|
||
|
!
|
||
|
!
|
||
|
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
||
|
! Springer Series in Solid-State Sciences 96,
|
||
|
! (Springer, 1998) p. 33
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * R : grid point (in units of a_0)
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 4 Jun 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ONE,TWO,HALF,THIRD
|
||
|
USE CONSTANTS_P1, ONLY : BOHR,K_B
|
||
|
USE PI_ETC, ONLY : PI
|
||
|
USE UTILITIES_1, ONLY : RS_TO_N0
|
||
|
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP) :: R,RS,T
|
||
|
REAL (WP) :: R2,R3
|
||
|
REAL (WP) :: SDC_PDF
|
||
|
REAL (WP) :: BETA,DELTA
|
||
|
REAL (WP) :: N0,KD_SI
|
||
|
!
|
||
|
REAL (WP) :: DSQRT
|
||
|
!
|
||
|
R2=R*R*BOHR*BOHR ! r^2 in SI
|
||
|
R3=R2*R*BOHR ! r^3 in SI
|
||
|
!
|
||
|
N0=RS_TO_N0('3D',RS) !
|
||
|
!
|
||
|
! Computing the Debye screening vector
|
||
|
!
|
||
|
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||
|
!
|
||
|
BETA=ONE/(K_B*T) !
|
||
|
DELTA=TWO*DSQRT(BETA)/BOHR ! ref. (1) eq. (3.3.7)
|
||
|
!
|
||
|
SDC_PDF=HALF*N0*N0*( & !
|
||
|
ONE - DSQRT(HALF*PI)*DELTA + & !
|
||
|
HALF*R + HALF*R2/BETA - & !
|
||
|
TWO*THIRD*DSQRT(HALF*PI)*R2 / ( & ! ref. (1) eq. (3.3.10)
|
||
|
BOHR*DSQRT(BETA) ) - & !
|
||
|
HALF*R3/(BOHR*BETA) & !
|
||
|
) !
|
||
|
!
|
||
|
END FUNCTION SDC_PDF
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
FUNCTION WDA_PDF(R,RS,T)
|
||
|
!
|
||
|
! This function computes watermelon diagrams-summed electron gas
|
||
|
! pair distribution function rho2(r) for 3D systems
|
||
|
!
|
||
|
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
||
|
! Springer Series in Solid-State Sciences 96,
|
||
|
! (Springer, 1998) p. 33
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * R : grid point in unit of a_0
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : temperature in SI
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 4 Jun 2020
|
||
|
!
|
||
|
!
|
||
|
USE CONSTANTS_P1, ONLY : BOHR,E,K_B
|
||
|
USE UTILITIES_1, ONLY : RS_TO_N0
|
||
|
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
REAL (WP) :: R,RS,T
|
||
|
REAL (WP) :: WDA_PDF
|
||
|
REAL (WP) :: PHI_D,RA
|
||
|
REAL (WP) :: N0,KD_SI
|
||
|
!
|
||
|
REAL (WP) :: DSQRT
|
||
|
!
|
||
|
N0=RS_TO_N0('3D',RS) !
|
||
|
!
|
||
|
! Computing the Debye screening vector
|
||
|
!
|
||
|
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||
|
!
|
||
|
RA=R*BOHR ! r in SI
|
||
|
!
|
||
|
PHI_D=E*E*DEXP(-KD_SI*RA)/RA ! ref. (1) eq. (3.1.7)
|
||
|
!
|
||
|
WDA_PDF=N0*N0*DEXP(-PHI_D/(K_B*T)) ! ref. (1) eq. (3.1.5)
|
||
|
!
|
||
|
END FUNCTION WDA_PDF
|
||
|
!
|
||
|
END MODULE PAIR_DISTRIBUTION
|
||
|
|