MsSpec-DFM/New_libraries/DFM_library/PAIR_DISTRIBUTION_FUNCTION/pair_distribution.f90

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