158 lines
4.3 KiB
Fortran
158 lines
4.3 KiB
Fortran
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
MODULE SCREENING_VEC
|
||
|
!
|
||
|
USE ACCURACY_REAL
|
||
|
!
|
||
|
CONTAINS
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE SCREENING_VECTOR(SC_TYPE,DMN,X,RS,T,KS_SI)
|
||
|
!
|
||
|
! This subroutine computes the screening vector
|
||
|
!
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * SC_TYPE : type of screeening
|
||
|
! SC_TYPE = 'NO' no screening
|
||
|
! SC_TYPE = 'DH' Debye-Hückel
|
||
|
! SC_TYPE = 'TF' Thomas-Fermi
|
||
|
! * DMN : dimension of the system
|
||
|
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
! * T : system temperature in SI
|
||
|
!
|
||
|
!
|
||
|
! Output parameters:
|
||
|
!
|
||
|
! * KS_SI : screening vector expressed in SI
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 9 Oct 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : ZERO
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
CHARACTER (LEN = 2) :: SC_TYPE,DMN
|
||
|
!
|
||
|
REAL (WP), INTENT(IN) :: X,RS,T
|
||
|
REAL (WP) :: KS_SI
|
||
|
!
|
||
|
IF(SC_TYPE == 'NO') THEN !
|
||
|
KS_SI = ZERO !
|
||
|
ELSE IF(SC_TYPE == 'DH') THEN !
|
||
|
CALL DEBYE_VECTOR(DMN,T,RS,KS_SI) !
|
||
|
ELSE IF(SC_TYPE == 'TF') THEN !
|
||
|
CALL THOMAS_FERMI_VECTOR(DMN,KS_SI) !
|
||
|
END IF !
|
||
|
!
|
||
|
END SUBROUTINE SCREENING_VECTOR
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE THOMAS_FERMI_VECTOR(DMN,K_TF_SI)
|
||
|
!
|
||
|
! This subroutine computes the Thomas-Fermi screening vector
|
||
|
!
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * DMN : dimension of the system
|
||
|
! DMN = '3D'
|
||
|
! DMN = '2D'
|
||
|
! DMN = '1D'
|
||
|
!
|
||
|
!
|
||
|
! Output parameters:
|
||
|
!
|
||
|
! * K_TF_SI : screening vector expressed in SI
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 4 Jun 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : TWO,FOUR,EIGHT
|
||
|
USE CONSTANTS_P1, ONLY : BOHR
|
||
|
USE PI_ETC, ONLY : PI
|
||
|
USE FERMI_SI, ONLY : KF_SI
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
CHARACTER (LEN = 2) :: DMN
|
||
|
!
|
||
|
REAL (WP) :: K_TF_SI
|
||
|
REAL (WP) :: KOEF
|
||
|
!
|
||
|
REAL (WP) :: SQRT
|
||
|
!
|
||
|
KOEF = BOHR !
|
||
|
!
|
||
|
IF(DMN == '3D') THEN !
|
||
|
K_TF_SI = SQRT(FOUR * KF_SI / (PI * KOEF)) !
|
||
|
ELSE IF(DMN == '2D') THEN !
|
||
|
K_TF_SI = TWO / KOEF !
|
||
|
ELSE IF(DMN == '1D') THEN !
|
||
|
K_TF_SI = SQRT(EIGHT / (KOEF * KF_SI)) !
|
||
|
END IF !
|
||
|
!
|
||
|
END SUBROUTINE THOMAS_FERMI_VECTOR
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE DEBYE_VECTOR(DMN,T,RS,KD_SI)
|
||
|
!
|
||
|
! This subroutine computes the Debye screening vector
|
||
|
!
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * DMN : dimension of the system
|
||
|
! DMN = '3D'
|
||
|
! DMN = '2D'
|
||
|
! DMN = '1D'
|
||
|
! * T : system temperature in SI
|
||
|
! * RS : Wigner-Seitz radius (in units of a_0)
|
||
|
!
|
||
|
!
|
||
|
! Output parameters:
|
||
|
!
|
||
|
! * KD_SI : screening vector expressed in SI
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 27 Jul 2020
|
||
|
!
|
||
|
!
|
||
|
USE CONSTANTS_P1, ONLY : EPS_0,E,K_B
|
||
|
USE UTILITIES_1, ONLY : RS_TO_N0
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
CHARACTER (LEN = 2) :: DMN
|
||
|
!
|
||
|
REAL (WP) :: T,RS
|
||
|
REAL (WP) :: KD_SI
|
||
|
REAL (WP) :: N0
|
||
|
!
|
||
|
REAL (WP) :: SQRT
|
||
|
!
|
||
|
! Computing the electron density
|
||
|
!
|
||
|
N0 = RS_TO_N0(DMN,RS) !
|
||
|
!
|
||
|
KD_SI = SQRT(E * E * N0 / (EPS_0 * K_B * T)) !
|
||
|
!
|
||
|
END SUBROUTINE DEBYE_VECTOR
|
||
|
!
|
||
|
END MODULE SCREENING_VEC
|