563 lines
18 KiB
Fortran
563 lines
18 KiB
Fortran
!
|
|
!=======================================================================
|
|
!
|
|
MODULE THERMODYNAMIC_PROPERTIES
|
|
!
|
|
USE ACCURACY_REAL
|
|
!
|
|
CONTAINS
|
|
!
|
|
!
|
|
!=======================================================================
|
|
!
|
|
SUBROUTINE SPECIFIC_HEAT(DMN,I_ORD,RS,T,CV)
|
|
!
|
|
! This subroutine computes the specific heat
|
|
! (per electron) in the 2D and 3D system
|
|
!
|
|
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
|
! Springer Series in Solid-State Sciences 96,
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * DMN : dimension
|
|
! * I_ORD : order of the truncation of the r_s series
|
|
! I_ORD = 1 : r_s only --> ref. 1 eq. (7.1.16)
|
|
! I_ORD = 2 : r_s^2 --> ref. 1 eq. (7.1.22)
|
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
|
! * T : system temperature in SI
|
|
!
|
|
!
|
|
! Output parameters:
|
|
!
|
|
! * CV : specific heat in SI
|
|
! * F_FR : Helmhotz free energy per electron in SI
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 11 Jun 2020
|
|
!
|
|
!
|
|
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,NINE, &
|
|
HALF,THIRD
|
|
USE CONSTANTS_P1, ONLY : K_B
|
|
USE FERMI_SI, ONLY : KF_SI
|
|
USE PI_ETC, ONLY : PI,PI2,PI_INV
|
|
USE SQUARE_ROOTS, ONLY : SQR2
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
CHARACTER (LEN = 2) :: DMN
|
|
!
|
|
INTEGER :: I_ORD
|
|
!
|
|
REAL (WP) :: RS,T
|
|
REAL (WP) :: CV
|
|
REAL (WP) :: C1,CV0,A,C,RAT,ETA_0
|
|
!
|
|
REAL (WP) :: LOG,SQRT
|
|
!
|
|
C1 = (FOUR / (NINE * PI2 * PI2))**THIRD !
|
|
A = -4.035E0_WP !
|
|
C = 0.02553E0_WP !
|
|
RAT = KF_SI / (K_B * T) !
|
|
ETA_0 = KF_SI * RAT !
|
|
!
|
|
! specific heat at T = 0
|
|
!
|
|
IF(DMN == '3D') THEN !
|
|
CV0 = HALF * THIRD * K_B* K_B * T * KF_SI ! ref. (1) eq. (7.1.17)
|
|
ELSE IF(DMN == '2D') THEN !
|
|
CV0 = THIRD * PI2 * K_B * K_B * T / (KF_SI * KF_SI) ! ref. (1) eq. (7.1.27)
|
|
END IF !
|
|
!
|
|
! r_s expansion
|
|
!
|
|
IF(DMN == '3D') THEN !
|
|
IF(I_ORD == 1) THEN !
|
|
CV = CV0 * ( ONE + C1 * RS * ( 2.5E0_WP + & !
|
|
THREE * A / PI2 - & ! ref. (1) eq. (7.1.16)
|
|
LOG(RAT * RAT) & !
|
|
) & !
|
|
) !
|
|
ELSE IF(I_ORD == 2) THEN !
|
|
CV = CV0 * ( ONE + 0.162E0_WP * RS - & !
|
|
0.166E0_WP * RS * LOG(ETA_0) - & !
|
|
0.157E0_WP * RS * RS + & ! ref. (1) eq. (7.1.22)
|
|
0.0138E0_WP * RS * RS * LOG(RS) + & !
|
|
RS * RS * ( 0.0282E0_WP * LOG(ETA_0) + & !
|
|
0.0275E0_WP * LOG(ETA_0) * LOG(ETA_0) ) & !
|
|
) !
|
|
END IF !
|
|
ELSE IF(DMN == '2D') THEN !
|
|
CV = CV0 * ( ONE + RS * ( 0.75E0_WP * SQR2 * PI_INV * & !
|
|
(ONE - 16.0E0_WP * C) - & ! ref. (1) eq. (7.1.26)
|
|
LOG(ETA_0) / SQRT(TWO*PI) & !
|
|
) & !
|
|
) !
|
|
END IF !
|
|
!
|
|
END SUBROUTINE SPECIFIC_HEAT
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION PRESSURE_3D(RS)
|
|
!
|
|
! This function computes the electron pressure in a 3D system
|
|
!
|
|
!
|
|
! References: (1) G. Giuliani and G. Vignale, "Quantum Theory of the
|
|
! Electron Liquid", Cambridge Uiversity Press (2005)
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
|
!
|
|
!
|
|
! Note: We write the ground-state energy E = E_0 + E_X + E_C as
|
|
!
|
|
! E = E_HF + E_C
|
|
!
|
|
! and use eq. (2.56) of ref. (1) to compute the derivatives of E_HF
|
|
!
|
|
! E_HF = Ad / rs^2 - Bd / rs
|
|
! D_EHF_1 = -2 * Ad / rs^3 + Bd / rs^2
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Oct 2020
|
|
!
|
|
!
|
|
USE REAL_NUMBERS, ONLY : TWO,HALF,THIRD
|
|
USE CONSTANTS_P2, ONLY : HARTREE
|
|
USE PI_ETC, ONLY : PI_INV
|
|
USE UTILITIES_1, ONLY : ALFA
|
|
USE EXT_FIELDS, ONLY : T
|
|
USE ENERGIES, ONLY : EC_TYPE
|
|
USE CORRELATION_ENERGIES
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP), INTENT(IN) :: RS
|
|
REAL (WP) :: PRESSURE_3D
|
|
REAL (WP) :: ALPHA
|
|
REAL (WP) :: A3,B3,RS2,RS3
|
|
REAL (WP) :: D_EC_1,D_EC_2,D_EHF_1
|
|
!
|
|
ALPHA = ALFA('3D') !
|
|
A3 = 0.6E0_WP / ALPHA ! ref. (1) table (2.1)
|
|
B3 = 1.5E0_WP * PI_INV / ALPHA ! idem
|
|
!
|
|
RS2 = RS * RS !
|
|
RS3 = RS2 * RS !
|
|
!
|
|
! Computing the derivatives of the correlation energy
|
|
!
|
|
CALL DERIVE_EC_3D(EC_TYPE,1,5,RS,T,D_EC_1,D_EC_2) !
|
|
!
|
|
! Computation of the first derivative of E_HF
|
|
!
|
|
D_EHF_1 = - TWO * A3 / RS3 + B3 / RS2 !
|
|
!
|
|
PRESSURE_3D = - THIRD * RS * (D_EHF_1 + D_EC_1) * & !
|
|
HALF * HARTREE ! ref. (1) eq. (1.137)
|
|
!
|
|
END FUNCTION PRESSURE_3D
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION MU_3D(RS)
|
|
!
|
|
! This function computes the chemical potential in a 3D system
|
|
!
|
|
!
|
|
! References: (1) G. Giuliani and G. Vignale, "Quantum Theory of the
|
|
! Electron Liquid", Cambridge Uiversity Press (2005)
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
|
!
|
|
!
|
|
! Note: We write the ground-state energy E = E_0 + E_X + E_C as
|
|
!
|
|
! E = E_HF + E_C
|
|
!
|
|
! and use eq. (2.56) of ref. (1) to compute the derivatives of E_HF
|
|
!
|
|
! E_HF = Ad / rs^2 - Bd / rs
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Oct 2020
|
|
!
|
|
!
|
|
USE REAL_NUMBERS, ONLY : HALF
|
|
USE PI_ETC, ONLY : PI_INV
|
|
USE CONSTANTS_P2, ONLY : HARTREE
|
|
USE UTILITIES_1, ONLY : ALFA
|
|
USE EXT_FIELDS, ONLY : T
|
|
USE ENERGIES, ONLY : EC_TYPE
|
|
USE CORRELATION_ENERGIES
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP), INTENT(IN) :: RS
|
|
REAL (WP) :: MU_3D
|
|
REAL (WP) :: E_C,E_HF
|
|
REAL (WP) :: ALPHA
|
|
REAL (WP) :: A3,B3,RS2
|
|
REAL (WP) :: P
|
|
!
|
|
ALPHA = ALFA('3D') !
|
|
A3 = 0.6E0_WP / ALPHA ! ref. (1) table (2.1)
|
|
B3 = 1.5E0_WP * PI_INV / ALPHA ! idem
|
|
!
|
|
RS2 = RS * RS !
|
|
!
|
|
! Computing the correlation energy
|
|
!
|
|
E_C = EC_3D(EC_TYPE,1,RS,T) * HALF * HARTREE !
|
|
!
|
|
! Computation of E_HF
|
|
!
|
|
E_HF = A3 / RS2 - B3 / RS !
|
|
!
|
|
! Computing the electronic pressure
|
|
!
|
|
P = PRESSURE_3D(RS)
|
|
!
|
|
MU_3D = E_HF + E_C + P ! ref. (1) eq. (1.138)
|
|
!
|
|
END FUNCTION MU_3D
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION KAPPA_0_3D(RS)
|
|
!
|
|
! This function computes the non-interacting compressibility
|
|
! in a 3D system
|
|
!
|
|
!
|
|
! References: (1) N. Iwamoto, Phys. Rev. A 30, 3289-3304 (1984)
|
|
!
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Oct 2020
|
|
!
|
|
!
|
|
USE UTILITIES_1, ONLY : ALFA
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP), INTENT(IN) :: RS
|
|
REAL (WP) :: KAPPA_0_3D
|
|
REAL (WP) :: RS2
|
|
REAL (WP) :: ALPHA
|
|
!
|
|
RS2 = RS * RS !
|
|
!
|
|
ALPHA=ALFA('3D') !
|
|
!
|
|
KAPPA_0_3D = 1.5E0_WP * ALPHA * ALPHA * RS2 ! ref. (1) eq. (2.17)
|
|
!
|
|
END FUNCTION KAPPA_0_3D
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION BULK_MOD_3D(RS)
|
|
!
|
|
! This function computes the bulk modulus in a 3D system
|
|
!
|
|
!
|
|
! References: (1) G. Giuliani and G. Vignale, "Quantum Theory of the
|
|
! Electron Liquid", Cambridge Uiversity Press (2005)
|
|
!
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Oct 2020
|
|
!
|
|
!
|
|
USE REAL_NUMBERS, ONLY : TWO,SIX,HALF,THIRD
|
|
USE PI_ETC, ONLY : PI_INV
|
|
USE CONSTANTS_P2, ONLY : HARTREE
|
|
USE UTILITIES_1, ONLY : ALFA
|
|
USE EXT_FIELDS, ONLY : T
|
|
USE ENERGIES, ONLY : EC_TYPE
|
|
USE CORRELATION_ENERGIES
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP), INTENT(IN) :: RS
|
|
REAL (WP) :: BULK_MOD_3D
|
|
REAL (WP) :: ALPHA
|
|
REAL (WP) :: A3,B3,RS2,RS3,RS4
|
|
REAL (WP) :: D_EC_1,D_EC_2,D_EHF_1,D_EHF_2
|
|
!
|
|
ALPHA = ALFA('3D') !
|
|
A3 = 0.6E0_WP / ALPHA ! ref. (1) table (2.1)
|
|
B3 = 1.5E0_WP * PI_INV / ALPHA ! idem
|
|
!
|
|
RS2 = RS * RS !
|
|
RS3 = RS2 * RS !
|
|
RS4 = RS3 * RS !
|
|
!
|
|
! Computing the derivatives of the correlation energy
|
|
!
|
|
CALL DERIVE_EC_3D(EC_TYPE,1,5,RS,T,D_EC_1,D_EC_2) !
|
|
!
|
|
! Computation of the derivatives of E_HF
|
|
!
|
|
D_EHF_1 = - TWO * A3 / RS3 + B3 / RS2 !
|
|
D_EHF_2 = - SIX * A3 / RS4 - TWO * B3 / RS3 !
|
|
!
|
|
BULK_MOD_3D = THIRD * RS * ( THIRD * RS * & !
|
|
(D_EHF_2 + D_EC_2) - & !
|
|
TWO * THIRD * RS * & !
|
|
(D_EHF_1+D_EC_1) & ! ref. (1) eq. (1.139)
|
|
) * HALF * HARTREE !
|
|
!
|
|
END FUNCTION BULK_MOD_3D
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION KAPPA_3D(RS)
|
|
!
|
|
! This function computes the interacting compressibility
|
|
! in a 3D system
|
|
!
|
|
! References: (1) G. Giuliani and G. Vignale, "Quantum Theory of the
|
|
! Electron Liquid", Cambridge Uiversity Press (2005)
|
|
!
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Oct 2020
|
|
!
|
|
!
|
|
USE REAL_NUMBERS, ONLY : ONE
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP), INTENT(IN) :: RS
|
|
REAL (WP) :: KAPPA_3D
|
|
!
|
|
KAPPA_3D = ONE / BULK_MOD_3D(RS) ! ref. (1) eq. (1.140)
|
|
!
|
|
END FUNCTION KAPPA_3D
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION U_IN_3D(RS,T)
|
|
!
|
|
! This function computes the internal energy per electron
|
|
! in a 3D system
|
|
!
|
|
! References: (1) S. Ichimaru, Rev. Mod. Phys. 54, 1017-1059 (1982)
|
|
!
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
|
! * T : system temperature in SI
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Oct 2020
|
|
!
|
|
!
|
|
USE CONSTANTS_P1, ONLY : K_B
|
|
USE PLASMON_SCALE_P, ONLY : NONID
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP), INTENT(IN) :: RS,T
|
|
REAL (WP) :: U_IN_3D
|
|
REAL (WP) :: A0,B0,C0,D0,G4
|
|
!
|
|
! Slattery-Doolen-DeWitt parameters ! ref (1) eq. (2.12)
|
|
!
|
|
A0=-0.89752E0_WP !
|
|
B0= 0.94544E0_WP ! 1 < NONID < 160
|
|
C0= 0.17954E0_WP !
|
|
D0=-0.80049E0_WP !
|
|
!
|
|
U_IN_3D = K_B * T * (A0 * NONID + B0 * G4 + & ! ref. (1) eq. (2.8)
|
|
C0 / G4 + D0 + 1.5E0_WP) ! and (2.11)
|
|
!
|
|
END FUNCTION U_IN_3D
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION U_EX_3D(RS,T)
|
|
!
|
|
! This function computes the excess internal energy per electron
|
|
! in a 3D system
|
|
!
|
|
! References: (1) S. Ichimaru, Rev. Mod. Phys. 54, 1017-1059 (1982)
|
|
!
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
|
! * T : system temperature in SI
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Oct 2020
|
|
!
|
|
!
|
|
USE CONSTANTS_P1, ONLY : K_B
|
|
USE PLASMON_SCALE_P, ONLY : NONID
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP), INTENT(IN) :: RS,T
|
|
REAL (WP) :: U_EX_3D
|
|
REAL (WP) :: A0,B0,C0,D0,G4
|
|
!
|
|
! Slattery-Doolen-DeWitt parameters ! ref (1) eq. (2.12)
|
|
!
|
|
A0=-0.89752E0_WP !
|
|
B0= 0.94544E0_WP ! 1 < NONID < 160
|
|
C0= 0.17954E0_WP !
|
|
D0=-0.80049E0_WP !
|
|
!
|
|
U_EX_3D = A0 * NONID + B0 * G4 + C0 / G4 + D0 ! ref. (3) eq. (2.11)
|
|
!
|
|
END FUNCTION U_EX_3D
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION U_IT_3D(T)
|
|
!
|
|
! This function computes the total interaction energy per electron
|
|
! in a 3D system
|
|
!
|
|
! References: (1) K. Tago, K. Utsumi and S. Ichimaru,
|
|
! Prog. Theor. Phys. 65, 54-65 (1981)
|
|
!
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * T : system temperature in SI
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Oct 2020
|
|
!
|
|
!
|
|
USE REAL_NUMBERS, ONLY : ONE,HALF,FOURTH
|
|
USE SQUARE_ROOTS, ONLY : SQR3
|
|
USE CONSTANTS_P1, ONLY : K_B
|
|
USE PLASMON_SCALE_P, ONLY : NONID
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP), INTENT(IN) :: T
|
|
REAL (WP) :: U_IT_3D
|
|
!
|
|
REAL (WP) :: A1,A2,A3
|
|
REAL (WP) :: B1,B2
|
|
!
|
|
! TUI coefficients
|
|
!
|
|
A1 = - 0.89461E0_WP ! \
|
|
A2 = 0.8165E0_WP ! |
|
|
A3 = - 0.5012E0_WP ! > ref. (1), eq. (32)-(33)
|
|
B1 = - 0.8899E0_WP ! |
|
|
B2 = 1.50E0_WP ! /
|
|
!
|
|
IF(NONID < ONE) THEN !
|
|
U_IT_3D = - SQR3 * (NONID**1.5E0_WP) * HALF !
|
|
ELSE IF(ONE <= NONID .AND. NONID <= 40.0E0_WP) THEN !
|
|
U_IT_3D = A1 * NONID + A2 * (NONID**FOURTH) + A3 !
|
|
ELSE !
|
|
U_IT_3D = B1 * NONID + B2
|
|
END IF !
|
|
!
|
|
END FUNCTION U_IT_3D
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION F_FR_3D(RS,T)
|
|
!
|
|
! This function computes the Helmholtz free energy per electron
|
|
! in a 3D system
|
|
!
|
|
! References: (1) S. Ichimaru, Rev. Mod. Phys. 54, 1017-1059 (1982)
|
|
!
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
|
! * T : system temperature in SI
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 9 Oct 2020
|
|
!
|
|
!
|
|
USE REAL_NUMBERS, ONLY : THREE,FOUR
|
|
USE CONSTANTS_P1, ONLY : K_B
|
|
USE PLASMON_SCALE_P, ONLY : NONID
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP), INTENT(IN) :: RS,T
|
|
REAL (WP) :: F_FR_3D
|
|
REAL (WP) :: A0,B0,C0,D0,G4
|
|
!
|
|
REAL (WP) :: LOG
|
|
!
|
|
! Slattery-Doolen-DeWitt parameters ! ref (1) eq. (2.12)
|
|
!
|
|
A0=-0.89752E0_WP !
|
|
B0= 0.94544E0_WP ! 1 < NONID < 160
|
|
C0= 0.17954E0_WP !
|
|
D0=-0.80049E0_WP !
|
|
!
|
|
F_FR_3D = K_B * T * ( A0 * NONID + & !
|
|
FOUR * (B0 * G4 - C0 / G4) + & !
|
|
(D0 + THREE) * LOG(NONID) - & ! ref. (1) eq. (2.14)
|
|
( A0 + FOUR * B0 - & !
|
|
FOUR * C0 + 1.135E0_WP) & !
|
|
) !
|
|
!
|
|
END FUNCTION F_FR_3D
|
|
!
|
|
END MODULE THERMODYNAMIC_PROPERTIES
|