MsSpec-DFM/New_libraries/DFM_library/PHYSICAL_PROPERTIES_LIBRARY/thermodynamic_properties.f90

563 lines
18 KiB
Fortran
Raw Normal View History

2022-02-02 16:19:10 +01:00
!
!=======================================================================
!
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