114 lines
3.4 KiB
Fortran
114 lines
3.4 KiB
Fortran
!
|
|
!=======================================================================
|
|
!
|
|
MODULE EXCHANGE_ENERGIES
|
|
!
|
|
USE ACCURACY_REAL
|
|
!
|
|
CONTAINS
|
|
!
|
|
!------ 1) 3D case --------------------------------------------
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION EX_3D(EX_TYPE,IMODE,RS,T,XI)
|
|
!
|
|
! This subroutine computes the 3D exchange energy EX
|
|
! at a given value RS
|
|
!
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * EX_TYPE : type of kinetic energy functional
|
|
! EX_TYPE = 'HEG' --> homogeneous electron gas
|
|
! * IMODE : choice of parameters
|
|
! IMODE = 1 : no spin polarization
|
|
! IMODE = 2 : fully spin-polarized
|
|
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
|
! * T : temperature (SI)
|
|
! * XI : spin polarization : (n+ - n-) / n
|
|
!
|
|
! Output parameters:
|
|
!
|
|
! * EX_3D : value at RS
|
|
!
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 15 Sep 2020
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
CHARACTER (LEN = 3) :: EX_TYPE
|
|
!
|
|
REAL (WP), INTENT(IN) :: RS,T,XI
|
|
REAL (WP) :: EX_3D
|
|
!
|
|
INTEGER :: IMODE
|
|
!
|
|
IF(EX_TYPE == 'HEG') THEN !
|
|
EX_3D = EX_HEG_3D(RS,XI) !
|
|
END IF !
|
|
!
|
|
END FUNCTION EX_3D
|
|
!
|
|
!=======================================================================
|
|
!
|
|
FUNCTION EX_HEG_3D(RS,XI)
|
|
!
|
|
! This function computes the exchange energy in the 3D homegeneous
|
|
! electron gas model
|
|
!
|
|
! Reference: (1) U. von Barth and L. Hedin,
|
|
! J. Phys. C : Solid State Phys. 5, 1629-1642 (1972)
|
|
!
|
|
! Input parameters:
|
|
!
|
|
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
|
! * XI : spin polarization : (n+ - n-) / n
|
|
!
|
|
! Output parameters:
|
|
!
|
|
! * EX_HEG : value at RS (in Ry)
|
|
!
|
|
!
|
|
! Note: in reference (1), equations are expressend in terms of
|
|
! x = n+ / n. The relation with XI is
|
|
!
|
|
! XI = 2x - 1
|
|
!
|
|
!
|
|
! Author : D. Sébilleau
|
|
!
|
|
! Last modified : 15 Sep 2020
|
|
!
|
|
!
|
|
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,HALF,THIRD
|
|
USE PI_ETC, ONLY : PI
|
|
USE UTILITIES_1, ONLY : ALFA
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
REAL (WP), INTENT(IN) :: RS,XI
|
|
REAL (WP) :: EX_HEG_3D
|
|
REAL (WP) :: X,A,E,FX,G
|
|
REAL (WP) :: ALPHA,COEF,EX_P,MUX_P
|
|
!
|
|
X = HALF * (XI - ONE) !
|
|
A = HALF**THIRD !
|
|
E = FOUR * THIRD !
|
|
FX = ( X**E + (ONE - X)**E - A ) / (ONE - A) ! ref. 1 eq. (5.3)
|
|
G = E * A / (ONE - A) !
|
|
!
|
|
ALPHA = ALFA('3D') !
|
|
COEF = THREE / (TWO * PI * ALPHA) !
|
|
EX_P = - COEF / RS ! ref. 1 eq. (5.7)
|
|
MUX_P = E * EX_P ! ref. 1 eq. (5.8)
|
|
!
|
|
EX_HEG_3D = EX_P + MUX_P * FX / G ! ref. 1 eq. (5.4)
|
|
!
|
|
END FUNCTION EX_HEG_3D
|
|
!
|
|
END MODULE EXCHANGE_ENERGIES
|