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

346 lines
13 KiB
Fortran
Raw Normal View History

2022-02-02 16:19:10 +01:00
!
!=======================================================================
!
MODULE FERMI_VALUES
!
! This module computes the Fermi level physical quantities
!
USE ACCURACY_REAL
!
CONTAINS
!
!=======================================================================
!
SUBROUTINE CALC_FERMI(DMN,RS)
!
! This subroutine computes Fermi level quantities
!
!
! * DMN : dimension
! * RS : Wigner-Seitz radius (in units of a_0)
!
!
! Author : D. Sébilleau
!
! Last modified : 27 Jul 2020
!
USE REAL_NUMBERS, ONLY : ONE
USE ENE_CHANGE, ONLY : EV,RYD
USE CONSTANTS_P1, ONLY : BOHR,H_BAR,M_E,K_B
USE REAL_NUMBERS, ONLY : TWO,HALF
USE PI_ETC, ONLY : PI,PI2
USE UTILITIES_1, ONLY : ALFA
!
USE FERMI_SI
USE FERMI_AU
!
IMPLICIT NONE
!
CHARACTER (LEN = 2) :: DMN
!
REAL (WP), INTENT(IN) :: RS
REAL (WP) :: KF,EF
REAL (WP) :: NUM,DEN
!
KF = ONE / (ALFA(DMN) * RS) ! a_0 * k_F
EF = KF * KF * RYD ! Fermi energy in eV
!
KF_SI = KF / BOHR ! Fermi momentum in 1/m
EF_SI = EF * EV ! Fermi energy in J
VF_SI = H_BAR * KF_SI / M_E ! Fermi velocity in m/s
TF_SI = EF_SI / K_B ! Fermi temperature in K
!
! Computation of n(E_F)
!
IF(DMN == '3D') THEN !
NUM = M_E * KF_SI !
DEN = H_BAR * H_BAR * PI2 !
ELSE IF(DMN == '2D') THEN !
NUM = M_E !
DEN = H_BAR * H_BAR * PI !
ELSE IF(DMN == '1D') THEN !
NUM = TWO * M_E !
DEN = H_BAR *H_BAR * PI * KF_SI !
END IF !
NF_SI = NUM / DEN !
!
KF_AU = KF ! Fermi momentum in AU
EF_AU = HALF * KF * KF ! Fermi energy in AU
VF_AU = KF ! Fermi velocity in AU
!
END SUBROUTINE CALC_FERMI
!
!=======================================================================
!
END MODULE FERMI_VALUES
!
!=======================================================================
!
MODULE FERMI_VALUES_M
!
! This module computes the Fermi level physical quantities
!
USE ACCURACY_REAL
!
CONTAINS
!
!=======================================================================
!
SUBROUTINE CALC_FERMI_M(DMN,RS)
!
! This subroutine computes Fermi level quantities
! in the presence of an external magnetic field
!
!
! * DMN : dimension
! * RS : Wigner-Seitz radius (in units of a_0)
!
!
! Author : D. Sébilleau
!
! Last modified : 22 Jun 2020
!
USE EXT_FIELDS, ONLY : T,H
USE REAL_NUMBERS, ONLY : HALF
USE CONSTANTS_P1, ONLY : BOHR,H_BAR,M_E,K_B
USE CONSTANTS_P3, ONLY : MU_B
!
USE FERMI_SI_M
USE FERMI_AU_M
!
CHARACTER (LEN = 2) :: DMN
!
REAL (WP) :: RS
REAL (WP) :: A
!
A=MU_B*H ! --> check B or H
!
! Computing k_F in AU
!
IF(DMN == '3D') THEN !
KF_AU_M=KF_M_3D(RS,T,A) !
ELSE IF(DMN == '2D') THEN !
KF_AU_M=KF_M_2D(RS,T,A) !
ELSE IF(DMN == '1D') THEN !
CONTINUE !
END IF !
!
EF_AU_M=HALF*KF_AU_M*KF_AU_M !
VF_AU_M=KF_AU_M !
!
KF_SI_M=KF_AU_M/BOHR !
EF_SI_M=HALF*H_BAR*H_BAR*KF_SI_M*KF_SI_M/M_E !
VF_SI_M=H_BAR*KF_SI_M/M_E !
TF_SI_M=EF_SI_M/K_B !
!
END SUBROUTINE CALC_FERMI_M
!
!=======================================================================
!
FUNCTION KF_M_3D(RS,T,A)
!
! This function computes the temperature-dependent Fermi wave vector
! in the presence of an external magnetic field for 3D systems
!
! References: (7) A. Isihara and D. Y. Kojima, Phys. Rev. B 10,
! 4925-4931 (1974)
! Input parameters:
!
! * RS : Wigner-Seitz radius (in units of a_0)
! * T : system temperature in SI
! * A : sqrt(mu_B * B) : magnitude of the magnetic field
!
!
! Output parameters:
!
! * KF_M_3D : Fermi wave number in AU
!
!
!
! Author : D. Sébilleau
!
! Last modified : 11 Jun 2020
!
!
USE REAL_NUMBERS, ONLY : ONE,FIVE,THIRD,FOURTH,SMALL
USE CONSTANTS_P1, ONLY : K_B
USE FERMI_AU, ONLY : KF_AU
USE PI_ETC, ONLY : PI2
USE G_FACTORS, ONLY : G_E
!
IMPLICIT NONE
!
REAL (WP) :: RS,T,A
REAL (WP) :: KF_M_3D
REAL (WP) :: BETA,ETA0,LNE0,KFT,KFM,RS2,LRS
REAL (WP) :: A4
REAL (WP) :: KG1,KG2,KG3
!
A4=A*A*A*A !
!
BETA=ONE/(K_B*T) !
ETA0=BETA*KF_AU*KF_AU !
LNE0=DLOG(ETA0) !
!
RS2=RS*RS !
LRS=DLOG(RS) !
!
KG1=FOURTH*G_E*G_E !
KG2=KG1 - THIRD !
KG3=KG1 - FIVE/18.0E0_WP !
!
! No magnetic field contribution
!
KFT=KF_AU*(ONE - 0.16586E0_WP*RS + RS2*( & !
0.0084411E0_WP*LRS - 0.027620E0_WP ) - & !
PI2/(24.0E0_WP*ETA0*ETA0)* ( & !
ONE - 0.16586E0_WP*RS + RS2*( & !
0.20808E0_WP + 0.022197E0_WP*LRS - & ! ref. (7) eq. (5.1)
0.00072406E0_WP*LNE0 - 0.027510E0_WP*LNE0*LNE0 & !
) & !
) & !
) !
!
! Magnetic field contribution
!
KFM=-A4/(8.0E0_WP*KF_AU*KF_AU*KF_AU) * ( & !
KG2 + 0.16586E0_WP*RS*KG3 + RS2 * ( & !
0.054782E0_WP*KG1 - 0.018387E0_WP + & !
(0.033135E0_WP - 0.072955E0_WP*KG1)*LRS) + & !
PI2/(24.0E0_WP*ETA0*ETA0)* ( & !
7.0E0_WP*KG2 + 0.16586E0_WP*(1.6462E0_WP-KG1)*RS + & !
RS2* ( 1.2783E0_WP - 4.9163E0_WP*KG1 + & ! ref. (7) eq. (5.3)
(1.25192E0_WP-0.40312E0_WP*KG1)*LRS + & !
(0.0016895E0_WP-0.0050178E0_WP*KG1)*LNE0 + & !
(0.064190E0_WP-0.19257E0_WP*KG1)*LNE0*LNE0 & !
) & !
) & !
) !
!
IF(A > SMALL) THEN !
KF_M_3D=KFT+KFM !
ELSE !
KF_M_3D=KFT !
END IF !
!
END FUNCTION KF_M_3D
!
!=======================================================================
!
FUNCTION KF_M_2D(RS,T,A)
!
! This function computes the temperature-dependent Fermi wave vector
! in the presence of an external magnetic field for 3D systems
!
! References: (2) A. Isihara and T. Toyoda, Phys. Rev. B 19,
! 831-845 (1979)
! (3) A. Isihara and D. Y. Kojima, Phys. Rev. B 19,
! 846-855 (1979)
!
! Input parameters:
!
! * RS : Wigner-Seitz radius (in units of a_0)
! * T : system temperature in SI
! * A : sqrt(mu_B * B) : magnitude of the magnetic field
! * FLD : strength of the field
! FLD = 'WF' weak field --> ref. (2)
! FLD = 'IF' intermediate field --> ref. (3)
!
!
! Output parameters:
!
! * KF_M_2D : Fermi wave number in AU
!
!
!
! Author : D. Sébilleau
!
! Last modified : 11 Jun 2020
!
!
USE REAL_NUMBERS, ONLY : ZERO,ONE,FOUR,HALF,THIRD,SMALL
USE CONSTANTS_P1, ONLY : E,K_B
USE FERMI_AU, ONLY : KF_AU
USE PI_ETC, ONLY : PI,PI2
USE G_FACTORS, ONLY : G_E
USE EXT_FIELDS, ONLY : FLD
!
IMPLICIT NONE
!
REAL (WP) :: RS,T,A
REAL (WP) :: KF_M_2D
REAL (WP) :: BETA,KFT,KFM,RS2,LRS
REAL (WP) :: S0,ETA0,GAM0
REAL (WP) :: ALPHA
REAL (WP) :: A4,LS1,LS2
REAL (WP) :: G2,XL,X1,X2,X3,SI,I
!
INTEGER :: L,LMAX
!
LMAX=100 ! max. value of l-sums
!
G2=G_E*G_E !
!
RS2=RS*RS !
LRS=DLOG(RS) !
!
A4=A*A*A*A !
ALPHA=A4/(RS2*RS2*KF_AU*KF_AU*KF_AU*KF_AU) !
!
BETA=ONE/(K_B*T) !
ETA0=BETA*KF_AU*KF_AU !
S0=E*E/KF_AU !
GAM0=A*A/(KF_AU*KF_AU ) !
!
IF(FLD == 'WF') THEN !
!
! No magnetic field contribution
!
KFT=KF_AU*(ONE - 0.4501E0_WP*RS - 0.1427E0_WP*RS2) ! ref. (2) eq. (7.4)
!
! Magnetic field contribution
!
KFM=KF_AU*ALPHA*RS2*RS2*( & !
(1.407E-2_WP*G2 - 3.997E-3_WP)*RS - & !
4.689E-3_WP*RS*LRS + & !
(3.372E-3_WP*G2 + 2.287E-2_WP)*RS2 - & !
6.333E-3_WP*RS*LRS & !
) !
!
IF(A > SMALL) THEN !
KF_M_2D=KFT+KFM !
ELSE
KF_M_2D=KFT !
END IF !
!
ELSE IF(FLD == 'IF') THEN !
!
I=0.8149E0_WP ! ref. (3) eq. (5.19)
!
! Calculation of l-sums
!
SI=-ONE ! init. of sign
LS1=ZERO !
LS2=ZERO !
DO L=1,LMAX !
XL=DFLOAT(L) !
X1=XL*PI/GAM0 !
X2=HALF*G_E*XL*PI !
X3=XL*PI2/ALPHA !
SI=-SI ! (-1)^(l+1)
LS1=LS1+SI*DSIN(X1)*DCOS(X2)/DSINH(X3) !
LS2=LS2+SI*DSIN(X1)*DCOS(X2)/DSIN(X3) !
END DO !
!
KF_M_2D=KF_AU*(ONE + PI*LS1/ETA0 - & !
THIRD*I*(S0**(FOUR*THIRD))* & ! ref. (3) eq. (6.1)
(ONE-PI*LS2/ETA0) & !
) !
!
END IF !
!
END FUNCTION KF_M_2D
!
END MODULE FERMI_VALUES_M