346 lines
13 KiB
Fortran
346 lines
13 KiB
Fortran
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
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
|
||
|
|