MsSpec-DFM/New_libraries/DFM_library/ASYMPTOTIC_VALUES_LIBRARY/gr_asymptotic.f90

196 lines
8.5 KiB
Fortran
Raw Normal View History

2022-02-02 16:19:10 +01:00
!
!=======================================================================
!
MODULE GR_0
!
USE ACCURACY_REAL
!
! It contains the following functions/subroutines:
!
! * FUNCTION GR_0_2D(RS,GR0_MODE)
!
! * FUNCTION GR_0_3D(RS,GR0_MODE)
!
CONTAINS
!
!=======================================================================
!
FUNCTION GR_0_2D(RS,GR0_MODE)
!
! This function computes the value of the pair correlation function
! g(r) at r = 0 for 2D systems
!
! References: (1) J. Moreno and D. C. Marinescu,
! J. Phys.: Condens. Matter 15, 6321-6329 (2003)
! (2) M. L. Glasser, J. Phys. C: Solid State Phys. 10,
! L121-L123 (1977)
! (3) S. Nagano, K. S. Singwi and S. Ohnishi,
! Phys. Rev. B 29, 1209-1213 (1984)
! S. Nagano, K. S. Singwi and S. Ohnishi,
! Phys. Rev. B 31, 3166 (1985)
! (4) L. Calmels and A. Gold, Phys. Rev. B 57,
! 1436-1443 (1998)
! (5) Z. Qian, Phys. Rev. B 73, 035106 (2006)
!
!
! Input parameters:
!
! * RS : Wigner-Seitz radius (in units of a_0)
! * GR0_MODE : g(0) (2D)
! GR0_MODE = 'MOMA' --> Moreno-Marinescu
! GR0_MODE = 'HAFO' --> Hartree-Fock
! GR0_MODE = 'NSOA' --> Nagano-Singwi-Ohnishi
! GR0_MODE = 'CAGO' --> Calmels-Gold
! GR0_MODE = 'QIAN' --> Qian
!
!
! Author : D. Sébilleau
!
! Last modified : 24 Sep 2020
!
!
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,HALF
USE FERMI_AU, ONLY : KF_AU
USE BESSEL, ONLY : BESSI0
!
IMPLICIT NONE
!
CHARACTER (LEN = 4) :: GR0_MODE
!
REAL (WP), INTENT(IN) :: RS
REAL (WP) :: GR_0_2D
!
REAL (WP) :: L2_1,L2_2,L2_3
REAL (WP) :: NUM,DEN
!
REAL (WP) :: SQRT
!
IF(GR0_MODE == 'MOMA') THEN !
GR_0_2D = HALF / (ONE + 0.6032E0_WP * RS + & !
0.07263E0_WP * RS * RS)**2 ! ref. (1) eq. (1)
ELSE IF(GR0_MODE == 'HAFO') THEN !
GR_0_2D = 0.75E0_WP ! ref. (2)
ELSE IF(GR0_MODE == 'NSOA') THEN !
GR_0_2D = HALF / BESSI0(TWO / SQRT(KF_AU)) !
ELSE IF(GR0_MODE == 'CAGO') THEN !
GR_0_2D = HALF / (ONE + TWO / KF_AU + 1.5E0_WP / & !
(KF_AU * KF_AU)) ! ref. (4) eq. (18)
ELSE IF(GR0_MODE == 'QIAN') THEN !
L2_1 = RS / SQRT(TWO) ! lambda_2
L2_2 = L2_1 * L2_1 !
L2_3 = L2_2 * L2_1 !
NUM = 15.0E0 * ( 64.0E0_WP + 25.0E0_WP * L2_1 + & !
THREE * L2_2 ) !
DEN = 960.0E0_WP + 1335.0E0_WP * L2_1 + & !
509.0E0_WP * L2_2 + 64.0E0_WP * L2_3 !
GR_0_2D = NUM * NUM / (DEN * DEN) ! ref. (5) eq. (10)
END IF !
!
END FUNCTION GR_0_2D
!
!=======================================================================
!
FUNCTION GR_0_3D(RS,GR0_MODE)
!
! This function computes the value of the pair correlation function
! g(r) at r = 0 for 3D systems
!
! References: (1) B. Davoudi, M. Polini, G. F. Giuliani and M. P. Tosi,
! Phys. Rev. B 64, 153101 (2001)
! (2) G. E. Simion and G. F. Giuliani, Phys. Rev. B 77,
! 035131 (2008)
! (3) A. Holas, P. K. Aravind and K. S. Singwi,
! Phys. Rev. B 20, 4912-4934 (1979)
! (4) S. Ichimaru, Rev. Mod. Phys. 54, 1017-1059 (1982)
! (5) L. Calmels and A. Gold, Phys. Rev. B 57,
! 1436-1443 (1998)
! (6) V. D. Gorobchenko, V. N. Kohn and E. G. Maksimov,
! in "Modern Problems in Condensed Matter" Vol. 24,
! L. V. Keldysh, D. A. Kirzhnitz and A. A. Maradudin ed.
! pp. 87-219 (North-Holland, 1989)
! (7) Z. Qian, Phys. Rev. B 73, 035106 (2006)
!
!
! Input parameters:
!
! * RS : Wigner-Seitz radius (in units of a_0)
! * GR0_MODE : g(0) (3D)
! GR0_MODE = 'DPGT' --> Davoudi-Polini-Giuliani-Tosi
! GR0_MODE = 'OVE1' --> Overhauser 1
! GR0_MODE = 'OVE2' --> Overhauser 2
! GR0_MODE = 'HASA' --> Holas-Aravind-Singwi (small r_s)
! GR0_MODE = 'ICHI' --> Ichimaru
! GR0_MODE = 'CAGO' --> Calmels-Gold
! GR0_MODE = 'KIMB' --> Kimball
! GR0_MODE = 'QIAN' --> Qian
!
!
! Author : D. Sébilleau
!
! Last modified : 5 Jun 2020
!
!
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,SIX,EIGHT, &
NINE,HALF,FOURTH,FIFTH,EIGHTH
USE FERMI_AU, ONLY : KF_AU
USE PI_ETC, ONLY : PI,PI2,PI_INV
USE UTILITIES_1, ONLY : ALFA
USE BESSEL, ONLY : BESSI1
!
IMPLICIT NONE
!
CHARACTER (LEN = 4) :: GR0_MODE
!
REAL (WP), INTENT(IN) :: RS
REAL (WP) :: GR_0_3D
!
REAL (WP) :: Z
REAL (WP) :: ALPHA
REAL (WP) :: C,D,ARP
REAL (WP) :: L3_1,L3_2,L3_3
REAL (WP) :: NUM,DEN
!
REAL (WP) :: LOG,SQRT
!
ALPHA = ALFA('3D') !
!
IF(GR0_MODE == 'DPGT') THEN !
GR_0_3D = HALF / ( ONE + 1.372E0_WP * RS + & !
0.0830E0_WP * RS * RS ) ! ref. (1) eq. (9)
ELSE IF(GR0_MODE == 'OVE1') THEN !
GR_0_3D = 32.0E0_WP / (EIGHT + THREE * RS)**2 ! ref. (2) eq. (35)
ELSE IF(GR0_MODE == 'HASA') THEN !
GR_0_3D = HALF * FIFTH * ALPHA * PI_INV * & !
(PI2 + SIX * LOG(TWO) - THREE) * RS - & ! ref. (3) eq. (7.13)
(1.5E0_WP * ALPHA * PI_INV)**2 * & !
(THREE - FOURTH * PI2) * RS * RS * LOG(RS) !
ELSE IF(GR0_MODE == 'ICHI') THEN !
Z =FOUR * SQRT(ALPHA * RS / PI) ! ref. (4) eq. (3.67)
GR_0_3D = EIGHTH * (Z / BESSI1(Z))**2 !
ELSE IF(GR0_MODE == 'CAGO') THEN !
GR_0_3D = HALF * TWO * PI_INV * KF_AU + & ! ref. (5) eq. (11)
14.0E0_WP / (THREE * (PI * KF_AU)**2) !
ELSE IF(GR0_MODE == 'OVE2') THEN !
GR_0_3D = HALF / ( ONE + 0.75E0_WP * RS + & !
0.141E0_WP * RS * RS ) ! ref. (5)
ELSE IF(GR0_MODE == 'KIMB') THEN !
C = FIFTH * (PI2 + SIX * LOG(TWO) - THREE) ! ref. (6) eq. (2.55)
D = NINE * (12.0E0_WP - PI2) / 16.0E0_WP ! ref. (6) eq. (2.55)
ARP = ALPHA * PI_INV * RS !
GR_0_3D = HALF - C * ARP - D * ARP * ARP * LOG(RS) ! ref. (6) eq. (2.54)
ELSE IF(GR0_MODE == 'QIAN') THEN !
L3_1 = TWO * ALPHA * RS * PI_INV !
L3_2 = L3_1 * L3_1 !
L3_3 = L3_2 * L3_1 !
NUM = 45.0E0_WP * ( 45.0E0_WP + 24.0E0_WP * L3_1 + & !
FOUR * L3_2 ) !
DEN = 2025.0E0_WP + 3105.0E0_WP * L3_1 + & !
1512.0E0_WP * L3_2 + 256.0E0_WP * L3_3 !
GR_0_3D = NUM * NUM / (DEN * DEN) ! ref. (7) eq. (9)
END IF !
!
END FUNCTION GR_0_3D
!
END MODULE GR_0