979 lines
38 KiB
Fortran
979 lines
38 KiB
Fortran
!
|
|
!=======================================================================
|
|
!
|
|
MODULE XC_ENERGIES
|
|
!
|
|
USE ACCURACY_REAL
|
|
!
|
|
CONTAINS
|
|
!
|
|
!------ 1) 3D case --------------------------------------------
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION EXC_3D(EXC_TYPE,RS,T)
|
|
!
|
|
! This subroutine computes the exchange and correlation energy EXC
|
|
! at a given value RS
|
|
!
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * EXC_TYPE : type of correlation energy functional
|
|
! EXC_TYPE = 'GT' --> Goedeker-Tetter-Hutter
|
|
! EXC_TYPE = 'ST' -->
|
|
! EXC_TYPE = 'BD' --> Brown-DuBois-Holzmann-Ceperley
|
|
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
|
! * T : temperature (SI)
|
|
!
|
|
! Output parameters:
|
|
!
|
|
! * EXC : value at RS
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Jun 2020
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
CHARACTER (LEN = 2) :: EXC_TYPE
|
|
!
|
|
REAL (WP) :: EXC_3D,RS,T
|
|
!
|
|
INTEGER :: IMODE
|
|
!
|
|
IF(EXC_TYPE == 'GT') THEN !
|
|
EXC_3D=EXC_GT_W(RS) !
|
|
ELSE IF(EXC_TYPE == 'ST') THEN !
|
|
EXC_3D=EXC_ST_S(RS) !
|
|
ELSE IF(EXC_TYPE == 'BD') THEN !
|
|
EXC_3D=EXC_BD_T(RS,T) !
|
|
END IF
|
|
!
|
|
END FUNCTION EXC_3D
|
|
!
|
|
!=======================================================================
|
|
!
|
|
! Exchange and Correlation energy functionals (in Ryd)
|
|
!
|
|
! Different regimes: * weak coupling : r_s << 1
|
|
! * metallic state : 2 <= r_s <= 6
|
|
! * Wigner crystallization : r_s >= 100
|
|
!
|
|
!
|
|
! (1) Weak coupling regime: _W
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION EXC_GT_W(RS)
|
|
!
|
|
! Exchange and correlation energy for 3D systems
|
|
! as derived by Goedeker-Tetter-Hutter
|
|
!
|
|
!
|
|
! Reference: S. Goedeker, M. Teter and J. Hutter, Phys. Rev. B 54,
|
|
! 1704-1710 (1996)
|
|
!
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 14 Sep 2020
|
|
!
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP) :: RS,RS2,RS3,RS4
|
|
REAL (WP) :: EXC_GT_W
|
|
REAL (WP) :: A(0:3),B(1:4)
|
|
REAL (WP) :: NUM,DEN
|
|
!
|
|
DATA A / 0.4581652932831429E0_WP , &
|
|
2.217058676663745E0_WP , &
|
|
0.7405551735357053E0_WP , &
|
|
0.01968227878617998E0_WP /
|
|
!
|
|
DATA B / 1.0000000000000000E0_WP , &
|
|
4.504130959426697E0_WP , &
|
|
1.110667363742916E0_WP , &
|
|
0.02359291751427506E0_WP /
|
|
!
|
|
RS2 = RS * RS !
|
|
RS3 = RS2 * RS !
|
|
RS4 = RS3 * RS !
|
|
!
|
|
NUM = A(0) + A(1)*RS + A(2)*RS2 + A(3)*RS3 !
|
|
DEN = B(1)*RS + B(2)*RS2 + B(3)*RS3 + B(4)*RS4 !
|
|
!
|
|
EXC_GT_W = NUM / DEN ! Ref. 1, Appendix
|
|
!
|
|
END FUNCTION EXC_GT_W
|
|
!
|
|
!=======================================================================
|
|
!
|
|
! (2) Strong coupling regime (r_s small): _S
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION EXC_ST_S(RS)
|
|
!
|
|
! Exchange and correlation energy for 3D systems in the standard model
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Jun 2020
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP), INTENT(IN) :: RS
|
|
REAL (WP) :: EXC_ST_S
|
|
REAL (WP) :: RS2,XS
|
|
REAL (WP) :: A1,A2,A3,A4
|
|
!
|
|
A1 = - 1.79186E0_WP !
|
|
A2 = 2.65E0_WP !
|
|
A3 = - 0.73E0_WP !
|
|
A4 = - 0.8E0_WP !
|
|
!
|
|
EXC_ST_S=A1/RS + A2/(RS*XS) + A3/RS2 + A4/(RS2*XS) !
|
|
!
|
|
END FUNCTION EXC_ST_S
|
|
!
|
|
!=======================================================================
|
|
!
|
|
! (4) Temperature dependence: _T
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION EXC_BD_T(RS,T)
|
|
!
|
|
! Temperature-dependent exchange and correlation energy for 3D systems
|
|
! as derived by Brown-DuBois-Holzmann-Ceperley
|
|
!
|
|
! Validity: RS < 40 and T/T_F > 0.0625
|
|
!
|
|
! References: (1) E. W. Brown, J. L. DuBois, M. Holzmann and D. M. Ceperley,
|
|
! Phys. Rev. B 88, 081102 (2013)
|
|
! (2) E. W. Brown, J. L. DuBois, M. Holzmann and D. M. Ceperley,
|
|
! Phys. Rev. B 88, 199901 (2013) --> erratum
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
|
! * T : temperature (SI)
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Jun 2020
|
|
!
|
|
!
|
|
USE REAL_NUMBERS, ONLY : ONE,SIX
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP) :: RS,T,T2
|
|
REAL (WP) :: EXC_BD_T
|
|
REAL (WP) :: E_XC_0
|
|
REAL (WP) :: A_1(3),B_1(3),C_1(3),D_1(3)
|
|
REAL (WP) :: A_2(3),B_2(3),C_2(3),D_2(3)
|
|
REAL (WP) :: A1,A2,A3,P1,P2,U1,U2
|
|
!
|
|
DATA A_1 / 6.94759E0_WP, 7.70107E0_WP, 12.68820E0_WP / !
|
|
DATA B_1 / -0.34608E0_WP, -0.95154E0_WP, -1.59703E0_WP / ! case r_s < 10
|
|
DATA C_1 / -1.97251E0_WP, -1.80401E0_WP, -4.74435E0_WP / !
|
|
DATA D_1 / 0.53700E0_WP, 0.49086E0_WP, 1.23569E0_WP / !
|
|
!
|
|
DATA A_2 / 1.54712E0_WP, 2.65068E0_WP, 3.07192E0_WP / !
|
|
DATA B_2 / -1.97814E0_WP, -2.45160E0_WP, -4.65269E0_WP / ! case r_s > 10
|
|
DATA C_2 / 1.42976E0_WP, 1.36907E0_WP, 1.36324E0_WP / !
|
|
DATA D_2 / -0.32967E0_WP, -0.31701E0_WP, -0.32247E0_WP /
|
|
!
|
|
T2=T*T !
|
|
!
|
|
IF(RS <= 10.0E0_WP) THEN !
|
|
!
|
|
A1=DEXP(A_1(1)*DLOG(RS)+B_1(1)+C_1(1)*RS+D_1(1)*RS*DLOG(RS))!
|
|
A2=DEXP(A_1(2)*DLOG(RS)+B_1(2)+C_1(2)*RS+D_1(2)*RS*DLOG(RS))! ref. (2) eq. (6)
|
|
A3=DEXP(A_1(3)*DLOG(RS)+B_1(3)+C_1(3)*RS+D_1(3)*RS*DLOG(RS))!
|
|
!
|
|
ELSE !
|
|
!
|
|
A1=DEXP(A_2(1)*DLOG(RS)+B_2(1)+C_2(1)*RS+D_2(1)*RS*DLOG(RS))!
|
|
A2=DEXP(A_2(2)*DLOG(RS)+B_2(2)+C_2(2)*RS+D_2(2)*RS*DLOG(RS))! ref. (2) eq. (6)
|
|
A3=DEXP(A_2(3)*DLOG(RS)+B_2(3)+C_2(3)*RS+D_2(3)*RS*DLOG(RS))!
|
|
!
|
|
END IF !
|
|
!
|
|
U1=1.5E0_WP/(RS*RS*RS) ! ref. (2) eq. (4)
|
|
U2=DSQRT(SIX/RS)/RS ! ref. (2) eq. (5)
|
|
!
|
|
P1=(A2*U1+A3*U2)*T2 + A2*U2*T2*DSQRT(T) ! ref. (2) eq. (2)
|
|
P2=ONE + A1*T2 + A3*T2*DSQRT(T) +A2*T2*T ! ref. (2) eq. (3)
|
|
!
|
|
EXC_BD_T=(E_XC_0 - P1)/P2 ! ref. (2) eq. (1)
|
|
!
|
|
END FUNCTION EXC_BD_T
|
|
!
|
|
!------> FXC-Based functionals
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION FXC_3D(FXC_TYPE,RS,T)
|
|
!
|
|
! This subroutine computes the XC free energy FXC
|
|
! at a given value RS
|
|
!
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * FXC_TYPE : type of XC free energy functional
|
|
! FXC_TYPE = 'EB' --> Ebeling et al
|
|
! FXC_TYPE = 'IC' --> Ichimaru et al
|
|
! FXC_TYPE = 'KS' --> Karasiev et al
|
|
! FXC_TYPE = 'VS' --> Vashishta and Singwi
|
|
! FXC_TYPE = 'PD' --> Perrot and Dharma-Wardana
|
|
! FXC_TYPE = 'EK' --> Ebeling-Kraeft-Kremp-Röpke
|
|
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
|
! * T : temperature (SI)
|
|
!
|
|
! Output parameters:
|
|
!
|
|
! * FXC_3D : value at RS
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Jun 2020
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
CHARACTER*2 FXC_TYPE
|
|
!
|
|
REAL (WP) :: FXC_3D,RS,T
|
|
!
|
|
IF(FXC_TYPE == 'EB') THEN !
|
|
FXC_3D=FXC_EB_T(RS,T) !
|
|
ELSE IF(FXC_TYPE == 'IC') THEN !
|
|
FXC_3D=FXC_IC_T(RS,T) !
|
|
ELSE IF(FXC_TYPE == 'VS') THEN !
|
|
FXC_3D=FXC_VS_T(RS,T) !
|
|
ELSE IF(FXC_TYPE == 'PD') THEN !
|
|
FXC_3D=FXC_PD_T(RS,T) !
|
|
ELSE IF(FXC_TYPE == 'KS') THEN !
|
|
FXC_3D=FXC_KS_T(RS,T) !
|
|
ELSE IF(FXC_TYPE == 'EK') THEN !
|
|
FXC_3D=FXC_EK_T(RS,T) !
|
|
END IF !
|
|
!
|
|
END FUNCTION FXC_3D
|
|
!
|
|
!=======================================================================
|
|
!
|
|
SUBROUTINE DERIVE_FXC_3D(FXC_TYPE,IDERIV,RS,TE,D_FXC)
|
|
!
|
|
! This subroutine computes the first derivative of the
|
|
! exchange and correlation free energy F_xc with repect to Theta
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * FXC_TYPE : type of XC free energy functional
|
|
! FXC_TYPE = 'EB' --> Ebeling et al
|
|
! FXC_TYPE = 'IC' --> Ichimaru et al
|
|
! FXC_TYPE = 'KS' --> Karasiev et al
|
|
! FXC_TYPE = 'VS' --> Vashishta and Singwi
|
|
! FXC_TYPE = 'PD' --> Perrot and Dharma-Wardana
|
|
! FXC_TYPE = 'EK' --> Ebeling-Kraeft-Kremp-Röpke
|
|
! * IDERIV : type of n_point formula used for derivation (n = IDERIV)
|
|
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
|
! * TE : temperature (SI)
|
|
!
|
|
! Output parameters:
|
|
!
|
|
! * D_FXC : first derivative at TH
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Jun 2020
|
|
!
|
|
!
|
|
USE DIMENSION_CODE, ONLY : ND_MAX
|
|
USE CONSTANTS_P1, ONLY : K_B
|
|
USE FERMI_SI, ONLY : EF_SI
|
|
USE DERIVATION
|
|
USE INTERPOLATION, ONLY : INTERP_NR,SPLINE,SPLINT
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
CHARACTER (LEN = 2) :: FXC_TYPE
|
|
!
|
|
INTEGER :: IDERIV,I,LOGF
|
|
!
|
|
REAL (WP) :: RS,TI,TE,TH
|
|
REAL (WP) :: D_FXC
|
|
!
|
|
REAL (WP) :: T(ND_MAX),FXC(ND_MAX)
|
|
REAL (WP) :: D_FXC_1(ND_MAX)
|
|
REAL (WP) :: R_MIN,R_MAX,T_MIN,T_MAX,STEP
|
|
!
|
|
TH=K_B*TE/EF_SI !
|
|
!
|
|
R_MIN=0.01E0_WP ! min value of TH
|
|
R_MAX=50.01E0_WP ! max value of TH
|
|
!
|
|
T_MIN=EF_SI*R_MIN/K_B ! min value of T
|
|
T_MAX=EF_SI*R_MAX/K_B ! max value of T
|
|
STEP=(T_MAX-T_MIN)/DFLOAT(ND_MAX-1) ! step in T
|
|
!
|
|
LOGF=6 !
|
|
!
|
|
! Storing the exchange and correlation free energy FXC as a function of RS
|
|
!
|
|
DO I=1,ND_MAX !
|
|
!
|
|
T(I)=T_MIN+DFLOAT(I-1)*STEP !
|
|
TI=T(I) !
|
|
!
|
|
IF(FXC_TYPE.EQ.'EB') THEN !
|
|
FXC(I)=FXC_EB_T(RS,TI) !
|
|
ELSEIF(FXC_TYPE.EQ.'IC') THEN !
|
|
FXC(I)=FXC_IC_T(RS,TI) !
|
|
ELSEIF(FXC_TYPE.EQ.'VS') THEN !
|
|
FXC(I)=FXC_VS_T(RS,TI) !
|
|
ELSEIF(FXC_TYPE.EQ.'PD') THEN !
|
|
FXC(I)=FXC_PD_T(RS,TI) !
|
|
ELSEIF(FXC_TYPE.EQ.'KS') THEN !
|
|
FXC(I)=FXC_KS_T(RS,TI) !
|
|
ELSEIF(FXC_TYPE.EQ.'EK') THEN !
|
|
FXC(I)=FXC_EK_T(RS,TI) !
|
|
ENDIF !
|
|
!
|
|
ENDDO !
|
|
!
|
|
! Computing the first derivatives with respect to T
|
|
! with a IDERIV-point formula
|
|
!
|
|
CALL DERIV_1(FXC,ND_MAX,IDERIV,STEP,D_FXC_1) !
|
|
!
|
|
! Interpolation of derivative at TH
|
|
!
|
|
CALL INTERP_NR(LOGF,T,D_FXC_1,ND_MAX,TE,D_FXC) !
|
|
!
|
|
! Transforming d FXC / dt into d FXC / dTH
|
|
!
|
|
D_FXC=D_FXC*K_B/EF_SI !
|
|
!
|
|
END SUBROUTINE DERIVE_FXC_3D
|
|
!
|
|
!=======================================================================
|
|
!
|
|
SUBROUTINE FXC_TO_EXC_3D(FXC_TYPE,RS,T,EXC)
|
|
!
|
|
! This subroutine transforms a XC free energy into an XC energy
|
|
!
|
|
! References: (1) S. Groth, T. Dornheim and M. Bonitz,
|
|
! Contrib. Plasma Phys. 57, 137-146 (2017)
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * FXC_TYPE : type of XC free energy functional
|
|
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
|
! * T : temperature (SI)
|
|
!
|
|
! Output parameters:
|
|
!
|
|
! * EXC : exchange and correlation energy (in Ryd)
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Jun 2020
|
|
!
|
|
!
|
|
USE CONSTANTS_P1, ONLY : K_B
|
|
USE FERMI_SI, ONLY : EF_SI
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
CHARACTER (LEN = 2) :: FXC_TYPE
|
|
!
|
|
REAL (WP) :: RS,T
|
|
REAL (WP) :: TH,FXC_3D_T,FXC,D_FXC,EXC
|
|
!
|
|
TH=K_B*T/EF_SI !
|
|
!
|
|
! Computing the XC free energy functional
|
|
!
|
|
FXC=FXC_3D(FXC_TYPE,RS,T) !
|
|
!
|
|
! Calling the derivative of FXC with respect to theta
|
|
!
|
|
CALL DERIVE_FXC_3D(FXC_TYPE,5,RS,T,D_FXC) !
|
|
!
|
|
EXC=FXC - TH*D_FXC ! ref. (1) eq. (20)
|
|
!
|
|
END SUBROUTINE FXC_TO_EXC_3D
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION FXC_EB_T(RS,T)
|
|
!
|
|
! Temperature-dependent exchange and correlation free energy
|
|
! for 3D systems as derived by Ebeling et al.
|
|
!
|
|
! References: (1) S. Groth, T. Dornheim and M. Bonitz,
|
|
! Contrib. Plasma Phys. 57, 137-146 (2017)
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
|
! * T : temperature (SI)
|
|
!
|
|
! Output parameters:
|
|
!
|
|
! * FXC_EB_T : exchange and correlation free energy (in Ryd)
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Jun 2020
|
|
!
|
|
!
|
|
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,EIGHT, &
|
|
HALF,THIRD,FOURTH
|
|
USE CONSTANTS_P1, ONLY : K_B
|
|
USE FERMI_SI, ONLY : EF_SI
|
|
USE PI_ETC, ONLY : PI_INV,SQR_PI
|
|
USE UTILITIES_1, ONLY : ALFA
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP) :: RS,T
|
|
REAL (WP) :: FXC_EB_T
|
|
REAL (WP) :: TH,ALPHA
|
|
REAL (WP) :: TH1,TH3,XS
|
|
REAL (WP) :: EXC
|
|
REAL (WP) :: A,B,C,D
|
|
REAL (WP) :: NUM,DEN
|
|
!
|
|
ALPHA=ALFA('3D') !
|
|
!
|
|
TH=K_B*T/EF_SI !
|
|
TH1=ONE/TH ! 1 / TH
|
|
TH3=TH1*TH1*TH1 ! 1 / TH^3
|
|
XS=DSQRT(RS) !
|
|
!
|
|
! Ground-state parametrization of the XC energy
|
|
!
|
|
EXC=0.9163E0_WP/RS + 0.1244E0_WP*DLOG( &!
|
|
ONE + (2.117E0_WP/XS)/&! ref. (1) eq. (4)
|
|
(ONE + 0.3008E0_WP*XS) &!
|
|
) !
|
|
!
|
|
A=TWO*THIRD/SQR_PI * DSQRT(EIGHT*THIRD) / (ALPHA*ALPHA) ! ref. (1) eq. (6)
|
|
B=TWO*THIRD*PI_INV/ALPHA ! ref. (1) eq. (6)
|
|
C=64.0E0_WP*THIRD*PI_INV ! ref. (1) eq. (6)
|
|
D=FOURTH*(ONE+DLOG(TWO))*DSQRT(THREE)*ALPHA*ALPHA ! ref. (1) eq. (6)
|
|
!
|
|
NUM=A*DSQRT(TH1)/XS + B*TH1/RS + C*TH3*EXC ! ref. (1) eq. (5)
|
|
DEN=ONE + D*TH1*XS + C*TH3 ! ref. (1) eq. (5)
|
|
!
|
|
FXC_EB_T=-HALF*NUM/DEN ! ref. (1) eq. (5)
|
|
!
|
|
END FUNCTION FXC_EB_T
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION FXC_IC_T(RS,T)
|
|
!
|
|
! Temperature-dependent exchange and correlation free energy
|
|
! for 3D systems as derived by Ichimaru et al.
|
|
!
|
|
! References: (1) S. Groth, T. Dornheim and M. Bonitz,
|
|
! Contrib. Plasma Phys. 57, 137-146 (2017)
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
|
! * T : temperature (SI)
|
|
!
|
|
! Output parameters:
|
|
!
|
|
! * FXC_IC_T : exchange and correlation free energy (in Ryd)
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Jun 2020
|
|
!
|
|
!
|
|
USE REAL_NUMBERS, ONLY : ONE,TWO,FOUR,HALF,THIRD
|
|
USE CONSTANTS_P1, ONLY : K_B
|
|
USE FERMI_SI, ONLY : EF_SI
|
|
USE UTILITIES_1, ONLY : ALFA
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP) :: RS,T
|
|
REAL (WP) :: FXC_IC_T
|
|
REAL (WP) :: SQ2
|
|
REAL (WP) :: TH1,TH2,TH3,TH4,XH1,XH2
|
|
REAL (WP) :: RS2,XS
|
|
REAL (WP) :: A,B,C,D,E,L,L2
|
|
REAL (WP) :: BB,CC,DD,EE
|
|
REAL (WP) :: NUM,DEN
|
|
REAL (WP) :: X(17)
|
|
REAL (WP) :: BCDE,ACE,SQED
|
|
!
|
|
DATA X / 3.4130800E-1_WP, 1.2070873E+1_WP, 1.148889E0_WP, & !
|
|
1.0495346E+1_WP, 1.3266230E0_WP, 8.72496E-1_WP, & !
|
|
2.5248E-2_WP, 6.14925E-1_WP, 1.6996055E+1_WP, & !
|
|
1.489056E0_WP, 1.010935E+1_WP, 1.22184E0_WP, & ! ref. (1) table 1
|
|
5.39409E-1_WP, 2.522206E0_WP, 1.78484E-1_WP, & !
|
|
2.555501E0_WP, 1.46319E-1_WP / !
|
|
!
|
|
SQ2=DSQRT(TWO) !
|
|
!
|
|
L=ALFA('3D') !
|
|
L2=L*L !
|
|
!
|
|
RS2=RS*RS !
|
|
XS=DSQRT(RS) !
|
|
!
|
|
TH1=K_B*T/EF_SI !
|
|
TH2=TH1*TH1 !
|
|
TH3=TH2*TH1 !
|
|
TH4=TH3*TH1 !
|
|
XH1=DSQRT(TH1) !
|
|
XH2=ONE/XH1 !
|
|
!
|
|
NUM=0.75E0_WP + 3.4363E0_WP*TH2 - 0.09227E0_WP*TH3 + & !
|
|
1.7035E0_WP*TH4 !
|
|
DEN=ONE + 8.31051E0_WP*TH2 + 5.1105E0_WP*TH4 ! ref. (1) eq. (11)
|
|
A=0.610887E0_WP*TANH(ONE/TH1)*NUM/DEN !
|
|
!
|
|
NUM=X(1) + X(2)*TH2 + X(3)*TH4 !
|
|
DEN=ONE + X(4)*TH2 + X(5)*TH4 ! ref. (1) eq. (12)
|
|
B=NUM/DEN !
|
|
!
|
|
C=X(6) + X(7)*DEXP(-ONE/TH1) ! ref. (1) eq. (12)
|
|
!
|
|
NUM=X(8) + X(9)*TH2 + X(10)*TH4 !
|
|
DEN=ONE + X(11)*TH2 + X(12)*TH4 ! ref. (1) eq. (13)
|
|
D=NUM/DEN !
|
|
!
|
|
NUM=X(13) + X(14)*TH2 + X(15)*TH4 !
|
|
DEN=ONE + X(16)*TH2 + X(17)*TH4 ! ref. (1) eq. (13)
|
|
E=NUM/DEN !
|
|
!
|
|
BB=XH1*TANH(XH2)*B !
|
|
DD=XH1*TANH(XH2)*D ! ref. (1) eq. (17)
|
|
EE=TH1*TANH(ONE/TH1)*E !
|
|
CC=EE*C !
|
|
!
|
|
ACE = A - CC/EE !
|
|
BCDE=BB - CC*DD/EE !
|
|
SQED=DSQRT(FOUR*EE-DD*DD) !
|
|
!
|
|
FXC_IC_T=-CC/(RS*EE) &!
|
|
-HALF*TH1/(EE*RS2*L2) * (ACE - DD*BCDE/EE) &!
|
|
*DLOG(DABS(TWO*EE*L2*RS/TH1 + SQ2*DD*L*XS*XH2+ONE)) &!
|
|
-SQ2*BCDE*XH1/(EE*XS*L) &!
|
|
+TH1*(DD*ACE+(TWO-DD*DD/EE)*BCDE)/(RS2*L2*EE*SQED) &!
|
|
*( DATAN((TWO**1.5E0_WP * EE*L*XS*XH2 + DD)/SQED) - &!
|
|
DATAN(DD/SQED) &!
|
|
) !
|
|
!
|
|
END FUNCTION FXC_IC_T
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION FXC_VS_T(RS,T)
|
|
!
|
|
! Temperature-dependent exchange and correlation free energy
|
|
! for 3D systems as derived by Vashishta-Singwi.
|
|
!
|
|
! References: (1) S. Groth, T. Dornheim and M. Bonitz,
|
|
! Contrib. Plasma Phys. 57, 137-146 (2017)
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
|
! * T : temperature (SI)
|
|
!
|
|
! Output parameters:
|
|
!
|
|
! * FXC_VS_T : exchange and correlation free energy (in Ryd)
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Jun 2020
|
|
!
|
|
!
|
|
USE REAL_NUMBERS, ONLY : ONE,TWO,FOUR,HALF,THIRD
|
|
USE CONSTANTS_P1, ONLY : K_B
|
|
USE FERMI_SI, ONLY : EF_SI
|
|
USE SQUARE_ROOTS, ONLY : SQR2
|
|
USE UTILITIES_1, ONLY : ALFA
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP) :: RS,T
|
|
REAL (WP) :: FXC_VS_T
|
|
REAL (WP) :: Q2
|
|
REAL (WP) :: TH1,TH2,TH3,TH4,XH1,XH2
|
|
REAL (WP) :: RS2,XS
|
|
REAL (WP) :: A,B,C,D,E,L,L2
|
|
REAL (WP) :: BB,CC,DD,EE
|
|
REAL (WP) :: NUM,DEN
|
|
REAL (WP) :: X(17)
|
|
REAL (WP) :: BCDE,ACE,SQED
|
|
!
|
|
DATA X / 1.8871493E-1_WP, 1.0684788E+1_WP, 1.1088191E+2_WP, &!
|
|
1.8015380E+1_WP, 1.2803540E+2_WP, 8.3331352E-1_WP, &!
|
|
-1.1179213E-1_WP, 6.1492503E-1_WP, 1.6428929E+1_WP, &! ref. (1) table 2
|
|
2.5963096E+1_WP, 1.0905162E+1_WP, 2.9942171E+1_WP, &!
|
|
5.3940898E-1_WP, 5.8869626E+4_WP, 3.1165052E+3_WP, &!
|
|
3.8887108E+4_WP, 2.1774472E+3_WP / !
|
|
!
|
|
L=ALFA('3D') !
|
|
L2=L*L !
|
|
!
|
|
RS2=RS*RS !
|
|
XS=DSQRT(RS) !
|
|
!
|
|
TH1=K_B*T/EF_SI !
|
|
TH2=TH1*TH1 !
|
|
TH3=TH2*TH1 !
|
|
TH4=TH3*TH1 !
|
|
XH1=DSQRT(TH1) !
|
|
XH2=ONE/XH1 !
|
|
!
|
|
NUM=0.75E0_WP + 3.4363E0_WP*TH2 - 0.09227E0_WP*TH3 + & !
|
|
1.7035E0_WP*TH4 !
|
|
DEN=ONE + 8.31051E0_WP*TH2 + 5.1105E0_WP*TH4 ! ref. (1) eq. (11)
|
|
A=0.610887E0_WP*TANH(ONE/TH1)*NUM/DEN !
|
|
!
|
|
NUM=X(1) + X(2)*TH2 + X(3)*TH4 !
|
|
DEN=ONE + X(4)*TH2 + X(5)*TH4 ! ref. (1) eq. (12)
|
|
B=NUM/DEN !
|
|
!
|
|
C=X(6) + X(7)*DEXP(-ONE/TH1) ! ref. (1) eq. (12)
|
|
!
|
|
NUM=X(8) + X(9)*TH2 + X(10)*TH4 !
|
|
DEN=ONE + X(11)*TH2 + X(12)*TH4 ! ref. (1) eq. (13)
|
|
D=NUM/DEN !
|
|
!
|
|
NUM=X(13) + X(14)*TH2 + X(15)*TH4 !
|
|
DEN=ONE + X(16)*TH2 + X(17)*TH4 ! ref. (1) eq. (13)
|
|
E=NUM/DEN !
|
|
!
|
|
BB=XH1*TANH(XH2)*B !
|
|
DD=XH1*TANH(XH2)*D ! ref. (1) eq. (17)
|
|
EE=TH1*TANH(ONE/TH1)*E !
|
|
CC=EE*C !
|
|
!
|
|
ACE = A - CC/EE !
|
|
BCDE=BB - CC*DD/EE !
|
|
SQED=DSQRT(FOUR*EE-DD*DD) !
|
|
!
|
|
FXC_VS_T=-CC/(RS*EE) &!
|
|
-HALF*TH1/(EE*RS2*L2) * (ACE - DD*BCDE/EE) &!
|
|
*DLOG(DABS(TWO*EE*L2*RS/TH1 + SQR2*DD*L*XS*XH2+ONE))&!
|
|
-SQR2*BCDE*XH1/(EE*XS*L) &!
|
|
+TH1*(DD*ACE+(TWO-DD*DD/EE)*BCDE)/(RS2*L2*EE*SQED) &!
|
|
*( DATAN((TWO**1.5E0_WP * EE*L*XS*XH2 + DD)/SQED) - &!
|
|
DATAN(DD/SQED) &!
|
|
) !
|
|
!
|
|
END FUNCTION FXC_VS_T
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION FXC_PD_T(RS,T)
|
|
!
|
|
! Temperature-dependent exchange and correlation free energy
|
|
! for 3D systems as derived by Perrot and Dharma-Wardana.
|
|
!
|
|
! References: (1) S. Groth, T. Dornheim and M. Bonitz,
|
|
! Contrib. Plasma Phys. 57, 137-146 (2017)
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
|
! * T : temperature (SI)
|
|
!
|
|
! Output parameters:
|
|
!
|
|
! * FXC_PD_T : exchange and correlation free energy (in Ryd)
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Jun 2020
|
|
!
|
|
!
|
|
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,FIVE,HALF,THIRD
|
|
USE CONSTANTS_P1, ONLY : K_B
|
|
USE FERMI_SI, ONLY : EF_SI
|
|
USE PI_ETC, ONLY : PI
|
|
USE UTILITIES_1, ONLY : ALFA
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP) :: RS,RS2,T,XS
|
|
REAL (WP) :: FXC_PD_T
|
|
REAL (WP) :: A1(3),B1(3),C1(3),A2(3),B2(3),C2(3)
|
|
REAL (WP) :: V(3),R(3)
|
|
REAL (WP) :: Y(3),Z(3),A(3),B(3)
|
|
REAL (WP) :: TH1,TH2,TH3,XH1
|
|
REAL (WP) :: Q1,Q2,Q3,XQ
|
|
REAL (WP) :: N0,U1,U2,L,L2
|
|
REAL (WP) :: NUM,DEN
|
|
REAL (WP) :: P1,P2,EXC
|
|
!
|
|
INTEGER I
|
|
!
|
|
DATA A1 / 5.6304E0_WP, 5.2901E0_WP, 3.6854E0_WP / !
|
|
DATA B1 / -2.2308E0_WP, -2.0512E0_WP, -1.5385E0_WP / !
|
|
DATA C1 / 1.7624E0_WP, 1.6185E0_WP, 1.2629E0_WP / !
|
|
DATA A2 / 2.6083E0_WP, -15.076E0_WP, 2.4071E0_WP / ! ref. (1) table 3
|
|
DATA B2 / 1.2782E0_WP, 24.929E0_WP, 0.78293E0_WP / !
|
|
DATA C2 / 0.16625E0_WP, 2.0261E0_WP, 0.095869E0_WP / !
|
|
DATA V / 1.5E0_WP, 3.0E0_WP, 3.0E0_WP / !
|
|
DATA R / 4.4467E0_WP, 4.5581E0_WP, 4.3909E0_WP / !
|
|
!
|
|
L=ALFA('3D') !
|
|
L2=L*L !
|
|
!
|
|
RS2=RS*RS !
|
|
XS=DSQRT(RS) !
|
|
!
|
|
TH1=K_B*T/EF_SI !
|
|
TH2=TH1*TH1 !
|
|
TH3=TH2*TH1 !
|
|
XH1=DSQRT(TH1) !
|
|
!
|
|
Q1=HALF/(RS2*L2) !
|
|
Q2=Q1*Q1 !
|
|
Q3=Q2*Q1 !
|
|
XQ=DSQRT(Q1) !
|
|
!
|
|
N0=THREE/(FOUR*PI*RS*RS2) ! electron density
|
|
U1=HALF*PI*N0 !
|
|
U2=TWO*THIRD*DSQRT(PI*N0) !
|
|
!
|
|
! Ground-state parametrization of the XC energy
|
|
!
|
|
EXC=0.9163E0_WP/RS + 0.1244E0_WP*DLOG( &!
|
|
ONE + (2.117E0_WP/XS)/&! ref. (1) eq. (4)
|
|
(ONE + 0.3008E0_WP*XS) &!
|
|
) !
|
|
!
|
|
DO I=1,3
|
|
B(I)=DEXP(FIVE*(RS-R(I))) !
|
|
NUM=A1(I) + B1(I)*RS + C1(I)*RS2 !
|
|
DEN=ONE + RS2/FIVE !
|
|
Y(I)=V(I)*DLOG(RS) + NUM/DEN !
|
|
NUM=A2(I) + B2(I)*RS !
|
|
DEN=ONE + C2(I)*RS2 !
|
|
Z(I)=RS*NUM/DEN !
|
|
NUM=Y(I) + B(I)*Z(I) !
|
|
DEN=ONE + B(I) !
|
|
A(I)=DEXP(NUM/DEN) !
|
|
ENDDO
|
|
!
|
|
P1=(A(2)*U1 + A(3)*U2)*TH2*Q2 + A(2)*U2*TH2*XH1*Q2*XQ !
|
|
P2=ONE + A(1)*TH2*Q2 + A(3)*TH2*XH1*Q2*XQ + A(2)*TH3*Q3 !
|
|
!
|
|
FXC_PD_T=(EXC-P1)/P2 ! ref. (1) eq. (18)
|
|
!
|
|
END FUNCTION FXC_PD_T
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION FXC_KS_T(RS,T)
|
|
!
|
|
! Temperature-dependent exchange and correlation free energy
|
|
! for 3D systems as derived by Karasiev et al.
|
|
!
|
|
! References: (1) S. Groth, T. Dornheim and M. Bonitz,
|
|
! Contrib. Plasma Phys. 57, 137-146 (2017)
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
|
! * T : temperature (SI)
|
|
!
|
|
! Output parameters:
|
|
!
|
|
! * FXC_KS_T : exchange and correlation free energy (in Ryd)
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Jun 2020
|
|
!
|
|
!
|
|
USE REAL_NUMBERS, ONLY : ONE
|
|
USE CONSTANTS_P1, ONLY : K_B
|
|
USE FERMI_SI, ONLY : EF_SI
|
|
USE UTILITIES_1, ONLY : ALFA
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP) :: RS,T
|
|
REAL (WP) :: FXC_KS_T
|
|
REAL (WP) :: TH1,TH2,TH3,TH4,XH1,XH2,XS,L
|
|
REAL (WP) :: B(4),C(3),D(5),E(5)
|
|
REAL (WP) :: AA,BB,CC,DD,EE
|
|
REAL (WP) :: NUM,DEN
|
|
!
|
|
DATA B / 0.283997E0_WP,48.932154E0_WP, & !
|
|
0.370919E0_WP,61.095357E0_WP/ !
|
|
DATA C / 0.870089E0_WP, 0.193077E0_WP, 2.414644E0_WP / !
|
|
DATA D / 0.579824E0_WP,94.537454E0_WP,97.839603E0_WP, & !
|
|
59.939999E0_WP,24.388037E0_WP / !
|
|
DATA E / 0.212036E0_WP,16.731249E0_WP,28.485792E0_WP, & !
|
|
34.028876E0_WP,17.235515E0_WP / !
|
|
!
|
|
XS=DSQRT(RS) !
|
|
!
|
|
TH1=K_B*T/EF_SI !
|
|
TH2=TH1*TH1 !
|
|
TH3=TH2*TH1 !
|
|
TH4=TH3*TH1 !
|
|
XH1=DSQRT(TH1) !
|
|
XH2=ONE/XH1 !
|
|
!
|
|
L=ALFA('3D') !
|
|
!
|
|
NUM=0.75E0_WP + 3.4363E0_WP*TH2 - 0.09227E0_WP*TH3 + & !
|
|
1.7035E0_WP*TH4 !
|
|
DEN=ONE + 8.31051E0_WP*TH2 + 5.1105E0_WP*TH4 ! ref. (1) eq. (11)
|
|
AA=0.610887E0_WP*TANH(ONE/TH1)*NUM/DEN !
|
|
!
|
|
NUM=B(1) + B(2)*TH2 + B(3)*TH4 !
|
|
DEN=ONE + B(4)*TH2 + B(3)*TH4*DSQRT(1.5E0_WP)/L !
|
|
BB=TANH(XH2)*NUM/DEN !
|
|
!
|
|
NUM=D(1) + D(2)*TH2 + D(3)*TH4 !
|
|
DEN=ONE + D(4)*TH2 + D(5)*TH4 !
|
|
DD=TANH(XH2)*NUM/DEN !
|
|
!
|
|
NUM=E(1) + E(2)*TH2 + E(3)*TH4 !
|
|
DEN=ONE + E(4)*TH2 + E(5)*TH4 !
|
|
EE=TANH(ONE/TH1)*NUM/DEN !
|
|
!
|
|
CC=(C(1) + C(2)*DEXP(-C(3)/TH1))*EE !
|
|
!
|
|
NUM=AA + BB*XS + CC*RS !
|
|
DEN=ONE+ DD*XS + EE*RS !
|
|
!
|
|
FXC_KS_T=-NUM/(DEN*RS) ! ref. (1) eq. (19)
|
|
!
|
|
END FUNCTION FXC_KS_T
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION FXC_EK_T(RS,T)
|
|
!
|
|
! Temperature-dependent exchange and correlation free energy
|
|
! for 3D systems as derived by Ebeling et al.
|
|
!
|
|
! References: (1) W. Ebeling, W. D. Kraeft, D. Kremp and G. Röpke,
|
|
! Physica 140A, 160-168 (1986)
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
|
! * T : temperature (SI)
|
|
!
|
|
! Output parameters:
|
|
!
|
|
! * FXC_EB_T : exchange and correlation free energy (in Ryd)
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Jun 2020
|
|
!
|
|
!
|
|
USE REAL_NUMBERS, ONLY : ONE,TWO,SIX,HALF,THIRD
|
|
USE CONSTANTS_P1, ONLY : K_B
|
|
USE CONSTANTS_P2, ONLY : HARTREE
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL*8 RS,T
|
|
REAL*8 FXC_EK_T
|
|
REAL*8 RS2,RS3,RS4,RS5,RS6,RS7,XS
|
|
REAL*8 SQ6
|
|
REAL*8 TAU,TA2,TA3,XTA
|
|
REAL*8 D0,D1,DH,AH,AW,B0,B1,C1,C2
|
|
REAL*8 AWR,NUM,DEN
|
|
!
|
|
SQ6=DSQRT(SIX) !
|
|
!
|
|
RS2=RS*RS !
|
|
RS3=RS2*RS !
|
|
RS4=RS3*RS ! powers of RS
|
|
RS5=RS4*RS !
|
|
RS6=RS5*RS !
|
|
RS7=RS6*RS !
|
|
XS=DSQRT(RS) !
|
|
!
|
|
TAU=HALF*K_B*T/HARTREE ! ref. (1) eq. (21)
|
|
TA2=TAU*TAU !
|
|
TA3=TA2*TAU !
|
|
XTA=DSQRT(TAU) !
|
|
!
|
|
D0=THIRD !
|
|
D1= 0.3979E0_WP !
|
|
DH= 0.0625E0_WP !
|
|
AH=0.91633E0_WP ! ref. (1) table I
|
|
AW=0.87553E0_WP !
|
|
B0=0.06218E0_WP !
|
|
B1= 0.0933E0_WP !
|
|
!
|
|
C1=50.0E0_WP + RS3 !
|
|
C2= 2.3E0_WP !
|
|
!
|
|
AWR=TWO*B0*RS*DLOG( ONE + ONE/( XS*DEXP(-HALF*B1/B0) + & !
|
|
TWO*B0*RS/AW & ! ref. (1) eq. (26)
|
|
) & !
|
|
) !
|
|
!
|
|
NUM=C1*(AH+AWR) + TWO*SQ6*D0*RS5*XS*TA2*XTA + & !
|
|
24.0E0_WP*DH*RS4*TA2 !
|
|
DEN=C1*RS + C2*RS4*TA2 + TWO*SQ6*D1*RS5*XS*TA2 + RS7*TA3 !
|
|
!
|
|
FXC_EK_T=-NUM/DEN ! ref. (1) eq. (25)
|
|
!
|
|
END FUNCTION FXC_EK_T
|
|
!
|
|
END MODULE XC_ENERGIES
|