MsSpec-DFM/New_libraries/DFM_library/CONFINEMENT_LIBRARY/coulomb.f90

114 lines
3.8 KiB
Fortran
Raw Normal View History

2022-02-02 16:19:10 +01:00
!
!=======================================================================
!
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