114 lines
3.8 KiB
Fortran
114 lines
3.8 KiB
Fortran
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
MODULE COULOMB_K
|
||
|
!
|
||
|
USE ACCURACY_REAL
|
||
|
!
|
||
|
CONTAINS
|
||
|
!
|
||
|
!=======================================================================
|
||
|
!
|
||
|
SUBROUTINE COULOMB_FF(DMN,UNIT,Q,KS,V_C)
|
||
|
!
|
||
|
! This subroutine computes Coulomb potentials in the k-space
|
||
|
! in all dimensions, including the form factors
|
||
|
! to account for various confinements
|
||
|
!
|
||
|
!
|
||
|
! Input parameters:
|
||
|
!
|
||
|
! * DMN : dimension of the system
|
||
|
! * UNIT : system unit
|
||
|
! * Q : wave vector in UNIT
|
||
|
! * KS : screening wave vector in UNIT
|
||
|
!
|
||
|
!
|
||
|
! Output variables :
|
||
|
!
|
||
|
! * V_C : Coulomb potential in k-space (in UNIT)
|
||
|
!
|
||
|
!
|
||
|
!
|
||
|
! Note: In the coding of the different form factors,
|
||
|
! we have taken the following convention:
|
||
|
!
|
||
|
! 3D : V(q) = e^2 / (EPS_0 * q^2) * FF [SI]
|
||
|
! 4 pi e^2 / q^2 * FF [CGS]
|
||
|
!
|
||
|
! Q2D,2D : V(q) = e^2 / (2*EPS_0 * q) * FF [SI]
|
||
|
! 2 pi e^2 / q * FF [CGS]
|
||
|
!
|
||
|
! Q1D,1D : V(q) = e^2 / EPS_0 * FF [SI]
|
||
|
! 4 pi e^2 * FF [CGS]
|
||
|
!
|
||
|
!
|
||
|
! Author : D. Sébilleau
|
||
|
!
|
||
|
! Last modified : 5 Oct 2020
|
||
|
!
|
||
|
!
|
||
|
USE REAL_NUMBERS, ONLY : FOUR,HALF
|
||
|
USE PI_ETC, ONLY : PI
|
||
|
USE CONFIN_VAL, ONLY : R0
|
||
|
USE CONFINEMENT_FF, ONLY : CONFIN_FF
|
||
|
USE CONSTANTS_P1, ONLY : E,EPS_0
|
||
|
USE FERMI_SI, ONLY : KF_SI
|
||
|
USE FERMI_AU, ONLY : KF_AU
|
||
|
!
|
||
|
IMPLICIT NONE
|
||
|
!
|
||
|
CHARACTER (LEN = 3) :: UNIT
|
||
|
CHARACTER (LEN = 2) :: DMN
|
||
|
!
|
||
|
REAL (WP) :: Q,KS
|
||
|
REAL (WP) :: V_C
|
||
|
REAL (WP) :: X,COEF,Q2,KS2,QKS2
|
||
|
REAL (WP) :: FF
|
||
|
!
|
||
|
REAL (WP) :: SQRT
|
||
|
!
|
||
|
! Unit-dependent factors
|
||
|
!
|
||
|
IF(UNIT == 'SIU') THEN !
|
||
|
COEF = E * E / EPS_0 !
|
||
|
X = HALF * Q / KF_SI ! X = q / (2 * k_F)
|
||
|
ELSE IF(UNIT == 'CGS') THEN !
|
||
|
COEF = FOUR * PI * E * E !
|
||
|
X = HALF * Q / KF_AU ! X = q / (2 * k_F)
|
||
|
END IF !
|
||
|
!
|
||
|
Q2 = Q * Q !
|
||
|
KS2 = KS * KS !
|
||
|
QKS2 = Q2 + KS2 !
|
||
|
!
|
||
|
IF(DMN == '3D') THEN !
|
||
|
!
|
||
|
V_C = COEF / QKS2 !
|
||
|
!
|
||
|
ELSE IF(DMN == '2D') THEN !
|
||
|
!
|
||
|
FF = CONFIN_FF(X) !
|
||
|
V_C = HALF * COEF * FF / SQRT(QKS2) !
|
||
|
!
|
||
|
ELSE IF(DMN == 'Q2') THEN !
|
||
|
!
|
||
|
FF = CONFIN_FF(X) !
|
||
|
V_C = HALF * COEF * FF / SQRT(QKS2) !
|
||
|
!
|
||
|
ELSE IF(DMN == 'Q1') THEN !
|
||
|
!
|
||
|
FF = CONFIN_FF(X) !
|
||
|
V_C = COEF * FF !
|
||
|
!
|
||
|
ELSE IF(DMN == '1D') THEN !
|
||
|
!
|
||
|
FF = CONFIN_FF(X) !
|
||
|
V_C = COEF * FF !
|
||
|
!
|
||
|
END IF !
|
||
|
!
|
||
|
END SUBROUTINE COULOMB_FF
|
||
|
!
|
||
|
END MODULE COULOMB_K
|