initial commit
This commit is contained in:
commit
9893530eb7
|
@ -0,0 +1,401 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE ACCURACY_REAL
|
||||
!
|
||||
INTEGER, PARAMETER :: SP = SELECTED_REAL_KIND(6, 37) ! single precision
|
||||
INTEGER, PARAMETER :: DP = SELECTED_REAL_KIND(15, 307) ! double precision
|
||||
INTEGER, PARAMETER :: QP = SELECTED_REAL_KIND(33, 4931) ! quadruple precision
|
||||
!
|
||||
INTEGER, PARAMETER :: WP = DP ! selected value for code
|
||||
!
|
||||
END MODULE ACCURACY_REAL
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE ACCURACY_INTEGER
|
||||
!
|
||||
INTEGER, PARAMETER :: I1 = SELECTED_INT_KIND(8) ! default precision
|
||||
INTEGER, PARAMETER :: I2 = SELECTED_INT_KIND(16) ! single precision
|
||||
INTEGER, PARAMETER :: I4 = SELECTED_INT_KIND(32) ! double precision
|
||||
INTEGER, PARAMETER :: I8 = SELECTED_INT_KIND(64) ! quadruple precision
|
||||
!
|
||||
INTEGER, PARAMETER :: IW = I1 ! selected value for code
|
||||
!
|
||||
END MODULE ACCURACY_INTEGER
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE MINMAX_VALUES
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
USE ACCURACY_INTEGER
|
||||
!
|
||||
INTEGER (IW) :: III
|
||||
!
|
||||
REAL (WP) :: XXX
|
||||
!
|
||||
INTEGER (IW), PARAMETER :: INT_MAX = HUGE(III) ! maximal value of integer
|
||||
!
|
||||
REAL (WP), PARAMETER :: LN2 = 0.6931471805599453094172321214581765681D0 ! ln(2)
|
||||
|
||||
REAL (WP), PARAMETER :: MAX_2XP = MAXEXPONENT(XXX) ! max value of y so that 2^x is defined
|
||||
REAL (WP), PARAMETER :: MIN_2XP = MINEXPONENT(XXX) ! max value of y so that 2^-x is defined
|
||||
REAL (WP), PARAMETER :: REL_MIN = TINY(XXX) ! minimum value of real number
|
||||
REAL (WP), PARAMETER :: REL_MAX = HUGE(XXX) ! maximum value of real number
|
||||
REAL (WP), PARAMETER :: EPS_MIN = EPSILON(XXX) ! smallest value real such that x + epsilon /= x and x = 1
|
||||
REAL (WP), PARAMETER :: DGT_SIG = DIGITS(XXX) ! number of significant digits
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE MINMAX_EXP(MAX_EXP,MIN_EXP)
|
||||
!
|
||||
! This module computes the maximal and minimal exponent
|
||||
! so that e^x is defined
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(OUT) :: MAX_EXP,MIN_EXP
|
||||
!
|
||||
REAL (WP), PARAMETER :: LN2 = 0.6931471805599453094172321214581765681D0 ! ln(2)
|
||||
!
|
||||
MAX_EXP = INT(MAXEXPONENT(XXX) * LN2) ! max value of y so that e^x is defined
|
||||
MIN_EXP = INT(MINEXPONENT(XXX) * LN2) ! max value of y so that e^-x is defined
|
||||
!
|
||||
END SUBROUTINE MINMAX_EXP
|
||||
!
|
||||
END MODULE MINMAX_VALUES
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE MACHINE_ACCURACY
|
||||
!
|
||||
! This module provides the AMOS legacy routines for machine accuracy:
|
||||
!
|
||||
! * FUNCTION D1MACH(I) --> double precision reals
|
||||
!
|
||||
! * FUNCTION I1MACH(I) --> integers
|
||||
!
|
||||
! * FUNCTION R1MACH(I) --> single precision reals
|
||||
!
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
USE ACCURACY_INTEGER
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION D1MACH(I)
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER (IW) :: I
|
||||
!
|
||||
REAL (WP) :: D1MACH
|
||||
REAL (WP) :: B,X
|
||||
!
|
||||
!***BEGIN PROLOGUE D1MACH
|
||||
!***PURPOSE Return floating point machine dependent constants.
|
||||
!***LIBRARY SLATEC
|
||||
!***CATEGORY R1
|
||||
!***TYPE SINGLE PRECISION (D1MACH-S, D1MACH-D)
|
||||
!***KEYWORDS MACHINE CONSTANTS
|
||||
!***AUTHOR Fox, P. A., (Bell Labs)
|
||||
! Hall, A. D., (Bell Labs)
|
||||
! Schryer, N. L., (Bell Labs)
|
||||
!***DESCRIPTION
|
||||
!
|
||||
! D1MACH can be used to obtain machine-dependent parameters for the
|
||||
! local machine environment. It is a function subprogram with one
|
||||
! (input) argument, and can be referenced as follows:
|
||||
!
|
||||
! A = D1MACH(I)
|
||||
!
|
||||
! where I=1,...,5. The (output) value of A above is determined by
|
||||
! the (input) value of I. The results for various values of I are
|
||||
! discussed below.
|
||||
!
|
||||
! D1MACH(1) = B**(EMIN-1), the smallest positive magnitude.
|
||||
! D1MACH(2) = B**EMAX*(1 - B**(-T)), the largest magnitude.
|
||||
! D1MACH(3) = B**(-T), the smallest relative spacing.
|
||||
! D1MACH(4) = B**(1-T), the largest relative spacing.
|
||||
! D1MACH(5) = LOG10(B)
|
||||
!
|
||||
! Assume single precision numbers are represented in the T-digit,
|
||||
! base-B form
|
||||
!
|
||||
! sign (B**E)*( (X(1)/B) + ... + (X(T)/B**T) )
|
||||
!
|
||||
! where 0 .LE. X(I) .LT. B for I=1,...,T, 0 .LT. X(1), and
|
||||
! EMIN .LE. E .LE. EMAX.
|
||||
!
|
||||
! The values of B, T, EMIN and EMAX are provided in I1MACH as
|
||||
! follows:
|
||||
! I1MACH(10) = B, the base.
|
||||
! I1MACH(11) = T, the number of base-B digits.
|
||||
! I1MACH(12) = EMIN, the smallest exponent E.
|
||||
! I1MACH(13) = EMAX, the largest exponent E.
|
||||
!
|
||||
!
|
||||
!***REFERENCES P. A. Fox, A. D. Hall and N. L. Schryer, Framework for
|
||||
! a portable library, ACM Transactions on Mathematical
|
||||
! Software 4, 2 (June 1978), pp. 177-188.
|
||||
!***ROUTINES CALLED XERMSG
|
||||
!***REVISION HISTORY (YYMMDD)
|
||||
! 790101 DATE WRITTEN
|
||||
! 960329 Modified for Fortran 90 (BE after suggestions by EHG)
|
||||
!***END PROLOGUE D1MACH
|
||||
!
|
||||
X = 1.0E0_WP
|
||||
B = RADIX(X)
|
||||
!
|
||||
SELECT CASE (I)
|
||||
CASE (1)
|
||||
D1MACH = B**(MINEXPONENT(X)-1) ! the smallest positive magnitude.
|
||||
CASE (2)
|
||||
D1MACH = HUGE(X) ! the largest magnitude.
|
||||
CASE (3)
|
||||
D1MACH = B**(-DIGITS(X)) ! the smallest relative spacing.
|
||||
CASE (4)
|
||||
D1MACH = B**(1-DIGITS(X)) ! the largest relative spacing.
|
||||
CASE (5)
|
||||
D1MACH = LOG10(B)
|
||||
CASE DEFAULT
|
||||
WRITE (*,10)
|
||||
STOP
|
||||
END SELECT
|
||||
!
|
||||
! Formats:
|
||||
!
|
||||
10 FORMAT ('1ERROR 1 in D1MACH - I out of bounds')
|
||||
!
|
||||
END FUNCTION D1MACH
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION I1MACH(I)
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: I,I1MACH
|
||||
!
|
||||
REAL (SP) :: X
|
||||
!
|
||||
REAL (WP) :: XX
|
||||
!
|
||||
!***BEGIN PROLOGUE I1MACH
|
||||
!***PURPOSE Return integer machine dependent constants.
|
||||
!***LIBRARY SLATEC
|
||||
!***CATEGORY R1
|
||||
!***TYPE INTEGER (I1MACH-I)
|
||||
!***KEYWORDS MACHINE CONSTANTS
|
||||
!***AUTHOR Fox, P. A., (Bell Labs)
|
||||
! Hall, A. D., (Bell Labs)
|
||||
! Schryer, N. L., (Bell Labs)
|
||||
!***DESCRIPTION
|
||||
!
|
||||
! I1MACH can be used to obtain machine-dependent parameters for the
|
||||
! local machine environment. It is a function subprogram with one
|
||||
! (input) argument and can be referenced as follows:
|
||||
!
|
||||
! K = I1MACH(I)
|
||||
!
|
||||
! where I=1,...,16. The (output) value of K above is determined by
|
||||
! the (input) value of I. The results for various values of I are
|
||||
! discussed below.
|
||||
!
|
||||
! I/O unit numbers:
|
||||
! I1MACH( 1) = the standard input unit.
|
||||
! I1MACH( 2) = the standard output unit.
|
||||
! I1MACH( 3) = the standard punch unit.
|
||||
! I1MACH( 4) = the standard error message unit.
|
||||
!
|
||||
! Words:
|
||||
! I1MACH( 5) = the number of bits per integer storage unit.
|
||||
! I1MACH( 6) = the number of characters per integer storage unit.
|
||||
!
|
||||
! Integers:
|
||||
! assume integers are represented in the S-digit, base-A form
|
||||
!
|
||||
! sign ( X(S-1)*A**(S-1) + ... + X(1)*A + X(0) )
|
||||
!
|
||||
! where 0 .LE. X(I) .LT. A for I=0,...,S-1.
|
||||
! I1MACH( 7) = A, the base.
|
||||
! I1MACH( 8) = S, the number of base-A digits.
|
||||
! I1MACH( 9) = A**S - 1, the largest magnitude.
|
||||
!
|
||||
! Floating-Point Numbers:
|
||||
! Assume floating-point numbers are represented in the T-digit,
|
||||
! base-B form
|
||||
! sign (B**E)*( (X(1)/B) + ... + (X(T)/B**T) )
|
||||
!
|
||||
! where 0 .LE. X(I) .LT. B for I=1,...,T,
|
||||
! 0 .LT. X(1), and EMIN .LE. E .LE. EMAX.
|
||||
! I1MACH(10) = B, the base.
|
||||
!
|
||||
! Single-Precision:
|
||||
! I1MACH(11) = T, the number of base-B digits.
|
||||
! I1MACH(12) = EMIN, the smallest exponent E.
|
||||
! I1MACH(13) = EMAX, the largest exponent E.
|
||||
!
|
||||
! Double-Precision:
|
||||
! I1MACH(14) = T, the number of base-B digits.
|
||||
! I1MACH(15) = EMIN, the smallest exponent E.
|
||||
! I1MACH(16) = EMAX, the largest exponent E.
|
||||
!
|
||||
! To alter this function for a particular environment, the desired
|
||||
! set of DATA statements should be activated by removing the C from
|
||||
! column 1. Also, the values of I1MACH(1) - I1MACH(4) should be
|
||||
! checked for consistency with the local operating system.
|
||||
!
|
||||
!***REFERENCES P. A. Fox, A. D. Hall and N. L. Schryer, Framework for
|
||||
! a portable library, ACM Transactions on Mathematical
|
||||
! Software 4, 2 (June 1978), pp. 177-188.
|
||||
!***ROUTINES CALLED (NONE)
|
||||
!***REVISION HISTORY (YYMMDD)
|
||||
! 750101 DATE WRITTEN
|
||||
! 960411 Modified for Fortran 90 (BE after suggestions by EHG).
|
||||
! 980727 Modified value of I1MACH(6) (BE after suggestion by EHG).
|
||||
!***END PROLOGUE I1MACH
|
||||
!
|
||||
X = 1.0
|
||||
XX = 1.0E0_WP
|
||||
|
||||
SELECT CASE (I)
|
||||
CASE (1)
|
||||
I1MACH = 5 ! Input unit
|
||||
CASE (2)
|
||||
I1MACH = 6 ! Output unit
|
||||
CASE (3)
|
||||
I1MACH = 0 ! Punch unit is no longer used
|
||||
CASE (4)
|
||||
I1MACH = 0 ! Error message unit
|
||||
CASE (5)
|
||||
I1MACH = BIT_SIZE(I)
|
||||
CASE (6)
|
||||
I1MACH = 4 ! Characters per integer is hopefully no
|
||||
! longer used.
|
||||
! If it is used it has to be set manually.
|
||||
! The value 4 is correct on IEEE-machines.
|
||||
CASE (7)
|
||||
I1MACH = RADIX(1)
|
||||
CASE (8)
|
||||
I1MACH = BIT_SIZE(I) - 1
|
||||
CASE (9)
|
||||
I1MACH = HUGE(1)
|
||||
CASE (10)
|
||||
I1MACH = RADIX(X)
|
||||
CASE (11)
|
||||
I1MACH = DIGITS(X)
|
||||
CASE (12)
|
||||
I1MACH = MINEXPONENT(X)
|
||||
CASE (13)
|
||||
I1MACH = MAXEXPONENT(X)
|
||||
CASE (14)
|
||||
I1MACH = DIGITS(XX)
|
||||
CASE (15)
|
||||
I1MACH = MINEXPONENT(XX)
|
||||
CASE (16)
|
||||
I1MACH = MAXEXPONENT(XX)
|
||||
CASE DEFAULT
|
||||
WRITE (*,10)
|
||||
STOP
|
||||
END SELECT
|
||||
!
|
||||
! Formats
|
||||
!
|
||||
10 FORMAT ('Fatal in I1MACH - I out of bounds')
|
||||
!
|
||||
END FUNCTION I1MACH
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION R1MACH (I)
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: I
|
||||
!
|
||||
REAL (SP) :: B,X,R1MACH
|
||||
!
|
||||
!***BEGIN PROLOGUE R1MACH
|
||||
!***PURPOSE Return floating point machine dependent constants.
|
||||
!***LIBRARY SLATEC
|
||||
!***CATEGORY R1
|
||||
!***TYPE SINGLE PRECISION (R1MACH-S, D1MACH-D)
|
||||
!***KEYWORDS MACHINE CONSTANTS
|
||||
!***AUTHOR Fox, P. A., (Bell Labs)
|
||||
! Hall, A. D., (Bell Labs)
|
||||
! Schryer, N. L., (Bell Labs)
|
||||
!***DESCRIPTION
|
||||
!
|
||||
! R1MACH can be used to obtain machine-dependent parameters for the
|
||||
! local machine environment. It is a function subprogram with one
|
||||
! (input) argument, and can be referenced as follows:
|
||||
!
|
||||
! A = R1MACH(I)
|
||||
!
|
||||
! where I=1,...,5. The (output) value of A above is determined by
|
||||
! the (input) value of I. The results for various values of I are
|
||||
! discussed below.
|
||||
!
|
||||
! R1MACH(1) = B**(EMIN-1), the smallest positive magnitude.
|
||||
! R1MACH(2) = B**EMAX*(1 - B**(-T)), the largest magnitude.
|
||||
! R1MACH(3) = B**(-T), the smallest relative spacing.
|
||||
! R1MACH(4) = B**(1-T), the largest relative spacing.
|
||||
! R1MACH(5) = LOG10(B)
|
||||
!
|
||||
! Assume single precision numbers are represented in the T-digit,
|
||||
! base-B form
|
||||
!
|
||||
! sign (B**E)*( (X(1)/B) + ... + (X(T)/B**T) )
|
||||
!
|
||||
! where 0 .LE. X(I) .LT. B for I=1,...,T, 0 .LT. X(1), and
|
||||
! EMIN .LE. E .LE. EMAX.
|
||||
!
|
||||
! The values of B, T, EMIN and EMAX are provided in I1MACH as
|
||||
! follows:
|
||||
! I1MACH(10) = B, the base.
|
||||
! I1MACH(11) = T, the number of base-B digits.
|
||||
! I1MACH(12) = EMIN, the smallest exponent E.
|
||||
! I1MACH(13) = EMAX, the largest exponent E.
|
||||
!
|
||||
!
|
||||
!***REFERENCES P. A. Fox, A. D. Hall and N. L. Schryer, Framework for
|
||||
! a portable library, ACM Transactions on Mathematical
|
||||
! Software 4, 2 (June 1978), pp. 177-188.
|
||||
!***ROUTINES CALLED XERMSG
|
||||
!***REVISION HISTORY (YYMMDD)
|
||||
! 790101 DATE WRITTEN
|
||||
! 960329 Modified for Fortran 90 (BE after suggestions by EG)
|
||||
!***END PROLOGUE R1MACH
|
||||
!
|
||||
X = 1.0
|
||||
B = RADIX(X)
|
||||
!
|
||||
SELECT CASE (I)
|
||||
CASE (1)
|
||||
R1MACH = B**(MINEXPONENT(X)-1) ! the smallest positive magnitude.
|
||||
CASE (2)
|
||||
R1MACH = HUGE(X) ! the largest magnitude.
|
||||
CASE (3)
|
||||
R1MACH = B**(-DIGITS(X)) ! the smallest relative spacing.
|
||||
CASE (4)
|
||||
R1MACH = B**(1-DIGITS(X)) ! the largest relative spacing.
|
||||
CASE (5)
|
||||
R1MACH = LOG10(B)
|
||||
CASE DEFAULT
|
||||
WRITE (*,10)
|
||||
STOP
|
||||
END SELECT
|
||||
!
|
||||
! Formats:
|
||||
!
|
||||
10 FORMAT ('1ERROR 1 IN R1MACH - I out of bounds')
|
||||
!
|
||||
END FUNCTION R1MACH
|
||||
!
|
||||
END MODULE MACHINE_ACCURACY
|
|
@ -0,0 +1,61 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE ASYMPT
|
||||
!
|
||||
! This module defines the asymptotic quantities
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: G0,GI,GR0
|
||||
!
|
||||
END MODULE ASYMPT
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALC_ASYMPT
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
! This modules computes the asymptotic values:
|
||||
!
|
||||
! * gamma_0
|
||||
! * gamma_inf
|
||||
! * g(0)
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_ASYMPT_VALUES
|
||||
!
|
||||
|
||||
USE ASYMPT
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : DMN,RS
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
!
|
||||
USE GAMMA_ASYMPT
|
||||
USE PC_VALUES, ONLY : GR0_MODE
|
||||
USE GR_0
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
G0 = GAMMA_0_3D(RS,T) !
|
||||
GI = GAMMA_I_3D(RS,T) !
|
||||
GR0 = GR_0_3D(RS,GR0_MODE) !
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
G0 = GAMMA_0_2D(RS,T) !
|
||||
GI = GAMMA_I_2D(RS,T) !
|
||||
GR0 = GR_0_2D(RS,GR0_MODE) !
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
CONTINUE ! not implemented yet
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_ASYMPT_VALUES
|
||||
!
|
||||
END MODULE CALC_ASYMPT
|
|
@ -0,0 +1,404 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE GAMMA_ASYMPT
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
! It contains the following functions/subroutines:
|
||||
!
|
||||
! * FUNCTION GAMMA_0_3D(RS,T)
|
||||
!
|
||||
! * FUNCTION GAMMA_I_3D(RS,T)
|
||||
!
|
||||
! * FUNCTION GAMMA_0_2D(RS,T)
|
||||
!
|
||||
! * FUNCTION GAMMA_I_2D(RS,T)
|
||||
!
|
||||
! * FUNCTION G0_INF_2D(X,RS,T)
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION GAMMA_0_3D(RS,T)
|
||||
!
|
||||
! This function computes the coefficient gamma0 so that:
|
||||
!
|
||||
! lim (q --> 0) G(q) = gamma_0 (q / k_F)^2
|
||||
!
|
||||
!
|
||||
! References: (1) S. Ichimaru, Rev. Mod. Phys. 54, 1017-1059 (1982)
|
||||
! (3) K. Utsumi and S. Ichimaru, Phys. Rev. B 22, 1522-1533 (1980)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 2 Dec 2020
|
||||
!
|
||||
!
|
||||
USE LF_VALUES, ONLY : GQ_TYPE,G0_TYPE
|
||||
USE SF_VALUES, ONLY : SQ_TYPE
|
||||
USE ENERGIES, ONLY : EC_TYPE
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,FOUR,HALF,FOURTH
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
USE CORRELATION_ENERGIES, ONLY : DERIVE_EC_3D
|
||||
USE SCREENING_VEC, ONLY : THOMAS_FERMI_VECTOR
|
||||
USE SPECIFIC_INT_2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: IN_MODE,NMAX
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS,T
|
||||
REAL (WP) :: GAMMA_0_3D
|
||||
!
|
||||
REAL (WP) :: ALPHA
|
||||
REAL (WP) :: RS2,RS3
|
||||
REAL (WP) :: D_EC_1,D_EC_2
|
||||
REAL (WP) :: KS,X_TF
|
||||
REAL (WP) :: X_MAX,IN
|
||||
!
|
||||
IF(G0_TYPE == 'EC') THEN !
|
||||
!
|
||||
ALPHA = ALFA('3D') !
|
||||
RS2 = RS * RS !
|
||||
RS3 = RS2 * RS !
|
||||
!
|
||||
! Computing the correlation energy derivatives
|
||||
!
|
||||
CALL DERIVE_EC_3D(EC_TYPE,1,5,RS,T,D_EC_1,D_EC_2) !
|
||||
!
|
||||
GAMMA_0_3D = FOURTH - (PI * ALPHA / 24.0E0_WP) * & ! ref. (1) eq. (3.30a)
|
||||
(RS3 * D_EC_2 - TWO * RS2 * D_EC_1) !
|
||||
!
|
||||
ELSE IF(G0_TYPE == 'SQ') THEN !
|
||||
!
|
||||
IN_MODE = 2 !
|
||||
NMAX = 1000 ! number of integration points
|
||||
X_MAX = 50.0E0_WP !
|
||||
!
|
||||
! Computing Thomas-Fermi screening vector
|
||||
!
|
||||
CALL THOMAS_FERMI_VECTOR('3D',KS) !
|
||||
X_TF = KS / KF_SI ! q_{TF} / k_F
|
||||
!
|
||||
! Computing the integral
|
||||
!
|
||||
CALL INT_SQM1(NMAX,X_MAX,IN_MODE,RS,T,X_TF,0,SQ_TYPE, & !
|
||||
GQ_TYPE,IN)
|
||||
!
|
||||
GAMMA_0_3D = - HALF * IN ! ref. (3) eq. (5.5)
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION GAMMA_0_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION GAMMA_I_3D(RS,T)
|
||||
!
|
||||
! This function computes the coefficient gamma_i so that:
|
||||
!
|
||||
! lim (q --> 0) I(q) = gamma_i (q / k_F)^2 --> 3D
|
||||
!
|
||||
!
|
||||
! References: (1) S. Ichimaru, Rev. Mod. Phys. 54, 1017-1059 (1982)
|
||||
! (2) N. Iwamoto, Phys. Rev. A 30, 3289-3304 (1984)
|
||||
! (3) K. Utsumi and S. Ichimaru, Phys. Rev. B 22, 1522-1533 (1980)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 2 Dec 2020
|
||||
!
|
||||
!
|
||||
USE LF_VALUES, ONLY : GQ_TYPE,GI_TYPE
|
||||
USE SF_VALUES, ONLY : SQ_TYPE
|
||||
USE ENERGIES, ONLY : EC_TYPE
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,FOUR,TEN,FIFTH
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
USE CORRELATION_ENERGIES, ONLY : DERIVE_EC_3D,EC_3D
|
||||
USE SCREENING_VEC, ONLY : THOMAS_FERMI_VECTOR
|
||||
USE SPECIFIC_INT_2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: IN_MODE,NMAX
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS,T
|
||||
REAL (WP) :: GAMMA_I_3D
|
||||
!
|
||||
REAL (WP) :: ALPHA
|
||||
REAL (WP) :: RS2
|
||||
REAL (WP) :: EC,D_EC_1,D_EC_2
|
||||
REAL (WP) :: KS,X_TF
|
||||
REAL (WP) :: X_MAX,IN
|
||||
!
|
||||
IF(GI_TYPE == 'EC') THEN !
|
||||
!
|
||||
ALPHA = ALFA('3D') !
|
||||
RS2 = RS * RS !
|
||||
!
|
||||
! Computing the correlation energy derivatives
|
||||
!
|
||||
EC = EC_3D(EC_TYPE,1,RS,T) !
|
||||
CALL DERIVE_EC_3D(EC_TYPE,1,5,RS,T,D_EC_1,D_EC_2) !
|
||||
!
|
||||
GAMMA_I_3D = 0.15E0_WP - (PI * ALPHA / TEN) * & ! ref. (1) eq. (3.30b)
|
||||
(RS2 * D_EC_1 + TWO* RS * EC) !
|
||||
!
|
||||
ELSE IF(GI_TYPE == 'SQ') THEN !
|
||||
!
|
||||
IN_MODE = 1 !
|
||||
NMAX = 1000 ! number of integration points
|
||||
X_MAX = 50.0E0_WP !
|
||||
!
|
||||
! Computing Thomas-Fermi screening vector
|
||||
!
|
||||
CALL THOMAS_FERMI_VECTOR('3D',KS) !
|
||||
X_TF = KS / KF_SI ! q_{TF} / k_F
|
||||
!
|
||||
! Computing the integral
|
||||
!
|
||||
CALL INT_SQM1(NMAX,X_MAX,IN_MODE,RS,T,X_TF,0,SQ_TYPE, & !
|
||||
GQ_TYPE,IN)
|
||||
!
|
||||
GAMMA_I_3D = - FIFTH * IN ! ref. (3) eq. (5.6)
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION GAMMA_I_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION GAMMA_0_2D(RS,T)
|
||||
!
|
||||
! This function computes the coefficient gamma0 so that:
|
||||
!
|
||||
! lim (q --> 0) G(q) = gamma_i (q / k_F) --> 2D
|
||||
!
|
||||
!
|
||||
! References: (2) N. Iwamoto, Phys. Rev. A 30, 3289-3304 (1984)
|
||||
! (3) K. Utsumi and S. Ichimaru, Phys. Rev. B 22, 1522-1533 (1980)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 3 Dec 2020
|
||||
!
|
||||
!
|
||||
USE LF_VALUES, ONLY : GQ_TYPE,G0_TYPE
|
||||
USE SF_VALUES, ONLY : SQ_TYPE
|
||||
USE ENERGIES, ONLY : EC_TYPE
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,HALF,EIGHTH
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
USE CORRELATION_ENERGIES, ONLY : DERIVE_EC_2D
|
||||
USE ENERGIES, ONLY : EC_TYPE
|
||||
USE SCREENING_VEC, ONLY : THOMAS_FERMI_VECTOR
|
||||
USE SPECIFIC_INT_2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: IN_MODE,NMAX
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS,T
|
||||
REAL (WP) :: GAMMA_0_2D
|
||||
!
|
||||
REAL (WP) :: ALPHA,RS2,RS3
|
||||
REAL (WP) :: D_EC_1,D_EC_2
|
||||
REAL (WP) :: KS,X_TF
|
||||
REAL (WP) :: X_MAX,IN
|
||||
!
|
||||
IF(G0_TYPE == 'EC') THEN !
|
||||
!
|
||||
ALPHA = ALFA('2D') !
|
||||
RS2 = RS * RS !
|
||||
RS3 = RS2 * RS !
|
||||
!
|
||||
! Computing the correlation energy derivatives
|
||||
!
|
||||
CALL DERIVE_EC_2D(EC_TYPE,1,RS,T,D_EC_1,D_EC_2) !
|
||||
!
|
||||
GAMMA_0_2D = PI_INV + EIGHTH * ALPHA * ( & !
|
||||
RS2 * D_EC_1 - RS3 * D_EC_2 & ! ref. (1) eq. (3.6c)
|
||||
) !
|
||||
!
|
||||
ELSE IF(G0_TYPE == 'SQ') THEN !
|
||||
!
|
||||
IN_MODE = 2 !
|
||||
NMAX = 1000 ! number of integration points
|
||||
X_MAX = 50.0E0_WP !
|
||||
!
|
||||
! Computing Thomas-Fermi screening vector
|
||||
!
|
||||
CALL THOMAS_FERMI_VECTOR('2D',KS) !
|
||||
X_TF = KS / KF_SI ! q_{TF} / k_F
|
||||
!
|
||||
! Computing the integral
|
||||
!
|
||||
CALL INT_SQM1(NMAX,X_MAX,IN_MODE,RS,T,X_TF,0,SQ_TYPE, & !
|
||||
GQ_TYPE,IN)
|
||||
!
|
||||
GAMMA_0_2D = - HALF * IN ! ref. (3) eq. (5.5)
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION GAMMA_0_2D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION GAMMA_I_2D(RS,T)
|
||||
!
|
||||
! This function computes the coefficient gamma0 so that:
|
||||
!{\bf 33}
|
||||
! lim (q --> 0) I(q) = gamma_i (q / k_F) --> 2D
|
||||
!
|
||||
!
|
||||
! References: (2) N. Iwamoto, Phys. Rev. A 30, 3289-3304 (1984)
|
||||
! (3) K. Utsumi and S. Ichimaru, Phys. Rev. B 22, 1522-1533 (1980)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 3 Dec 2020
|
||||
!
|
||||
!
|
||||
USE LF_VALUES, ONLY : GQ_TYPE,GI_TYPE
|
||||
USE SF_VALUES, ONLY : SQ_TYPE
|
||||
USE ENERGIES, ONLY : EC_TYPE
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,FIVE,SIX,FIFTH
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
USE CORRELATION_ENERGIES, ONLY : DERIVE_EC_2D,EC_2D
|
||||
USE ENERGIES, ONLY : EC_TYPE
|
||||
USE SCREENING_VEC, ONLY : THOMAS_FERMI_VECTOR
|
||||
USE SPECIFIC_INT_2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: IN_MODE,NMAX
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS,T
|
||||
REAL (WP) :: GAMMA_I_2D
|
||||
!
|
||||
REAL (WP) :: ALPHA,RS2
|
||||
REAL (WP) :: EC,D_EC_1,D_EC_2
|
||||
REAL (WP) :: KS,X_TF
|
||||
REAL (WP) :: X_MAX,IN
|
||||
!
|
||||
IF(GI_TYPE == 'EC') THEN !
|
||||
!
|
||||
ALPHA = ALFA('3D') !
|
||||
RS2 = RS * RS !
|
||||
!
|
||||
! Computing the correlation energy derivatives
|
||||
!
|
||||
EC = EC_2D(EC_TYPE,RS,T) !
|
||||
CALL DERIVE_EC_2D(EC_TYPE,1,RS,T,D_EC_1,D_EC_2) !
|
||||
!
|
||||
GAMMA_I_2D = FIVE * PI_INV / SIX - & !
|
||||
(FIVE * ALPHA / 16.0E0_WP) * & !
|
||||
(RS2 * D_EC_1 + TWO * RS * EC) ! ref. (2) eq. (D9c)
|
||||
!
|
||||
ELSE IF(GI_TYPE == 'SQ') THEN !
|
||||
!
|
||||
IN_MODE = 1 !
|
||||
NMAX = 1000 ! number of integration points
|
||||
X_MAX = 50.0E0_WP !
|
||||
!
|
||||
! Computing Thomas-Fermi screening vector
|
||||
!
|
||||
CALL THOMAS_FERMI_VECTOR('3D',KS) !
|
||||
X_TF = KS / KF_SI ! q_{TF} / k_F
|
||||
!
|
||||
! Computing the integral
|
||||
!
|
||||
CALL INT_SQM1(NMAX,X_MAX,IN_MODE,RS,T,X_TF,0,SQ_TYPE, & !
|
||||
GQ_TYPE,IN)
|
||||
!
|
||||
GAMMA_I_2D = - FIFTH * IN ! ref. (3) eq. (5.6)
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION GAMMA_I_2D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION G0_INF_2D(X,RS,T)
|
||||
!
|
||||
! This function computes G(0,infinity), the value of the dynamic
|
||||
! local-field correction for q --> 0 and omega = infinity, for 2D systems
|
||||
!
|
||||
! References: (1) B. Tanatar, Phys. Lett. A 158, 153-157 (1991)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 2 Dec 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,SEVEN,EIGHT,HALF,THIRD
|
||||
USE SQUARE_ROOTS, ONLY : SQR2
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
USE CORRELATION_ENERGIES, ONLY : DERIVE_EC_2D,EC_2D
|
||||
USE ENERGIES, ONLY : EC_TYPE
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,RS,T
|
||||
REAL (WP) :: G0_INF_2D
|
||||
!
|
||||
REAL (WP) :: Y
|
||||
REAL (WP) :: A
|
||||
REAL (WP) :: EC,D_EC_1,D_EC_2
|
||||
!
|
||||
Y = X + X ! Y = q / k_F
|
||||
!
|
||||
A = ONE / SQR2 !
|
||||
!
|
||||
! Computing the correlation energy derivatives
|
||||
!
|
||||
EC = EC_2D(EC_TYPE,RS,T) !
|
||||
CALL DERIVE_EC_2D(EC_TYPE,1,RS,T,D_EC_1,D_EC_2) !
|
||||
!
|
||||
G0_INF_2D = Y *(0.20E0_WP * HALF * THIRD * PI_INV + & !
|
||||
SEVEN * A * RS * EC / EIGHT + & ! ref. (1) eq. (7)
|
||||
19.0E0_WP * A * RS * D_EC_1 / 16.0E0_WP) !
|
||||
!
|
||||
END FUNCTION G0_INF_2D
|
||||
!
|
||||
END MODULE GAMMA_ASYMPT
|
|
@ -0,0 +1,195 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE GR_0
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
! It contains the following functions/subroutines:
|
||||
!
|
||||
! * FUNCTION GR_0_2D(RS,GR0_MODE)
|
||||
!
|
||||
! * FUNCTION GR_0_3D(RS,GR0_MODE)
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION GR_0_2D(RS,GR0_MODE)
|
||||
!
|
||||
! This function computes the value of the pair correlation function
|
||||
! g(r) at r = 0 for 2D systems
|
||||
!
|
||||
! References: (1) J. Moreno and D. C. Marinescu,
|
||||
! J. Phys.: Condens. Matter 15, 6321-6329 (2003)
|
||||
! (2) M. L. Glasser, J. Phys. C: Solid State Phys. 10,
|
||||
! L121-L123 (1977)
|
||||
! (3) S. Nagano, K. S. Singwi and S. Ohnishi,
|
||||
! Phys. Rev. B 29, 1209-1213 (1984)
|
||||
! S. Nagano, K. S. Singwi and S. Ohnishi,
|
||||
! Phys. Rev. B 31, 3166 (1985)
|
||||
! (4) L. Calmels and A. Gold, Phys. Rev. B 57,
|
||||
! 1436-1443 (1998)
|
||||
! (5) Z. Qian, Phys. Rev. B 73, 035106 (2006)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * GR0_MODE : g(0) (2D)
|
||||
! GR0_MODE = 'MOMA' --> Moreno-Marinescu
|
||||
! GR0_MODE = 'HAFO' --> Hartree-Fock
|
||||
! GR0_MODE = 'NSOA' --> Nagano-Singwi-Ohnishi
|
||||
! GR0_MODE = 'CAGO' --> Calmels-Gold
|
||||
! GR0_MODE = 'QIAN' --> Qian
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 24 Sep 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,HALF
|
||||
USE FERMI_AU, ONLY : KF_AU
|
||||
USE BESSEL, ONLY : BESSI0
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: GR0_MODE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS
|
||||
REAL (WP) :: GR_0_2D
|
||||
!
|
||||
REAL (WP) :: L2_1,L2_2,L2_3
|
||||
REAL (WP) :: NUM,DEN
|
||||
!
|
||||
REAL (WP) :: SQRT
|
||||
!
|
||||
IF(GR0_MODE == 'MOMA') THEN !
|
||||
GR_0_2D = HALF / (ONE + 0.6032E0_WP * RS + & !
|
||||
0.07263E0_WP * RS * RS)**2 ! ref. (1) eq. (1)
|
||||
ELSE IF(GR0_MODE == 'HAFO') THEN !
|
||||
GR_0_2D = 0.75E0_WP ! ref. (2)
|
||||
ELSE IF(GR0_MODE == 'NSOA') THEN !
|
||||
GR_0_2D = HALF / BESSI0(TWO / SQRT(KF_AU)) !
|
||||
ELSE IF(GR0_MODE == 'CAGO') THEN !
|
||||
GR_0_2D = HALF / (ONE + TWO / KF_AU + 1.5E0_WP / & !
|
||||
(KF_AU * KF_AU)) ! ref. (4) eq. (18)
|
||||
ELSE IF(GR0_MODE == 'QIAN') THEN !
|
||||
L2_1 = RS / SQRT(TWO) ! lambda_2
|
||||
L2_2 = L2_1 * L2_1 !
|
||||
L2_3 = L2_2 * L2_1 !
|
||||
NUM = 15.0E0 * ( 64.0E0_WP + 25.0E0_WP * L2_1 + & !
|
||||
THREE * L2_2 ) !
|
||||
DEN = 960.0E0_WP + 1335.0E0_WP * L2_1 + & !
|
||||
509.0E0_WP * L2_2 + 64.0E0_WP * L2_3 !
|
||||
GR_0_2D = NUM * NUM / (DEN * DEN) ! ref. (5) eq. (10)
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION GR_0_2D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION GR_0_3D(RS,GR0_MODE)
|
||||
!
|
||||
! This function computes the value of the pair correlation function
|
||||
! g(r) at r = 0 for 3D systems
|
||||
!
|
||||
! References: (1) B. Davoudi, M. Polini, G. F. Giuliani and M. P. Tosi,
|
||||
! Phys. Rev. B 64, 153101 (2001)
|
||||
! (2) G. E. Simion and G. F. Giuliani, Phys. Rev. B 77,
|
||||
! 035131 (2008)
|
||||
! (3) A. Holas, P. K. Aravind and K. S. Singwi,
|
||||
! Phys. Rev. B 20, 4912-4934 (1979)
|
||||
! (4) S. Ichimaru, Rev. Mod. Phys. 54, 1017-1059 (1982)
|
||||
! (5) L. Calmels and A. Gold, Phys. Rev. B 57,
|
||||
! 1436-1443 (1998)
|
||||
! (6) V. D. Gorobchenko, V. N. Kohn and E. G. Maksimov,
|
||||
! in "Modern Problems in Condensed Matter" Vol. 24,
|
||||
! L. V. Keldysh, D. A. Kirzhnitz and A. A. Maradudin ed.
|
||||
! pp. 87-219 (North-Holland, 1989)
|
||||
! (7) Z. Qian, Phys. Rev. B 73, 035106 (2006)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * GR0_MODE : g(0) (3D)
|
||||
! GR0_MODE = 'DPGT' --> Davoudi-Polini-Giuliani-Tosi
|
||||
! GR0_MODE = 'OVE1' --> Overhauser 1
|
||||
! GR0_MODE = 'OVE2' --> Overhauser 2
|
||||
! GR0_MODE = 'HASA' --> Holas-Aravind-Singwi (small r_s)
|
||||
! GR0_MODE = 'ICHI' --> Ichimaru
|
||||
! GR0_MODE = 'CAGO' --> Calmels-Gold
|
||||
! GR0_MODE = 'KIMB' --> Kimball
|
||||
! GR0_MODE = 'QIAN' --> Qian
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,SIX,EIGHT, &
|
||||
NINE,HALF,FOURTH,FIFTH,EIGHTH
|
||||
USE FERMI_AU, ONLY : KF_AU
|
||||
USE PI_ETC, ONLY : PI,PI2,PI_INV
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
USE BESSEL, ONLY : BESSI1
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: GR0_MODE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS
|
||||
REAL (WP) :: GR_0_3D
|
||||
!
|
||||
REAL (WP) :: Z
|
||||
REAL (WP) :: ALPHA
|
||||
REAL (WP) :: C,D,ARP
|
||||
REAL (WP) :: L3_1,L3_2,L3_3
|
||||
REAL (WP) :: NUM,DEN
|
||||
!
|
||||
REAL (WP) :: LOG,SQRT
|
||||
!
|
||||
ALPHA = ALFA('3D') !
|
||||
!
|
||||
IF(GR0_MODE == 'DPGT') THEN !
|
||||
GR_0_3D = HALF / ( ONE + 1.372E0_WP * RS + & !
|
||||
0.0830E0_WP * RS * RS ) ! ref. (1) eq. (9)
|
||||
ELSE IF(GR0_MODE == 'OVE1') THEN !
|
||||
GR_0_3D = 32.0E0_WP / (EIGHT + THREE * RS)**2 ! ref. (2) eq. (35)
|
||||
ELSE IF(GR0_MODE == 'HASA') THEN !
|
||||
GR_0_3D = HALF * FIFTH * ALPHA * PI_INV * & !
|
||||
(PI2 + SIX * LOG(TWO) - THREE) * RS - & ! ref. (3) eq. (7.13)
|
||||
(1.5E0_WP * ALPHA * PI_INV)**2 * & !
|
||||
(THREE - FOURTH * PI2) * RS * RS * LOG(RS) !
|
||||
ELSE IF(GR0_MODE == 'ICHI') THEN !
|
||||
Z =FOUR * SQRT(ALPHA * RS / PI) ! ref. (4) eq. (3.67)
|
||||
GR_0_3D = EIGHTH * (Z / BESSI1(Z))**2 !
|
||||
ELSE IF(GR0_MODE == 'CAGO') THEN !
|
||||
GR_0_3D = HALF * TWO * PI_INV * KF_AU + & ! ref. (5) eq. (11)
|
||||
14.0E0_WP / (THREE * (PI * KF_AU)**2) !
|
||||
ELSE IF(GR0_MODE == 'OVE2') THEN !
|
||||
GR_0_3D = HALF / ( ONE + 0.75E0_WP * RS + & !
|
||||
0.141E0_WP * RS * RS ) ! ref. (5)
|
||||
ELSE IF(GR0_MODE == 'KIMB') THEN !
|
||||
C = FIFTH * (PI2 + SIX * LOG(TWO) - THREE) ! ref. (6) eq. (2.55)
|
||||
D = NINE * (12.0E0_WP - PI2) / 16.0E0_WP ! ref. (6) eq. (2.55)
|
||||
ARP = ALPHA * PI_INV * RS !
|
||||
GR_0_3D = HALF - C * ARP - D * ARP * ARP * LOG(RS) ! ref. (6) eq. (2.54)
|
||||
ELSE IF(GR0_MODE == 'QIAN') THEN !
|
||||
L3_1 = TWO * ALPHA * RS * PI_INV !
|
||||
L3_2 = L3_1 * L3_1 !
|
||||
L3_3 = L3_2 * L3_1 !
|
||||
NUM = 45.0E0_WP * ( 45.0E0_WP + 24.0E0_WP * L3_1 + & !
|
||||
FOUR * L3_2 ) !
|
||||
DEN = 2025.0E0_WP + 3105.0E0_WP * L3_1 + & !
|
||||
1512.0E0_WP * L3_2 + 256.0E0_WP * L3_3 !
|
||||
GR_0_3D = NUM * NUM / (DEN * DEN) ! ref. (7) eq. (9)
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION GR_0_3D
|
||||
!
|
||||
END MODULE GR_0
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE SQ_I
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
! It contains the following functions/subroutines:
|
||||
!
|
||||
! * FUNCTION SQ_I_3D(X,GR0_MODE)
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION SQ_I_3D(X,RS,GR0_MODE)
|
||||
!
|
||||
! This function computes the asymptotic behaviour of the static
|
||||
! structure factor at infinity:
|
||||
!
|
||||
! lim (q --> infinity) S(q)
|
||||
!
|
||||
! References: (1) N. Iwamoto, E. Krotscheck and D. Pines,
|
||||
! Phys. Rev. B 28, 3936-3951 (1984)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * GR0_MODE : g(0) (3D)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Aug 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,SIX
|
||||
USE CONSTANTS_P1, ONLY : BOHR
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE GR_0, ONLY : GR_0_3D
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: GR0_MODE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,RS
|
||||
REAL (WP) :: SQ_I_3D
|
||||
REAL (WP) :: COEF
|
||||
!
|
||||
COEF = ONE / (SIX * PI * BOHR * KF_SI) !
|
||||
!
|
||||
SQ_I_3D = ONE - COEF * GR_0_3D(RS,GR0_MODE) / (X * X * X * X) !
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END
|
||||
!
|
||||
END MODULE SQ_I
|
||||
|
|
@ -0,0 +1,532 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALCULATORS_1
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
! This module contains the subroutines allowing to compute
|
||||
! various properties of the electron/plasma liquids:
|
||||
!
|
||||
! * dielectric function : CALC_EPS
|
||||
! * polarization function : CALC_POL
|
||||
! * susceptibility function : CALC_SUS
|
||||
! * electrical conductivity : CALC_CDV
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_EPS(X,E,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the dielectric function epsilon(q, omega)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
! Intermediate parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * E : energy array
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 30 Apr 2021
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
USE REAL_NUMBERS, ONLY : ZERO,FOURTH,SMALL
|
||||
USE MATERIAL_PROP, ONLY : RS
|
||||
USE EXT_FIELDS, ONLY : T,H
|
||||
!
|
||||
USE E_GRID
|
||||
!
|
||||
USE OUT_VALUES_1, ONLY : I_DF
|
||||
USE PRINT_FILES, ONLY : IO_DF
|
||||
!
|
||||
USE DF_VALUES, ONLY : ESTDY,EPS_T,D_FUNC
|
||||
USE DFUNC_STATIC
|
||||
USE DFUNCT_STAN_DYNAMIC
|
||||
USE DFUNCL_STAN_DYNAMIC
|
||||
USE DFUNCL_MAGN_DYNAMIC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: D_FUNCL,D_FUNCT
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X
|
||||
REAL (WP) :: EPSR(NSIZE),EPSI(NSIZE),E(NSIZE)
|
||||
REAL (WP) :: Y
|
||||
REAL (WP) :: REPS,IEPS
|
||||
REAL (WP) :: Z,EN,KS,A,NU
|
||||
!
|
||||
REAL (WP) :: FLOAT
|
||||
!
|
||||
INTEGER :: IE
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
!
|
||||
IF(ESTDY == ' STATIC') THEN !
|
||||
!
|
||||
! Static dielectric function
|
||||
!
|
||||
IF(EPS_T == 'LONG') THEN !
|
||||
!
|
||||
D_FUNCL = D_FUNC !
|
||||
CALL DFUNCL_STATIC(X,D_FUNCL,REPS,IEPS) ! longitudinal eps
|
||||
EPSR(1) = REPS !
|
||||
EPSI(1) = IEPS !
|
||||
!
|
||||
IF(I_DF == 1) THEN !
|
||||
WRITE(IO_DF,*) Y,REPS,IEPS !
|
||||
END IF !
|
||||
!
|
||||
ELSE !
|
||||
D_FUNCT = D_FUNC !
|
||||
CONTINUE ! transverse eps
|
||||
END IF !
|
||||
!
|
||||
ELSE !
|
||||
!
|
||||
! Dynamic dielectric function
|
||||
!
|
||||
DO IE = 1, N_E ! energy loop
|
||||
!
|
||||
EN = E_MIN + FLOAT(IE - 1) * E_STEP ! EN = hbar omega / E_F
|
||||
!
|
||||
Z = FOURTH * EN / (X * X) ! Z = omega / omega_q
|
||||
!
|
||||
IF(EPS_T == 'LONG') THEN ! longitudinal eps
|
||||
!
|
||||
D_FUNCL = D_FUNC !
|
||||
IF(H < SMALL) THEN !
|
||||
CALL DFUNCL_DYNAMIC(X,Z,RS,T,D_FUNCL,IE,REPS,IEPS) ! no magnetic field
|
||||
ELSE !
|
||||
CALL DFUNCL_DYNAMIC_M(X,Z,KS,A,NU,D_FUNCL,REPS,IEPS) ! magnetic field
|
||||
END IF !
|
||||
ELSE ! transverse eps
|
||||
D_FUNCT = D_FUNC !
|
||||
IF(H < SMALL) THEN !
|
||||
CALL DFUNCT_DYNAMIC(X,Z,D_FUNCT,REPS,IEPS) ! no magnetic field
|
||||
ELSE !
|
||||
CONTINUE ! magnetic field
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
EPSR(IE)=REPS !
|
||||
EPSI(IE)=IEPS !
|
||||
E(IE)=EN !
|
||||
!
|
||||
IF(I_DF == 1) THEN ! writing to
|
||||
WRITE(IO_DF,*) Y,EN,REPS,IEPS ! file
|
||||
END IF !
|
||||
!
|
||||
END DO ! end of energy loop
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_EPS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_POL(X)
|
||||
!
|
||||
! This subroutine computes the polarisation function Pi(q, omega)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
! Intermediate parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * DIM : problem dimension
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * E : energy array
|
||||
! * POLR : real part of the dielectric function
|
||||
! * POLI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 30 Apr 2021
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
USE EXT_FIELDS, ONLY : T,H
|
||||
USE REAL_NUMBERS, ONLY : ZERO,TWO,FOURTH,SMALL
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE DF_VALUES, ONLY : ESTDY,EPS_T,D_FUNC
|
||||
USE MATERIAL_PROP, ONLY : RS,DMN
|
||||
USE UTILITIES_3, ONLY : EPS_TO_PI
|
||||
USE COULOMB_K, ONLY : COULOMB_FF
|
||||
!
|
||||
USE E_GRID
|
||||
USE UNITS, ONLY : UNIT
|
||||
!
|
||||
USE DFUNC_STATIC
|
||||
USE DFUNCT_STAN_DYNAMIC
|
||||
USE DFUNCL_STAN_DYNAMIC
|
||||
USE DFUNCL_MAGN_DYNAMIC
|
||||
!
|
||||
USE OUT_VALUES_1, ONLY : I_PZ
|
||||
USE PRINT_FILES, ONLY : IO_PZ
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: D_FUNCL,D_FUNCT
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X
|
||||
REAL (WP) :: REPS,IEPS,RPOL,IPOL
|
||||
REAL (WP) :: Z,EN,Q,VC,KS,A,NU
|
||||
REAL (WP) :: Y
|
||||
!
|
||||
REAL (WP) :: FLOAT
|
||||
!
|
||||
INTEGER :: IE
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
Q = TWO * X * KF_SI ! q in SI
|
||||
!
|
||||
! Computing the Coulomb potential
|
||||
!
|
||||
CALL COULOMB_FF(DMN,UNIT,Q,ZERO,VC) !
|
||||
!
|
||||
IF(ESTDY == ' STATIC') THEN !
|
||||
!
|
||||
! Static polarisation function
|
||||
!
|
||||
IF(EPS_T == 'LONG') THEN !
|
||||
!
|
||||
D_FUNCL = D_FUNC !
|
||||
CALL DFUNCL_STATIC(X,D_FUNCL,REPS,IEPS) ! longitudinal eps
|
||||
!
|
||||
CALL EPS_TO_PI(REPS,IEPS,VC,RPOL,IPOL) !
|
||||
!
|
||||
IF(I_PZ == 1) THEN !
|
||||
WRITE(IO_PZ,*) Y,RPOL,IPOL !
|
||||
END IF !
|
||||
!
|
||||
ELSE !
|
||||
D_FUNCT = D_FUNC !
|
||||
CONTINUE ! transverse eps
|
||||
END IF !
|
||||
!
|
||||
ELSE !
|
||||
!
|
||||
! Dynamic polarisation function
|
||||
!
|
||||
DO IE = 1, N_E ! energy loop
|
||||
!
|
||||
EN = E_MIN + FLOAT(IE - 1) * E_STEP ! E = hbar omega / E_F
|
||||
!
|
||||
Z = FOURTH * EN / (X * X) ! Z = omega / omega_q
|
||||
!
|
||||
IF(EPS_T == 'LONG') THEN ! longitudinal eps
|
||||
!
|
||||
D_FUNCL = D_FUNC !
|
||||
IF(H < SMALL) THEN !
|
||||
CALL DFUNCL_DYNAMIC(X,Z,RS,T,D_FUNCL,IE,REPS,IEPS) ! no magnetic field
|
||||
ELSE !
|
||||
CALL DFUNCL_DYNAMIC_M(X,Z,KS,A,NU,D_FUNCL,REPS,IEPS) ! magnetic field
|
||||
END IF !
|
||||
ELSE ! transverse eps
|
||||
D_FUNCT = D_FUNC !
|
||||
IF(H < SMALL) THEN !
|
||||
CALL DFUNCT_DYNAMIC(X,Z,D_FUNCT,REPS,IEPS) ! no magnetic field
|
||||
ELSE !
|
||||
CONTINUE ! magnetic field
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
CALL EPS_TO_PI(REPS,IEPS,VC,RPOL,IPOL) !
|
||||
!
|
||||
IF(I_PZ == 1) THEN ! writing to
|
||||
WRITE(IO_PZ,*) Y,EN,RPOL,IPOL ! file
|
||||
END IF !
|
||||
!
|
||||
END DO ! end of energy loop
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_POL
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_SUS(X)
|
||||
!
|
||||
! This subroutine computes the susceptibility function chi(q, omega)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
! Intermediate parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * DIM : problem dimension
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * E : energy array
|
||||
! * SUSR : real part of the susceptibility function
|
||||
! * SUSI : imaginary part of the susceptibility function
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 30 Apr 2021
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
USE REAL_NUMBERS, ONLY : ZERO,TWO,FOURTH,SMALL
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE DF_VALUES, ONLY : ESTDY,EPS_T,D_FUNC
|
||||
USE MATERIAL_PROP, ONLY : RS,DMN
|
||||
USE EXT_FIELDS, ONLY : T,H
|
||||
USE UTILITIES_3, ONLY : EPS_TO_CHI
|
||||
USE COULOMB_K, ONLY : COULOMB_FF
|
||||
!
|
||||
USE E_GRID
|
||||
USE UNITS, ONLY : UNIT
|
||||
!
|
||||
USE DFUNC_STATIC
|
||||
USE DFUNCT_STAN_DYNAMIC
|
||||
USE DFUNCL_STAN_DYNAMIC
|
||||
USE DFUNCL_MAGN_DYNAMIC
|
||||
!
|
||||
USE OUT_VALUES_1, ONLY : I_SU
|
||||
USE PRINT_FILES, ONLY : IO_SU
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: D_FUNCL,D_FUNCT
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X
|
||||
REAL (WP) :: REPS,IEPS,RSUS,ISUS
|
||||
REAL (WP) :: Z,EN,Q,VC,KS,A,NU
|
||||
REAL (WP) :: Y
|
||||
!
|
||||
REAL (WP) :: FLOAT
|
||||
!
|
||||
INTEGER :: IE
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
Q = TWO * X * KF_SI ! q in SI
|
||||
!
|
||||
! Computing the Coulomb potential
|
||||
!
|
||||
CALL COULOMB_FF(DMN,UNIT,Q,ZERO,VC) !
|
||||
!
|
||||
IF(ESTDY == ' STATIC') THEN !
|
||||
!
|
||||
! Static susceptibility function
|
||||
!
|
||||
IF(EPS_T == 'LONG') THEN !
|
||||
!
|
||||
D_FUNCL = D_FUNC !
|
||||
CALL DFUNCL_STATIC(X,D_FUNCL,REPS,IEPS) ! longitudinal eps
|
||||
!
|
||||
CALL EPS_TO_CHI(REPS,IEPS,VC,RSUS,ISUS) !
|
||||
!
|
||||
IF(I_SU == 1) THEN !
|
||||
WRITE(IO_SU,*) Y,RSUS,ISUS !
|
||||
END IF !
|
||||
!
|
||||
ELSE !
|
||||
D_FUNCT = D_FUNC !
|
||||
CONTINUE ! transverse eps
|
||||
END IF !
|
||||
!
|
||||
ELSE !
|
||||
!
|
||||
! Dynamic suceptibility function
|
||||
!
|
||||
DO IE = 1, N_E ! energy loop
|
||||
!
|
||||
EN = E_MIN + FLOAT(IE - 1) * E_STEP ! E = hbar omega / E_F
|
||||
!
|
||||
Z = FOURTH * EN / (X * X) ! Z = omega / omega_q
|
||||
!
|
||||
IF(EPS_T == 'LONG') THEN ! longitudinal eps
|
||||
!
|
||||
D_FUNCL = D_FUNC !
|
||||
IF(H < SMALL) THEN !
|
||||
CALL DFUNCL_DYNAMIC(X,Z,RS,T,D_FUNCL,IE,REPS,IEPS) ! no magnetic field
|
||||
ELSE !
|
||||
CALL DFUNCL_DYNAMIC_M(X,Z,KS,A,NU,D_FUNCL,REPS,IEPS) ! magnetic field
|
||||
END IF !
|
||||
ELSE ! transverse eps
|
||||
D_FUNCT = D_FUNC !
|
||||
IF(H < SMALL) THEN !
|
||||
CALL DFUNCT_DYNAMIC(X,Z,D_FUNCT,REPS,IEPS) ! no magnetic field
|
||||
ELSE !
|
||||
CONTINUE ! magnetic field
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
CALL EPS_TO_CHI(REPS,IEPS,VC,RSUS,ISUS) !
|
||||
!
|
||||
IF(I_SU == 1) THEN ! writing to
|
||||
WRITE(IO_SU,*) Y,EN,RSUS,ISUS ! file
|
||||
END IF !
|
||||
!
|
||||
END DO ! end of energy loop
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_SUS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_CDV(X)
|
||||
!
|
||||
! This subroutine computes the conductivity function sigma(q, omega)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
! Intermediate parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * E : energy array
|
||||
! * CDVR : real part of the conductivity function
|
||||
! * CDVI : imaginary part of the conductivity function
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 30 Apr 2021
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
USE REAL_NUMBERS, ONLY : ZERO,TWO,FOURTH,SMALL
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE DF_VALUES, ONLY : ESTDY,EPS_T,D_FUNC
|
||||
USE MATERIAL_PROP, ONLY : RS
|
||||
USE EXT_FIELDS, ONLY : T,H
|
||||
USE UTILITIES_3, ONLY : EPS_TO_SIGMA
|
||||
!
|
||||
USE E_GRID
|
||||
!
|
||||
USE DFUNC_STATIC
|
||||
USE DFUNCT_STAN_DYNAMIC
|
||||
USE DFUNCL_STAN_DYNAMIC
|
||||
USE DFUNCL_MAGN_DYNAMIC
|
||||
!
|
||||
USE OUT_VALUES_1, ONLY : I_CD
|
||||
USE PRINT_FILES, ONLY : IO_CD
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: D_FUNCL,D_FUNCT
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X
|
||||
REAL (WP) :: REPS,IEPS,EPSR,EPSI,RCDV,ICDV
|
||||
REAL (WP) :: Z,EN,KS,A,NU
|
||||
REAL (WP) :: Y
|
||||
!
|
||||
REAL (WP) :: FLOAT
|
||||
!
|
||||
INTEGER :: IE
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
!
|
||||
IF(ESTDY == ' STATIC') THEN !
|
||||
!
|
||||
! Static susceptibility function
|
||||
!
|
||||
IF(EPS_T == 'LONG') THEN !
|
||||
!
|
||||
D_FUNCL = D_FUNC !
|
||||
CALL DFUNCL_STATIC(X,D_FUNCL,REPS,IEPS) ! longitudinal eps
|
||||
!
|
||||
CALL EPS_TO_SIGMA(X,ZERO,REPS,IEPS,RCDV,ICDV) !
|
||||
!
|
||||
IF(I_CD == 1) THEN !
|
||||
WRITE(IO_CD,*) Y,RCDV,ICDV !
|
||||
END IF !
|
||||
!
|
||||
ELSE !
|
||||
D_FUNCT = D_FUNC !
|
||||
CONTINUE ! transverse eps
|
||||
END IF !
|
||||
!
|
||||
ELSE !
|
||||
!
|
||||
! Dynamic suceptibility function
|
||||
!
|
||||
DO IE = 1, N_E ! energy loop
|
||||
!
|
||||
EN = E_MIN + FLOAT(IE - 1) * E_STEP ! E = hbar omega / E_F
|
||||
!
|
||||
Z = FOURTH * EN / (X * X) ! Z = omega / omega_q
|
||||
!
|
||||
IF(EPS_T == 'LONG') THEN ! longitudinal eps
|
||||
!
|
||||
D_FUNCL = D_FUNC !
|
||||
IF(H < SMALL) THEN !
|
||||
CALL DFUNCL_DYNAMIC(X,Z,RS,T,D_FUNCL,IE,REPS,IEPS) ! no magnetic field
|
||||
ELSE !
|
||||
CALL DFUNCL_DYNAMIC_M(X,Z,KS,A,NU,D_FUNCL,REPS,IEPS) ! magnetic field
|
||||
END IF !
|
||||
ELSE ! transverse eps
|
||||
D_FUNCT = D_FUNC !
|
||||
IF(H < SMALL) THEN !
|
||||
CALL DFUNCT_DYNAMIC(X,Z,D_FUNCT,REPS,IEPS) ! no magnetic field
|
||||
ELSE !
|
||||
CONTINUE ! magnetic field
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
CALL EPS_TO_SIGMA(X,Z,REPS,IEPS,RCDV,ICDV) !
|
||||
!
|
||||
IF(I_CD == 1) THEN ! writing to
|
||||
WRITE(IO_CD,*) Y,EN,RCDV,ICDV ! file
|
||||
END IF !
|
||||
!
|
||||
END DO ! end of energy loop
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_CDV
|
||||
!
|
||||
END MODULE CALCULATORS_1
|
|
@ -0,0 +1,485 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALCULATORS_2
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
! This module contains the subroutines allowing to compute
|
||||
! various properties of the electron/plasma liquids:
|
||||
!
|
||||
! * plasmon dispersion : CALC_PDI
|
||||
! * electron-hole dispersion : CALC_EHD
|
||||
! * two electron-hole dispersion : CALC_E2D
|
||||
! * k-space e-e potential : CALC_EEK
|
||||
! * r-space e-e potential : CALC_EER
|
||||
! * plasmon kinetic energy : CALC_EKP
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_PDI(X)
|
||||
!
|
||||
!
|
||||
! This subroutine computes the analytical plasmon dispersion
|
||||
! without damping
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * ENE_P_Q : plasmon energy at q in J
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Dec 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : RS,DMN
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO
|
||||
USE FERMI_SI, ONLY : EF_SI,KF_SI
|
||||
USE PLASMON_DISPERSION
|
||||
USE PLASMON_DISP_REAL
|
||||
USE SCREENING_TYPE
|
||||
USE SCREENING_VEC
|
||||
USE COULOMB_K
|
||||
!
|
||||
USE OUT_VALUES_2, ONLY : I_PD
|
||||
USE PRINT_FILES, ONLY : IO_PD
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X
|
||||
!
|
||||
REAL (WP) :: ENE_P_Q
|
||||
REAL (WP) :: Y
|
||||
!
|
||||
IF(PL_DISP == ' EXACT') GO TO 10 !
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
CALL PLASMON_DISP_3D(X,RS,T,PL_DISP,ENE_P_Q) !
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
CALL PLASMON_DISP_2D(X,RS,T,PL_DISP,ENE_P_Q) !
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
CALL PLASMON_DISP_1D(X,RS,T,PL_DISP,ENE_P_Q) !
|
||||
END IF !
|
||||
!
|
||||
! Writes the plasmon dispersion as a function of x
|
||||
!
|
||||
IF(I_PD == 1) THEN !
|
||||
WRITE(IO_PD,*) Y,ENE_P_Q / EF_SI ! x : q/k_F, y : E/E_F
|
||||
END IF !
|
||||
!
|
||||
10 RETURN !
|
||||
!
|
||||
END SUBROUTINE CALC_PDI
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_EHD
|
||||
!
|
||||
! This subroutine gives the electron-hole pair dispersion curves.
|
||||
!
|
||||
! ---> The result is given in eV <---
|
||||
!
|
||||
! We have written: hbar^2 / 2m = a_0^2 * Ryd where a_0 is Bohr's radius
|
||||
! and Ryd is one Rydberg in eV
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * EH_M : right-handside dispersion curve
|
||||
! * EH_P : left-handside dispersion curve
|
||||
!
|
||||
!
|
||||
! In order to compare to the plasmon dispersion, where the coeffiecients
|
||||
! of (hbar omega)^2 have been stored, we store here the coefficients
|
||||
! of (EH_M)^2 = AE(0)+AE(1)*Q + AE(2)*Q^2 + AE(3)*Q^3 + AE(4)*Q^4
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 15 Sep 2020
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
USE MATERIAL_PROP, ONLY : DMN
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,FOUR,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : BOHR
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE ENE_CHANGE, ONLY : RYD
|
||||
USE DISP_COEF_EH
|
||||
!
|
||||
USE Q_GRID
|
||||
!
|
||||
USE OUT_VALUES_2, ONLY : I_EH
|
||||
USE PRINT_FILES, ONLY : IO_EH
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: QM,Q
|
||||
REAL (WP) :: EH_P(NSIZE),EH_M(NSIZE)
|
||||
!
|
||||
REAL (WP) :: EF,KF,Y,Q0,Q02,STEP
|
||||
!
|
||||
REAL (WP) :: FLOAT,ABS
|
||||
!
|
||||
INTEGER :: QN,I,IO
|
||||
!
|
||||
KF = BOHR * KF_SI ! k_F in unit of a_O^{-1}
|
||||
EF = KF * KF * RYD ! E_F in eV
|
||||
!
|
||||
STEP = Q_STEP * KF_SI ! step in SI
|
||||
!
|
||||
! Initialisation of the coefficients
|
||||
!
|
||||
DO I = 0, 6 !
|
||||
AE(I) = ZERO !
|
||||
END DO !
|
||||
!
|
||||
! Loop on q-points
|
||||
!
|
||||
DO QN = 1, N_Q !
|
||||
!
|
||||
Q = Q_MIN * KF_SI + FLOAT(QN - 1) * STEP ! step incremented
|
||||
!
|
||||
Q0 = BOHR * Q ! q in unit of a_O^{-1}
|
||||
Q02 = Q0 * Q0 !
|
||||
Y = Q0 / KF ! dimensionless momentum
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
!
|
||||
!.......... 3D case ..........
|
||||
!
|
||||
EH_P(QN) = (Q02 + TWO * Q0 * KF) * RYD !
|
||||
EH_M(QN) = (Q02 - TWO * Q0 * KF) * RYD !
|
||||
AE(2) = FOUR * KF * KF * FOURTH ! division by 4 because
|
||||
AE(3) = FOUR * KF * FOURTH ! AU = Hartree = 2 Rydbergs
|
||||
AE(4) = ONE * FOURTH ! and AE in AU
|
||||
!
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
!
|
||||
!.......... 2D case ..........
|
||||
!
|
||||
! Reference: G. F. Giuliani and J. J. Quinn, Phys. Rev. B 26, 4421 (1982)
|
||||
!
|
||||
EH_P(QN) = (TWO * Q0 * KF + Q02) * RYD !
|
||||
EH_M(QN) = (TWO * Q0 * KF - Q02) * RYD !
|
||||
AE(2) = FOUR * KF * KF * FOURTH ! division by 4 because
|
||||
AE(3) = FOUR * KF * FOURTH ! AU = Hartree = 2 Rydbergs
|
||||
AE(4) = ONE * FOURTH ! and AE in AU
|
||||
!
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
!
|
||||
!.......... 1D case ..........
|
||||
!
|
||||
EH_P(QN) = ABS(Q02 + TWO * Q0 * KF) * RYD !
|
||||
EH_M(QN) = ABS(Q02 - TWO * Q0 * KF) * RYD !
|
||||
AE(2) = FOUR * KF * KF * FOURTH ! division by 4 because
|
||||
AE(3) = FOUR * KF * FOURTH ! AU = Hartree = 2 Rydbergs
|
||||
AE(4) = ONE * FOURTH ! and AE in AU
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
! Writes the dispersion curves E/E_F as a function of q/k_F
|
||||
!
|
||||
IF(I_EH == 1) THEN !
|
||||
WRITE(IO_EH,*) Y,EH_P(QN) / EF,EH_M(QN) / EF ! x : q/k_F, y : E/E_F
|
||||
END IF !
|
||||
!
|
||||
END DO !
|
||||
!
|
||||
END SUBROUTINE CALC_EHD
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_E2D
|
||||
!
|
||||
! This subroutine gives the 2 electron-hole pairs dispersion curves.
|
||||
!
|
||||
! Note: in this case, there is no letf-hand side, but only a limit
|
||||
! on the right-hand side
|
||||
!
|
||||
! References: (1) M. E. Bachlechner, A. Holas, H. M. Böhm and A. Schinner,
|
||||
! Nucl. Instr. and Meth. B 115, 23-26 (1996)
|
||||
!
|
||||
! ---> The result is given in eV <---
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * TWO_EH_M : right-handside dispersion curve
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 15 Sep 2020
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
USE MATERIAL_PROP, ONLY : DMN
|
||||
USE REAL_NUMBERS, ONLY : ZERO,TWO
|
||||
USE CONSTANTS_P1, ONLY : BOHR
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE ENE_CHANGE, ONLY : RYD
|
||||
!
|
||||
USE Q_GRID
|
||||
!
|
||||
USE OUT_VALUES_2, ONLY : I_E2
|
||||
USE PRINT_FILES, ONLY : IO_E2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: QN
|
||||
!
|
||||
REAL (WP) :: QM,Q
|
||||
REAL (WP) :: Y,Q0,Q02,XN,STEP
|
||||
REAL (WP) :: N_EH_M
|
||||
REAL (WP) :: EF,KF
|
||||
!
|
||||
REAL (WP) :: FLOAT
|
||||
!
|
||||
XN = TWO ! number of e-h pairs created
|
||||
!
|
||||
STEP = Q_STEP * KF_SI ! step in SI
|
||||
!
|
||||
KF = BOHR * KF_SI ! k_F in unit of a_O^{-1}
|
||||
EF = KF * KF * RYD ! E_F in eV
|
||||
!
|
||||
! Loop on q-points
|
||||
!
|
||||
DO QN = 1, N_Q !
|
||||
!
|
||||
Q = Q_MIN * KF_SI + FLOAT(QN - 1) * STEP ! step incremented
|
||||
!
|
||||
Q0 = BOHR * Q ! q in unit of a_O^{-1}
|
||||
Q02 = Q0 * Q0 !
|
||||
Y = Q0 / KF ! dimensionless momentum
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
!
|
||||
!.......... 3D case ..........
|
||||
!
|
||||
IF(Y <= TWO * XN) THEN !
|
||||
N_EH_M = ZERO !
|
||||
ELSE !
|
||||
N_EH_M = (Q02 - TWO * XN * Q0 * KF) * RYD / XN ! ref. (1) eq. (9)
|
||||
END IF !
|
||||
!
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
!
|
||||
!.......... 2D case ..........
|
||||
!
|
||||
CONTINUE
|
||||
!
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
!
|
||||
!.......... 1D case ..........
|
||||
!
|
||||
CONTINUE
|
||||
!
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
! Writes the dispersion curves E/E_F as a function of q/k_F
|
||||
!
|
||||
IF(I_E2 == 1) THEN !
|
||||
WRITE(IO_E2,*) Y,N_EH_M / EF ! x : q/k_F, y : E/E_F
|
||||
END IF !
|
||||
!
|
||||
END DO !
|
||||
!
|
||||
END SUBROUTINE CALC_E2D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_EEK(X)
|
||||
!
|
||||
!
|
||||
! This subroutine computes the electron-electron interaction potential
|
||||
! in the k-space
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 7 Oct 2020
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
USE MATERIAL_PROP, ONLY : DMN,RS
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
USE UNITS
|
||||
USE SCREENING_TYPE
|
||||
USE SCREENING_VEC
|
||||
USE INTERACTION_POTENTIALS_K
|
||||
!
|
||||
USE Q_GRID
|
||||
!
|
||||
USE EL_ELE_INTER
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE
|
||||
USE FERMI_AU, ONLY : KF_AU
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
!
|
||||
USE OUT_VALUES_2, ONLY : I_CK
|
||||
USE PRINT_FILES, ONLY : IO_CK
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: IQ
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X
|
||||
REAL (WP) :: KS_SI,KS
|
||||
REAL (WP) :: Q,VQ
|
||||
!
|
||||
REAL (WP) :: FLOAT
|
||||
!
|
||||
! Computing the screening vector
|
||||
!
|
||||
CALL SCREENING_VECTOR(SC_TYPE,DMN,X,RS,T,KS_SI) !
|
||||
!
|
||||
! Screening vector in units of UNIK
|
||||
!
|
||||
IF(UNIK == 'SI') THEN !
|
||||
KS = KS_SI !
|
||||
ELSE IF(UNIK == 'AU') THEN !
|
||||
KS = KS_SI * KF_AU / KF_SI !
|
||||
END IF !
|
||||
!
|
||||
! Loop on q-points
|
||||
!
|
||||
DO IQ = 1,N_Q !
|
||||
!
|
||||
Q = Q_MIN * KF_SI + FLOAT(IQ - 1) * Q_STEP ! step incremented
|
||||
!
|
||||
CALL INTERACT_POT_K_3D(INT_POT,UNIT,UNIK,ONE,ONE,ONE,ONE, & !
|
||||
Q,KS,VQ) !
|
||||
!
|
||||
IF(I_CK == 1) THEN !
|
||||
WRITE(IO_CK,*) Q,VQ !
|
||||
END IF !
|
||||
!
|
||||
END DO !
|
||||
!
|
||||
END SUBROUTINE CALC_EEK
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_EER(X)
|
||||
!
|
||||
!
|
||||
! This subroutine computes the electron-electron interaction potential
|
||||
! in the real space
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Apr 2021
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
USE MATERIAL_PROP, ONLY : DMN,RS
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
USE SCREENING_TYPE
|
||||
USE SCREENING_VEC
|
||||
USE INTERACTION_POTENTIALS_R
|
||||
!
|
||||
USE R_GRID
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE
|
||||
USE FERMI_AU, ONLY : KF_AU
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
!
|
||||
USE OUT_VALUES_2, ONLY : I_CR
|
||||
USE PRINT_FILES, ONLY : IO_CR
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: UNIT
|
||||
!
|
||||
INTEGER :: IR
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X
|
||||
REAL (WP) :: KS_SI,KS
|
||||
REAL (WP) :: R,VR
|
||||
!
|
||||
REAL (WP) :: FLOAT
|
||||
!
|
||||
UNIT = 'CGS' !
|
||||
!
|
||||
! Computing the screening vector
|
||||
!
|
||||
CALL SCREENING_VECTOR(SC_TYPE,DMN,X,RS,T,KS_SI) !
|
||||
!
|
||||
! Screening vector in units of 1/a_0
|
||||
!
|
||||
KS = KS_SI * KF_AU / KF_SI !
|
||||
!
|
||||
DO IR = 1,N_R ! r loop
|
||||
!
|
||||
R = R_MIN + FLOAT(IR - 1) * R_STEP ! r/a0 point
|
||||
!
|
||||
CALL INTERACT_POT_R_3D(UNIT,R,ONE,ONE,KS,VR) !
|
||||
!
|
||||
IF(I_CR == 1) THEN !
|
||||
WRITE(IO_CR,*) R,VR !
|
||||
END IF !
|
||||
!
|
||||
END DO !
|
||||
!
|
||||
END SUBROUTINE CALC_EER
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_EKP(X)
|
||||
!
|
||||
!
|
||||
! This subroutine computes the plasmon kinetic energy
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 29 Oct 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
USE OUT_VALUES_2, ONLY : I_PK
|
||||
USE PRINT_FILES, ONLY : IO_PK
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X
|
||||
REAL (WP) :: Y,Y2
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
Y2 = Y * Y !
|
||||
!
|
||||
IF(I_PK == 1) THEN !
|
||||
WRITE(IO_PK,*) X,Y2 !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_EKP
|
||||
!
|
||||
END MODULE CALCULATORS_2
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1 @@
|
|||
|
|
@ -0,0 +1,154 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALCULATORS_5
|
||||
!
|
||||
! This module contains the subroutines allowing to compute
|
||||
! various Fermi properties of the electron/plasma liquids:
|
||||
!
|
||||
! * Fermi energy : CALC_EFF
|
||||
! * Fermi momentum : CALC_KFF
|
||||
! * Fermi velocity : CALC_VFF
|
||||
! * Fermi temperature : CALC_TFF
|
||||
! * Fermi density of states : CALC_NFF
|
||||
!
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_EFF
|
||||
!
|
||||
! This subroutine computes the Fermi energy and writes it into a file
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Sep 2020
|
||||
!
|
||||
!
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
USE ENE_CHANGE, ONLY : EV
|
||||
!
|
||||
USE OUT_VALUES_5, ONLY : I_EF
|
||||
USE PRINT_FILES, ONLY : IO_EF
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
IF(I_EF == 1) THEN !
|
||||
WRITE(IO_EF,*) EF_SI / EV !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_EFF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_KFF
|
||||
!
|
||||
! This subroutine computes the Fermi momentum and writes it into a file
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Sep 2020
|
||||
!
|
||||
!
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE ENE_CHANGE, ONLY : ANG
|
||||
!
|
||||
USE OUT_VALUES_5, ONLY : I_KF
|
||||
USE PRINT_FILES, ONLY : IO_KF
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
IF(I_KF == 1) THEN !
|
||||
WRITE(IO_KF,*) KF_SI * ANG !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_KFF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_VFF
|
||||
!
|
||||
! This subroutine computes the Fermi velocity and writes it into a file
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Sep 2020
|
||||
!
|
||||
!
|
||||
USE FERMI_SI, ONLY : VF_SI
|
||||
!
|
||||
USE OUT_VALUES_5, ONLY : I_VF
|
||||
USE PRINT_FILES, ONLY : IO_VF
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
IF(I_VF == 1) THEN !
|
||||
WRITE(IO_VF,*) VF_SI !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_VFF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_TFF
|
||||
!
|
||||
! This subroutine computes the Fermi temperature and writes it into a file
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Sep 2020
|
||||
!
|
||||
!
|
||||
USE FERMI_SI, ONLY : TF_SI
|
||||
!
|
||||
USE OUT_VALUES_5, ONLY : I_TE
|
||||
USE PRINT_FILES, ONLY : IO_TE
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
IF(I_TE == 1) THEN !
|
||||
WRITE(IO_TE,*) TF_SI !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_TFF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_NFF
|
||||
!
|
||||
! This subroutine computes the Fermi density of states
|
||||
! and writes it into a file
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Sep 2020
|
||||
!
|
||||
!
|
||||
USE FERMI_SI, ONLY : NF_SI
|
||||
USE ENE_CHANGE, ONLY : EV
|
||||
!
|
||||
USE OUT_VALUES_5, ONLY : I_DL
|
||||
USE PRINT_FILES, ONLY : IO_DL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
IF(I_DL == 1) THEN !
|
||||
WRITE(IO_DL,*) NF_SI * EV !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_NFF
|
||||
!
|
||||
END MODULE CALCULATORS_5
|
|
@ -0,0 +1 @@
|
|||
|
|
@ -0,0 +1,215 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALCULATORS_7
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
! This module contains the subroutines allowing to compute
|
||||
! various properties of the electron/plasma liquids:
|
||||
!
|
||||
! * Exchange energy : CALC_EXX
|
||||
! * Exchange-correlation energy : CALC_EXC
|
||||
! * correlation energy : CALC_ECO
|
||||
! * kinetic energy : CALC_KIN
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_EXX
|
||||
!
|
||||
! This subroutine computes the exchange energy
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Dec 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : RS,DMN
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
USE EXCHANGE_ENERGIES
|
||||
!
|
||||
USE ENE_CHANGE, ONLY : RYD
|
||||
!
|
||||
USE ENERGIES, ONLY : EX_TYPE
|
||||
USE SPIN_POLARIZATION
|
||||
!
|
||||
USE OUT_VALUES_7, ONLY : I_EX
|
||||
USE PRINT_FILES, ONLY : IO_EX
|
||||
!
|
||||
REAL (WP) :: E_EX
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
E_EX = EX_3D(EX_TYPE,IMODE,RS,T,XI) !
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
CONTINUE ! not implemented yet
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
CONTINUE ! not implemented yet
|
||||
END IF !
|
||||
!
|
||||
IF(I_EX == 1) THEN !
|
||||
WRITE(IO_EX,*) RS,T,E_EX * RYD ! exchange energy in eV
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_EXX
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_EXC
|
||||
!
|
||||
! This subroutine computes the exchange and correlation energy
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Dec 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : RS,DMN
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
USE XC_ENERGIES
|
||||
!
|
||||
USE ENE_CHANGE, ONLY : RYD
|
||||
!
|
||||
USE ENERGIES, ONLY : FXC_TYPE,EXC_TYPE
|
||||
!
|
||||
USE OUT_VALUES_7, ONLY : I_XC
|
||||
USE PRINT_FILES, ONLY : IO_XC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: E_XC
|
||||
!
|
||||
IF(EXC_TYPE /= 'NO') THEN !
|
||||
!
|
||||
! Exchange and correlation energy functionals (EXC_TYPE)
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
E_XC = EXC_3D(EXC_TYPE,RS,T) !
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
CONTINUE ! not implemented yet
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
CONTINUE ! not implemented yet
|
||||
END IF !
|
||||
!
|
||||
ELSE !
|
||||
!
|
||||
! Exchange and correlation free energy functionals (FXC_TYPE)
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
CALL FXC_TO_EXC_3D(FXC_TYPE,RS,T,E_XC) !
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
CONTINUE ! not implemented yet
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
CONTINUE ! not implemented yet
|
||||
END IF !
|
||||
!
|
||||
END IF
|
||||
!
|
||||
IF(I_XC == 1) THEN !
|
||||
WRITE(IO_XC,*) RS,T,E_XC * RYD ! XC energy in eV
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_EXC
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_ECO
|
||||
!
|
||||
! This subroutine computes the correlation energy
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Dec 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : RS,DMN
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
USE CORRELATION_ENERGIES
|
||||
!
|
||||
USE ENE_CHANGE, ONLY : RYD
|
||||
!
|
||||
USE ENERGIES, ONLY : EC_TYPE
|
||||
USE SPIN_POLARIZATION
|
||||
!
|
||||
USE OUT_VALUES_7, ONLY : I_EC
|
||||
USE PRINT_FILES, ONLY : IO_EC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: E_CORR
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
E_CORR = EC_3D(EC_TYPE,IMODE,RS,T) !
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
E_CORR = EC_2D(EC_TYPE,RS,T) !
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
E_CORR = EC_1D(EC_TYPE,RS,T) !
|
||||
END IF !
|
||||
!
|
||||
IF(I_EC == 1) THEN !
|
||||
WRITE(IO_EC,*) RS,T,E_CORR * RYD ! correlation energy in eV
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_ECO
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_KIN
|
||||
!
|
||||
! This subroutine computes the kinetic energy
|
||||
!
|
||||
!
|
||||
! Reference: H. T. Tran and J. P. Perdew, Am. J. Phys. 1048-1061 (2003)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Dec 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : RS,DMN
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
USE KINETIC_ENERGIES
|
||||
!
|
||||
USE ENE_CHANGE, ONLY : RYD
|
||||
!
|
||||
USE ENERGIES, ONLY : EK_TYPE
|
||||
USE SPIN_POLARIZATION
|
||||
!
|
||||
USE OUT_VALUES_7, ONLY : I_EK
|
||||
USE PRINT_FILES, ONLY : IO_EK
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: E_KIN
|
||||
REAL (WP) :: ALPHA
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
E_KIN = EK_3D(EK_TYPE,RS,T,XI) !
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
CONTINUE ! not implemented yet
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
CONTINUE ! not implemented yet
|
||||
END IF !
|
||||
!
|
||||
IF(I_EK == 1) THEN !
|
||||
WRITE(IO_EK,*) RS,E_KIN * RYD ! kinetic energy in eV
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_KIN
|
||||
!
|
||||
END MODULE CALCULATORS_7
|
|
@ -0,0 +1,100 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALCULATORS_8
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
! This module contains the subroutines allowing to compute
|
||||
! various properties of the electron/plasma liquids:
|
||||
!
|
||||
!
|
||||
! * shear viscosity : CALC_VIS
|
||||
! * diffusion coefficient : CALC_DIF
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_VIS(X)
|
||||
!
|
||||
! This subroutine computes the shear viscosity
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * ETA : shear viscosity
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 23 Oct 2020
|
||||
!
|
||||
!
|
||||
USE VISCOSITY
|
||||
!
|
||||
USE OUT_VALUES_8, ONLY : I_VI
|
||||
USE PRINT_FILES, ONLY : IO_VI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X
|
||||
REAL (WP) :: ETA
|
||||
!
|
||||
! Computing the viscosity
|
||||
!
|
||||
CALL VISCOSITY_COEF(X,ETA) !
|
||||
!
|
||||
IF(I_VI == 1) THEN !
|
||||
WRITE(IO_VI,*) X,ETA !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_VIS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_DIF
|
||||
!
|
||||
! This subroutine computes the diffusion coefficient
|
||||
!
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * DC : diffusion coefficient
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 23 Oct 2020
|
||||
!
|
||||
!
|
||||
USE DIFFUSION_COEFFICIENT
|
||||
!
|
||||
USE OUT_VALUES_8, ONLY : I_DI
|
||||
USE PRINT_FILES, ONLY : IO_DI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: DC
|
||||
!
|
||||
! Computing the viscosity
|
||||
!
|
||||
CALL DIFFUSION_COEF(DC) !
|
||||
!
|
||||
IF(I_DI == 1) THEN !
|
||||
WRITE(IO_DI,*) DC !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_DIF
|
||||
!
|
||||
END MODULE CALCULATORS_8
|
|
@ -0,0 +1,305 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALCULATORS_9
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
USE CALCULATORS_1
|
||||
!
|
||||
! This module contains the subroutines allowing to compute
|
||||
! various properties of the electron/plasma liquids:
|
||||
!
|
||||
!
|
||||
! * loss function : CALC_LOS
|
||||
! * screened potential : CALC_VSC
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_LOS(X)
|
||||
!
|
||||
! This subroutine computes the loss function L(q, omega),
|
||||
! defined by
|
||||
! _ _
|
||||
! | - 1 |
|
||||
! L(q, omega) = Im | --------------- |
|
||||
! |_ EPS(q, omega) _|
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
! Intermediate parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * DMN : problem dimension
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * E : energy array
|
||||
! * VSCR : real part of the screened potential
|
||||
! * VSCI : imaginary part of the screened potential
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 15 Oct 2020
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,FOURTH,SMALL,TTINY,INF
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE DF_VALUES, ONLY : ESTDY,EPS_T,D_FUNC
|
||||
USE MATERIAL_PROP, ONLY : RS,DMN
|
||||
USE EXT_FIELDS, ONLY : T,H
|
||||
!
|
||||
USE E_GRID
|
||||
USE UNITS, ONLY : UNIT
|
||||
!
|
||||
USE DFUNC_STATIC
|
||||
USE DFUNCT_STAN_DYNAMIC
|
||||
USE DFUNCL_STAN_DYNAMIC
|
||||
USE DFUNCL_MAGN_DYNAMIC
|
||||
USE COULOMB_K
|
||||
!
|
||||
USE OUT_VALUES_9, ONLY : I_EL
|
||||
USE PRINT_FILES, ONLY : IO_EL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: D_FUNCL,D_FUNCT
|
||||
!
|
||||
REAL (WP) :: X
|
||||
REAL (WP) :: REPS,IEPS,LOS
|
||||
REAL (WP) :: Q,Z,EN,VC,A,NU,KS
|
||||
REAL (WP) :: Y
|
||||
!
|
||||
REAL (WP) :: FLOAT
|
||||
!
|
||||
INTEGER :: IE
|
||||
!
|
||||
Y = X + X ! q/k_F
|
||||
Q = Y * KF_SI ! q in SI
|
||||
!
|
||||
! Computing the Coulomb potential
|
||||
!
|
||||
CALL COULOMB_FF(DMN,UNIT,Q,ZERO,VC) !
|
||||
!
|
||||
IF(ESTDY == ' STATIC') THEN !
|
||||
!
|
||||
! Static susceptibility function
|
||||
!
|
||||
IF(EPS_T == 'LONG') THEN !
|
||||
!
|
||||
D_FUNCL = D_FUNC !
|
||||
CALL DFUNCL_STATIC(X,D_FUNCL,REPS,IEPS) ! longitudinal eps
|
||||
!
|
||||
ELSE !
|
||||
D_FUNCT = D_FUNC !
|
||||
CONTINUE ! transverse eps
|
||||
END IF !
|
||||
!
|
||||
LOS = IEPS / (REPS * REPS + IEPS * IEPS) !
|
||||
!
|
||||
IF(I_EL == 1) THEN !
|
||||
WRITE(IO_EL,*) Y,LOS !
|
||||
END IF !
|
||||
!
|
||||
ELSE !
|
||||
!
|
||||
! Loss function
|
||||
!
|
||||
DO IE = 1, N_E ! energy loop
|
||||
!
|
||||
EN = E_MIN + FLOAT(IE - 1) * E_STEP ! E = hbar omega / E_F
|
||||
!
|
||||
Z = FOURTH * EN / (X * X) ! Z = omega / omega_q
|
||||
!
|
||||
IF(EPS_T == 'LONG') THEN ! longitudinal eps
|
||||
!
|
||||
D_FUNCL = D_FUNC !
|
||||
IF(H < SMALL) THEN !
|
||||
CALL DFUNCL_DYNAMIC(X,Z,RS,T,D_FUNCL,IE,REPS,IEPS) ! no magnetic field
|
||||
ELSE !
|
||||
CALL DFUNCL_DYNAMIC_M(X,Z,KS,A,NU,D_FUNCL,REPS,IEPS) ! magnetic field
|
||||
END IF !
|
||||
ELSE ! transverse eps
|
||||
D_FUNCT = D_FUNC !
|
||||
IF(H < SMALL) THEN !
|
||||
CALL DFUNCT_DYNAMIC(X,Z,D_FUNCT,REPS,IEPS) ! no magnetic field
|
||||
ELSE !
|
||||
CONTINUE ! magnetic field
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
LOS = IEPS / (REPS * REPS + IEPS * IEPS) !
|
||||
!
|
||||
IF(I_EL == 1) THEN ! writing to
|
||||
WRITE(IO_EL,*) Y,EN,LOS ! file
|
||||
END IF !
|
||||
!
|
||||
END DO ! end of energy loop
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_LOS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_VSC(X)
|
||||
!
|
||||
! This subroutine computes the screened Vc(q, omega)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
! Intermediate parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * DMN : problem dimension
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * E : energy array
|
||||
! * VSCR : real part of the screened potential
|
||||
! * VSCI : imaginary part of the screened potential
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 30 Apr 2021
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
USE REAL_NUMBERS, ONLY : ZERO,FOURTH,SMALL,TTINY,INF
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE DF_VALUES, ONLY : ESTDY,EPS_T,D_FUNC
|
||||
USE MATERIAL_PROP, ONLY : RS,DMN
|
||||
USE EXT_FIELDS, ONLY : T,H
|
||||
!
|
||||
USE E_GRID
|
||||
USE UNITS, ONLY : UNIT
|
||||
!
|
||||
USE DFUNC_STATIC
|
||||
USE DFUNCT_STAN_DYNAMIC
|
||||
USE DFUNCL_STAN_DYNAMIC
|
||||
USE DFUNCL_MAGN_DYNAMIC
|
||||
USE COULOMB_K
|
||||
!
|
||||
USE OUT_VALUES_9, ONLY : I_VC
|
||||
USE PRINT_FILES, ONLY : IO_VC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: D_FUNCL,D_FUNCT
|
||||
!
|
||||
REAL (WP) :: X
|
||||
REAL (WP) :: VSCR(NSIZE),VSCI(NSIZE),E(NSIZE)
|
||||
REAL (WP) :: REPS,IEPS,RVSC,IVSC
|
||||
REAL (WP) :: Q,Z,EN,VC,A,NU,KS
|
||||
REAL (WP) :: Y
|
||||
!
|
||||
REAL (WP) :: FLOAT
|
||||
!
|
||||
INTEGER :: IE
|
||||
!
|
||||
Y = X + X ! q/k_F
|
||||
Q = Y * KF_SI ! q in SI
|
||||
!
|
||||
! Computing the Coulomb potential
|
||||
!
|
||||
CALL COULOMB_FF(DMN,UNIT,Q,ZERO,VC) !
|
||||
!
|
||||
IF(ESTDY == ' STATIC') THEN !
|
||||
!
|
||||
! Static dielectric function
|
||||
!
|
||||
IF(EPS_T == 'LONG') THEN !
|
||||
!
|
||||
D_FUNCL = D_FUNC !
|
||||
CALL DFUNCL_STATIC(X,D_FUNCL,REPS,IEPS) ! longitudinal eps
|
||||
!
|
||||
IF(REPS > TTINY) THEN !
|
||||
VSCR(1)= VC / REPS !
|
||||
ELSE !
|
||||
VSCR(1) = INF !
|
||||
END IF !
|
||||
IF(IEPS > TTINY) THEN !
|
||||
VSCI(1) = VC / IEPS !
|
||||
ELSE !
|
||||
VSCI(1) = INF !
|
||||
END IF !
|
||||
!
|
||||
IF(I_VC == 1) THEN !
|
||||
WRITE(IO_VC,*) Y,VSCR(1),VSCI(1) !
|
||||
END IF !
|
||||
!
|
||||
ELSE !
|
||||
D_FUNCT = D_FUNC !
|
||||
CONTINUE ! transverse eps
|
||||
END IF !
|
||||
!
|
||||
ELSE !
|
||||
!
|
||||
! Dynamic dielectric function
|
||||
!
|
||||
DO IE = 1, N_E ! energy loop
|
||||
!
|
||||
EN = E_MIN + FLOAT(IE - 1) * E_STEP ! E = hbar omega / E_F
|
||||
!
|
||||
Z = FOURTH * EN / (X * X) ! Z = omega / omega_q
|
||||
!
|
||||
IF(EPS_T == 'LONG') THEN ! longitudinal eps
|
||||
!
|
||||
D_FUNCL = D_FUNC !
|
||||
IF(H < SMALL) THEN !
|
||||
CALL DFUNCL_DYNAMIC(X,Z,RS,T,D_FUNCL,IE,REPS,IEPS) ! no magnetic field
|
||||
ELSE !
|
||||
CALL DFUNCL_DYNAMIC_M(X,Z,KS,A,NU,D_FUNCL,REPS,IEPS) ! magnetic field
|
||||
END IF !
|
||||
ELSE ! transverse eps
|
||||
D_FUNCT = D_FUNC !
|
||||
IF(H < SMALL) THEN !
|
||||
CALL DFUNCT_DYNAMIC(X,Z,D_FUNCT,REPS,IEPS) ! no magnetic field
|
||||
ELSE !
|
||||
CONTINUE ! magnetic field
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
IF(REPS > TTINY) THEN !
|
||||
VSCR(IE) = VC / REPS !
|
||||
ELSE !
|
||||
VSCR(IE) = INF !
|
||||
END IF !
|
||||
IF(IEPS > TTINY) THEN !
|
||||
VSCI(IE) = VC / IEPS !
|
||||
ELSE !
|
||||
VSCI(IE) = INF !
|
||||
END IF !
|
||||
E(IE) = EN !
|
||||
!
|
||||
IF(I_VC == 1) THEN ! writing to
|
||||
WRITE(IO_VC,*) Y,EN,VSCR(IE),VSCI(IE) ! file
|
||||
END IF !
|
||||
!
|
||||
END DO ! end of energy loop
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_VSC
|
||||
!
|
||||
END MODULE CALCULATORS_9
|
|
@ -0,0 +1,260 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALCULATORS_P
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
! This module contains the subroutines allowing to compute
|
||||
! various properties of the electron/plasma liquids:
|
||||
!
|
||||
!
|
||||
! * exact plasmon dispersion : CALC_EPD
|
||||
!
|
||||
! * fluctuation potential : CALC_FLP
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_EPD
|
||||
!
|
||||
! This subroutine computes the exact plasmon dispersion
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Dec 2020
|
||||
!
|
||||
!
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
!
|
||||
USE PLASMON_DISP_EXACT
|
||||
!
|
||||
USE PRINT_FILES, ONLY : IO_PD
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER, PARAMETER :: N_ZERO = 10000 ! max number of zeros
|
||||
!
|
||||
INTEGER :: IS,IC ! lower and upper indices
|
||||
INTEGER :: IP
|
||||
!
|
||||
REAL (WP) :: ENE_P_Q(N_ZERO)
|
||||
REAL (WP) :: YQ(N_ZERO)
|
||||
!
|
||||
CALL PLASMON_DISP_EX(IS,IC,YQ,ENE_P_Q)
|
||||
!
|
||||
DO IP = IS, IC !
|
||||
WRITE(IO_PD,*) YQ(IP),ENE_P_Q(IP) / EF_SI !
|
||||
END DO !
|
||||
!
|
||||
END SUBROUTINE CALC_EPD
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_FLP
|
||||
!
|
||||
! This subroutine computes the modulus of the fluctuation potential.
|
||||
! The fluctuation potential is given by
|
||||
!
|
||||
! V_q = A_q e^{i q . r}
|
||||
!
|
||||
! with
|
||||
!
|
||||
! | V_C(q) | ^{1/2}
|
||||
! A_q = | ______________________ |
|
||||
! | |
|
||||
! | d [ epsilon] / d omega | omega = omega(q) (1)
|
||||
!
|
||||
!
|
||||
!
|
||||
! where omega(q) is the plasmon dispersion
|
||||
!
|
||||
!
|
||||
!
|
||||
! References: (1) B. I. Lundqvist, Phys. kondens. Materie 9, 236-248 (1969)
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Intermediate parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * DMN : problem dimension
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * FLPR : real part of the screened potential
|
||||
! * FLPI : imaginary part of the screened potential
|
||||
!
|
||||
!
|
||||
!
|
||||
! WARNING : only REAL a at present
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2021
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
USE REAL_NUMBERS, ONLY : ZERO,TWO,THREE,TEN, &
|
||||
HALF
|
||||
USE COMPLEX_NUMBERS, ONLY : IC
|
||||
USE DF_VALUES, ONLY : ESTDY,EPS_T,D_FUNC
|
||||
USE MATERIAL_PROP, ONLY : RS,DMN
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E,E,EPS_0
|
||||
USE ENE_CHANGE, ONLY : EV
|
||||
USE FERMI_SI, ONLY : EF_SI,KF_SI
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
USE SCREENING_TYPE
|
||||
USE SCREENING_VEC
|
||||
!
|
||||
USE E_GRID
|
||||
USE Q_GRID
|
||||
USE R_GRID
|
||||
USE UNITS, ONLY : UNIT
|
||||
USE OUT_VALUES_P
|
||||
USE PLASMON_DISPERSION
|
||||
!
|
||||
USE COULOMB_K, ONLY : COULOMB_FF
|
||||
USE INTERPOLATION
|
||||
USE DERIVATION
|
||||
USE PLASMON_ENE_SI
|
||||
USE PLASMON_DISP_EXACT
|
||||
USE PLASMON_DISP_REAL
|
||||
USE RE_EPS_0_TREATMENT
|
||||
!
|
||||
USE CALCULATORS_1
|
||||
USE CALCULATORS_3
|
||||
!
|
||||
USE OUT_VALUES_3, ONLY : I_ZE
|
||||
USE OUT_VALUES_P, ONLY : I_FP
|
||||
USE PRINT_FILES, ONLY : IO_ZE,IO_FP
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: D_FUNCL,D_FUNCT
|
||||
!
|
||||
INTEGER, PARAMETER :: N_ZERO = 10000 ! max number of zeros
|
||||
!
|
||||
INTEGER :: LOGF
|
||||
INTEGER :: IE,IQ,IR
|
||||
INTEGER :: NB
|
||||
INTEGER :: IQ_MIN,IQ_MAX
|
||||
!
|
||||
REAL (WP) :: Y,X
|
||||
REAL (WP) :: ENE_P_Q(N_ZERO),ENE_P_Q1
|
||||
REAL (WP) :: YB(N_ZERO)
|
||||
REAL (WP) :: ENE_P
|
||||
REAL (WP) :: EPSR(NSIZE),EPSI(NSIZE),EN(NSIZE)
|
||||
REAL (WP) :: EPSR1(NSIZE),EPSI1(NSIZE)
|
||||
REAL (WP) :: REPS,IEPS,DEPSR_Q,DEPSI_Q
|
||||
REAL (WP) :: FLPR(NSIZE),FLPI(NSIZE),R(NSIZE)
|
||||
REAL (WP) :: RN,Q_SI,KS_SI,VC,A_Q
|
||||
REAL (WP) :: H
|
||||
!
|
||||
REAL (WP) :: SQRT,FLOAT,COS,SIN
|
||||
!
|
||||
COMPLEX (WP) :: DEPS
|
||||
!
|
||||
LOGF = 6 !
|
||||
!
|
||||
! Computing the exact plasmon dispersion in SI
|
||||
!
|
||||
IF(I_FP == 1) THEN !
|
||||
I_ZE = 1 !
|
||||
IO_ZE = 1 !
|
||||
CALL PLASMON_DISP_EX(IQ_MIN,IQ_MAX,YB,ENE_P_Q) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the dielectric function from IQ_MIN to IQ_MAX
|
||||
! (plasmon dispersion bounds)
|
||||
!
|
||||
DO IQ = IQ_MIN,IQ_MAX ! start of q-loop
|
||||
!
|
||||
Y = Q_MIN + FLOAT(IQ - 1) * Q_STEP ! Y = q/k_F
|
||||
!
|
||||
X = HALF * Y ! X = q/(2k_F)
|
||||
!
|
||||
Q_SI = Y * KF_SI ! q in SI
|
||||
!
|
||||
! Computing an approximate plasmon dispersion
|
||||
!
|
||||
IF(I_FP == 3) THEN !
|
||||
CALL PLASMON_DISP_R(X,RS,T,PL_DISP,ENE_P_Q1) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the dielectric function EPS(omega) for q
|
||||
!
|
||||
CALL CALC_EPS(X,EN,EPSR,EPSI) ! EN = E / E_F
|
||||
!
|
||||
! Plasmon energy at q in units of E / E_F
|
||||
!
|
||||
IF(I_FP == 1) THEN !
|
||||
ENE_P = ENE_P_Q(IQ) / EF_SI !
|
||||
ELSE IF(I_FP == 3) THEN !
|
||||
ENE_P = ENE_P_Q1 / EF_SI !
|
||||
END IF !
|
||||
!
|
||||
! Checking for screening vector
|
||||
!
|
||||
CALL SCREENING_VECTOR(SC_TYPE,DMN,X,RS,T,KS_SI) !
|
||||
!
|
||||
! Initialisation of derivative arrays
|
||||
!
|
||||
DO IE = 1, N_E !
|
||||
EPSR1(IE) = ZERO !
|
||||
EPSI1(IE) = ZERO !
|
||||
END DO !
|
||||
!
|
||||
H = EN(2) - EN(1) ! step for energy derivation (E / E_F)
|
||||
!
|
||||
! Computing the derivatives of EPSR and EPSI
|
||||
!
|
||||
CALL DERIV_1(EPSR,N_E,5,H,EPSR1) !
|
||||
CALL DERIV_1(EPSI,N_E,5,H,EPSI1) !
|
||||
!
|
||||
! Cubic spline interpolation of EPSR1(N) and EPSI1(N) at E = ENE_P
|
||||
!
|
||||
DEPSR_Q = CUBIC_SPLINE_INTERP(EPSR1,EN,N_E,ENE_P) !
|
||||
DEPSI_Q = CUBIC_SPLINE_INTERP(EPSI1,EN,N_E,ENE_P) !
|
||||
!
|
||||
DEPS = ABS(DEPSR_Q + IC * DEPSI_Q) !
|
||||
!
|
||||
! Calculation of Fourier transform of Coulomb potential in SI
|
||||
!
|
||||
CALL COULOMB_FF(DMN,UNIT,Q_SI,KS_SI,VC) !
|
||||
!
|
||||
! Computing the amplitude of the fluctuation potential (in eV)
|
||||
!
|
||||
A_Q = SQRT(ABS(VC / DEPS)) / EV ! ref. (1) eq. (17)
|
||||
!
|
||||
! Writing the results
|
||||
!
|
||||
IF(I_FP == 1) THEN ! writing to
|
||||
WRITE(IO_FP,*) Y,A_Q ! file
|
||||
ELSE IF(I_FP == 2) THEN !
|
||||
!
|
||||
! Loop in R
|
||||
!
|
||||
DO IR = 1, N_R !
|
||||
!
|
||||
RN = R_MIN + FLOAT(IR - 1) * R_STEP ! R = k_F * r
|
||||
!
|
||||
FLPR(IR) = A_Q * COS(TWO * X * RN) !
|
||||
FLPI(IR) = A_Q * SIN(TWO * X * RN) !
|
||||
R(IR) = RN !
|
||||
!
|
||||
WRITE(IO_FP,*) Y,RN,FLPR(IE),FLPI(IE) !
|
||||
!
|
||||
END DO !
|
||||
END IF !
|
||||
END DO ! end of q-loop
|
||||
!
|
||||
END SUBROUTINE CALC_FLP
|
||||
!
|
||||
END MODULE CALCULATORS_P
|
|
@ -0,0 +1,71 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALL_CALC_1
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
USE CALCULATORS_1
|
||||
USE OUT_VALUES_1
|
||||
!
|
||||
! This module calls the subroutines of calculator 1 whenever necessary
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE USE_CALC_1(X,EN,EPSR,EPSI)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * E : energy array
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 25 Sep 2020
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X
|
||||
REAL (WP) :: EPSR(NSIZE),EPSI(NSIZE),EN(NSIZE)
|
||||
!
|
||||
! Computing the dielectric function
|
||||
!
|
||||
IF(I_DF == 1) THEN !
|
||||
CALL CALC_EPS(X,EN,EPSR,EPSI) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the polarization function
|
||||
!
|
||||
IF(I_PZ == 1) THEN !
|
||||
CALL CALC_POL(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the susceptibility function
|
||||
!
|
||||
IF(I_SU == 1) THEN !
|
||||
CALL CALC_SUS(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the conductivity function
|
||||
!
|
||||
IF(I_CD == 1) THEN !
|
||||
CALL CALC_CDV(X) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE USE_CALC_1
|
||||
!
|
||||
END MODULE CALL_CALC_1
|
|
@ -0,0 +1,77 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALL_CALC_2
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
USE CALCULATORS_2
|
||||
USE OUT_VALUES_2
|
||||
!
|
||||
! This module calls the subroutines of calculator 2 whenever necessary
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE USE_CALC_2(IQ,X)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * IQ : q index
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 7 Oct 2020
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: IQ
|
||||
!
|
||||
REAL (WP) :: X
|
||||
!
|
||||
! Computing the electron-hole pairs continua
|
||||
!
|
||||
IF(IQ == 1) THEN !
|
||||
IF(I_EH == 1) THEN !
|
||||
CALL CALC_EHD !
|
||||
END IF !
|
||||
IF(I_E2 == 1) THEN !
|
||||
CALL CALC_E2D !
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
! Computing the analytical plasmon dispersion
|
||||
!
|
||||
IF(I_PD == 1) THEN !
|
||||
CALL CALC_PDI(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the electron-electron interaction in k-space
|
||||
!
|
||||
IF(I_CK == 1) THEN !
|
||||
CALL CALC_EEK(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the electron-electron interaction in real space
|
||||
!
|
||||
IF(I_CR == 1) THEN !
|
||||
CALL CALC_EER(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the plasmon kinetic energy
|
||||
!
|
||||
IF(I_PK == 1) THEN !
|
||||
CALL CALC_EKP(X) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE USE_CALC_2
|
||||
!
|
||||
END MODULE CALL_CALC_2
|
||||
|
|
@ -0,0 +1,155 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALL_CALC_3
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
USE CALCULATORS_3
|
||||
USE OUT_VALUES_3
|
||||
!
|
||||
! This module calls the subroutines of calculator 3 whenever necessary
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE USE_CALC_3(IQ,X)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * IQ : q index
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 28 Jan 2021
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: IQ
|
||||
!
|
||||
REAL (WP) :: X
|
||||
!
|
||||
! Computing the local-field corrections G(q,omega)
|
||||
!
|
||||
IF(I_LF == 1) THEN !
|
||||
CALL CALC_LFC(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the I(q) function = G(q,inf)
|
||||
!
|
||||
IF(I_IQ == 1) THEN !
|
||||
CALL CALC_IQF(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the structure factor S(q,omega)
|
||||
!
|
||||
IF(I_SF == 1) THEN !
|
||||
CALL CALC_SFC(X) !
|
||||
END IF !
|
||||
!
|
||||
IF(IQ == 1) THEN !
|
||||
!
|
||||
! Computing the pair correlation/distribution functions
|
||||
!
|
||||
IF(I_PC == 1) THEN !
|
||||
CALL CALC_PCF !
|
||||
END IF !
|
||||
IF(I_P2 == 1) THEN !
|
||||
CALL CALC_PDF !
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
! Computing the vertex function Gamma(q,omega)
|
||||
!
|
||||
IF(I_DC == 1) THEN !
|
||||
CALL CALC_VTX(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the plasmon damping from eps(q,omega)
|
||||
!
|
||||
IF(I_VX == 1) THEN !
|
||||
CALL CALC_DMP(IQ,X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the q bounds
|
||||
!
|
||||
IF(I_QC == 1) THEN !
|
||||
CALL CALC_QBD !
|
||||
END IF !
|
||||
!
|
||||
! Computing the relaxation time
|
||||
!
|
||||
IF(I_RL == 1) THEN !
|
||||
CALL CALC_RLX(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the screening vector
|
||||
!
|
||||
IF(I_KS == 1) THEN !
|
||||
CALL CALC_SCR(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the omega = q * v_F file
|
||||
!
|
||||
!
|
||||
IF(I_OQ == 1) THEN !
|
||||
CALL CALC_QVF(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the moments of Im[ epsilon ]
|
||||
!
|
||||
IF(I_ME == 1) THEN !
|
||||
CALL CALC_MEP(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the moments of the dynamical structure factor
|
||||
!
|
||||
IF(I_MS == 1) THEN !
|
||||
CALL CALC_MSF(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the moments of the loss function
|
||||
!
|
||||
IF(I_ML == 1) THEN !
|
||||
CALL CALC_MLO(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the zeros of Re[ eps(q,omega) ]
|
||||
!
|
||||
IF(I_ZE == 1) THEN !
|
||||
CALL CALC_RE0(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the inelastic mean free path
|
||||
!
|
||||
IF(IQ == 1) THEN !
|
||||
IF(I_MF == 1) THEN !
|
||||
CALL CALC_MFP !
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
! Computing the Fourier-space Nevalinna/memory function
|
||||
!
|
||||
IF(I_NV == 1) THEN !
|
||||
CALL CALC_NEV(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the time-domain memory function
|
||||
!
|
||||
IF(IQ == 1) THEN !
|
||||
IF(I_MT == 1) THEN !
|
||||
CALL CALC_MEM !
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE USE_CALC_3
|
||||
!
|
||||
END MODULE CALL_CALC_3
|
||||
|
|
@ -0,0 +1 @@
|
|||
|
|
@ -0,0 +1,41 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALL_CALC_5
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
USE CALCULATORS_5
|
||||
USE OUT_VALUES_5
|
||||
!
|
||||
! This module calls the subroutines of calculator 5 whenever necessary
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE USE_CALC_5
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
! Computing the Fermi properties
|
||||
!
|
||||
IF(I_EF == 1) THEN !
|
||||
CALL CALC_EFF !
|
||||
END IF !
|
||||
IF(I_KF == 1) THEN !
|
||||
CALL CALC_KFF !
|
||||
END IF !
|
||||
IF(I_VF == 1) THEN !
|
||||
CALL CALC_VFF !
|
||||
END IF !
|
||||
IF(I_TE == 1) THEN !
|
||||
CALL CALC_TFF !
|
||||
END IF !
|
||||
IF(I_DL == 1) THEN !
|
||||
CALL CALC_NFF !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE USE_CALC_5
|
||||
!
|
||||
END MODULE CALL_CALC_5
|
||||
|
|
@ -0,0 +1 @@
|
|||
|
|
@ -0,0 +1,46 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALL_CALC_7
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
USE CALCULATORS_7
|
||||
USE OUT_VALUES_7
|
||||
!
|
||||
! This module calls the subroutines of calculator 7 whenever necessary
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE USE_CALC_7
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
! Computing the exchange energy
|
||||
!
|
||||
IF(I_EX == 1) THEN !
|
||||
CALL CALC_EXX !
|
||||
END IF !
|
||||
!
|
||||
! Computing the exchange and correlation energy
|
||||
!
|
||||
IF(I_XC == 1) THEN !
|
||||
CALL CALC_EXC !
|
||||
END IF !
|
||||
!
|
||||
! Computing the correlation energy
|
||||
!
|
||||
IF(I_EC == 1) THEN !
|
||||
CALL CALC_ECO !
|
||||
END IF !
|
||||
!
|
||||
! Computing the kinetic energy
|
||||
!
|
||||
IF(I_EK == 1) THEN !
|
||||
CALL CALC_KIN !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE USE_CALC_7
|
||||
!
|
||||
END MODULE CALL_CALC_7
|
|
@ -0,0 +1,50 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALL_CALC_8
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
USE CALCULATORS_8
|
||||
USE OUT_VALUES_8
|
||||
!
|
||||
! This module calls the subroutines of calculator 8 whenever necessary
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE USE_CALC_8(X)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 23 Oct 2020
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X
|
||||
!
|
||||
! Computing the shear viscosity
|
||||
!
|
||||
IF(I_VI == 1) THEN !
|
||||
CALL CALC_VIS(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the diffusion coefficient
|
||||
!
|
||||
IF(I_DI == 1) THEN !
|
||||
CALL CALC_DIF !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE USE_CALC_8
|
||||
!
|
||||
END MODULE CALL_CALC_8
|
|
@ -0,0 +1,51 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALL_CALC_9
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
USE CALCULATORS_9
|
||||
USE OUT_VALUES_9
|
||||
!
|
||||
! This module calls the subroutines of calculator 9 whenever necessary
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE USE_CALC_9(X)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 25 Sep 2020
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X
|
||||
!
|
||||
! Computing the loss function
|
||||
!
|
||||
IF(I_EL == 1) THEN !
|
||||
CALL CALC_LOS(X) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the screened Coulomb interaction V(q,omega)
|
||||
!
|
||||
IF(I_VC == 1) THEN !
|
||||
CALL CALC_VSC(X) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE USE_CALC_9
|
||||
!
|
||||
END MODULE CALL_CALC_9
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALL_CALC_P
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
USE PLASMON_DISPERSION
|
||||
USE CALCULATORS_P
|
||||
!
|
||||
USE OUT_VALUES_2, ONLY : I_PD
|
||||
USE OUT_VALUES_P
|
||||
!
|
||||
! This module calls the subroutines of calculators requesting
|
||||
! post-processsing
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE USE_CALC_P
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Dec 2020
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
! Computing the plasmon dispersion
|
||||
!
|
||||
IF(I_PD == 1 .AND. PL_DISP == ' EXACT') THEN !
|
||||
CALL CALC_EPD !
|
||||
END IF !
|
||||
!
|
||||
! Computing the fluctuation potential
|
||||
!
|
||||
IF(I_FP == 1) THEN !
|
||||
CALL CALC_FLP !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE USE_CALC_P
|
||||
!
|
||||
END MODULE CALL_CALC_P
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
|
||||
Note concerning the coding of the form factors FF
|
||||
|
||||
In the coding of the different form factors, we have taken the
|
||||
following convention:
|
||||
|
||||
3D : V(q) = e^2 / (EPS_0 * q^2) * FF
|
||||
|
||||
2D : V(q) = e^2 / (2*EPS_0 * q) * FF
|
||||
|
||||
1D : V(q) = e^2 / EPS_0 * FF
|
|
@ -0,0 +1,648 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CONFINEMENT_FF
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION CONFIN_FF(X)
|
||||
!
|
||||
! This function computes the confinement form factor
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
! Intermediate parameters:
|
||||
!
|
||||
! * CONFIN : type of confinement
|
||||
! CONFIN = 'NO-CONF'
|
||||
! CONFIN = 'INF_QWW'
|
||||
! CONFIN = 'CC-1111' cylindrical within subband 1
|
||||
! CONFIN = 'CC-1122' cylindrical between subbands 1 and 2
|
||||
! CONFIN = 'CC-1221' cylindrical between subbands 1 and 2
|
||||
! CONFIN = 'CC-2222' cylindrical within subband 2
|
||||
! CONFIN = 'HC-1111' harmonic within subband 1
|
||||
! CONFIN = 'HC-1122' harmonic between subbands 1 and 2
|
||||
! CONFIN = 'HC-1221' harmonic between subbands 1 and 2
|
||||
! CONFIN = 'HC-2222' harmonic within subband 2
|
||||
! CONFIN = 'INVLAYE'
|
||||
! CONFIN = 'IQWE_LB'
|
||||
! CONFIN = 'PC1_QWI'
|
||||
! CONFIN = 'PC2_QWI'
|
||||
! CONFIN = 'SWC_QWI'
|
||||
! * R0 : radius of the quantum wire in SI --> m
|
||||
! * L : length of the quantum well (SI)
|
||||
! * DL : distance between the stacked layers (SI)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * CONFIN_FF : form factor
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 3 Aug 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE
|
||||
USE CONFIN_VAL
|
||||
USE MULTILAYER
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: CONFIN_FF,X
|
||||
!
|
||||
IF(CONFIN == 'NO-CONF') THEN !
|
||||
CONFIN_FF=ONE !
|
||||
ELSE IF(CONFIN == 'DSEPLAY') THEN !
|
||||
CONFIN_FF=DSEPLAY_FF(X,DL) !
|
||||
ELSE IF(CONFIN == 'CC-1111') THEN !
|
||||
CONFIN_FF=INF_QWW_FF(X,R0,CONFIN) !
|
||||
ELSE IF(CONFIN == 'CC-1122') THEN !
|
||||
CONFIN_FF=INF_QWW_FF(X,R0,CONFIN) !
|
||||
ELSE IF(CONFIN == 'CC-1221') THEN !
|
||||
CONFIN_FF=INF_QWW_FF(X,R0,CONFIN) !
|
||||
ELSE IF(CONFIN == 'CC-2222') THEN !
|
||||
CONFIN_FF=INF_QWW_FF(X,R0,CONFIN) !
|
||||
ELSE IF(CONFIN == 'HC-1111') THEN !
|
||||
CONFIN_FF=HCM_QWW_FF(X,R0,CONFIN) !
|
||||
ELSE IF(CONFIN == 'HC-1122') THEN !
|
||||
CONFIN_FF=HCM_QWW_FF(X,R0,CONFIN) !
|
||||
ELSE IF(CONFIN == 'HC-1221') THEN !
|
||||
CONFIN_FF=HCM_QWW_FF(X,R0,CONFIN) !
|
||||
ELSE IF(CONFIN == 'HC-2222') THEN !
|
||||
CONFIN_FF=HCM_QWW_FF(X,R0,CONFIN) !
|
||||
ELSE IF(CONFIN == 'INVLAYE') THEN !
|
||||
CONFIN_FF=INVLAYE_FF(X,DL,N_DEP,N_INV,EPS_2,EPS_1) !
|
||||
ELSE IF(CONFIN == 'IQWE_LB') THEN !
|
||||
CONFIN_FF=IQWE_LB_FF(X,L) !
|
||||
ELSE IF(CONFIN == 'PC1_QWI') THEN !
|
||||
CONFIN_FF=PC1_QWI_FF(X,OM0) !
|
||||
ELSE IF(CONFIN == 'PC2_QWI') THEN !
|
||||
CONFIN_FF=PC2_QWI_FF(X,OM0) !
|
||||
ELSE IF(CONFIN == 'SOF_COR') THEN !
|
||||
CONFIN_FF=SOF_COR_FF(X,R0) !
|
||||
ELSE IF(CONFIN == 'SWC_QWI') THEN !
|
||||
CONFIN_FF=SWC_QWI_FF(X,L) !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION CONFIN_FF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION DSEPLAY_FF(X,D)
|
||||
!
|
||||
! This function computes the form factor of a 2D layer within a
|
||||
! stacking of layers separated by a distance D along the z axis
|
||||
!
|
||||
! Reference: (1) A. C. Sharma, Solid State Comm. 70, 1171-1174 (1989)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * D : distance between the stacked layers (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * DSEPLAY_FF : form factor
|
||||
!
|
||||
!
|
||||
! Method: from eq. (7a) and (7b) adapted for SI, we have
|
||||
!
|
||||
! e^2
|
||||
! EPS(q,omega,qz) = 1 - --------- S(q,qz) * PI(q,omega)
|
||||
! q EPS_0
|
||||
!
|
||||
! Applying eq. (10), we find that the Coulomb potential
|
||||
! for intralayer interaction must be
|
||||
!
|
||||
! / + pi/d
|
||||
! e^2 d |
|
||||
! VC(q) = --------- * ------ | S(q,qz) dqz
|
||||
! q EPS_0 2 pi |
|
||||
! / - pi/d
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 10 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE SPECIFIC_INT_1, ONLY : SQQZ_INT
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,D
|
||||
REAL (WP) :: DSEPLAY_FF
|
||||
REAL (WP) :: Q
|
||||
!
|
||||
Q=TWO*X*KF_SI !
|
||||
!
|
||||
DSEPLAY_FF=SQQZ_INT(Q,D) !
|
||||
!
|
||||
END FUNCTION DSEPLAY_FF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION INF_QWW_FF(X,R0,CONFIN)
|
||||
!
|
||||
! This function computes the form factor of the a quantum-well wire
|
||||
! with an infinite barrier when only the two lower subbands are filled
|
||||
!
|
||||
! Reference: (1) A. Gold and A. Ghazali, Phys. Rev. B 41, 7626 (1990)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * R0 : radius of the quantum wire in SI --> m
|
||||
! * CONFIN : type of confinement
|
||||
! CONFIN = 'CC-1111' cylindrical within subband 1
|
||||
! CONFIN = 'CC-1122' cylindrical between subbands 1 and 2
|
||||
! CONFIN = 'CC-1221' cylindrical between subbands 1 and 2
|
||||
! CONFIN = 'CC-2222' cylindrical within subband 2
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * INF_QWW_FF : form factor
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 10 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,SIX,EIGHT,THIRD
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE BESSEL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER*7 CONFIN
|
||||
!
|
||||
REAL (WP) :: X,R0
|
||||
REAL (WP) :: INF_QWW_FF
|
||||
REAL (WP) :: Q,QR0,QR02,QR04,QR06
|
||||
REAL (WP) :: I3,K3,I4,K4
|
||||
!
|
||||
Q=TWO*X*KF_SI !
|
||||
QR0=Q*R0 !
|
||||
QR02=QR0*QR0 !
|
||||
QR04=QR02*QR02 !
|
||||
QR06=QR04*QR02 !
|
||||
!
|
||||
! Computing the Bessel functions
|
||||
!
|
||||
I3=BESSI(3,QR0) !
|
||||
K3=BESSK(3,QR0) !
|
||||
I4=BESSI(4,QR0) !
|
||||
K4=BESSK(4,QR0) !
|
||||
!
|
||||
IF(CONFIN == 'CC-1111') THEN !
|
||||
INF_QWW_FF=72.0E0_WP*( 0.10E0_WP - TWO*THIRD/QR02 + & !
|
||||
32.0E0_WP*THIRD/QR04 - 64.0E0_WP*I3*K3/QR04 & ! ref. 1 eq. (11a)
|
||||
) / QR02 !
|
||||
ELSE IF(CONFIN == 'CC-1122') THEN !
|
||||
INF_QWW_FF=288.0E0_WP*( 0.050E0_WP*THIRD - & !
|
||||
0.20E0_WP*THIRD/QR02 + & !
|
||||
EIGHT*THIRD/QR04 - & ! ref. 1 eq. (11b)
|
||||
64.0E0_WP*K3/QR04 * & !
|
||||
(I3 - SIX*I4/QR0) & !
|
||||
) / QR02 !
|
||||
ELSE IF(CONFIN == 'CC-1221') THEN !
|
||||
INF_QWW_FF=576.0E0_WP*( 0.050E0_WP*THIRD - & !
|
||||
0.80E0_WP*THIRD/QR02 + & !
|
||||
EIGHT/QR04 - 64.0E0_WP*I4*K4/QR04 & ! ref. 1 eq. (11c)
|
||||
) / QR02 !
|
||||
ELSE IF(CONFIN == 'CC-2222') THEN !
|
||||
INF_QWW_FF=1152.0E0_WP*( ONE/210.0E0_WP - & !
|
||||
0.20E0_WP*THIRD/QR02 + & !
|
||||
12.80E0_WP*THIRD/QR04 + & !
|
||||
96.0E0_WP/QR06 - & !
|
||||
64.0E0_WP/QR04 * & !
|
||||
(I3 - SIX*I4/QR0) * & ! ref. 1 eq. (11d)
|
||||
(K3 + SIX*K4/QR0) & !
|
||||
) / QR02 !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION INF_QWW_FF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION HCM_QWW_FF(X,B,CONFIN)
|
||||
!
|
||||
! This function computes the form factor of the a quantum-well wire
|
||||
! with a harmonic confinement when only the two lower subbands are filled
|
||||
!
|
||||
! Reference: (1) G. Y. Hu and R. F. O'Connell,
|
||||
! J. Phys.: Condens. Matter 2 9381 (1990)
|
||||
!
|
||||
! Note: Here, the two sub-bands are labelled 1 and 2 instead of 0 and 1
|
||||
! in ref. (1). This is for consistency with function INF_QWW_FF
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * B : confinement parameter (b = sqrt(h_bar / m* omega_0)
|
||||
! * CONFIN : type of confinement
|
||||
! CONFIN = 'HC-1111' harmonic within subband 1
|
||||
! CONFIN = 'HC-1122' harmonic between subbands 1 and 2
|
||||
! CONFIN = 'HC-1221' harmonic between subbands 1 and 2
|
||||
! CONFIN = 'HC-2222' harmonic within subband 2
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * HCM_QWW_FF : form factor
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 3 Aug 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,HALF,FOURTH,EIGHTH
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE BESSEL, ONLY : BESSK0,BESSK1
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER*7 CONFIN
|
||||
!
|
||||
REAL (WP) :: X,B
|
||||
REAL (WP) :: HCM_QWW_FF
|
||||
REAL (WP) :: Q,Q2B2,COEF
|
||||
REAL (WP) :: K0,K1
|
||||
!
|
||||
REAL (WP) :: DEXP
|
||||
!
|
||||
Q=TWO*X*KF_SI !
|
||||
Q2B2=(Q*B)*Q*B !
|
||||
!
|
||||
COEF=DEXP(FOURTH*Q2B2) !
|
||||
!
|
||||
! Computing the Bessel functions
|
||||
!
|
||||
K0=BESSK0(FOURTH*Q2B2) !
|
||||
K1=BESSK1(FOURTH*Q2B2) !
|
||||
!
|
||||
IF(CONFIN == 'HC-1111') THEN !
|
||||
HCM_QWW_FF=COEF*K0 ! ref. (1) eq. (2.5a)
|
||||
ELSE IF(CONFIN == 'HC-1122') THEN !
|
||||
HCM_QWW_FF=COEF*( K0 + FOURTH*Q2B2*(K0-K1) ) ! ref. (1) eq. (2.5c)
|
||||
ELSE IF(CONFIN == 'HC-1221') THEN !
|
||||
HCM_QWW_FF=COEF*FOURTH*Q2B2*(K1-K0) ! ref. (1) eq. (2.5d)
|
||||
ELSE IF(CONFIN == 'HC-2222') THEN !
|
||||
HCM_QWW_FF=COEF*( (ONE+HALF*Q2B2+EIGHTH*Q2B2*Q2B2)*K0 - & !
|
||||
FOURTH*Q2B2*(ONE+HALF*Q2B2)*K1 & ! ref. (1) eq. (2.5b)
|
||||
) !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION HCM_QWW_FF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION INVLAYE_FF(X,D,N_DEP,N_INV,EPSO,EPSS)
|
||||
!
|
||||
! This function computes the form factor of the surface inversion layer
|
||||
! of a semiconductor
|
||||
!
|
||||
! Reference: (1) T. K. Lee, C. S. Tin and J. J. Quinn,
|
||||
! Solid. State Comm. 16, 1309-1312 (1975)
|
||||
! (2) M. Jonson, J. Phys. C: Solid State Phys. 9, 3055-3071 (1976)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * D : width of the insulation layer (SI)
|
||||
! * N_DEP : electron concentration in depletion layer (SI)
|
||||
! * N_INV : electron concentration in inversion layer (SI)
|
||||
! * EPSO : dielectric constant of the insulating layer (oxide)
|
||||
! * EPSS : dielectric constant of the semiconductor
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * INVLAYE_FF : form factor
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 10 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,THIRD
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,E,M_E
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,D,N_DEP,N_INV,EPSO,EPSS
|
||||
REAL (WP) :: INVLAYE_FF
|
||||
REAL (WP) :: B
|
||||
REAL (WP) :: Q,NU1,NU2,NUM,DEN
|
||||
REAL (WP) :: Y,Y2,Y3,Y4
|
||||
!
|
||||
REAL (WP) :: DTANH
|
||||
!
|
||||
! Computation of parameter B
|
||||
!
|
||||
NUM=48.0E0_WP*PI*E*E*M_E !
|
||||
DEN=EPSS*H_BAR*H_BAR !
|
||||
!
|
||||
B=( NUM*(N_DEP+11.0E0_WP*N_INV/32.0E0_WP)/DEN )**THIRD ! ref. 2 eq. (21)
|
||||
!
|
||||
Q=TWO*X*KF_SI !
|
||||
Y=Q/B !
|
||||
Y2=Y*Y !
|
||||
Y3=Y2*Y !
|
||||
Y4=Y3*Y !
|
||||
!
|
||||
NU1=0.125E0_WP*Y*( 33.0E0_WP + 54.0E0_WP*Y + 44.0E0_WP*Y2 + & !
|
||||
18.0E0_WP*Y3+THREE*Y4 & !
|
||||
) !
|
||||
NU2=TWO*EPSS/( EPSS+EPSO/DTANH(Q*D) ) !
|
||||
DEN=(ONE+Y)**6 !
|
||||
!
|
||||
INVLAYE_FF=(NU1+NU2)/DEN ! ref. 1 eq. (5)
|
||||
!
|
||||
END FUNCTION INVLAYE_FF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION IQWE_LB_FF(X,L)
|
||||
!
|
||||
! This function computes the form factor of the a quantum well
|
||||
! with an infinite barrier when only the lower subband is filled
|
||||
!
|
||||
! Reference: (1) T. Vazifehshenas and T. Salavati-fard,
|
||||
! Physica E 41, 1297–1300 (2009)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * L : length of the quantum well (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * IQWE_LB_FF : form factor
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 10 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,EIGHT
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,L
|
||||
REAL (WP) :: IQWE_LB_FF
|
||||
REAL (WP) :: Q,Y,Y2
|
||||
REAL (WP) :: NU1,NU2,DE1,DE2
|
||||
!
|
||||
REAL (WP) :: DEXP
|
||||
!
|
||||
Q=TWO*X*KF_SI !
|
||||
Y=Q*L !
|
||||
Y2=Y*Y !
|
||||
!
|
||||
NU1=THREE*Y + EIGHT*PI2/Y !
|
||||
NU2=32.0E0_WP*PI2*PI2*(ONE-DEXP(-Y)) !
|
||||
DE1=Y2 + FOUR*PI2 !
|
||||
DE2=Y2 * DE1*DE1 !
|
||||
!
|
||||
IQWE_LB_FF=NU1/DE1 - NU2/DE2 !
|
||||
!
|
||||
END FUNCTION IQWE_LB_FF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION PC1_QWI_FF(X,OM0)
|
||||
!
|
||||
! This function computes the form factor of a quantum wire under
|
||||
! an harmonic confinement potential of the form 1/2 m omega_0^2 y^2
|
||||
! in the y direction
|
||||
!
|
||||
! Reference: (1) M. Tas, PhD thesis, Middle East Technical University (2004)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * OM0 : frequency of the confinement potential (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * PC1_QWI_FF : form factor
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 10 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE BESSEL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,OM0
|
||||
REAL (WP) :: PC1_QWI_FF
|
||||
REAL (WP) :: Q,B,ZZ,K0
|
||||
!
|
||||
REAL (WP) :: DSQRT,DEXP
|
||||
!
|
||||
Q=TWO*X*KF_SI !
|
||||
!
|
||||
! Characteristic length of the harmonic potential
|
||||
! (serves as effective diameter of quantum wire)
|
||||
!
|
||||
B=DSQRT(H_BAR/(M_E*OM0)) !
|
||||
!
|
||||
ZZ=FOURTH*Q*Q*B*B !
|
||||
!
|
||||
! Computing the Bessel function
|
||||
!
|
||||
K0=BESSK(0,ZZ) !
|
||||
!
|
||||
PC1_QWI_FF=DEXP(ZZ)*K0 ! ref. 1 eq. (3.70)
|
||||
!
|
||||
END FUNCTION PC1_QWI_FF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION PC2_QWI_FF(X,OM0)
|
||||
!
|
||||
! This function computes the form factor of a quantum wire under
|
||||
! an harmonic confinement potential of the form 1/8 m omega_0^2 (x^2 + y^2)
|
||||
! in the y direction
|
||||
!
|
||||
! Reference: (1) M. Tas, PhD thesis, Middle East Technical University (2004)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * OM0 : frequency of the confinement potential (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * PC2_QWI_FF : form factor
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 10 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE BESSEL, ONLY : EXPINT
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,OM0
|
||||
REAL (WP) :: PC2_QWI_FF
|
||||
REAL (WP) :: Q,B,ZZ
|
||||
!
|
||||
REAL (WP) :: DSQRT,DEXP
|
||||
!
|
||||
Q=TWO*X*KF_SI !
|
||||
!
|
||||
! Characteristic length of the harmonic potential
|
||||
! (serves as effective diameter of quantum wire)
|
||||
!
|
||||
B=DSQRT(H_BAR/(M_E*OM0)) !
|
||||
!
|
||||
ZZ=Q*Q*B*B !
|
||||
!
|
||||
PC2_QWI_FF=DEXP(ZZ) * EXPINT(1,ZZ) ! ref. 1 eq. (3.75)
|
||||
!
|
||||
END FUNCTION PC2_QWI_FF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION SOF_COR_FF(X,R0)
|
||||
!
|
||||
! This function computes the form factor of a quantum wire under
|
||||
! the soft core potential
|
||||
!
|
||||
! Reference: (1) N. Nessi and A. Iucci, Phys. Rev. B 87, 085137 (2013)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * R0 : quantum wire radius (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * SOF_COR_FF : form factor
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 10 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE BESSEL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,R0
|
||||
REAL (WP) :: Q,SOF_COR_FF
|
||||
!
|
||||
Q=TWO*X*KF_SI !
|
||||
!
|
||||
SOF_COR_FF=TWO*BESSK(0,Q*R0) !
|
||||
!
|
||||
END FUNCTION SOF_COR_FF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION SWC_QWI_FF(X,A)
|
||||
!
|
||||
! This function computes the form factor of the a quantum-well wire
|
||||
! modelled as a square well with an infinite barrier when only
|
||||
! the lower subband is filled
|
||||
!
|
||||
! The barrier is from -a/2 to a/2
|
||||
!
|
||||
!
|
||||
! Reference: (1) M. Tas, PhD thesis, Middle East Technical University (2004)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * A : length of the quantum well (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * SWC_QWI_FF : form factor
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 10 Jun 2020
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NZ_MAX
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI,PI_INV
|
||||
USE INTEGRATION, ONLY : INTEGR_L
|
||||
USE BESSEL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
! ! points
|
||||
REAL (WP) :: X,A
|
||||
REAL (WP) :: SWC_QWI_FF
|
||||
REAL (WP) :: Q,XX,F(NZ_MAX),H,AA
|
||||
!
|
||||
REAL (WP) :: DFLOAT,DCOS,DSIN
|
||||
!
|
||||
INTEGER :: K,ID
|
||||
!
|
||||
ID=1 !
|
||||
!
|
||||
Q=TWO*X*KF_SI !
|
||||
!
|
||||
! Constructing the integrand function
|
||||
!
|
||||
DO K=1,NZ_MAX !
|
||||
!
|
||||
XX=DFLOAT(K-1)/DFLOAT(NZ_MAX-1) !
|
||||
F(K)=BESSK(0,Q*A*XX) * ( & !
|
||||
TWO-(ONE-XX)*DCOS(TWO*PI*XX) + & !
|
||||
1.5E0_WP*PI_INV*DSIN(TWO*PI*XX) & !
|
||||
) !
|
||||
!
|
||||
ENDDO !
|
||||
!
|
||||
H=ONE/DFLOAT(NZ_MAX-1) ! step
|
||||
!
|
||||
! Performing the integration
|
||||
!
|
||||
CALL INTEGR_L(F,H,NZ_MAX,NZ_MAX,AA,ID) !
|
||||
|
||||
SWC_QWI_FF=TWO*AA ! ref. 1 eq. (3.87)
|
||||
!
|
||||
END FUNCTION SWC_QWI_FF
|
||||
!
|
||||
END MODULE CONFINEMENT_FF
|
||||
|
|
@ -0,0 +1,414 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CONFINEMENT_WF
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION CONFIN_WF(R,TH,SB_I,OM0,N_DEP,N_INV,EPSS)
|
||||
!
|
||||
! This function computes the confinement wave function
|
||||
!
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : radial parameter
|
||||
! * TH : polar angle
|
||||
! * SB_I : sub-band index (0, 1, 2, ...) --> limited to 10
|
||||
! * N_DEP : electron concentration in depletion layer (SI)
|
||||
! * N_INV : electron concentration in inversion layer (SI)
|
||||
! * EPSS : dielectric constant of the semiconductor
|
||||
! * OM0 : frequency of the confinement potential (SI)
|
||||
!
|
||||
! Intermediate parameters:
|
||||
!
|
||||
! * CONFIN : type of confinement
|
||||
! CONFIN = 'INF_QWW'
|
||||
! CONFIN = 'INVLAYE'
|
||||
! CONFIN = 'IQWE_LB'
|
||||
! CONFIN = 'PC1_QWI'
|
||||
! CONFIN = 'PC2_QWI'
|
||||
! CONFIN = 'SWC_QWI'
|
||||
! * L : length of the quantum well (SI)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * CONFIN_WF : wave function
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 10 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO
|
||||
USE CONFIN_VAL, ONLY : CONFIN,R0,L
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER, INTENT(IN) :: SB_I
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: R,TH,OM0
|
||||
REAL (WP), INTENT(IN) :: N_DEP,N_INV,EPSS
|
||||
REAL (WP) :: CONFIN_WF
|
||||
!
|
||||
IF(CONFIN == 'NO-CONF') THEN !
|
||||
CONFIN_WF = ZERO !
|
||||
ELSE IF(CONFIN == 'INF_QWW') THEN !
|
||||
CONFIN_WF = INF_QWW_WF(R,TH,R0,SB_I) !
|
||||
ELSE IF(CONFIN == 'INVLAYE') THEN !
|
||||
CONFIN_WF = INVLAYE_WF(R,N_DEP,N_INV,EPSS) !
|
||||
ELSE IF(CONFIN == 'IQWE_LB') THEN !
|
||||
CONFIN_WF = IQWE_LB_WF(R,L) !
|
||||
ELSE IF(CONFIN == 'PC1_QWI') THEN !
|
||||
CONFIN_WF = PC1_QWI_WF(R,OM0,SB_I) !
|
||||
ELSE IF(CONFIN == 'PC2_QWI') THEN !
|
||||
CONFIN_WF = PC2_QWI_WF(R,OM0) !
|
||||
ELSE IF(CONFIN == 'SWC_QWI') THEN !
|
||||
CONFIN_WF = SWC_QWI_WF(R,L) !
|
||||
END IF !
|
||||
|
||||
!
|
||||
END FUNCTION CONFIN_WF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION INF_QWW_WF(R,TH,R0,SB_I)
|
||||
!
|
||||
! This function computes the wave function in the two lower subbands
|
||||
! of a quantum-well wire.
|
||||
!
|
||||
! Reference: (1) A. Gold and A. Ghazali, Phys. Rev. B 41, 7626 (1990)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : radial parameter
|
||||
! * TH : polar angle
|
||||
! * R0 : radius of the quantum wire (same unit as R)
|
||||
! * SB_I : sub-band index
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * INF_QWW_FF : form factor
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 21 Sep 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,THREE
|
||||
USE COMPLEX_NUMBERS
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: SB_I
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: R,TH,R0
|
||||
REAL (WP) :: R02,R03,R2,R3
|
||||
REAL (WP) :: COEF
|
||||
!
|
||||
REAL (WP) :: SQRT
|
||||
!
|
||||
COMPLEX (WP) :: INF_QWW_WF
|
||||
!
|
||||
COMPLEX (WP) :: CMPLX,EXP
|
||||
!
|
||||
R02 = R0 * R0 !
|
||||
R03 = R02 * R0 !
|
||||
R2 = R * R !
|
||||
R3 = R2 * R !
|
||||
!
|
||||
!
|
||||
IF(SB_I == 1) THEN !
|
||||
IF(R < R0) THEN !
|
||||
COEF = SQRT(THREE * PI_INV / R02) !
|
||||
INF_QWW_WF = CMPLX(COEF * (ONE - R2 / R02),KIND=WP) !
|
||||
ELSE !
|
||||
INF_QWW_WF = ZEROC !
|
||||
END IF !
|
||||
ELSE IF(SB_I == 2) THEN !
|
||||
IF(R < R0) THEN !
|
||||
COEF = SQRT(12.0E0_WP * PI_INV / R02) !
|
||||
INF_QWW_WF = COEF * (R / R0 - R3 / R03) * EXP(IC * TH) !
|
||||
ELSE !
|
||||
INF_QWW_WF = ZEROC !
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION INF_QWW_WF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION INVLAYE_WF(Z,N_DEP,N_INV,EPSS)
|
||||
!
|
||||
! This function computes the wave function of the surface inversion layer
|
||||
! of a semiconductor in the z direction
|
||||
!
|
||||
! Reference: (1) M. Jonson, J. Phys. C: Solid State Phys. 9, 3055-3071 (1976)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * Z : z coordinate
|
||||
! * N_DEP : electron concentration in depletion layer (SI)
|
||||
! * N_INV : electron concentration in inversion layer (SI)
|
||||
! * EPSS : dielectric constant of the semiconductor
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * INVLAYE_WF : relaxation time in seconds
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 21 Sep 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : HALF,THIRD
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,E,M_E
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: Z,N_DEP,N_INV,EPSS
|
||||
REAL (WP) :: INVLAYE_WF
|
||||
REAL (WP) :: B,B3
|
||||
REAL (WP) :: NUM,DEN
|
||||
!
|
||||
REAL (WP) :: SQRT,EXP
|
||||
!
|
||||
! Computation of parameter B
|
||||
!
|
||||
NUM = 48.0E0_WP * PI * E * E * M_E !
|
||||
DEN = EPSS * H_BAR * H_BAR !
|
||||
!
|
||||
B = (NUM * ( N_DEP + 11.0E0_WP * & !
|
||||
N_INV / 32.0E0_WP ) / DEN)**THIRD ! ref. 1 eq. (21)
|
||||
!
|
||||
B3 = B * B * B !
|
||||
!
|
||||
INVLAYE_WF = SQRT(HALF * B3) * Z * EXP(- HALF * B * Z) ! ref. 1 eq. (19)
|
||||
!
|
||||
END FUNCTION INVLAYE_WF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION IQWE_LB_WF(Z,L)
|
||||
!
|
||||
! This function computes the z-axis wave function of the a quantum well
|
||||
! with an infinite barrier when only the lower subband is filled
|
||||
!
|
||||
! Reference: (1) T. Vazifehshenas and T. Salavati-fard,
|
||||
! Physica E 41, 1297–1300 (2009)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * Z : z value
|
||||
! * L : length of the quantum well (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * IQWE_LB_WF : form factor
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 21 Sep 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO
|
||||
USE PI_ETC, ONLY : PI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: Z,L
|
||||
REAL (WP) :: IQWE_LB_WF
|
||||
!
|
||||
REAL (WP) :: SQRT,SIN
|
||||
!
|
||||
IQWE_LB_WF = SQRT(TWO / L) * SIN(PI * Z / L) !
|
||||
!
|
||||
END FUNCTION IQWE_LB_WF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION PC1_QWI_WF(Y,OM0,N)
|
||||
!
|
||||
! This function computes the wave function of a quantum wire under
|
||||
! an harmonic confinement potential of the form 1/2 m omega_0^2 y^2
|
||||
! in the y direction
|
||||
!
|
||||
! Reference: (1) M. Tas, PhD thesis, Middle East Technical University (2004)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * Y : parameter in the confinement direction
|
||||
! * OM0 : frequency of the confinement potential (SI)
|
||||
! * N : sub-band index (0, 1, 2, ...) --> limited to 10
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * PC1_QWI_WF : form factor
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 21 Sep 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,HALF
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E
|
||||
USE EXT_FUNCTIONS, ONLY : H_POLYNOMIAL_VALUE
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER, INTENT(IN) :: N
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: Y,OM0
|
||||
REAL (WP) :: PC1_QWI_WF
|
||||
REAL (WP) :: B,YB,ZZ,COEF
|
||||
REAL (WP) :: FC(0:10),X(1),P(1,0:10)
|
||||
!
|
||||
REAL (WP) :: SQRT,EXP
|
||||
!
|
||||
DATA FC / 1.0E0_WP, 1.0E0_WP, 2.0E0_WP, & !
|
||||
6.0E0_WP, 24.0E0_WP, 120.0E0_WP, & ! factorials
|
||||
720.0E0_WP, 5040.0E0_WP, 40320.0E0_WP, & !
|
||||
362880.0E0_WP, 3628800.0E0_WP / !
|
||||
!
|
||||
IF(N > 10) THEN !
|
||||
WRITE(6,10) !
|
||||
STOP !
|
||||
END IF !
|
||||
!
|
||||
! Characteristic length of the harmonic potential
|
||||
! (serves as effective diameter of quantum wire)
|
||||
!
|
||||
B = SQRT(H_BAR / (M_E * OM0)) !
|
||||
!
|
||||
YB = Y / B !
|
||||
!
|
||||
ZZ = HALF * YB * YB !
|
||||
!
|
||||
COEF = SQRT(ONE / (TWO**N * FC(N) * SQRT(PI * B))) !
|
||||
!
|
||||
! Computing the Hermite polynomial
|
||||
!
|
||||
X(1) = YB !
|
||||
CALL H_POLYNOMIAL_VALUE(1,N,X,P) !
|
||||
!
|
||||
PC1_QWI_WF = COEF * EXP(- ZZ) * P(1,N) ! ref. 1 eq. (3.67)
|
||||
!
|
||||
! Format
|
||||
!
|
||||
10 FORMAT(//,5X,'<<<<< SUB-BAND INDEX TOO LARGE >>>>>',//)
|
||||
!
|
||||
END FUNCTION PC1_QWI_WF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION PC2_QWI_WF(R,OM0)
|
||||
!
|
||||
! This function computes the wave function of a quantum wire under
|
||||
! an harmonic confinement potential of the form 1/8 m omega_0^2 (x^2+y^2)
|
||||
! in the (x,y) direction (lowest sub-band only)
|
||||
!
|
||||
! Reference: (1) M. Tas, PhD thesis, Middle East Technical University (2004)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
! ->
|
||||
! * R : parameter in the confinement directions (projection of r
|
||||
! onto the(xy) plane)
|
||||
! * OM0 : frequency of the confinement potential (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * PC2_QWI_WF : form factor
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 21 Sep 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,FOURTH
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: R,OM0
|
||||
REAL (WP) :: PC2_QWI_WF
|
||||
REAL (WP) :: B,ZZ,COEF
|
||||
!
|
||||
REAL (WP) :: SQRT,EXP
|
||||
!
|
||||
! Characteristic length of the harmonic potential
|
||||
! (serves as effective diameter of quantum wire)
|
||||
!
|
||||
B = SQRT(H_BAR / (M_E * OM0)) !
|
||||
!
|
||||
ZZ = FOURTH * R * R / (B * B) !
|
||||
!
|
||||
COEF =ONE / SQRT(TWO * PI * B * B) !
|
||||
!
|
||||
PC2_QWI_WF = COEF * EXP(- ZZ) ! ref. 1 eq. (3.74)
|
||||
!
|
||||
END FUNCTION PC2_QWI_WF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION SWC_QWI_WF(Y,A)
|
||||
!
|
||||
! This function computes the wave function of the a quantum-well wire
|
||||
! with an infinite barrier when only the lowest subband is filled
|
||||
!
|
||||
! The barrier is from -a/2 to a/2
|
||||
!
|
||||
!
|
||||
! Reference: (1) M. Tas, PhD thesis, Middle East Technical University (2004)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * Y : parameter along the y axis
|
||||
! * A : length of the quantum well (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * SWC_QWI_WF : form factor
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 21 Sep 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,TWO,HALF
|
||||
USE PI_ETC, ONLY : PI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: Y,A
|
||||
REAL (WP) :: SWC_QWI_WF
|
||||
!
|
||||
REAL (WP) :: COS
|
||||
!
|
||||
IF( (- HALF * A <= Y) .AND. (Y <= HALF * A) ) THEN !
|
||||
SWC_QWI_WF = TWO * COS(PI * Y / A) / A ! ref. 1 eq. (3.86)
|
||||
ELSE !
|
||||
SWC_QWI_WF = ZERO !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION SWC_QWI_WF
|
||||
!
|
||||
END MODULE CONFINEMENT_WF
|
|
@ -0,0 +1,113 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
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
|
|
@ -0,0 +1,178 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE DAMPING_SI
|
||||
!
|
||||
! This module defines the damping coefficients in SI
|
||||
!
|
||||
!
|
||||
! --> SI version <--
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: LFT,TAU,TAU2,NNU,DIF,ETA
|
||||
!
|
||||
END MODULE DAMPING_SI
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE DAMPING_COEF
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_DAMPING(IQ,X)
|
||||
!
|
||||
! This subroutine calculates and stores the value of the damping
|
||||
! coefficient selected
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * IQ : q_loop index
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * LFT : quasiparticle lifetime in seconds
|
||||
! * TAU : 1st relaxation time in seconds
|
||||
! * TAU2 : 2nd relaxation time in seconds
|
||||
! * NNU : decay rate in 1/s
|
||||
! * DIF : diffusion coefficient in SI
|
||||
! * ETA : shear viscosity in SI
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 6 Aug 2021
|
||||
!
|
||||
!
|
||||
USE OUT_VALUES_10, ONLY : I_WR
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,LARGE
|
||||
!
|
||||
USE DAMPING_VALUES
|
||||
!
|
||||
USE LIFETIME
|
||||
USE RELAXATION_TIME_STATIC
|
||||
USE DECAY_RATE
|
||||
USE DIFFUSION_COEFFICIENT
|
||||
USE VISCOSITY
|
||||
USE EXTERNAL_DAMPING
|
||||
!
|
||||
USE DAMPING_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER, INTENT(IN) :: IQ
|
||||
!
|
||||
INTEGER :: I,LOGF
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X ! q / 2k_F
|
||||
!
|
||||
REAL (WP) :: POW1,POW2
|
||||
!
|
||||
LOGF = 6 ! log file unit
|
||||
!
|
||||
! Initialization
|
||||
!
|
||||
LFT = LARGE !
|
||||
TAU = LARGE !
|
||||
TAU2 = LARGE !
|
||||
NNU = ZERO !
|
||||
DIF = ZERO !
|
||||
ETA = ZERO !
|
||||
!
|
||||
! Power for external value
|
||||
!
|
||||
CALL CALC_POWER(POWER_1,POW1) !
|
||||
!
|
||||
IF(DAMPING == 'RELA' .AND. RT_TYPE == 'EX2') THEN !
|
||||
CALL CALC_POWER(POWER_2,POW2) !
|
||||
END IF !
|
||||
!
|
||||
! Setting up the selected kind of damping
|
||||
!
|
||||
IF(DAMPING == 'LFTM') THEN !
|
||||
IF(LT_TYPE == 'EXTE') THEN !
|
||||
LFT = D_VALUE_1 * POW1 !
|
||||
ELSE !
|
||||
CALL LIFETIME_COEF(X,LFT) !
|
||||
END IF !
|
||||
ELSE IF (DAMPING == 'RELA') THEN !
|
||||
IF(RT_TYPE == 'EX1') THEN !
|
||||
TAU = D_VALUE_1 * POW1 !
|
||||
ELSE IF(RT_TYPE == 'EX2') THEN !
|
||||
TAU = D_VALUE_1 * POW1 !
|
||||
TAU2 = D_VALUE_2 * POW2 !
|
||||
ELSE !
|
||||
CALL RELAXATION_TIME(X,TAU) !
|
||||
END IF !
|
||||
ELSE IF (DAMPING == 'DECA') THEN !
|
||||
IF(DR_TYPE == 'EXTE') THEN !
|
||||
NNU = D_VALUE_1 * POW1 !
|
||||
ELSE !
|
||||
CALL DECAY_RATE_COEF(X,NNU) !
|
||||
END IF !
|
||||
ELSE IF (DAMPING == 'DIFF') THEN !
|
||||
IF(DC_TYPE == 'EXTE') THEN !
|
||||
DIF = D_VALUE_1 * POW1 !
|
||||
ELSE !
|
||||
CALL DIFFUSION_COEF(DIF) !
|
||||
END IF !
|
||||
ELSE IF (DAMPING == 'VISC') THEN !
|
||||
IF(VI_TYPE == 'EXTE') THEN !
|
||||
ETA = D_VALUE_1 * POW1 !
|
||||
ELSE !
|
||||
CALL VISCOSITY_COEF(X,ETA) !
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
! Printing the results
|
||||
!
|
||||
IF( (I_WR == 1) .OR. ( (I_WR == 2) .AND. (IQ == 1) ) ) THEN !
|
||||
DO I = 1, 3 !
|
||||
WRITE(LOGF,5) !
|
||||
END DO !
|
||||
IF(DAMPING /= 'NONE') THEN !
|
||||
WRITE(LOGF,10) !
|
||||
WRITE(LOGF,20) !
|
||||
IF(DAMPING == 'LFTM') THEN !
|
||||
WRITE(LOGF,31) LFT !
|
||||
ELSE IF (DAMPING == 'RELA') THEN !
|
||||
WRITE(LOGF,32) TAU !
|
||||
IF(RT_TYPE == 'EX2') WRITE(LOGF,33) TAU2 !
|
||||
ELSE IF (DAMPING == 'DECA') THEN !
|
||||
WRITE(LOGF,34) NNU !
|
||||
ELSE IF (DAMPING == 'DIFF') THEN !
|
||||
WRITE(LOGF,35) DIF !
|
||||
ELSE IF (DAMPING == 'VISC') THEN !
|
||||
WRITE(LOGF,36) ETA !
|
||||
END IF !
|
||||
WRITE(LOGF,40) !
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
! Formats:
|
||||
!
|
||||
5 FORMAT(' ')
|
||||
10 FORMAT(6X,'_________________________________________________________')
|
||||
20 FORMAT(5X,'| |')
|
||||
31 FORMAT(5X,'| DAMPING CHOSEN: lifetime = ',E12.6,' s |')
|
||||
32 FORMAT(5X,'| DAMPING CHOSEN: relaxation time = ',E12.6,' s |')
|
||||
33 FORMAT(5X,'| DAMPING CHOSEN: relaxation time 2 = ',E12.6,' s |')
|
||||
34 FORMAT(5X,'| DAMPING CHOSEN: decay time = ',E12.6,' /s|')
|
||||
35 FORMAT(5X,'| DAMPING CHOSEN: diffusion coefficient = ',E12.6,' SI|')
|
||||
36 FORMAT(5X,'| DAMPING CHOSEN: viscosity = ',E12.6,' SI|')
|
||||
40 FORMAT(5X,'|_________________________________________________________|',/)
|
||||
!
|
||||
END SUBROUTINE CALC_DAMPING
|
||||
!
|
||||
END MODULE DAMPING_COEF
|
|
@ -0,0 +1,382 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CLASSICAL_FLUID
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CFLUID_3D(R,N0,T,EPS,CF_TYPE,D,LAMBDA,ETA,ZETA)
|
||||
!
|
||||
! This subroutine computes the self-diffusion, thermal conductivity,
|
||||
! shear viscosity and bulk viscosity of a classical 3D fluid
|
||||
! composed of identical spheres.
|
||||
!
|
||||
! References: (1) O. Kravchenko and M. Thachuk, J. Chem. Phys. 136, 044520 (2012)
|
||||
! (2) K. M. Dyer, B. M. Pettitt and G. Stell, J. Chem. Phys. 126,
|
||||
! 034502 (2007)
|
||||
! (3) J.-M. Bomont and J.-L. Bretonnet, Chem. Phys. 439, 85-94 (2014)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : sphere's radius (SI)
|
||||
! * N0 : number density of spheres (SI)
|
||||
! * T : temperature (SI)
|
||||
! * EPS : depth of Lennard-Jones potential (SI)
|
||||
! * CF_TYPE : type of classical fluid calculation
|
||||
! CF_TYPE = 'SHS' smooth hard spheres
|
||||
! CF_TYPE = 'RH1' rough hard spheres (Pidduck)
|
||||
! CF_TYPE = 'RH2' rough hard spheres (Condiff-Lu-Dahler)
|
||||
! CF_TYPE = 'RH3' rough hard spheres (McCoy-Sandler-Dahler)
|
||||
! CF_TYPE = 'DCE' dilute Chapman-Enskog
|
||||
! CF_TYPE = 'HCE' heavy (i.e. dense) Chapman-Enskog
|
||||
! CF_TYPE = 'LJF' Lennard-Jones fluid
|
||||
!
|
||||
!
|
||||
! Note: The Lennard-Jones potential is written as
|
||||
!
|
||||
! _ _
|
||||
! | ( 2R )^12 ( 2R )^6 |
|
||||
! V(r) = 4*EPS * | ( ---- ) - ( ---- ) |
|
||||
! |_ ( r ) ( r ) _|
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * D : (self-)diffusion coefficient
|
||||
! * LAMBDA : thermal conductivity
|
||||
! * ETA : shear viscosity
|
||||
! * ZETA : bulk viscosity
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 10 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,THREE,FOUR,FIVE, &
|
||||
SIX,SEVEN,EIGHT,NINE,TEN, &
|
||||
HALF,THIRD
|
||||
USE CONSTANTS_P1, ONLY : M_E,K_B
|
||||
USE PI_ETC, ONLY : PI,PI_INV
|
||||
USE PACKING_FRACTION, ONLY : PACK_FRAC_3D
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: CF_TYPE
|
||||
!
|
||||
REAL (WP) :: R,N0,T,EPS
|
||||
REAL (WP) :: D,LAMBDA,ETA,ZETA
|
||||
REAL (WP) :: SG,S2,S3,AL,AL2,AL3,AL4
|
||||
REAL (WP) :: DZ,L0,E0,Z0
|
||||
REAL (WP) :: K1,K2,NUM,DEN,C0,C1,C2
|
||||
REAL (WP) :: B,G,BRG,PF
|
||||
REAL (WP) :: TS,NS,Y,Z
|
||||
!
|
||||
SG=R+R ! particle diameter
|
||||
S2=SG*SG !
|
||||
S3=S2*SG !
|
||||
B=TWO*PI*SG*S2*THIRD ! 2nd virial coefficient
|
||||
AL=0.40E0_WP ! reduced moment of inertia
|
||||
! ! of sphere with uniform mass density
|
||||
AL2=AL*AL !
|
||||
AL3=AL2*AL !
|
||||
AL4=AL3*AL !
|
||||
!
|
||||
K1=DSQRT(K_B*T*PI_INV/M_E) !
|
||||
K2=DSQRT(K_B*T*PI_INV*M_E) !
|
||||
!
|
||||
! Computing the packing fraction
|
||||
!
|
||||
PF=PACK_FRAC_3D(N0,SG,'HSM') !
|
||||
!
|
||||
! Carnahan-Starling value of contact value of radial distribution
|
||||
!
|
||||
G=(ONE-HALF*PF) / (ONE-PF)**3 ! ref. 1 eq. (32)
|
||||
!
|
||||
BRG=B*N0*G
|
||||
!
|
||||
IF(CF_TYPE == 'SHS') THEN !
|
||||
!
|
||||
NUM=ONE+AL !
|
||||
DEN=ONE+AL+AL !
|
||||
D=THREE*K1/(EIGHT*N0*S2) ! ref. 1 eq. (17)
|
||||
!
|
||||
NUM=12.0E0_WP * (ONE+AL)**2 * ( & !
|
||||
37.0E0_WP + 151.0E0_WP*AL +& !
|
||||
50.0E0_WP*AL2 & !
|
||||
) !
|
||||
DEN=25.0E0_WP*( 12.0E0_WP + 75.0E0_WP*AL + & !
|
||||
101.0E0_WP*AL2 + 102.0E0_WP*AL3 & !
|
||||
) !
|
||||
LAMBDA=75.0E0_WP*K_B*K1/(64.0E0_WP*S2) ! ref. 1 eq. (18)
|
||||
!
|
||||
NUM=SIX*(ONE+AL)*(ONE+AL) !
|
||||
DEN=SIX+13.0E0_WP*AL !
|
||||
ETA=FIVE*K2/(16.0E0_WP*S2) ! ref. 1 eq. (19)
|
||||
!
|
||||
ZETA=ZERO !
|
||||
!
|
||||
ELSE IF(CF_TYPE == 'RH1') THEN !
|
||||
!
|
||||
NUM=ONE+AL !
|
||||
DEN=ONE+AL+AL !
|
||||
DZ=THREE*K1/(EIGHT*N0*S2) !
|
||||
D=DZ*NUM/DEN ! ref. 1 eq. (17)
|
||||
!
|
||||
NUM=12.0E0_WP * (ONE+AL)**2 * ( 37.0E0_WP + & !
|
||||
151.0E0_WP*AL + & !
|
||||
50.0E0_WP*AL2 & !
|
||||
) !
|
||||
DEN=25.0E0_WP*( 12.0E0_WP + 75.0E0_WP*AL + & !
|
||||
101.0E0_WP*AL2 + 102.0E0_WP*AL3 & !
|
||||
) !
|
||||
L0=75.0E0_WP*K_B*K1/(64.0E0_WP*S2) !
|
||||
LAMBDA=L0*NUM/DEN ! ref. 1 eq. (18)
|
||||
!
|
||||
NUM=SIX*(ONE+AL)*(ONE+AL) !
|
||||
DEN=SIX+13.0E0_WP*AL !
|
||||
E0=FIVE*K2/(16.0E0_WP*S2) !
|
||||
ETA=E0*NUM/DEN ! ref. 1 eq. (19)
|
||||
!
|
||||
NUM=(ONE+AL)*(ONE+AL) !
|
||||
DEN=AL !
|
||||
Z0=K2/(32.0E0_WP*S2) !
|
||||
ZETA=Z0*NUM/DEN ! ref. 1 eq. (20)
|
||||
!
|
||||
ELSE IF(CF_TYPE == 'RH2') THEN !
|
||||
!
|
||||
NUM=ONE+AL !
|
||||
DEN=ONE+AL+AL !
|
||||
DZ=THREE*K1/(EIGHT*N0*S2) !
|
||||
D=DZ*NUM/DEN !
|
||||
NUM=PI*AL*(ONE+AL) !
|
||||
DEN=TWO*(ONE+AL+AL)*(FIVE+NINE*AL+EIGHT*AL2) !
|
||||
D=D/(ONE + NUM/DEN) ! ref. 1 eq. (21)
|
||||
!
|
||||
NUM=FOUR*(ONE+AL)*( 1121.0E0_WP + 733.0E0_WP*AL + & !
|
||||
13449.0E0_WP*AL2 + 9490.0E0_WP*AL3 + & !
|
||||
2000.0E0_WP*AL4 & !
|
||||
) !
|
||||
DEN=25.0E0_WP*( 116.0E0_WP + 853.0E0_WP*AL + & !
|
||||
1707.0E0_WP*AL2 + 2266.0E0_WP*AL3 + & !
|
||||
1360.0E0_WP*AL4 & !
|
||||
) !
|
||||
L0=75.0E0_WP*K_B*K1/(64.0E0_WP*S2) !
|
||||
LAMBDA=L0*NUM/DEN ! ref. 1 eq. (22)
|
||||
!
|
||||
NUM=TWO*(ONE+AL)*(ONE+AL)*(THREE+TEN*AL) !
|
||||
DEN=SIX+33.0E0_WP*AL+35.0E0_WP*AL2 !
|
||||
E0=FIVE*K2/(16.0E0_WP*S2) !
|
||||
ETA=E0*NUM/DEN ! ref. 1 eq. (23)
|
||||
!
|
||||
NUM=(ONE+AL)*(ONE+AL) !
|
||||
DEN=AL !
|
||||
Z0=K2/(32.0E0_WP*S2) !
|
||||
ZETA=Z0*NUM/DEN ! ref. 1 eq. (20)
|
||||
!
|
||||
ELSE IF(CF_TYPE == 'RH3') THEN !
|
||||
!
|
||||
NUM=ONE+AL !
|
||||
DEN=ONE+AL+AL !
|
||||
DZ=THREE*K1/(EIGHT*N0*S2) !
|
||||
D=DZ*NUM/DEN !
|
||||
NUM=PI*AL*(ONE+AL) !
|
||||
DEN=TWO*(ONE+AL+AL)*(FIVE+NINE*AL+EIGHT*AL2) !
|
||||
D=D/(ONE + NUM/DEN) ! ref. 1 eq. (21)
|
||||
!
|
||||
NUM=FOUR*(ONE+AL)*( 1121.0E0_WP + 733.0E0_WP*AL + & !
|
||||
13449.0E0_WP*AL2 + 9490.0E0_WP*AL3 + & !
|
||||
2000.0E0_WP*AL4 & !
|
||||
) !
|
||||
DEN=25.0E0_WP*( 116.0E0_WP + 853.0E0_WP*AL + & !
|
||||
1707.0E0_WP*AL2 + 2266.0E0_WP*AL3 + & !
|
||||
1360.0E0_WP*AL4 & !
|
||||
) !
|
||||
L0=75.0E0_WP*K_B*K1/(64.0E0_WP*S2) !
|
||||
LAMBDA=L0*NUM/DEN ! ref. 1 eq. (22)
|
||||
!
|
||||
NUM=TWO*( 731.0E0_WP + 4958.0E0_WP*AL + 8005.0E0_WP*AL2 +& !
|
||||
5650.0E0_WP*AL3 + 2000.0E0_WP*AL4 & !
|
||||
) !
|
||||
DEN=1121.0E0_WP + 7336.0E0_WP*AL + 13449.0E0_WP*AL2 + & !
|
||||
9490.0E0_WP*AL3 + 2000.0E0_WP*AL4 !
|
||||
C1=NUM/DEN !
|
||||
!
|
||||
C0=501.0E0_WP + 3355.0E0_WP*AL + 4860.0E0_WP*AL2 + & !
|
||||
3850.0E0_WP*AL3 + 2000.0E0_WP*AL4 !
|
||||
NUM=16.0E0_WP*( 116.0E0_WP + 853.0E0_WP*AL + & !
|
||||
1707.0E0_WP*AL2 + 2266.0E0_WP*AL3 + & !
|
||||
1360.0E0_WP*AL4 & !
|
||||
) * PI_INV/(ONE+AL) !
|
||||
NUM=C0+NUM !
|
||||
C2=NUM/DEN !
|
||||
LAMBDA=LAMBDA/G * (ONE + C1*BRG + C2*BRG*BRG) ! ref. 1 eq. (29)
|
||||
!
|
||||
NUM=TWO*(ONE+AL)*(ONE+AL)*(THREE+TEN*AL) !
|
||||
DEN=SIX+33.0E0_WP*AL+35.0E0_WP*AL2 !
|
||||
E0=FIVE*K2/(16.0E0_WP*S2) !
|
||||
ETA=E0*NUM/DEN ! ref. 1 eq. (23)
|
||||
C1=0.40E0_WP*(TWO+FIVE*AL)/(ONE+AL) !
|
||||
NUM=SIX*( SIX + 33.0E0_WP*AL + 35.0E0_WP*AL2 & !
|
||||
) * (FOUR+SEVEN*AL) !
|
||||
DEN=PI*(THREE+TEN*AL)*(ONE+AL) !
|
||||
C2=( (TWO+FIVE*AL)**2 + NUM/DEN ) / (25.0E0_WP*(ONE+AL)**2) !
|
||||
ETA=ETA/G * (ONE + C1*BRG + C2*BRG*BRG) ! ref. 1 eq. (26)
|
||||
!
|
||||
NUM=(ONE+AL)*(ONE+AL) !
|
||||
DEN=AL !
|
||||
Z0=K2/(32.0E0_WP*S2) !
|
||||
ZETA=Z0*NUM/DEN ! ref. 1 eq. (20)
|
||||
C1=TWO !
|
||||
C2=ONE + 32.0E0_WP*AL/(PI*(ONE+AL)**2) !
|
||||
ZETA=ZETA/G * (ONE + C1*BRG + C2*BRG*BRG) ! ref. 1 eq. (27)
|
||||
!
|
||||
ELSE IF(CF_TYPE == 'DCE') THEN !
|
||||
!
|
||||
NUM=ONE+AL !
|
||||
DEN=ONE+AL+AL !
|
||||
D=1.019E0_WP*THREE*K1/(EIGHT*N0*S2) ! ref. 3 eq. (19)
|
||||
!
|
||||
NUM=12.0E0_WP * (ONE+AL)**2 * ( 37.0E0_WP + & !
|
||||
151.0E0_WP*AL + & !
|
||||
50.0E0_WP*AL2 & !
|
||||
) !
|
||||
DEN=25.0E0_WP*( 12.0E0_WP + 75.0E0_WP*AL + & !
|
||||
101.0E0_WP*AL2 + 102.0E0_WP*AL3 & !
|
||||
) !
|
||||
LAMBDA=1.025E0_WP*75.0E0_WP*K_B*K1/(64.0E0_WP*S2) ! ref. 3 eq. (21)
|
||||
!
|
||||
NUM=SIX*(ONE+AL)*(ONE+AL) !
|
||||
DEN=SIX+13.0E0_WP*AL !
|
||||
ETA=1.016E0_WP*FIVE*K2/(16.0E0_WP*S2) ! ref. 3 eq. (20)
|
||||
!
|
||||
ZETA=ZERO !
|
||||
!
|
||||
ELSE IF(CF_TYPE == 'HCE') THEN !
|
||||
!
|
||||
Z=FOUR*PF*G ! ref. 3 eq. (4)
|
||||
!
|
||||
NUM=ONE+AL !
|
||||
DEN=ONE+AL+AL !
|
||||
D=1.019E0_WP*THREE*K1/(EIGHT*N0*S2) !
|
||||
D=D*FOUR*PF/Z ! ref. 3 eq. (15)
|
||||
!
|
||||
NUM=12.0E0_WP * (ONE+AL)**2 * ( 37.0E0_WP + & !
|
||||
151.0E0_WP*AL + & !
|
||||
50.0E0_WP*AL2 & !
|
||||
) !
|
||||
DEN=25.0E0_WP*( 12.0E0_WP + 75.0E0_WP*AL + & !
|
||||
101.0E0_WP*AL2 + 102.0E0_WP*AL3 & !
|
||||
) !
|
||||
LAMBDA=1.025E0_WP*75.0E0_WP*K_B*K1/(64.0E0_WP*S2) !
|
||||
LAMBDA=LAMBDA*FOUR*PF*(ONE/Z + 1.2E0_WP + 0.755E0_WP*Z) ! ref. 3 eq. (18)
|
||||
!
|
||||
NUM=SIX*(ONE+AL)*(ONE+AL) !
|
||||
DEN=SIX+13.0E0_WP*AL !
|
||||
ETA=1.016E0_WP*FIVE*K2/(16.0E0_WP*S2) !
|
||||
ETA=ETA*FOUR*PF*(ONE/Z + 0.8E0_WP + 0.761E0_WP*Z) ! ref. 3 eq. (16)
|
||||
!
|
||||
ZETA=ETA*FOUR*PF*1.002E0_WP*Z ! ref. 3 eq. (17)
|
||||
!
|
||||
ELSE IF(CF_TYPE == 'LJF') THEN !
|
||||
!
|
||||
TS=K_B*T/EPS ! T*
|
||||
NS=N0*S3 ! rho*
|
||||
Y=TWO*PI*NS*THIRD !
|
||||
!
|
||||
DZ=0.375E0_WP*DSQRT(TS*PI_INV/M_E)/SG !
|
||||
D=DZ/(NS*G) ! ref. 2 eq. (3)
|
||||
!
|
||||
LAMBDA=ZERO ! not provided
|
||||
!
|
||||
E0=0.3125E0_WP*DSQRT(M_E*TS*PI_INV)/S2 !
|
||||
ETA=E0*(ONE/G + 0.8E0_WP*Y + 0.761E0_WP*Y*Y*G) ! ref. 2 eq. (4)
|
||||
!
|
||||
ZETA=E0*1.002E0_WP*Y*Y*G !
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CFLUID_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CFLUID_2D(R,N0,T,CF_TYPE,D,LAMBDA,ETA,ZETA)
|
||||
!
|
||||
! This subroutine computes the self-diffusion, thermal conductivity,
|
||||
! shear viscosity and bulk viscosity of a classical 2D fluid
|
||||
! composed of identical spheres.
|
||||
!
|
||||
! References: (1) R. Garcia-Rojo, S. Luding and J. J. Brey,
|
||||
! Phys. Rev. E 74, 061395 (2006)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : disks radius (SI)
|
||||
! * N0 : number density of spheres (SI)
|
||||
! * T : temperature (SI)
|
||||
! * CF_TYPE : type of classical fluid calculation
|
||||
! CF_TYPE = 'DHD' dense hard disks
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * D : (self-)diffusion coefficient
|
||||
! * LAMBDA : thermal conductivity
|
||||
! * ETA : shear viscosity
|
||||
! * ZETA : bulk viscosity
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 10 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,SEVEN, &
|
||||
EIGHT,NINE,HALF
|
||||
USE CONSTANTS_P1, ONLY : M_E,K_B
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
USE PACKING_FRACTION, ONLY : PACK_FRAC_2D
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER*3 CF_TYPE
|
||||
!
|
||||
REAL (WP) :: R,N0,T
|
||||
REAL (WP) :: K1,K2,SG,PF,G
|
||||
REAL (WP) :: D,LAMBDA,ETA,ZETA
|
||||
!
|
||||
K1=DSQRT(K_B*T*PI_INV/M_E) !
|
||||
K2=DSQRT(K_B*T*PI_INV*M_E) !
|
||||
!
|
||||
SG=R+R ! particle diameter
|
||||
!
|
||||
! Computing the packing fraction
|
||||
!
|
||||
PF=PACK_FRAC_2D(N0,SG,'HDM') !
|
||||
!
|
||||
! Henderson's value of contact value of radial distribution
|
||||
!
|
||||
G=(ONE -SEVEN*PF/16.0E0_WP) / (ONE-PF)**2 ! ref. 1 eq. (6)
|
||||
!
|
||||
IF(CF_TYPE == 'DHD') THEN !
|
||||
D=HALF*K1 / (N0*SG*G) ! ref. 1 eq. (5)
|
||||
LAMBDA=TWO*K_B*K1* ( &!
|
||||
ONE/G + THREE*PF + &!
|
||||
(NINE/FOUR + FOUR*PI_INV)*G*PF*PF &! ref. 1 eq. (24)
|
||||
) / SG !
|
||||
ETA=HALF*K2* ( &!
|
||||
ONE/G + TWO*PF + &!
|
||||
(ONE+EIGHT*PI_INV)*G*PF*PF &! ref. 1 eq. (15)
|
||||
) / SG !
|
||||
ZETA=EIGHT*K2*PF*PF*G*PI_INV/SG ! ref. 1 eq. (22)
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CFLUID_2D
|
||||
!
|
||||
END MODULE CLASSICAL_FLUID
|
|
@ -0,0 +1,225 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE DECAY_RATE
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE DECAY_RATE_COEF(X,DR)
|
||||
!
|
||||
! This subroutine computes the decay rate
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * DR : decay rate
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 12 Nov 2020
|
||||
!
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : DMN,RS
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
USE LF_VALUES, ONLY : GQ_TYPE,IQ_TYPE
|
||||
USE SF_VALUES, ONLY : SQ_TYPE
|
||||
!
|
||||
USE DAMPING_VALUES, ONLY : DR_TYPE
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X
|
||||
REAL (WP), INTENT(OUT) :: DR
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
CALL DECAY_RATE_3D(X,T,RS,DR_TYPE,SQ_TYPE,GQ_TYPE, & !
|
||||
IQ_TYPE,DR) !
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
CONTINUE ! not implemented yet
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
CONTINUE ! not implemented yet
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE DECAY_RATE_COEF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE DECAY_RATE_3D(X,T,RS,DR_TYPE,SQ_TYPE,GQ_TYPE, &
|
||||
IQ_TYPE,DR)
|
||||
!
|
||||
! This subroutine computes the plasmon decay rate
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * T : temperature (in SI)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * DR_TYPE : type of decay rate
|
||||
! DR_TYPE = 'UTIC' --> Utsumi-Ichimaru approximation
|
||||
! DR_TYPE = 'VLAS' --> Vlasov approximation
|
||||
! * SQ_TYPE : structure factor approximation (3D)
|
||||
! * GQ_TYPE : local-field correction type (3D)
|
||||
! * IQ_TYPE : type of approximation for I(q)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * DR : decay rate
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: DR_TYPE,GQ_TYPE
|
||||
CHARACTER (LEN = 3) :: SQ_TYPE,IQ_TYPE
|
||||
!
|
||||
REAL (WP) :: X,T,RS
|
||||
REAL (WP) :: DR
|
||||
!
|
||||
IF(DR_TYPE == 'UTIC') THEN !
|
||||
DR=UTIC_DR_3D(X,RS,T,SQ_TYPE,GQ_TYPE,IQ_TYPE) !
|
||||
ELSE IF(DR_TYPE == 'VLAS') THEN !
|
||||
DR=VLAS_DR_3D(X,T,RS) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE DECAY_RATE_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION UTIC_DR_3D(X,RS,T,SQ_TYPE,GQ_TYPE,IQ_TYPE)
|
||||
!
|
||||
! This function computes Utsumi-Ichimaru approximation for
|
||||
! the decay rate in the 3D case
|
||||
!
|
||||
! Reference: (1) K. Utsumi and S. Ichimaru,
|
||||
! Phys. Rev. B 22, 1522-1533 (1980)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature (in SI)
|
||||
! * SQ_TYPE : structure factor approximation (3D)
|
||||
! * GQ_TYPE : local-field correction type (3D)
|
||||
! * IQ_TYPE : type of approximation for I(q)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * UTIC_DR : decay rate
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 3 Dec 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : HALF
|
||||
USE CONSTANTS_P1, ONLY : H_BAR
|
||||
USE UTIC_PARAMETERS, ONLY : UTIC_PARAM
|
||||
USE RELAXATION_TIME_STATIC, ONLY : UTIC_RT_3D
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: GQ_TYPE
|
||||
CHARACTER (LEN = 3) :: SQ_TYPE,IQ_TYPE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,RS,T
|
||||
REAL (WP) :: UTIC_DR_3D
|
||||
!
|
||||
REAL (WP) :: OMP
|
||||
REAL (WP) :: TAU_Q,OMQ,OM0
|
||||
!
|
||||
REAL (WP) :: EXP
|
||||
!
|
||||
OMP = ENE_P_SI / H_BAR ! omega_p in SI
|
||||
!
|
||||
! Computing the Utsumi-Ichimaru parameters OMEGA(q) and OMEGA(0)
|
||||
!
|
||||
CALL UTIC_PARAM(X,RS,T,OMQ,OM0) !
|
||||
!
|
||||
! Computing the relaxation time TAU_Q
|
||||
!
|
||||
TAU_Q = UTIC_RT_3D(X,RS,T,SQ_TYPE,GQ_TYPE) !
|
||||
!
|
||||
UTIC_DR_3D = - HALF * EXP(- HALF * (OMP / OM0)**2) / TAU_Q ! ref. 1 eq. (5.13)
|
||||
!
|
||||
END FUNCTION UTIC_DR_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION VLAS_DR_3D(X,RS,T)
|
||||
!
|
||||
! This function computes Vlasov approximation for
|
||||
! the decay rate in the 3D case
|
||||
!
|
||||
! Reference: (1) S. Ichimaru, "Statistical Plasma Physics - Vol1",
|
||||
! CRC Press (2004)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature (in SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * VLAS_DR : relaxation time in seconds
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,THREE,HALF
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E,K_B
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,RS,T
|
||||
REAL (WP) :: VLAS_DR_3D
|
||||
REAL (WP) :: Q_SI,KD_SI,OQ2,AA
|
||||
!
|
||||
REAL (WP) :: DSQRT,DEXP
|
||||
!
|
||||
Q_SI=TWO*X*KF_SI ! q
|
||||
!
|
||||
! Computing the Debye screening vector
|
||||
!
|
||||
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||||
!
|
||||
! Computing the square of the Vlasov plasmon dispersion
|
||||
!
|
||||
OQ2=ENE_P_SI*ENE_P_SI + THREE*K_B*T*Q_SI*Q_SI/M_E ! ref. 1 eq. (4.30)
|
||||
!
|
||||
AA=HALF*M_E*OQ2/(Q_SI*Q_SI*K_B*T) !
|
||||
!
|
||||
VLAS_DR_3D=DSQRT(0.125E0_WP*PI)*ENE_P_SI*(KD_SI/Q_SI)**3 * & ! ref. 1 eq. (4.31)
|
||||
DEXP(-AA) / H_BAR !
|
||||
!
|
||||
END FUNCTION VLAS_DR_3D
|
||||
!
|
||||
END MODULE DECAY_RATE
|
|
@ -0,0 +1,152 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE DIFFUSION_COEFFICIENT
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE DIFFUSION_COEF(DC)
|
||||
!
|
||||
! This subroutine computes the diffusion coefficient
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 23 Oct 2020
|
||||
!
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : DMN,RS
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
!
|
||||
USE DAMPING_VALUES, ONLY : DC_TYPE
|
||||
!
|
||||
USE EL_ELE_INTER, ONLY : S,EPS
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(OUT) :: DC
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
CALL DIFFUSION_COEFFICIENT_3D(T,S,EPS,RS,DC_TYPE,DC)
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
DC = ZERO ! not yet implemented
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
DC = ZERO ! not yet implemented
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE DIFFUSION_COEF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE DIFFUSION_COEFFICIENT_3D(T,S,EPS,RS,DC_TYPE,DC)
|
||||
!
|
||||
! This subroutine computes the diffusion coefficient for 3D systems
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * T : temperature (SI)
|
||||
! * S : \
|
||||
! * EPS : / parameters of the soft-sphere potential
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * DC_TYPE : diffusion coefficient in 3D
|
||||
! DC_TYPE = 'ASHO' --> Ashurst-Hoover
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * DC : diffusion coefficient
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: DC_TYPE
|
||||
!
|
||||
REAL (WP) :: T,S,EPS,RS
|
||||
REAL (WP) :: DC
|
||||
!
|
||||
IF(DC_TYPE == 'ASHO') THEN !
|
||||
DC = ASHO_DC_3D(T,S,EPS,RS) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE DIFFUSION_COEFFICIENT_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION ASHO_DC_3D(T,S,EPS,RS)
|
||||
!
|
||||
! This function computes the Ashurst-Hoover diffusion coefficient
|
||||
! for 3D hard-sphere fluid at a given value of the temperature T
|
||||
!
|
||||
! References: (1) W. T. Ashusrt and W. G. Hoover, Phys. Rev. A 11,
|
||||
! 658 (1975)
|
||||
!
|
||||
! Note: the model uses a soft-sphere interaction potential given by
|
||||
!
|
||||
! V_SS(R) = EPS * ( S/R )**12
|
||||
!
|
||||
! Warning: the result is valid for reduced densities XX > 0.6
|
||||
!
|
||||
! with XX = N0 * (EPS / K_B*T)**0.25
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * T : temperature (SI)
|
||||
! * S : \
|
||||
! * EPS : / parameters of the soft-sphere potential
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * ASHO_DC_3D
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E,K_B
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: T,S,EPS,RS
|
||||
REAL (WP) :: ASHO_DC_3D
|
||||
REAL (WP) :: N0
|
||||
REAL (WP) :: D0,CC,XX,KK,S3
|
||||
!
|
||||
REAL (WP) :: SQRT,EXP
|
||||
!
|
||||
KK = 0.416666666666666666666666666666666667E0_WP ! 5/12
|
||||
!
|
||||
S3 = S * S * S !
|
||||
!
|
||||
! Computing the electron density
|
||||
!
|
||||
N0 = RS_TO_N0('3D',RS) !
|
||||
!
|
||||
D0 = 4.9E0_WP !
|
||||
CC = 6.3E0_WP !
|
||||
XX = N0 * S3 * (EPS / (K_B*T))**FOURTH / SQRT(TWO) ! reduced density p. 663
|
||||
!
|
||||
ASHO_DC_3D = S * SQRT(EPS / M_E) * (K_B * T / EPS)**KK * & !
|
||||
D0 * EXP(- CC * XX) ! ref. 1 p. 666
|
||||
!
|
||||
END FUNCTION ASHO_DC_3D
|
||||
!
|
||||
END MODULE DIFFUSION_COEFFICIENT
|
|
@ -0,0 +1,101 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE DIFFUSION_COEFFICIENT_2
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE DIFFUSION_COEF2(X,DC)
|
||||
!
|
||||
! This subroutine computes the diffusion coefficient from
|
||||
! the knowledge of the static susceptibility
|
||||
!
|
||||
! Reference: (1) M. Le Bellac, F. Mortessagne and G. G. Batrouni,
|
||||
! "Equilibrium and Non-Equilibrium Statistical
|
||||
! Thermodynamics", (Cambridge University Press, 2004)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * DC : diffusion coefficient
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 30 Apr 2021
|
||||
!
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : DMN,RS
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
USE UNITS, ONLY : UNIT
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO
|
||||
USE CONSTANTS_P1, ONLY : M_E
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
!
|
||||
USE LF_VALUES, ONLY : GQ_TYPE
|
||||
USE DF_VALUES, ONLY : EPS_T,D_FUNC
|
||||
!
|
||||
USE DFUNC_STATIC
|
||||
USE LOCAL_FIELD_STATIC
|
||||
USE DAMPING_COEF
|
||||
USE COULOMB_K, ONLY : COULOMB_FF
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
USE DAMPING_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: D_FUNCL
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X
|
||||
REAL (WP), INTENT(OUT) :: DC
|
||||
!
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
REAL (WP) :: GQ,CHI_0,CHI_Q
|
||||
REAL (WP) :: NUM,DEN
|
||||
REAL (WP) :: Q_SI,VC
|
||||
REAL (WP) :: NN
|
||||
!
|
||||
Q_SI = TWO * X * KF_SI ! q in SI
|
||||
!
|
||||
IF(EPS_T == 'LONG') THEN !
|
||||
D_FUNCL = D_FUNC !
|
||||
END IF !
|
||||
!
|
||||
! Computing the Coulomb potential VC
|
||||
!
|
||||
CALL COULOMB_FF(DMN,UNIT,Q_SI,ZERO,VC) ! Coulomb pot.
|
||||
!
|
||||
! Computing the static dielectric function and
|
||||
! the static local field correction
|
||||
!
|
||||
CALL DFUNCL_STATIC(X,D_FUNCL,EPSR,EPSI) !
|
||||
CALL LFIELD_STATIC(X,RS,T,GQ_TYPE,GQ) !
|
||||
!
|
||||
CHI_0 = (ONE - EPSR) / VC !
|
||||
!
|
||||
NUM = CHI_0 !
|
||||
DEN = ONE + VC * (GQ - ONE) * CHI_0 !
|
||||
CHI_Q = NUM / DEN !
|
||||
!
|
||||
! Computing the density NN
|
||||
!
|
||||
NN = RS_TO_N0(DMN,RS) !
|
||||
!
|
||||
DC = TAU * NN / (M_E * CHI_Q) ! ref. 1 eq. (9.91)
|
||||
!
|
||||
END SUBROUTINE DIFFUSION_COEF2
|
||||
!
|
||||
END MODULE DIFFUSION_COEFFICIENT_2
|
||||
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE ELECTRON_PHONON_INT
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE EL_PHONON_INT_3D(X,EPH,EPS0,EPSI,IP)
|
||||
!
|
||||
! This subroutine computes the electron-phonon interaction
|
||||
! for 3D systems
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * EPH : phonon energy -SI)
|
||||
! * EPS0 :
|
||||
! * EPSI :
|
||||
! * IP_TYPE : type of electron-phonon interaction
|
||||
! IP_TYPE = 'DEHI' --> Degani-Hipolito approximation
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * IP : electron-phonon interaction
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: IP_TYPE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,EPH,EPS0,EPSI
|
||||
!
|
||||
COMPLEX (WP) :: IP
|
||||
!
|
||||
IF(IP_TYPE == 'DEHI') THEN !
|
||||
IP = DEHI_EP_3D(X,EPH,EPS0,EPSI) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE EL_PHONON_INT_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION DEHI_EP_3D(X,EPH,EPS0,EPSI)
|
||||
!
|
||||
! This function computes the Fourier coefficient of the electron-phonon
|
||||
! interaction
|
||||
!
|
||||
! Reference: (1) M. H. Degani and O. Hipolito, Phys. Rev. B 35, 9345-9348 (1987)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * EPH : phonon energy -SI)
|
||||
! * EPS0 :
|
||||
! * EPSI :
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * DEHI_EPI : Fourier coefficient
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO
|
||||
USE COMPLEX_NUMBERS, ONLY : IC
|
||||
USE CONSTANTS_P1, ONLY : E
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI
|
||||
!
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,EPH,EPS0,EPSI
|
||||
REAL (WP) :: Q,SQR
|
||||
!
|
||||
REAL (WP) :: SQRT
|
||||
!
|
||||
COMPLEX (WP) :: DEHI_EP_3D
|
||||
!
|
||||
Q = TWO * X * KF_SI ! phonon momentum
|
||||
SQR = SQRT(TWO * PI * E * E * (ONE / EPSI - ONE / EPS0) /EPH) !
|
||||
!
|
||||
DEHI_EP_3D = - IC * EPH * SQR / Q ! ref. 1 eq. (2)
|
||||
!
|
||||
END FUNCTION DEHI_EP_3D
|
||||
!
|
||||
END MODULE ELECTRON_PHONON_INT
|
|
@ -0,0 +1,79 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE EXTERNAL_DAMPING
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_POWER(POWER,POW)
|
||||
!
|
||||
! This subroutine sets up the power coefficient of the damping
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * POWER : string for the power coefficient
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * POW : value of the power coefficient
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 30 Apr 2021
|
||||
!
|
||||
!
|
||||
USE POWERS_OF_TEN
|
||||
USE DAMPING_VALUES
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(OUT) :: POW
|
||||
!
|
||||
CHARACTER (LEN = 5) :: POWER
|
||||
!
|
||||
IF(POWER == ' KILO') THEN !
|
||||
POW = KILO !
|
||||
ELSE IF(POWER == ' MEGA') THEN !
|
||||
POW = MEGA !
|
||||
ELSE IF(POWER == ' GIGA') THEN !
|
||||
POW = GIGA !
|
||||
ELSE IF(POWER == ' TERA') THEN !
|
||||
POW = TERA !
|
||||
ELSE IF(POWER == ' PETA') THEN !
|
||||
POW = PETA !
|
||||
ELSE IF(POWER == ' EXA') THEN !
|
||||
POW = EXA !
|
||||
ELSE IF(POWER == 'ZETTA') THEN !
|
||||
POW = ZETTA !
|
||||
ELSE IF(POWER == 'YOTTA') THEN !
|
||||
POW = YOTTA !
|
||||
!
|
||||
ELSE IF(POWER == 'MILLI') THEN !
|
||||
POW = MILLI !
|
||||
ELSE IF(POWER == 'MICRO') THEN !
|
||||
POW = MICRO !
|
||||
ELSE IF(POWER == ' NANO') THEN !
|
||||
POW = NANO !
|
||||
ELSE IF(POWER == ' PICO') THEN !
|
||||
POW = PICO !
|
||||
ELSE IF(POWER == 'FEMTO') THEN !
|
||||
POW = FEMTO !
|
||||
ELSE IF(POWER == ' ATTO') THEN !
|
||||
POW = ATTO !
|
||||
ELSE IF(POWER == 'ZEPTO') THEN !
|
||||
POW = ZEPTO !
|
||||
ELSE IF(POWER == 'YOCTO') THEN !
|
||||
POW = YOCTO !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CALC_POWER
|
||||
!
|
||||
END MODULE EXTERNAL_DAMPING
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,167 @@
|
|||
!=======================================================================
|
||||
!
|
||||
MODULE IMFP
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE MEAN_FREE_PATH(EK,MFP)
|
||||
!
|
||||
! This subroutine computes the electron inelastic mean free path
|
||||
!
|
||||
!
|
||||
! Reference: (1) D. R. Penn, Phys. Rev. B 13, 5248-5254 (1976)
|
||||
! (2) B. Da, H. Shinotsuka, H. Yoshikawa, Z.J. Ding and
|
||||
! S. Tanuma, Phys. Rev. Lett. 113, 063201 (2014)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * EK : electron kinetic energy (in SI)
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * IMPF : inelastic mean free path (in SI)
|
||||
!
|
||||
!
|
||||
! Note: eps(q,omega) is in fact stored as a function of Y = q / k_F
|
||||
! and V = hbar omega / E_F
|
||||
!
|
||||
! Therefore, in order to be consistent, the integrations have
|
||||
! to be performed in Y and V
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 30 Apr 2021
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
USE MATERIAL_PROP, ONLY : RS
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
!
|
||||
USE Q_GRID, ONLY : Q_MIN
|
||||
USE E_GRID, ONLY : E_MIN
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,HALF,FOURTH,SMALL,TTINY,INF
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE FERMI_SI, ONLY : EF_SI,KF_SI
|
||||
USE CONSTANTS_P1, ONLY : BOHR,H_BAR,M_E
|
||||
USE ENE_CHANGE, ONLY : EV
|
||||
!
|
||||
USE DF_VALUES, ONLY : D_FUNC
|
||||
!
|
||||
USE INTEGRATION, ONLY : INTEGR_L
|
||||
USE INTEGRATION4
|
||||
USE DFUNCL_STAN_DYNAMIC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: IQ,IE
|
||||
INTEGER :: ID
|
||||
INTEGER :: I_ZQ,I_ZE
|
||||
!
|
||||
INTEGER, PARAMETER :: NE_MAX = 2000 ! max. number of points in e-grid
|
||||
INTEGER, PARAMETER :: NQ_MAX = 1000 ! max. number of points in q-grid
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: EK
|
||||
REAL (WP), INTENT(OUT):: MFP
|
||||
REAL (WP) :: MIN_E,MAX_E,MIN_Q,MAX_Q
|
||||
REAL (WP) :: STEP_E,STEP_Q
|
||||
REAL (WP) :: E,Q
|
||||
REAL (WP) :: X,V,Z,EKF,KOEF
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
REAL (WP) :: ELF(NSIZE),IN(NSIZE)
|
||||
REAL (WP) :: A,B
|
||||
!
|
||||
REAL (WP) :: FLOAT,SQRT
|
||||
!
|
||||
EKF = EK / EF_SI ! in units of E_F
|
||||
!
|
||||
KOEF = EKF * PI * BOHR / RS !
|
||||
!
|
||||
MIN_E = E_MIN ! in units of E_F
|
||||
MAX_E = EKF - ONE ! in units of E_F
|
||||
STEP_E = (MAX_E - MIN_E) / FLOAT(NE_MAX - 1) ! in units of E_F
|
||||
!
|
||||
! Constructing the e-grid
|
||||
!
|
||||
DO IE = 1, NE_MAX ! E_F
|
||||
!
|
||||
E = MIN_E + FLOAT(IE - 1) * STEP_E ! in units of
|
||||
V = E ! hbar * omega / E_F
|
||||
!
|
||||
! Constructing the q-grid
|
||||
!
|
||||
MIN_Q = MAX( Q_MIN, SQRT(EKF) - SQRT(EKF - V) ) ! for Z to be defined
|
||||
MAX_Q = SQRT(EKF) + SQRT(EKF - V) ! in units of k_F
|
||||
STEP_Q = (MAX_Q - MIN_Q) / FLOAT(NQ_MAX - 1) ! in units of k_F
|
||||
!
|
||||
I_ZQ = 0 ! switch for integrand = 0
|
||||
!
|
||||
DO IQ = 1, NQ_MAX !
|
||||
!
|
||||
Q = MIN_Q + FLOAT(IQ - 1) * STEP_Q ! in units of k_F
|
||||
!
|
||||
X = HALF * Q ! (q / 2k_F)
|
||||
Z = FOURTH * V / (X * X) ! omega / omega_q
|
||||
!
|
||||
! Computing the dielectric function epsilon(q,E)
|
||||
!
|
||||
CALL DFUNCL_DYNAMIC(X,Z,RS,T,D_FUNC,IE,EPSR,EPSI) !
|
||||
!
|
||||
! Computing the loss function ELF = Im [ -1 / epsilon(q,E) ]
|
||||
!
|
||||
ELF(IQ) = EPSI / ( (EPSR * EPSR + EPSI * EPSI) * Q) ! integrand function
|
||||
!
|
||||
! IF(ELF(IQ) /= ZERO) I_ZQ = IQ !
|
||||
IF(ELF(IQ) == ZERO) ELF(IQ) = SMALL !
|
||||
!
|
||||
END DO ! end of q-grid
|
||||
!
|
||||
! IF(I_ZQ > 0) THEN !
|
||||
!
|
||||
! Performing the q-integration
|
||||
!
|
||||
ID = 1 ! EPSI = 0 at origin
|
||||
CALL INTEGR_L(ELF,STEP_Q,NSIZE,NQ_MAX,A,ID) !
|
||||
!
|
||||
! ELSE ! ELF always = 0
|
||||
!
|
||||
! A = TTINY !
|
||||
!
|
||||
! END IF !
|
||||
!
|
||||
! Constructing the e-integrand
|
||||
!
|
||||
IN(IE) = A !
|
||||
!
|
||||
! IF(A /= ZERO) I_ZE = IE !
|
||||
IF(IN(IE) == ZERO) IN(IE) = SMALL !
|
||||
!
|
||||
END DO ! end of e-grid
|
||||
!
|
||||
! IF(I_ZE > 0) THEN !
|
||||
!
|
||||
! Performing the e-integration
|
||||
!
|
||||
ID = 1 !
|
||||
CALL INTEGR_L(IN,STEP_E,NSIZE,NE_MAX,B,ID) !
|
||||
!
|
||||
! ELSE ! IN always = 0
|
||||
!
|
||||
! B = TTINY !
|
||||
!
|
||||
! END IF !
|
||||
!
|
||||
MFP = KOEF / B ! ref. (2) eq. (2)
|
||||
!
|
||||
END SUBROUTINE MEAN_FREE_PATH
|
||||
!
|
||||
END MODULE IMFP
|
|
@ -0,0 +1,116 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE PACKING_FRACTION
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION PACK_FRAC_3D(N0,DIA,PF_TYPE)
|
||||
!
|
||||
! This function computes the 3D packing fraction of a hard-sphere fluid
|
||||
!
|
||||
! References: (1) J.-M. Bomont and J.-L. Bretonnet,
|
||||
! Chem. Phys. 439, 85-94 (2014)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * N0 : number density ! in same
|
||||
! * DIA : diameter of particles ! units
|
||||
! * PF_TYPE : type of packing fraction
|
||||
! PF_TYPE = 'HSM' --> hard sphere model
|
||||
! PF_TYPE = 'RCP' --> random closed-packed
|
||||
! PF_TYPE = 'FCC' --> FCC closed-packed
|
||||
! PF_TYPE = 'FRE' --> freezing
|
||||
! PF_TYPE = 'MEL' --> melting
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * PACK_FRAC_3D
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Dec 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,SIXTH
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE SQUARE_ROOTS, ONLY : SQR2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: PF_TYPE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: N0,DIA
|
||||
REAL (WP) :: PACK_FRAC_3D
|
||||
!
|
||||
IF(PF_TYPE == 'HSM') THEN !
|
||||
PACK_FRAC_3D = PI * N0 * DIA * DIA * DIA * SIXTH !
|
||||
ELSE IF(PF_TYPE == 'RCP') THEN !
|
||||
PACK_FRAC_3D = 0.64E0_WP !
|
||||
ELSE IF(PF_TYPE == 'FCC') THEN !
|
||||
PACK_FRAC_3D = PI * SQR2 * SIXTH !
|
||||
ELSE IF(PF_TYPE == 'FRE') THEN !
|
||||
PACK_FRAC_3D = 0.494E0_WP !
|
||||
ELSE IF(PF_TYPE == 'MEL') THEN !
|
||||
PACK_FRAC_3D = 0.545E0_WP !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION PACK_FRAC_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION PACK_FRAC_2D(N0,DIA,PF_TYPE)
|
||||
!
|
||||
! This function computes the 2D packing fraction of a hard-sphere fluid
|
||||
!
|
||||
! References: (1) R. Garcia-Rojo, S. Luding and J. J. Brey,
|
||||
! Phys. Rev. E 74, 061395 (2006)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * N0 : number density ! in same
|
||||
! * DIA : diameter of disks ! units
|
||||
! * PF_TYPE : type of packing fraction
|
||||
! PF_TYPE = 'HDM' --> hard disk model
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * PACK_FRAC_2D
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 10 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : FOURTH
|
||||
USE PI_ETC, ONLY : PI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: PF_TYPE
|
||||
!
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: N0,DIA
|
||||
REAL (WP) :: PACK_FRAC_2D
|
||||
!
|
||||
IF(PF_TYPE == 'HDM') THEN !
|
||||
PACK_FRAC_2D = PI * N0 * DIA * DIA * FOURTH !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION PACK_FRAC_2D
|
||||
!
|
||||
END MODULE PACKING_FRACTION
|
|
@ -0,0 +1,626 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE PLASMON_DAMPING
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE PLAS_DAMP_EG_3D(X,RS,T,TAU,PD_TYPE,PL_DISP,SQ_TYPE, &
|
||||
GQ_TYPE,EC_TYPE,IQ_TYPE,GAMMA_Q)
|
||||
!
|
||||
! This subroutine computes the plasmon damping in the 3D case.
|
||||
!
|
||||
! ---> electron gas case <---
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
! * TAU : relaxation time (used for damping) in SI
|
||||
! * PD_TYPE : method used to compute the plasmon damping (3D)
|
||||
! PD_TYPE = 'NONE' --> no plasmon damping
|
||||
! PD_TYPE = 'CALL' --> Callen approximation
|
||||
! PD_TYPE = 'DGKA' --> DuBois-Gilinsky-Kivelson approximation
|
||||
! PD_TYPE = 'FEWA' --> Fetter and Walecka approximation
|
||||
! PD_TYPE = 'JEWS' --> Jewsbury approximation
|
||||
! PD_TYPE = 'LITI' --> Giuliani-Quinn lifetime approximation
|
||||
! PD_TYPE = 'MOPE' --> Molinari-Peerani approximation
|
||||
! PD_TYPE = 'NPSA' --> Ninham-Powel-Swanson approximation
|
||||
! PD_TYPE = 'SGAA' --> Segui-Gervasoni-Arista approximation
|
||||
! * PL_DISP : method used to compute the dispersion (3D)
|
||||
! * SQ_TYPE : structure factor approximation (3D)
|
||||
! * GQ_TYPE : local-field correction type (3D)
|
||||
! * EC_TYPE : type of correlation energy functional
|
||||
! * IQ_TYPE : type of approximation for I(q)
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * GAMMA_Q : plasmon damping in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 7) :: PL_DISP
|
||||
CHARACTER (LEN = 6) :: EC_TYPE
|
||||
CHARACTER (LEN = 4) :: PD_TYPE,GQ_TYPE
|
||||
CHARACTER (LEN = 3) :: SQ_TYPE,IQ_TYPE
|
||||
!
|
||||
REAL (WP) :: X,RS,T,TAU
|
||||
REAL (WP) :: GAMMA_Q
|
||||
!
|
||||
IF(PD_TYPE == 'NONE') THEN !
|
||||
GAMMA_Q = ZERO !
|
||||
ELSE IF(PD_TYPE == 'CALL') THEN !
|
||||
GAMMA_Q = CALL_PD_3D(X,RS,T) !
|
||||
ELSE IF(PD_TYPE == 'DGKA') THEN !
|
||||
GAMMA_Q = DGKA_PD_3D(X,RS,T) !
|
||||
ELSE IF(PD_TYPE == 'FEWA') THEN !
|
||||
GAMMA_Q = FEWA_PD_3D(X,RS) !
|
||||
ELSE IF(PD_TYPE == 'JEWS') THEN !
|
||||
GAMMA_Q = JEWS_PD_3D(X,RS) !
|
||||
ELSE IF(PD_TYPE == 'LITI') THEN !
|
||||
GAMMA_Q = LITI_PD_3D(X,TAU) !
|
||||
ELSE IF(PD_TYPE == 'MOPE') THEN !
|
||||
GAMMA_Q = MOPE_PD_3D(X,RS,T) !
|
||||
ELSE IF(PD_TYPE == 'NPSA') THEN !
|
||||
GAMMA_Q = NPSA_PD_3D(X,RS,T) !
|
||||
ELSE IF(PD_TYPE == 'SGAA') THEN !
|
||||
GAMMA_Q = SGAA_PD_3D(X,RS,T,PL_DISP,SQ_TYPE,GQ_TYPE, & !
|
||||
EC_TYPE,IQ_TYPE) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE PLAS_DAMP_EG_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION CALL_PD_3D(X,RS,T)
|
||||
!
|
||||
! This function computes the plasmon damping gamma_q in the
|
||||
! Callen approximation for the Landau damping
|
||||
! in a Maxwellian 3D plasma
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * CALL_PD_3D : plasmon damping (dimensionless)
|
||||
!
|
||||
! References: (1) J. D. Callen, Physics of Plasmas 21, 052106 (2014)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : EIGHT,HALF
|
||||
USE CONSTANTS_P1, ONLY : H_BAR
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : SQR_PI
|
||||
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,RS,T,Y,U,U2,U3
|
||||
REAL (WP) :: CALL_PD_3D
|
||||
REAL (WP) :: KD_SI
|
||||
REAL (WP) :: NUM,DEN
|
||||
!
|
||||
REAL (WP) :: SQRT,EXP
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
!
|
||||
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||||
!
|
||||
U = KD_SI / (Y * KF_SI) ! q /k_D
|
||||
U2 = U * U !
|
||||
U3 = U2 * U !
|
||||
!
|
||||
NUM = ENE_P_SI * U3 * SQR_PI !
|
||||
DEN = H_BAR * SQRT(EIGHT) !
|
||||
!
|
||||
CALL_PD_3D = NUM* EXP(- HALF * U2 - 1.5E0_WP) / DEN ! ref. (1) eq. (9)
|
||||
!
|
||||
END FUNCTION CALL_PD_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION DGKA_PD_3D(X,RS,T)
|
||||
!
|
||||
! This function computes the plasmon Landau damping gamma_q in the
|
||||
! DuBois-Gilinsky-Kivelson approximation
|
||||
!
|
||||
! References:
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * DGKA_PD_3D : plasmon damping
|
||||
!
|
||||
! References: (1) D. F. DuBois, V. Gilinsky and M. G. Kivelson,
|
||||
! Phys. Rev. Lett. 8, 419 (1962)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,FOUR
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E,K_B
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI3
|
||||
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||||
USE EULER_CONST, ONLY : EUMAS
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,RS,T
|
||||
REAL (WP) :: DGKA_PD_3D
|
||||
REAL (WP) :: Y,Q_SI,KT_SI,XX,YY
|
||||
REAL (WP) :: N0,KD_SI
|
||||
REAL (WP) :: NUM,DEN
|
||||
!
|
||||
REAL (WP) :: SQRT,LOG,EXP
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
!
|
||||
Q_SI = Y * KF_SI ! q in SI
|
||||
!
|
||||
N0 = RS_TO_N0('3D',RS) !
|
||||
!
|
||||
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||||
!
|
||||
KT_SI = SQRT(M_E * K_B*T / (H_BAR * H_BAR)) ! De Broglie thermal wave vector
|
||||
XX = Q_SI / KD_SI !
|
||||
YY = KT_SI / KD_SI !
|
||||
!
|
||||
NUM = TWO * XX * XX * KD_SI * KD_SI * KD_SI !
|
||||
DEN = 15.0E0_WP * SQRT(PI3) * N0 !
|
||||
!
|
||||
DGKA_PD_3D = ENE_P_SI * NUM * LOG( FOUR * YY *EXP(- EUMAS) )& !
|
||||
/ DEN ! ref. (1) eq. (2)
|
||||
!
|
||||
END FUNCTION DGKA_PD_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION FEWA_PD_3D(X,RS)
|
||||
!
|
||||
! This function computes the plasmon damping gamma_q in the
|
||||
! Fetter and Walecka approximation
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * FEWA_PD_3D : plasmon damping (dimensionless)
|
||||
!
|
||||
! References: (1) A. L. Fetter and J. D. Walecka,
|
||||
! "Quantum Theory of Many-Particle Systems",
|
||||
! McGraw-Hill, ex. 9.12 p. 324
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
USE PI_ETC, ONLY : PI3
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,RS,Y
|
||||
REAL (WP) :: FEWA_PD_3D
|
||||
REAL (WP) :: ALPHA
|
||||
!
|
||||
REAL (WP) :: SQRT
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
ALPHA = ALFA('3D') !
|
||||
!
|
||||
FEWA_PD_3D = EF_SI * SQRT(ALPHA * RS * PI3) * & !
|
||||
(Y-ONE) * (Y-ONE) ! ref. (1) ex. (9.12)
|
||||
!
|
||||
END FUNCTION FEWA_PD_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION JEWS_PD_3D(X,RS)
|
||||
!
|
||||
! This function computes the plasmon damping gamma_q in the
|
||||
! Jewsbury approximation
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * JEWS_PD_3D : plasmon damping (dimensionless)
|
||||
!
|
||||
! References: (1) P. Jewsbury, Aust. J. Phys. 32, 361-368 (1979)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : HALF
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,RS,Y
|
||||
REAL (WP) :: JEWS_PD_3D
|
||||
REAL (WP) :: G0,G1
|
||||
!
|
||||
REAL (WP) :: SQRT
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
!
|
||||
G0 = 0.033E0_WP * RS ! ref. (1) eq. (25b)
|
||||
G1 = 0.15E0_WP * SQRT(RS) ! ref. (1) eq. (25a)
|
||||
!
|
||||
JEWS_PD_3D = HALF * (G0 + G1 * Y * Y) ! ref. (1) eq. (24)
|
||||
!
|
||||
END FUNCTION JEWS_PD_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION LITI_PD_3D(X,TAU)
|
||||
!
|
||||
! This function computes the plasmon damping gamma_q in the
|
||||
! Giuliani-Quinn approximation
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * TAU : relaxation time (used for damping) in SI
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * LITI_PD_3D : plasmon damping (dimensionless)
|
||||
!
|
||||
! References: (1) G. F. Giuliani and J. J. Quinn, Phys. Rev. B 29,
|
||||
! 2321 (1984)
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,TAU,Y
|
||||
REAL (WP) :: LITI_PD_3D
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
!
|
||||
LITI_PD_3D = (ONE + Y) / (TWO + Y) * ONE / TAU ! ref. (1) eq. (2)
|
||||
!
|
||||
END FUNCTION LITI_PD_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION MOPE_PD_3D(X,RS,T)
|
||||
!
|
||||
! This function computes the plasmon damping gamma_q in the
|
||||
! Molinari-Peerani approximation for the Landau damping
|
||||
! in a Maxwellian 3D plasma
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * MOPE_PD_3D : plasmon damping (dimensionless)
|
||||
!
|
||||
! References: (1) V. G. Molinari and P. Peerani,
|
||||
! Il Nuovo Cimento D 5, 527 (1985)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : HALF
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E,K_B
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : SQR_PI
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,RS,T,Y,U,U2,U3
|
||||
REAL (WP) :: MOPE_PD_3D
|
||||
REAL (WP) :: Q_SI,BETA
|
||||
REAL (WP) :: NUM,DEN
|
||||
!
|
||||
REAL (WP) :: SQRT,EXP
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
!
|
||||
Q_SI = Y *KF_SI ! q in SI
|
||||
!
|
||||
BETA = HALF *M_E / (K_B * T) ! ref. (1), after eq. (10)
|
||||
!
|
||||
U = ENE_P_SI / (H_BAR * Q_SI) ! omega_p / q
|
||||
U2 = U * U !
|
||||
U3 = U2 * U !
|
||||
!
|
||||
NUM = SQR_PI * SQRT(BETA * BETA * BETA) * ENE_P_SI * U3 !
|
||||
DEN = H_BAR !
|
||||
!
|
||||
MOPE_PD_3D = NUM * EXP(- BETA * U2 - 1.5E0_WP) / DEN ! ref. (1) between (24) and (25)
|
||||
!
|
||||
END FUNCTION MOPE_PD_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION NPSA_PD_3D(X,RS,T)
|
||||
!
|
||||
! This function computes the plasmon damping gamma_q in the
|
||||
! Ninham-Powel-Swanson approximation
|
||||
!
|
||||
! References:
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * NPSA_PD_3D : plasmon damping
|
||||
!
|
||||
! References: (1) B. W. Ninham, C. J. Powell and N. Swanson,
|
||||
! Phys. Rev. 145, 209 (1966)
|
||||
! H. T. Nguyen-Truong, J. Phys. Chem. C 119,
|
||||
! 7883-7887 (2015)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,THREE,FOUR,FIVE
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,RS,T,Q_C,Y
|
||||
REAL (WP) :: NPSA_PD_3D
|
||||
REAL (WP) :: GAMMA_Q,Y2,Y4,OM0
|
||||
REAL (WP) :: ALPHA
|
||||
!
|
||||
REAL (WP) :: SQRT,LOG
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
!
|
||||
! plasmon cut-off in q
|
||||
!
|
||||
ALPHA = ALFA('3D') !
|
||||
Q_C = ALPHA * SQRT(THREE / RS) ! ref. (1b) eq. (14)
|
||||
!
|
||||
OM0 = ALPHA * ALPHA * SQRT(THREE * RS) ! ref. (1b) eq. (14)
|
||||
!
|
||||
IF(Y <= Q_C) THEN !
|
||||
Y2 = Y * Y !
|
||||
Y4 = Y2 * Y2 !
|
||||
GAMMA_Q = PI * OM0 * OM0 * OM0 * (FIVE * LOG(TWO) + ONE) *& !
|
||||
Y2 / 30.0E0_WP + & !
|
||||
PI * OM0 * ( 30.0E0_WP *LOG(TWO) + & !
|
||||
37.0E0_WP / FOUR - & ! ref. (1b) eq. (14)
|
||||
13.0E0_WP * OM0 * OM0 / & !
|
||||
16.0E0_WP & !
|
||||
) * Y4 ! dimensionless
|
||||
!
|
||||
NPSA_PD_3D = GAMMA_Q * EF_SI ! in SI
|
||||
ELSE !
|
||||
NPSA_PD_3D = ZERO !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION NPSA_PD_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION SGAA_PD_3D(X,RS,T,PL_DISP,SQ_TYPE,GQ_TYPE,EC_TYPE, &
|
||||
IQ_TYPE)
|
||||
!
|
||||
! This function computes the plasmon damping gamma_q in the
|
||||
! Segui-Gervasoni-Arista approximation
|
||||
!
|
||||
! References: (1) S. Segui, J. L. Gervasoni and N. R. Arista, Nucl. Instr.
|
||||
! Meth. Phys. Res. B 408, 217-222 (2017)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
! * PL_DISP : method used to compute the dispersion (3D)
|
||||
! * SQ_TYPE : structure factor approximation (3D)
|
||||
! * GQ_TYPE : local-field correction type (3D)
|
||||
! * EC_TYPE : type of correlation energy functional
|
||||
! * IQ_TYPE : type of approximation for I(q)
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * SGAA_PD_3D : plasmon damping
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : HALF
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E,E
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PLASMON_DISP_REAL
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 7) :: PL_DISP
|
||||
CHARACTER (LEN = 6) :: EC_TYPE
|
||||
CHARACTER (LEN = 4) :: PD_TYPE,GQ_TYPE
|
||||
CHARACTER (LEN = 3) :: SQ_TYPE,IQ_TYPE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,RS,T
|
||||
REAL (WP) :: SGAA_PD_3D
|
||||
REAL (WP) :: Y,Q_SI
|
||||
REAL (WP) :: RQ_SI,ENE_P_Q,OM_Q,OM_QQ,K1_SI
|
||||
REAL (WP) :: NUM,DEN
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
!
|
||||
Q_SI = Y * KF_SI !
|
||||
!
|
||||
! Computing the plasmon dispersion
|
||||
!
|
||||
CALL PLASMON_DISP_3D(X,RS,T,PL_DISP,ENE_P_Q) !
|
||||
OM_Q = ENE_P_Q / H_BAR ! omega_q
|
||||
!
|
||||
OM_QQ = HALF * H_BAR * Q_SI * Q_SI / M_E !
|
||||
!
|
||||
K1_SI = M_E * (OM_Q - OM_QQ) / (H_BAR * Q_SI) !
|
||||
!
|
||||
NUM = M_E * E * E * ENE_P_SI * ENE_P_SI * & !
|
||||
(KF_SI * KF_SI - K1_SI * K1_SI) ! ref. (1) eq. (17)
|
||||
DEN = H_BAR * H_BAR * H_BAR * H_BAR * & !
|
||||
Q_SI * Q_SI * Q_SI * OM_Q !
|
||||
!
|
||||
SGAA_PD_3D = NUM / DEN ! in SI
|
||||
!
|
||||
END FUNCTION SGAA_PD_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE EXACT_DAMPING(IX,IDERIV,N_E,EN,EPSR,EPSI,EN_Q,GAMMA_Q)
|
||||
!
|
||||
! This subroutine computes the plasmon damping gamma_q according to
|
||||
!
|
||||
! Im[ epsilon ] |
|
||||
! gamma_q = - _______________ |
|
||||
! |
|
||||
! d Re[ epsilon ]/d omega | omega=Omega_q
|
||||
!
|
||||
! where epsilon is the dielectric function.
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * IX : index of q-point
|
||||
! * IDERIV : type of n_point formula used for derivation (n = IDERIV)
|
||||
! * N_E : number of energy points
|
||||
! * EN : energy grid in units of E_F
|
||||
! * EPSR : real part of the dielectric function at q
|
||||
! * EPSI : imaginary part of the dielectric function at q
|
||||
! * EN_Q : plasmon energy at q in units of E_F
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * GAMMA_Q : plasmon damping coefficient in units of E_F
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 22 Oct 2020
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
USE REAL_NUMBERS, ONLY : ONE
|
||||
USE DERIVATION
|
||||
USE INTERPOLATION, ONLY : INTERP_NR,SPLINE,SPLINT
|
||||
USE OUTFILES, ONLY : FN
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER, INTENT(IN) :: IX,IDERIV,N_E
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: EN(NSIZE)
|
||||
REAL (WP), INTENT(IN) :: EPSR(NSIZE),EPSI(NSIZE)
|
||||
REAL (WP), INTENT(IN) :: EN_Q
|
||||
!
|
||||
REAL (WP), INTENT(OUT):: GAMMA_Q
|
||||
!
|
||||
REAL (WP) :: H
|
||||
REAL (WP) :: DEPSR(NSIZE)
|
||||
REAL (WP) :: DEPSR_Q,EPSI_Q
|
||||
!
|
||||
H = EN(2) - EN(1) ! step for energy derivation
|
||||
!
|
||||
! Derivation of EPSR(N) using a n-point formula --> result in DEPSR(N)
|
||||
!
|
||||
CALL DERIV_1(EPSR,N_E,IDERIV,H,DEPSR) !
|
||||
!
|
||||
! Cubic spline interpolation of DEPSR(N) and EPSI(N) at E = EN_Q_
|
||||
!
|
||||
CALL INTERP_NR(6,EN,DEPSR,N_E,EN_Q,DEPSR_Q) !
|
||||
CALL INTERP_NR(6,EN,EPSI,N_E,EN_Q,EPSI_Q) !
|
||||
!
|
||||
GAMMA_Q = - EPSI_Q / DEPSR_Q ! units of E_F
|
||||
!
|
||||
END SUBROUTINE EXACT_DAMPING
|
||||
!
|
||||
END MODULE PLASMON_DAMPING
|
|
@ -0,0 +1,18 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE RELAXATION_TIME_DYNAMIC
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION TAIC_RT_D_3D()
|
||||
!
|
||||
!
|
||||
END FUNCTION TAIC_RT_D_3D
|
||||
!
|
||||
END MODULE RELAXATION_TIME_DYNAMIC
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,160 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE SCATTERING_LENGTH
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION SCAT_LENGTH_3D(V0,R0,KP,KD,SL_TYPE)
|
||||
!
|
||||
! This function computes the s-wave scattering length for various
|
||||
! types of 3D potentials. It can be considered as the effective radius
|
||||
! of the potential at zero energy. It is defined as:
|
||||
!
|
||||
! a = lim_{k --> 0} - tan(delta_0)/k
|
||||
!
|
||||
! where delta_0 is the s-wave phaseshift (l = 0)
|
||||
!
|
||||
! Note: the negative scattering length of a repulsive potential
|
||||
! is always positive. For an attractive potential, it is
|
||||
! negative if there is no s-bound-state and positive otherwise.
|
||||
!
|
||||
!
|
||||
! References: (1) C. J. Joachain, "Quantum Collision Theory",
|
||||
! North-Holland (1975)
|
||||
! (2) F. Calogero, "Variable Phase Approach to
|
||||
! Potential Scattering" Academic Press (1967)
|
||||
! (3) X. Chu, C. Garcia-Cely and H. Murayama,
|
||||
! arXiv:1908.06067v2 [hep-ph] 6 Sep 2019
|
||||
! (4) S. Postnikov and M. Prakash, Int. J. Modern Phys. E 22,
|
||||
! 1330023 (2013)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * V0 : strength/depth of potential in SI (assumed to be an energy)
|
||||
! * R0 : radius/half-length of potential in SI
|
||||
! * KP : particle momentum in SI
|
||||
! * KD : damping momentum in SI
|
||||
! * SL_TYPE : type of scattering length calculation
|
||||
! SL_TYPE = 'HSP' --> hard sphere potential
|
||||
! SL_TYPE = 'ASW' --> attractive square well (without bound state)
|
||||
! SL_TYPE = 'RSW' --> repulsive square well
|
||||
! SL_TYPE = 'DSP' --> delta-shell potential
|
||||
! SL_TYPE = 'AYP' --> attractive Yukawa potential
|
||||
! SL_TYPE = 'CCO' --> Coulomb cut-off potential
|
||||
! SL_TYPE = 'HUL' --> Hulthén potential
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * SCAT_LENGTH_3D
|
||||
!
|
||||
!
|
||||
! Definition of potentials:
|
||||
!
|
||||
! / + inf if r < R0
|
||||
! SL_TYPE = 'HSP' : V(r) = < hard sphere
|
||||
! \ 0 if r > R0
|
||||
!
|
||||
!
|
||||
! / -|V0| if 0 < r < 2R0
|
||||
! SL_TYPE = 'ASW' : V(r) = < (spherical) attractive square well
|
||||
! \ 0 otherwise (no bound state) = soft sphere
|
||||
!
|
||||
!
|
||||
! / +|V0| if 0 < r < 2R0
|
||||
! SL_TYPE = 'RSW' : V(r) = < (spherical) repulsive square well
|
||||
! \ 0 otherwise = soft sphere
|
||||
!
|
||||
!
|
||||
!
|
||||
! SL_TYPE = 'DSP' : V(r) = V0 delta(r-R0) delta-shell
|
||||
!
|
||||
!
|
||||
!
|
||||
! -exp(- KD*r)
|
||||
! SL_TYPE = 'AYP' : V(r) = V0 ------------- attractive Yukawa
|
||||
! r
|
||||
!
|
||||
!
|
||||
! V0 1
|
||||
! SL_TYPE = 'CCO' : V(r) = ---- --- Theta(R0-r) Coulomb cut-off
|
||||
! R0 r (computed with R0=1)
|
||||
!
|
||||
!
|
||||
! exp(-KD*R)
|
||||
! SL_TYPE = 'Hul' : V(r) = V0 KD ------------------ Hulthén
|
||||
! ( 1-exp(-KD*R) )
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E
|
||||
USE EULER_CONST, ONLY : EUMAS
|
||||
USE EXT_FUNCTIONS, ONLY : DBESJ0,DBESJ1,DPSIPG
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: SL_TYPE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: V0,R0,KP,KD
|
||||
REAL (WP) :: SCAT_LENGTH_3D
|
||||
REAL (WP) :: U0,KE,R,K0,G
|
||||
REAL (WP) :: J0,J1,J2,XX
|
||||
REAL (WP) :: PG1,PG2,ETA
|
||||
|
||||
!
|
||||
REAL (WP) :: SQRT,ABS,TAN,TANH
|
||||
!
|
||||
! Potential strength in reduced units --> = square momentum KO^2
|
||||
!
|
||||
U0 = TWO * M_E * V0/ (H_BAR * H_BAR) !
|
||||
K0 = SQRT(ABS(U0)) !
|
||||
G = ABS(U0 * R0) !
|
||||
!
|
||||
! Effective momentum from energy conservation
|
||||
! ! U0 > 0 for repulsive
|
||||
KE = SQRT(ABS(KP * KP -U0)) ! U0 < 0 for attractive
|
||||
!
|
||||
R = R0 + R0 ! potential length for SW
|
||||
!
|
||||
IF(SL_TYPE == 'HSP') THEN !
|
||||
SCAT_LENGTH_3D = R0 !
|
||||
ELSE IF(SL_TYPE == 'ASW') THEN ! negative
|
||||
SCAT_LENGTH_3D = R * (ONE - TAN(KE * R)/(KE * R)) ! ref. 1 eq. (4.157)
|
||||
ELSE IF(SL_TYPE == 'RSW') THEN !
|
||||
SCAT_LENGTH_3D = R * (TANH(KE * R)/( KE * R) - ONE) ! positive
|
||||
ELSE IF(SL_TYPE == 'AYP') THEN !
|
||||
SCAT_LENGTH_3D = U0 / (KD * KD * KD) !
|
||||
ELSE IF(SL_TYPE == 'DSP') THEN !
|
||||
SCAT_LENGTH_3D = R0 * G / (G - ONE) ! ref. 4 eq. (56)
|
||||
ELSE IF(SL_TYPE == 'CCO') THEN !
|
||||
XX = TWO * DSQRT(- U0) !
|
||||
J0 = DBESJ0(XX) !
|
||||
J1 = DBESJ1(XX) !
|
||||
J2 = - J0 + TWO * J1 / XX ! recurrence
|
||||
!
|
||||
SCAT_LENGTH_3D = - J2 / (U0 * J0) ! ref. 2 eq. (5a)
|
||||
ELSE IF(SL_TYPE == 'HUL') THEN !
|
||||
ETA = SQRT(U0 * M_E / KD) !
|
||||
PG1 = DPSIPG(ONE+ETA,0) !
|
||||
PG2 = DPSIPG(ONE-ETA,0) !
|
||||
!
|
||||
SCAT_LENGTH_3D = (PG1 + PG2 + EUMAS + EUMAS) / KD ! ref. 3 eq. (A21)
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION SCAT_LENGTH_3D
|
||||
!
|
||||
END MODULE SCATTERING_LENGTH
|
|
@ -0,0 +1,937 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE VISCOSITY
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE VISCOSITY_COEF(X,ETA)
|
||||
!
|
||||
! This subroutine computes the shear viscosity
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 23 Oct 2020
|
||||
!
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : DMN,RS
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
USE PLASMA, ONLY : ZION
|
||||
!
|
||||
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||||
USE DAMPING_VALUES, ONLY : VI_TYPE
|
||||
!
|
||||
USE EL_PHO_INTER, ONLY : NA,MA,RA,DEBYE_T,EP_C
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X
|
||||
REAL (WP), INTENT(OUT) :: ETA
|
||||
REAL (WP) :: LR,S_L
|
||||
REAL (WP) :: KD_SI
|
||||
!
|
||||
LR = ZERO ! residual mfp (temporary)
|
||||
S_L = ZERO ! scattering length (temporary)
|
||||
!
|
||||
! Computing the Debye momentum
|
||||
!
|
||||
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
CALL VISCOSITY_3D(RS,T,ZION,KD_SI,X,ZERO,NA,MA,RA, & !
|
||||
DEBYE_T,EP_C,LR,VI_TYPE,ETA) !
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
CALL VISCOSITY_2D(T,S_L,VI_TYPE,ETA) !
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
ETA = ZERO ! not yet implemented
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE VISCOSITY_COEF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE VISCOSITY_3D(RS,T,ZION,K_SC,X,Z,NA,MA,RA,TH,CA,LR, &
|
||||
VI_TYPE,ETA)
|
||||
!
|
||||
! This subroutine computes the shear viscosity for 3D electron gas
|
||||
! at a given value of the temperature T
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
! * ZION : atomic number of the ions of the plasma
|
||||
! * K_SC : screening vector in SI
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : omega / omega_q --> dimensionless
|
||||
! * NA : number of atoms per unit volume
|
||||
! * MA : mass of lattice atoms
|
||||
! * RA : radius of atoms
|
||||
! * TH : Debye temperature of the material in SI
|
||||
! * CA : electron-phonon coupling
|
||||
! * LR : residual mean free path
|
||||
! * VI_TYPE : viscosity in 3D
|
||||
! VI_TYPE = 'AMPP' Angilella et al hard-sphere fluid --> T-dependent
|
||||
! VI_TYPE = 'DRBA' Daligault-Rasmussen-Baalrud (plasmas) --> T-dependent
|
||||
! VI_TYPE = 'KHRA' Khrapak for Yukawa fluid --> T-dependent
|
||||
! VI_TYPE = 'LHPO' Longuet-Higgins-Pope --> T-dependent
|
||||
! VI_TYPE = 'LLPA' Landau-Lifshitz-Pitaevskii--> T-dependent
|
||||
! VI_TYPE = 'SCHA' Schäfer --> T-dependent
|
||||
! VI_TYPE = 'SCHD' Schäfer (dynamic) --> T-dependent
|
||||
! VI_TYPE = 'SHTE' Shternin --> T-dependent
|
||||
! VI_TYPE = 'STEI' Steinberg low-temperature --> T-dependent
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * ETA : shear viscosity in SI
|
||||
!
|
||||
!
|
||||
! Internal parameters:
|
||||
!
|
||||
! * I_F : switch for choice of formula
|
||||
! I_F = 1 --> eq. (31) ref. 1
|
||||
! I_F = 2 --> eq. (32) ref. 1 Landau-Spitzer formula
|
||||
! I_F = 3 --> eq. (34) ref. 1
|
||||
! I_F = 4 --> after eq. (34) ref. 1 Bastea formula
|
||||
! I_F = 5 --> eq. (38) ref. 1 Braun formula
|
||||
! I_F = 6 --> eq. (36)-(40) ref. 1 Tanaka-Ichimaru formula
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: VI_TYPE
|
||||
!
|
||||
REAL (WP) :: RS,T,ZION,K_SC,X,Z,NA,MA,RA,TH,CA,LR
|
||||
REAL (WP) :: ETA
|
||||
!
|
||||
INTEGER :: I_F
|
||||
!
|
||||
IF(VI_TYPE == 'AMPP') THEN !
|
||||
ETA=AMPP_VISC_3D(RS,T) !
|
||||
ELSE IF(VI_TYPE == 'DRBA') THEN !
|
||||
ETA=DRBA_VISC_3D(RS,T,ZION,I_F) !
|
||||
ELSE IF(VI_TYPE == 'KHRA') THEN !
|
||||
ETA=KHRA_VISC_3D(RS,T,ZION,K_SC,I_F) !
|
||||
ELSE IF(VI_TYPE == 'LHPO') THEN !
|
||||
ETA=LHPO_VISC_3D(RS,T) !
|
||||
ELSE IF(VI_TYPE == 'SCHA') THEN !
|
||||
ETA=SCHA_VISC_3D(T) !
|
||||
ELSE IF(VI_TYPE == 'SCHD') THEN !
|
||||
ETA=SCHA_VISC_3D_D(X,Z,T) !
|
||||
ELSE IF(VI_TYPE == 'SHTE') THEN !
|
||||
ETA=SHTE_VISC_3D(RS,T) !
|
||||
ELSE IF(VI_TYPE == 'STEI') THEN !
|
||||
ETA=STEI_VISC_LT_3D(RS,T,NA,MA,RA,TH,CA,LR) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE VISCOSITY_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION AMPP_VISC_3D(RS,T)
|
||||
!
|
||||
! This function computes the Angilella shear viscosity
|
||||
! for 3D hard-sphere fluid at a given value of the temperature T
|
||||
!
|
||||
! References: (1) G. G. N. Angilella et al, Phys. Lett. A, 992-998 (2009)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * AMPP_VISC_3D
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FIVE,HALF,THIRD
|
||||
USE CONSTANTS_P1, ONLY : BOHR,M_E,K_B
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: T,RS
|
||||
REAL (WP) :: AMPP_VISC_3D
|
||||
REAL (WP) :: N0
|
||||
REAL (WP) :: SI,PF,D0,D,X,X4,NUM,DEN
|
||||
!
|
||||
REAL (WP) :: DSQRT
|
||||
!
|
||||
! Computing the electron density
|
||||
!
|
||||
N0=RS_TO_N0('3D',RS) !
|
||||
!
|
||||
! Hard-sphere diameter
|
||||
!
|
||||
SI=TWO*RS*BOHR ! sigma
|
||||
!
|
||||
! Computing the packing fraction PF
|
||||
!
|
||||
PF=HALF*THIRD*PI*N0 * SI**3 !
|
||||
!
|
||||
D0=(THREE*0.125E0_WP*SI/N0) * DSQRT(K_B*T/(PI*M_E)) ! ref. 1 eq. (9)
|
||||
!
|
||||
! Speedy diffusion coefficient
|
||||
!
|
||||
X=N0*SI*SI*SI !
|
||||
X4=X*X*X*X ! x^4
|
||||
D=D0*(ONE - X/1.09E0_WP) * (ONE + X4*(0.4E0_WP-0.83E0_WP*X4)) ! ref. 1 eq. (8)
|
||||
!
|
||||
NUM=D0*THREE*PF*K_B*T !
|
||||
DEN=D*FIVE*PI*SI*D0 !
|
||||
AMPP_VISC_3D=NUM/DEN ! ref. 1 eq. (A5)
|
||||
!
|
||||
END FUNCTION AMPP_VISC_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION DRBA_VISC_3D(RS,T,ZION,I_F)
|
||||
!
|
||||
! This function computes the Daligault-Rasmussen_Baalrud shear viscosity
|
||||
! for 3D plasmas at a given value of the temperature T
|
||||
!
|
||||
! References: (1) J. Daligault, K. O. Rasmussen and S. D. Baalrud,
|
||||
! Phys. Rev. E 90, 033105 (2014)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
! * ZION : atomic number of the ions of the plasma
|
||||
! * I_F : switch for choice of formula
|
||||
! I_F = 1 --> eq. (31) ref. 1
|
||||
! I_F = 2 --> eq. (32) ref. 1 Landau-Spitzer formula
|
||||
! I_F = 3 --> eq. (34) ref. 1
|
||||
! I_F = 4 --> after eq. (34) ref. 1 Bastea formula
|
||||
! I_F = 5 --> eq. (38) ref. 1 Braun formula
|
||||
! I_F = 6 --> eq. (36)-(40) ref. 1 Tanaka-Ichimaru formula
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * DRBA_VISC_3D
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,HALF
|
||||
USE COMPLEX_NUMBERS, ONLY : IC
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E,E,COULOMB,K_B
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
USE EXT_FUNCTIONS, ONLY : E1Z ! Exponential integral
|
||||
USE PLASMON_ENE_SI
|
||||
USE PLASMA_SCALE
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: T,RS,ZION
|
||||
REAL (WP) :: DRBA_VISC_3D
|
||||
REAL (WP) :: N0
|
||||
REAL (WP) :: NONID,DEGEN
|
||||
REAL (WP) :: KD_SI,ETA_0,DELTA,C,LD,RL,Q2
|
||||
REAL (WP) :: G1,G2,G3,G4,OP
|
||||
REAL (WP) :: A,B,A1,A2,A3,B1,B2,B3,B4,K
|
||||
REAL (WP) :: TTI,GG
|
||||
REAL (WP) :: NUM,DEN
|
||||
!
|
||||
REAL (WP) :: DLOG,DSQRT,DREAL
|
||||
!
|
||||
INTEGER :: I_F
|
||||
!
|
||||
COMPLEX (WP) :: CE1,CE2
|
||||
!
|
||||
! Computing the electron density and plasmon properties
|
||||
!
|
||||
IF( (I_F == 3) .OR. (I_F == 4) ) THEN !
|
||||
CALL PLASMON_SCALE(RS,T,ZION,NONID,DEGEN) !
|
||||
N0=RS_TO_N0('3D',RS) !
|
||||
G1=DEGEN ! Gamma
|
||||
G2=G1*G1 !
|
||||
G3=G2*G1 ! powers of Gamma
|
||||
G4=G3*G1 !
|
||||
OP=ENE_P_SI/H_BAR ! omega_p
|
||||
A=0.794811E0_WP !
|
||||
B=0.862151E0_WP !
|
||||
A1=0.0425698E0_WP !
|
||||
A2=0.00205782E0_WP !
|
||||
A3=7.03658E-5_WP ! ref. 1 table IV
|
||||
B1=0.0429942E0_WP !
|
||||
B2=-0.000270798E0_WP !
|
||||
B3=3.25441E-6_WP !
|
||||
B4=-1.15019E-8_WP !
|
||||
K=G1**2.5E0_WP * DLOG(ONE + B / G1**1.5E0_WP) !
|
||||
END IF !
|
||||
!
|
||||
! Computing the Debye vector
|
||||
!
|
||||
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||||
!
|
||||
LD=ONE/KD_SI ! Debye length
|
||||
DELTA=0.466E0_WP !
|
||||
C=1.493E0_WP !
|
||||
Q2=E*E*COULOMB !
|
||||
RL=Q2/(K_B*T) !
|
||||
ETA_0=1.25E0_WP*DSQRT(M_E/PI)* (K_B*T)**2.5E0_WP / (Q2*Q2) !
|
||||
GG=LD/RL !
|
||||
!
|
||||
IF(I_F == 1) THEN !
|
||||
DRBA_VISC_3D=ETA_0*DELTA / DLOG(ONE + C*GG) ! ref. 1 eq. (31)
|
||||
ELSE IF(I_F == 2) THEN !
|
||||
DRBA_VISC_3D=ETA_0/DLOG(GG) ! ref. 1 eq. (32)
|
||||
ELSE IF(I_F == 3) THEN !
|
||||
NUM=A*(ONE+A1*G1+A2*G2+A3*G3) !
|
||||
DEN=K*(ONE+B1*G1+B2*G2+B3*G3+B4*G4) !
|
||||
DRBA_VISC_3D=M_E*N0*A*A*OP*NUM/DEN !
|
||||
ELSE IF(I_F == 4) THEN !
|
||||
DRBA_VISC_3D=M_E*N0*A*A*OP* ( & !
|
||||
0.482E0_WP/G2 + 0.629E0_WP/(G1**0.878E0_WP) & !
|
||||
) !
|
||||
ELSE IF(I_F == 6) THEN !
|
||||
DRBA_VISC_3D=ETA_0/DLOG(LD/RL) / & ! ref. 1 eq. (38)
|
||||
(ONE + 0.346E0_WP/DLOG(GG)) !
|
||||
ELSE IF(I_F == 5) THEN !
|
||||
CALL E1Z( IC/GG,CE1) !
|
||||
CALL E1Z(-IC/GG,CE2) !
|
||||
TTI=HALF*DREAL( CE1*CDEXP( IC/GG) + & ! ref. 1 eq. (40)
|
||||
CE2*CDEXP(-IC/GG) & !
|
||||
) !
|
||||
DRBA_VISC_3D=ETA_0/TTI !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION DRBA_VISC_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION KHRA_VISC_3D(RS,T,ZION,K_SC,I_F)
|
||||
!
|
||||
! This function computes the Khrapak shear viscosity
|
||||
! for 3D Yukawa fluid at a given value of the temperature T
|
||||
!
|
||||
! References: (1) S. Khrapak, AIP Advances 8, 105226 (2018)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
! * ZION : atomic number of the ions of the plasma
|
||||
! * K_SC : screening vector in SI
|
||||
! * I_F : switch for choice of formula
|
||||
! I_F = 1 --> eq. (7) ref. 1
|
||||
! I_F = 2 --> eq. (8) ref. 1
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * KHRA_VISC_3D
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,HALF,FOUR,THIRD,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : BOHR,M_E,K_B
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
USE PLASMA_SCALE
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,T,ZION,K_SC
|
||||
REAL (WP) :: KHRA_VISC_3D
|
||||
REAL (WP) :: AL,GA,GA_M,KA,X,ETA_R
|
||||
REAL (WP) :: NONID,DEGEN
|
||||
REAL (WP) :: BETA,V_TH,F1,F2
|
||||
!
|
||||
REAL (WP) :: DSQRT,DEXP
|
||||
!
|
||||
INTEGER :: I_F
|
||||
!
|
||||
AL=ALFA('3D') ! parameter alpha
|
||||
!
|
||||
! Computing the plasma degeneracy
|
||||
!
|
||||
CALL PLASMON_SCALE(RS,T,ZION,NONID,DEGEN) !
|
||||
!
|
||||
! Computing the thermal velocity
|
||||
!
|
||||
BETA=ONE/(K_B*T) !
|
||||
V_TH=DSQRT(M_E/BETA) ! thermal velocity
|
||||
!
|
||||
KA=K_SC*RS*BOHR ! parameter kappa
|
||||
!
|
||||
! Coupling parameters
|
||||
!
|
||||
GA=DEGEN ! ref. 1 notation
|
||||
GA_M=(172.0E0_WP*DEXP(AL*KA))/(ONE+AL*KA+HALF*AL*AL*KA*KA) ! ref. 1 eq. (2)
|
||||
X=GA/GA_M !
|
||||
!
|
||||
IF(I_F == 1) THEN !
|
||||
F1=0.104E0_WP / X**0.4E0_WP ! ref. 1 eq. (5)
|
||||
F2=0.126E0_WP * DEXP(3.64E0_WP*DSQRT(X)) ! ref. 1 eq. (6)
|
||||
ETA_R=(F1**FOUR + F2**FOUR)**FOURTH ! ref. 1 eq. (7)
|
||||
ELSE IF(I_F == 2) THEN !
|
||||
ETA_R=0.00022E0_WP / X**1.5E0_WP + & !
|
||||
0.096E0_WP / X**0.378E0_WP + & ! ref. 1 eq. (8)
|
||||
4.68E0_WP * X**1.5E0_WP !
|
||||
END IF !
|
||||
!
|
||||
KHRA_VISC_3D=ETA_R*M_E*V_TH*( AL*AL*RS*RS*BOHR*BOHR ) ! ref. 1 eq. (4)
|
||||
!
|
||||
END FUNCTION KHRA_VISC_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION LHPO_VISC_3D(RS,T)
|
||||
!
|
||||
! This function computes the Longuet-Higgins and Pope shear viscosity
|
||||
! for 3D hard-sphere fluid at a given value of the temperature T
|
||||
!
|
||||
! References: (1) G. G. N. Angilella et al, Phys. Lett. A, 992-998 (2009)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * LHPO_VISC_3D
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Dec 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,HALF,THIRD
|
||||
USE CONSTANTS_P1, ONLY : BOHR,M_E,K_B
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
USE PACKING_FRACTION
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS,T
|
||||
REAL (WP) :: LHPO_VISC_3D
|
||||
!
|
||||
REAL (WP) :: N0
|
||||
REAL (WP) :: COEF
|
||||
REAL (WP) :: PF,PF2,PF3,PR,SI
|
||||
!
|
||||
REAL (WP) :: SQRT
|
||||
!
|
||||
! Computing the electron density
|
||||
!
|
||||
N0 = RS_TO_N0('3D',RS) !
|
||||
!
|
||||
COEF = SQRT(M_E * K_B * T / PI) !
|
||||
!
|
||||
! Hard-sphere diameter
|
||||
!
|
||||
SI = TWO * RS * BOHR ! sigma
|
||||
!
|
||||
! Computing the packing fraction PF
|
||||
!
|
||||
PF = PACK_FRAC_2D(N0,SI,'HSM') !
|
||||
PF2 = PF * PF !
|
||||
PF3 = PF2 * PF !
|
||||
!
|
||||
PR = (ONE + PF + PF2 - PF3) / (ONE - PF)**3 - ONE ! ref. 1 eq. (2)
|
||||
!
|
||||
LHPO_VISC_3D = 0.40E0_WP * N0 * SI * COEF * PR ! ref. 1 eq. (1)
|
||||
!
|
||||
END FUNCTION LHPO_VISC_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION LLPA_VISC_3D(X,RS,T)
|
||||
!
|
||||
! This function computes the Landau-Lifschitz-Pitaevskii shear viscosity
|
||||
! for 3D hard-sphere fluid at a given value of the temperature T
|
||||
!
|
||||
! Reference: (1) J. Daligault, Phys. Rev. Lett. 119, 045002 (2017)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * LLPA_VISC_3D
|
||||
!
|
||||
!
|
||||
! Note: we find that the average over solid angles in note [13] ref. (1) is
|
||||
!
|
||||
! _ _
|
||||
! | 2 |
|
||||
! e^2 | 2 1 ( k_s ) | 1
|
||||
! / __ \ = ----------- | --- + --- ( ----- ) | -------
|
||||
! \ / epsilon_0 | 3 2 ( k_F ) | k_F^2
|
||||
! |_ _|
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 12 Oct 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,FOUR,FIVE,EIGHT, &
|
||||
HALF,THIRD,EIGHTH
|
||||
USE FERMI_SI, ONLY : EF_SI,KF_SI
|
||||
USE CONSTANTS_P1, ONLY : BOHR,H_BAR,M_E,K_B,EPS_0
|
||||
USE PI_ETC, ONLY : PI,PI3,PI_INV
|
||||
!
|
||||
USE PLASMON_SCALE_P, ONLY : NONID
|
||||
USE COULOMB_LOG, ONLY : DALI_CL_3D
|
||||
USE SCREENING_TYPE
|
||||
USE SCREENING_VEC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,T,RS
|
||||
REAL (WP) :: LLPA_VISC_3D
|
||||
REAL (WP) :: Y,Q,Q2,Q4
|
||||
REAL (WP) :: CL,KBT,KS,TH
|
||||
REAL (WP) :: NUM,DEN,BRA
|
||||
!
|
||||
REAL (WP) :: SQRT
|
||||
!
|
||||
TH = ONE / NONID ! Theta
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
!
|
||||
Q = Y * KF_SI ! q in SI
|
||||
Q2 = Q * Q ! q^2 in SI
|
||||
Q4 = Q2 * Q2 ! q^4 in SI
|
||||
!
|
||||
KBT = K_B * T !
|
||||
!
|
||||
! Computing the screening vector
|
||||
!
|
||||
IF(SC_TYPE == 'NO') THEN !
|
||||
CALL SCREENING_VECTOR('TF','3D',X,RS,T,KS) !
|
||||
ELSE !
|
||||
CALL SCREENING_VECTOR(SC_TYPE,'3D',X,RS,T,KS) ! in SI
|
||||
END IF !
|
||||
!
|
||||
! Computing the Coulomb logarithm
|
||||
!
|
||||
CL = DALI_CL_3D(X) !
|
||||
!
|
||||
IF(TH >= ONE) THEN !
|
||||
NUM = FIVE * EIGHTH * SQRT(PI * M_E) * KBT**2.5E0_WP ! \
|
||||
DEN = Q4 * CL ! > ref. (1) note [13]
|
||||
LLPA_VISC_3D = NUM / DEN ! /
|
||||
ELSE !
|
||||
NUM = 16.0E0_WP * EF_SI * BOHR * KF_SI ! \
|
||||
DEN = 45.0E0_WP * TH * TH * EIGHT * PI3 * Q4 ! \
|
||||
BRA = TWO * THIRD + HALF * (KS / KF_SI)**2 ! /
|
||||
LLPA_VISC_3D = NUM / (DEN + BRA) ! /
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION LLPA_VISC_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION SCHA_VISC_3D(T)
|
||||
!
|
||||
! This function computes the Schäfer shear viscosity for
|
||||
! 3D systems at a given value of the temperature T
|
||||
!
|
||||
! References: (1) T. Schäfer, Phys. Rev. A 85, 033623 (2012)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * SCHA_VISC_3D
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE CONSTANTS_P1, ONLY : M_E
|
||||
USE PI_ETC, ONLY : SQR_PI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: T
|
||||
REAL (WP) :: SCHA_VISC_3D
|
||||
!
|
||||
SCHA_VISC_3D=15.0E0_WP*(M_E*T)**1.5E0_WP / (32.0E0_WP*SQR_PI) ! ref. 1 eq. (14)
|
||||
!
|
||||
END FUNCTION SCHA_VISC_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION SCHA_VISC_3D_D(X,Z,T)
|
||||
!
|
||||
! This function computes the dynamic Schäfer shear viscosity for
|
||||
! 3D systems at a given value of the low temperature T
|
||||
!
|
||||
! References: (2) C. Chafin and T. Schäfer, Phys. Rev. A 87, 023629 (2013)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : omega / omega_q --> dimensionless
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * SCHA_VISC_3D
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : SEVEN,HALF
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE UTILITIES_1, ONLY : KF_TO_N0
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,Y,Y2,Z,V,T
|
||||
REAL (WP) :: SCHA_VISC_3D_D
|
||||
REAL (WP) :: OMEGA,ETA,D_ETA
|
||||
REAL (WP) :: N0
|
||||
REAL (WP) :: NUM,DEN
|
||||
!
|
||||
REAL (WP) :: DSQRT
|
||||
!
|
||||
Y=X+X ! Y = q / k_F
|
||||
Y2=Y*Y !
|
||||
V=Z*Y2 ! omega / omega_{k_F}
|
||||
OMEGA=V*HALF*H_BAR*KF_SI*KF_SI/M_E ! omega
|
||||
!
|
||||
! Computing the static Schäfer viscosity
|
||||
!
|
||||
ETA=SCHA_VISC_3D(T) !
|
||||
!
|
||||
! Computing the electron density
|
||||
!
|
||||
N0=KF_TO_N0('3D',KF_SI) !
|
||||
!
|
||||
D_ETA=ETA/N0 ! momentum diffusion constant
|
||||
NUM=SEVEN + (1.5E0_WP)**1.5E0_WP !
|
||||
DEN=240.0E0_WP*PI * D_ETA**1.5E0_WP !
|
||||
!
|
||||
SCHA_VISC_3D_D=ETA - DSQRT(OMEGA)*T * NUM/DEN ! ref. 1 eq. (33)
|
||||
!
|
||||
END FUNCTION SCHA_VISC_3D_D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION SHTE_VISC_3D(RS,T)
|
||||
!
|
||||
! This function computes the Shternin shear viscosity
|
||||
! for 3D electron gas at a given value of the temperature T
|
||||
!
|
||||
! References: (1) P. S. Shternin, J. Phys. A: Math. Theor. 41 205501 (2008)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * SHTE_VISC_3D
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,SIX,EIGHT,TEN,THIRD
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,K_B
|
||||
USE CONSTANTS_P2, ONLY : ALPHA
|
||||
USE CONSTANTS_P3, ONLY : C
|
||||
USE FERMI_SI, ONLY : KF_SI,VF_SI
|
||||
USE PI_ETC, ONLY : PI,PI3
|
||||
USE SQUARE_ROOTS, ONLY : SQR3
|
||||
USE UTILITIES_1, ONLY : KF_TO_N0
|
||||
USE SCREENING_VEC, ONLY : THOMAS_FERMI_VECTOR
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,T
|
||||
REAL (WP) :: SHTE_VISC_3D
|
||||
REAL (WP) :: N0
|
||||
REAL (WP) :: NUM,DEN
|
||||
REAL (WP) :: K_TF_SI
|
||||
REAL (WP) :: I_ETA,I_L,I_T,I_TL
|
||||
REAL (WP) :: TH,T_TPE,U,SCF
|
||||
REAL (WP) :: XI
|
||||
!
|
||||
REAL (WP) :: DLOG
|
||||
!
|
||||
INTEGER :: REGIME
|
||||
!
|
||||
SCF=1.0E-2_WP ! <<
|
||||
XI=1.813174518048293088675271480395889E0_WP ! xi ref. 1 eq. (15)
|
||||
!
|
||||
! Computing the electron density
|
||||
!
|
||||
N0=KF_TO_N0('3D',KF_SI) !
|
||||
!
|
||||
! Computing the Thomas-Fermi screening verctor
|
||||
!
|
||||
CALL THOMAS_FERMI_VECTOR('3D',K_TF_SI) !
|
||||
!
|
||||
! Computing TH, T_TPE and U
|
||||
!
|
||||
TH=H_BAR*VF_SI*K_TF_SI/(K_B*T) ! ref. 1 eq. (11)
|
||||
T_TPE=SQR3/TH ! T / T_pe (idem)
|
||||
U=VF_SI/C ! idem
|
||||
!
|
||||
! Checking the regime
|
||||
!
|
||||
IF(U < SCF) THEN !
|
||||
IF(T_TPE < SCF) THEN !
|
||||
REGIME=2 !
|
||||
ELSE !
|
||||
REGIME=1 !
|
||||
END IF ! ref. 1 table 1.
|
||||
ELSE !
|
||||
IF(T_TPE < SCF) THEN !
|
||||
REGIME=4 !
|
||||
ELSE !
|
||||
REGIME=3 !
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
! Calculation of the integral I_ETA
|
||||
!
|
||||
IF(REGIME == 1) THEN !
|
||||
I_L=TWO*THIRD*(DLOG(ONE/TH)+1.919E0_WP) !
|
||||
I_T=EIGHT*U*U*U*U*(DLOG(ONE/(U*TH))+3.413E0_WP)/35.0E0_WP ! ref. 1 eq. (13)
|
||||
I_TL=EIGHT*U*U*(DLOG(ONE/TH)+2.512E0_WP)/15.0E0_WP !
|
||||
ELSE IF(REGIME == 3) THEN !
|
||||
I_L=TWO*THIRD*(DLOG(ONE/TH)+1.919E0_WP) !
|
||||
I_T=THIRD*(DLOG(ONE/TH)+2.742E0_WP) ! ref. 1 eq. (14)
|
||||
I_TL=TWO*THIRD*(DLOG(ONE/TH)+2.052E0_WP) !
|
||||
ELSE !
|
||||
I_L=PI3 / (12.0E0_WP*TH) !
|
||||
I_T=XI * U**(TEN*THIRD) / (TH*TH)**THIRD ! ref. 1 eq. (15)
|
||||
I_TL=PI3 * U*U / (SIX*TH) !
|
||||
END IF !
|
||||
!
|
||||
I_ETA=I_L+I_T+I_TL ! ref. 1 eq. (12)
|
||||
!
|
||||
NUM=PI*H_BAR*H_BAR*N0*KF_SI*VF_SI*VF_SI*VF_SI !
|
||||
DEN=60.0E0_WP*ALPHA*ALPHA*C*C*K_B*T*I_ETA !
|
||||
!
|
||||
SHTE_VISC_3D=NUM/DEN ! ref. 1 eq. (9)
|
||||
!
|
||||
END FUNCTION SHTE_VISC_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION STEI_VISC_LT_3D(RS,T,NA,MA,RA,TH,CA,LR)
|
||||
!
|
||||
! This function computes Steinberg's low-temperature viscosity.
|
||||
!
|
||||
! In this model; the electron interacts with acoustic lattice vibrations
|
||||
!
|
||||
!
|
||||
! Reference: (1) M. S. Steinberg, Phys. Rev. 109, 1486 (1958)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature (in SI)
|
||||
! * NA : number of atoms per unit volume
|
||||
! * MA : mass of lattice atoms
|
||||
! * RA : radius of atoms
|
||||
! * TH : Debye temperature of the material in SI
|
||||
! * CA : electron-phonon coupling
|
||||
! * LR : residual mean free path
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * STEI_VISC_LT_3D : relaxation time in seconds
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,THREE,FOUR,FIVE,HALF,THIRD
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E,K_B
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
USE PI_ETC, ONLY : PI,PI2
|
||||
USE UTILITIES_1, ONLY : ALFA,RS_TO_N0
|
||||
USE SPECIFIC_INT_1, ONLY : STEI_INT
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: T,NA,MA,RA,TH,CA,RS
|
||||
REAL (WP) :: STEI_VISC_LT_3D
|
||||
REAL (WP) :: N0
|
||||
REAL (WP) :: H,AL,GA,D
|
||||
REAL (WP) :: NUM,DEN,NU1,DE1,DE2,A02,D00
|
||||
REAL (WP) :: X,J5,J7,X5,LR
|
||||
!
|
||||
REAL (WP) :: DSQRT
|
||||
!
|
||||
! Computation of the electron density
|
||||
!
|
||||
N0=RS_TO_N0('3D',RS) !
|
||||
!
|
||||
AL=ALFA('3D') !
|
||||
H=TWO*PI*H_BAR !
|
||||
GA=AL * (FOUR*MA*RA*K_B*TH) / (THREE*H*H*CA*CA) !
|
||||
D=EF_SI / ( TWO**THIRD * (N0/NA)**(TWO*THIRD) ) !
|
||||
!
|
||||
! Computation of the J_p(x) functions
|
||||
!
|
||||
X=TH/T !
|
||||
J5=STEI_INT(X,5) !
|
||||
J7=STEI_INT(X,7) !
|
||||
!
|
||||
X5=X*X*X*X*X !
|
||||
!
|
||||
NUM=FOUR*DSQRT(TWO*M_E* M_E*M_E) !
|
||||
DEN=15.0E0_WP*PI2* H_BAR*H_BAR*H_BAR !
|
||||
A02=EF_SI**FIVE !
|
||||
NU1=THREE*DSQRT(M_E+M_E)*D*EF_SI !
|
||||
DE1=H_BAR*H_BAR*GA*X5 !
|
||||
DE2=J5 - J7/(X*X* 16.0E0_WP**THIRD * (N0/NA)**(TWO*THIRD) ) !
|
||||
D00=NU1/(DE1*DE2) + & !
|
||||
TWO*EF_SI*EF_SI*EF_SI/(DSQRT(HALF*M_E)*LR) !
|
||||
!
|
||||
STEI_VISC_LT_3D=NUM*A02 / (DEN*D00) ! ref. 1 eq. (7.13)
|
||||
!
|
||||
END FUNCTION STEI_VISC_LT_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE VISCOSITY_2D(T,S_L,VI_TYPE,ETA)
|
||||
!
|
||||
! This subroutine computes the shear viscosity for 2D electron gas
|
||||
! at a given value of the temperature T
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * T : temperature (SI)
|
||||
! * S_L : scattering length (SI)
|
||||
! * VI_TYPE : viscosity in 2D
|
||||
! VI_TYPE = 'SCHA' Schäfer --> T-dependent
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * ETA : shear viscosity in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: VI_TYPE
|
||||
!
|
||||
REAL (WP) :: T,S_L
|
||||
REAL (WP) :: ETA
|
||||
!
|
||||
IF(VI_TYPE == 'SCHA') THEN !
|
||||
ETA=SCHA_VISC_2D(T,S_L) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE VISCOSITY_2D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION SCHA_VISC_2D(T,S_L)
|
||||
!
|
||||
! This function computes the Schäfer shear viscosity for
|
||||
! 2D systems at a given value of the temperature T
|
||||
!
|
||||
! References: (1) T. Schäfer, Phys. Rev. A 85, 033623 (2012)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * T : temperature (SI)
|
||||
! * S_L : scattering length (SI)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * SCHA_VISC_2D
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO
|
||||
USE CONSTANTS_P1, ONLY : M_E
|
||||
USE PI_ETC, ONLY : PI2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: T,S_L
|
||||
REAL (WP) :: SCHA_VISC_2D
|
||||
REAL (WP) :: T_A2D
|
||||
!
|
||||
REAL (WP) :: DLOG
|
||||
!
|
||||
T_A2D=ONE/(M_E*M_E*S_L*S_L) !
|
||||
!
|
||||
SCHA_VISC_2D=M_E*T* ( & !
|
||||
DLOG(2.5E0_WP*T/T_A2D)**2 + PI2 & ! ref. 1 eq. (10)
|
||||
) / (TWO*PI2) !
|
||||
!
|
||||
END FUNCTION SCHA_VISC_2D
|
||||
!
|
||||
END MODULE VISCOSITY
|
|
@ -0,0 +1,245 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE DFUNCL_MAGN_DYNAMIC
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
! Longitudinal Dielectric Functions with External Magnetic Field
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
!
|
||||
SUBROUTINE DFUNCL_DYNAMIC_M(X,Z,KS,A,NU,D_FUNCL,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the longitudinal dynamic
|
||||
! dielectric functions in the presence of an external
|
||||
! magnetic field
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * KS : screening wave vector in SI
|
||||
! * A : sqrt(mu_B * B) : magnitude of the magnetic field in SI
|
||||
! * NU : dimensionless filling factor
|
||||
! * D_FUNCL : type of longitudinal dielectric function (2D)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 18 Jun 2020
|
||||
!
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : DMN
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: D_FUNCL
|
||||
!
|
||||
REAL (WP) :: X,Z,KS,A,NU
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
CONTINUE !
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
CALL DFUNCL_DYNAMIC_2D_M(X,Z,KS,A,NU,D_FUNCL,EPSR,EPSI) !
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
CONTINUE !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE DFUNCL_DYNAMIC_M
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
! 1) 3D case
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
! 2) 2D case
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE DFUNCL_DYNAMIC_2D_M(X,Z,KS,A,NU,D_FUNCL,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the longitudinal dynamic
|
||||
! dielectric functions in 2D in the presence of an external
|
||||
! magnetic field
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * KS : screening wave vector in SI
|
||||
! * A : sqrt(mu_B * B) : magnitude of the magnetic field in SI
|
||||
! * NU : dimensionless filling factor
|
||||
! * D_FUNCL : type of longitudinal dielectric function (2D)
|
||||
! D_FUNCL = 'RPA3' random phase approximation
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 18 Jun 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: D_FUNCL
|
||||
!
|
||||
REAL (WP) :: X,Z,KS,A,NU
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
!
|
||||
IF(D_FUNCL == 'RPA3') THEN !
|
||||
CALL RPA3_EPS_D_LG_2D(X,Z,KS,A,NU,EPSR,EPSI) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE DFUNCL_DYNAMIC_2D_M
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE RPA3_EPS_D_LG_2D(X,Z,KS,A,NU,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the longitudinal 2D dynamical
|
||||
! RPA dielectric function with an external magnetic field
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * KS : screening wave vector in SI
|
||||
! * A : sqrt(mu_B * B) : magnitude of the magnetic field in SI
|
||||
! * NU : dimensionless filling factor
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 22 Jul 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,HALF
|
||||
USE COMPLEX_NUMBERS, ONLY : ZEROC,IC
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E,E,EPS_0
|
||||
USE FERMI_SI, ONLY : KF_SI,VF_SI
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
USE SQUARE_ROOTS, ONLY : SQR2
|
||||
USE EXT_FUNCTIONS, ONLY : CONHYP
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,Z,KS,A,NU,U
|
||||
REAL (WP) :: Q_SI,Q2,KS2,COEF,V_C
|
||||
REAL (WP) :: HOC,QL2,L2O,OM,KK
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
REAL (WP) :: GLD(1000)
|
||||
REAL (WP) :: CONV,DELTA
|
||||
REAL (WP) :: SUMJ
|
||||
REAL (WP) :: LKJ,BIN
|
||||
!
|
||||
INTEGER :: K,KMAX,J,JMIN,JMAX,I,NFAC
|
||||
!
|
||||
COMPLEX (WP) :: EPS,SUMK,KSUM
|
||||
COMPLEX (WP) :: NUM1,NUM2
|
||||
COMPLEX (WP) :: AA,BB,ZZ
|
||||
!
|
||||
CONV = 1.0E-6_WP ! Convergence value
|
||||
DELTA= 1.0E-6_WP ! imaginary part
|
||||
!
|
||||
U=X*Z ! omega / (q * v_F)
|
||||
!
|
||||
KMAX=100 !
|
||||
!
|
||||
COEF=E*E/EPS_0 !
|
||||
!
|
||||
Q_SI=TWO*X*KF_SI !
|
||||
Q2=Q_SI*Q_SI !
|
||||
KS2=KS*KS !
|
||||
OM=Q_SI*VF_SI*U ! omega
|
||||
!
|
||||
HOC=SQR2*A ! hbar * omega_c
|
||||
QL2=HALF*H_BAR*H_BAR*Q_SI*Q_SI/(M_E*HOC) ! q^2 l^2 / 2
|
||||
L2O=H_BAR*H_BAR/M_E ! l^2 hbar omega_c
|
||||
V_C=HALF*COEF/DSQRT(Q2+KS2) ! 2D Coulomb pot.
|
||||
KK=DEXP(-QL2)*PI_INV/L2O !
|
||||
!
|
||||
! Storage of the logarithms of the factorials
|
||||
!
|
||||
NFAC=KMAX+INT(NU) !
|
||||
GLD(1)=ZERO !
|
||||
DO I=2,NFAC !
|
||||
J=I-1 !
|
||||
GLD(I)=GLD(J)+DLOG(DFLOAT(J)) !
|
||||
END DO !
|
||||
!
|
||||
SUMK=ZEROC !
|
||||
DO K=1,KMAX !
|
||||
NUM1=H_BAR*OM - DFLOAT(K)*HOC + IC*DELTA !
|
||||
NUM2=H_BAR*OM + DFLOAT(K)*HOC + IC*DELTA !
|
||||
AA=DCMPLX(-DFLOAT(K)) !
|
||||
JMIN=MAX(0,INT(NU)-K) !
|
||||
JMAX=INT(NU) !
|
||||
SUMJ=ZERO !
|
||||
DO J=JMIN,JMAX !
|
||||
!
|
||||
! Computing the generalized Laguerre polynomials from
|
||||
! the confluent hypergeometric function:
|
||||
!
|
||||
! L(n,k,x) = (n+k) * 1F1(-n,k+1;x)
|
||||
! ( n )
|
||||
!
|
||||
BIN=DEXP(GLD(K+J+1)/(GLD(K+1)*GLD(J+1))) ! binomial coefficient
|
||||
BB=DCMPLX(DFLOAT(J)+ONE) !
|
||||
ZZ=DCMPLX(QL2) !
|
||||
LKJ=BIN*DREAL(CONHYP(AA,BB,ZZ,0,10)) !
|
||||
!
|
||||
SUMJ=SUMJ+DEXP(GLD(J+1)-GLD(J+K+1))*LKJ*LKJ !
|
||||
END DO !
|
||||
KSUM=SUMJ*(ONE/NUM1 - ONE/NUM2)*(QL2**K) !
|
||||
SUMK=SUMK+KSUM !
|
||||
IF(CDABS(KSUM).LT.CONV) GO TO 10 !
|
||||
END DO !
|
||||
!
|
||||
10 EPS=ONE-V_C*KK*SUMK !
|
||||
!
|
||||
EPSR=DREAL(EPS) !
|
||||
EPSI=DIMAG(EPS) !
|
||||
!
|
||||
END SUBROUTINE RPA3_EPS_D_LG_2D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
! 1) 1D case
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
!
|
||||
END MODULE DFUNCL_MAGN_DYNAMIC
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,88 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE DFUNCL_STAN_DYNAMIC_2
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE DFUNCL_DYNAMIC_FROM_SQO(X,V,Z,RS,T,FLAG,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the longitudinal dynamic
|
||||
! dielectric functions in 3D from the dynamical structure factor
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * V : dimensionless factor --> V = hbar * omega / E_F
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * FLAG : current index of the omega loop calling this subroutine
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 26 Oct 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,FOURTH
|
||||
!
|
||||
USE E_GRID
|
||||
!
|
||||
USE SF_VALUES
|
||||
USE STRUCTURE_FACTOR_DYNAMIC
|
||||
USE UTILITIES_3, ONLY : SQO_TO_EPSI
|
||||
USE TRANSFORMS, ONLY : KK
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER, INTENT(IN) :: FLAG
|
||||
!
|
||||
INTEGER :: IE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,V,Z,RS,T
|
||||
REAL (WP), INTENT(OUT) :: EPSR,EPSI
|
||||
!
|
||||
REAL (WP) :: E,ZZ,SQO,IEPS
|
||||
REAL (WP) :: EN(N_E),U_INP(N_E),U_OUT(N_E)
|
||||
!
|
||||
DO IE = 1, N_E !
|
||||
!
|
||||
E = E_MIN + FLOAT(IE - 1) * E_STEP !
|
||||
ZZ = FOURTH * E / (X * X) ! ZZ = omega / omega_q
|
||||
!
|
||||
! Computing the dynamic structure factor
|
||||
!
|
||||
CALL STFACT_DYNAMIC(X,ZZ,RS,T,SQO_TYPE,SQ_TYPE,SQO) !
|
||||
!
|
||||
! Computing the imaginary part of epsilon
|
||||
!
|
||||
CALL SQO_TO_EPSI(X,Z,T,RS,SQO,IEPS) !
|
||||
!
|
||||
U_INP(IE) = IEPS !
|
||||
EN(IE) = E !
|
||||
!
|
||||
END DO !
|
||||
!
|
||||
! Computing the real part of epsilon through Kramers-Kronig
|
||||
!
|
||||
CALL KK('I2R',N_E,EN,U_INP,ONE,U_OUT) !
|
||||
!
|
||||
EPSR = U_OUT(FLAG) !
|
||||
EPSI = U_INP(FLAG) !
|
||||
!
|
||||
END SUBROUTINE DFUNCL_DYNAMIC_FROM_SQO
|
||||
!
|
||||
END MODULE DFUNCL_STAN_DYNAMIC_2
|
|
@ -0,0 +1,307 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE DFUNC_STATIC
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE DFUNCL_STATIC(X,D_FUNCL,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the longitudinal static
|
||||
! dielectric functions
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * D_FUNCL : type of longitudinal dielectric function
|
||||
! D_FUNCL = 'LRPA' random phase approximation
|
||||
! D_FUNCL = 'THFE' Thomas-Fermi
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Jun 2020
|
||||
!
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : DMN
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: D_FUNCL
|
||||
!
|
||||
REAL (WP) :: X
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
!
|
||||
IF(D_FUNCL == 'LRPA') THEN !
|
||||
CALL RPA1_EPS_S_LG(X,DMN,EPSR,EPSI) !
|
||||
ELSE IF(D_FUNCL == 'THFE') THEN !
|
||||
CALL THFE_EPS_S_LG(X,DMN,EPSR,EPSI) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE DFUNCL_STATIC
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE RPA1_EPS_S_LG(X,DMN,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the longitudinal static RPA dielectric function
|
||||
!
|
||||
! References: (1) J. Solyom, "Fundamental of the Physics of Solids", Vol3, Chap. 29
|
||||
! p. 61-138, Springer
|
||||
!
|
||||
! Notation: hbar omega_q = hbar^2 q^2 / 2m
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * DMN : problem dimension
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
! In the RPA case, we have
|
||||
!
|
||||
! EPS(RPA) = 1 - V_C * Pi_0 Pi_0 : RPA polarisability
|
||||
!
|
||||
! which we will write as
|
||||
!
|
||||
! EPS(RPA) = 1 + Z * L Z : (q_{TF}/q)^2
|
||||
! L : Lindhard function
|
||||
!
|
||||
! where q_{TF} is the Thomas-Fermi screening vector, and EPS(TF) = 1 + Z
|
||||
! is the Thomas-Fermi dielectric function.
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,FOUR,EIGHT
|
||||
USE CONSTANTS_P1, ONLY : BOHR
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE LINDHARD_FUNCTION, ONLY : LINDHARD_S
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 2) :: DMN
|
||||
!
|
||||
REAL (WP) :: X
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
REAL (WP) :: LR,LI,Q_SI,Z
|
||||
!
|
||||
Q_SI=TWO*X*KF_SI !
|
||||
!
|
||||
! Coefficient Z: (q_{TF}/q)^2 --> dimension-dependent
|
||||
!
|
||||
IF(DMN == '3D') THEN ! 3D case
|
||||
!
|
||||
Z=FOUR*KF_SI/(PI*BOHR*Q_SI*Q_SI) !
|
||||
!
|
||||
ELSEIF(DMN == '2D') THEN ! 2D case
|
||||
!
|
||||
Z=FOUR/(BOHR*Q_SI*Q_SI) !
|
||||
!
|
||||
ELSEIF(DMN == '1D') THEN ! 1D case
|
||||
!
|
||||
Z=EIGHT/(BOHR*KF_SI*Q_SI*Q_SI) !
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
! Calling the static Lindhard function
|
||||
!
|
||||
CALL LINDHARD_S(X,DMN,LR,LI) !
|
||||
!
|
||||
! Calculation of the RPA dielectric function
|
||||
! !
|
||||
EPSR=ONE+Z*LR !
|
||||
EPSI=Z*LI ! EPS(RPA) = 1 + Z * L
|
||||
!
|
||||
END SUBROUTINE RPA1_EPS_S_LG
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE THFE_EPS_S_LG(X,DMN,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the longitudinal static RPA dielectric function
|
||||
!
|
||||
! References: (1) J. Solyom, "Fundamental of the Physics of Solids", Vol3, Chap. 29
|
||||
! p. 61-138, Springer
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * DMN : problem dimension
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,FOUR,EIGHT
|
||||
USE CONSTANTS_P1, ONLY : BOHR
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 2) :: DMN
|
||||
!
|
||||
REAL (WP) :: X
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
REAL (WP) :: Q_SI,Z
|
||||
!
|
||||
Q_SI=TWO*X*KF_SI !
|
||||
!
|
||||
! Coefficient Z: (q_{TF}/q)^2 --> dimension-dependent
|
||||
!
|
||||
IF(DMN == '3D') THEN ! 3D case
|
||||
!
|
||||
Z=FOUR*KF_SI/(PI*BOHR*Q_SI*Q_SI) !
|
||||
!
|
||||
ELSEIF(DMN == '2D') THEN ! 2D case
|
||||
!
|
||||
Z=FOUR/(BOHR*Q_SI*Q_SI) !
|
||||
!
|
||||
ELSEIF(DMN == '1D') THEN ! 1D case
|
||||
!
|
||||
Z=EIGHT/(BOHR*KF_SI*Q_SI*Q_SI) !
|
||||
!
|
||||
ENDIF !
|
||||
!
|
||||
! Calculation of the TF dielectric function
|
||||
!
|
||||
EPSR=ONE+Z !
|
||||
EPSI=ZERO ! EPS = 1 + Z
|
||||
!
|
||||
END SUBROUTINE THFE_EPS_S_LG
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE DFUNCL_STATIC_2D_M(X,KS,A,D_FUNCL,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the longitudinal static
|
||||
! dielectric functions in 2D in the presence of an external
|
||||
! magnetic field
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * KS : screening wave vector in SI
|
||||
! * A : sqrt(mu_B * B) : magnitude of the magnetic field in SI
|
||||
! * D_FUNCL : type of longitudinal dielectric function
|
||||
! D_FUNCL = 'LRPA' random phase approximation
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 26 Feb 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: D_FUNCL
|
||||
!
|
||||
REAL (WP) :: X,KS,A
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
!
|
||||
IF(D_FUNCL == 'LRPA') THEN !
|
||||
CALL RPA2_EPS_S_LG_2D(X,KS,A,EPSR,EPSI) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE DFUNCL_STATIC_2D_M
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE RPA2_EPS_S_LG_2D(X,KS,A,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the longitudinal static 2D RPA
|
||||
! dielectric function in the presence of a magnetic field
|
||||
! for an integer filling factor of 1
|
||||
!
|
||||
! References: (1) G. F. Giuliani and G. Vignale, "Quantum Theory of
|
||||
! the Electron Liquid", (Cambridge, 2005) p. 579
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * KS : screening wave vector in SI
|
||||
! * A : sqrt(mu_B * B) : magnitude of the magnetic field in SI
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 23 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,HALF
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E,E,EPS_0
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
USE SQUARE_ROOTS, ONLY : SQR2
|
||||
USE EULER_CONST, ONLY : EUMAS
|
||||
USE EXT_FUNCTIONS, ONLY : DEI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,KS,A
|
||||
REAL (WP) :: Q_SI,Q2,KS2,COEF,V_C
|
||||
REAL (WP) :: HOC,QL2,L2O
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
!
|
||||
REAL (WP) :: DSQRT,DLOG,DEXP
|
||||
!
|
||||
COEF=E*E/EPS_0 !
|
||||
!
|
||||
Q_SI=TWO*X*KF_SI !
|
||||
Q2=Q_SI*Q_SI !
|
||||
KS2=KS*KS !
|
||||
!
|
||||
HOC=SQR2*A ! hbar * omega_c
|
||||
QL2=HALF*H_BAR*H_BAR*Q_SI*Q_SI/(M_E*HOC) ! q^2 l^2 / 2
|
||||
L2O=H_BAR*H_BAR/M_E ! l^2 hbar omega_c
|
||||
V_C=HALF*COEF/DSQRT(Q2+KS2) ! 2D Coulomb pot.
|
||||
!
|
||||
EPSR=ONE+V_C*PI_INV*(DEI(QL2)-DLOG(QL2)-EUMAS)*DEXP(-QL2)/L2O !
|
||||
EPSI=ZERO !
|
||||
!
|
||||
END SUBROUTINE RPA2_EPS_S_LG_2D
|
||||
!
|
||||
END MODULE DFUNC_STATIC
|
|
@ -0,0 +1,628 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE DFUNCT_STAN_DYNAMIC
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
! Transverse Dielectric Functions
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE DFUNCT_DYNAMIC(X,Z,D_FUNCT,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the transverse dynamic
|
||||
! dielectric functions
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * D_FUNCT : type of transverse dielectric function
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 19 Jun 2020
|
||||
!
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : DMN
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: D_FUNCT
|
||||
!
|
||||
REAL (WP) :: X,Z,RS,T,TAU
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
CALL DFUNCT_DYNAMIC_3D(X,Z,D_FUNCT,EPSR,EPSI) !
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
CALL DFUNCT_DYNAMIC_2D(X,Z,D_FUNCT,EPSR,EPSI) !
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
CONTINUE !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE DFUNCT_DYNAMIC
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
! 1) 3D case
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE DFUNCT_DYNAMIC_3D(X,Z,D_FUNCT,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the transverse dynamic
|
||||
! dielectric functions in 3D
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * D_FUNCT : type of transverse dielectric function (3D)
|
||||
! D_FUNCT = 'RPA1' random phase approximation
|
||||
! D_FUNCT = 'RPA2' random phase approximation
|
||||
! D_FUNCT = 'LVLA' linearized Vlasov
|
||||
! D_FUNCT = 'MER1' Mermin
|
||||
! D_FUNCT = 'BLTZ' Boltzmann
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Jun 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: D_FUNCT
|
||||
!
|
||||
REAL (WP) :: X,Z,RS,T,TAU
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
!
|
||||
IF(D_FUNCT == 'RPA1') THEN !
|
||||
CALL RPA1_EPS_D_TR_3D(X,Z,RS,EPSR,EPSI) !
|
||||
ELSE IF(D_FUNCT == 'RPA2') THEN !
|
||||
CALL RPA2_EPS_D_TR_3D(X,Z,RS,T,EPSR,EPSI) !
|
||||
ELSE IF(D_FUNCT == 'LVLA') THEN !
|
||||
CALL LVLA_EPS_D_TR_3D(X,Z,RS,T,EPSR,EPSI) !
|
||||
ELSE IF(D_FUNCT == 'MER1') THEN !
|
||||
CALL MER1_EPS_D_TR_3D(X,Z,RS,TAU,EPSR,EPSI) !
|
||||
ELSE IF(D_FUNCT == 'BLTZ') THEN !
|
||||
CALL BLTZ_EPS_D_TR_3D(X,Z,RS,TAU,EPSR,EPSI) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE DFUNCT_DYNAMIC_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE RPA1_EPS_D_TR_3D(X,Z,RS,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the transvere
|
||||
! RPA dielectric function EPS(q,omega) for 3D systems.
|
||||
!
|
||||
! References: (1) Z. H. Levine and E. Cockayne,
|
||||
! J. Res. Natl. Inst. Stand. Technol. 113, 299-304 (2008)
|
||||
! (2) J. Solyom, "Fundamental of the Physics of Solids",
|
||||
! Vol3, Chap. 29, p. 117, Springer
|
||||
!
|
||||
! Notation: hbar omega_q = hbar^2 q^2 / 2m
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
!
|
||||
! Intermediate parameters:
|
||||
!
|
||||
! * U : dimensionless factor --> U = omega / q v_F
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
! Note:
|
||||
!
|
||||
! The connection between the two reference is obtained through the relation:
|
||||
!
|
||||
! ( k_{TF}/q )^2 = 3 U^2 ( omega_p/omega )^2
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Jun 2020
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,THREE,EIGHT
|
||||
USE CONSTANTS_P1, ONLY : H_BAR
|
||||
USE FERMI_SI, ONLY : KF_SI,VF_SI
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,Z,U,RS
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
REAL (WP) :: X1,X2
|
||||
REAL (WP) :: Q_SI,O_SI,COEF
|
||||
!
|
||||
U=X*Z ! omega / (q * v_F)
|
||||
!
|
||||
X1=X-U !
|
||||
X2=X+U !
|
||||
!
|
||||
Q_SI=TWO*X*KF_SI ! q in SI
|
||||
O_SI=U*Q_SI*VF_SI ! omega in SI
|
||||
!
|
||||
COEF=ENE_P_SI*ENE_P_SI/(H_BAR*H_BAR*O_SI*O_SI) !
|
||||
!
|
||||
! Real part
|
||||
!
|
||||
EPSR=ONE - COEF * ( & !
|
||||
THREE*(X*X + THREE*U*U + ONE)/EIGHT - & !
|
||||
THREE*( & !
|
||||
(ONE-X2*X2)**2 * & !
|
||||
DLOG(DABS((X2+ONE)/(X2-ONE))) + & ! eq. (7) ref. 1
|
||||
(ONE-X1*X1)**2 * & ! eq. (29.6.87) ref. 2
|
||||
DLOG(DABS((X1+ONE)/(X1-ONE))) & !
|
||||
) / (32.0E0_WP*X) & !
|
||||
) !
|
||||
!
|
||||
! Imaginary part
|
||||
!
|
||||
IF( U < DABS(ONE-X) ) THEN !
|
||||
!
|
||||
IF(X <= ONE) THEN !
|
||||
EPSI=0.75E0_WP*PI*COEF*U*(ONE-U*U-X*X) ! eq. (6) ref. 1
|
||||
ELSE !
|
||||
EPSI=ZERO ! eq. (29.6.89) ref. 2
|
||||
END IF !
|
||||
!
|
||||
ELSE IF( (DABS(ONE-X) <= U) .AND. (U <= (ONE+X)) ) THEN !
|
||||
!
|
||||
EPSI=THREE*PI*COEF * (ONE - (U-X)**2 )**2 / (32.0E0_WP*X) ! eq. (6) ref. 1
|
||||
!
|
||||
ELSE IF( (ONE+X) <= U ) THEN !
|
||||
!
|
||||
EPSI=ZERO !
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE RPA1_EPS_D_TR_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE RPA2_EPS_D_TR_3D(X,Z,RS,T,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the transverse temperature-dependent
|
||||
! RPA dielectric function EPS(q,omega,T) for 3D systems.
|
||||
!
|
||||
! References: (1) H. Reinholz et al, Contrib. Plasma Phys. 43, 3-10 (2003)
|
||||
!
|
||||
! Notation: hbar omega_q = hbar^2 q^2 / 2m
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Y = omega / omega_q
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
! Intermediate parameters:
|
||||
!
|
||||
! * U : dimensionless factor --> U = omega / q v_F
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Jun 2020
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E,K_B
|
||||
USE FERMI_SI, ONLY : KF_SI,VF_SI
|
||||
USE EXT_FUNCTIONS, ONLY : DAWSON
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,Z,U,RS,T
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
REAL (WP) :: Q_SI,O_SI,XX
|
||||
!
|
||||
U=X*Z ! omega / (q * v_F)
|
||||
!
|
||||
Q_SI=TWO*X*KF_SI ! q in SI
|
||||
O_SI=U*Q_SI*VF_SI ! omega in SI
|
||||
!
|
||||
XX=O_SI*DSQRT(M_E/(TWO*K_B*T))/Q_SI !
|
||||
!
|
||||
EPSR=ONE+ENE_P_SI*ENE_P_SI*DAWSON(XX)/(H_BAR*H_BAR*O_SI*O_SI) ! ref. (1) eq. (10)
|
||||
EPSI=ZERO !
|
||||
!
|
||||
END SUBROUTINE RPA2_EPS_D_TR_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE LVLA_EPS_D_TR_3D(X,Z,RS,T,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the transverse linearized Vlasov dynamical
|
||||
! dielectric function in 3D
|
||||
!
|
||||
! References: (1) S. Ichimaru, "Statistical Plasma Physics - Vol1",
|
||||
! CRC Press (2004)
|
||||
!
|
||||
! Notation: hbar omega_q = hbar q^2 / 2m
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Y = omega / omega_q
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
! Intermediate parameters:
|
||||
!
|
||||
! * U : dimensionless factor --> U = omega / q v_F
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,HALF
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E,K_B
|
||||
USE FERMI_SI, ONLY : KF_SI,VF_SI
|
||||
USE EXT_FUNCTIONS, ONLY : W
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,Z,RS,T,U,Y,Y2,V
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
REAL (WP) :: ZZ,Q_SI,OM
|
||||
REAL (WP) :: FR
|
||||
!
|
||||
Y=X+X ! Y = q / k_F
|
||||
Y2=Y*Y !
|
||||
U=X*Z ! omega / (q * v_F)
|
||||
V=Z*Y2 ! omega / omega_{k_F}
|
||||
Q_SI=TWO*X*KF_SI ! q
|
||||
OM=V*HALF*H_BAR*KF_SI*KF_SI/M_E ! omega
|
||||
!
|
||||
ZZ=U*VF_SI/DSQRT(K_B*T/M_E) ! argument of PDF W(zz)
|
||||
FR=(ENE_P_SI/(H_BAR*OM))**2 ! (omega_p/omega)^2
|
||||
!
|
||||
EPSR=ONE - FR * (ONE - DREAL(W(ZZ))) ! ref. (2) eq. (4.76)
|
||||
EPSI=FR * (ONE - DIMAG(W(ZZ))) !
|
||||
!
|
||||
END SUBROUTINE LVLA_EPS_D_TR_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE MER1_EPS_D_TR_3D(X,Z,RS,TAU,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the transverse Mermin dynamical
|
||||
! dielectric function in 3D
|
||||
!
|
||||
! References: (1) P.-O. Chapuis et al, Phys. Rev. B 77, 035441 (2008)
|
||||
!
|
||||
! Note: for TAU --> infinity, we should recover the RPA values
|
||||
!
|
||||
! Notation: hbar omega_q = hbar q^2 / 2m
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Y = omega / omega_q
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * TAU : relaxation time (used for damping) in SI
|
||||
!
|
||||
! Intermediate parameters:
|
||||
!
|
||||
! * U : dimensionless factor --> U = omega / q v_F
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,EIGHT, &
|
||||
HALF
|
||||
USE COMPLEX_NUMBERS, ONLY : IC
|
||||
USE CONSTANTS_P1, ONLY : H_BAR
|
||||
USE FERMI_SI, ONLY : KF_SI,VF_SI
|
||||
USE MULTILAYER, ONLY : EPS_1
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,Z,U,RS,TAU
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
REAL (WP) :: Q_SI,O_SI
|
||||
!
|
||||
REAL*8 EPS_INF
|
||||
!
|
||||
COMPLEX (WP) :: UU,FT_U,FT_0,FL_U,FL_0
|
||||
COMPLEX (WP) :: ZPU,ZMU
|
||||
COMPLEX (WP) :: COEF,EPS
|
||||
!
|
||||
U=X*Z ! omega / (q * v_F)
|
||||
Q_SI=TWO*X*KF_SI ! q in SI
|
||||
O_SI=U*Q_SI*VF_SI ! omega in SI
|
||||
!
|
||||
COEF=ENE_P_SI*ENE_P_SI/(H_BAR*H_BAR*(O_SI+IC/TAU)) !
|
||||
!
|
||||
UU=(O_SI+IC/TAU)/(Q_SI*VF_SI) !
|
||||
ZPU=X+UU !
|
||||
ZMU=X-UU !
|
||||
!
|
||||
FL_0=HALF + (ONE-X*X)*DLOG(DABS((X+ONE)/(X-ONE)))/(FOUR*X) ! ref (1) eq. (13)
|
||||
FL_U=HALF + (ONE-ZMU*ZMU)*CDLOG((ZMU+ONE)/(ZMU-ONE)) / & !
|
||||
(EIGHT*X) + & !
|
||||
(ONE-ZPU*ZPU)*CDLOG((ZPU+ONE)/(ZPU-ONE)) / & !
|
||||
(EIGHT*X) ! ref (1) eq. (11)
|
||||
!
|
||||
FT_0=0.375E0_WP*(X*X+ONE) - 0.1875E0_WP*(ONE-X*X)*(ONE-X*X)* &! ref (1) eq. (14)
|
||||
DLOG(DABS((X+ONE)/(X-ONE)))/X !
|
||||
FT_U=0.375E0_WP*(X*X+THREE*UU*UU+ONE) - & !
|
||||
0.09375E0_WP*(ONE-ZMU*ZMU)*(ONE-ZMU*ZMU)* & ! ref (1) eq. (12)
|
||||
CDLOG((ZMU+ONE)/(ZMU-ONE))/X - & !
|
||||
0.09375E0_WP*(ONE-ZPU*ZPU)*(ONE-ZPU*ZMU)* & !
|
||||
CDLOG((ZPU+ONE)/(ZPU-ONE))/X !
|
||||
!
|
||||
EPS=EPS_1 - COEF*( O_SI*(FT_U-THREE*X*X*FL_U) + & !
|
||||
IC*(FT_0-THREE*X*X*FL_0)/TAU & ! ref (1) eq. (11)
|
||||
) !
|
||||
!
|
||||
EPSR=DREAL(EPS) !
|
||||
EPSI=DIMAG(EPS) !
|
||||
!
|
||||
END SUBROUTINE MER1_EPS_D_TR_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE BLTZ_EPS_D_TR_3D(X,Z,RS,TAU,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the transverse Boltzmann dynamical
|
||||
! dielectric function in 3D
|
||||
!
|
||||
! References: (1) R. Esquivel and V. B. Stetovoy, Phys. Rev. A 69, 062102 (2004)
|
||||
!
|
||||
! Notation: hbar omega_q = hbar q^2 / 2m
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * TAU : relaxation time (used for damping) in SI
|
||||
!
|
||||
! Intermediate parameters:
|
||||
!
|
||||
! * U : dimensionless factor --> U = omega / q v_F
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 17 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,HALF
|
||||
USE COMPLEX_NUMBERS, ONLY : IC
|
||||
USE CONSTANTS_P1, ONLY : H_BAR
|
||||
USE FERMI_SI, ONLY : KF_SI,VF_SI
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,Z,U,RS,TAU
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
REAL (WP) :: Q_SI,O_SI
|
||||
!
|
||||
COMPLEX (WP) :: UU,U3,COEF
|
||||
COMPLEX (WP) :: LLOG,FT
|
||||
!
|
||||
U=X*Z ! omega / (q * v_F)
|
||||
!
|
||||
Q_SI=TWO*X*KF_SI ! q in SI
|
||||
O_SI=U*Q_SI*VF_SI ! omega in SI
|
||||
!
|
||||
UU=Q_SI*VF_SI/(O_SI + IC/TAU) ! ref. (1) eq. (16)
|
||||
U3=UU*UU*UU !
|
||||
COEF=ENE_P_SI*ENE_P_SI/(H_BAR*H_BAR) * & !
|
||||
ONE/(O_SI*O_SI + IC*O_SI/TAU) !
|
||||
LLOG=CDLOG((ONE+UU)/(ONE-UU)) !
|
||||
!
|
||||
FT=THREE*HALF/U3 * ( UU - HALF*(ONE-UU*UU)*LLOG ) ! ref. (1) eq. (14)
|
||||
!
|
||||
EPSR=ONE - DREAL(COEF*FT) !
|
||||
EPSI=DIMAG(COEF*FT) !
|
||||
!
|
||||
END SUBROUTINE BLTZ_EPS_D_TR_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
! 1) 2D case
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE DFUNCT_DYNAMIC_2D(X,Z,D_FUNCT,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the transverse dynamic
|
||||
! dielectric functions in 2D
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * D_FUNCT : type of transverse dielectric function (2D)
|
||||
! D_FUNCT = 'TRPA' random phase approximation
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 12 Jun 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: D_FUNCT
|
||||
!
|
||||
REAL (WP) :: X,Z,RS
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
!
|
||||
IF(D_FUNCT == 'RPA1') THEN !
|
||||
CALL RPA1_EPS_D_TR_2D(X,Z,RS,EPSR,EPSI) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE DFUNCT_DYNAMIC_2D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE RPA1_EPS_D_TR_2D(X,Z,RS,EPSR,EPSI)
|
||||
!
|
||||
! This subroutine computes the transverse
|
||||
! RPA dielectric function EPS(q,omega,T) for 2D systems.
|
||||
!
|
||||
! References: (1) R. Nifosi, S. Conti and M. P. Tosi,
|
||||
! Phys. Rev. B 58, 12758 (1998)
|
||||
!
|
||||
! Notation: hbar omega_q = hbar^2 q^2 / 2m
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
!
|
||||
! Intermediate parameters:
|
||||
!
|
||||
! * U : dimensionless factor --> U = omega / q v_F
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EPSR : real part of the dielectric function
|
||||
! * EPSI : imaginary part of the dielectric function
|
||||
!
|
||||
! Note:
|
||||
!
|
||||
! The dielectric function is obtained from the current-current susceptibility by
|
||||
!
|
||||
! eps = 1 - ( omega_p/omega )^2 * [ 1 + m/n * chi ]
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 12 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,SIX,THIRD
|
||||
USE CONSTANTS_P1, ONLY : H_BAR
|
||||
USE FERMI_SI, ONLY : KF_SI,VF_SI
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,Z,U,RS
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
REAL (WP) :: XP,XM,EP,EM,BP,BM
|
||||
REAL (WP) :: Q_SI,O_SI,COEF
|
||||
!
|
||||
U=X*Z ! omega / (q * v_F)
|
||||
!
|
||||
XP=X+U !
|
||||
XM=X-U !
|
||||
!
|
||||
Q_SI=TWO*X*KF_SI ! q in SI
|
||||
O_SI=U*Q_SI*VF_SI ! omega in SI
|
||||
!
|
||||
COEF=ENE_P_SI*ENE_P_SI/(H_BAR*H_BAR*O_SI*O_SI) !
|
||||
!
|
||||
IF(XP.GE.ONE) THEN !
|
||||
EP=SIGN(XP,(XP*XP-ONE)**1.5E0_WP) ! eq. (A7) ref. 1
|
||||
BP=ZERO !
|
||||
ELSE !
|
||||
EP=ZERO !
|
||||
BP=(ONE-XP*XP)**1.5E0_WP ! eq. (A4) ref. 1
|
||||
ENDIF !
|
||||
!
|
||||
IF(XM.GE.ONE) THEN !
|
||||
EM=SIGN(XM,(XM*XM-ONE)**1.5E0_WP) ! eq. (A7) ref. 1
|
||||
BM=ZERO !
|
||||
ELSE !
|
||||
EM=ZERO !
|
||||
BM=(ONE-XM*XM)**1.5E0_WP ! eq. (A4) ref. 1
|
||||
ENDIF !
|
||||
!
|
||||
! Real part
|
||||
!
|
||||
EPSR=ONE-COEF*THIRD* ( & !
|
||||
TWO*X*X*X + SIX*U*U*X - EP - EM & ! eq. (A7) ref. 1
|
||||
) / X !
|
||||
!
|
||||
! Imaginary part
|
||||
!
|
||||
EPSI=-COEF*THIRD*(BP-BM)/X ! eq. (A4) ref. 1
|
||||
!
|
||||
END SUBROUTINE RPA1_EPS_D_TR_2D
|
||||
!
|
||||
END MODULE DFUNCT_STAN_DYNAMIC
|
|
@ -0,0 +1,37 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE DIMENSION_CODE
|
||||
!
|
||||
! This module contains the dimensioning of the epsilon.f90 code
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
!
|
||||
INTEGER :: NSIZE ! max. number
|
||||
! ! of energy/momentum/r
|
||||
PARAMETER (NSIZE=5000) ! points
|
||||
!
|
||||
INTEGER :: NZ_MAX ! max. number
|
||||
! ! of z/r/k
|
||||
PARAMETER (NZ_MAX=2500) ! integration points
|
||||
!
|
||||
INTEGER :: ND_MAX ! max. number
|
||||
! ! of derivation
|
||||
PARAMETER (ND_MAX=2500) ! points
|
||||
!
|
||||
INTEGER :: MAXITER ! max. number
|
||||
! ! of
|
||||
PARAMETER(MAXITER = 30) ! iterations
|
||||
!
|
||||
INTEGER :: NOFFN ! max. number
|
||||
! ! of
|
||||
PARAMETER(NOFFN = 92) ! output fortran files
|
||||
! ! of
|
||||
INTEGER :: L_MAX !
|
||||
! ! max. number
|
||||
PARAMETER (L_MAX=50) ! of
|
||||
! ! ang. momentum l
|
||||
END MODULE DIMENSION_CODE
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,122 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE DELTA_KIN
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!------ 1) 3D case --------------------------------------------
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE DELTA_KIN_3D(EC_TYPE,IMODE,IDERIV,RS,T,I_DE,DT,DT2)
|
||||
!
|
||||
! This subroutine computes delta_t and delta_t2 values for 3D systems
|
||||
!
|
||||
!
|
||||
! References: (1) J. Toulouse, Phys. Rev. B 72, 035117 (2005)
|
||||
!
|
||||
! They are defined, in terms of the kinetic energy, as
|
||||
!
|
||||
! < t > - < t >
|
||||
! 0
|
||||
! delta_t = ----------------
|
||||
!
|
||||
! < t >
|
||||
! 0
|
||||
!
|
||||
!
|
||||
! 2 2
|
||||
! < t > - < t >
|
||||
! 0
|
||||
! delta_t2 = ----------------
|
||||
! 2
|
||||
! < t >
|
||||
! 0
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * EC_TYPE : type of correlation energy functional
|
||||
! * IMODE : choice of parameters
|
||||
! IMODE = 1 : no spin polarization
|
||||
! IMODE = 2 : fully spin-polarized
|
||||
! * IDERIV : type of n_point formula used for derivation (n = IDERIV)
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
! * I_DE : type of parametrization of delta_t2
|
||||
! I_DE = 1 : RPA
|
||||
! I_DE = 2 : GW
|
||||
! I_DE = 3 : Gori-Giorgi and Ziesche
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * DT : delta_t
|
||||
! * DT2 : delta_t2
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 30 Oct 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,FIVE,THIRD
|
||||
USE FERMI_AU, ONLY : EF_AU
|
||||
!
|
||||
USE CORRELATION_ENERGIES
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 6) :: EC_TYPE
|
||||
!
|
||||
INTEGER, INTENT(IN) :: IMODE,IDERIV,I_DE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS,T
|
||||
REAL (WP), INTENT(OUT) :: DT,DT2
|
||||
!
|
||||
REAL (WP) :: EC,D_EC_1,D_EC_2
|
||||
REAL (WP) :: EF
|
||||
REAL (WP) :: D1(3:6),D2(3:6),D3(3:6)
|
||||
REAL (WP) :: U,U3,U4,U5,U6
|
||||
!
|
||||
REAL (WP) :: SQRT
|
||||
!
|
||||
DATA D1 / 0.093623E0_WP, 0.194288E0_WP, 0.051445E0_WP, 0.005449E0_WP / ! RPA
|
||||
DATA D2 / 0.126362E0_WP, 0.001428E0_WP, 0.014278E0_WP, -0.004522E0_WP / ! GW
|
||||
DATA D3 / 0.271191E0_WP, -0.009998E0_WP, -0.036383E0_WP, 0.006706E0_WP / ! GZ
|
||||
!
|
||||
U = SQRT(RS) !
|
||||
U3 = U * U * U !
|
||||
U4 = U3 * U !
|
||||
U5 = U4 * U !
|
||||
U6 = U5 * U !
|
||||
!
|
||||
! Correlation energy and its derivatives
|
||||
!
|
||||
EC = EC_3D(EC_TYPE,1,RS,T) !
|
||||
CALL DERIVE_EC_3D(EC_TYPE,1,5,RS,T,D_EC_1,D_EC_2) !
|
||||
!
|
||||
! E_F in Rydberg
|
||||
!
|
||||
EF = TWO * EF_AU ! EF_AU in Hartree
|
||||
!
|
||||
DT = - FIVE * THIRD * (EC + RS * D_EC_1) / EF !
|
||||
!
|
||||
! Parametrization of delta_t2
|
||||
!
|
||||
IF(I_DE == 1) THEN !
|
||||
DT2 = D1(3) * U3 + D1(4) * U4 + D1(5) * U5 + D1(6) * U6 !
|
||||
ELSE IF(I_DE == 2) THEN !
|
||||
DT2 = D2(3) * U3 + D2(4) * U4 + D2(5) * U5 + D2(6) * U6 ! ref. (1) eq. (B1)
|
||||
ELSE IF(I_DE == 3) THEN !
|
||||
DT2 = D3(3) * U3 + D3(4) * U4 + D3(5) * U5 + D3(6) * U6 !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE DELTA_KIN_3D
|
||||
!
|
||||
END MODULE DELTA_KIN
|
|
@ -0,0 +1,113 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE EXCHANGE_ENERGIES
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!------ 1) 3D case --------------------------------------------
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION EX_3D(EX_TYPE,IMODE,RS,T,XI)
|
||||
!
|
||||
! This subroutine computes the 3D exchange energy EX
|
||||
! at a given value RS
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * EX_TYPE : type of kinetic energy functional
|
||||
! EX_TYPE = 'HEG' --> homogeneous electron gas
|
||||
! * IMODE : choice of parameters
|
||||
! IMODE = 1 : no spin polarization
|
||||
! IMODE = 2 : fully spin-polarized
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
! * XI : spin polarization : (n+ - n-) / n
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EX_3D : value at RS
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 15 Sep 2020
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: EX_TYPE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS,T,XI
|
||||
REAL (WP) :: EX_3D
|
||||
!
|
||||
INTEGER :: IMODE
|
||||
!
|
||||
IF(EX_TYPE == 'HEG') THEN !
|
||||
EX_3D = EX_HEG_3D(RS,XI) !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION EX_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION EX_HEG_3D(RS,XI)
|
||||
!
|
||||
! This function computes the exchange energy in the 3D homegeneous
|
||||
! electron gas model
|
||||
!
|
||||
! Reference: (1) U. von Barth and L. Hedin,
|
||||
! J. Phys. C : Solid State Phys. 5, 1629-1642 (1972)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
! * XI : spin polarization : (n+ - n-) / n
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EX_HEG : value at RS (in Ry)
|
||||
!
|
||||
!
|
||||
! Note: in reference (1), equations are expressend in terms of
|
||||
! x = n+ / n. The relation with XI is
|
||||
!
|
||||
! XI = 2x - 1
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 15 Sep 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,HALF,THIRD
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS,XI
|
||||
REAL (WP) :: EX_HEG_3D
|
||||
REAL (WP) :: X,A,E,FX,G
|
||||
REAL (WP) :: ALPHA,COEF,EX_P,MUX_P
|
||||
!
|
||||
X = HALF * (XI - ONE) !
|
||||
A = HALF**THIRD !
|
||||
E = FOUR * THIRD !
|
||||
FX = ( X**E + (ONE - X)**E - A ) / (ONE - A) ! ref. 1 eq. (5.3)
|
||||
G = E * A / (ONE - A) !
|
||||
!
|
||||
ALPHA = ALFA('3D') !
|
||||
COEF = THREE / (TWO * PI * ALPHA) !
|
||||
EX_P = - COEF / RS ! ref. 1 eq. (5.7)
|
||||
MUX_P = E * EX_P ! ref. 1 eq. (5.8)
|
||||
!
|
||||
EX_HEG_3D = EX_P + MUX_P * FX / G ! ref. 1 eq. (5.4)
|
||||
!
|
||||
END FUNCTION EX_HEG_3D
|
||||
!
|
||||
END MODULE EXCHANGE_ENERGIES
|
|
@ -0,0 +1,110 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE KINETIC_ENERGIES
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!------ 1) 3D case --------------------------------------------
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION EK_3D(EK_TYPE,RS,T,XI)
|
||||
!
|
||||
! This subroutine computes the 3D kinetic energy EK
|
||||
! at a given value RS
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * EK_TYPE : type of exchange energy functional
|
||||
! EK_TYPE = 'HEG' --> homogeneous electron gas
|
||||
! * IMODE : choice of parameters
|
||||
! IMODE = 1 : no spin polarization
|
||||
! IMODE = 2 : fully spin-polarized
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
! * XI : spin polarization : (n+ - n-) / n
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EK_3D : value at RS
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 15 Sep 2020
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: EK_TYPE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS,T,XI
|
||||
REAL (WP) :: EK_3D
|
||||
!
|
||||
INTEGER :: IMODE
|
||||
!
|
||||
IF(EK_TYPE == 'HEG') THEN !
|
||||
EK_3D = EK_HEG_3D(RS,XI) !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION EK_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION EK_HEG_3D(RS,XI)
|
||||
!
|
||||
! This function computes the kinetic energy in the 3D homegeneous
|
||||
! electron gas model
|
||||
!
|
||||
! Reference: (1) A. Sarkar, S. Haldar, D. Roy and D. Sen,
|
||||
! Acta Phys. Polonica A 106, 497-514 (2004)
|
||||
! (2) H. T. Tran and J. P. Perdew, Am. J. Phys. 71,
|
||||
! 1048-1061 (2003)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
! * XI : spin polarization : (n+ - n-) / n
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EX_HEG : value at RS (in Ry)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 15 Sep 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FIVE,THIRD
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS,XI
|
||||
REAL (WP) :: EK_HEG_3D
|
||||
REAL (WP) :: ALPHA,COEF
|
||||
REAL (WP) :: A,E,FK
|
||||
REAL (WP) :: EK_P,EK_F
|
||||
!
|
||||
A = TWO**(TWO * THIRD) !
|
||||
E = FIVE * THIRD !
|
||||
FK = ( (ONE + XI)**E + (ONE - XI)**E - TWO ) / & !
|
||||
(TWO * (A - ONE) ) !
|
||||
!
|
||||
ALPHA = ALFA('3D') !
|
||||
COEF = THREE / (FIVE * ALPHA * ALPHA) ! ref. 2 eq. (4)
|
||||
EK_P = COEF / (RS * RS) !
|
||||
EK_F = A * EK_P !
|
||||
!
|
||||
EK_HEG_3D = EK_P + (EK_F - EK_P) * FK ! ref. 1 eq. (11)
|
||||
!
|
||||
END FUNCTION EK_HEG_3D
|
||||
!
|
||||
END MODULE KINETIC_ENERGIES
|
||||
|
|
@ -0,0 +1,978 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE XC_ENERGIES
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!------ 1) 3D case --------------------------------------------
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION EXC_3D(EXC_TYPE,RS,T)
|
||||
!
|
||||
! This subroutine computes the exchange and correlation energy EXC
|
||||
! at a given value RS
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * EXC_TYPE : type of correlation energy functional
|
||||
! EXC_TYPE = 'GT' --> Goedeker-Tetter-Hutter
|
||||
! EXC_TYPE = 'ST' -->
|
||||
! EXC_TYPE = 'BD' --> Brown-DuBois-Holzmann-Ceperley
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EXC : value at RS
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Jun 2020
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 2) :: EXC_TYPE
|
||||
!
|
||||
REAL (WP) :: EXC_3D,RS,T
|
||||
!
|
||||
INTEGER :: IMODE
|
||||
!
|
||||
IF(EXC_TYPE == 'GT') THEN !
|
||||
EXC_3D=EXC_GT_W(RS) !
|
||||
ELSE IF(EXC_TYPE == 'ST') THEN !
|
||||
EXC_3D=EXC_ST_S(RS) !
|
||||
ELSE IF(EXC_TYPE == 'BD') THEN !
|
||||
EXC_3D=EXC_BD_T(RS,T) !
|
||||
END IF
|
||||
!
|
||||
END FUNCTION EXC_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
! Exchange and Correlation energy functionals (in Ryd)
|
||||
!
|
||||
! Different regimes: * weak coupling : r_s << 1
|
||||
! * metallic state : 2 <= r_s <= 6
|
||||
! * Wigner crystallization : r_s >= 100
|
||||
!
|
||||
!
|
||||
! (1) Weak coupling regime: _W
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION EXC_GT_W(RS)
|
||||
!
|
||||
! Exchange and correlation energy for 3D systems
|
||||
! as derived by Goedeker-Tetter-Hutter
|
||||
!
|
||||
!
|
||||
! Reference: S. Goedeker, M. Teter and J. Hutter, Phys. Rev. B 54,
|
||||
! 1704-1710 (1996)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Sep 2020
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,RS2,RS3,RS4
|
||||
REAL (WP) :: EXC_GT_W
|
||||
REAL (WP) :: A(0:3),B(1:4)
|
||||
REAL (WP) :: NUM,DEN
|
||||
!
|
||||
DATA A / 0.4581652932831429E0_WP , &
|
||||
2.217058676663745E0_WP , &
|
||||
0.7405551735357053E0_WP , &
|
||||
0.01968227878617998E0_WP /
|
||||
!
|
||||
DATA B / 1.0000000000000000E0_WP , &
|
||||
4.504130959426697E0_WP , &
|
||||
1.110667363742916E0_WP , &
|
||||
0.02359291751427506E0_WP /
|
||||
!
|
||||
RS2 = RS * RS !
|
||||
RS3 = RS2 * RS !
|
||||
RS4 = RS3 * RS !
|
||||
!
|
||||
NUM = A(0) + A(1)*RS + A(2)*RS2 + A(3)*RS3 !
|
||||
DEN = B(1)*RS + B(2)*RS2 + B(3)*RS3 + B(4)*RS4 !
|
||||
!
|
||||
EXC_GT_W = NUM / DEN ! Ref. 1, Appendix
|
||||
!
|
||||
END FUNCTION EXC_GT_W
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
! (2) Strong coupling regime (r_s small): _S
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION EXC_ST_S(RS)
|
||||
!
|
||||
! Exchange and correlation energy for 3D systems in the standard model
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Jun 2020
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS
|
||||
REAL (WP) :: EXC_ST_S
|
||||
REAL (WP) :: RS2,XS
|
||||
REAL (WP) :: A1,A2,A3,A4
|
||||
!
|
||||
A1 = - 1.79186E0_WP !
|
||||
A2 = 2.65E0_WP !
|
||||
A3 = - 0.73E0_WP !
|
||||
A4 = - 0.8E0_WP !
|
||||
!
|
||||
EXC_ST_S=A1/RS + A2/(RS*XS) + A3/RS2 + A4/(RS2*XS) !
|
||||
!
|
||||
END FUNCTION EXC_ST_S
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
! (4) Temperature dependence: _T
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION EXC_BD_T(RS,T)
|
||||
!
|
||||
! Temperature-dependent exchange and correlation energy for 3D systems
|
||||
! as derived by Brown-DuBois-Holzmann-Ceperley
|
||||
!
|
||||
! Validity: RS < 40 and T/T_F > 0.0625
|
||||
!
|
||||
! References: (1) E. W. Brown, J. L. DuBois, M. Holzmann and D. M. Ceperley,
|
||||
! Phys. Rev. B 88, 081102 (2013)
|
||||
! (2) E. W. Brown, J. L. DuBois, M. Holzmann and D. M. Ceperley,
|
||||
! Phys. Rev. B 88, 199901 (2013) --> erratum
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,SIX
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,T,T2
|
||||
REAL (WP) :: EXC_BD_T
|
||||
REAL (WP) :: E_XC_0
|
||||
REAL (WP) :: A_1(3),B_1(3),C_1(3),D_1(3)
|
||||
REAL (WP) :: A_2(3),B_2(3),C_2(3),D_2(3)
|
||||
REAL (WP) :: A1,A2,A3,P1,P2,U1,U2
|
||||
!
|
||||
DATA A_1 / 6.94759E0_WP, 7.70107E0_WP, 12.68820E0_WP / !
|
||||
DATA B_1 / -0.34608E0_WP, -0.95154E0_WP, -1.59703E0_WP / ! case r_s < 10
|
||||
DATA C_1 / -1.97251E0_WP, -1.80401E0_WP, -4.74435E0_WP / !
|
||||
DATA D_1 / 0.53700E0_WP, 0.49086E0_WP, 1.23569E0_WP / !
|
||||
!
|
||||
DATA A_2 / 1.54712E0_WP, 2.65068E0_WP, 3.07192E0_WP / !
|
||||
DATA B_2 / -1.97814E0_WP, -2.45160E0_WP, -4.65269E0_WP / ! case r_s > 10
|
||||
DATA C_2 / 1.42976E0_WP, 1.36907E0_WP, 1.36324E0_WP / !
|
||||
DATA D_2 / -0.32967E0_WP, -0.31701E0_WP, -0.32247E0_WP /
|
||||
!
|
||||
T2=T*T !
|
||||
!
|
||||
IF(RS <= 10.0E0_WP) THEN !
|
||||
!
|
||||
A1=DEXP(A_1(1)*DLOG(RS)+B_1(1)+C_1(1)*RS+D_1(1)*RS*DLOG(RS))!
|
||||
A2=DEXP(A_1(2)*DLOG(RS)+B_1(2)+C_1(2)*RS+D_1(2)*RS*DLOG(RS))! ref. (2) eq. (6)
|
||||
A3=DEXP(A_1(3)*DLOG(RS)+B_1(3)+C_1(3)*RS+D_1(3)*RS*DLOG(RS))!
|
||||
!
|
||||
ELSE !
|
||||
!
|
||||
A1=DEXP(A_2(1)*DLOG(RS)+B_2(1)+C_2(1)*RS+D_2(1)*RS*DLOG(RS))!
|
||||
A2=DEXP(A_2(2)*DLOG(RS)+B_2(2)+C_2(2)*RS+D_2(2)*RS*DLOG(RS))! ref. (2) eq. (6)
|
||||
A3=DEXP(A_2(3)*DLOG(RS)+B_2(3)+C_2(3)*RS+D_2(3)*RS*DLOG(RS))!
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
U1=1.5E0_WP/(RS*RS*RS) ! ref. (2) eq. (4)
|
||||
U2=DSQRT(SIX/RS)/RS ! ref. (2) eq. (5)
|
||||
!
|
||||
P1=(A2*U1+A3*U2)*T2 + A2*U2*T2*DSQRT(T) ! ref. (2) eq. (2)
|
||||
P2=ONE + A1*T2 + A3*T2*DSQRT(T) +A2*T2*T ! ref. (2) eq. (3)
|
||||
!
|
||||
EXC_BD_T=(E_XC_0 - P1)/P2 ! ref. (2) eq. (1)
|
||||
!
|
||||
END FUNCTION EXC_BD_T
|
||||
!
|
||||
!------> FXC-Based functionals
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION FXC_3D(FXC_TYPE,RS,T)
|
||||
!
|
||||
! This subroutine computes the XC free energy FXC
|
||||
! at a given value RS
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * FXC_TYPE : type of XC free energy functional
|
||||
! FXC_TYPE = 'EB' --> Ebeling et al
|
||||
! FXC_TYPE = 'IC' --> Ichimaru et al
|
||||
! FXC_TYPE = 'KS' --> Karasiev et al
|
||||
! FXC_TYPE = 'VS' --> Vashishta and Singwi
|
||||
! FXC_TYPE = 'PD' --> Perrot and Dharma-Wardana
|
||||
! FXC_TYPE = 'EK' --> Ebeling-Kraeft-Kremp-Röpke
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * FXC_3D : value at RS
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Jun 2020
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER*2 FXC_TYPE
|
||||
!
|
||||
REAL (WP) :: FXC_3D,RS,T
|
||||
!
|
||||
IF(FXC_TYPE == 'EB') THEN !
|
||||
FXC_3D=FXC_EB_T(RS,T) !
|
||||
ELSE IF(FXC_TYPE == 'IC') THEN !
|
||||
FXC_3D=FXC_IC_T(RS,T) !
|
||||
ELSE IF(FXC_TYPE == 'VS') THEN !
|
||||
FXC_3D=FXC_VS_T(RS,T) !
|
||||
ELSE IF(FXC_TYPE == 'PD') THEN !
|
||||
FXC_3D=FXC_PD_T(RS,T) !
|
||||
ELSE IF(FXC_TYPE == 'KS') THEN !
|
||||
FXC_3D=FXC_KS_T(RS,T) !
|
||||
ELSE IF(FXC_TYPE == 'EK') THEN !
|
||||
FXC_3D=FXC_EK_T(RS,T) !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION FXC_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE DERIVE_FXC_3D(FXC_TYPE,IDERIV,RS,TE,D_FXC)
|
||||
!
|
||||
! This subroutine computes the first derivative of the
|
||||
! exchange and correlation free energy F_xc with repect to Theta
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * FXC_TYPE : type of XC free energy functional
|
||||
! FXC_TYPE = 'EB' --> Ebeling et al
|
||||
! FXC_TYPE = 'IC' --> Ichimaru et al
|
||||
! FXC_TYPE = 'KS' --> Karasiev et al
|
||||
! FXC_TYPE = 'VS' --> Vashishta and Singwi
|
||||
! FXC_TYPE = 'PD' --> Perrot and Dharma-Wardana
|
||||
! FXC_TYPE = 'EK' --> Ebeling-Kraeft-Kremp-Röpke
|
||||
! * IDERIV : type of n_point formula used for derivation (n = IDERIV)
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
! * TE : temperature (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * D_FXC : first derivative at TH
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Jun 2020
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : ND_MAX
|
||||
USE CONSTANTS_P1, ONLY : K_B
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
USE DERIVATION
|
||||
USE INTERPOLATION, ONLY : INTERP_NR,SPLINE,SPLINT
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 2) :: FXC_TYPE
|
||||
!
|
||||
INTEGER :: IDERIV,I,LOGF
|
||||
!
|
||||
REAL (WP) :: RS,TI,TE,TH
|
||||
REAL (WP) :: D_FXC
|
||||
!
|
||||
REAL (WP) :: T(ND_MAX),FXC(ND_MAX)
|
||||
REAL (WP) :: D_FXC_1(ND_MAX)
|
||||
REAL (WP) :: R_MIN,R_MAX,T_MIN,T_MAX,STEP
|
||||
!
|
||||
TH=K_B*TE/EF_SI !
|
||||
!
|
||||
R_MIN=0.01E0_WP ! min value of TH
|
||||
R_MAX=50.01E0_WP ! max value of TH
|
||||
!
|
||||
T_MIN=EF_SI*R_MIN/K_B ! min value of T
|
||||
T_MAX=EF_SI*R_MAX/K_B ! max value of T
|
||||
STEP=(T_MAX-T_MIN)/DFLOAT(ND_MAX-1) ! step in T
|
||||
!
|
||||
LOGF=6 !
|
||||
!
|
||||
! Storing the exchange and correlation free energy FXC as a function of RS
|
||||
!
|
||||
DO I=1,ND_MAX !
|
||||
!
|
||||
T(I)=T_MIN+DFLOAT(I-1)*STEP !
|
||||
TI=T(I) !
|
||||
!
|
||||
IF(FXC_TYPE.EQ.'EB') THEN !
|
||||
FXC(I)=FXC_EB_T(RS,TI) !
|
||||
ELSEIF(FXC_TYPE.EQ.'IC') THEN !
|
||||
FXC(I)=FXC_IC_T(RS,TI) !
|
||||
ELSEIF(FXC_TYPE.EQ.'VS') THEN !
|
||||
FXC(I)=FXC_VS_T(RS,TI) !
|
||||
ELSEIF(FXC_TYPE.EQ.'PD') THEN !
|
||||
FXC(I)=FXC_PD_T(RS,TI) !
|
||||
ELSEIF(FXC_TYPE.EQ.'KS') THEN !
|
||||
FXC(I)=FXC_KS_T(RS,TI) !
|
||||
ELSEIF(FXC_TYPE.EQ.'EK') THEN !
|
||||
FXC(I)=FXC_EK_T(RS,TI) !
|
||||
ENDIF !
|
||||
!
|
||||
ENDDO !
|
||||
!
|
||||
! Computing the first derivatives with respect to T
|
||||
! with a IDERIV-point formula
|
||||
!
|
||||
CALL DERIV_1(FXC,ND_MAX,IDERIV,STEP,D_FXC_1) !
|
||||
!
|
||||
! Interpolation of derivative at TH
|
||||
!
|
||||
CALL INTERP_NR(LOGF,T,D_FXC_1,ND_MAX,TE,D_FXC) !
|
||||
!
|
||||
! Transforming d FXC / dt into d FXC / dTH
|
||||
!
|
||||
D_FXC=D_FXC*K_B/EF_SI !
|
||||
!
|
||||
END SUBROUTINE DERIVE_FXC_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE FXC_TO_EXC_3D(FXC_TYPE,RS,T,EXC)
|
||||
!
|
||||
! This subroutine transforms a XC free energy into an XC energy
|
||||
!
|
||||
! References: (1) S. Groth, T. Dornheim and M. Bonitz,
|
||||
! Contrib. Plasma Phys. 57, 137-146 (2017)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * FXC_TYPE : type of XC free energy functional
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * EXC : exchange and correlation energy (in Ryd)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Jun 2020
|
||||
!
|
||||
!
|
||||
USE CONSTANTS_P1, ONLY : K_B
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 2) :: FXC_TYPE
|
||||
!
|
||||
REAL (WP) :: RS,T
|
||||
REAL (WP) :: TH,FXC_3D_T,FXC,D_FXC,EXC
|
||||
!
|
||||
TH=K_B*T/EF_SI !
|
||||
!
|
||||
! Computing the XC free energy functional
|
||||
!
|
||||
FXC=FXC_3D(FXC_TYPE,RS,T) !
|
||||
!
|
||||
! Calling the derivative of FXC with respect to theta
|
||||
!
|
||||
CALL DERIVE_FXC_3D(FXC_TYPE,5,RS,T,D_FXC) !
|
||||
!
|
||||
EXC=FXC - TH*D_FXC ! ref. (1) eq. (20)
|
||||
!
|
||||
END SUBROUTINE FXC_TO_EXC_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION FXC_EB_T(RS,T)
|
||||
!
|
||||
! Temperature-dependent exchange and correlation free energy
|
||||
! for 3D systems as derived by Ebeling et al.
|
||||
!
|
||||
! References: (1) S. Groth, T. Dornheim and M. Bonitz,
|
||||
! Contrib. Plasma Phys. 57, 137-146 (2017)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * FXC_EB_T : exchange and correlation free energy (in Ryd)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,EIGHT, &
|
||||
HALF,THIRD,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : K_B
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
USE PI_ETC, ONLY : PI_INV,SQR_PI
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,T
|
||||
REAL (WP) :: FXC_EB_T
|
||||
REAL (WP) :: TH,ALPHA
|
||||
REAL (WP) :: TH1,TH3,XS
|
||||
REAL (WP) :: EXC
|
||||
REAL (WP) :: A,B,C,D
|
||||
REAL (WP) :: NUM,DEN
|
||||
!
|
||||
ALPHA=ALFA('3D') !
|
||||
!
|
||||
TH=K_B*T/EF_SI !
|
||||
TH1=ONE/TH ! 1 / TH
|
||||
TH3=TH1*TH1*TH1 ! 1 / TH^3
|
||||
XS=DSQRT(RS) !
|
||||
!
|
||||
! Ground-state parametrization of the XC energy
|
||||
!
|
||||
EXC=0.9163E0_WP/RS + 0.1244E0_WP*DLOG( &!
|
||||
ONE + (2.117E0_WP/XS)/&! ref. (1) eq. (4)
|
||||
(ONE + 0.3008E0_WP*XS) &!
|
||||
) !
|
||||
!
|
||||
A=TWO*THIRD/SQR_PI * DSQRT(EIGHT*THIRD) / (ALPHA*ALPHA) ! ref. (1) eq. (6)
|
||||
B=TWO*THIRD*PI_INV/ALPHA ! ref. (1) eq. (6)
|
||||
C=64.0E0_WP*THIRD*PI_INV ! ref. (1) eq. (6)
|
||||
D=FOURTH*(ONE+DLOG(TWO))*DSQRT(THREE)*ALPHA*ALPHA ! ref. (1) eq. (6)
|
||||
!
|
||||
NUM=A*DSQRT(TH1)/XS + B*TH1/RS + C*TH3*EXC ! ref. (1) eq. (5)
|
||||
DEN=ONE + D*TH1*XS + C*TH3 ! ref. (1) eq. (5)
|
||||
!
|
||||
FXC_EB_T=-HALF*NUM/DEN ! ref. (1) eq. (5)
|
||||
!
|
||||
END FUNCTION FXC_EB_T
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION FXC_IC_T(RS,T)
|
||||
!
|
||||
! Temperature-dependent exchange and correlation free energy
|
||||
! for 3D systems as derived by Ichimaru et al.
|
||||
!
|
||||
! References: (1) S. Groth, T. Dornheim and M. Bonitz,
|
||||
! Contrib. Plasma Phys. 57, 137-146 (2017)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * FXC_IC_T : exchange and correlation free energy (in Ryd)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,FOUR,HALF,THIRD
|
||||
USE CONSTANTS_P1, ONLY : K_B
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,T
|
||||
REAL (WP) :: FXC_IC_T
|
||||
REAL (WP) :: SQ2
|
||||
REAL (WP) :: TH1,TH2,TH3,TH4,XH1,XH2
|
||||
REAL (WP) :: RS2,XS
|
||||
REAL (WP) :: A,B,C,D,E,L,L2
|
||||
REAL (WP) :: BB,CC,DD,EE
|
||||
REAL (WP) :: NUM,DEN
|
||||
REAL (WP) :: X(17)
|
||||
REAL (WP) :: BCDE,ACE,SQED
|
||||
!
|
||||
DATA X / 3.4130800E-1_WP, 1.2070873E+1_WP, 1.148889E0_WP, & !
|
||||
1.0495346E+1_WP, 1.3266230E0_WP, 8.72496E-1_WP, & !
|
||||
2.5248E-2_WP, 6.14925E-1_WP, 1.6996055E+1_WP, & !
|
||||
1.489056E0_WP, 1.010935E+1_WP, 1.22184E0_WP, & ! ref. (1) table 1
|
||||
5.39409E-1_WP, 2.522206E0_WP, 1.78484E-1_WP, & !
|
||||
2.555501E0_WP, 1.46319E-1_WP / !
|
||||
!
|
||||
SQ2=DSQRT(TWO) !
|
||||
!
|
||||
L=ALFA('3D') !
|
||||
L2=L*L !
|
||||
!
|
||||
RS2=RS*RS !
|
||||
XS=DSQRT(RS) !
|
||||
!
|
||||
TH1=K_B*T/EF_SI !
|
||||
TH2=TH1*TH1 !
|
||||
TH3=TH2*TH1 !
|
||||
TH4=TH3*TH1 !
|
||||
XH1=DSQRT(TH1) !
|
||||
XH2=ONE/XH1 !
|
||||
!
|
||||
NUM=0.75E0_WP + 3.4363E0_WP*TH2 - 0.09227E0_WP*TH3 + & !
|
||||
1.7035E0_WP*TH4 !
|
||||
DEN=ONE + 8.31051E0_WP*TH2 + 5.1105E0_WP*TH4 ! ref. (1) eq. (11)
|
||||
A=0.610887E0_WP*TANH(ONE/TH1)*NUM/DEN !
|
||||
!
|
||||
NUM=X(1) + X(2)*TH2 + X(3)*TH4 !
|
||||
DEN=ONE + X(4)*TH2 + X(5)*TH4 ! ref. (1) eq. (12)
|
||||
B=NUM/DEN !
|
||||
!
|
||||
C=X(6) + X(7)*DEXP(-ONE/TH1) ! ref. (1) eq. (12)
|
||||
!
|
||||
NUM=X(8) + X(9)*TH2 + X(10)*TH4 !
|
||||
DEN=ONE + X(11)*TH2 + X(12)*TH4 ! ref. (1) eq. (13)
|
||||
D=NUM/DEN !
|
||||
!
|
||||
NUM=X(13) + X(14)*TH2 + X(15)*TH4 !
|
||||
DEN=ONE + X(16)*TH2 + X(17)*TH4 ! ref. (1) eq. (13)
|
||||
E=NUM/DEN !
|
||||
!
|
||||
BB=XH1*TANH(XH2)*B !
|
||||
DD=XH1*TANH(XH2)*D ! ref. (1) eq. (17)
|
||||
EE=TH1*TANH(ONE/TH1)*E !
|
||||
CC=EE*C !
|
||||
!
|
||||
ACE = A - CC/EE !
|
||||
BCDE=BB - CC*DD/EE !
|
||||
SQED=DSQRT(FOUR*EE-DD*DD) !
|
||||
!
|
||||
FXC_IC_T=-CC/(RS*EE) &!
|
||||
-HALF*TH1/(EE*RS2*L2) * (ACE - DD*BCDE/EE) &!
|
||||
*DLOG(DABS(TWO*EE*L2*RS/TH1 + SQ2*DD*L*XS*XH2+ONE)) &!
|
||||
-SQ2*BCDE*XH1/(EE*XS*L) &!
|
||||
+TH1*(DD*ACE+(TWO-DD*DD/EE)*BCDE)/(RS2*L2*EE*SQED) &!
|
||||
*( DATAN((TWO**1.5E0_WP * EE*L*XS*XH2 + DD)/SQED) - &!
|
||||
DATAN(DD/SQED) &!
|
||||
) !
|
||||
!
|
||||
END FUNCTION FXC_IC_T
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION FXC_VS_T(RS,T)
|
||||
!
|
||||
! Temperature-dependent exchange and correlation free energy
|
||||
! for 3D systems as derived by Vashishta-Singwi.
|
||||
!
|
||||
! References: (1) S. Groth, T. Dornheim and M. Bonitz,
|
||||
! Contrib. Plasma Phys. 57, 137-146 (2017)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * FXC_VS_T : exchange and correlation free energy (in Ryd)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,FOUR,HALF,THIRD
|
||||
USE CONSTANTS_P1, ONLY : K_B
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
USE SQUARE_ROOTS, ONLY : SQR2
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,T
|
||||
REAL (WP) :: FXC_VS_T
|
||||
REAL (WP) :: Q2
|
||||
REAL (WP) :: TH1,TH2,TH3,TH4,XH1,XH2
|
||||
REAL (WP) :: RS2,XS
|
||||
REAL (WP) :: A,B,C,D,E,L,L2
|
||||
REAL (WP) :: BB,CC,DD,EE
|
||||
REAL (WP) :: NUM,DEN
|
||||
REAL (WP) :: X(17)
|
||||
REAL (WP) :: BCDE,ACE,SQED
|
||||
!
|
||||
DATA X / 1.8871493E-1_WP, 1.0684788E+1_WP, 1.1088191E+2_WP, &!
|
||||
1.8015380E+1_WP, 1.2803540E+2_WP, 8.3331352E-1_WP, &!
|
||||
-1.1179213E-1_WP, 6.1492503E-1_WP, 1.6428929E+1_WP, &! ref. (1) table 2
|
||||
2.5963096E+1_WP, 1.0905162E+1_WP, 2.9942171E+1_WP, &!
|
||||
5.3940898E-1_WP, 5.8869626E+4_WP, 3.1165052E+3_WP, &!
|
||||
3.8887108E+4_WP, 2.1774472E+3_WP / !
|
||||
!
|
||||
L=ALFA('3D') !
|
||||
L2=L*L !
|
||||
!
|
||||
RS2=RS*RS !
|
||||
XS=DSQRT(RS) !
|
||||
!
|
||||
TH1=K_B*T/EF_SI !
|
||||
TH2=TH1*TH1 !
|
||||
TH3=TH2*TH1 !
|
||||
TH4=TH3*TH1 !
|
||||
XH1=DSQRT(TH1) !
|
||||
XH2=ONE/XH1 !
|
||||
!
|
||||
NUM=0.75E0_WP + 3.4363E0_WP*TH2 - 0.09227E0_WP*TH3 + & !
|
||||
1.7035E0_WP*TH4 !
|
||||
DEN=ONE + 8.31051E0_WP*TH2 + 5.1105E0_WP*TH4 ! ref. (1) eq. (11)
|
||||
A=0.610887E0_WP*TANH(ONE/TH1)*NUM/DEN !
|
||||
!
|
||||
NUM=X(1) + X(2)*TH2 + X(3)*TH4 !
|
||||
DEN=ONE + X(4)*TH2 + X(5)*TH4 ! ref. (1) eq. (12)
|
||||
B=NUM/DEN !
|
||||
!
|
||||
C=X(6) + X(7)*DEXP(-ONE/TH1) ! ref. (1) eq. (12)
|
||||
!
|
||||
NUM=X(8) + X(9)*TH2 + X(10)*TH4 !
|
||||
DEN=ONE + X(11)*TH2 + X(12)*TH4 ! ref. (1) eq. (13)
|
||||
D=NUM/DEN !
|
||||
!
|
||||
NUM=X(13) + X(14)*TH2 + X(15)*TH4 !
|
||||
DEN=ONE + X(16)*TH2 + X(17)*TH4 ! ref. (1) eq. (13)
|
||||
E=NUM/DEN !
|
||||
!
|
||||
BB=XH1*TANH(XH2)*B !
|
||||
DD=XH1*TANH(XH2)*D ! ref. (1) eq. (17)
|
||||
EE=TH1*TANH(ONE/TH1)*E !
|
||||
CC=EE*C !
|
||||
!
|
||||
ACE = A - CC/EE !
|
||||
BCDE=BB - CC*DD/EE !
|
||||
SQED=DSQRT(FOUR*EE-DD*DD) !
|
||||
!
|
||||
FXC_VS_T=-CC/(RS*EE) &!
|
||||
-HALF*TH1/(EE*RS2*L2) * (ACE - DD*BCDE/EE) &!
|
||||
*DLOG(DABS(TWO*EE*L2*RS/TH1 + SQR2*DD*L*XS*XH2+ONE))&!
|
||||
-SQR2*BCDE*XH1/(EE*XS*L) &!
|
||||
+TH1*(DD*ACE+(TWO-DD*DD/EE)*BCDE)/(RS2*L2*EE*SQED) &!
|
||||
*( DATAN((TWO**1.5E0_WP * EE*L*XS*XH2 + DD)/SQED) - &!
|
||||
DATAN(DD/SQED) &!
|
||||
) !
|
||||
!
|
||||
END FUNCTION FXC_VS_T
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION FXC_PD_T(RS,T)
|
||||
!
|
||||
! Temperature-dependent exchange and correlation free energy
|
||||
! for 3D systems as derived by Perrot and Dharma-Wardana.
|
||||
!
|
||||
! References: (1) S. Groth, T. Dornheim and M. Bonitz,
|
||||
! Contrib. Plasma Phys. 57, 137-146 (2017)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * FXC_PD_T : exchange and correlation free energy (in Ryd)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,FIVE,HALF,THIRD
|
||||
USE CONSTANTS_P1, ONLY : K_B
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,RS2,T,XS
|
||||
REAL (WP) :: FXC_PD_T
|
||||
REAL (WP) :: A1(3),B1(3),C1(3),A2(3),B2(3),C2(3)
|
||||
REAL (WP) :: V(3),R(3)
|
||||
REAL (WP) :: Y(3),Z(3),A(3),B(3)
|
||||
REAL (WP) :: TH1,TH2,TH3,XH1
|
||||
REAL (WP) :: Q1,Q2,Q3,XQ
|
||||
REAL (WP) :: N0,U1,U2,L,L2
|
||||
REAL (WP) :: NUM,DEN
|
||||
REAL (WP) :: P1,P2,EXC
|
||||
!
|
||||
INTEGER I
|
||||
!
|
||||
DATA A1 / 5.6304E0_WP, 5.2901E0_WP, 3.6854E0_WP / !
|
||||
DATA B1 / -2.2308E0_WP, -2.0512E0_WP, -1.5385E0_WP / !
|
||||
DATA C1 / 1.7624E0_WP, 1.6185E0_WP, 1.2629E0_WP / !
|
||||
DATA A2 / 2.6083E0_WP, -15.076E0_WP, 2.4071E0_WP / ! ref. (1) table 3
|
||||
DATA B2 / 1.2782E0_WP, 24.929E0_WP, 0.78293E0_WP / !
|
||||
DATA C2 / 0.16625E0_WP, 2.0261E0_WP, 0.095869E0_WP / !
|
||||
DATA V / 1.5E0_WP, 3.0E0_WP, 3.0E0_WP / !
|
||||
DATA R / 4.4467E0_WP, 4.5581E0_WP, 4.3909E0_WP / !
|
||||
!
|
||||
L=ALFA('3D') !
|
||||
L2=L*L !
|
||||
!
|
||||
RS2=RS*RS !
|
||||
XS=DSQRT(RS) !
|
||||
!
|
||||
TH1=K_B*T/EF_SI !
|
||||
TH2=TH1*TH1 !
|
||||
TH3=TH2*TH1 !
|
||||
XH1=DSQRT(TH1) !
|
||||
!
|
||||
Q1=HALF/(RS2*L2) !
|
||||
Q2=Q1*Q1 !
|
||||
Q3=Q2*Q1 !
|
||||
XQ=DSQRT(Q1) !
|
||||
!
|
||||
N0=THREE/(FOUR*PI*RS*RS2) ! electron density
|
||||
U1=HALF*PI*N0 !
|
||||
U2=TWO*THIRD*DSQRT(PI*N0) !
|
||||
!
|
||||
! Ground-state parametrization of the XC energy
|
||||
!
|
||||
EXC=0.9163E0_WP/RS + 0.1244E0_WP*DLOG( &!
|
||||
ONE + (2.117E0_WP/XS)/&! ref. (1) eq. (4)
|
||||
(ONE + 0.3008E0_WP*XS) &!
|
||||
) !
|
||||
!
|
||||
DO I=1,3
|
||||
B(I)=DEXP(FIVE*(RS-R(I))) !
|
||||
NUM=A1(I) + B1(I)*RS + C1(I)*RS2 !
|
||||
DEN=ONE + RS2/FIVE !
|
||||
Y(I)=V(I)*DLOG(RS) + NUM/DEN !
|
||||
NUM=A2(I) + B2(I)*RS !
|
||||
DEN=ONE + C2(I)*RS2 !
|
||||
Z(I)=RS*NUM/DEN !
|
||||
NUM=Y(I) + B(I)*Z(I) !
|
||||
DEN=ONE + B(I) !
|
||||
A(I)=DEXP(NUM/DEN) !
|
||||
ENDDO
|
||||
!
|
||||
P1=(A(2)*U1 + A(3)*U2)*TH2*Q2 + A(2)*U2*TH2*XH1*Q2*XQ !
|
||||
P2=ONE + A(1)*TH2*Q2 + A(3)*TH2*XH1*Q2*XQ + A(2)*TH3*Q3 !
|
||||
!
|
||||
FXC_PD_T=(EXC-P1)/P2 ! ref. (1) eq. (18)
|
||||
!
|
||||
END FUNCTION FXC_PD_T
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION FXC_KS_T(RS,T)
|
||||
!
|
||||
! Temperature-dependent exchange and correlation free energy
|
||||
! for 3D systems as derived by Karasiev et al.
|
||||
!
|
||||
! References: (1) S. Groth, T. Dornheim and M. Bonitz,
|
||||
! Contrib. Plasma Phys. 57, 137-146 (2017)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * FXC_KS_T : exchange and correlation free energy (in Ryd)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE
|
||||
USE CONSTANTS_P1, ONLY : K_B
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,T
|
||||
REAL (WP) :: FXC_KS_T
|
||||
REAL (WP) :: TH1,TH2,TH3,TH4,XH1,XH2,XS,L
|
||||
REAL (WP) :: B(4),C(3),D(5),E(5)
|
||||
REAL (WP) :: AA,BB,CC,DD,EE
|
||||
REAL (WP) :: NUM,DEN
|
||||
!
|
||||
DATA B / 0.283997E0_WP,48.932154E0_WP, & !
|
||||
0.370919E0_WP,61.095357E0_WP/ !
|
||||
DATA C / 0.870089E0_WP, 0.193077E0_WP, 2.414644E0_WP / !
|
||||
DATA D / 0.579824E0_WP,94.537454E0_WP,97.839603E0_WP, & !
|
||||
59.939999E0_WP,24.388037E0_WP / !
|
||||
DATA E / 0.212036E0_WP,16.731249E0_WP,28.485792E0_WP, & !
|
||||
34.028876E0_WP,17.235515E0_WP / !
|
||||
!
|
||||
XS=DSQRT(RS) !
|
||||
!
|
||||
TH1=K_B*T/EF_SI !
|
||||
TH2=TH1*TH1 !
|
||||
TH3=TH2*TH1 !
|
||||
TH4=TH3*TH1 !
|
||||
XH1=DSQRT(TH1) !
|
||||
XH2=ONE/XH1 !
|
||||
!
|
||||
L=ALFA('3D') !
|
||||
!
|
||||
NUM=0.75E0_WP + 3.4363E0_WP*TH2 - 0.09227E0_WP*TH3 + & !
|
||||
1.7035E0_WP*TH4 !
|
||||
DEN=ONE + 8.31051E0_WP*TH2 + 5.1105E0_WP*TH4 ! ref. (1) eq. (11)
|
||||
AA=0.610887E0_WP*TANH(ONE/TH1)*NUM/DEN !
|
||||
!
|
||||
NUM=B(1) + B(2)*TH2 + B(3)*TH4 !
|
||||
DEN=ONE + B(4)*TH2 + B(3)*TH4*DSQRT(1.5E0_WP)/L !
|
||||
BB=TANH(XH2)*NUM/DEN !
|
||||
!
|
||||
NUM=D(1) + D(2)*TH2 + D(3)*TH4 !
|
||||
DEN=ONE + D(4)*TH2 + D(5)*TH4 !
|
||||
DD=TANH(XH2)*NUM/DEN !
|
||||
!
|
||||
NUM=E(1) + E(2)*TH2 + E(3)*TH4 !
|
||||
DEN=ONE + E(4)*TH2 + E(5)*TH4 !
|
||||
EE=TANH(ONE/TH1)*NUM/DEN !
|
||||
!
|
||||
CC=(C(1) + C(2)*DEXP(-C(3)/TH1))*EE !
|
||||
!
|
||||
NUM=AA + BB*XS + CC*RS !
|
||||
DEN=ONE+ DD*XS + EE*RS !
|
||||
!
|
||||
FXC_KS_T=-NUM/(DEN*RS) ! ref. (1) eq. (19)
|
||||
!
|
||||
END FUNCTION FXC_KS_T
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION FXC_EK_T(RS,T)
|
||||
!
|
||||
! Temperature-dependent exchange and correlation free energy
|
||||
! for 3D systems as derived by Ebeling et al.
|
||||
!
|
||||
! References: (1) W. Ebeling, W. D. Kraeft, D. Kremp and G. Röpke,
|
||||
! Physica 140A, 160-168 (1986)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius of electron (in units of a_0)
|
||||
! * T : temperature (SI)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * FXC_EB_T : exchange and correlation free energy (in Ryd)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,SIX,HALF,THIRD
|
||||
USE CONSTANTS_P1, ONLY : K_B
|
||||
USE CONSTANTS_P2, ONLY : HARTREE
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL*8 RS,T
|
||||
REAL*8 FXC_EK_T
|
||||
REAL*8 RS2,RS3,RS4,RS5,RS6,RS7,XS
|
||||
REAL*8 SQ6
|
||||
REAL*8 TAU,TA2,TA3,XTA
|
||||
REAL*8 D0,D1,DH,AH,AW,B0,B1,C1,C2
|
||||
REAL*8 AWR,NUM,DEN
|
||||
!
|
||||
SQ6=DSQRT(SIX) !
|
||||
!
|
||||
RS2=RS*RS !
|
||||
RS3=RS2*RS !
|
||||
RS4=RS3*RS ! powers of RS
|
||||
RS5=RS4*RS !
|
||||
RS6=RS5*RS !
|
||||
RS7=RS6*RS !
|
||||
XS=DSQRT(RS) !
|
||||
!
|
||||
TAU=HALF*K_B*T/HARTREE ! ref. (1) eq. (21)
|
||||
TA2=TAU*TAU !
|
||||
TA3=TA2*TAU !
|
||||
XTA=DSQRT(TAU) !
|
||||
!
|
||||
D0=THIRD !
|
||||
D1= 0.3979E0_WP !
|
||||
DH= 0.0625E0_WP !
|
||||
AH=0.91633E0_WP ! ref. (1) table I
|
||||
AW=0.87553E0_WP !
|
||||
B0=0.06218E0_WP !
|
||||
B1= 0.0933E0_WP !
|
||||
!
|
||||
C1=50.0E0_WP + RS3 !
|
||||
C2= 2.3E0_WP !
|
||||
!
|
||||
AWR=TWO*B0*RS*DLOG( ONE + ONE/( XS*DEXP(-HALF*B1/B0) + & !
|
||||
TWO*B0*RS/AW & ! ref. (1) eq. (26)
|
||||
) & !
|
||||
) !
|
||||
!
|
||||
NUM=C1*(AH+AWR) + TWO*SQ6*D0*RS5*XS*TA2*XTA + & !
|
||||
24.0E0_WP*DH*RS4*TA2 !
|
||||
DEN=C1*RS + C2*RS4*TA2 + TWO*SQ6*D1*RS5*XS*TA2 + RS7*TA3 !
|
||||
!
|
||||
FXC_EK_T=-NUM/DEN ! ref. (1) eq. (25)
|
||||
!
|
||||
END FUNCTION FXC_EK_T
|
||||
!
|
||||
END MODULE XC_ENERGIES
|
|
@ -0,0 +1,412 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE M77ERR
|
||||
!
|
||||
! This module stores the IDELTA and IALPHA values
|
||||
!
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
!
|
||||
INTEGER :: IDELTA,IALPHA
|
||||
!
|
||||
END MODULE M77ERR
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE ERROR_CALTECH
|
||||
!
|
||||
! This module provides the Caltech error library routines
|
||||
!
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE DERM1(SUBNAM,INDIC,LEVEL,MSG,LABEL,VALUE,FLAG)
|
||||
!
|
||||
! Copyright (c) 1996 California Institute of Technology, Pasadena, CA.
|
||||
! ALL RIGHTS RESERVED.
|
||||
! Based on Government Sponsored Research NAS7-03001.
|
||||
!>> 1994-10-20 DERM1 Krogh Changes to use M77CON
|
||||
!>> 1994-04-20 DERM1 CLL Edited to make DP & SP files similar.
|
||||
!>> 1985-08-02 DERM1 Lawson Initial code.
|
||||
!--D replaces "?": ?ERM1, ?ERV1
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: INDIC,LEVEL
|
||||
!
|
||||
REAL (WP) :: VALUE
|
||||
!
|
||||
CHARACTER (LEN = *) :: SUBNAM,MSG,LABEL
|
||||
CHARACTER (LEN = 1) :: FLAG
|
||||
!
|
||||
CALL ERMSG(SUBNAM,INDIC,LEVEL,MSG,',') !
|
||||
CALL DERV1(LABEL,VALUE,FLAG) !
|
||||
!
|
||||
RETURN !
|
||||
!
|
||||
END SUBROUTINE DERM1
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE ERMSG(SUBNAM,INDIC,LEVEL,MSG,FLAG)
|
||||
!
|
||||
! Copyright (c) 1996 California Institute of Technology, Pasadena, CA.
|
||||
! ALL RIGHTS RESERVED.
|
||||
! Based on Government Sponsored Research NAS7-03001.
|
||||
!>> 1995-11-22 ERMSG Krogh Got rid of multiple entries.
|
||||
!>> 1995-09-15 ERMSG Krogh Remove '0' in format.
|
||||
!>> 1994-11-11 ERMSG Krogh Declared all vars.
|
||||
!>> 1992-10-20 ERMSG WV Snyder added ERLSET, ERLGET
|
||||
!>> 1985-09-25 ERMSG Lawson Initial code.
|
||||
!
|
||||
! --------------------------------------------------------------
|
||||
!
|
||||
! Four entries: ERMSG, ERMSET, ERLGET, ERLSET
|
||||
! ERMSG initiates an error message. This subr also manages the
|
||||
! saved value IDELOC and the saved COMMON block M77ERR to
|
||||
! control the level of action. This is intended to be the
|
||||
! only subr that assigns a value to IALPHA in COMMON.
|
||||
! ERMSET resets IDELOC & IDELTA. ERLGET returns the last value
|
||||
! of LEVEL passed to ERMSG. ERLSET sets the last value of LEVEL.
|
||||
! ERLSET and ERLGET may be used together to determine the level
|
||||
! of error that occurs during execution of a routine that uses
|
||||
! ERMSG.
|
||||
!
|
||||
! --------------------------------------------------------------
|
||||
! SUBROUTINE ARGUMENTS
|
||||
! --------------------
|
||||
! SUBNAM A name that identifies the subprogram in which
|
||||
! the error occurs.
|
||||
!
|
||||
! INDIC An integer printed as part of the mininal error
|
||||
! message. It together with SUBNAM can be used to
|
||||
! uniquely identify an error.
|
||||
!
|
||||
! LEVEL The user sets LEVEL=2,0,or -2 to specify the
|
||||
! nominal action to be taken by ERMSG. The
|
||||
! subroutine ERMSG contains an internal variable
|
||||
! IDELTA, whose nominal value is zero. The
|
||||
! subroutine will compute IALPHA = LEVEL + IDELTA
|
||||
! and proceed as follows:
|
||||
! If (IALPHA.GE.2) Print message and STOP.
|
||||
! If (IALPHA=-1,0,1) Print message and return.
|
||||
! If (IALPHA.LE.-2) Just RETURN.
|
||||
!
|
||||
! MSG Message to be printed as part of the diagnostic.
|
||||
!
|
||||
! FLAG A single character,which when set to '.' will
|
||||
! call the subroutine ERFIN and will just RETURN
|
||||
! when set to any other character.
|
||||
!
|
||||
! --------------------------------------------------------------
|
||||
!
|
||||
! C.Lawson & S.Chan, JPL, 1983 Nov
|
||||
!
|
||||
! ------------------------------------------------------------------
|
||||
!
|
||||
!
|
||||
USE M77ERR
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: INDIC,LEVEL
|
||||
INTEGER :: IDELOC
|
||||
!
|
||||
CHARACTER (LEN = *) :: SUBNAM,MSG
|
||||
CHARACTER (LEN = 1) :: FLAG
|
||||
!
|
||||
IDELOC = 0 !
|
||||
!
|
||||
IF(LEVEL < -1000) THEN !
|
||||
!
|
||||
! Setting a new IDELOC.
|
||||
!
|
||||
IDELTA = LEVEL + 10000 !
|
||||
IDELOC = IDELTA !
|
||||
RETURN !
|
||||
END IF !
|
||||
!
|
||||
IDELTA = IDELOC !
|
||||
IALPHA = LEVEL + IDELTA !
|
||||
IF (IALPHA >= -1) THEN !
|
||||
!
|
||||
! Setting FILE = 'CON' works for MS/DOS systems.
|
||||
!
|
||||
!
|
||||
WRITE (6,10) SUBNAM,INDIC !
|
||||
WRITE (6,*) MSG !
|
||||
IF (FLAG == '.') CALL ERFIN !
|
||||
END IF !
|
||||
!
|
||||
RETURN !
|
||||
!
|
||||
! Format:
|
||||
!
|
||||
10 FORMAT(1X/' ',72('$')/' SUBPROGRAM ',A,' REPORTS ERROR NO. ',I4)
|
||||
!
|
||||
END SUBROUTINE ERMSG
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE ERFIN
|
||||
! Copyright (c) 1996 California Institute of Technology, Pasadena, CA.
|
||||
! ALL RIGHTS RESERVED.
|
||||
! Based on Government Sponsored Research NAS7-03001.
|
||||
!>> 1994-11-11 CLL Typing all variables.
|
||||
!>> 1985-09-23 ERFIN Lawson Initial code.
|
||||
!
|
||||
!
|
||||
USE M77ERR
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
PRINT 10 !
|
||||
IF(IALPHA >= 2) STOP !
|
||||
!
|
||||
RETURN !
|
||||
!
|
||||
! Format:
|
||||
!
|
||||
10 FORMAT(1X,72('$')/' ')!!
|
||||
!
|
||||
END
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE ERMSET(IDEL)
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: IDEL
|
||||
!
|
||||
! Call ERMSG to set IDELTA and IDELOC
|
||||
!
|
||||
CALL ERMSG(' ', 0,IDEL-10000,' ',' ')
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE ERMSET
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE ERMOR(MSG,FLAG)
|
||||
!
|
||||
! Copyright (c) 1996 California Institute of Technology, Pasadena, CA.
|
||||
! ALL RIGHTS RESERVED.
|
||||
! Based on Government Sponsored Research NAS7-03001.
|
||||
!>> 1985-09-20 ERMOR Lawson Initial code.
|
||||
!
|
||||
! --------------------------------------------------------------
|
||||
! SUBROUTINE ARGUMENTS
|
||||
! --------------------
|
||||
! MSG Message to be printed as part of the diagnostic.
|
||||
!
|
||||
! FLAG A single character,which when set to '.' will
|
||||
! call the subroutine ERFIN and will just RETURN
|
||||
! when set to any other character.
|
||||
!
|
||||
! --------------------------------------------------------------
|
||||
!
|
||||
USE M77ERR
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = *) :: MSG
|
||||
CHARACTER (LEN = 1) :: FLAG
|
||||
!
|
||||
IF (IALPHA >= -1) THEN !
|
||||
WRITE (6,*) MSG !
|
||||
IF (FLAG .EQ. '.') CALL ERFIN !
|
||||
END IF !
|
||||
!
|
||||
RETURN !
|
||||
!
|
||||
END SUBROUTINE ERMOR
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE DERV1(LABEL,VALUE,FLAG)
|
||||
!
|
||||
! Copyright (c) 1996 California Institute of Technology, Pasadena, CA.
|
||||
! ALL RIGHTS RESERVED.
|
||||
! Based on Government Sponsored Research NAS7-03001.
|
||||
!>> 1994-10-20 DERV1 Krogh Changes to use M77CON
|
||||
!>> 1994-04-20 DERV1 CLL Edited to make DP & SP files similar.
|
||||
!>> 1985-09-20 DERV1 Lawson Initial code.
|
||||
!--D replaces "?": ?ERV1
|
||||
!
|
||||
! ------------------------------------------------------------
|
||||
! SUBROUTINE ARGUMENTS
|
||||
! --------------------
|
||||
! LABEL An identifing name to be printed with VALUE.
|
||||
!
|
||||
! VALUE A floating point number to be printed.
|
||||
!
|
||||
! FLAG See write up for FLAG in ERMSG.
|
||||
!
|
||||
! ------------------------------------------------------------
|
||||
!
|
||||
!
|
||||
USE M77ERR
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: VALUE
|
||||
!
|
||||
CHARACTER (LEN = *) :: LABEL
|
||||
CHARACTER (LEN = 1) :: FLAG
|
||||
!
|
||||
IF (IALPHA.GE.-1) THEN
|
||||
WRITE (*,*) ' ',LABEL,' = ',VALUE
|
||||
IF (FLAG.EQ.'.') CALL ERFIN
|
||||
ENDIF
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE DERV1
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE IERM1(SUBNAM,INDIC,LEVEL,MSG,LABEL,VALUE,FLAG)
|
||||
!
|
||||
! Copyright (c) 1996 California Institute of Technology, Pasadena, CA.
|
||||
! ALL RIGHTS RESERVED.
|
||||
! Based on Government Sponsored Research NAS7-03001.
|
||||
!>> 1990-01-18 CLL Added Integer stmt for VALUE. Typed all variables.
|
||||
!>> 1985-08-02 IERM1 Lawson Initial code.
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: INDIC,LEVEL,VALUE
|
||||
!
|
||||
CHARACTER (LEN = *) :: SUBNAM,MSG,LABEL
|
||||
CHARACTER (LEN = 1) :: FLAG
|
||||
!
|
||||
CALL ERMSG(SUBNAM,INDIC,LEVEL,MSG,',') !
|
||||
CALL IERV1(LABEL,VALUE,FLAG) !
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE IERM1
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE IERV1(LABEL,VALUE,FLAG)
|
||||
!
|
||||
! Copyright (c) 1996 California Institute of Technology, Pasadena, CA.
|
||||
! ALL RIGHTS RESERVED.
|
||||
! Based on Government Sponsored Research NAS7-03001.
|
||||
!>> 1995-11-15 IERV1 Krogh Moved format up for C conversion.
|
||||
!>> 1985-09-20 IERV1 Lawson Initial code.
|
||||
!
|
||||
! ------------------------------------------------------------
|
||||
! SUBROUTINE ARGUMENTS
|
||||
! --------------------
|
||||
! LABEL An identifing name to be printed with VALUE.
|
||||
!
|
||||
! VALUE A integer to be printed.
|
||||
!
|
||||
! FLAG See write up for FLAG in ERMSG.
|
||||
!
|
||||
! ------------------------------------------------------------
|
||||
!
|
||||
USE M77ERR
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: VALUE
|
||||
!
|
||||
CHARACTER (LEN = *) :: LABEL
|
||||
CHARACTER (LEN = 1) :: FLAG
|
||||
!
|
||||
IF (IALPHA >= -1) THEN !
|
||||
WRITE (6,10) LABEL,VALUE !
|
||||
IF(FLAG .EQ. '.') CALL ERFIN !
|
||||
END IF !
|
||||
!
|
||||
RETURN !
|
||||
!
|
||||
! Format:
|
||||
!
|
||||
10 FORMAT(3X,A,' = ',I5)
|
||||
!
|
||||
END
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE SERM1(SUBNAM,INDIC,LEVEL,MSG,LABEL,VALUE,FLAG)
|
||||
!
|
||||
! Copyright (c) 1996 California Institute of Technology, Pasadena, CA.
|
||||
! ALL RIGHTS RESERVED.
|
||||
! Based on Government Sponsored Research NAS7-03001.
|
||||
!>> 1994-10-20 SERM1 Krogh Changes to use M77CON
|
||||
!>> 1994-04-20 SERM1 CLL Edited to make DP & SP files similar.
|
||||
!>> 1985-08-02 SERM1 Lawson Initial code.
|
||||
!--S replaces "?": ?ERM1, ?ERV1
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: INDIC,LEVEL
|
||||
!
|
||||
REAL (WP) :: VALUE
|
||||
!
|
||||
CHARACTER (LEN = *) :: SUBNAM,MSG,LABEL
|
||||
CHARACTER (LEN = 1) :: FLAG
|
||||
!
|
||||
CALL ERMSG(SUBNAM,INDIC,LEVEL,MSG,',') !
|
||||
CALL SERV1(LABEL,VALUE,FLAG) !
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE SERM1
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE SERV1(LABEL,VALUE,FLAG)
|
||||
!
|
||||
! Copyright (c) 1996 California Institute of Technology, Pasadena, CA.
|
||||
! ALL RIGHTS RESERVED.
|
||||
! Based on Government Sponsored Research NAS7-03001.
|
||||
!>> 1994-10-20 SERV1 Krogh Changes to use M77CON
|
||||
!>> 1994-04-20 SERV1 CLL Edited to make DP & SP files similar.
|
||||
!>> 1985-09-20 SERV1 Lawson Initial code.
|
||||
!--S replaces "?": ?ERV1
|
||||
!
|
||||
! ------------------------------------------------------------
|
||||
! SUBROUTINE ARGUMENTS
|
||||
! --------------------
|
||||
! LABEL An identifing name to be printed with VALUE.
|
||||
!
|
||||
! VALUE A floating point number to be printed.
|
||||
!
|
||||
! FLAG See write up for FLAG in ERMSG.
|
||||
!
|
||||
! ------------------------------------------------------------
|
||||
!
|
||||
USE M77ERR
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: VALUE
|
||||
!
|
||||
CHARACTER (LEN = *) :: LABEL
|
||||
CHARACTER (LEN = 1) :: FLAG
|
||||
!
|
||||
IF(IALPHA >= -1) THEN !
|
||||
WRITE(6,*) ' ',LABEL,' = ',VALUE !
|
||||
IF(FLAG == '.') CALL ERFIN !
|
||||
END IF !
|
||||
!
|
||||
RETURN !
|
||||
!
|
||||
END SUBROUTINE SERV1
|
||||
!
|
||||
END MODULE ERROR_CALTECH
|
|
@ -0,0 +1,306 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CHANGE_FILENAMES
|
||||
!
|
||||
! This module changes all the output filenames by
|
||||
! incorporating into them a string characteristic of
|
||||
! the calculation performed
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE LOGFILE_NAMES(N_IF,LOGFILE)
|
||||
!
|
||||
! This subroutine constructs the name of the logfiles when
|
||||
! several input data file are read in
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * N_IF : number of input data file
|
||||
!
|
||||
!
|
||||
! Uutput parameters:
|
||||
!
|
||||
! * LOGFILE : array containing the names of the log files
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 8 Sep 2020
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: N_IF,JF
|
||||
!
|
||||
CHARACTER (LEN = 100) :: LOGFILE(999)
|
||||
CHARACTER (LEN = 7) :: BASENAME
|
||||
CHARACTER (LEN = 4) :: EXTENSION
|
||||
CHARACTER (LEN = 1) :: UNDSC
|
||||
!
|
||||
BASENAME = 'epsilon' !
|
||||
EXTENSION = '.lis' !
|
||||
UNDSC = '_' !
|
||||
!
|
||||
IF(N_IF == 1) THEN !
|
||||
LOGFILE(1) = BASENAME//EXTENSION !
|
||||
ELSE
|
||||
DO JF = 1,N_IF !
|
||||
LOGFILE(JF) = BASENAME//UNDSC//NUM2STRING(JF)//EXTENSION !
|
||||
END DO !
|
||||
END IF
|
||||
!
|
||||
END SUBROUTINE LOGFILE_NAMES
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION NUM2STRING(NUM)
|
||||
!
|
||||
! This function converts an integer into the corresponding
|
||||
! character string, including the zeros (e. g. 3 --> 003)
|
||||
!
|
||||
! This version: limited to 999
|
||||
!
|
||||
!
|
||||
! Input parameter:
|
||||
!
|
||||
! * NUM : number to be transformed into a string
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 8 Sep 2020
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER, PARAMETER :: N_LE = 3 ! max. number of digits
|
||||
INTEGER, PARAMETER :: N_IF = 999 ! max. number of input files
|
||||
!
|
||||
CHARACTER (LEN = N_LE) :: NUM2STRING
|
||||
!
|
||||
INTEGER :: NUM
|
||||
INTEGER :: JF
|
||||
INTEGER :: I_D1,I_D2,I_D3
|
||||
INTEGER :: NNUM
|
||||
!
|
||||
! Initialisation of the digits to 0
|
||||
!
|
||||
I_D1 = 48
|
||||
I_D2 = 48
|
||||
I_D3 = 48
|
||||
!
|
||||
DO JF = 1,N_IF ! start loop on files
|
||||
!
|
||||
I_D1 = I_D1 + 1 ! incrementation of 1st digit
|
||||
IF(I_D1 == 58) THEN
|
||||
I_D1 = 48
|
||||
I_D2 = I_D2 + 1 ! incrementation of 2nd digit
|
||||
IF(I_D2 == 58) THEN
|
||||
I_D2 = 48
|
||||
I_D3 = I_D3 + 1 ! incrementation of 3rd digit
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
NNUM = (I_D3 - 48) * 100 + (I_D2 - 48) * 10 + (I_D1 - 48) ! number generated
|
||||
!
|
||||
IF(NUM == NNUM) GO TO 10
|
||||
!
|
||||
END DO
|
||||
!
|
||||
10 NUM2STRING = CHAR(I_D3)//CHAR(I_D2)//CHAR(I_D1)
|
||||
!
|
||||
END FUNCTION NUM2STRING
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE NEW_FILENAMES(N_IF,JF,FLIST)
|
||||
!
|
||||
! This subroutine changes all the output filenames by
|
||||
! incorporating into them a string characteristic of
|
||||
! the calculation performed
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * N_IF : number of input data file
|
||||
! * J F : current input data file
|
||||
!
|
||||
!
|
||||
! Input/output parameters:
|
||||
!
|
||||
! * FLIST : array containing the names of the output files
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Sep 2020
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NOFFN
|
||||
USE OUT_VALUES_10
|
||||
USE OUTFILES
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER, INTENT(IN) :: N_IF
|
||||
INTEGER, INTENT(IN) :: JF
|
||||
!
|
||||
INTEGER :: FILE
|
||||
!
|
||||
CHARACTER (LEN = 100), INTENT(INOUT) :: FLIST(NOFFN)
|
||||
!
|
||||
CHARACTER (LEN = 100) :: CLIST(NOFFN)
|
||||
CHARACTER (LEN = 100) :: INFILE
|
||||
CHARACTER (LEN = 100) :: OUTFILE
|
||||
CHARACTER (LEN = 100) :: STRING
|
||||
CHARACTER (LEN = 1) :: UNDSC
|
||||
!
|
||||
UNDSC = '_' !
|
||||
!
|
||||
IF(N_IF == 1) THEN !
|
||||
!
|
||||
! Only the type of calculation can be appended
|
||||
!
|
||||
IF(I_FN == 1) THEN !
|
||||
!
|
||||
CALL CALC_TYPE(CLIST) !
|
||||
CALL OUT_FILES(FLIST) !
|
||||
!
|
||||
DO FILE = 7,NOFFN !
|
||||
!
|
||||
INFILE = FLIST(FILE) !
|
||||
STRING = CLIST(FILE) !
|
||||
!
|
||||
CALL CHG_FILENAME(INFILE,STRING,OUTFILE) !
|
||||
!
|
||||
FLIST(FILE) = OUTFILE !
|
||||
!
|
||||
END DO !
|
||||
!
|
||||
ELSE !
|
||||
!
|
||||
CALL OUT_FILES(FLIST) !
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
ELSE !
|
||||
!
|
||||
IF(I_FN == 1) THEN !
|
||||
!
|
||||
! Type of calculation appended + input data file number appended
|
||||
!
|
||||
CALL CALC_TYPE(CLIST) !
|
||||
CALL OUT_FILES(FLIST) !
|
||||
!
|
||||
DO FILE = 7,NOFFN !
|
||||
!
|
||||
INFILE = FLIST(FILE) !
|
||||
!
|
||||
! Checking if input data file number must ne appended
|
||||
!
|
||||
IF(INDEX_FILE(FILE) == 0) THEN !
|
||||
STRING = CLIST(FILE)//UNDSC//NUM2STRING(JF) !
|
||||
ELSE !
|
||||
STRING = CLIST(FILE) !
|
||||
END IF !
|
||||
!
|
||||
CALL CHG_FILENAME(INFILE,STRING,OUTFILE) !
|
||||
!
|
||||
FLIST(FILE) = OUTFILE !
|
||||
!
|
||||
END DO !
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
! Only input data file number appended
|
||||
!
|
||||
CALL OUT_FILES(FLIST) !
|
||||
!
|
||||
DO FILE = 7,NOFFN !
|
||||
!
|
||||
INFILE = FLIST(FILE) !
|
||||
!
|
||||
! Checking if input data file number must ne appended
|
||||
!
|
||||
IF(INDEX_FILE(FILE) == 0) THEN !
|
||||
STRING = NUM2STRING(JF) !
|
||||
CALL CHG_FILENAME(INFILE,STRING,OUTFILE) !
|
||||
FLIST(FILE) = OUTFILE !
|
||||
END IF !
|
||||
!
|
||||
END DO !
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE NEW_FILENAMES
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CHG_FILENAME(INFILE,STRING,OUTFILE)
|
||||
!
|
||||
! This subroutine incorporates a given string
|
||||
! into a filename
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * INFILE : name of input file
|
||||
! * STRING : string to be appended
|
||||
!
|
||||
!
|
||||
! Input/output parameters:
|
||||
!
|
||||
! * OUTFILE : name of output file
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 7 Sep 2020
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER, PARAMETER :: N_LENGTH = 100
|
||||
!
|
||||
CHARACTER (LEN = 100), INTENT(IN) :: INFILE
|
||||
CHARACTER (LEN = 100), INTENT(OUT) :: OUTFILE
|
||||
!
|
||||
CHARACTER (LEN = 100) :: STRING
|
||||
!
|
||||
INTEGER :: J_CHAR
|
||||
INTEGER :: N_DOT,N_CHAR
|
||||
!
|
||||
! Finding the real size of the file name
|
||||
! and the position of the dot
|
||||
!
|
||||
N_DOT = 1 !
|
||||
DO J_CHAR = 1,N_LENGTH !
|
||||
IF(INFILE(J_CHAR:J_CHAR).EQ.'.') GO TO 10 !
|
||||
N_DOT = N_DOT + 1 !
|
||||
END DO !
|
||||
!
|
||||
10 CONTINUE !
|
||||
!
|
||||
N_CHAR = 0 !
|
||||
DO J_CHAR = 1,N_LENGTH !
|
||||
IF(INFILE(J_CHAR:J_CHAR).EQ.' ') GO TO 20 !
|
||||
N_CHAR = N_CHAR + 1 !
|
||||
END DO !
|
||||
!
|
||||
20 CONTINUE !
|
||||
!
|
||||
! Incorporation of the string
|
||||
!
|
||||
OUTFILE = INFILE(1:N_DOT-1)//'_'//TRIM(STRING)// & !
|
||||
INFILE(N_DOT:N_CHAR) !
|
||||
!
|
||||
END SUBROUTINE CHG_FILENAME
|
||||
!
|
||||
END MODULE CHANGE_FILENAMES
|
|
@ -0,0 +1,321 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CLOSE_OUTFILES
|
||||
!
|
||||
! This module contains the subroutine that opens the output files
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CLOSE_OUTPUT_FILES(IND)
|
||||
!
|
||||
! This subroutine open the output files for printing
|
||||
!
|
||||
!
|
||||
! Input parameter:
|
||||
!
|
||||
! * IND : integer specifying which files have to be closed
|
||||
! IND = 0 files indexed with input data file
|
||||
! IND = 1 files not indexed with input data file
|
||||
!
|
||||
! (see FUNCTION INDEX_FILE(I_UNIT) in outfiles.f90 for more details)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 26 Jan 2021
|
||||
!
|
||||
!
|
||||
USE OUT_VALUES_1
|
||||
USE OUT_VALUES_2
|
||||
USE OUT_VALUES_3
|
||||
USE OUT_VALUES_4
|
||||
USE OUT_VALUES_5
|
||||
USE OUT_VALUES_6
|
||||
USE OUT_VALUES_7
|
||||
USE OUT_VALUES_8
|
||||
USE OUT_VALUES_9
|
||||
USE OUT_VALUES_P
|
||||
!
|
||||
USE OUTFILES
|
||||
!
|
||||
USE PRINT_FILES
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: IND
|
||||
!
|
||||
IF(I_DF == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_DF)) CLOSE(IO_DF) ! dielectric function file
|
||||
END IF !
|
||||
IF(I_PZ == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_PZ)) CLOSE(IO_PZ) ! polarization function
|
||||
END IF !
|
||||
IF(I_SU == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_SU)) CLOSE(IO_SU) ! susceptibility function
|
||||
END IF !
|
||||
IF(I_CD == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_CD)) CLOSE(IO_CD) ! electrical conductivity
|
||||
END IF !
|
||||
!
|
||||
IF(I_PD == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_PD)) CLOSE(IO_PD) ! plasmon dispersion file
|
||||
END IF !
|
||||
IF(I_EH == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_EH)) CLOSE(IO_EH) ! electron-hole dispersion file
|
||||
END IF !
|
||||
IF(I_E2 == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_E2)) CLOSE(IO_E2) ! two electron-hole dispersion
|
||||
END IF !
|
||||
IF(I_CF == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_CK)) CLOSE(IO_CK) ! screened Coulomb (k-space)
|
||||
END IF !
|
||||
IF(I_CR == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_CR)) CLOSE(IO_CR) ! screened Coulomb (real space)
|
||||
END IF !
|
||||
IF(I_PK == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_PK)) CLOSE(IO_PK) ! plasmon kinetic energy
|
||||
END IF !
|
||||
!
|
||||
IF(I_LF == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_LF)) CLOSE(IO_LF) ! local-field correction file G(q,om)
|
||||
END IF !
|
||||
IF(I_IQ == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_IQ)) CLOSE(IO_IQ) ! G(q,inf) file
|
||||
END IF !
|
||||
IF(I_SF == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_SF)) CLOSE(IO_SF) ! structure factor file S(q,om)
|
||||
END IF !
|
||||
IF(I_PC == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_PC)) CLOSE(IO_PC) ! pair correlation function file
|
||||
END IF !
|
||||
IF(I_P2 == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_P2)) CLOSE(IO_P2) ! pair distribution function file
|
||||
END IF !
|
||||
IF(I_VX == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_VX)) CLOSE(IO_VX) ! vertex function Gamma(q,om)
|
||||
END IF !
|
||||
IF(I_DC == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_DC)) CLOSE(IO_DC) ! plasmon damping coefficient Im[eps]/q^2
|
||||
END IF !
|
||||
IF(I_MD == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_MD)) CLOSE(IO_MD) ! momentum distribution
|
||||
END IF !
|
||||
IF(I_LD == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_LD)) CLOSE(IO_LD) ! Landau parameters
|
||||
END IF !
|
||||
IF(I_DP == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_DP)) CLOSE(IO_DP) ! damping file
|
||||
END IF !
|
||||
IF(I_LT == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_LT)) CLOSE(IO_LT) ! plasmon lifetime file
|
||||
END IF !
|
||||
IF(I_BR == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_BR)) CLOSE(IO_BR) ! plasmon broadening
|
||||
END IF !
|
||||
IF(I_PE == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_PE)) CLOSE(IO_PE) ! plasmon energy
|
||||
END IF !
|
||||
IF(I_QC == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_QC)) CLOSE(IO_QC) ! plasmon q-bounds
|
||||
END IF !
|
||||
IF(I_RL == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_RL)) CLOSE(IO_RL) ! relaxation time
|
||||
END IF !
|
||||
IF(I_KS == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_KS)) CLOSE(IO_KS) ! screening wave vector
|
||||
END IF !
|
||||
IF(I_OQ == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_OQ)) CLOSE(IO_OQ) ! omega = q * v_F
|
||||
END IF !
|
||||
IF(I_ME == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_ME)) CLOSE(IO_ME) ! moments of epsilon
|
||||
END IF !
|
||||
IF(I_MS == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_MS)) CLOSE(IO_MS) ! moments of S(q,omega)
|
||||
END IF !
|
||||
IF(I_ML == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_ML)) CLOSE(IO_ML) ! moments of loss function
|
||||
END IF !
|
||||
IF(I_MC == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_MC)) CLOSE(IO_MC) ! moments of conductivity
|
||||
END IF !
|
||||
IF(I_DE == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_DE)) CLOSE(IO_DE) ! derivative of Re[ dielectric function ]
|
||||
END IF !
|
||||
IF(I_ZE == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_ZE)) CLOSE(IO_ZE) ! Re[ dielectric function ] = 0
|
||||
END IF !
|
||||
IF(I_SR == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_SR)) CLOSE(IO_SR) ! sum rules for epsilon
|
||||
END IF !
|
||||
IF(I_CW == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_CW)) CLOSE(IO_CW) ! confinement wave function
|
||||
END IF !
|
||||
IF(I_CF == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_CF)) CLOSE(IO_CF) ! confinement potential
|
||||
END IF !
|
||||
IF(I_EM == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_EM)) CLOSE(IO_EM) ! effective mass
|
||||
END IF !
|
||||
IF(I_MF == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_MF)) CLOSE(IO_MF) ! mean free path
|
||||
END IF !
|
||||
IF(I_SP == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_SP)) CLOSE(IO_SP) ! spectral function
|
||||
END IF !
|
||||
IF(I_SE == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_SE)) CLOSE(IO_SE) ! self-energy
|
||||
END IF !
|
||||
IF(I_SB == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_SB)) CLOSE(IO_SB) ! subband energies
|
||||
END IF !
|
||||
IF(I_ES == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_ES)) CLOSE(IO_ES) ! Eliashberg function
|
||||
END IF !
|
||||
IF(I_GR == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_GR)) CLOSE(IO_GR) ! Grüneisen parameter
|
||||
END IF !
|
||||
IF(I_FD == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_FD)) CLOSE(IO_FD) ! Fermi-Dirac distribution
|
||||
END IF !
|
||||
IF(I_BE == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_BE)) CLOSE(IO_BE) ! Bose-Einstein distribution
|
||||
END IF !
|
||||
IF(I_MX == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_MX)) CLOSE(IO_MX) ! Maxwell distribution
|
||||
END IF !
|
||||
IF(I_SC == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_SC)) CLOSE(IO_SC) ! scale parameters
|
||||
END IF !
|
||||
IF(I_DS == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_DS)) CLOSE(IO_DS) ! density of states
|
||||
END IF !
|
||||
IF(I_NV == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_NV)) CLOSE(IO_NV) ! Nevanlinaa function
|
||||
END IF !
|
||||
IF(I_MT == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_MT)) CLOSE(IO_MT) ! time domain memory function
|
||||
END IF !
|
||||
!
|
||||
IF(I_GP == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_GP)) CLOSE(IO_GP) ! grand partition function
|
||||
END IF !
|
||||
IF(I_PR == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_PR)) CLOSE(IO_PR) ! electronic pressure
|
||||
END IF !
|
||||
IF(I_CO == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_CO)) CLOSE(IO_CO) ! compressibility
|
||||
END IF !
|
||||
IF(I_CP == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_CP)) CLOSE(IO_CP) ! chemical potential
|
||||
END IF !
|
||||
IF(I_BM == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_BM)) CLOSE(IO_BM) ! bulk modulus
|
||||
END IF !
|
||||
IF(I_SH == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_SH)) CLOSE(IO_SH) ! shear modulus
|
||||
END IF !
|
||||
IF(I_S0 == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_S0)) CLOSE(IO_S0) ! zero sound velocity
|
||||
END IF !
|
||||
IF(I_S1 == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_S1)) CLOSE(IO_S1) ! first sound velocity
|
||||
END IF !
|
||||
IF(I_DT == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_DT)) CLOSE(IO_DT) ! Debye temperature
|
||||
END IF !
|
||||
IF(I_PS == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_PS)) CLOSE(IO_PS) ! Pauli paramagnetic susceptibility
|
||||
END IF !
|
||||
IF(I_IE == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_IE)) CLOSE(IO_IE) ! internal energy
|
||||
END IF !
|
||||
IF(I_EI == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_EI)) CLOSE(IO_EI) ! excess internal energy
|
||||
END IF !
|
||||
IF(I_FH == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_FH)) CLOSE(IO_FH) ! Helmholtz free energy
|
||||
END IF !
|
||||
IF(I_EY == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_EY)) CLOSE(IO_EY) ! entropy
|
||||
END IF !
|
||||
!
|
||||
IF(I_EF == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_EF)) CLOSE(IO_EF) ! Fermi energy
|
||||
END IF !
|
||||
IF(I_KF == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_KF)) CLOSE(IO_KF) ! Fermi momentum
|
||||
END IF !
|
||||
IF(I_VF == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_VF)) CLOSE(IO_VF) ! Fermi velocity
|
||||
END IF !
|
||||
IF(I_TE == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_TE)) CLOSE(IO_TE) ! Fermi temperature
|
||||
END IF !
|
||||
IF(I_DL == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_DL)) CLOSE(IO_DL) ! Fermi density of states
|
||||
END IF !
|
||||
!
|
||||
IF(I_TW == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_TW)) CLOSE(IO_TW) ! thermal De Broglie wavelength
|
||||
END IF !
|
||||
IF(I_VT == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_VT)) CLOSE(IO_VT) ! thermal velocity
|
||||
END IF !
|
||||
IF(I_TC == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_TC)) CLOSE(IO_TC) ! thermal conductivity
|
||||
END IF !
|
||||
!
|
||||
IF(I_EG == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_EG)) CLOSE(IO_EG) ! ground state energy
|
||||
END IF !
|
||||
IF(I_EX == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_EX)) CLOSE(IO_EX) ! exchange energy
|
||||
END IF !
|
||||
IF(I_XC == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_XC)) CLOSE(IO_XC) ! exchange correlation energy
|
||||
END IF !
|
||||
IF(I_EC == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_EC)) CLOSE(IO_EC) ! correlation energy
|
||||
END IF !
|
||||
IF(I_HF == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_HF)) CLOSE(IO_HF) ! Hartree-Fock energy
|
||||
END IF !
|
||||
IF(I_EK == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_EK)) CLOSE(IO_EK) ! kinetic energy
|
||||
END IF !
|
||||
IF(I_EP == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_EP)) CLOSE(IO_EP) ! potential energy
|
||||
END IF !
|
||||
!
|
||||
IF(I_VI == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_VI)) CLOSE(IO_VI) ! shear viscosity
|
||||
END IF !
|
||||
IF(I_DI == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_DI)) CLOSE(IO_DI) ! diffusion coefficient
|
||||
END IF !
|
||||
!
|
||||
IF(I_FP == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_FP)) CLOSE(IO_FP) ! fluctuation potential file
|
||||
END IF !
|
||||
IF(I_EL == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_EL)) CLOSE(IO_EL) ! energy loss function
|
||||
END IF !
|
||||
IF(I_PO == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_PO)) CLOSE(IO_PO) ! stopping power
|
||||
END IF !
|
||||
IF(I_RF == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_RF)) CLOSE(IO_RF) ! refractive index
|
||||
END IF !
|
||||
IF(I_VC == 1) THEN !
|
||||
IF(IND == INDEX_FILE(IO_VC)) CLOSE(IO_VC) ! dynamic screened Coulomb potential V(q,omega)
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE CLOSE_OUTPUT_FILES
|
||||
!
|
||||
END MODULE CLOSE_OUTFILES
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
Dielectric functions:
|
||||
|
||||
|
||||
--> Schrödinger materials
|
||||
|
||||
1) static:
|
||||
|
||||
* Thomas-Fermi
|
||||
* RPA longitudinal 2D + magnetic field
|
||||
* RPA longitudinal 1D, 2D, 3D
|
||||
|
||||
2) dynamic:
|
||||
|
||||
* Vlasov longitudinal 3D
|
||||
* VFP longitudinal 3D + relaxation time
|
||||
* RPA longitudinal 1D, 2D, 3D
|
||||
* RPA longitudinal 3D + temperature
|
||||
* RPA longitudinal 2D + magnetic field
|
||||
* plasmon pole longitudinal 1D, 2D, 3D
|
||||
* Nevanlinna
|
||||
* mean spherical longitudinal 3D
|
||||
* Mermin longitudinal 3D + temperature
|
||||
* Klimontovich-Kraeft longitudinal 3D (non degenerate/highly degenerate)
|
||||
* hydrodynamic longitudinal 3D + relaxation time
|
||||
* Hu-O'Connell 1D, 2D, 3D + diffusion coefficient
|
||||
* Hartree-Fock longitudinal 3D
|
||||
* Hertel-Appel longitudinal 3D
|
||||
* Arista-Brandt longitudinal 3D + temperature (Dandrea-Ashcroft-Carlsson par.)
|
||||
* Boltzmann longitudinal 3D
|
||||
* Boltzmann longitudinal 3D+ relaxation time
|
||||
* Boltzmann transverse 3D+ relaxation time
|
||||
|
||||
Waiting to be coded:
|
||||
* Atwal-Ashcroft 3D
|
||||
* Utsumi-Ichimaru longitudinal 3D
|
||||
* Kleinman longitudinal 3D
|
||||
|
||||
|
||||
--> Dirac materials
|
||||
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE FILENAMES
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 100) :: DFFILE,PZFILE,SUFILE,CDFILE
|
||||
!
|
||||
CHARACTER (LEN = 100) :: PDFILE,EHFILE,E2FILE,CKFILE,CRFILE,PKFILE
|
||||
!
|
||||
CHARACTER (LEN = 100) :: LFFILE,IQFILE,SFFILE,PCFILE,VXFILE,DCFILE
|
||||
CHARACTER (LEN = 100) :: P2FILE
|
||||
CHARACTER (LEN = 100) :: MDFILE,LDFILE,DPFILE,LTFILE,BRFILE,PEFILE
|
||||
CHARACTER (LEN = 100) :: QCFILE,RLFILE,KSFILE,OQFILE,MEFILE,MSFILE
|
||||
CHARACTER (LEN = 100) :: MLFILE,MCFILE,DEFILE,ZEFILE,SRFILE,CWFILE
|
||||
CHARACTER (LEN = 100) :: CFFILE,EMFILE,MFFILE,SPFILE,SEFILE,SBFILE
|
||||
CHARACTER (LEN = 100) :: ESFILE,GRFILE,FDFILE,BEFILE,MXFILE,SCFILE
|
||||
CHARACTER (LEN = 100) :: DSFILE,NVFILE,MTFILE
|
||||
!
|
||||
CHARACTER (LEN = 100) :: GPFILE,PRFILE,COFILE,CPFILE,BMFILE,SHFILE
|
||||
CHARACTER (LEN = 100) :: S0FILE,S1FILE,DTFILE,PSFILE,IEFILE,EIFILE
|
||||
CHARACTER (LEN = 100) :: FHFILE,EYFILE
|
||||
!
|
||||
CHARACTER (LEN = 100) :: EFFILE,KFFILE,VFFILE,TEFILE,DLFILE
|
||||
!
|
||||
CHARACTER (LEN = 100) :: TWFILE,VTFILE,TCFILE
|
||||
!
|
||||
CHARACTER (LEN = 100) :: EGFILE,EXFILE,XCFILE,ECFILE,HFFILE,EKFILE
|
||||
CHARACTER (LEN = 100) :: EPFILE
|
||||
!
|
||||
CHARACTER (LEN = 100) :: VIFILE,DIFILE
|
||||
!
|
||||
CHARACTER (LEN = 100) :: FPFILE,ELFILE,POFILE,RFFILE,VCFILE
|
||||
!
|
||||
END MODULE FILENAMES
|
|
@ -0,0 +1,617 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE MATERIAL_PROP
|
||||
!
|
||||
! This module contains input values for the material's properties
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,MSOM,EPS_B
|
||||
!
|
||||
CHARACTER (LEN = 5) :: MAT_TYP
|
||||
CHARACTER (LEN = 2) :: DMN
|
||||
!
|
||||
END MODULE MATERIAL_PROP
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE EXT_FIELDS
|
||||
!
|
||||
! This module contains input values for the external fields
|
||||
! (temperature, electric, magnetic)
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: T,E,H
|
||||
!
|
||||
CHARACTER (LEN = 2) :: FLD
|
||||
!
|
||||
END MODULE EXT_FIELDS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE Q_GRID
|
||||
!
|
||||
! This module contains input values for q-grid
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: N_Q
|
||||
!
|
||||
REAL (WP) :: Q_MIN,Q_MAX,Q_STEP
|
||||
!
|
||||
END MODULE Q_GRID
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE E_GRID
|
||||
!
|
||||
! This module contains input values for energy grid
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: N_E
|
||||
!
|
||||
REAL (WP) :: E_MIN,E_MAX,E_STEP
|
||||
!
|
||||
END MODULE E_GRID
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE R_GRID
|
||||
!
|
||||
! This module contains input values for radial grid
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: N_R
|
||||
!
|
||||
REAL (WP) :: R_MIN,R_MAX,R_STEP
|
||||
!
|
||||
END MODULE R_GRID
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CONFIN_VAL
|
||||
!
|
||||
! This module contains the input values for the confinement
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: R0,L,OM0
|
||||
!
|
||||
CHARACTER (LEN = 7) :: CONFIN
|
||||
!
|
||||
END MODULE CONFIN_VAL
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE MULTILAYER
|
||||
!
|
||||
! This module contains the input values for multilayer systems
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: DL,D1
|
||||
REAL (WP) :: EPS_1,EPS_2
|
||||
REAL (WP) :: N_DEP,N_INV
|
||||
!
|
||||
CHARACTER (LEN = 4) :: H_TYPE
|
||||
!
|
||||
END MODULE MULTILAYER
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE UNITS
|
||||
!
|
||||
! This module contains the input values for the units used
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: UNIT
|
||||
CHARACTER (LEN = 2) :: UNIK
|
||||
!
|
||||
END MODULE UNITS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE SCREENING_TYPE
|
||||
!
|
||||
! This module contains the input values for the screening type
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 2) :: SC_TYPE
|
||||
!
|
||||
END MODULE SCREENING_TYPE
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE PLASMA
|
||||
!
|
||||
! This module contains the input values for the plasma type
|
||||
!
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: PL_TYPE
|
||||
!
|
||||
REAL (WP) :: ZION,ZION2
|
||||
!
|
||||
END MODULE PLASMA
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALCTYPE
|
||||
!
|
||||
! This module contains the input values for the calculation type
|
||||
!
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 7) :: CAL_TYPE
|
||||
!
|
||||
END MODULE CALCTYPE
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE DF_VALUES
|
||||
!
|
||||
! This module contains the input values for the dielectric
|
||||
! function calculation
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 7) :: ESTDY
|
||||
CHARACTER (LEN = 4) :: EPS_T,D_FUNC,NEV_TYPE,MEM_TYPE
|
||||
!
|
||||
REAL (WP) :: ALPHA,BETA
|
||||
!
|
||||
INTEGER :: I_T
|
||||
!
|
||||
END MODULE DF_VALUES
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE PLASMON_DISPERSION
|
||||
!
|
||||
! This module contains the input values for the analytical
|
||||
! plasmon dispersion calculation
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 7) :: PL_DISP
|
||||
!
|
||||
END MODULE PLASMON_DISPERSION
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE LF_VALUES
|
||||
!
|
||||
! This module contains the input values for the local field
|
||||
! corrections calculation
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 7) :: GSTDY
|
||||
CHARACTER (LEN = 4) :: GQ_TYPE,GQO_TYPE,LANDAU
|
||||
CHARACTER (LEN = 3) :: IQ_TYPE
|
||||
CHARACTER (LEN = 2) :: G0_TYPE,GI_TYPE
|
||||
!
|
||||
END MODULE LF_VALUES
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE DAMPING_VALUES
|
||||
!
|
||||
! This module contains the input values for the plasmon damping calculation
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 5) :: POWER_1,POWER_2
|
||||
CHARACTER (LEN = 4) :: DAMPING,LT_TYPE,DR_TYPE,DC_TYPE,VI_TYPE
|
||||
CHARACTER (LEN = 4) :: EE_TYPE,EP_TYPE,EI_TYPE,IP_TYPE,PD_TYPE
|
||||
CHARACTER (LEN = 4) :: QD_TYPE
|
||||
CHARACTER (LEN = 3) :: RT_TYPE
|
||||
!
|
||||
REAL (WP) :: ZETA,D_VALUE_1,D_VALUE_2,EK,PCT
|
||||
!
|
||||
END MODULE DAMPING_VALUES
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE EL_ELE_INTER
|
||||
!
|
||||
! This module contains the input values for the electron-electron
|
||||
! interaction calculation
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 5) :: INT_POT
|
||||
!
|
||||
INTEGER :: M,N
|
||||
!
|
||||
REAL (WP) :: S,EPS,DELTA
|
||||
REAL (WP) :: RC,ALF
|
||||
REAL (WP) :: A1,A2,A3,A4
|
||||
!
|
||||
END MODULE EL_ELE_INTER
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE EL_PHO_INTER
|
||||
!
|
||||
! This module contains the input values for the electron-phonon
|
||||
! interaction calculation
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: EP_C,DEBYE_T
|
||||
REAL (WP) :: NA,MA,RA
|
||||
!
|
||||
END MODULE EL_PHO_INTER
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE EL_IMP_INTER
|
||||
!
|
||||
! This module contains the input values for the electron-impurity
|
||||
! interaction calculation
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: NI,EI_C
|
||||
!
|
||||
END MODULE EL_IMP_INTER
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CLASSICAL_FLUID_VALUES
|
||||
!
|
||||
! This module contains the input values for the classical
|
||||
! fluid parameters
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: CF_TYPE,PF_TYPE,SL_TYPE
|
||||
!
|
||||
END MODULE CLASSICAL_FLUID_VALUES
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE SF_VALUES
|
||||
!
|
||||
! This module contains the input values for the structure
|
||||
! factor calculation
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 7) :: SSTDY
|
||||
CHARACTER (LEN = 3) :: SQ_TYPE,SQO_TYPE
|
||||
!
|
||||
END MODULE SF_VALUES
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE PC_VALUES
|
||||
!
|
||||
! This module contains the input values for the pair correlation
|
||||
! function calculation
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: GR0_MODE
|
||||
CHARACTER (LEN = 3) :: GR_TYPE
|
||||
!
|
||||
END MODULE PC_VALUES
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE PD_VALUES
|
||||
!
|
||||
! This module contains the input values for the pair distribution
|
||||
! function calculation
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: RH_TYPE
|
||||
!
|
||||
END MODULE PD_VALUES
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE SPF_VALUES
|
||||
!
|
||||
! This module contains the input values for the spectral
|
||||
! function calculation
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: SPF_TYPE
|
||||
!
|
||||
END MODULE SPF_VALUES
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE ENERGIES
|
||||
!
|
||||
! This module contains the input values for the calculation
|
||||
! of the different energies
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 6) :: EC_TYPE
|
||||
CHARACTER (LEN = 3) :: EX_TYPE,EK_TYPE
|
||||
CHARACTER (LEN = 2) :: FXC_TYPE,EXC_TYPE
|
||||
!
|
||||
END MODULE ENERGIES
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE SPIN_POLARIZATION
|
||||
!
|
||||
! This module contains the input values for the spin polarization
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: IMODE
|
||||
!
|
||||
REAL (WP) :: XI
|
||||
!
|
||||
END MODULE SPIN_POLARIZATION
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE THERMO_PROPERTIES
|
||||
!
|
||||
! This module contains the input values for the thermodynamic
|
||||
! properties calculation
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: TH_PROP
|
||||
CHARACTER (LEN = 3) :: GP_TYPE
|
||||
!
|
||||
END MODULE THERMO_PROPERTIES
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE ELECTRON_MEAN_FREE_PATH
|
||||
!
|
||||
! This module contains the input values for the inelastic
|
||||
! electron mean free path calculation
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: EK_INI,EK_FIN
|
||||
!
|
||||
END MODULE ELECTRON_MEAN_FREE_PATH
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE MOMENTS
|
||||
!
|
||||
! This module contains the input values for the calculation
|
||||
! of the moments
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: M_TYPE
|
||||
!
|
||||
INTEGER :: N_M
|
||||
!
|
||||
END MODULE MOMENTS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE ION_BEAM
|
||||
!
|
||||
! This module contains the input values for the incoming ion beam
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: Z_BEAM,EK_BEAM
|
||||
!
|
||||
!
|
||||
END MODULE ION_BEAM
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE OUT_VALUES_1
|
||||
!
|
||||
! This module contains input values for print switches
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: I_DF,I_PZ,I_SU,I_CD
|
||||
!
|
||||
END MODULE OUT_VALUES_1
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE OUT_VALUES_2
|
||||
!
|
||||
! This module contains input values for print switches
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: I_PD,I_EH,I_E2,I_CK
|
||||
INTEGER :: I_CR,I_PK
|
||||
!
|
||||
END MODULE OUT_VALUES_2
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE OUT_VALUES_3
|
||||
!
|
||||
! This module contains input values for print switches
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: I_LF,I_IQ,I_SF,I_PC
|
||||
INTEGER :: I_P2
|
||||
INTEGER :: I_VX,I_DC,I_MD,I_LD
|
||||
INTEGER :: I_DP,I_LT,I_BR,I_PE
|
||||
INTEGER :: I_QC,I_RL,I_KS,I_OQ
|
||||
INTEGER :: I_ME,I_MS,I_ML,I_MC
|
||||
INTEGER :: I_DE,I_ZE,I_SR,I_CW
|
||||
INTEGER :: I_CF,I_EM,I_MF,I_SP
|
||||
INTEGER :: I_SE,I_SB,I_ES,I_GR
|
||||
INTEGER :: I_FD,I_BE,I_MX
|
||||
INTEGER :: I_SC,I_DS,I_NV,I_MT
|
||||
!
|
||||
END MODULE OUT_VALUES_3
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE OUT_VALUES_4
|
||||
!
|
||||
! This module contains input values for print switches
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: I_GP,I_PR,I_CO,I_CP
|
||||
INTEGER :: I_BM,I_SH,I_S0,I_S1
|
||||
INTEGER :: I_DT,I_PS,I_IE,I_EI
|
||||
INTEGER :: I_FH,I_EY
|
||||
!
|
||||
END MODULE OUT_VALUES_4
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE OUT_VALUES_5
|
||||
!
|
||||
! This module contains input values for print switches
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: I_EF,I_KF,I_VF,I_TE,I_DL
|
||||
!
|
||||
END MODULE OUT_VALUES_5
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE OUT_VALUES_6
|
||||
!
|
||||
! This module contains input values for print switches
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: I_TW,I_VT,I_TC
|
||||
!
|
||||
END MODULE OUT_VALUES_6
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE OUT_VALUES_7
|
||||
!
|
||||
! This module contains input values for print switches
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: I_EG,I_EX,I_XC,I_EC
|
||||
INTEGER :: I_HF,I_EK,I_EP
|
||||
!
|
||||
END MODULE OUT_VALUES_7
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE OUT_VALUES_8
|
||||
!
|
||||
! This module contains input values for print switches
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: I_VI,I_DI
|
||||
!
|
||||
END MODULE OUT_VALUES_8
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE OUT_VALUES_9
|
||||
!
|
||||
! This module contains input values for print switches
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: I_EL,I_PO,I_RF
|
||||
INTEGER :: I_VC
|
||||
!
|
||||
END MODULE OUT_VALUES_9
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE OUT_VALUES_10
|
||||
!
|
||||
! This module contains input values for print switches
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: I_FN,I_WR,I_TI
|
||||
!
|
||||
END MODULE OUT_VALUES_10
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE OUT_VALUES_P
|
||||
!
|
||||
! This module contains input values for print switches
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: I_FP
|
||||
!
|
||||
END MODULE OUT_VALUES_P
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE OUT_CALC
|
||||
!
|
||||
! This module contains input values for the calculators
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: I_C1,I_C2,I_C3,I_C4,I_C5
|
||||
INTEGER :: I_C6,I_C7,I_C8,I_C9,I_PP
|
||||
!
|
||||
END MODULE OUT_CALC
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
|
@ -0,0 +1,4 @@
|
|||
DFUNCL_MAGN_DYNAMIC :
|
||||
|
||||
! * NU : dimensionless filling factor
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
|
||||
|
||||
Name of dielectric function subroutines:
|
||||
|
||||
XXX_EPS_A_BB_CC.f
|
||||
|
||||
|
||||
XXXX: identifier of method
|
||||
A : S for static
|
||||
D for dynamic
|
||||
BB : LG for longitudinal
|
||||
TR for transverse
|
||||
CC : 3D, 2D, 1D or nothing
|
|
@ -0,0 +1,613 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE OPEN_OUTFILES
|
||||
!
|
||||
! This module contains the subroutine that opens the output files
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE OPEN_OUTPUT_FILES(N_IF,JF)
|
||||
!
|
||||
! This subroutine open the output files for printing. These files
|
||||
! are open:
|
||||
!
|
||||
! 1) at the first input data file iteration (JF = 1)
|
||||
! 2) for the other iteration: if file is indexed
|
||||
! on the input data files (INDEX_FILE(IO_DF) = 0)
|
||||
!
|
||||
!
|
||||
! Input parameter:
|
||||
!
|
||||
! * N_IF : number of input data files
|
||||
! * JF : index of current input data file
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 26 Jan 2021
|
||||
!
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NOFFN
|
||||
!
|
||||
USE OUT_VALUES_1
|
||||
USE OUT_VALUES_2
|
||||
USE OUT_VALUES_3
|
||||
USE OUT_VALUES_4
|
||||
USE OUT_VALUES_5
|
||||
USE OUT_VALUES_6
|
||||
USE OUT_VALUES_7
|
||||
USE OUT_VALUES_8
|
||||
USE OUT_VALUES_9
|
||||
USE OUT_VALUES_10
|
||||
USE OUT_VALUES_P
|
||||
!
|
||||
USE FILENAMES
|
||||
USE OUTFILES
|
||||
USE CHANGE_FILENAMES
|
||||
!
|
||||
USE PRINT_FILES
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: N_IF
|
||||
INTEGER :: JF
|
||||
INTEGER :: J
|
||||
!
|
||||
CHARACTER (LEN = 100) :: FLIST(NOFFN)
|
||||
!
|
||||
! Changing the output filenames if required
|
||||
!
|
||||
CALL NEW_FILENAMES(N_IF,JF,FLIST) !
|
||||
!
|
||||
! Files for calculator 1
|
||||
!
|
||||
IF(I_DF == 1) THEN !
|
||||
IO_DF=FN(DFFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_DF) == 0) THEN !
|
||||
OPEN(UNIT=IO_DF,FILE=FLIST(IO_DF),STATUS='unknown') ! dielectric function file
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_PZ == 1) THEN !
|
||||
IO_PZ=FN(PZFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_PZ) == 0) THEN !
|
||||
OPEN(UNIT=IO_PZ,FILE=FLIST(IO_PZ),STATUS='unknown') ! polarization function
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_SU == 1) THEN !
|
||||
IO_SU=FN(SUFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_SU) == 0) THEN !
|
||||
OPEN(UNIT=IO_SU,FILE=FLIST(IO_SU),STATUS='unknown') ! susceptibility function
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_CD == 1) THEN !
|
||||
IO_CD=FN(CDFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_CD) == 0) THEN !
|
||||
OPEN(UNIT=IO_CD,FILE=FLIST(IO_CD),STATUS='unknown') ! electrical conductivity
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
! Files for calculator 2
|
||||
!
|
||||
IF(I_PD == 1) THEN !
|
||||
IO_PD=FN(PDFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_PD) == 0) THEN !
|
||||
OPEN(UNIT=IO_PD,FILE=FLIST(IO_PD),STATUS='unknown') ! plasmon dispersion file
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_EH == 1) THEN !
|
||||
IO_EH=FN(EHFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_EH) == 0) THEN !
|
||||
OPEN(UNIT=IO_EH,FILE=FLIST(IO_EH),STATUS='unknown') ! electron-hole dispersion file
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_E2 == 1) THEN !
|
||||
IO_E2=FN(E2FILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_E2) == 0) THEN !
|
||||
OPEN(UNIT=IO_E2,FILE=FLIST(IO_E2),STATUS='unknown') ! two electron-hole dispersion
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_CF == 1) THEN !
|
||||
IO_CK=FN(CKFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_CK) == 0) THEN !
|
||||
OPEN(UNIT=IO_CK,FILE=FLIST(IO_CK),STATUS='unknown') ! screened Coulomb (k-space)
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_CR == 1) THEN !
|
||||
IO_CR=FN(CRFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_CR) == 0) THEN !
|
||||
OPEN(UNIT=IO_CR,FILE=FLIST(IO_CR),STATUS='unknown') ! screened Coulomb (real space)
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_PK == 1) THEN !
|
||||
IO_PK=FN(PKFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_PK) == 0) THEN !
|
||||
OPEN(UNIT=IO_PK,FILE=FLIST(IO_PK),STATUS='unknown') ! plasmon kinetic energy
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
! Files for calculator 3
|
||||
!
|
||||
IF(I_LF == 1) THEN !
|
||||
IO_LF=FN(LFFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_LF) == 0) THEN !
|
||||
OPEN(UNIT=IO_LF,FILE=FLIST(IO_LF),STATUS='unknown') ! local-field correction file G(q,om)
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_IQ == 1) THEN !
|
||||
IO_IQ=FN(IQFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_IQ) == 0) THEN !
|
||||
OPEN(UNIT=IO_IQ,FILE=FLIST(IO_IQ),STATUS='unknown') ! G(q,inf) file
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_SF == 1) THEN !
|
||||
IO_SF=FN(SFFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_SF) == 0) THEN !
|
||||
OPEN(UNIT=IO_SF,FILE=FLIST(IO_SF),STATUS='unknown') ! structure factor file S(q,om)
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_PC == 1) THEN !
|
||||
IO_PC=FN(PCFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_PC) == 0) THEN !
|
||||
OPEN(UNIT=IO_PC,FILE=FLIST(IO_PC),STATUS='unknown') ! pair correlation function file
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_P2 == 1) THEN !
|
||||
IO_P2=FN(P2FILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_P2) == 0) THEN !
|
||||
OPEN(UNIT=IO_P2,FILE=FLIST(IO_P2),STATUS='unknown') ! pair distribution function file
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_VX == 1) THEN !
|
||||
IO_VX=FN(VXFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_VX) == 0) THEN !
|
||||
OPEN(UNIT=IO_VX,FILE=FLIST(IO_VX),STATUS='unknown') ! vertex function Gamma(q,om)
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_DC == 1) THEN !
|
||||
IO_DC=FN(DCFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_DC) == 0) THEN !
|
||||
OPEN(UNIT=IO_DC,FILE=FLIST(IO_DC),STATUS='unknown') ! plasmon damping coefficient Im[eps]/q^2
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_MD == 1) THEN !
|
||||
IO_MD=FN(MDFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_MD) == 0) THEN !
|
||||
OPEN(UNIT=IO_MD,FILE=FLIST(IO_MD),STATUS='unknown') ! momentum distribution
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_LD == 1) THEN !
|
||||
IO_LD=FN(LDFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_LD) == 0) THEN !
|
||||
OPEN(UNIT=IO_LD,FILE=FLIST(IO_LD),STATUS='unknown') ! Landau parameters
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_DP == 1) THEN !
|
||||
IO_DP=FN(DPFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_DP) == 0) THEN !
|
||||
OPEN(UNIT=IO_DP,FILE=FLIST(IO_DP),STATUS='unknown') ! damping file
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_LT == 1) THEN !
|
||||
IO_LT=FN(LTFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_LT) == 0) THEN !
|
||||
OPEN(UNIT=IO_LT,FILE=FLIST(IO_LT),STATUS='unknown') ! plasmon lifetime file
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_BR == 1) THEN !
|
||||
IO_BR=FN(BRFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_BR) == 0) THEN !
|
||||
OPEN(UNIT=IO_BR,FILE=FLIST(IO_BR),STATUS='unknown') ! plasmon broadening
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_PE == 1) THEN !
|
||||
IO_PE=FN(PEFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_PE) == 0) THEN !
|
||||
OPEN(UNIT=IO_PE,FILE=FLIST(IO_PE),STATUS='unknown') ! plasmon energy
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_QC == 1) THEN !
|
||||
IO_QC=FN(QCFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_QC) == 0) THEN !
|
||||
OPEN(UNIT=IO_QC,FILE=FLIST(IO_QC),STATUS='unknown') ! plasmon q-bounds
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_RL == 1) THEN !
|
||||
IO_RL=FN(RLFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_RL) == 0) THEN !
|
||||
OPEN(UNIT=IO_RL,FILE=FLIST(IO_RL),STATUS='unknown') ! relaxation time
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_KS == 1) THEN !
|
||||
IO_KS=FN(KSFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_KS) == 0) THEN !
|
||||
OPEN(UNIT=IO_KS,FILE=FLIST(IO_KS),STATUS='unknown') ! screening wave vector
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_OQ == 1) THEN !
|
||||
IO_OQ=FN(OQFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_OQ) == 0) THEN !
|
||||
OPEN(UNIT=IO_OQ,FILE=FLIST(IO_OQ),STATUS='unknown') ! omega = q * v_F
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_ME == 1) THEN !
|
||||
IO_ME=FN(MEFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_ME) == 0) THEN !
|
||||
OPEN(UNIT=IO_ME,FILE=FLIST(IO_ME),STATUS='unknown') ! moments of epsilon
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_MS == 1) THEN !
|
||||
IO_MS=FN(MSFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_MS) == 0) THEN !
|
||||
OPEN(UNIT=IO_MS,FILE=FLIST(IO_MS),STATUS='unknown') ! moments of S(q,omega)
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_ML == 1) THEN !
|
||||
IO_ML=FN(MLFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_ML) == 0) THEN !
|
||||
OPEN(UNIT=IO_ML,FILE=FLIST(IO_ML),STATUS='unknown') ! moments of loss function
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_MC == 1) THEN !
|
||||
IO_MC=FN(MCFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_MC) == 0) THEN !
|
||||
OPEN(UNIT=IO_MC,FILE=FLIST(IO_MC),STATUS='unknown') ! moments of conductivity
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_DE == 1) THEN !
|
||||
IO_DE=FN(DEFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_DE) == 0) THEN !
|
||||
OPEN(UNIT=IO_DE,FILE=FLIST(IO_DE),STATUS='unknown') ! derivative of Re[ dielectric function ]
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_ZE == 1) THEN !
|
||||
IO_ZE=FN(ZEFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_ZE) == 0) THEN !
|
||||
OPEN(UNIT=IO_ZE,FILE=FLIST(IO_ZE),STATUS='unknown') ! Re[ dielectric function ] = 0
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_SR == 1) THEN !
|
||||
IO_SR=FN(SRFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_SR) == 0) THEN !
|
||||
OPEN(UNIT=IO_SR,FILE=FLIST(IO_SR),STATUS='unknown') ! sum rules for epsilon
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_CW == 1) THEN !
|
||||
IO_CW=FN(CWFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_CW) == 0) THEN !
|
||||
OPEN(UNIT=IO_CW,FILE=FLIST(IO_CW),STATUS='unknown') ! confinement wave function
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_CF == 1) THEN !
|
||||
IO_CF=FN(CFFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_CF) == 0) THEN !
|
||||
OPEN(UNIT=IO_CF,FILE=FLIST(IO_CF),STATUS='unknown') ! confinement potential
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_EM == 1) THEN !
|
||||
IO_EM=FN(EMFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_EM) == 0) THEN !
|
||||
OPEN(UNIT=IO_EM,FILE=FLIST(IO_EM),STATUS='unknown') ! effective mass
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_MF == 1) THEN !
|
||||
IO_MF=FN(MFFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_MF) == 0) THEN !
|
||||
OPEN(UNIT=IO_MF,FILE=FLIST(IO_MF),STATUS='unknown') ! mean free path
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_SP == 1) THEN !
|
||||
IO_SP=FN(SPFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_SP) == 0) THEN !
|
||||
OPEN(UNIT=IO_SP,FILE=FLIST(IO_SP),STATUS='unknown') ! spectral function
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_SE == 1) THEN !
|
||||
IO_SE=FN(SEFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_SE) == 0) THEN !
|
||||
OPEN(UNIT=IO_SE,FILE=FLIST(IO_SE),STATUS='unknown') ! self-energy
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_SB == 1) THEN !
|
||||
IO_SB=FN(SBFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_SB) == 0) THEN !
|
||||
OPEN(UNIT=IO_SB,FILE=FLIST(IO_SB),STATUS='unknown') ! subband energies
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_ES == 1) THEN !
|
||||
IO_ES=FN(ESFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_ES) == 0) THEN !
|
||||
OPEN(UNIT=IO_ES,FILE=FLIST(IO_ES),STATUS='unknown') ! Eliashberg function
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_GR == 1) THEN !
|
||||
IO_GR=FN(GRFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_GR) == 0) THEN !
|
||||
OPEN(UNIT=IO_GR,FILE=FLIST(IO_GR),STATUS='unknown') ! Grüneisen parameter
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_FD == 1) THEN !
|
||||
IO_FD=FN(FDFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_FD) == 0) THEN !
|
||||
OPEN(UNIT=IO_FD,FILE=FLIST(IO_FD),STATUS='unknown') ! Fermi-Dirac distribution
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_BE == 1) THEN !
|
||||
IO_BE=FN(BEFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_BE) == 0) THEN !
|
||||
OPEN(UNIT=IO_BE,FILE=FLIST(IO_BE),STATUS='unknown') ! Bose-Einstein distribution
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_MX == 1) THEN !
|
||||
IO_MX=FN(MXFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_MX) == 0) THEN !
|
||||
OPEN(UNIT=IO_MX,FILE=FLIST(IO_MX),STATUS='unknown') ! Maxwell distribution
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_SC == 1) THEN !
|
||||
IO_SC=FN(SCFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_SC) == 0) THEN !
|
||||
OPEN(UNIT=IO_SC,FILE=FLIST(IO_SC),STATUS='unknown') ! scale parameters
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_DS == 1) THEN !
|
||||
IO_DS=FN(DSFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_DS) == 0) THEN !
|
||||
OPEN(UNIT=IO_DS,FILE=FLIST(IO_DS),STATUS='unknown') ! density of states
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_NV == 1) THEN !
|
||||
IO_NV=FN(NVFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_NV) == 0) THEN !
|
||||
OPEN(UNIT=IO_NV,FILE=FLIST(IO_NV),STATUS='unknown') ! Nevanlinaa function
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_MT == 1) THEN !
|
||||
IO_MT=FN(MTFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_MT) == 0) THEN !
|
||||
OPEN(UNIT=IO_MT,FILE=FLIST(IO_MT),STATUS='unknown') ! time domain memory function
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
! Files for calculator 4
|
||||
!
|
||||
IF(I_GP == 1) THEN !
|
||||
IO_GP=FN(GPFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_GP) == 0) THEN !
|
||||
OPEN(UNIT=IO_GP,FILE=FLIST(IO_GP),STATUS='unknown') ! grand partition function
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_PR == 1) THEN !
|
||||
IO_PR=FN(PRFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_PR) == 0) THEN !
|
||||
OPEN(UNIT=IO_PR,FILE=FLIST(IO_PR),STATUS='unknown') ! electronic pressure
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_CO == 1) THEN !
|
||||
IO_CO=FN(COFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_CO) == 0) THEN !
|
||||
OPEN(UNIT=IO_CO,FILE=FLIST(IO_CO),STATUS='unknown') ! compressibility
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_CP == 1) THEN !
|
||||
IO_CP=FN(CPFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_CP) == 0) THEN !
|
||||
OPEN(UNIT=IO_CP,FILE=FLIST(IO_CP),STATUS='unknown') ! chemical potential
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_BM == 1) THEN !
|
||||
IO_BM=FN(BMFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_BM) == 0) THEN !
|
||||
OPEN(UNIT=IO_BM,FILE=FLIST(IO_BM),STATUS='unknown') ! bulk modulus
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_SH == 1) THEN !
|
||||
IO_SH=FN(SHFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_SH) == 0) THEN !
|
||||
OPEN(UNIT=IO_SH,FILE=FLIST(IO_SH),STATUS='unknown') ! shear modulus
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_S0 == 1) THEN !
|
||||
IO_S0=FN(S0FILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_S0) == 0) THEN !
|
||||
OPEN(UNIT=IO_S0,FILE=FLIST(IO_S0),STATUS='unknown') ! zero sound velocity
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_S1 == 1) THEN !
|
||||
IO_S1=FN(S1FILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_S1) == 0) THEN !
|
||||
OPEN(UNIT=IO_S1,FILE=FLIST(IO_S1),STATUS='unknown') ! first sound velocity
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_DT == 1) THEN !
|
||||
IO_DT=FN(DTFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_DT) == 0) THEN !
|
||||
OPEN(UNIT=IO_DT,FILE=FLIST(IO_DT),STATUS='unknown') ! Debye temperature
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_PS == 1) THEN !
|
||||
IO_PS=FN(PSFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_PS) == 0) THEN !
|
||||
OPEN(UNIT=IO_PS,FILE=FLIST(IO_PS),STATUS='unknown') ! Pauli paramagnetic susceptibility
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_IE == 1) THEN !
|
||||
IO_IE=FN(IEFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_IE) == 0) THEN !
|
||||
OPEN(UNIT=IO_IE,FILE=FLIST(IO_IE),STATUS='unknown') ! internal energy
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_EI == 1) THEN !
|
||||
IO_EI=FN(EIFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_EI) == 0) THEN !
|
||||
OPEN(UNIT=IO_EI,FILE=FLIST(IO_EI),STATUS='unknown') ! excess internal energy
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_FH == 1) THEN !
|
||||
IO_FH=FN(FHFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_FH) == 0) THEN !
|
||||
OPEN(UNIT=IO_FH,FILE=FLIST(IO_FH),STATUS='unknown') ! Helmholtz free energy
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_EY == 1) THEN !
|
||||
IO_EY=FN(EYFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_EY) == 0) THEN !
|
||||
OPEN(UNIT=IO_EY,FILE=FLIST(IO_EY),STATUS='unknown') ! entropy
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
! Files for calculator 5
|
||||
!
|
||||
IF(I_EF == 1) THEN !
|
||||
IO_EF=FN(EFFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_EF) == 0) THEN !
|
||||
OPEN(UNIT=IO_EF,FILE=FLIST(IO_EF),STATUS='unknown') ! Fermi energy
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_KF == 1) THEN !
|
||||
IO_KF=FN(KFFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_KF) == 0) THEN !
|
||||
OPEN(UNIT=IO_KF,FILE=FLIST(IO_KF),STATUS='unknown') ! Fermi momentum
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_VF == 1) THEN !
|
||||
IO_VF=FN(VFFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_VF) == 0) THEN !
|
||||
OPEN(UNIT=IO_VF,FILE=FLIST(IO_VF),STATUS='unknown') ! Fermi velocity
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_TE == 1) THEN !
|
||||
IO_TE=FN(TEFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_TE) == 0) THEN !
|
||||
OPEN(UNIT=IO_TE,FILE=FLIST(IO_TE),STATUS='unknown') ! Fermi temperature
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_DL == 1) THEN !
|
||||
IO_DL=FN(DLFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_DL) == 0) THEN !
|
||||
OPEN(UNIT=IO_DL,FILE=FLIST(IO_DL),STATUS='unknown') ! Fermi density of states
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
! Files for calculator 6
|
||||
!
|
||||
IF(I_TW == 1) THEN !
|
||||
IO_TW=FN(TWFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_TW) == 0) THEN !
|
||||
OPEN(UNIT=IO_TW,FILE=FLIST(IO_TW),STATUS='unknown') ! thermal De Broglie wavelength
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_VT == 1) THEN !
|
||||
IO_VT=FN(VTFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_VT) == 0) THEN !
|
||||
OPEN(UNIT=IO_VT,FILE=FLIST(IO_VT),STATUS='unknown') ! thermal velocity
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_TC == 1) THEN !
|
||||
IO_TC=FN(TCFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_TC) == 0) THEN !
|
||||
OPEN(UNIT=IO_TC,FILE=FLIST(IO_TC),STATUS='unknown') ! thermal conductivity
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
! Files for calculator 7
|
||||
!
|
||||
IF(I_EG == 1) THEN !
|
||||
IO_EG=FN(EGFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_EG) == 0) THEN !
|
||||
OPEN(UNIT=IO_EG,FILE=FLIST(IO_EG),STATUS='unknown') ! ground state energy
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_EX == 1) THEN !
|
||||
IO_EX=FN(EXFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_EX) == 0) THEN !
|
||||
OPEN(UNIT=IO_EX,FILE=FLIST(IO_EX),STATUS='unknown') ! exchange energy
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_XC == 1) THEN !
|
||||
IO_XC=FN(XCFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_XC) == 0) THEN !
|
||||
OPEN(UNIT=IO_XC,FILE=FLIST(IO_XC),STATUS='unknown') ! exchange correlation energy
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_EC == 1) THEN !
|
||||
IO_EC=FN(ECFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_EC) == 0) THEN !
|
||||
OPEN(UNIT=IO_EC,FILE=FLIST(IO_EC),STATUS='unknown') ! correlation energy
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_HF == 1) THEN !
|
||||
IO_HF=FN(HFFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_HF) == 0) THEN !
|
||||
OPEN(UNIT=IO_HF,FILE=FLIST(IO_HF),STATUS='unknown') ! Hartree-Fock energy
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_EK == 1) THEN !
|
||||
IO_EK=FN(EKFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_EK) == 0) THEN !
|
||||
OPEN(UNIT=IO_EK,FILE=FLIST(IO_EK),STATUS='unknown') ! kinetic energy
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_EP == 1) THEN !
|
||||
IO_EP=FN(EPFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_EP) == 0) THEN !
|
||||
OPEN(UNIT=IO_EP,FILE=FLIST(IO_EP),STATUS='unknown') ! potential energy
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
! Files for calculator 8
|
||||
!
|
||||
IF(I_VI == 1) THEN !
|
||||
IO_VI=FN(VIFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_VI) == 0) THEN !
|
||||
OPEN(UNIT=IO_VI,FILE=FLIST(IO_VI),STATUS='unknown') ! shear viscosity
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_DI == 1) THEN !
|
||||
IO_DI=FN(DIFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_DI) == 0) THEN !
|
||||
OPEN(UNIT=IO_DI,FILE=FLIST(IO_DI),STATUS='unknown') ! diffusion coefficient
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
! Files for calculator 9
|
||||
!
|
||||
IF(I_FP == 1) THEN !
|
||||
IO_FP=FN(FPFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_FP) == 0) THEN !
|
||||
OPEN(UNIT=IO_FP,FILE=FLIST(IO_FP),STATUS='unknown') ! fluctuation potential file
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_EL == 1) THEN !
|
||||
IO_EL=FN(ELFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_EL) == 0) THEN !
|
||||
OPEN(UNIT=IO_EL,FILE=FLIST(IO_EL),STATUS='unknown') ! energy loss function
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_PO == 1) THEN !
|
||||
IO_PO=FN(POFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_PO) == 0) THEN !
|
||||
OPEN(UNIT=IO_PO,FILE=FLIST(IO_PO),STATUS='unknown') ! stopping power
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_RF == 1) THEN !
|
||||
IO_RF=FN(RFFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_RF) == 0) THEN !
|
||||
OPEN(UNIT=IO_RF,FILE=FLIST(IO_RF),STATUS='unknown') ! refractive index
|
||||
END IF !
|
||||
END IF !
|
||||
IF(I_VC == 1) THEN !
|
||||
IO_VC=FN(VCFILE) !
|
||||
IF(JF == 1 .OR. INDEX_FILE(IO_VC) == 0) THEN !
|
||||
OPEN(UNIT=IO_VC,FILE=FLIST(IO_VC),STATUS='unknown') ! dynamic screened Coulomb potential V(q,omega)
|
||||
END IF !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE OPEN_OUTPUT_FILES
|
||||
!
|
||||
END MODULE OPEN_OUTFILES
|
|
@ -0,0 +1,549 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE OUTFILES
|
||||
!
|
||||
! This module contains functions/subroutines for working with
|
||||
! the output files
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION FN(NAFILE)
|
||||
!
|
||||
! This function returns the Fortran unit corresponding to file NAFILE
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NOFFN
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 100) :: NAFILE
|
||||
CHARACTER (LEN = 100) :: FLIST(NOFFN)
|
||||
!
|
||||
INTEGER :: FN,J
|
||||
!
|
||||
CALL OUT_FILES(FLIST) !
|
||||
!
|
||||
DO J=7,NOFFN !
|
||||
IF(FLIST(J) == NAFILE) THEN !
|
||||
FN=J !
|
||||
RETURN !
|
||||
END IF !
|
||||
END DO !
|
||||
!
|
||||
END FUNCTION FN
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE OUT_FILES(FLIST)
|
||||
!
|
||||
! This subroutine stores all the output files and their Fortran
|
||||
! unit number in the FLIST array
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 26 Jan 2021
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NOFFN
|
||||
USE FILENAMES
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 100) :: FLIST(NOFFN)
|
||||
!
|
||||
! Filenames:
|
||||
!
|
||||
DFFILE='Results/diel_func.dat' ! dielectric function file
|
||||
PZFILE='Results/pola_func.dat' ! polarization function
|
||||
SUFILE='Results/susc_func.dat' ! susceptibility function
|
||||
CDFILE='Results/cond_func.dat' ! electrical conductivity
|
||||
!
|
||||
PDFILE='Results/plas_disp.dat' ! plasmon dispersion file
|
||||
EHFILE='Results/elec_hole.dat' ! electron-hole dispersion file
|
||||
E2FILE='Results/elec_hol2.dat' ! two electron-hole dispersion
|
||||
CKFILE='Results/int_pot_k.dat' ! interaction potential (k-space)
|
||||
CRFILE='Results/int_pot_r.dat' ! interaction potential (real space)
|
||||
PKFILE='Results/plas_kine.dat' ! plasmon kinetic energy file
|
||||
!
|
||||
LFFILE='Results/loca_fiel.dat' ! local-field correction file G(q,om)
|
||||
IQFILE='Results/ginf_fiel.dat' ! G(q,inf) file
|
||||
SFFILE='Results/stru_fact.dat' ! structure factor file S(q,om)
|
||||
PCFILE='Results/pair_corr.dat' ! pair correlation function file
|
||||
P2FILE='Results/pair_dist.dat' ! pair distribution function file
|
||||
VXFILE='Results/vertex_fu.dat' ! vertex function Gamma(q,om)
|
||||
DCFILE='Results/plas_damp.dat' ! plasmon damping coefficient Im[eps]/q^2
|
||||
MDFILE='Results/mome_dist.dat' ! momentum distribution
|
||||
LDFILE='Results/landau_pa.dat' ! Landau parameters
|
||||
DPFILE='Results/damp_file.dat' ! damping file
|
||||
LTFILE='Results/life_time.dat' ! plasmon lifetime file
|
||||
BRFILE='Results/broadenin.dat' ! plasmon broadening
|
||||
PEFILE='Results/plas_ener.dat' ! plasmon energy
|
||||
QCFILE='Results/qc_bounds.dat' ! plasmon q-bounds
|
||||
RLFILE='Results/rela_time.dat' ! relaxation time
|
||||
KSFILE='Results/screen_wv.dat' ! screening wave vector
|
||||
OQFILE='Results/omega_qvf.dat' ! omega = q * v_F file
|
||||
MEFILE='Results/moments_e.dat' ! moments of epsilon
|
||||
MSFILE='Results/moments_s.dat' ! moments of S(q,omega)
|
||||
MLFILE='Results/moments_l.dat' ! moments of loss function
|
||||
MCFILE='Results/moments_c.dat' ! moments of conductivity
|
||||
DEFILE='Results/deri_epsi.dat' ! derivative of Re[ dielectric function ]
|
||||
ZEFILE='Results/ree0_file.dat' ! Re[ dielectric function ] = 0
|
||||
SRFILE='Results/sum_rules.dat' ! sum rules for epsilon
|
||||
CWFILE='Results/confin_wf.dat' ! confinement wave function
|
||||
CFFILE='Results/confin_pt.dat' ! confinement potential
|
||||
EMFILE='Results/effe_mass.dat' ! effective mass
|
||||
MFFILE='Results/mean_path.dat' ! mean free path
|
||||
SPFILE='Results/spec_func.dat' ! spectral function
|
||||
SEFILE='Results/self_ener.dat' ! self-energy
|
||||
SBFILE='Results/subb_ener.dat' ! subband energies
|
||||
ESFILE='Results/elia_func.dat' ! Eliashberg function
|
||||
GRFILE='Results/grune_par.dat' ! Grüneisen parameter
|
||||
FDFILE='Results/fermi_dir.dat' ! Fermi-Dirac distribution
|
||||
BEFILE='Results/bose_eins.dat' ! Bose-Einstein distribution
|
||||
MXFILE='Results/maxwell_d.dat' ! Maxwell distribution
|
||||
SCFILE='Results/scale_par.dat' ! scale parameters
|
||||
DSFILE='Results/dens_stat.dat' ! density of states
|
||||
NVFILE='Results/neva_four.dat' ! Nevanlinaa/memory function
|
||||
MTFILE='Results/memo_time.dat' ! time domain memory function
|
||||
!
|
||||
GPFILE='Results/gran_part.dat' ! grand partition function
|
||||
PRFILE='Results/epressure.dat' ! electronic pressure
|
||||
COFILE='Results/comp_file.dat' ! compressibility
|
||||
CPFILE='Results/chem_pote.dat' ! chemical potential
|
||||
BMFILE='Results/bulk_modu.dat' ! bulk modulus
|
||||
SHFILE='Results/shear_mod.dat' ! shear modulus
|
||||
S0FILE='Results/zero_soun.dat' ! zero sound velocity
|
||||
S1FILE='Results/firs_soun.dat' ! first sound velocity
|
||||
DTFILE='Results/Debye_tmp.dat' ! Debye temperature
|
||||
PSFILE='Results/para_susc.dat' ! Pauli paramagnetic susceptibility
|
||||
IEFILE='Results/inter_ene.dat' ! internal energy
|
||||
EIFILE='Results/exces_ene.dat' ! excess internal energy
|
||||
FHFILE='Results/helm_free.dat' ! Helmholtz free energy
|
||||
EYFILE='Results/entropy_f.dat' ! entropy
|
||||
!
|
||||
EFFILE='Results/fermi_ene.dat' ! Fermi energy
|
||||
KFFILE='Results/fermi_vec.dat' ! Fermi momentum
|
||||
VFFILE='Results/fermi_vel.dat' ! Fermi velocity
|
||||
TEFILE='Results/fermi_tmp.dat' ! Fermi temperature
|
||||
DLFILE='Results/fermi_dos.dat' ! Fermi density of states
|
||||
!
|
||||
TWFILE='Results/thermal_w.dat' ! thermal De Broglie wavelength
|
||||
VTFILE='Results/thermal_v.dat' ! thermal velocity
|
||||
TCFILE='Results/thermal_c.dat' ! thermal conductivity
|
||||
!
|
||||
EGFILE='Results/ground_st.dat' ! ground state energy
|
||||
EXFILE='Results/ex_energy.dat' ! exchange energy
|
||||
XCFILE='Results/xc_energy.dat' ! exchange correlation energy
|
||||
ECFILE='Results/corr_ener.dat' ! correlation energy
|
||||
HFFILE='Results/hf_energy.dat' ! Hartree-Fock energy
|
||||
EKFILE='Results/kine_ener.dat' ! kinetic energy
|
||||
EPFILE='Results/pote_ener.dat' ! potential energy
|
||||
!
|
||||
VIFILE='Results/visc_coef.dat' ! shear viscosity
|
||||
DIFILE='Results/diff_coef.dat' ! diffusion coefficient
|
||||
!
|
||||
FPFILE='Results/fluct_pot.dat' ! fluctuation potential file
|
||||
ELFILE='Results/ener_loss.dat' ! energy loss function
|
||||
POFILE='Results/stop_powe.dat' ! stopping power
|
||||
RFFILE='Results/refrac_in.dat' ! refractive index
|
||||
VCFILE='Results/dyna_coul.dat' ! dynamic screened Coulomb potential V(q,omega)
|
||||
!
|
||||
! Corresponding fortran units
|
||||
!
|
||||
FLIST(7)=DFFILE !
|
||||
FLIST(8)=PZFILE !
|
||||
FLIST(9)=SUFILE !
|
||||
FLIST(10)=CDFILE !
|
||||
!
|
||||
FLIST(11)=PDFILE !
|
||||
FLIST(12)=EHFILE !
|
||||
FLIST(13)=E2FILE !
|
||||
FLIST(14)=CKFILE !
|
||||
FLIST(15)=CRFILE !
|
||||
FLIST(16)=PKFILE !
|
||||
!
|
||||
FLIST(17)=LFFILE !
|
||||
FLIST(18)=IQFILE !
|
||||
FLIST(19)=SFFILE !
|
||||
FLIST(20)=PCFILE !
|
||||
FLIST(21)=P2FILE !
|
||||
FLIST(22)=VXFILE !
|
||||
FLIST(23)=DCFILE !
|
||||
FLIST(24)=MDFILE !
|
||||
FLIST(25)=LDFILE !
|
||||
FLIST(26)=DPFILE !
|
||||
FLIST(27)=LTFILE !
|
||||
FLIST(28)=BRFILE !
|
||||
FLIST(29)=PEFILE !
|
||||
FLIST(30)=QCFILE !
|
||||
FLIST(31)=RLFILE !
|
||||
FLIST(32)=KSFILE !
|
||||
FLIST(33)=OQFILE !
|
||||
FLIST(34)=MEFILE !
|
||||
FLIST(35)=MSFILE !
|
||||
FLIST(36)=MLFILE !
|
||||
FLIST(37)=MCFILE !
|
||||
FLIST(38)=DEFILE !
|
||||
FLIST(39)=ZEFILE !
|
||||
FLIST(40)=SRFILE !
|
||||
FLIST(41)=CWFILE !
|
||||
FLIST(42)=CFFILE !
|
||||
FLIST(43)=EMFILE !
|
||||
FLIST(44)=MFFILE !
|
||||
FLIST(45)=SPFILE !
|
||||
FLIST(46)=SEFILE !
|
||||
FLIST(47)=SBFILE !
|
||||
FLIST(48)=ESFILE !
|
||||
FLIST(49)=GRFILE !
|
||||
FLIST(50)=FDFILE !
|
||||
FLIST(51)=BEFILE !
|
||||
FLIST(52)=MXFILE !
|
||||
FLIST(53)=SCFILE !
|
||||
FLIST(54)=DSFILE !
|
||||
FLIST(55)=NVFILE !
|
||||
FLIST(56)=MTFILE !
|
||||
!
|
||||
FLIST(57)=GPFILE !
|
||||
FLIST(58)=PRFILE !
|
||||
FLIST(59)=COFILE !
|
||||
FLIST(60)=CPFILE !
|
||||
FLIST(61)=BMFILE !
|
||||
FLIST(62)=SHFILE !
|
||||
FLIST(63)=S0FILE !
|
||||
FLIST(64)=S1FILE !
|
||||
FLIST(65)=DTFILE !
|
||||
FLIST(66)=PSFILE !
|
||||
FLIST(67)=IEFILE !
|
||||
FLIST(68)=EIFILE !
|
||||
FLIST(69)=FHFILE !
|
||||
FLIST(70)=EYFILE !
|
||||
!
|
||||
FLIST(71)=EFFILE !
|
||||
FLIST(72)=KFFILE !
|
||||
FLIST(73)=VFFILE !
|
||||
FLIST(74)=TEFILE !
|
||||
FLIST(75)=DLFILE !
|
||||
!
|
||||
FLIST(76)=TWFILE !
|
||||
FLIST(77)=VTFILE !
|
||||
FLIST(78)=TCFILE !
|
||||
!
|
||||
FLIST(79)=EGFILE !
|
||||
FLIST(80)=EXFILE !
|
||||
FLIST(81)=XCFILE !
|
||||
FLIST(82)=ECFILE !
|
||||
FLIST(83)=HFFILE !
|
||||
FLIST(84)=EKFILE !
|
||||
FLIST(85)=EPFILE !
|
||||
!
|
||||
FLIST(86)=VIFILE !
|
||||
FLIST(87)=DIFILE !
|
||||
!
|
||||
FLIST(88)=FPFILE !
|
||||
FLIST(89)=ELFILE !
|
||||
FLIST(90)=POFILE !
|
||||
FLIST(91)=RFFILE !
|
||||
FLIST(92)=VCFILE !
|
||||
!
|
||||
END SUBROUTINE OUT_FILES
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_TYPE(CLIST)
|
||||
!
|
||||
! This subroutine stores the calculation approximations
|
||||
! into the CLIST array
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 26 Jan 2021
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NOFFN
|
||||
!
|
||||
USE MATERIAL_PROP
|
||||
USE EXT_FIELDS
|
||||
USE CONFIN_VAL
|
||||
USE MULTILAYER
|
||||
USE SCREENING_TYPE
|
||||
USE PLASMA
|
||||
USE DF_VALUES
|
||||
USE PLASMON_DISPERSION
|
||||
USE LF_VALUES
|
||||
USE DAMPING_VALUES
|
||||
USE EL_ELE_INTER
|
||||
USE EL_PHO_INTER
|
||||
USE EL_IMP_INTER
|
||||
USE CLASSICAL_FLUID_VALUES
|
||||
USE SF_VALUES
|
||||
USE PC_VALUES
|
||||
USE PD_VALUES
|
||||
USE ENERGIES
|
||||
USE THERMO_PROPERTIES
|
||||
USE ION_BEAM
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 100) :: CLIST(NOFFN)
|
||||
CHARACTER (LEN = 100) :: NONE
|
||||
CHARACTER (LEN = 100) :: LFTYPE
|
||||
CHARACTER (LEN = 100) :: SFTYPE
|
||||
!
|
||||
IF(GSTDY == ' STATIC') THEN !
|
||||
LFTYPE = GQ_TYPE !
|
||||
ELSE !
|
||||
LFTYPE = GQO_TYPE !
|
||||
END IF !
|
||||
IF(SSTDY == ' STATIC') THEN !
|
||||
SFTYPE = SQ_TYPE !
|
||||
ELSE !
|
||||
SFTYPE = SQO_TYPE !
|
||||
END IF !
|
||||
!
|
||||
NONE = '' !
|
||||
!
|
||||
CLIST(7) = D_FUNC !
|
||||
CLIST(8) = D_FUNC !
|
||||
CLIST(9) = D_FUNC !
|
||||
CLIST(10) = D_FUNC !
|
||||
!
|
||||
CLIST(11) = PL_DISP !
|
||||
CLIST(12) = NONE !
|
||||
CLIST(13) = NONE !
|
||||
CLIST(14) = SC_TYPE !
|
||||
CLIST(15) = NONE !
|
||||
CLIST(16) = NONE !
|
||||
!
|
||||
CLIST(17) = LFTYPE !
|
||||
CLIST(18) = IQ_TYPE !
|
||||
CLIST(19) = SFTYPE !
|
||||
CLIST(20) = GR_TYPE !
|
||||
CLIST(21) = RH_TYPE !
|
||||
CLIST(22) = D_FUNC !
|
||||
CLIST(23) = D_FUNC !
|
||||
CLIST(24) = NONE !
|
||||
CLIST(25) = LANDAU !
|
||||
CLIST(26) = DAMPING !
|
||||
CLIST(27) = LT_TYPE !
|
||||
CLIST(28) = NONE !
|
||||
CLIST(29) = D_FUNC !
|
||||
CLIST(30) = D_FUNC !
|
||||
CLIST(31) = RT_TYPE !
|
||||
CLIST(32) = SC_TYPE !
|
||||
CLIST(33) = NONE !
|
||||
CLIST(34) = D_FUNC !
|
||||
CLIST(35) = SFTYPE !
|
||||
CLIST(36) = D_FUNC !
|
||||
CLIST(37) = D_FUNC !
|
||||
CLIST(38) = D_FUNC !
|
||||
CLIST(39) = D_FUNC !
|
||||
CLIST(40) = D_FUNC !
|
||||
CLIST(41) = CONFIN !
|
||||
CLIST(42) = CONFIN !
|
||||
CLIST(43) = NONE !
|
||||
CLIST(44) = NONE !
|
||||
CLIST(45) = D_FUNC !
|
||||
CLIST(46) = D_FUNC !
|
||||
CLIST(47) = CONFIN !
|
||||
CLIST(48) = NONE !
|
||||
CLIST(49) = NONE !
|
||||
CLIST(50) = NONE !
|
||||
CLIST(51) = NONE !
|
||||
CLIST(52) = NONE !
|
||||
CLIST(53) = NONE !
|
||||
CLIST(54) = NONE !
|
||||
CLIST(55) = NEV_TYPE !
|
||||
CLIST(56) = MEM_TYPE !
|
||||
!
|
||||
CLIST(57) = GP_TYPE !
|
||||
CLIST(58) = TH_PROP !
|
||||
CLIST(59) = TH_PROP !
|
||||
CLIST(60) = TH_PROP !
|
||||
CLIST(61) = TH_PROP !
|
||||
CLIST(62) = TH_PROP !
|
||||
CLIST(63) = TH_PROP !
|
||||
CLIST(64) = TH_PROP !
|
||||
CLIST(65) = TH_PROP !
|
||||
CLIST(66) = TH_PROP !
|
||||
CLIST(67) = TH_PROP !
|
||||
CLIST(68) = TH_PROP !
|
||||
CLIST(60) = TH_PROP !
|
||||
CLIST(70) = TH_PROP !
|
||||
!
|
||||
CLIST(71) = NONE !
|
||||
CLIST(72) = NONE !
|
||||
CLIST(73) = NONE !
|
||||
CLIST(74) = NONE !
|
||||
CLIST(75) = NONE !
|
||||
!
|
||||
CLIST(76) = NONE !
|
||||
CLIST(77) = NONE !
|
||||
CLIST(78) = NONE !
|
||||
!
|
||||
CLIST(79) = NONE !
|
||||
CLIST(80) = NONE !
|
||||
CLIST(81) = EXC_TYPE !
|
||||
CLIST(82) = EC_TYPE !
|
||||
CLIST(83) = NONE !
|
||||
CLIST(84) = NONE !
|
||||
CLIST(85) = NONE !
|
||||
!
|
||||
CLIST(86) = VI_TYPE !
|
||||
CLIST(87) = DC_TYPE !
|
||||
!
|
||||
CLIST(88) = D_FUNC !
|
||||
CLIST(89) = D_FUNC !
|
||||
CLIST(90) = D_FUNC !
|
||||
CLIST(91) = D_FUNC !
|
||||
CLIST(92) = D_FUNC !
|
||||
!
|
||||
END SUBROUTINE CALC_TYPE
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION INDEX_FILE(I_UNIT)
|
||||
!
|
||||
! This function associates each Fortran unit to an index (0/1)
|
||||
! which determines whether the file has to indexed by the
|
||||
! input data file number (0) or not (1), when looping
|
||||
! over these input data files. In practice:
|
||||
!
|
||||
! * Files depending on q, omega, r have to be indexed
|
||||
! * files depending on r_s, T must not be indexed
|
||||
!
|
||||
! For instance, if we want to compute the correlation energy
|
||||
! as a function of r_s, we will loop on the input data files
|
||||
! with different r_s, but all results have to be written
|
||||
! into the same output file 'Results/corr_ener.dat'
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 26 Jan 2021
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NOFFN
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER, INTENT(IN) :: I_UNIT
|
||||
INTEGER :: INDEX_FILE
|
||||
INTEGER :: ID(NOFFN)
|
||||
!
|
||||
DATA ID( 1) / 0 / ! \
|
||||
DATA ID( 2) / 0 / ! \
|
||||
DATA ID( 3) / 0 / ! \>> Fortran units not used
|
||||
DATA ID( 4) / 0 / ! />> for output files
|
||||
DATA ID( 5) / 0 / ! /
|
||||
DATA ID( 6) / 0 / ! /
|
||||
DATA ID( 7) / 0 / ! dielectric function file
|
||||
DATA ID( 8) / 0 / ! polarization function
|
||||
DATA ID( 9) / 0 / ! susceptibility function
|
||||
DATA ID(10) / 0 / ! electrical conductivity
|
||||
!
|
||||
DATA ID(11) / 0 / ! plasmon dispersion file
|
||||
DATA ID(12) / 0 / ! electron-hole dispersion file
|
||||
DATA ID(13) / 0 / ! two electron-hole dispersion
|
||||
DATA ID(14) / 0 / ! screened Coulomb (k-space)
|
||||
DATA ID(15) / 0 / ! screened Coulomb (real space)
|
||||
DATA ID(16) / 0 / ! plasmon kinetic energy
|
||||
!
|
||||
DATA ID(17) / 0 / ! local-field correction file G(q,om)
|
||||
DATA ID(18) / 0 / ! G(q,inf) file
|
||||
DATA ID(19) / 0 / ! structure factor file S(q,om)
|
||||
DATA ID(20) / 0 / ! pair correlation function file
|
||||
DATA ID(21) / 0 / ! pair distribution function file
|
||||
DATA ID(22) / 0 / ! vertex function Gamma(q,om)
|
||||
DATA ID(23) / 0 / ! plasmon damping coefficient Im[eps]/q^2
|
||||
DATA ID(24) / 0 / ! momentum distribution
|
||||
DATA ID(25) / 0 / ! Landau parameters
|
||||
DATA ID(26) / 0 / ! damping file
|
||||
DATA ID(27) / 0 / ! plasmon lifetime file
|
||||
DATA ID(28) / 0 / ! plasmon broadening
|
||||
DATA ID(29) / 0 / ! plasmon energy
|
||||
DATA ID(30) / 0 / ! plasmon q-bounds
|
||||
DATA ID(31) / 0 / ! relaxation time
|
||||
DATA ID(32) / 0 / ! screening wave vector
|
||||
DATA ID(33) / 0 / ! Debye wave vector
|
||||
DATA ID(34) / 0 / ! moments of epsilon
|
||||
DATA ID(35) / 0 / ! moments of S(q,omega)
|
||||
DATA ID(36) / 0 / ! moments of loss function
|
||||
DATA ID(37) / 0 / ! moments of conductivity
|
||||
DATA ID(38) / 0 / ! derivative of Re[ dielectric function ]
|
||||
DATA ID(39) / 0 / ! Re[ dielectric function ] = 0
|
||||
DATA ID(40) / 0 / ! sum rules for epsilon
|
||||
DATA ID(41) / 0 / ! confinement wave function
|
||||
DATA ID(42) / 0 / ! confinement potential
|
||||
DATA ID(43) / 0 / ! effective mass
|
||||
DATA ID(44) / 0 / ! mean free path
|
||||
DATA ID(45) / 0 / ! spectral function
|
||||
DATA ID(46) / 0 / ! self-energy
|
||||
DATA ID(47) / 1 / ! subband energies
|
||||
DATA ID(48) / 0 / ! Eliashberg function
|
||||
DATA ID(49) / 0 / ! Grüneisen parameter
|
||||
DATA ID(50) / 0 / ! Fermi-Dirac distribution
|
||||
DATA ID(51) / 0 / ! Bose-Einstein distribution
|
||||
DATA ID(52) / 0 / ! Maxwell distribution
|
||||
DATA ID(53) / 1 / ! scale parameters
|
||||
DATA ID(54) / 0 / ! density of states
|
||||
DATA ID(55) / 0 / ! Nevanlinaa function
|
||||
DATA ID(56) / 0 / ! memory function
|
||||
!
|
||||
DATA ID(57) / 1 / ! grand partition function
|
||||
DATA ID(58) / 1 / ! electronic pressure
|
||||
DATA ID(59) / 1 / ! compressibility
|
||||
DATA ID(60) / 1 / ! chemical potential
|
||||
DATA ID(61) / 1 / ! bulk modulus
|
||||
DATA ID(62) / 1 / ! shear modulus
|
||||
DATA ID(63) / 1 / ! zero sound velocity
|
||||
DATA ID(64) / 1 / ! first sound velocity
|
||||
DATA ID(65) / 1 / ! Debye temperature
|
||||
DATA ID(66) / 1 / ! Pauli paramagnetic susceptibility
|
||||
DATA ID(67) / 1 / ! internal energy
|
||||
DATA ID(68) / 1 / ! excess internal energy
|
||||
DATA ID(69) / 1 / ! Helmholtz free energy
|
||||
DATA ID(70) / 1 / ! entropy
|
||||
!
|
||||
DATA ID(71) / 1 / ! Fermi energy
|
||||
DATA ID(72) / 1 / ! Fermi momentum
|
||||
DATA ID(73) / 1 / ! Fermi velocity
|
||||
DATA ID(74) / 1 / ! Fermi temperature
|
||||
DATA ID(75) / 1 / ! Fermi density of states
|
||||
!
|
||||
DATA ID(76) / 1 / ! thermal De Broglie wavelength
|
||||
DATA ID(77) / 1 / ! thermal velocity
|
||||
DATA ID(78) / 1 / ! thermal conductivity
|
||||
!
|
||||
DATA ID(79) / 1 / ! ground state energy
|
||||
DATA ID(80) / 1 / ! exchange energy
|
||||
DATA ID(81) / 1 / ! exchange correlation energy
|
||||
DATA ID(82) / 1 / ! correlation energy
|
||||
DATA ID(83) / 1 / ! Hartree-Fock energy
|
||||
DATA ID(84) / 1 / ! kinetic energy
|
||||
DATA ID(85) / 1 / ! potential energy
|
||||
!
|
||||
DATA ID(86) / 1 / ! shear viscosity
|
||||
DATA ID(87) / 1 / ! diffusion coefficient
|
||||
!
|
||||
DATA ID(88) / 0 / ! fluctuation potential file
|
||||
DATA ID(89) / 0 / ! energy loss function
|
||||
DATA ID(90) / 0 / ! stopping power
|
||||
DATA ID(91) / 0 / ! refractive index
|
||||
DATA ID(92) / 0 / ! dynamic screened Coulomb potential V(q,omega)
|
||||
!
|
||||
INDEX_FILE = ID(I_UNIT) !
|
||||
!
|
||||
END FUNCTION INDEX_FILE
|
||||
!
|
||||
END MODULE OUTFILES
|
|
@ -0,0 +1,859 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE INPUT_DATA
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE READ_DATA
|
||||
!
|
||||
! This subroutine reads the input data file of the epsilon.f90 code,
|
||||
! and either stores them into modules or pass them as arguments
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 6 Aug 2021
|
||||
!
|
||||
! Modules storing the data
|
||||
!
|
||||
USE MATERIAL_PROP
|
||||
USE EXT_FIELDS
|
||||
USE Q_GRID
|
||||
USE E_GRID
|
||||
USE R_GRID
|
||||
USE CONFIN_VAL
|
||||
USE MULTILAYER
|
||||
USE UNITS
|
||||
USE SCREENING_TYPE
|
||||
USE PLASMA
|
||||
USE CALCTYPE
|
||||
USE DF_VALUES
|
||||
USE PLASMON_DISPERSION
|
||||
USE LF_VALUES
|
||||
USE DAMPING_VALUES
|
||||
USE EL_ELE_INTER
|
||||
USE EL_PHO_INTER
|
||||
USE EL_IMP_INTER
|
||||
USE CLASSICAL_FLUID_VALUES
|
||||
USE SF_VALUES
|
||||
USE PC_VALUES
|
||||
USE PD_VALUES
|
||||
USE SPF_VALUES
|
||||
USE ENERGIES
|
||||
USE SPIN_POLARIZATION
|
||||
USE THERMO_PROPERTIES
|
||||
USE ELECTRON_MEAN_FREE_PATH
|
||||
USE MOMENTS
|
||||
USE ION_BEAM
|
||||
!
|
||||
USE OUT_VALUES_1
|
||||
USE OUT_VALUES_2
|
||||
USE OUT_VALUES_3
|
||||
USE OUT_VALUES_4
|
||||
USE OUT_VALUES_5
|
||||
USE OUT_VALUES_6
|
||||
USE OUT_VALUES_7
|
||||
USE OUT_VALUES_8
|
||||
USE OUT_VALUES_9
|
||||
USE OUT_VALUES_10
|
||||
USE OUT_VALUES_P
|
||||
!
|
||||
USE OUT_CALC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: N_HEAD,N_SEP,N_INT
|
||||
INTEGER :: I
|
||||
!
|
||||
CHARACTER (LEN = 8) :: DUMMY
|
||||
!
|
||||
! Separation blocks to skip when reading
|
||||
!
|
||||
N_HEAD=8 !
|
||||
N_SEP=3 !
|
||||
N_INT=1 !
|
||||
!
|
||||
! Reading the input data file
|
||||
!
|
||||
DO I=1,N_HEAD !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,10) Q_MIN,Q_MAX,N_Q !
|
||||
READ(5,11) E_MIN,E_MAX,N_E !
|
||||
READ(5,12) R_MIN,R_MAX,N_R !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,13) RS,MSOM,MAT_TYP,EPS_B !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,14) T,E,H,FLD !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,15) DMN !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,16) R0,L,OM0,CONFIN !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,17) DL,D1,N_DEP,N_INV !
|
||||
READ(5,18) H_TYPE,EPS_1,EPS_2 !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,19) UNIT,UNIK !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,20) SC_TYPE !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,21) PL_TYPE,ZION,ZION2 !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,22) CAL_TYPE !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,23) ESTDY,EPS_T,D_FUNC,I_T !
|
||||
READ(5,24) NEV_TYPE,MEM_TYPE,ALPHA,BETA !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,25) PL_DISP !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,26) GSTDY,GQ_TYPE,IQ_TYPE !
|
||||
READ(5,27) LANDAU,GQO_TYPE,G0_TYPE,GI_TYPE !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,28) DAMPING,LT_TYPE,RT_TYPE !
|
||||
READ(5,29) DR_TYPE,DC_TYPE,VI_TYPE !
|
||||
READ(5,30) EE_TYPE,EP_TYPE,EI_TYPE !
|
||||
READ(5,31) IP_TYPE,PD_TYPE,QD_TYPE,ZETA !
|
||||
READ(5,32) D_VALUE_1,POWER_1,EK !
|
||||
READ(5,33) D_VALUE_2,POWER_2,PCT !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,34) INT_POT,S,EPS,DELTA !
|
||||
READ(5,35) RC,ALF,M,N !
|
||||
READ(5,36) A1,A2,A3,A4 !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,37) EP_C,DEBYE_T !
|
||||
READ(5,38) NA,MA,RA !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,39) NI,EI_C !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,40) CF_TYPE,PF_TYPE,SL_TYPE !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,41) SSTDY,SQ_TYPE,SQO_TYPE !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,42) GR_TYPE,GR0_MODE !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,43) RH_TYPE !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,44) SPF_TYPE !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,45) EC_TYPE,FXC_TYPE,EXC_TYPE !
|
||||
READ(5,46) EX_TYPE,EK_TYPE
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,47) IMODE,XI
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,48) TH_PROP,GP_TYPE !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,49) EK_INI,EK_FIN !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,50) N_M,M_TYPE !
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,51) Z_BEAM,EK_BEAM !
|
||||
!
|
||||
! Reading the print switches I_XX
|
||||
!
|
||||
DO I=1,N_SEP !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,201) I_DF,I_PZ,I_SU,I_CD !
|
||||
!
|
||||
DO I=1,N_INT !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,202) I_PD,I_EH,I_E2,I_CK !
|
||||
READ(5,204) I_CR,I_PK !
|
||||
!
|
||||
DO I=1,N_INT !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,205) I_LF,I_IQ,I_SF,I_PC !
|
||||
READ(5,206) I_P2,I_VX,I_DC,I_MD !
|
||||
READ(5,207) I_LD,I_DP,I_LT,I_BR !
|
||||
READ(5,208) I_PE,I_QC,I_RL,I_KS !
|
||||
READ(5,209) I_OQ,I_ME,I_MS,I_ML !
|
||||
READ(5,210) I_MC,I_DE,I_ZE,I_SR !
|
||||
READ(5,211) I_CW,I_CF,I_EM,I_MF !
|
||||
READ(5,212) I_SP,I_SE,I_SB,I_ES !
|
||||
READ(5,213) I_GR,I_FD,I_BE,I_MX !
|
||||
READ(5,214) I_SC,I_DS,I_NV,I_MT !
|
||||
!
|
||||
DO I=1,N_INT !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,215) I_GP,I_PR,I_CO,I_CP !
|
||||
READ(5,216) I_BM,I_SH,I_S0,I_S1 !
|
||||
READ(5,217) I_DT,I_PS,I_IE,I_EI !
|
||||
READ(5,218) I_FH,I_EY !
|
||||
!
|
||||
DO I=1,N_INT !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,219) I_EF,I_KF,I_VF,I_TE !
|
||||
READ(5,220) I_DL !
|
||||
!
|
||||
DO I=1,N_INT !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,221) I_TW,I_VT,I_TC !
|
||||
!
|
||||
DO I=1,N_INT !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,222) I_EG,I_EX,I_XC,I_EC !
|
||||
READ(5,223) I_HF,I_EK,I_EP !
|
||||
!
|
||||
DO I=1,N_INT !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,224) I_VI,I_DI !
|
||||
!
|
||||
DO I=1,N_INT !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,225) I_FP,I_EL,I_PO,I_RF !
|
||||
READ(5,226) I_VC !
|
||||
!
|
||||
DO I=1,N_INT !
|
||||
READ(5,5) DUMMY !
|
||||
END DO !
|
||||
!
|
||||
READ(5,227) I_FN,I_WR,I_TI !
|
||||
!
|
||||
! Switches to call specific calculators
|
||||
!
|
||||
I_C1 = I_DF + I_PZ + I_SU + I_CD !
|
||||
I_C2 = I_PD + I_EH + I_E2 + I_CK + I_CR + I_PK !
|
||||
I_C3 = I_LF + I_IQ + I_SF + I_PC + I_P2 + I_VX + I_DC + & !
|
||||
I_MD + I_LD + I_DP + I_LT + I_BR + I_PE + I_QC + & !
|
||||
I_RL + I_KS + I_OQ + I_ME + I_MS + I_ML + I_MC + & !
|
||||
I_DE + I_ZE + I_SR + I_CW + I_CF + I_EM + I_MF + & !
|
||||
I_SP + I_SE + I_SB + I_ES + I_GR + I_FD + I_BE + & !
|
||||
I_MX + I_SC + I_DS + I_NV + I_MT !
|
||||
I_C4 = I_GP + I_PR + I_CO + I_CP + I_BM + I_SH + I_S0 + & !
|
||||
I_S1 + I_DT + I_PS + I_IE + I_EI + I_FH + I_EY !
|
||||
I_C5 = I_EF + I_KF + I_VF + I_TE + I_DL !
|
||||
I_C6 = I_TW + I_VT + I_TC !
|
||||
I_C7 = I_EG + I_EX + I_XC + I_EC + I_HF + I_EK + I_EP !
|
||||
I_C8 = I_VI + I_DI !
|
||||
I_C9 = I_EL + I_PO + I_RF + I_VC !
|
||||
I_PP = I_FP + I_PD !
|
||||
!
|
||||
! Steps in q/k_F , (h_bar omega)/E_F and k_F*r
|
||||
!
|
||||
IF(N_Q == 1) THEN !
|
||||
Q_STEP = 1 !
|
||||
ELSE ! step in Q
|
||||
Q_STEP = (Q_MAX - Q_MIN) / (FLOAT(N_Q-1)) !
|
||||
END IF !
|
||||
!
|
||||
IF(N_E == 1) THEN !
|
||||
E_STEP = 1 !
|
||||
ELSE ! step in E
|
||||
E_STEP = (E_MAX - E_MIN) / (FLOAT(N_E-1)) !
|
||||
END IF !
|
||||
!
|
||||
IF(N_R == 1) THEN !
|
||||
R_STEP = 1 !
|
||||
ELSE ! step in R
|
||||
R_STEP = (R_MAX - R_MIN) /(FLOAT(N_R-1)) !
|
||||
END IF !
|
||||
!
|
||||
! Writing into the log file
|
||||
!
|
||||
!
|
||||
WRITE(6,401) !
|
||||
WRITE(6,402) !
|
||||
WRITE(6,403) !
|
||||
WRITE(6,404) !
|
||||
WRITE(6,405) !
|
||||
WRITE(6,406) !
|
||||
WRITE(6,407) !
|
||||
!
|
||||
WRITE(6,601) !
|
||||
WRITE(6,702) !
|
||||
WRITE(6,601) !
|
||||
WRITE(6,801) !
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,110) Q_MIN,Q_MAX,N_Q !
|
||||
WRITE(6,111) E_MIN,E_MAX,N_E !
|
||||
WRITE(6,112) R_MIN,R_MAX,N_R !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
WRITE(6,802) !
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,113) RS,MSOM,MAT_TYP,EPS_B !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
WRITE(6,803) !
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,114) T,E,H,FLD !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
WRITE(6,804) !
|
||||
!
|
||||
WRITE(6,115) DMN !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
WRITE(6,805) !
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,116) R0,L,OM0,CONFIN !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
WRITE(6,806) !
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,117) DL,D1,N_DEP,N_INV !
|
||||
WRITE(6,118) H_TYPE,EPS_1,EPS_2 !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
WRITE(6,807) !
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,119) UNIT,UNIK !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
WRITE(6,808) !
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,120) SC_TYPE !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
WRITE(6,809) !
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,121) PL_TYPE,ZION,ZION2 !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
WRITE(6,810) !
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,122) CAL_TYPE
|
||||
!
|
||||
WRITE(6,601) !
|
||||
WRITE(6,703) !
|
||||
WRITE(6,601) !
|
||||
!
|
||||
WRITE(6,123) ESTDY,EPS_T,D_FUNC,I_T !
|
||||
!
|
||||
WRITE(6,124) NEV_TYPE,MEM_TYPE,ALPHA,BETA !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
WRITE(6,811) !
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,125) PL_DISP !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
WRITE(6,812) !
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,126) GSTDY,GQ_TYPE,IQ_TYPE !
|
||||
WRITE(6,127) LANDAU,GQO_TYPE,G0_TYPE,GI_TYPE !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
WRITE(6,813) !
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,128) DAMPING,LT_TYPE,RT_TYPE !
|
||||
WRITE(6,129) DR_TYPE,DC_TYPE,VI_TYPE !
|
||||
WRITE(6,130) EE_TYPE,EP_TYPE,EI_TYPE !
|
||||
WRITE(6,131) IP_TYPE,PD_TYPE,QD_TYPE,ZETA !
|
||||
WRITE(6,132) D_VALUE_1,POWER_1,EK !
|
||||
WRITE(6,133) D_VALUE_2,POWER_2,PCT !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
WRITE(6,814) !
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,134) INT_POT,S,EPS,DELTA !
|
||||
WRITE(6,135) RC,ALF,M,N !
|
||||
WRITE(6,136) A1,A2,A3,A4 !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
WRITE(6,815) !
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,137) EP_C,DEBYE_T !
|
||||
WRITE(6,138) NA,MA,RA !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
WRITE(6,816) !
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,139) NI,EI_C !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
WRITE(6,817) !
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,140) CF_TYPE,PF_TYPE,SL_TYPE !
|
||||
!
|
||||
WRITE(6,601) !
|
||||
WRITE(6,704) !
|
||||
WRITE(6,601) !
|
||||
!
|
||||
WRITE(6,141) SSTDY,SQ_TYPE,SQO_TYPE !
|
||||
!
|
||||
WRITE(6,601) !
|
||||
WRITE(6,705) !
|
||||
WRITE(6,601) !
|
||||
!
|
||||
WRITE(6,142) GR_TYPE,GR0_MODE !
|
||||
!
|
||||
WRITE(6,601) !
|
||||
WRITE(6,706) !
|
||||
WRITE(6,601) !
|
||||
!
|
||||
WRITE(6,143) RH_TYPE !
|
||||
!
|
||||
WRITE(6,601) !
|
||||
WRITE(6,707) !
|
||||
WRITE(6,601) !
|
||||
!
|
||||
WRITE(6,144) SPF_TYPE !
|
||||
!
|
||||
WRITE(6,601) !
|
||||
WRITE(6,708) !
|
||||
WRITE(6,601) !
|
||||
!
|
||||
!
|
||||
WRITE(6,145) EC_TYPE,FXC_TYPE,EXC_TYPE !
|
||||
WRITE(6,146) EX_TYPE,EK_TYPE !
|
||||
!
|
||||
WRITE(6,601) !
|
||||
WRITE(6,709) !
|
||||
WRITE(6,601) !
|
||||
!
|
||||
WRITE(6,147) IMODE,XI
|
||||
!
|
||||
WRITE(6,601) !
|
||||
WRITE(6,710) !
|
||||
WRITE(6,601) !
|
||||
!
|
||||
WRITE(6,148) TH_PROP,GP_TYPE !
|
||||
!
|
||||
WRITE(6,601) !
|
||||
WRITE(6,711) !
|
||||
WRITE(6,601) !
|
||||
!
|
||||
WRITE(6,149) EK_INI,EK_FIN !
|
||||
!
|
||||
WRITE(6,601) !
|
||||
WRITE(6,712) !
|
||||
WRITE(6,601) !
|
||||
!
|
||||
WRITE(6,150) N_M,M_TYPE !
|
||||
!
|
||||
WRITE(6,601) !
|
||||
WRITE(6,713) !
|
||||
WRITE(6,601) !
|
||||
!
|
||||
WRITE(6,151) Z_BEAM,EK_BEAM !
|
||||
!
|
||||
! Writing the print switches
|
||||
!
|
||||
WRITE(6,601) !
|
||||
WRITE(6,714) !
|
||||
WRITE(6,601) !
|
||||
!
|
||||
WRITE(6,301) I_DF,I_PZ,I_SU,I_CD !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,302) I_PD,I_EH,I_E2,I_CK !
|
||||
WRITE(6,304) I_CR,I_PK !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,305) I_LF,I_IQ,I_SF,I_PC !
|
||||
WRITE(6,306) I_P2,I_VX,I_DC,I_MD !
|
||||
WRITE(6,307) I_LD,I_DP,I_LT,I_BR !
|
||||
WRITE(6,308) I_PE,I_QC,I_RL,I_KS !
|
||||
WRITE(6,309) I_OQ,I_ME,I_MS,I_ML !
|
||||
WRITE(6,310) I_MC,I_DE,I_ZE,I_SR !
|
||||
WRITE(6,311) I_CW,I_CF,I_EM,I_MF !
|
||||
WRITE(6,312) I_SP,I_SE,I_SB,I_ES !
|
||||
WRITE(6,313) I_GR,I_FD,I_BE,I_MX !
|
||||
WRITE(6,314) I_SC,I_DS,I_NV,I_MT !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,315) I_GP,I_PR,I_CO,I_CP !
|
||||
WRITE(6,316) I_BM,I_SH,I_S0,I_S1 !
|
||||
WRITE(6,317) I_DT,I_PS,I_IE,I_EI !
|
||||
WRITE(6,318) I_FH,I_EY !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,319) I_EF,I_KF,I_VF,I_TE !
|
||||
WRITE(6,320) I_DL !
|
||||
!
|
||||
!
|
||||
WRITE(6,321) I_TW,I_VT,I_TC !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,322) I_EG,I_EX,I_XC,I_EC !
|
||||
WRITE(6,323) I_HF,I_EK,I_EP !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,324) I_VI,I_DI !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,325) I_FP,I_EL,I_PO,I_RF !
|
||||
WRITE(6,326) I_VC !
|
||||
!
|
||||
WRITE(6,602) !
|
||||
!
|
||||
WRITE(6,327) I_FN,I_WR,I_TI !
|
||||
!
|
||||
WRITE(6,601) !
|
||||
!
|
||||
WRITE(6,500) !
|
||||
WRITE(6,500) !
|
||||
WRITE(6,407) !
|
||||
!
|
||||
! Formats: Reading standard input data
|
||||
!
|
||||
5 FORMAT(A8)
|
||||
!
|
||||
10 FORMAT(6X,F7.3,3X,F7.3,2X,I5)
|
||||
11 FORMAT(6X,F7.3,3X,F7.3,2X,I5)
|
||||
12 FORMAT(6X,F7.3,3X,F7.3,2X,I5)
|
||||
13 FORMAT(6X,F7.3,3X,F7.3,2X,A5,4X,F9.3)
|
||||
14 FORMAT(3X,F10.3,3X,F7.3,3X,F7.3,5X,A2)
|
||||
15 FORMAT(8X,A2)
|
||||
16 FORMAT(6X,F7.3,3X,F7.3,3X,F6.2,1X,A7)
|
||||
17 FORMAT(6X,F7.3,3X,F7.3,3X,F7.3,3X,F7.3)
|
||||
18 FORMAT(6X,A4,4X,F9.3,1X,F9.3)
|
||||
19 FORMAT(7X,A3,8X,A2)
|
||||
20 FORMAT(8X,A2)
|
||||
21 FORMAT(7X,A3,6X,F7.3,3X,F7.3)
|
||||
22 FORMAT(3X,A7)
|
||||
23 FORMAT(3X,A7,6X,A4,6X,A4,9X,I1)
|
||||
24 FORMAT(6X,A4,6X,A4,8X,F5.3,5X,F5.3)
|
||||
25 FORMAT(3X,A7)
|
||||
26 FORMAT(3X,A7,6X,A4,7X,A3)
|
||||
27 FORMAT(6X,A4,6X,A4,8X,A2,8X,A2)
|
||||
28 FORMAT(6X,A4,6X,A4,7X,A3)
|
||||
29 FORMAT(6X,A4,6X,A4,6X,A4)
|
||||
30 FORMAT(6X,A4,6X,A4,6X,A4)
|
||||
31 FORMAT(6X,A4,6X,A4,6X,A4,4X,F9.3)
|
||||
32 FORMAT(6X,F7.3,2X,A5,4X,F9.3)
|
||||
33 FORMAT(6X,F7.3,2X,A5,8X,F4.2)
|
||||
34 FORMAT(5X,A5,6X,F7.3,2X,F8.3,3X,F7.3)
|
||||
35 FORMAT(6X,F7.3,3X,F7.3,5X,I2,8X,I2)
|
||||
36 FORMAT(6X,F7.3,3X,F7.3,3X,F7.3,3X,F7.3)
|
||||
37 FORMAT(5X,F8.3,2X,F8.3)
|
||||
38 FORMAT(5X,F8.3,2X,F8.3,2X,F8.3)
|
||||
39 FORMAT(5X,F8.3,2X,F8.3)
|
||||
40 FORMAT(7X,A3,7X,A3,7X,A3)
|
||||
41 FORMAT(3X,A7,7X,A3,7X,A3)
|
||||
42 FORMAT(7X,A3,6X,A4)
|
||||
43 FORMAT(7X,A3)
|
||||
44 FORMAT(6X,A4)
|
||||
45 FORMAT(4X,A6,8X,A2,8X,A2)
|
||||
46 FORMAT(7X,A3,7X,A3)
|
||||
47 FORMAT(9X,I1,6X,F7.3)
|
||||
48 FORMAT(6X,A4,7X,A3)
|
||||
49 FORMAT(5X,F9.3,1X,F9.3)
|
||||
50 FORMAT(8X,I2,7X,A3)
|
||||
51 FORMAT(6X,F6.2,1X,F9.2)
|
||||
!
|
||||
! Formats: Writing standard input data
|
||||
!
|
||||
110 FORMAT(6X,F7.3,3X,F7.3,2X,I5,19X,'Q_MIN,Q_MAX,N_Q')
|
||||
111 FORMAT(6X,F7.3,3X,F7.3,2X,I5,19X,'E_MIN,E_MAX,N_E')
|
||||
112 FORMAT(6X,F7.3,3X,F7.3,2X,I5,19X,'R_MIN,R_MAX,N_R')
|
||||
113 FORMAT(6X,F7.3,3X,F7.3,2X,A5,4X,F9.3,6X,'RS,MSOM,MAT_TYP,EPS_B')
|
||||
114 FORMAT(3X,F10.3,3X,F7.3,3X,F7.3,5X,A2,9X,'T,E,H,FLD')
|
||||
115 FORMAT(8X,A2,39X,'DIM')
|
||||
116 FORMAT(6X,F7.3,3X,F7.3,3X,F6.2,1X,A7,9X,'R0,L,OM0,CONFIN')
|
||||
117 FORMAT(6X,F7.3,3X,F7.3,3X,F7.3,3X,F7.3,6X,'DL,D1,N_DEP,N_INV')
|
||||
118 FORMAT(6X,A4,4X,F9.3,1X,F9.3,16X,'H_TYPE,EPS_1,EPS_2')
|
||||
119 FORMAT(7X,A3,8X,A2,29X,'UNIT,UNIK')
|
||||
120 FORMAT(8X,A2,39X,'SC_TYPE')
|
||||
121 FORMAT(7X,A3,6X,F7.3,3X,F7.3,16X,'PL_TYPE,ZION,ZION2')
|
||||
122 FORMAT(3X,A7,39X,'CAL_TYPE')
|
||||
123 FORMAT(3X,A7,6X,A4,6X,A4,9X,I1,9X,'ESTDY,EPS_T,D_FUNC,', &
|
||||
'I_T')
|
||||
124 FORMAT(6X,A4,6X,A4,8X,F5.3,5X,F5.3,6X,'NEV_TYPE,MEM_TYPE,ALPHA,BETA')
|
||||
125 FORMAT(3X,A7,39X,'PL_DISP')
|
||||
126 FORMAT(3X,A7,6X,A4,7X,A3,19X,'GSTDY,GQ_TYPE,IQ_TYPE')
|
||||
127 FORMAT(6X,A4,6X,A4,8X,A2,8X,A2,9X,'LANDAU,GQO_TYPE,G0_TYPE,GI_TYPE')
|
||||
128 FORMAT(6X,A4,6X,A4,7X,A3,19X,'DAMPING,LT_TYPE,RT_TYPE')
|
||||
129 FORMAT(6X,A4,6X,A4,6X,A4,19X,'DR_TYPE,DC_TYPE,VI_TYPE')
|
||||
130 FORMAT(6X,A4,6X,A4,6X,A4,19X,'EE_TYPE,EP_TYPE,EI_TYPE')
|
||||
131 FORMAT(6X,A4,6X,A4,6X,A4,4X,F9.3,6X,'IP_TYPE,PD_TYPE,QD_TYPE,ZETA')
|
||||
132 FORMAT(6X,F7.3,2X,A5,4X,F9.3,16X,'D_VALUE_1,POWER_1,EK')
|
||||
133 FORMAT(6X,F7.3,2X,A5,8X,F4.2,17X,'D_VALUE_2,POWER_2,PCT')
|
||||
134 FORMAT(5X,A5,6X,F7.3,2X,F8.3,3X,F7.3,6X,'INT_POT,S,EPS,DELTA')
|
||||
135 FORMAT(6X,F7.3,3X,F7.3,5X,I2,8X,I2,9X,'RC,ALF,M,N')
|
||||
136 FORMAT(6X,F7.3,3X,F7.3,3X,F7.3,3X,F7.3,6X,'A1,A2,A3,A4')
|
||||
137 FORMAT(5X,F8.3,2X,F8.3,26X,'EP_C,DEBYE_T')
|
||||
138 FORMAT(5X,F8.3,2X,F8.3,2X,F8.3,16X,'NA,MA,RA')
|
||||
139 FORMAT(5X,F8.3,2X,F8.3,26X,'NI,EI_C')
|
||||
140 FORMAT(7X,A3,7X,A3,7X,A3,19X,'CF_TYPE,PF_TYPE,SL_TYPE')
|
||||
141 FORMAT(3X,A7,7X,A3,7X,A3,19X,'SSTDY,SQ_TYPE,SQO_TYPE')
|
||||
142 FORMAT(7X,A3,6X,A4,29X,'GR_TYPE,GR0_MODE')
|
||||
143 FORMAT(7X,A3,39X,'RH_TYPE')
|
||||
144 FORMAT(6X,A4,39X,'SPF_TYPE')
|
||||
145 FORMAT(4X,A6,8X,A2,8X,A2,19X,'EC_TYPE,FXC_TYPE,EXC_TYPE')
|
||||
146 FORMAT(7X,A3,7X,A3,29X,'EX_TYPE,EK_TYPE')
|
||||
147 FORMAT(9X,I1,6X,F7.3,26X,'IMODE,XI')
|
||||
148 FORMAT(6X,A4,7X,A3,29X,'TH_PROP,GP_TYPE')
|
||||
149 FORMAT(4X,F9.3,1X,F9.3,26X,'EK_INI,EK_FIN')
|
||||
150 FORMAT(8X,I2,7X,A3,29X,'N_M,M_TYPE')
|
||||
151 FORMAT(6X,F6.2,1X,F9.2,27X,'Z_BEAM,EK_BEAM')
|
||||
!
|
||||
! Formats: Reading print switches
|
||||
!
|
||||
201 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
!---------------------------------------------------
|
||||
202 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
204 FORMAT( 9X,I1,9X,I1)
|
||||
!---------------------------------------------------
|
||||
205 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
206 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
207 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
208 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
209 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
210 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
211 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
212 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
213 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
214 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
!---------------------------------------------------
|
||||
215 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
216 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
217 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
218 FORMAT( 9X,I1,9X,I1)
|
||||
!---------------------------------------------------
|
||||
219 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
220 FORMAT( 9X,I1)
|
||||
!---------------------------------------------------
|
||||
221 FORMAT( 9X,I1,9X,I1,9X,I1)
|
||||
!---------------------------------------------------
|
||||
222 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
223 FORMAT( 9X,I1,9X,I1,9X,I1)
|
||||
!---------------------------------------------------
|
||||
224 FORMAT( 9X,I1,9X,I1)
|
||||
!---------------------------------------------------
|
||||
225 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1)
|
||||
226 FORMAT( 9X,I1)
|
||||
!---------------------------------------------------
|
||||
227 FORMAT( 9X,I1,9X,I1,8X,I2)
|
||||
!---------------------------------------------------
|
||||
!
|
||||
! Formats: Writing print switches
|
||||
!
|
||||
301 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_DF,I_PZ,I_SU,I_CD')
|
||||
!---------------------------------------------------
|
||||
302 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_PD,I_EH,I_E2,I_CK')
|
||||
304 FORMAT( 9X,I1,9X,I1,29X,'I_CR,I_PK')
|
||||
!---------------------------------------------------
|
||||
305 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_LF,I_IQ,I_SF,I_PC')
|
||||
306 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_P2,I_VX,I_DC,I_MD')
|
||||
307 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_LD,I_DP,I_LT,I_BR')
|
||||
308 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_PE,I_QC,I_RL,I_KS')
|
||||
309 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_OQ,I_ME,I_MS,I_ML')
|
||||
310 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_MC,I_DE,I_ZE,I_SR')
|
||||
311 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_CW,I_CF,I_EM,I_MF')
|
||||
312 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_SP,I_SE,I_SB,I_ES')
|
||||
313 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_GR,I_FD,I_BE,I_MX')
|
||||
314 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_SC,I_DS,I_NV,I_MT')
|
||||
!---------------------------------------------------
|
||||
315 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_GP,I_PR,I_CO,I_CP')
|
||||
316 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_BM,I_SH,I_S0,I_S1')
|
||||
317 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_DT,I_PS,I_IE,I_EI')
|
||||
318 FORMAT( 9X,I1,9X,I1,29X,'I_FH,I_EY')
|
||||
!---------------------------------------------------
|
||||
319 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_EF,I_KF,I_VF,I_TE')
|
||||
320 FORMAT( 9X,I1,39X,'I_DL')
|
||||
!---------------------------------------------------
|
||||
321 FORMAT( 9X,I1,9X,I1,9X,I1,19X,'I_TW,I_VT,I_TC')
|
||||
!---------------------------------------------------
|
||||
322 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_EG,I_EX,I_XC,I_EC')
|
||||
323 FORMAT( 9X,I1,9X,I1,9X,I1,19X,'I_HF,I_EK,I_EP')
|
||||
!---------------------------------------------------
|
||||
324 FORMAT( 9X,I1,9X,I1,29X,'I_VI,I_DI')
|
||||
!---------------------------------------------------
|
||||
325 FORMAT( 9X,I1,9X,I1,9X,I1,9X,I1,9X,'I_FP,I_EL,I_PO,I_RF')
|
||||
326 FORMAT( 9X,I1,39X,'I_VC')
|
||||
!---------------------------------------------------
|
||||
327 FORMAT( 9X,I1,9X,I1,8X,I2,19X,'I_FN,I_WR,I_TI')
|
||||
!
|
||||
401 FORMAT('**********************************************************************************')
|
||||
402 FORMAT('********************* *********************')
|
||||
403 FORMAT('********************* Fermi Liquid *********************')
|
||||
404 FORMAT('********************* Dielectric Function *********************')
|
||||
405 FORMAT('********************* Input Datafile *********************')
|
||||
406 FORMAT('********************* *********************')
|
||||
407 FORMAT('**********************************************************************************',//)
|
||||
!
|
||||
500 FORMAT(' ')
|
||||
!
|
||||
601 FORMAT(' =======+=========+=========+=========+=========+============================')
|
||||
602 FORMAT(' -------+---------+---------+---------+---------+----------------------------')
|
||||
!
|
||||
702 FORMAT(' GENERAL PARAMETERS : ')
|
||||
703 FORMAT(' DIELECTRIC FUNCTION : ')
|
||||
704 FORMAT(' STRUCTURE FACTOR : ')
|
||||
705 FORMAT(' PAIR CORRELATION FUNCTION : ')
|
||||
706 FORMAT(' PAIR DISTRIBUTION FUNCTION : ')
|
||||
707 FORMAT(' SPECTRAL FUNCTION : ')
|
||||
708 FORMAT(' ENERGY CALCULATIONS : ')
|
||||
709 FORMAT(' SPIN POLARIZATION : ')
|
||||
710 FORMAT(' THERMODYNAMIC PROPERTIES : ')
|
||||
711 FORMAT(' ELECTRON MEAN FREE PATH : ')
|
||||
712 FORMAT(' CALCULATION OF MOMENTS: ')
|
||||
713 FORMAT(' INCOMING ION BEAM : ')
|
||||
714 FORMAT(' OUTPUT CALCULATIONS/PRINTING : ')
|
||||
!
|
||||
801 FORMAT(' (q,omega,r) : ')
|
||||
802 FORMAT(' Material''s properties : ')
|
||||
803 FORMAT(' External fields : ')
|
||||
804 FORMAT(' System''s dimension : ')
|
||||
805 FORMAT(' Confinement : ')
|
||||
806 FORMAT(' Multilayer structure : ')
|
||||
807 FORMAT(' Units : ')
|
||||
808 FORMAT(' Screening : ')
|
||||
809 FORMAT(' Plasma type : ')
|
||||
810 FORMAT(' Calculation type : ')
|
||||
811 FORMAT(' Analytical plasmon dispersion : ')
|
||||
812 FORMAT(' Local-field corrections ')
|
||||
813 FORMAT(' Damping : ')
|
||||
814 FORMAT(' Electron-electron interaction : ')
|
||||
815 FORMAT(' Electron-phonon interaction : ')
|
||||
816 FORMAT(' Electron-impurity interaction : ')
|
||||
817 FORMAT(' Classical fluid parameters : ')
|
||||
!
|
||||
END SUBROUTINE READ_DATA
|
||||
!
|
||||
END MODULE INPUT_DATA
|
|
@ -0,0 +1,37 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE DISP_COEF_EH
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: AE(0:6)
|
||||
!
|
||||
END MODULE DISP_COEF_EH
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE DISP_COEF_REAL
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: AR(0:6)
|
||||
!
|
||||
END MODULE DISP_COEF_REAL
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE DISP_COEF_COMP
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
COMPLEX (WP) :: AC(0:6)
|
||||
!
|
||||
END MODULE DISP_COEF_COMP
|
||||
|
|
@ -0,0 +1,431 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE INTERACTION_POTENTIALS_K
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE INTERACT_POT_K_3D(INT_POT,UNIT,UNIK,Q1,Q2,C1,C2, &
|
||||
K,KS,VQ)
|
||||
!
|
||||
! This subroutine computes interaction potentials in the
|
||||
! K-space in 3D.
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * INT_POT : type of interaction potential (3D)
|
||||
! INT_POT = 'COULO' Coulomb interaction
|
||||
! INT_POT= 'YUKAW' Yukawa interaction
|
||||
! INT_POT= 'RPAPO' RPA interaction
|
||||
! INT_POT = 'OVER1' Overhauser interaction
|
||||
! INT_POT = 'OVER2' modified Overhauser interaction
|
||||
! INT_POT = 'DEUTS' Deutsch interaction
|
||||
! INT_POT = 'PHOLE' particle-hole interaction
|
||||
! INT_POT = 'KELBG' Kelbg interaction
|
||||
! INT_POT = 'ASHPS' Ashcroft empty-core pseudopotential
|
||||
! * UNIT : system unit
|
||||
! UNIT = 'SIU' international system
|
||||
! UNIT = 'CGS' CGS system
|
||||
! * UNIK : K unit
|
||||
! UNIK = 'SI' international system
|
||||
! UNIK = 'AU' atomic units
|
||||
! * Q1 : charge of particle 1
|
||||
! * Q2 : charge of particle 2
|
||||
! * C1 : concentration of particles 1
|
||||
! * C2 : concentration of particles 2
|
||||
! * K : momentum (unit indifferent)
|
||||
! * KS : screening momentum (unit indifferent)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * VQ : interaction potential (energy)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Sep 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 2) :: UNIK
|
||||
CHARACTER (LEN = 3) :: UNIT
|
||||
CHARACTER (LEN = 5) :: INT_POT
|
||||
!
|
||||
REAL (WP) :: Q1,Q2,C1,C2,KS,K
|
||||
REAL (WP) :: VQ
|
||||
!
|
||||
IF(INT_POT == 'COULO') THEN !
|
||||
!
|
||||
VQ=V_COUL_K(UNIT,Q1,Q2,K) !
|
||||
!
|
||||
ELSE IF(INT_POT == 'YUKAW') THEN !
|
||||
!
|
||||
VQ=V_YUKA_K(UNIT,Q1,Q2,KS,K) !
|
||||
!
|
||||
ELSE IF(INT_POT == 'RPAPO') THEN !
|
||||
!
|
||||
VQ=V_RPAP_K(UNIT,Q1,Q2,KS,K) !
|
||||
!
|
||||
ELSE IF(INT_POT == 'OVER1') THEN !
|
||||
!
|
||||
CONTINUE !
|
||||
!
|
||||
ELSE IF(INT_POT == 'OVER2') THEN !
|
||||
!
|
||||
VQ=V_OVE2_K(UNIT,UNIK,Q1,Q2,K) !
|
||||
!
|
||||
ELSE IF(INT_POT == 'DEUTS') THEN !
|
||||
!
|
||||
VQ=V_DEUT_K(UNIT,Q1,Q2,C1,C2,KS,K) !
|
||||
!
|
||||
ELSE IF(INT_POT == 'PHOLE') THEN !
|
||||
!
|
||||
CONTINUE !
|
||||
!
|
||||
ELSE IF(INT_POT == 'KELBG') THEN !
|
||||
!
|
||||
VQ=V_KELB_K(UNIT,Q1,Q2,KS,K) !
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE INTERACT_POT_K_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_COUL_K(UNIT,Q1,Q2,K)
|
||||
!
|
||||
! This function computes the Coulomb interaction energy
|
||||
! between to particles in the K-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * UNIT : system unit
|
||||
! UNIT = 'SIU' international system
|
||||
! UNIT = 'CGS' CGS system
|
||||
! * Q1 : charge of particle 1
|
||||
! * Q2 : charge of particle 2
|
||||
! * K : momentum (unit indifferent)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 12 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : FOUR
|
||||
USE CONSTANTS_P1, ONLY : EPS_0
|
||||
USE PI_ETC, ONLY : PI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: UNIT
|
||||
!
|
||||
REAL (WP) :: Q1,Q2,K
|
||||
REAL (WP) :: V_COUL_K
|
||||
REAL (WP) :: COEF
|
||||
!
|
||||
IF(UNIT == 'SIU') THEN !
|
||||
COEF=Q1*Q2/EPS_0 !
|
||||
ELSE IF(UNIT == 'CGS') THEN !
|
||||
COEF=FOUR*PI*Q1*Q2 !
|
||||
END IF !
|
||||
!
|
||||
V_COUL_K=COEF/(K*K) !
|
||||
!
|
||||
END FUNCTION V_COUL_K
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_DEUT_K(UNIT,Q1,Q2,C1,C2,KS,K)
|
||||
!
|
||||
! This function computes the Deutsch interaction energy
|
||||
! between to particles in the K-space in a given unit system (SI or CGS)
|
||||
!
|
||||
! Warning: Two-component plasma only
|
||||
!
|
||||
!
|
||||
! References: (3) C. Deutsch, Phys. Lett. A 60, 317-318 (1977)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * UNIT : system unit
|
||||
! UNIT = 'SIU' international system
|
||||
! UNIT = 'CGS' CGS system
|
||||
! * Q1 : charge of particle 1
|
||||
! * Q2 : charge of particle 2
|
||||
! * C1 : concentration of particles 1
|
||||
! * C2 : concentration of particles 2
|
||||
! * KS : screening momentum (unit indifferent)
|
||||
! * K : momentum (unit indifferent)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 12 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,FOUR
|
||||
USE CONSTANTS_P1, ONLY : EPS_0
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE SQUARE_ROOTS, ONLY : SQR2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: UNIT
|
||||
!
|
||||
REAL (WP) :: Q1,Q2,C1,C2,KS,K
|
||||
REAL (WP) :: V_DEUT_K
|
||||
REAL (WP) :: COEF,AL1,AL2
|
||||
!
|
||||
IF(UNIT == 'SIU') THEN !
|
||||
COEF=Q1*Q2/EPS_0 !
|
||||
ELSE IF(UNIT == 'CGS') THEN !
|
||||
COEF=FOUR*PI*Q1*Q2 !
|
||||
END IF !
|
||||
!
|
||||
AL1=C1/SQR2 * SQRT( ONE - SQRT(ONE-FOUR*KS*KS/(C1*C1)) ) !
|
||||
AL2=C2/SQR2 * SQRT( ONE + SQRT(ONE-FOUR*KS*KS/(C2*C2)) ) !
|
||||
!
|
||||
V_DEUT_K=COEF*(ONE/(K*K+AL1*AL1) - ONE/(K*K+AL2*AL2)) ! ref. (3) eq. (2)
|
||||
!
|
||||
END FUNCTION V_DEUT_K
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_KELB_K(UNIT,Q1,Q2,KS,K)
|
||||
!
|
||||
! This function computes the Kelbg interaction energy
|
||||
! between to particles in the K-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! References: (5) W. Ebeling, V. E. Fortov and V. Filinov,
|
||||
! "Quantum Statistics of Dense Gases and Nonideal Plasmas",
|
||||
! Springer Series in Plasma Science and Technology,
|
||||
! (Springer, 2017) p. 150
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * UNIT : system unit
|
||||
! UNIT = 'SIU' international system
|
||||
! UNIT = 'CGS' CGS system
|
||||
! * Q1 : charge of particle 1
|
||||
! * Q2 : charge of particle 2
|
||||
! * KS : screening momentum (unit indifferent)
|
||||
! * K : momentum (unit indifferent)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 12 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : FOUR,HALF,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : EPS_0
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE EXT_FUNCTIONS, ONLY : CONHYP ! Confluent hypergeometric
|
||||
! ! function 1F1(a,b;z)
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: UNIT
|
||||
!
|
||||
REAL (WP) :: Q1,Q2,KS,K
|
||||
REAL (WP) :: V_KELB_K
|
||||
REAL (WP) :: COEF,ZZ
|
||||
!
|
||||
COMPLEX (WP) :: A,B,Z
|
||||
!
|
||||
IF(UNIT == 'SIU') THEN !
|
||||
COEF=Q1*Q2/EPS_0 !
|
||||
ELSE IF(UNIT == 'CGS') THEN !
|
||||
COEF=FOUR*PI*Q1*Q2 !
|
||||
END IF !
|
||||
!
|
||||
ZZ=-FOURTH*K*K/(KS*KS) !
|
||||
!
|
||||
! Parameters/arguments of confluent hypergeometric function
|
||||
!
|
||||
A=CMPLX(HALF,KIND=WP) !
|
||||
B=CMPLX(1.5E0_WP,KIND=WP) !
|
||||
Z=CMPLX(ZZ,KIND=WP) !
|
||||
!
|
||||
V_KELB_K=COEF * EXP(ZZ) * REAL(CONHYP(A,B,Z,0,0),KIND=WP) ! ref. (5) eq. (3.119)
|
||||
!
|
||||
END FUNCTION V_KELB_K
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_OVE2_K(UNIT,UNIK,Q1,Q2,K)
|
||||
!
|
||||
! This function computes the Overhauser interaction energy
|
||||
! between to particles in the K-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! References: (2b) I. Nagy and P. M. Echenique, Phys. Rev. B 85, 115131 (2012)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * UNIT : system unit
|
||||
! UNIT = 'SIU' international system
|
||||
! UNIT = 'CGS' CGS system
|
||||
! * UNIK : K unit
|
||||
! UNIK = 'SI' international system
|
||||
! UNIK = 'AU' atomic units
|
||||
! * Q1 : charge of particle 1
|
||||
! * Q2 : charge of particle 2
|
||||
! * K : momentum (unit indifferent)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 12 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,FOUR,HALF,THIRD
|
||||
USE CONSTANTS_P1, ONLY : EPS_0
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE FERMI_AU, ONLY : KF_AU
|
||||
USE PI_ETC, ONLY : PI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 2) :: UNIK
|
||||
CHARACTER (LEN = 3) :: UNIT
|
||||
!
|
||||
REAL (WP) :: Q1,Q2,K
|
||||
REAL (WP) :: V_OVE2_K
|
||||
REAL (WP) :: COEF,X
|
||||
!
|
||||
IF(UNIT == 'SIU') THEN !
|
||||
COEF=Q1*Q2/EPS_0 !
|
||||
ELSE IF(UNIT == 'CGS') THEN !
|
||||
COEF=FOUR*PI*Q1*Q2 !
|
||||
END IF !
|
||||
!
|
||||
IF(UNIK == 'SI') THEN !
|
||||
X=HALF*K/KF_SI !
|
||||
ELSE IF(UNIK == 'AU') THEN !
|
||||
X=HALF*K/KF_AU !
|
||||
END IF !
|
||||
!
|
||||
IF(X <= ONE) THEN !
|
||||
V_OVE2_K=COEF*1.5E0_WP*X*(ONE-THIRD*X*X) ! ref. (2b) eq. (6)
|
||||
ELSE !
|
||||
V_OVE2_K=COEF/(K*K) !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION V_OVE2_K
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_RPAP_K(UNIT,Q1,Q2,KS,K)
|
||||
!
|
||||
! This function computes the RPA interaction energy
|
||||
! between to particles in the K-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * UNIT : system unit
|
||||
! UNIT = 'SIU' international system
|
||||
! UNIT = 'CGS' CGS system
|
||||
! * Q1 : charge of particle 1
|
||||
! * Q2 : charge of particle 2
|
||||
! * KS : screening momentum (unit indifferent)
|
||||
! * K : momentum (unit indifferent)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 12 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,FOUR,HALF,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : EPS_0
|
||||
USE PI_ETC, ONLY : PI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: UNIT
|
||||
!
|
||||
REAL (WP) :: Q1,Q2,KS,K
|
||||
REAL (WP) :: V_RPAP_K
|
||||
REAL (WP) :: COEF,X,GX
|
||||
!
|
||||
IF(UNIT == 'SIU') THEN !
|
||||
COEF=Q1*Q2/EPS_0 !
|
||||
ELSE IF(UNIT == 'CGS') THEN !
|
||||
COEF=FOUR*PI*Q1*Q2 !
|
||||
END IF !
|
||||
!
|
||||
X=K/KS !
|
||||
!
|
||||
! Computing Lindhard function g(x)
|
||||
!
|
||||
GX=HALF - HALF * (ONE+FOURTH*X*X) * & !
|
||||
LOG(ABS((TWO+X)/(TWO-X))) / X !
|
||||
!
|
||||
V_RPAP_K=COEF*(K*K + KS*KS*GX) !
|
||||
!
|
||||
END FUNCTION V_RPAP_K
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_YUKA_K(UNIT,Q1,Q2,KS,K)
|
||||
!
|
||||
! This function computes the Yukawa interaction energy
|
||||
! between to particles in the K-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * UNIT : system unit
|
||||
! UNIT = 'SIU' international system
|
||||
! UNIT = 'CGS' CGS system
|
||||
! * Q1 : charge of particle 1
|
||||
! * Q2 : charge of particle 2
|
||||
! * KS : screening momentum (unit indifferent)
|
||||
! * K : momentum (unit indifferent)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 12 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : FOUR
|
||||
USE CONSTANTS_P1, ONLY : EPS_0
|
||||
USE PI_ETC, ONLY : PI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: UNIT
|
||||
!
|
||||
REAL (WP) :: Q1,Q2,KS,K
|
||||
REAL (WP) :: V_YUKA_K
|
||||
REAL (WP) :: COEF
|
||||
!
|
||||
IF(UNIT == 'SIU') THEN !
|
||||
COEF=Q1*Q2/EPS_0 !
|
||||
ELSE IF(UNIT == 'CGS') THEN !
|
||||
COEF=FOUR*PI*Q1*Q2 !
|
||||
END IF !
|
||||
!
|
||||
V_YUKA_K=COEF/(K*K + KS*KS) !
|
||||
!
|
||||
END FUNCTION V_YUKA_K
|
||||
!
|
||||
END MODULE INTERACTION_POTENTIALS_K
|
|
@ -0,0 +1,813 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE INTERACTION_POTENTIALS_R
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE INTERACT_POT_R_3D(UNIT,R,Q1,Q2,KS,VR)
|
||||
!
|
||||
! This subroutine computes interaction potentials in the
|
||||
! r-space in 3D.
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * UNIT : system unit
|
||||
! UNIT = 'SIU' international system
|
||||
! UNIT = 'CGS' CGS system
|
||||
! * R : point at which the potential is computed
|
||||
! * Q1 : charge of particle 1
|
||||
! * Q2 : charge of particle 2
|
||||
! * KS : screening momentum (unit indifferent)
|
||||
!
|
||||
!
|
||||
! Intermediate INT_POT parameter:
|
||||
!
|
||||
! INT_POT = 'COULO' Coulomb interaction
|
||||
! INT_POT= 'YUKAW' Yukawa interaction
|
||||
! INT_POT= 'SOFTS' soft sphere
|
||||
! INT_POT= 'LNJNS' Lennard-Jones
|
||||
! INT_POT= 'HCLNJ' hard-core Lennard-Jones
|
||||
! INT_POT= 'KIHAR' Kihara
|
||||
! INT_POT= 'MIE_P' Mie
|
||||
! INT_POT= 'VANDW' Van der Waals
|
||||
! INT_POT= 'MORSE' Morse
|
||||
! INT_POT= 'G_EXP' generalised exponential
|
||||
! INT_POT= 'EXP_6' exp-6
|
||||
! INT_POT= 'MBUCK' modified Buckingham
|
||||
! INT_POT= 'N_COU' neutralised Coulomb
|
||||
! INT_POT= 'H_COR' hard-core
|
||||
! INT_POT= 'P_SPH' penetrable sphere
|
||||
! INT_POT= 'ST-JO' Starkloff-Joannopoulos soft-core
|
||||
! INT_POT= 'LR_OS' long-range oscillatory
|
||||
! INT_POT= 'STOCK' Stockmayer
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * VR : interaction potential (energy)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Apr 2021
|
||||
!
|
||||
!
|
||||
USE EL_ELE_INTER
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: UNIT
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: Q1,Q2,KS,R
|
||||
REAL (WP), INTENT(OUT) :: VR
|
||||
!
|
||||
IF(INT_POT == 'COULO') THEN !
|
||||
VR = V_COUL_R(UNIT,Q1,Q2,R) !
|
||||
ELSE IF(INT_POT == 'YUKAW') THEN !
|
||||
VR = V_YUKA_R(UNIT,Q1,Q2,KS,R) !
|
||||
ELSE IF(INT_POT == 'SOFTS') THEN !
|
||||
VR = V_SOFT_R(S,EPS,R) !
|
||||
ELSE IF(INT_POT == 'LNJNS') THEN !
|
||||
VR = V_LEJO_R(S,EPS,R) !
|
||||
ELSE IF(INT_POT == 'HCLNJ') THEN !
|
||||
VR = V_HCLJ_R(S,EPS,RC,R) !
|
||||
ELSE IF(INT_POT == 'KIHAR') THEN !
|
||||
VR = V_KIHA_R(S,EPS,M,N,R) !
|
||||
ELSE IF(INT_POT == 'MIE_P') THEN !
|
||||
VR = V_MIEP_R(S,EPS,M,N,R) !
|
||||
ELSE IF(INT_POT == 'VANDW') THEN !
|
||||
VR = V_VDWP_R(S,EPS,R) !
|
||||
ELSE IF(INT_POT == 'MORSE') THEN !
|
||||
VR = V_MORS_R(S,EPS,ALF,R) !
|
||||
ELSE IF(INT_POT == 'G_EXP') THEN !
|
||||
VR = V_GEXP_R(S,EPS,ALF,R) !
|
||||
ELSE IF(INT_POT == 'EXP_6') THEN !
|
||||
VR = V_EXP6_R(S,EPS,ALF,R) !
|
||||
ELSE IF(INT_POT == 'MBUCK') THEN !
|
||||
VR = V_MBUC_R(S,EPS,ALF,R) !
|
||||
ELSE IF(INT_POT == 'N_COU') THEN !
|
||||
VR = V_NCOU_R(UNIT,Q1,Q2,S,R) !
|
||||
ELSE IF(INT_POT == 'H_COR') THEN !
|
||||
VR = V_HACO_R(RC,R) !
|
||||
ELSE IF(INT_POT == 'P_SPH') THEN !
|
||||
VR = V_PSPH_R(EPS,RC,R) !
|
||||
ELSE IF(INT_POT == 'ST-JO') THEN !
|
||||
VR = V_STJO_R(S,EPS,ALF,A1,R) !
|
||||
ELSE IF(INT_POT == 'LR_OS') THEN !
|
||||
VR = V_LROS_R(S,EPS,DELTA,A1,A2,A3,A4,R) !
|
||||
ELSE IF(INT_POT == 'STOCK') THEN !
|
||||
VR = V_STOC_R(S,EPS,DELTA,R) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE INTERACT_POT_R_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_COUL_R(UNIT,Q1,Q2,R)
|
||||
!
|
||||
! This function computes the Coulomb interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * UNIT : system unit
|
||||
! UNIT = 'SIU' international system
|
||||
! UNIT = 'CGS' CGS system
|
||||
! * Q1 : charge of particle 1
|
||||
! * Q2 : charge of particle 2
|
||||
! * R : point
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Sep 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : FOUR
|
||||
USE CONSTANTS_P1, ONLY : EPS_0
|
||||
USE PI_ETC, ONLY : PI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: UNIT
|
||||
!
|
||||
REAL (WP) :: Q1,Q2,R
|
||||
REAL (WP) :: V_COUL_R
|
||||
REAL (WP) :: COEF
|
||||
!
|
||||
IF(UNIT == 'SIU') THEN !
|
||||
COEF = Q1 * Q2 / (FOUR * PI * EPS_0) !
|
||||
ELSE IF(UNIT == 'CGS') THEN !
|
||||
COEF = Q1 * Q2 !
|
||||
END IF !
|
||||
!
|
||||
V_COUL_R = COEF / R !
|
||||
!
|
||||
END FUNCTION V_COUL_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_YUKA_R(UNIT,Q1,Q2,KS,R)
|
||||
!
|
||||
! This function computes the Yukawa interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * UNIT : system unit
|
||||
! UNIT = 'SIU' international system
|
||||
! UNIT = 'CGS' CGS system
|
||||
! * Q1 : charge of particle 1
|
||||
! * Q2 : charge of particle 2
|
||||
! * KS : screening wave vector
|
||||
! * R : point
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Sep 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : FOUR
|
||||
USE CONSTANTS_P1, ONLY : EPS_0
|
||||
USE PI_ETC, ONLY : PI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: UNIT
|
||||
!
|
||||
REAL (WP) :: Q1,Q2,KS,R
|
||||
REAL (WP) :: V_YUKA_R
|
||||
REAL (WP) :: COEF
|
||||
!
|
||||
REAL (WP) :: EXP
|
||||
!
|
||||
IF(UNIT == 'SIU') THEN !
|
||||
COEF = Q1 * Q2 / (FOUR * PI * EPS_0) !
|
||||
ELSE IF(UNIT == 'CGS') THEN !
|
||||
COEF = Q1 * Q2 !
|
||||
END IF !
|
||||
!
|
||||
V_YUKA_R = COEF * EXP(- KS * R) / R !
|
||||
!
|
||||
END FUNCTION V_YUKA_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_SOFT_R(S,EPS,R)
|
||||
!
|
||||
! This function computes the soft-sphere interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : point
|
||||
! * S : \
|
||||
! * EPS : / parameters of the soft-sphere potential
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Sep 2020
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: S,EPS,R
|
||||
REAL (WP) :: V_SOFT_R
|
||||
!
|
||||
V_SOFT_R = EPS * (S / R)**12.0E0_WP !
|
||||
!
|
||||
END FUNCTION V_SOFT_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_LEJO_R(S,EPS,R)
|
||||
!
|
||||
! This function computes the Lennard-Jones interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : point
|
||||
! * S : \
|
||||
! * EPS : / parameters of the Lennard-Jones potential
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Sep 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : FOUR,SIX
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP),INTENT(IN) :: S,EPS,R
|
||||
REAL (WP) :: V_LEJO_R
|
||||
!
|
||||
V_LEJO_R = FOUR * EPS * ( (S / R)**12.0E0_WP - (S / R)**SIX ) !
|
||||
!
|
||||
END FUNCTION V_LEJO_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_HCLJ_R(S,EPS,RC,R)
|
||||
!
|
||||
! This function computes the hard-core Lennard-Jones interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : point
|
||||
! * S : \
|
||||
! * EPS : / parameters of the Lennard-Jones potential
|
||||
! * RC : hard-core radius
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Apr 2021
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,FOUR,SIX
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP),INTENT(IN) :: S,EPS,RC,R
|
||||
REAL (WP) :: V_HCLJ_R
|
||||
!
|
||||
REAL (WP) :: NUM,DEN
|
||||
!
|
||||
NUM = S - TWO * RC
|
||||
DEN = R - TWO * RC
|
||||
!
|
||||
V_HCLJ_R = FOUR * EPS * ( & !
|
||||
(NUM / DEN)**12.0E0_WP - (NUM / DEN)**SIX & !
|
||||
) !
|
||||
!
|
||||
END FUNCTION V_HCLJ_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_KIHA_R(S,EPS,M,N,R)
|
||||
!
|
||||
! This function computes the Kihara interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : point
|
||||
! * S : \
|
||||
! * EPS : / parameters of the Lennard-Jones potential
|
||||
! * M : \ exponents
|
||||
! * N : /
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Apr 2021
|
||||
!
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER, INTENT(IN) :: M,N
|
||||
!
|
||||
REAL (WP),INTENT(IN) :: S,EPS,R
|
||||
REAL (WP) :: V_KIHA_R
|
||||
!
|
||||
REAL (WP) :: FLOAT
|
||||
!
|
||||
V_KIHA_R = EPS * ( & !
|
||||
FLOAT(M) * (S / R)**N - FLOAT(N) * (S / R)**M & !
|
||||
) / FLOAT(N - M) !
|
||||
!
|
||||
END FUNCTION V_KIHA_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_MIEP_R(S,EPS,M,N,R)
|
||||
!
|
||||
! This function computes the Mie interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : point
|
||||
! * S : \
|
||||
! * EPS : / parameters of the Lennard-Jones potential
|
||||
! * M : \ exponents
|
||||
! * N : /
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Apr 2021
|
||||
!
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER, INTENT(IN) :: M,N
|
||||
!
|
||||
REAL (WP),INTENT(IN) :: S,EPS,R
|
||||
REAL (WP) :: V_MIEP_R
|
||||
!
|
||||
REAL (WP) :: K1,K2,K3,COEF
|
||||
!
|
||||
REAL (WP) :: FLOAT
|
||||
!
|
||||
K1 = FLOAT(N) / FLOAT(N - M) !
|
||||
K2 = FLOAT(N) / FLOAT(M) !
|
||||
K3 = FLOAT(M) / FLOAT(N - M) !
|
||||
COEF = K1 * K2**K3 !
|
||||
!
|
||||
V_MIEP_R = COEF * EPS * ( (S / R)**N - (S / R)**M ) !
|
||||
!
|
||||
END FUNCTION V_MIEP_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_VDWP_R(S,EPS,R)
|
||||
!
|
||||
! This function computes the Van der Waals interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : point
|
||||
! * S : \
|
||||
! * EPS : / parameters of the Lennard-Jones potential
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Apr 2021
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,FOUR,SIX
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP),INTENT(IN) :: S,EPS,R
|
||||
REAL (WP) :: V_VDWP_R
|
||||
!
|
||||
REAL (WP) :: SR2
|
||||
!
|
||||
REAL (WP) :: LOG
|
||||
!
|
||||
SR2 = (S / R)**2 !
|
||||
!
|
||||
V_VDWP_R = - EPS * ( & !
|
||||
TWO * SR2 / (ONE - FOUR * SR2) + TWO * SR2 + & !
|
||||
LOG( ONE - FOUR * SR2 ) & !
|
||||
) / SIX !
|
||||
!
|
||||
END FUNCTION V_VDWP_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_MORS_R(S,EPS,ALF,R)
|
||||
!
|
||||
! This function computes the Morse interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : point
|
||||
! * S : \
|
||||
! * EPS : / parameters of the Lennard-Jones potential
|
||||
! * ALF : potential stiffness
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Apr 2021
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP),INTENT(IN) :: S,EPS,ALF,R
|
||||
REAL (WP) :: V_MORS_R
|
||||
!
|
||||
REAL (WP) :: EXP
|
||||
!
|
||||
V_MORS_R = EPS * ( ONE - EXP( ALF * (R - S) ) ) !
|
||||
!
|
||||
END FUNCTION V_MORS_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_GEXP_R(S,EPS,ALF,R)
|
||||
!
|
||||
! This function computes the generalised exponential interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : point
|
||||
! * S : \
|
||||
! * EPS : / parameters of the Lennard-Jones potential
|
||||
! * ALF : potential stiffness
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Apr 2021
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP),INTENT(IN) :: S,EPS,ALF,R
|
||||
REAL (WP) :: V_GEXP_R
|
||||
!
|
||||
REAL (WP) :: EXP
|
||||
!
|
||||
V_GEXP_R = EPS * EXP( - ALF * (R / S) ) !
|
||||
!
|
||||
END FUNCTION V_GEXP_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_EXP6_R(S,EPS,ALF,R)
|
||||
!
|
||||
! This function computes the exp-6 interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : point
|
||||
! * S : \
|
||||
! * EPS : / parameters of the Lennard-Jones potential
|
||||
! * ALF : potential stiffness
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Apr 2021
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,SIX
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP),INTENT(IN) :: S,EPS,ALF,R
|
||||
REAL (WP) :: V_EXP6_R
|
||||
!
|
||||
REAL (WP) :: EXP
|
||||
!
|
||||
V_EXP6_R = EPS * ( & !
|
||||
SIX * EXP( ALF * (ONE - R / S) ) - & !
|
||||
ALF * (S / R)**SIX & !
|
||||
) / (ALF - SIX) !
|
||||
!
|
||||
END FUNCTION V_EXP6_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_MBUC_R(S,EPS,ALF,R)
|
||||
!
|
||||
! This function computes the modified Buckingham interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : point
|
||||
! * S : \
|
||||
! * EPS : / parameters of the Lennard-Jones potential
|
||||
! * ALF : potential stiffness
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 SeAprp 2021
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : LARGE
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP),INTENT(IN) :: S,EPS,ALF,R
|
||||
REAL (WP) :: V_MBUC_R
|
||||
!
|
||||
REAL (WP) :: EXP
|
||||
!
|
||||
IF(R <= S) THEN
|
||||
V_MBUC_R = V_EXP6_R(S,EPS,ALF,R) / ALF !
|
||||
ELSE !
|
||||
V_MBUC_R = LARGE !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION V_MBUC_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_NCOU_R(UNIT,Q1,Q2,S,R)
|
||||
!
|
||||
! This function computes the neutralised Coulomb interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * UNIT : system unit
|
||||
! UNIT = 'SIU' international system
|
||||
! UNIT = 'CGS' CGS system
|
||||
! * Q1 : charge of particle 1
|
||||
! * Q2 : charge of particle 2
|
||||
! * S : cut-off value
|
||||
! * R : point
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Apr 2021
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : FOUR
|
||||
USE CONSTANTS_P1, ONLY : EPS_0
|
||||
USE PI_ETC, ONLY : PI
|
||||
!
|
||||
USE EXT_FUNCTIONS, ONLY : ERF,ERFC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: UNIT
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: Q1,Q2,S,R
|
||||
REAL (WP) :: V_NCOU_R
|
||||
REAL (WP) :: COEF
|
||||
!
|
||||
IF(UNIT == 'SIU') THEN !
|
||||
COEF = Q1 * Q2 / (FOUR * PI * EPS_0) !
|
||||
ELSE IF(UNIT == 'CGS') THEN !
|
||||
COEF = Q1 * Q2 !
|
||||
END IF !
|
||||
!
|
||||
V_NCOU_R = COEF * ( ERFC(R/S) + ERFC(R/S) ) / R !
|
||||
!
|
||||
END FUNCTION V_NCOU_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_HACO_R(RC,R)
|
||||
!
|
||||
! This function computes the hard-core interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RC : hard-core radius
|
||||
! * R : point
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Apr 2021
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,LARGE
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RC,R
|
||||
REAL (WP) :: V_HACO_R
|
||||
!
|
||||
IF(R <= RC) THEN
|
||||
V_HACO_R = LARGE !
|
||||
ELSE !
|
||||
V_HACO_R = ZERO !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION V_HACO_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_PSPH_R(EPS,RC,R)
|
||||
!
|
||||
! This function computes the hard-core interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * EPS : value of the hard-core potential
|
||||
! * RC : hard-core radius
|
||||
! * R : point
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Apr 2021
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: EPS,RC,R
|
||||
REAL (WP) :: V_PSPH_R
|
||||
!
|
||||
IF(R <= RC) THEN
|
||||
V_PSPH_R = EPS !
|
||||
ELSE !
|
||||
V_PSPH_R = ZERO !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION V_PSPH_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_STJO_R(S,EPS,ALF,A1,R)
|
||||
!
|
||||
! This function computes the Starkloff-Joannopoulos soft-core interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : point
|
||||
! * S : \
|
||||
! * EPS : / parameters of the Lennard-Jones potential
|
||||
! * ALF : potential stiffness
|
||||
! * A1 : magnitude of first term
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Apr 2021
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP),INTENT(IN) :: S,EPS,ALF,A1,R
|
||||
REAL (WP) :: V_STJO_R
|
||||
!
|
||||
REAL (WP) :: V1,V2
|
||||
REAL (WP) :: NUM,DEN
|
||||
!
|
||||
REAL (WP) :: EXP
|
||||
!
|
||||
NUM = - A1 * ( ONE - EXP( - ALF * R ) ) !
|
||||
DEN = R * ( ONE + EXP( ALF * (S - R) ) ) !
|
||||
V1 = NUM / DEN !
|
||||
!
|
||||
IF(R <= S) THEN !
|
||||
V2 = ZERO !
|
||||
ELSE !
|
||||
V2 = EPS * ( EXP( ALF * (S - R) ) - ONE ) !
|
||||
END IF !
|
||||
!
|
||||
V_STJO_R = V1 + V2 !
|
||||
!
|
||||
END FUNCTION V_STJO_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_LROS_R(S,EPS,DELTA,A1,A2,A3,A4,R)
|
||||
!
|
||||
! This function computes the long-range oscillatory interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
! This potential of of the form
|
||||
!
|
||||
! V(r) = EPS * EXP(A1 - A2 * R / S) - DELTA * (S/R)^3 * COS(A3 * [R/S + A4])
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : point
|
||||
! * S : \
|
||||
! * EPS : / parameters of the Lennard-Jones potential
|
||||
! * A1 : \
|
||||
! * A2 : \
|
||||
! * A3 : /
|
||||
! * A4 : /
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Apr 2021
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : THREE
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP),INTENT(IN) :: S,EPS,DELTA,R
|
||||
REAL (WP),INTENT(IN) :: A1,A2,A3,A4
|
||||
REAL (WP) :: V_LROS_R
|
||||
!
|
||||
REAL (WP) :: RT,TR,V1,V2
|
||||
!
|
||||
REAL (WP) :: EXP,COS
|
||||
!
|
||||
RT = R / S !
|
||||
TR = S / R !
|
||||
!
|
||||
V1 = EPS * EXP( A1 - A2 * RT) !
|
||||
V2 = - DELTA * TR**THREE * COS( A3 * (RT + A4) ) !
|
||||
!
|
||||
V_LROS_R = V1 + V2 !
|
||||
!
|
||||
END FUNCTION V_LROS_R
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION V_STOC_R(S,EPS,DELTA,R)
|
||||
!
|
||||
! This function computes the Stockmayer interaction energy
|
||||
! between to particles in the r-space in a given unit system (SI or CGS)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : point
|
||||
! * S : \
|
||||
! * EPS : > parameters of the Stockmayer potential
|
||||
! * DELTA : /
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 14 Apr 2021
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : THREE,FOUR,SIX
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP),INTENT(IN) :: S,EPS,DELTA,R
|
||||
REAL (WP) :: V_STOC_R
|
||||
!
|
||||
REAL (WP) :: RT
|
||||
!
|
||||
RT = S / R !
|
||||
!
|
||||
V_STOC_R = FOUR * EPS * ( RT**12.0E0_WP - RT**SIX - & !
|
||||
DELTA * RT**THREE ) !
|
||||
!
|
||||
END FUNCTION V_STOC_R
|
||||
!
|
||||
END MODULE INTERACTION_POTENTIALS_R
|
|
@ -0,0 +1,937 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE LANDAU_PARAM
|
||||
!
|
||||
! This module provides the standard dimensionless Landau parameters
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE LANDAU_PARAMETERS_3D(X,XC,U0,W,D,RS,LANDAU, &
|
||||
F0S,F0A,F1S,F1A,F2S,F2A)
|
||||
!
|
||||
! This subroutine computes the standard dimensionless Landau parameters
|
||||
! as a function of the Hubbard-like bare coupling constant, or the
|
||||
! hard-sphere radius, in the 3D case
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * XC : dimensionless cut-off --> XC = q_c / (2 * k_F)
|
||||
! * U0 / A : bare interaction constant / hard sphere radius (in SI)
|
||||
! * W : half bandwidth for bare particle (ref. 7)
|
||||
! * D : filling (dopant concentration) in ref. 7
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * LANDAU : model chosen for the calculation of the parameters
|
||||
! LANDAU = 'ANBR' Anderson-Brinkman model
|
||||
! LANDAU = 'CHEN' Chen's approach
|
||||
! LANDAU = 'GUTZ' Gutzwiller model
|
||||
! LANDAU = 'GVYO' Giuliani-Vignale parametrization of
|
||||
! LANDAU = 'IWPI' Iwamoto-Pines model (hard-sphere)
|
||||
! Yasuhara-Ousaka approach
|
||||
! LANDAU = 'RASC' Rayleigh-Schrödinger expansion
|
||||
! LANDAU = 'SBOH' slave-boson one-band Hubbard model
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: LANDAU
|
||||
!
|
||||
REAL (WP) :: X,XC,U0,A,W,D,RS
|
||||
REAL (WP) :: F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
IF(LANDAU == 'ANBR') THEN !
|
||||
!
|
||||
CALL ANBR_LP_3D(U0,F0S,F0A,F1S,F1A,F2S,F2A) !
|
||||
!
|
||||
ELSE IF(LANDAU == 'CHEN') THEN !
|
||||
!
|
||||
CALL CHEN_LP_3D(U0,F0S,F0A,F1S,F1A,F2S,F2A) !
|
||||
!
|
||||
ELSE IF(LANDAU == 'GUTZ') THEN !
|
||||
!
|
||||
CALL GUTZ_LP_3D(U0,F0S,F0A,F1S,F1A,F2S,F2A) !
|
||||
!
|
||||
ELSE IF(LANDAU == 'GVYO') THEN !
|
||||
!
|
||||
CALL GVYO_LP_3D(RS,F0S,F0A,F1S,F1A,F2S,F2A) !
|
||||
!
|
||||
ELSE IF(LANDAU == 'IWPI') THEN !
|
||||
!
|
||||
A=U0 !
|
||||
CALL IPWI_LP_3D(A,F0S,F0A,F1S,F1A,F2S,F2A) !
|
||||
!
|
||||
ELSE IF(LANDAU == 'RASC') THEN !
|
||||
!
|
||||
CALL RASC_LP_3D(X,XC,U0,F0S,F0A,F1S,F1A,F2S,F2A) !
|
||||
!
|
||||
ELSE IF(LANDAU == 'SBOH') THEN !
|
||||
!
|
||||
CALL SBOH_LP_3D(U0,W,D,F0S,F0A,F1S,F1A,F2S,F2A) !
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE LANDAU_PARAMETERS_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE LANDAU_PARAMETERS_2D(RS,LANDAU,X,IX, &
|
||||
F0S,F0A,F1S,F1A,F2S,F2A)
|
||||
!
|
||||
! This subroutine computes the standard dimensionless Landau parameters
|
||||
! in the 2D case.
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * LANDAU : model chosen for the calculation of the parameters
|
||||
! LANDAU = 'ERZA' Engelbrecht-Randeria-Zhang approach
|
||||
! LANDAU = 'GVYO' Giuliani-Vignale parametrization of
|
||||
! Yasuhara-Ousaka approach
|
||||
! LANDAU = 'KCMP' Kwoon-Ceperley-Martin parametrization
|
||||
! * X : either MU or EG (for 'ERZA' only)
|
||||
! * IX : switch for input value X (for 'ERZA' only)
|
||||
! IX = 1 --> X = chemical potential MU in SI
|
||||
! IX = 2 --> X = ground state energy EG in SI
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: LANDAU
|
||||
!
|
||||
REAL (WP) :: RS,X,G
|
||||
REAL (WP) :: F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
INTEGER :: IX
|
||||
!
|
||||
IF(LANDAU == 'ERZA') THEN !
|
||||
!
|
||||
CALL ERZA_LP_2D(X,IX,F0S,F0A,F1S,F1A,F2S,F2A) !
|
||||
!
|
||||
ELSE IF(LANDAU == 'GVYO') THEN !
|
||||
!
|
||||
CALL GVYO_LP_2D(RS,F0S,F0A,F1S,F1A,F2S,F2A) !
|
||||
!
|
||||
ELSE IF(LANDAU == 'KCMP') THEN !
|
||||
!
|
||||
CALL KCMP_LP_2D(RS,F0S,F0A,F1S,F1A,F2S,F2A) !
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE LANDAU_PARAMETERS_2D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE ANBR_LP_3D(U0,F0S,F0A,F1S,F1A,F2S,F2A)
|
||||
!
|
||||
! This subroutine computes the standard dimensionless Landau parameters
|
||||
! for the Anderson-Brinkman model in the 3D case
|
||||
!
|
||||
! References: (1) D. Volhardt, Rev. Mod. Phys. 58, 99-120 (1984)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * U0 : bare interaction constant
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,THREE,EIGHT,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E
|
||||
USE FERMI_SI, ONLY : EF_SI,KF_SI
|
||||
USE PI_ETC, ONLY : PI2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: U0,UC,XU
|
||||
REAL (WP) :: NF_SI
|
||||
REAL (WP) :: F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
! Initialization
|
||||
!
|
||||
F0S=ZERO !
|
||||
F0A=ZERO !
|
||||
F1S=ZERO !
|
||||
F1A=ZERO !
|
||||
F2S=ZERO !
|
||||
F2A=ZERO !
|
||||
!
|
||||
NF_SI=M_E*KF_SI/(PI2*H_BAR*H_BAR) ! n(E_F) in SI
|
||||
!
|
||||
! Cut-off interaction
|
||||
!
|
||||
UC=EIGHT*EF_SI !
|
||||
XU=U0/UC !
|
||||
!
|
||||
F1S=THREE*(ONE/(ONE-XU*XU)) - ONE ! ref. (1) eq. (24)
|
||||
F0A=-FOURTH*NF_SI*U0*(TWO+XU)/((ONE*XU)*(ONE*XU)) ! ref. (41) eq. (25)
|
||||
!
|
||||
END SUBROUTINE ANBR_LP_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CHEN_LP_3D(U0,F0S,F0A,F1S,F1A,F2S,F2A)
|
||||
!
|
||||
! This subroutine computes the standard dimensionless Landau parameters
|
||||
! in Chen's approach, in the 3D case
|
||||
!
|
||||
! References: (1) V. A. Belyakov, Soviet Phys. JETP 13, 850-851 (1961)
|
||||
! (2) J.-S. Chen, J. Stat. Mech. L08002 (2009)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * U0 : bare interaction constant
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,THREE,FOUR,EIGHT, &
|
||||
NINE,THIRD,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI,PI_INV
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: U0
|
||||
REAL (WP) :: A,AKF,P2AKF
|
||||
REAL (WP) :: F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
! Initialization
|
||||
!
|
||||
F0S=ZERO !
|
||||
F0A=ZERO !
|
||||
F1S=ZERO !
|
||||
F1A=ZERO !
|
||||
F2S=ZERO !
|
||||
F2A=ZERO !
|
||||
!
|
||||
! Scattering amplitude from Fermi pseudopotential
|
||||
!
|
||||
A= FOURTH*PI_INV*U0 * (M_E/(H_BAR*H_BAR)) ! ref. 1 eq. (3)
|
||||
!
|
||||
AKF=A*KF_SI !
|
||||
P2AKF=PI-TWO * AKF !
|
||||
!
|
||||
F1S=FOUR*AKF*AKF/(THREE * P2AKF**2) ! ref. (2) eq. (28)
|
||||
F0S=(ONE+THIRD*F1S)*(ONE + TWO*AKF/P2AKF + & !
|
||||
20.0E0_WP*AKF*AKF/(NINE*P2AKF*P2AKF) + & ! ref. (2) eq. (25)
|
||||
EIGHT*AKF*AKF*AKF/(NINE*(P2AKF**3))) !
|
||||
!
|
||||
END SUBROUTINE CHEN_LP_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE ERZA_LP_2D(X,IX,F0S,F0A,F1S,F1A,F2S,F2A)
|
||||
!
|
||||
! This subroutine computes the standard dimensionless Landau parameters
|
||||
! in the 2D case.
|
||||
!
|
||||
! References: (1) J. R. Engelbrecht, M. Randeria and L. Zhang,
|
||||
! Phys. Rev. B 45, 10135-10138 (1992)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : either MU or EG
|
||||
! * IX : switch for input value X
|
||||
! IX = 1 --> X = chemical potential MU in SI
|
||||
! IX = 2 --> X = ground state energy EG in SI
|
||||
!
|
||||
! Intermediate parameters:
|
||||
!
|
||||
! * G : low-density expansion parameter (ref. 1)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,TWO,FOUR
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: IX
|
||||
!
|
||||
REAL (WP) :: X,G
|
||||
REAL (WP) :: LN2
|
||||
REAL (WP) :: F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
LN2=DLOG(TWO) !
|
||||
!
|
||||
! Initialization
|
||||
!
|
||||
F0S=ZERO !
|
||||
F0A=ZERO !
|
||||
F1S=ZERO !
|
||||
F1A=ZERO !
|
||||
F2S=ZERO !
|
||||
F2A=ZERO !
|
||||
!
|
||||
! Computing the expansion parameter G
|
||||
!
|
||||
CALL MU_EG_TO_G(X,IX,G) !
|
||||
!
|
||||
F0S=TWO*G+FOUR*G*G*(TWO-LN2) !
|
||||
F0A=-FOUR*G*G*LN2 !
|
||||
F1S= TWO*G*G !
|
||||
F1A=- TWO*G*G !
|
||||
!
|
||||
END SUBROUTINE ERZA_LP_2D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE MU_EG_TO_G(X,IX,G)
|
||||
!
|
||||
! This subroutine computes the low-density expansion parameter g
|
||||
! from the knowledge of either the chemical potential mu or
|
||||
! from the ground state energy EG
|
||||
!
|
||||
! References: (1) J. R. Engelbrecht, M. Randeria and L. Zhang,
|
||||
! Phys. Rev. B 45, 10135-10138 (1992)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : either MU or EG
|
||||
! * IX : switch for input value X
|
||||
! IX = 1 --> X = chemical potential MU in SI
|
||||
! IX = 2 --> X = ground state energy EG in SI
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * G : low-density expansion parameter (ref. 1)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
USE POLYNOMIAL_EQ, ONLY : QUADRATIC_EQUATION,CHECK_ROOTS2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: IX
|
||||
!
|
||||
REAL (WP) :: X,G
|
||||
REAL (WP) :: MU,EG
|
||||
REAL (WP) :: LN2
|
||||
!
|
||||
COMPLEX (WP) :: AA,BB,CC
|
||||
COMPLEX (WP) :: X1,X2
|
||||
!
|
||||
LN2=DLOG(TWO) !
|
||||
!
|
||||
IF(IX == 1) THEN !
|
||||
!
|
||||
MU=X !
|
||||
!
|
||||
AA=DCMPLX(FOUR*(ONE-LN2)) !
|
||||
BB=DCMPLX(TWO) !
|
||||
CC=DCMPLX(ONE-MU/EF_SI) !
|
||||
!
|
||||
CALL QUADRATIC_EQUATION(AA,BB,CC,X1,X2) !
|
||||
!
|
||||
CALL CHECK_ROOTS2(X1,X2,G) !
|
||||
!
|
||||
ELSE IF(IX == 2) THEN !
|
||||
!
|
||||
EG=X !
|
||||
!
|
||||
AA=DCMPLX(THREE-FOUR*LN2) !
|
||||
BB=DCMPLX(TWO) !
|
||||
CC=DCMPLX(ONE-TWO*EG/EF_SI) !
|
||||
!
|
||||
CALL QUADRATIC_EQUATION(AA,BB,CC,X1,X2) !
|
||||
!
|
||||
CALL CHECK_ROOTS2(X1,X2,G) !
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE MU_EG_TO_G
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE GUTZ_LP_3D(U0,F0S,F0A,F1S,F1A,F2S,F2A)
|
||||
!
|
||||
! This subroutine computes the standard dimensionless Landau parameters
|
||||
! for the Gutzwiller approach, in the 3D case
|
||||
!
|
||||
! References: (1) D. Volhardt, Rev. Mod. Phys. 58, 99-120 (1984)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * U0 : bare interaction constant
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,THREE,FOUR,EIGHT, &
|
||||
THIRD,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E
|
||||
USE FERMI_SI, ONLY : EF_SI,KF_SI
|
||||
USE PI_ETC, ONLY : PI2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: U0,UC,XU
|
||||
REAL (WP) :: NF_SI,P,I,AA,BB
|
||||
REAL (WP) :: NUM,DEN
|
||||
REAL (WP) :: F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
! Initialization
|
||||
!
|
||||
F0S=ZERO !
|
||||
F0A=ZERO !
|
||||
F1S=ZERO !
|
||||
F1A=ZERO !
|
||||
F2S=ZERO !
|
||||
F2A=ZERO !
|
||||
!
|
||||
NF_SI=M_E*KF_SI/(PI2*H_BAR*H_BAR) ! n(E_F) in SI
|
||||
!
|
||||
! Cut-off interaction
|
||||
!
|
||||
UC=EIGHT*EF_SI !
|
||||
XU=U0/UC !
|
||||
!
|
||||
P=FOURTH*UC*NF_SI !
|
||||
I=XU !
|
||||
AA=-ONE + (FOUR - I*I)*(ONE - P) !
|
||||
BB=( ONE + I*I*(ONE-P) )**2 !
|
||||
NUM=BB + TWO*THIRD*P*AA !
|
||||
DEN=BB*(ONE+I*I) + TWO*THIRD*P*AA !
|
||||
!
|
||||
F0A=-P*(ONE - ONE/((ONE+I)*(ONE+I))) ! ref. (1) eq. (50)
|
||||
F0S= P*(ONE/((ONE+I)*(ONE+I) - ONE) ) ! ref. (1) eq. (54)
|
||||
F1A=-THREE*I*I * NUM/DEN ! ref. (1) eq. (71)
|
||||
!
|
||||
END SUBROUTINE GUTZ_LP_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE GVYO_LP_3D(RS,F0S,F0A,F1S,F1A,F2S,F2A)
|
||||
!
|
||||
! This subroutine computes the Yasuhara-Ousaka
|
||||
! parametrization of Landau parameters F0s,F0a,
|
||||
! F1s,F1a,F2s,F2a.
|
||||
!
|
||||
! We use a 4-degree polynomial to fit the data of
|
||||
! table 8.1 and table 8.6 of reference (1)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
!
|
||||
! Reference: (1) G. F. Giuliani and G. Vignale,
|
||||
! "Quantum Theory of the Electron Liquid",
|
||||
! (Cambridge University Press 2005)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,F0S,F0A,F1S,F1A,F2S,F2A
|
||||
REAL (WP) :: Y,Y2,Y3,Y4
|
||||
REAL (WP) :: A1(0:4),A2(0:4),A3(0:4),A4(0:4),A5(0:4),A6(0:4)
|
||||
!
|
||||
DATA A1 / -0.066667E0_WP , -0.13392E0_WP , -0.0094444E0_WP ,&! F0s
|
||||
0.00018519E0_WP, 6.8305E-18_WP / !
|
||||
DATA A2 / -0.10833E0_WP , -0.039854E0_WP , -0.029514E0_WP ,&! F0a
|
||||
0.008287E0_WP , -0.000625E0_WP / !
|
||||
DATA A3 / -0.07E0_WP , 0.049167E0_WP , -0.024583E0_WP ,&! F1s
|
||||
0.0058333E0_WP , -0.00041667E0_WP / !
|
||||
DATA A4 / -0.0242E0_WP , 0.0066333E0_WP, -0.00068333E0_WP,&! F1a
|
||||
0.00016667E0_WP, -1.6667E-05_WP / !
|
||||
DATA A5 / -0.0221E0_WP , -0.00265E0_WP , 0.00395E0_WP ,&! F2s
|
||||
-0.00075E0_WP , 5.0E-05_WP / !
|
||||
DATA A6 / -0.0242E0_WP , 0.0066333E0_WP, -0.00068333E0_WP,&! F2a
|
||||
0.00016667E0_WP, -1.6667E-05_WP / !
|
||||
!
|
||||
! Powers of RS
|
||||
!
|
||||
Y = RS !
|
||||
Y2 = Y*Y !
|
||||
Y3 = Y2*Y !
|
||||
Y4 = Y3*Y !
|
||||
!
|
||||
! Computing the Landau parameters
|
||||
!
|
||||
F0S=A1(0) + A1(1)*Y + A1(2)*Y2 + A1(3)*Y3 + A1(4)*Y4 ! F0s
|
||||
F0A=A2(0) + A2(1)*Y + A2(2)*Y2 + A2(3)*Y3 + A2(4)*Y4 ! F0a
|
||||
F1S=A3(0) + A3(1)*Y + A3(2)*Y2 + A3(3)*Y3 + A3(4)*Y4 ! F1s
|
||||
F1A=A4(0) + A4(1)*Y + A4(2)*Y2 + A4(3)*Y3 + A4(4)*Y4 ! F1a
|
||||
F2S=A5(0) + A5(1)*Y + A5(2)*Y2 + A5(3)*Y3 + A5(4)*Y4 ! F2s
|
||||
F2A=A6(0) + A6(1)*Y + A6(2)*Y2 + A6(3)*Y3 + A6(4)*Y4 ! F2a
|
||||
!
|
||||
END SUBROUTINE GVYO_LP_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE GVYO_LP_2D(RS,F0S,F0A,F1S,F1A,F2S,F2A)
|
||||
!
|
||||
! This subroutine computes the Yasuhara-Ousaka
|
||||
! parametrization of Landau parameters F0s,F0a,
|
||||
! F1s.
|
||||
!
|
||||
! We use a 4-degree polynomial to fit the data of
|
||||
! table 8.5 of reference (1)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
!
|
||||
! Reference: (1) G. F. Giuliani and G. Vignale,
|
||||
! "Quantum Theory of the Electron Liquid",
|
||||
! (Cambridge University Press 2005)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,F0S,F0A,F1S,F1A,F2S,F2A
|
||||
REAL (WP) :: Y,Y2,Y3,Y4
|
||||
REAL (WP) :: A1(0:4),A2(0:4),A3(0:4)
|
||||
!
|
||||
DATA A1 / -0.13E0_WP , -0.19917E0_WP , -0.12958E0_WP ,& ! F0s
|
||||
0.0091667E0_WP, -0.00041667E0_WP / !
|
||||
DATA A2 / -0.1019E0_WP , -0.24296E0_WP , 0.063813E0_WP,& ! F0a
|
||||
-0.0094683E0_WP, 0.00051984E0_WP / !
|
||||
DATA A3 / -0.087143E0_WP , 0.10986E0_WP , 0.010738E0_WP,& ! F1s
|
||||
-0.0037143E0_WP, 0.0002619E0_WP / !
|
||||
!
|
||||
! Initialization
|
||||
!
|
||||
F0S=ZERO !
|
||||
F0A=ZERO !
|
||||
F1S=ZERO !
|
||||
F1A=ZERO !
|
||||
F2S=ZERO !
|
||||
F2A=ZERO !
|
||||
!
|
||||
! Powers of RS
|
||||
!
|
||||
Y = RS !
|
||||
Y2 = Y*Y !
|
||||
Y3 = Y2*Y !
|
||||
Y4 = Y3*Y !
|
||||
!
|
||||
! Computing the Landau parameters
|
||||
!
|
||||
F0S=A1(0) + A1(1)*Y + A1(2)*Y2 + A1(3)*Y3 + A1(4)*Y4 ! F0s
|
||||
F0A=A2(0) + A2(1)*Y + A2(2)*Y2 + A2(3)*Y3 + A2(4)*Y4 ! F0a
|
||||
F1S=A3(0) + A3(1)*Y + A3(2)*Y2 + A3(3)*Y3 + A3(4)*Y4 ! F1s
|
||||
!
|
||||
END SUBROUTINE GVYO_LP_2D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE IPWI_LP_3D(A,F0S,F0A,F1S,F1A,F2S,F2A)
|
||||
!
|
||||
! This subroutine computes the standard dimensionless Landau parameters
|
||||
! for the Iwamoto-Pines hard-sphere model, in the 3D case
|
||||
!
|
||||
! References: (1) N. Iwamoto and D. Pines, Phys. Rev. B 29, 3924 (1984)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * A : hard sphere radius (in SI)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,FOUR,SEVEN,THIRD
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL*8 A,AKF
|
||||
REAL*8 LN2
|
||||
REAL*8 F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
LN2=DLOG(TWO) !
|
||||
!
|
||||
! Initialization
|
||||
!
|
||||
F0S=ZERO !
|
||||
F0A=ZERO !
|
||||
F1S=ZERO !
|
||||
F1A=ZERO !
|
||||
F2S=ZERO !
|
||||
F2A=ZERO !
|
||||
!
|
||||
AKF=A*KF_SI !
|
||||
!
|
||||
F0S= TWO*PI_INV*AKF*( & !
|
||||
ONE+FOUR*THIRD*PI_INV* & !
|
||||
(TWO+LN2)*AKF & !
|
||||
) ! ref. (1) eq. (B1)
|
||||
F0A=-TWO*PI_INV*AKF*( & !
|
||||
ONE+FOUR*THIRD*PI_INV* & !
|
||||
(ONE-LN2)*AKF & !
|
||||
) ! ref. (1) eq. (B2)
|
||||
F1A= 1.6E0_WP*PI_INV*PI_INV*(SEVEN*LN2-ONE)*AKF*AKF ! ref. (1) eq. (B3)
|
||||
F1S=-1.6E0_WP*PI_INV*PI_INV*(TWO+LN2)*AKF*AKF ! ref. (1) eq. (B4)
|
||||
!
|
||||
END SUBROUTINE IPWI_LP_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE KCMP_LP_2D(RS,F0S,F0A,F1S,F1A,F2S,F2A)
|
||||
!
|
||||
! This subroutine computes the Kwoon-Ceperley-Martin
|
||||
! parametrization of Landau parameters F0s,F0a,
|
||||
! F1s,F1a,F2s and F2a.
|
||||
!
|
||||
! We use a 4-point Lagrange interpolation to fit the data of
|
||||
! table VIII of reference (1)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
! Reference: (1) Y. Kwoon, D. M. Ceperley and R. M. Martin,
|
||||
! Phys. Rev. B 50, 1684-1694 (1994)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FIVE
|
||||
USE INTERPOLATION, ONLY : LAG_4P_INTERP
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,F0S,F0A,F1S,F1A,F2S,F2A
|
||||
REAL (WP) :: A1(4),A2(4),A3(4),A4(4),A5(4),A6(4)
|
||||
REAL (WP) :: X(4)
|
||||
!
|
||||
! Data of table VIII
|
||||
!
|
||||
DATA A1 / -0.60E0_WP, -0.99E0_WP, -1.63E0_WP, -3.70E0_WP / ! F0s
|
||||
DATA A2 / -0.34E0_WP, -0.41E0_WP, -0.49E0_WP, -0.51E0_WP / ! F0a
|
||||
DATA A3 / -0.14E0_WP, -0.10E0_WP, -0.03E0_WP, 0.12E0_WP / ! F1s
|
||||
DATA A4 / -0.19E0_WP, -0.24E0_WP, -0.26E0_WP, -0.27E0_WP / ! F1a
|
||||
DATA A5 / -0.07E0_WP, -0.16E0_WP, -0.27E0_WP, -0.50E0_WP/ ! F2s
|
||||
DATA A6 / 0.01E0_WP, 0.07E0_WP, 0.14E0_WP, 0.32E0_WP/ ! F2a
|
||||
!
|
||||
! RS values un table VIII
|
||||
!
|
||||
X(1)=ONE !
|
||||
X(2)=TWO !
|
||||
X(3)=THREE !
|
||||
X(4)=FIVE !
|
||||
!
|
||||
! F0s --> A1 data
|
||||
!
|
||||
F0S=LAG_4P_INTERP(X,A1,RS) !
|
||||
!
|
||||
! F0a --> A2 data
|
||||
!
|
||||
F0A=LAG_4P_INTERP(X,A2,RS) !
|
||||
!
|
||||
! F1s --> A3 data
|
||||
!
|
||||
F1S=LAG_4P_INTERP(X,A3,RS) !
|
||||
!
|
||||
! F1a --> A4 data
|
||||
!
|
||||
F1A=LAG_4P_INTERP(X,A4,RS) !
|
||||
!
|
||||
! F2s --> A5 data
|
||||
!
|
||||
F2S=LAG_4P_INTERP(X,A5,RS) !
|
||||
!
|
||||
! F2a --> A6 data
|
||||
!
|
||||
F2A=LAG_4P_INTERP(X,A6,RS) !
|
||||
!
|
||||
END SUBROUTINE KCMP_LP_2D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE RASC_LP_3D(X,XC,U0,F0S,F0A,F1S,F1A,F2S,F2A)
|
||||
!
|
||||
! This subroutine computes the standard dimensionless Landau parameters
|
||||
! using a Rayleigh-Schrödinger expansion in the 3D case
|
||||
!
|
||||
! References: (1) Slides
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * XC : dimensionless cut-off --> XC = q_c / (2 * k_F)
|
||||
! * U0 : bare interaction constant
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,THREE,SEVEN, &
|
||||
HALF,THIRD,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : M_E
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X,XC,U0,UB
|
||||
REAL (WP) :: Q_SI,Q_CO
|
||||
REAL (WP) :: LN2
|
||||
REAL (WP) :: F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
LN2=DLOG(TWO) !
|
||||
!
|
||||
! Initialization
|
||||
!
|
||||
F0S=ZERO !
|
||||
F0A=ZERO !
|
||||
F1S=ZERO !
|
||||
F1A=ZERO !
|
||||
F2S=ZERO !
|
||||
F2A=ZERO !
|
||||
!
|
||||
Q_SI=TWO*X*KF_SI ! q in SI
|
||||
Q_CO=TWO*XC*KF_SI ! q_c in SI
|
||||
!
|
||||
! Screened interaction
|
||||
!
|
||||
UB=U0*(ONE - U0*FOURTH*M_E/PI2 * HALF*( Q_CO + &!
|
||||
(Q_SI*Q_SI-Q_CO*Q_CO)* &! ref. 1 p.
|
||||
DLOG(DABS(Q_CO-Q_SI)/(Q_CO+Q_SI))/ &!
|
||||
Q_SI)) !
|
||||
!
|
||||
F0S= UB * (ONE + UB*(ONE+HALF*THIRD*(TWO+LN2))) !
|
||||
F0A=-UB * (ONE + UB*(ONE-TWO*THIRD*(ONE-LN2))) ! ref. (1) p. 22
|
||||
F1S= UB*UB * TWO*(SEVEN*LN2-ONE)/15.0E0_WP !
|
||||
!
|
||||
END SUBROUTINE RASC_LP_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE SBOH_LP_3D(U0,W,D,F0S,F0A,F1S,F1A,F2S,F2A)
|
||||
!
|
||||
! This subroutine computes the standard dimensionless Landau parameters
|
||||
! of the slave-boson one-band Hubbard model in the 3D case
|
||||
!
|
||||
! References: (1) T. Li and P. Bénard, Phys. Rev. B 50, 17837 (1994)
|
||||
! (2) Slides
|
||||
!
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * U0 : bare interaction constant
|
||||
! * W : half bandwidth for bare particle (ref. 7)
|
||||
! * D : filling (dopant concentration) in ref. 7
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,THREE,FOUR,FIVE, &
|
||||
SIX,EIGHT,NINE,TEN
|
||||
USE COMPLEX_NUMBERS, ONLY : ZEROC,ONEC
|
||||
USE CONSTANTS_P1, ONLY : M_E
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI2
|
||||
USE POLYNOMIAL_EQ, ONLY : CUBIC_EQUATION,CHECK_ROOTS3
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL*8 U0
|
||||
REAL*8 W,D,U
|
||||
REAL*8 D2,D4,D6
|
||||
REAL*8 Y,Y2,Y3,Y4,Y5,Y6,Y7
|
||||
REAL*8 NUM,DEN
|
||||
REAL*8 F0S,F0A,F1S,F1A,F2S,F2A
|
||||
!
|
||||
COMPLEX*16 AC,BC,CC,DC
|
||||
COMPLEX*16 X1,X2,X3
|
||||
!
|
||||
! Initialization
|
||||
!
|
||||
F0S=ZERO !
|
||||
F0A=ZERO !
|
||||
F1S=ZERO !
|
||||
F1A=ZERO !
|
||||
F2S=ZERO !
|
||||
F2A=ZERO !
|
||||
!
|
||||
! Scaled interaction
|
||||
!
|
||||
U=U0/(FOUR*W) ! ref. 7 eq. (59c)
|
||||
!
|
||||
!
|
||||
! Computing Y, solution of:
|
||||
!
|
||||
! (1-Y)*Y^2
|
||||
! --------- = U ref. (3) eq. (11)
|
||||
! Y^2-D2
|
||||
!
|
||||
AC=ONEC !
|
||||
BC=DCMPLX(U-ONE) !
|
||||
CC=ZEROC !
|
||||
DC=DCMPLX(-U*D*D) !
|
||||
!
|
||||
CALL CUBIC_EQUATION(AC,BC,CC,DC,X1,X2,X3) !
|
||||
!
|
||||
! Looking for a real and positive solution Y = x^2
|
||||
!
|
||||
CALL CHECK_ROOTS3(X1,X2,X3,Y) !
|
||||
!
|
||||
D2=D*D !
|
||||
D4=D2*D2 !
|
||||
D6=D4*D2 !
|
||||
Y2=Y*Y !
|
||||
Y3=Y2*Y !
|
||||
Y4=Y3*Y !
|
||||
Y5=Y4*Y !
|
||||
Y6=Y5*Y !
|
||||
Y7=Y6*Y !
|
||||
!
|
||||
NUM=(ONE-Y)*(TWO*D2-FIVE*D2*Y+TWO*Y2+D2*Y2+Y3-Y4) !
|
||||
DEN=(D2-TWO*Y+Y2)*(-TWO*D2+THREE*D2*Y-Y3) !
|
||||
F0S=NUM/DEN ! ref. (1) eq. (61)
|
||||
!
|
||||
NUM=(ONE-D2)*(Y2-D2) !
|
||||
DEN=(TWO*Y-Y2-D2)**2 !
|
||||
F0A=-ONE + NUM/DEN ! ref. (1) eq. (60)
|
||||
!
|
||||
NUM=THREE*(Y-ONE)**2 * ( -TEN*D4 + 19.0E0_WP*D4*Y - &!
|
||||
EIGHT*D2*Y2 - &!
|
||||
TWO*D2*Y3+TWO*Y4-Y5 &!
|
||||
) !
|
||||
DEN=( 16.0E0_WP*D4 - SIX*D6 - 48.0E0_WP*D4*Y + &!
|
||||
NINE*D6*Y + EIGHT*D2*Y2 + 48.0E0_WP*D4*Y2 - &!
|
||||
EIGHT*D2*Y3 - 25.0E0_WP*D4*Y3 - EIGHT*Y4 + &!
|
||||
TEN*D2*Y4 + EIGHT*Y5-D2*Y5 - FOUR*Y6 + &!
|
||||
Y7 &!
|
||||
) !
|
||||
F1A=NUM/DEN ! ref. (1) eq. (65)
|
||||
!
|
||||
NUM=THREE*(ONE-Y2)**2 !
|
||||
DEN=(TWO*Y-Y2-D2) !
|
||||
F1S=NUM/DEN ! ref. (1) eq. (23)
|
||||
!
|
||||
END SUBROUTINE SBOH_LP_3D
|
||||
!
|
||||
END MODULE LANDAU_PARAM
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,187 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE IQ_FUNCTIONS_1
|
||||
!
|
||||
! This modules provides subroutines/functions to compute
|
||||
! static local-field factors I(q) = G(q,inf)
|
||||
!
|
||||
! These I(q) DOES NOT DEPEND of the static structure factor S(q)
|
||||
!
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE IQ_3D(X,RS,IQ_TYPE,IQ)
|
||||
!
|
||||
! This function computes the function I(q) = G(q,infinity)
|
||||
! for 3D systems
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * IQ_TYPE : type of approximation for I(q)
|
||||
! IQ_TYPE = 'NON' set to zero
|
||||
! IQ_TYPE = 'IKP' Iwamoto-Krotscheck-Pines parametrization
|
||||
! IQ_TYPE = 'KU1' Kugler 1
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 20 Nov 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: IQ_TYPE
|
||||
!
|
||||
REAL (WP) :: X,RS
|
||||
REAL (WP) :: IQ
|
||||
!
|
||||
IF(IQ_TYPE == 'NON') THEN !
|
||||
IQ = ZERO !
|
||||
ELSE IF(IQ_TYPE == 'IKP') THEN !
|
||||
IQ=IQ_IKP_3D(X,RS) !
|
||||
ELSE IF(IQ_TYPE == 'KU1') THEN !
|
||||
IQ=IQ_KU1_3D(X) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE IQ_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION IQ_IKP_3D(X,RS)
|
||||
!
|
||||
! This function computes the Iwamoto-Krotscheck-Pines
|
||||
! parametrization for the calculation of the I(q) function
|
||||
!
|
||||
! We use a fourth-degree polynomial to fit the data of
|
||||
! table II reference (1): r_s = 1 --> A1
|
||||
! r_s = 2 --> A2
|
||||
! r_s = 5 --> A5
|
||||
!
|
||||
! For a given value of (q / k_F), this gives 3 values of I(q / k_F).
|
||||
! Then, we use Lagrange interpolation to find I(q / k_F) for the
|
||||
! input value r_s
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
!
|
||||
!
|
||||
! Reference: (1) N. Iwamoto, E. Krotscheck and D. Pines,
|
||||
! Phys. Rev. B 28, 3936-3951 (1984)
|
||||
! (2) https://en.wikipedia.org/wiki/Lagrange_polynomial
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,FIVE,THIRD,FOURTH
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,RS
|
||||
REAL (WP) :: IQ_IKP_3D
|
||||
REAL (WP) :: Y,Y2,Y3,Y4
|
||||
REAL (WP) :: A1(0:4),A2(0:4),A5(0:4)
|
||||
REAL (WP) :: I1,I2,I5,L1,L2,L5
|
||||
!
|
||||
DATA A1 / 0.0039314E0_WP, - 0.03844E0_WP , 0.29126E0_WP, & ! coefficients of
|
||||
- 0.13488E0_WP, 0.018838E0_WP / ! the 4th-degree
|
||||
DATA A2 / 0.005127E0_WP , - 0.048227E0_WP, 0.32508E0_WP, & ! polynomials
|
||||
- 0.14552E0_WP , 0.019639E0_WP / ! used to fit
|
||||
DATA A5 / 0.0077247E0_WP, - 0.068004E0_WP, 0.3837E0_WP , & ! table II
|
||||
- 0.15996E0_WP , 0.019756E0_WP / ! data
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
Y2 = Y * Y !
|
||||
Y3 = Y2 * Y ! powers of Y
|
||||
Y4 = Y3 * Y !
|
||||
!
|
||||
! Computing I(q) for r_s = 1,2 and 5
|
||||
!
|
||||
I1 = A1(0) + A1(1) * Y + A1(2) * Y2 + A1(3) * Y3 + A1(4) * Y4 !
|
||||
I2 = A2(0) + A2(1) * Y + A2(2) * Y2 + A2(3) * Y3 + A2(4) * Y4 !
|
||||
I5 = A5(0) + A5(1) * Y + A5(2) * Y2 + A5(3) * Y3 + A5(4) * Y4 !
|
||||
!
|
||||
! Performing Lagrange interpolation between I1, I2 and I5:
|
||||
!
|
||||
! I(r_s) = I1 * L1(r_s) + I2 * L2(r_s) + I5 * L5(r_s)
|
||||
!
|
||||
L1 = FOURTH * (RS - TWO) * (RS - FIVE) !
|
||||
L2 = - THIRD * (RS - ONE) * (RS - FIVE) !
|
||||
L5 = FOURTH * THIRD * (RS - ONE) * (RS - TWO) !
|
||||
!
|
||||
IQ_IKP_3D = I1 * L1 + I2 * L2 + I5 * L5 !
|
||||
!
|
||||
END FUNCTION IQ_IKP_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION IQ_KU1_3D(X)
|
||||
!
|
||||
! This function computes G(q,infinity), the value of the dynamic
|
||||
! local-field correction for omega = infinity, for 3D systems
|
||||
! in the Kugler approximation
|
||||
!
|
||||
! References: (1) A. Kugler, J. Stat. Phys. 12, 35-87 (1975)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
! Warning note: Here, we use the variable Y = q / k_F = 2 * X
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,FIVE,SIX
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X
|
||||
REAL (WP) :: IQ_KU1_3D
|
||||
REAL (WP) :: Y,Y2,Y4,YM1,YM2
|
||||
!
|
||||
REAL (WP) :: LOG,ABS
|
||||
!
|
||||
Y = X + X ! Y = q / k_F = eta
|
||||
Y2 = Y * Y ! Y^2 = eta^2
|
||||
Y4 = Y2 * Y2 ! Y^4 = eta^4
|
||||
YM1 = ONE / Y ! 1 / Y = 1/eta
|
||||
YM2 = ONE / Y2 ! 1 / Y^2 = 1/eta^2
|
||||
!
|
||||
IQ_KU1_3D = - THREE / 16.0E0_WP * ( & !
|
||||
32.0E0_WP * YM2 / 63.0E0_WP - & !
|
||||
608.0E0_WP / 945.0E0_WP - & !
|
||||
142.0E0_WP * Y2 / 315.0E0_WP - & !
|
||||
TWO * Y4 / 315.0E0_WP + & !
|
||||
Y4 * (TWO - Y2 / 18.0E0_WP) * & !
|
||||
LOG(ABS(ONE - FOUR * YM2)) / 35.0E0_WP + & ! ref. (1) eq. (D6)
|
||||
( -32.0E0_WP * YM2 / 63.0E0_WP + & !
|
||||
24.0E0_WP / 35.0E0_WP - & !
|
||||
TWO * Y2 / FIVE + & !
|
||||
Y4 / SIX & !
|
||||
) * YM1 * LOG(ABS((Y + TWO) / (Y - TWO))) & !
|
||||
) !
|
||||
!
|
||||
END FUNCTION IQ_KU1_3D
|
||||
!
|
||||
END MODULE IQ_FUNCTIONS_1
|
|
@ -0,0 +1,379 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE IQ_FUNCTIONS_2
|
||||
!
|
||||
! This modules provides subroutines/functions to compute
|
||||
! static local-field factors I(q) = G(q,inf)
|
||||
!
|
||||
! These I(q) DEPEND of the static structure factor S(q)
|
||||
! through the function J(q):
|
||||
!
|
||||
! _ _
|
||||
! h_bar omega_q | | 3 m pi
|
||||
! I(q) = 4 ------------------- | < E_kin> - < E_kin> | - --------- ------ J(q)
|
||||
! (h_bar omega_p)^2 |_ 0 _| 4 k_F^3 e^2
|
||||
!
|
||||
!
|
||||
! d(r_s E_c)
|
||||
! Note: < E_kin> - < E_kin> = -----------
|
||||
! 0 d r_s
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE IQ_3D_2(X,RS,T,IQ)
|
||||
!
|
||||
! This function computes the function I(q) = G(q,infinity)
|
||||
! for 3D systems
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * IQ_TYPE : type of approximation for I(q)
|
||||
! IQ_TYPE = 'GKM' Gorobchenko-Kohn-Maksimov
|
||||
! IQ_TYPE = 'HKA' Hong-Kim
|
||||
! IQ_TYPE = 'KU2' Kugler
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Oct 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,THREE,FOUR,HALF
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E,E
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE ENERGIES, ONLY : EC_TYPE
|
||||
USE CORRELATION_ENERGIES
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: IQ_TYPE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,RS,T
|
||||
REAL (WP) :: IQ
|
||||
REAL (WP) :: JQ
|
||||
REAL (WP) :: Q_SI,E_Q,D_KIN
|
||||
REAL (WP) :: EC,D_EC_1,D_EC_2
|
||||
REAL (WP) :: COEF1,COEF2
|
||||
REAL (WP) :: KF3,E2
|
||||
!
|
||||
Q_SI = TWO * KF_SI * X !
|
||||
E_Q = HALF * H_BAR * H_BAR * Q_SI * Q_SI / M_E !
|
||||
!
|
||||
KF3 = KF_SI * KF_SI * KF_SI !
|
||||
E2 = E * E !
|
||||
!
|
||||
! Computing the correlation energy and its derivatives
|
||||
!
|
||||
EC = EC_3D(EC_TYPE,1,RS,T) !
|
||||
CALL DERIVE_EC_3D(EC_TYPE,1,5,RS,T,D_EC_1,D_EC_2) !
|
||||
!
|
||||
D_KIN = EC + RS * D_EC_1 !
|
||||
!
|
||||
IF(IQ_TYPE == 'HKA') THEN !
|
||||
JQ = JQ_HKA_3D(X,RS,T) !
|
||||
ELSE IF(IQ_TYPE == 'GKM') THEN !
|
||||
JQ = JQ_GKM_3D(X,RS,T) !
|
||||
ELSE IF(IQ_TYPE == 'KU2') THEN !
|
||||
JQ = JQ_KU2_3D(X,RS,T) !
|
||||
END IF !
|
||||
!
|
||||
COEF1 = FOUR * E_Q / (ENE_P_SI * ENE_P_SI) !
|
||||
COEF2 = THREE * M_E * PI / (FOUR * KF3 * E2) !
|
||||
!
|
||||
IQ = COEF1 * D_KIN - COEF2 * JQ !
|
||||
!
|
||||
END SUBROUTINE IQ_3D_2
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION JQ_HKA_3D(X,RS,T)
|
||||
!
|
||||
! This function computes the Hong-Kim J(q) function
|
||||
!
|
||||
! Reference: J. Hong and C. Kim, Phys. Rev. 43, 1965-1971 (1991)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 20 Sep 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NZ_MAX
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,FOUR,FIVE,SIX, &
|
||||
HALF,THIRD
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
USE SF_VALUES, ONLY : SQ_TYPE
|
||||
USE INTEGRATION, ONLY : INTEGR_L
|
||||
USE STRUCTURE_FACTOR_STATIC, ONLY : STFACT_STATIC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: IP
|
||||
INTEGER, PARAMETER :: N_I = 100 ! number of integration points
|
||||
INTEGER :: ID
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,RS,T
|
||||
REAL (WP) :: JQ_HKA_3D
|
||||
REAL (WP) :: INTG(NZ_MAX)
|
||||
REAL (WP) :: I_STEP
|
||||
REAL (WP) :: K,P,K2,P2
|
||||
REAL (WP) :: PPK,PMK
|
||||
REAL (WP) :: SQ
|
||||
REAL (WP) :: INTGR
|
||||
!
|
||||
REAL (WP) :: FLOAT,LOG,ABS
|
||||
!
|
||||
REAL (WP), PARAMETER :: UP = SIX ! upper bound for integration
|
||||
!
|
||||
ID = 1 !
|
||||
!
|
||||
K = X + X ! q / k_F
|
||||
K2 = K * K !
|
||||
!
|
||||
! Initialization of integrand
|
||||
!
|
||||
DO IP = 1, NZ_MAX !
|
||||
INTG(IP) = ZERO !
|
||||
END DO !
|
||||
!
|
||||
I_STEP = UP / FLOAT(N_I -1) ! integration step
|
||||
!
|
||||
! Calculation of integrand
|
||||
!
|
||||
DO IP = 1, N_I !
|
||||
!
|
||||
P = FLOAT(IP - 1) * I_STEP !
|
||||
P2 = P * P !
|
||||
!
|
||||
PPK = P + K !
|
||||
PMK = P - K !
|
||||
!
|
||||
CALL STFACT_STATIC(X,RS,T,SQ_TYPE,SQ) !
|
||||
!
|
||||
INTG(IP) = P2 * (ONE - SQ) * ( & !
|
||||
FIVE / SIX - HALF * P2 / K2 + & !
|
||||
(PMK * PPK)**2 * LOG(ABS(PPK / PMK)) / & ! ref. (1) eq. (26)
|
||||
(FOUR * P * K * K2) & !
|
||||
) !
|
||||
!
|
||||
END DO !
|
||||
!
|
||||
! Computing the integral
|
||||
!
|
||||
CALL INTEGR_L(INTG,I_STEP,NZ_MAX,N_I,INTGR,ID) !
|
||||
!
|
||||
JQ_HKA_3D = THIRD * PI_INV * INTGR ! ref. (1) eq. (26)
|
||||
!
|
||||
END FUNCTION JQ_HKA_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION JQ_GKM_3D(X,RS,T)
|
||||
!
|
||||
! This function computes the Gorobchenko-Kohn-Maksimov J(q) function
|
||||
!
|
||||
!
|
||||
! Reference : V. D. Gorobchenko, V. N. Kohn and E. G. Maksimov,
|
||||
! in "The Dielectric Function of Condensed Systems",
|
||||
! ed. by L. V. Keldysh, D. A. Kirzhnitz and
|
||||
! A. A. Maradudin (Elsevier, 1989), pp. 87-219
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 19 Sep 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NZ_MAX
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,THREE,FOUR,FIVE,SIX,EIGHT
|
||||
USE SF_VALUES, ONLY : SQ_TYPE
|
||||
USE INTEGRATION, ONLY : INTEGR_L
|
||||
USE STRUCTURE_FACTOR_STATIC, ONLY : STFACT_STATIC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: IP
|
||||
INTEGER, PARAMETER :: N_I = 100 ! number of integration points
|
||||
INTEGER :: ID
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,RS,T
|
||||
REAL (WP) :: JQ_GKM_3D
|
||||
REAL (WP) :: INTG(NZ_MAX)
|
||||
REAL (WP) :: I_STEP
|
||||
REAL (WP) :: K,P,K2,P2
|
||||
REAL (WP) :: PPK,PMK
|
||||
REAL (WP) :: SQ
|
||||
REAL (WP) :: INTGR
|
||||
REAL (WP) :: KF3
|
||||
!
|
||||
REAL (WP) :: FLOAT,LOG,ABS
|
||||
!
|
||||
REAL (WP), PARAMETER :: UP = SIX ! upper bound for integration
|
||||
!
|
||||
ID = 1 !
|
||||
!
|
||||
KF3 = ONE !
|
||||
!
|
||||
K = X + X ! q / k_F
|
||||
K2 = K * K !
|
||||
!
|
||||
! Initialization of integrand
|
||||
!
|
||||
DO IP = 1, NZ_MAX !
|
||||
INTG(IP) = ZERO !
|
||||
END DO !
|
||||
!
|
||||
I_STEP = UP / FLOAT(N_I -1) ! integration step
|
||||
!
|
||||
! Calculation of integrand
|
||||
!
|
||||
DO IP = 1, N_I !
|
||||
!
|
||||
P = FLOAT(IP - 1) * I_STEP !
|
||||
P2 = P * P !
|
||||
!
|
||||
PPK = P + K !
|
||||
PMK = P - K !
|
||||
!
|
||||
CALL STFACT_STATIC(X,RS,T,SQ_TYPE,SQ) !
|
||||
!
|
||||
INTG(IP) = P2 * (ONE - SQ) * ( & !
|
||||
FIVE / EIGHT - THREE * P2 / (EIGHT * K2) + & !
|
||||
THREE* PMK * PPK * LOG(ABS(PPK / PMK)) / & ! ref. (1) eq. (2.75)
|
||||
(FOUR * FOUR * P * K * K2) & !
|
||||
) !
|
||||
!
|
||||
END DO !
|
||||
!
|
||||
! Computing the integral
|
||||
!
|
||||
CALL INTEGR_L(INTG,I_STEP,NZ_MAX,N_I,INTGR,ID) !
|
||||
!
|
||||
JQ_GKM_3D = INTGR / KF3 !
|
||||
!
|
||||
END FUNCTION JQ_GKM_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION JQ_KU2_3D(X,RS,T)
|
||||
!
|
||||
! This function computes the Kugler J(q) function
|
||||
!
|
||||
! Reference: (1) A. A. Kugler, Phys. Rev. A 1, 1688-1696 (1970)
|
||||
! (2) A. A. Kugler, J. Stat. Phys. 12, 35-87 (1975)
|
||||
!
|
||||
! Note: A misprint in the expression of J(q,k) in ref. (1)
|
||||
! has been corrected in ref. (2)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 19 Sep 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NZ_MAX
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,FOUR,FIVE,SIX, &
|
||||
HALF
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
USE CONSTANTS_P1, ONLY : M_E,E
|
||||
USE SF_VALUES, ONLY : SQ_TYPE
|
||||
USE INTEGRATION, ONLY : INTEGR_L
|
||||
USE STRUCTURE_FACTOR_STATIC, ONLY : STFACT_STATIC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: IP
|
||||
INTEGER, PARAMETER :: N_I = 100 ! number of integration points
|
||||
INTEGER :: ID
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,RS,T
|
||||
REAL (WP) :: JQ_KU2_3D
|
||||
REAL (WP) :: INTG(NZ_MAX)
|
||||
REAL (WP) :: I_STEP
|
||||
REAL (WP) :: K,P,K2,P2,R,R2
|
||||
REAL (WP) :: PPK,PMK
|
||||
REAL (WP) :: SQ
|
||||
REAL (WP) :: INTGR
|
||||
!
|
||||
REAL (WP) :: FLOAT,LOG,ABS
|
||||
!
|
||||
REAL (WP), PARAMETER :: UP = SIX ! upper bound for integration
|
||||
!
|
||||
ID = 1 !
|
||||
!
|
||||
K = X + X ! q / k_F
|
||||
K2 = K * K !
|
||||
!
|
||||
! Initialization of integrand
|
||||
!
|
||||
DO IP = 1, NZ_MAX !
|
||||
INTG(IP) = ZERO !
|
||||
END DO !
|
||||
!
|
||||
I_STEP = UP / FLOAT(N_I -1) ! integration step
|
||||
!
|
||||
! Calculation of integrand
|
||||
!
|
||||
DO IP = 1, N_I !
|
||||
!
|
||||
P = FLOAT(IP - 1) * I_STEP !
|
||||
P2 = P * P !
|
||||
R = P / K !
|
||||
R2 = P2 / K2 !
|
||||
!
|
||||
PPK = P + K !
|
||||
PMK = P - K !
|
||||
!
|
||||
CALL STFACT_STATIC(X,RS,T,SQ_TYPE,SQ) !
|
||||
!
|
||||
INTG(IP) = P2 * (SQ - ONE) * ( & !
|
||||
FIVE / SIX - HALF * R2 + & ! ref. (1) eq. (5.6)
|
||||
(R2 - ONE)**2 * LOG(ABS(PPK / PMK)) / & ! corrected by ref. (2)
|
||||
(FOUR * R) & !
|
||||
) !
|
||||
!
|
||||
END DO !
|
||||
!
|
||||
! Computing the integral
|
||||
!
|
||||
CALL INTEGR_L(INTG,I_STEP,NZ_MAX,N_I,INTGR,ID) !
|
||||
!
|
||||
JQ_KU2_3D = E * E * PI_INV * INTGR / M_E ! ref. (1) eq. (5.5)
|
||||
!
|
||||
END FUNCTION JQ_KU2_3D
|
||||
!
|
||||
END MODULE IQ_FUNCTIONS_2
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,220 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE LOCAL_FIELD_STATIC_2
|
||||
!
|
||||
! This modules provides subroutines/functions to compute
|
||||
! static local-field factors G(q)
|
||||
!
|
||||
! These G(q) DEPEND of the static structure factor S(q)
|
||||
!
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE LFIELD_STATIC_2(X,RS,T,GQ_TYPE,GQ)
|
||||
!
|
||||
! This subroutine computes static local-field factors G(q)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * GQ_TYPE : local-field correction type (3D)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * GQ : static local field correction
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 19 Jun 2020
|
||||
!
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : DMN
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: GQ_TYPE
|
||||
!
|
||||
REAL (WP) :: X,RS,T
|
||||
REAL (WP) :: GQ
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
CALL LOCAL_FIELD_STATIC_3D_2(X,RS,T,GQ_TYPE,GQ) !
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
CONTINUE ! not implemented
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
CONTINUE ! not implemented
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE LFIELD_STATIC_2
|
||||
!
|
||||
!------ 1) 3D case --------------------------------------------
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE LOCAL_FIELD_STATIC_3D_2(X,RS,T,GQ_TYPE,GQ)
|
||||
!
|
||||
! This subroutine computes static local-field factors G(q)
|
||||
! depending on the structure factor S(q) for 3D systems.
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * GQ_TYPE : local-field correction type (3D)
|
||||
! GQ_TYPE = 'IKPA' Iwamoto-Krotscheck-Pines
|
||||
! temperature-dep. --> GQ_TYPE = 'HNCA' hypernetted chain
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * GQ : static local field correction
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 2 Dec 2020
|
||||
!
|
||||
!
|
||||
USE SF_VALUES, ONLY : SQ_TYPE
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: GQ_TYPE
|
||||
!
|
||||
REAL (WP) :: X,RS,T
|
||||
REAL (WP) :: GQ
|
||||
!
|
||||
IF(GQ_TYPE == 'IKPA') THEN !
|
||||
GQ=IKPA_LFC(X,RS,T,SQ_TYPE) !
|
||||
ELSE IF(GQ_TYPE == 'HNCA') THEN !
|
||||
GQ=HNCA_LFC(X,RS,T,SQ_TYPE) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE LOCAL_FIELD_STATIC_3D_2
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION HNCA_LFC(X,RS,T,SQ_TYPE)
|
||||
!
|
||||
! This function computes the hypernetted chain
|
||||
! local-field correction
|
||||
!
|
||||
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
||||
! Springer Series in Solid-STate Sciences 96,
|
||||
! (Springer, 1998) p. 33
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * SQ_TYPE : structure factor approximation (3D)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Sep 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||||
USE STRUCTURE_FACTOR_STATIC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: SQ_TYPE
|
||||
!
|
||||
!
|
||||
REAL (WP) :: X,RS,T,Y
|
||||
REAL (WP) :: HNCA_LFC
|
||||
REAL (WP) :: Q_SI,Q_D,R
|
||||
REAL (WP) :: SQ
|
||||
!
|
||||
Y = X + X ! Y = q / k_F
|
||||
Q_SI = Y * KF_SI ! q in SI
|
||||
!
|
||||
! Computing the Debye vector
|
||||
!
|
||||
CALL DEBYE_VECTOR('3D',T,RS,Q_D) ! q_D in SI
|
||||
!
|
||||
R = Q_SI / Q_D !
|
||||
!
|
||||
! Computing the structure factor
|
||||
!
|
||||
CALL STFACT_STATIC(X,RS,T,SQ_TYPE,SQ) !
|
||||
!
|
||||
HNCA_LFC = ONE + (ONE - ONE / SQ) * R * R ! ref. (1) eq. (2.2.33)
|
||||
!
|
||||
END FUNCTION HNCA_LFC
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION IKPA_LFC(X,RS,T,SQ_TYPE)
|
||||
!
|
||||
! This function computes the Iwamoto-Krotscheck-Pines
|
||||
! local-field correction
|
||||
!
|
||||
! References: (1) N. Iwamoto, E. Krotscheck and D. Pines,
|
||||
! Phys. Rev. B 29, 3936-3951 (1984)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * SQ_TYPE : structure factor approximation (3D)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Sep 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,THREE,FOUR
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
USE STRUCTURE_FACTOR_STATIC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: SQ_TYPE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,RS,T
|
||||
REAL (WP) :: IKPA_LFC
|
||||
REAL (WP) :: Y,Y4,COEF
|
||||
REAL (WP) :: SF,SQ
|
||||
REAL (WP) :: SQ2,SF2
|
||||
REAL (WP) :: ALPHA
|
||||
!
|
||||
Y = X + X ! Y = q / k_F
|
||||
Y4 = Y * Y * Y * Y ! Y^4
|
||||
!
|
||||
ALPHA = ALFA('3D') !
|
||||
COEF = THREE * PI / (FOUR * FOUR * ALPHA * RS) !
|
||||
!
|
||||
SF = HFA_SF(X) !
|
||||
CALL STFACT_STATIC(X,RS,T,SQ_TYPE,SQ) !
|
||||
!
|
||||
SQ2 = SQ * SQ !
|
||||
SF2 = SF * SF !
|
||||
!
|
||||
IKPA_LFC = ONE - COEF * ( ONE / SQ2 - ONE / SF2 ) * Y4 !
|
||||
!
|
||||
END FUNCTION IKPA_LFC
|
||||
!
|
||||
END MODULE LOCAL_FIELD_STATIC_2
|
|
@ -0,0 +1,162 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE MEMORY2_FUNCTIONS_F
|
||||
!
|
||||
! This modules provides memory functions in terms of the frequency
|
||||
! and of the transfer momentum
|
||||
!
|
||||
!
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION MEMORY2_F(X,Z,T,TAU,MEM_TYPE)
|
||||
!
|
||||
! This function computes the memory function K(q,omega)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * T : temperature in SI
|
||||
! * TAU : relaxation time in SI
|
||||
! * MEM_TYPE : type of memory function used
|
||||
! MEM_TYPE = 'RAYI' --> Raganathan-Yip function
|
||||
! MEM_TYPE = 'LIHY' --> linearized hydrodynamic function
|
||||
!
|
||||
!
|
||||
! Remark: The memory function has the dimension of a frequency omega
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 29 Jan 2021
|
||||
!
|
||||
!
|
||||
USE CALCTYPE
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO
|
||||
USE CONSTANTS_P1, ONLY : M_E,K_B
|
||||
USE FERMI_SI, ONLY : KF_SI,VF_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: MEM_TYPE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,Z,T,TAU
|
||||
!
|
||||
REAL (WP) :: U,V0,U0,U1
|
||||
REAL (WP) :: Q_SI
|
||||
REAL (WP) :: OMG
|
||||
!
|
||||
REAL (WP) :: SQRT
|
||||
!
|
||||
COMPLEX (WP) :: MEMORY_F
|
||||
!
|
||||
! Computing the average velocity
|
||||
!
|
||||
IF(CAL_TYPE == 'QUANTUM') THEN !
|
||||
V0 = VF_SI !
|
||||
ELSE !
|
||||
V0 = SQRT(TWO * K_B * T / M_E) !
|
||||
END IF !
|
||||
!
|
||||
Q_SI = Y * KF_SI ! q in SI
|
||||
U = X * Z ! U = omega / (q v_F)
|
||||
OMG = Q_SI * VF_SI * U ! omega in SI
|
||||
!
|
||||
U0 = U * VF_SI / V_0 ! omega / q v_0
|
||||
U1 = ONE / (TAU * Q_SI * V0) !
|
||||
!
|
||||
IF(MEM_TYPE == 'NONE') THEN !
|
||||
MEMORY2_F = RAYI(OMG,U0) !
|
||||
ELSE IF(MEM_TYPE == 'DELT') THEN !
|
||||
MEMORY2_F = LINY(OMG,TAU,U1) !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION MEMORY2_F
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION RAYI(OMG,U0)
|
||||
!
|
||||
! This function computes the frequency Ranganathan-Yip memory function
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * OMG : frequency in SI
|
||||
! * U0 : dimensionless parameter omega / q v_0
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 29 Jan 2021
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,FOUR
|
||||
USE COMPLEX_NUMBERS, ONLY : IC
|
||||
USE PI_ETC, ONLY : PI_INV,SQR_PI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: OMG,U0
|
||||
!
|
||||
REAL (WP) :: REM,IMM
|
||||
!
|
||||
COMPLEX (WP) :: RAYI
|
||||
!
|
||||
REM = ONE / SQR_PI - (FOUR * PI_INC - ONE) * U0 * U0 !
|
||||
IMM = (ONE - TWO * PI_INV) * U0 !
|
||||
!
|
||||
RAYI = OMG * (REM + IC * IMM) / U0 !
|
||||
!
|
||||
END FUNCTION RAYI
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION LIHY(OMG,TAU,U1)
|
||||
!
|
||||
! This function computes the frequency linearized hydrodynamic memory function
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * OMG : frequency in SI
|
||||
! * TAU : relaxation time in SI
|
||||
! * U1 : dimensionless parameter 1 / (tau q v_0)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 29 Jan 2021
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : THREE,FIVE,HALF,THIRD,SIXTH,NINTH
|
||||
USE COMPLEX_NUMBERS, ONLY : IC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: OMG,TAU,U1
|
||||
!
|
||||
COMPLEX (WP) :: LIHY
|
||||
!
|
||||
COMPLEX (WP) :: NUM,DEN
|
||||
!
|
||||
NUM = IC * OMG + FIVE * SIXTH / U1 !
|
||||
DEN = - OMG * OMG + IC * THREE * HALF / U1 + & !
|
||||
FIVE * NINTH / (U1 * U1) + THIRD !
|
||||
!
|
||||
LIHY = HALF * NUM / (DEN * TAU * U1) !
|
||||
!
|
||||
END FUNCTION LIHY
|
||||
!
|
||||
END MODULE MEMORY2_FUNCTIONS_F
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,119 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE LOSS_MOMENTS
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE LOSS_MOMENTS_AN(X,C0,C2,C4)
|
||||
!
|
||||
! This subroutine computes "analytically" the first three moments
|
||||
! of the loss function.
|
||||
!
|
||||
!
|
||||
! References: (1) Yu. V. Arkhipov et al, EPL, 104, 35003 (2013)
|
||||
!
|
||||
!
|
||||
! Warning: This subroutine makes us of the Arkhipov et al definition
|
||||
! of the loss function
|
||||
!
|
||||
! / + INF _ _
|
||||
! 1 | n-1 | 1 |
|
||||
! C_n = ---- | omega Im | - --------- | d omega
|
||||
! pi | |_ epsilon _|
|
||||
! / - INF
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
!
|
||||
!
|
||||
! Outpu parameters:
|
||||
!
|
||||
! * C0 : \
|
||||
! * C2 : > moments of the loss function
|
||||
! * C4 : /
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 23 Nov 2020
|
||||
!
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : DMN,RS
|
||||
USE LF_VALUES, ONLY : IQ_TYPE
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,FOUR,HALF
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E
|
||||
USE FERMI_SI, ONLY : KF_SI,EF_SI
|
||||
USE PLASMON_ENE_SI
|
||||
USE DFUNC_STATIC, ONLY : RPA1_EPS_S_LG
|
||||
USE UTILITIES_1, ONLY : D
|
||||
USE IQ_FUNCTIONS_1
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X
|
||||
REAL (WP), INTENT(OUT) :: C0,C2,C4
|
||||
!
|
||||
REAL (WP) :: Q_SI
|
||||
REAL (WP) :: OMP,OMQ
|
||||
REAL (WP) :: OMP2,OMQ2
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
REAL (WP) :: DIME,AV_KE,IQ
|
||||
!
|
||||
! Computing the plasmon frequency
|
||||
!
|
||||
OMP = ENE_P_SI / H_BAR ! omega_p
|
||||
!
|
||||
! Computing the plasmon kinetic frequency
|
||||
!
|
||||
Q_SI = TWO * X * KF_SI ! q in SI
|
||||
OMQ = HALF * H_BAR * Q_SI * Q_SI / M_E ! omega_q in SI
|
||||
!
|
||||
OMP2 = OMP * OMP !
|
||||
OMQ2 = OMQ * OMQ !
|
||||
!
|
||||
! Computing the dimensionality
|
||||
!
|
||||
DIME = D(DMN) !
|
||||
!
|
||||
! Computing the static RPA dielectric function
|
||||
!
|
||||
CALL RPA1_EPS_S_LG(X,DMN,EPSR,EPSI) !
|
||||
!
|
||||
! Computing I(q)
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
CALL IQ_3D(X,RS,IQ_TYPE,IQ) !
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
CONTINUE ! not implemented yet
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
CONTINUE ! not implemented yet
|
||||
END IF !
|
||||
!
|
||||
! Computing the average ground state kinetic energy :
|
||||
!
|
||||
! d
|
||||
! <t> = --------- E_F
|
||||
! 0 (d + 2)
|
||||
!
|
||||
AV_KE = DIME * EF_SI / (DIME + TWO) ! <t>_0 in SI
|
||||
!
|
||||
! Getting the moments in SI
|
||||
!
|
||||
C0 = ONE - ONE / EPSR ! \
|
||||
C2 = OMP2 ! |
|
||||
C4 = OMP2 * ( FOUR * AV_KE * OMQ / H_BAR + & ! |> ref. (1) eq. (3)-(4)
|
||||
OMQ2 + OMP2 * (ONE - IQ) & ! |
|
||||
) ! /
|
||||
!
|
||||
END SUBROUTINE LOSS_MOMENTS_AN
|
||||
!
|
||||
END MODULE LOSS_MOMENTS
|
|
@ -0,0 +1,247 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE MOMENTS_EXACT
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
! It contains the following functions/subroutines:
|
||||
!
|
||||
! *
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE MOMENTS_POL_RPA_2D(X,RS,M1,M3)
|
||||
!
|
||||
! This subroutine computes the first moments of the polarization
|
||||
! Pi(q,omega) in the RPA model
|
||||
!
|
||||
!
|
||||
! References: (1) N. Iwamoto, Phys. Rev. A 30, 3289-3304 (1984)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
!
|
||||
!
|
||||
! Output parameter:
|
||||
!
|
||||
! * M1 : moment of order 1
|
||||
! * M3 : moment of order 3
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,THREE,HALF
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E
|
||||
USE FERMI_SI, ONLY : EF_SI,KF_SI
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: X
|
||||
REAL (WP) :: M1,M3
|
||||
REAL (WP) :: Q_SI,OM_0
|
||||
REAL (WP) :: COEF
|
||||
REAL (WP) :: RS,N0
|
||||
!
|
||||
Q_SI=TWO*X*KF_SI ! q in SI
|
||||
OM_0=HALF*H_BAR*Q_SI*Q_SI/M_E ! E_q / hbar
|
||||
!
|
||||
N0=RS_TO_N0('2D',RS) !
|
||||
!
|
||||
COEF=N0*Q_SI*Q_SI/M_E !
|
||||
!
|
||||
M1=COEF ! ref. (1) eq. (2.25a)
|
||||
M3=COEF*( OM_0*OM_0 + THREE*EF_SI*OM_0/H_BAR ) ! ref. (1) eq. (2.25b)
|
||||
!
|
||||
END SUBROUTINE MOMENTS_POL_RPA_2D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE MOMENTS_POL_3D(X,RS,T,SQ_TYPE,GQ_TYPE,EC_TYPE, &
|
||||
IQ_TYPE,M1,M3)
|
||||
!
|
||||
! This subroutine computes the first moments of the polarization
|
||||
! Pi(q,omega)
|
||||
!
|
||||
!
|
||||
! References: (1) S. Ichimaru, Rev. Mod. Phys. 54, 1017-1059 (1982)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * SQ_TYPE : structure factor approximation (3D)
|
||||
! * GQ_TYPE : local-field correction type (3D)
|
||||
! * EC_TYPE : type of correlation energy functional
|
||||
! * IQ_TYPE : type of approximation for I(q)
|
||||
!
|
||||
!
|
||||
! Output parameter:
|
||||
!
|
||||
! * M1 : moment of order 1
|
||||
! * M3 : moment of order 3
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 5 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,FIVE,HALF
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E
|
||||
USE FERMI_SI, ONLY : EF_SI,KF_SI
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
USE IQ_FUNCTIONS_1
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 6) :: EC_TYPE
|
||||
CHARACTER (LEN = 4) :: GQ_TYPE
|
||||
CHARACTER (LEN = 3) :: SQ_TYPE,IQ_TYPE
|
||||
!
|
||||
REAL (WP) :: X,RS,T
|
||||
REAL (WP) :: M1,M3
|
||||
REAL (WP) :: Q_SI,OM_0
|
||||
REAL (WP) :: COEF
|
||||
REAL (WP) :: IQ
|
||||
REAL (WP) :: N0
|
||||
!
|
||||
Q_SI=TWO*X*KF_SI ! q in SI
|
||||
OM_0=HALF*H_BAR*Q_SI*Q_SI/M_E ! E_q / hbar
|
||||
!
|
||||
N0=RS_TO_N0('3D',RS) !
|
||||
!
|
||||
COEF=N0*Q_SI*Q_SI/M_E !
|
||||
!
|
||||
! Computing the IQ function
|
||||
!
|
||||
CALL IQ_3D(X,RS,IQ_TYPE,IQ) !
|
||||
!
|
||||
! Computing the moments
|
||||
!
|
||||
M1=COEF ! ref. (1) eq. (3.34)
|
||||
M3=COEF*( & !
|
||||
OM_0*OM_0 + 12.0E0_WP*EF_SI*OM_0/(FIVE*H_BAR) + & ! ref. (1) eq. (3.35)
|
||||
ENE_P_SI*ENE_P_SI/(H_BAR*H_BAR) * (ONE-IQ) & !
|
||||
) !
|
||||
!
|
||||
END SUBROUTINE MOMENTS_POL_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE MOMENTS_LOS_3D(X,RS,T,C0,C2,C4)
|
||||
!
|
||||
! This subroutine computes the first moments of the loss function:
|
||||
!
|
||||
!
|
||||
! Cn(q) = 1/pi int_{-inf}^{+inf} omega^n L(q,omega) d omega
|
||||
!
|
||||
! with the loss function given by
|
||||
!
|
||||
! L(q,omega) = -1/omega * Im[ 1/epsilon(q,omega) ]
|
||||
!
|
||||
!
|
||||
! References: (1) Yu. V. Arkhipov et al, Contrib. Plasma Phys. 55, 381-389 (2015)
|
||||
! (2) Yu. V. Arkhipov et al, Contrib. Plasma Phys. 59, e201800171 (2019)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * C0 : 0-th order moment of the loss function
|
||||
! * C2 : 2-th order moment of the loss function
|
||||
! * C4 : 4-th order moment of the loss function
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 18 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,THREE,FOUR, &
|
||||
HALF,THIRD
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E,K_B
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
USE VELOCITIES, ONLY : VELOCITIES_3D
|
||||
USE PLASMA_SCALE
|
||||
USE PLASMA, ONLY : PL_TYPE,ZION
|
||||
USE ENERGIES, ONLY : EC_TYPE
|
||||
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
REAL (WP) :: X,Y,RS,T
|
||||
REAL (WP) :: C0,C2,C4
|
||||
REAL (WP) :: OP2
|
||||
REAL (WP) :: KQ4,KD2,K,U,H
|
||||
REAL (WP) :: Q2,Q4
|
||||
REAL (WP) :: N0
|
||||
REAL (WP) :: NONID,DEGEN
|
||||
REAL (WP) :: KD_SI
|
||||
REAL (WP) :: BETA,COEF
|
||||
REAL (WP) :: VE2,V_INT_2
|
||||
!
|
||||
Y=X+X ! Y = q / k_F
|
||||
!
|
||||
N0=RS_TO_N0('3D',RS) !
|
||||
!
|
||||
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||||
CALL PLASMON_SCALE(RS,T,ZION,NONID,DEGEN) !
|
||||
CALL VELOCITIES_3D(RS,T,EC_TYPE,VE2,V_INT_2) !
|
||||
!
|
||||
KD2=KD_SI*KD_SI !
|
||||
KQ4=16.0E0_WP*PI*N0*M_E*M_E/(H_BAR*H_BAR) !
|
||||
!
|
||||
BETA=ONE/(K_B*T) !
|
||||
OP2=(ENE_P_SI/H_BAR)**2 ! omega_p^2
|
||||
Q2=Y*Y*KF_SI*KF_SI !
|
||||
Q4=Q2*Q2 !
|
||||
!
|
||||
! Parameter the calculation of U
|
||||
!
|
||||
COEF=-FOUR*Q2*(NONID**1.5E0_WP)/(15.0E0_WP*BETA*M_E) !
|
||||
!
|
||||
KD2=KD_SI*KD_SI !
|
||||
KQ4=16.0E0_WP*PI*N0*M_E*M_E/(H_BAR*H_BAR) !
|
||||
!
|
||||
K=VE2*Q2/((ENE_P_SI/H_BAR)**2) + & ! ref. (2) eq. (12)
|
||||
(HALF*H_BAR/M_E)**2 * Q4/OP2 !
|
||||
U=COEF*(-0.9052E0_WP/DSQRT(0.6322E0_WP+NONID) + & ! ref. (2) eq. (14)
|
||||
0.27243E0_WP/(ONE+NONID)) !
|
||||
!
|
||||
IF(PL_TYPE == 'OCP') THEN ! no ion case
|
||||
H=ZERO !
|
||||
ELSE IF(PL_TYPE == 'DCP') THEN !
|
||||
H=FOUR*THIRD*ZION*RS*DSQRT(NONID)/ & ! ref. (3) eq. (6)
|
||||
DSQRT(THREE*ZION*NONID*NONID + FOUR*RS + & !
|
||||
FOUR*NONID*DSQRT(THREE*(ONE+ZION)*RS)) !
|
||||
END IF !
|
||||
!
|
||||
! Moments of the loss function
|
||||
!
|
||||
C0=KD2*KQ4/(Q2*KQ4+Q4*KD2+KQ4*KD2) ! ref. (2) eq. (9)
|
||||
C2=OP2 ! ref. (2) eq. (10)
|
||||
C4=OP2*OP2 * (ONE + K + U + H) ! ref. (1) eq. (4)
|
||||
!
|
||||
END SUBROUTINE MOMENTS_LOS_3D
|
||||
!
|
||||
END MODULE MOMENTS_EXACT
|
|
@ -0,0 +1,366 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE MOMENTS_CALC
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
! This module provides the functions/subroutines to compute
|
||||
! the moments of different functions
|
||||
!
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE MOMENTS_LOSS_FUNCTION(X,N,MLO)
|
||||
!
|
||||
! This module computes the moments of the loss function
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * N : moment order
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * MLO : moment
|
||||
!
|
||||
!
|
||||
!
|
||||
! The moments are defined by
|
||||
! _ _
|
||||
! / + INF | |
|
||||
! | n | - 1 |
|
||||
! < omega^n> = 2 | omega Im | ------------- | d omega
|
||||
! | | eps(q,omega) |
|
||||
! / 0 |_ _|
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 30 Apr 2021
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
USE MATERIAL_PROP, ONLY : RS
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,TWO,FOURTH,TTINY,INF
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
!
|
||||
USE E_GRID
|
||||
!
|
||||
USE DF_VALUES, ONLY : D_FUNC
|
||||
!
|
||||
USE INTEGRATION, ONLY : INTEGR_L
|
||||
USE DFUNCL_STAN_DYNAMIC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER,INTENT(IN) :: N
|
||||
INTEGER :: IE
|
||||
INTEGER :: ID
|
||||
INTEGER :: I_ZE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X
|
||||
REAL (WP), INTENT(OUT):: MLO
|
||||
REAL (WP) :: E,V,Z
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
REAL (WP) :: ELF(NSIZE)
|
||||
REAL (WP) :: A
|
||||
!
|
||||
IF(MOD(N,2) == 0 .AND. N /= 0) THEN !
|
||||
MLO = ZERO !
|
||||
RETURN !
|
||||
END IF !
|
||||
!
|
||||
I_ZE = 0 ! switch for integrand = 0
|
||||
!
|
||||
! Constructing the e-grid
|
||||
!
|
||||
DO IE = 1, N_E ! E_F
|
||||
!
|
||||
E = E_MIN + FLOAT(IE - 1) * E_STEP ! in units of
|
||||
V = E ! hbar * omega / E_F
|
||||
Z = FOURTH * V / (X * X) ! omega / omega_q
|
||||
!
|
||||
! Computing the dielectric function epsilon(q,E)
|
||||
!
|
||||
CALL DFUNCL_DYNAMIC(X,Z,RS,T,D_FUNC,IE,EPSR,EPSI) !
|
||||
!
|
||||
! Computing the loss function ELF = Im [ -1 / epsilon(q,E) ]
|
||||
!
|
||||
ELF(IE) = E**N * EPSI / ( (EPSR * EPSR + EPSI * EPSI) ) ! integrand function
|
||||
!
|
||||
IF(ABS(ELF(IE)) >= TTINY) I_ZE = IE !
|
||||
!
|
||||
END DO !
|
||||
!
|
||||
IF(I_ZE > 0) THEN !
|
||||
!
|
||||
! Performing the e-integration with respect to E
|
||||
!
|
||||
ID = 1 !
|
||||
CALL INTEGR_L(ELF,E_STEP,NSIZE,N_E,A,ID) !
|
||||
!
|
||||
MLO = TWO * A !
|
||||
!
|
||||
ELSE ! IN always = 0
|
||||
!
|
||||
MLO = ZERO !
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE MOMENTS_LOSS_FUNCTION
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE MOMENTS_STRUCT_FACTOR(X,N,MSF)
|
||||
!
|
||||
! This module computes the moments of the dynamical structure factor
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * N : moment order
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * MLO : moment
|
||||
!
|
||||
!
|
||||
!
|
||||
! The moments are defined by
|
||||
!
|
||||
! / + INF
|
||||
! | n
|
||||
! < omega^n> = 2 | omega S(q,omega) d omega
|
||||
! |
|
||||
! / 0
|
||||
!
|
||||
!
|
||||
! Note: in the calculation of the moments of the loss function, q and omega
|
||||
! are respectively in units of k_F and E_F
|
||||
!
|
||||
! --> we write the coefficient COEF in units of 1/ E_F
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 21 Oct 2020
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
USE MATERIAL_PROP, ONLY : RS
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,TWO,HALF,FOURTH,TTINY,INF
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E
|
||||
USE FERMI_SI, ONLY : EF_SI,KF_SI
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
!
|
||||
USE E_GRID
|
||||
!
|
||||
USE PLASMON_ENE_SI
|
||||
USE SF_VALUES
|
||||
USE STRUCTURE_FACTOR_DYNAMIC
|
||||
USE MOMENTS, ONLY : M_TYPE
|
||||
USE INTEGRATION, ONLY : INTEGR_L
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER,INTENT(IN) :: N
|
||||
INTEGER :: IE
|
||||
INTEGER :: ID
|
||||
INTEGER :: I_ZE
|
||||
INTEGER :: LOGF
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X
|
||||
REAL (WP), INTENT(OUT):: MSF
|
||||
!
|
||||
REAL (WP) :: Q_SI,EQ_SI
|
||||
REAL (WP) :: COEF,MLO
|
||||
REAL (WP) :: E,V,Z
|
||||
REAL (WP) :: SQM(NSIZE)
|
||||
REAL (WP) :: SQO,A
|
||||
!
|
||||
LOGF = 6 ! log file unit
|
||||
!
|
||||
IF(M_TYPE == 'EPS') THEN
|
||||
!
|
||||
Q_SI = TWO * KF_SI * X ! q in SI
|
||||
!
|
||||
EQ_SI = HALF * H_BAR * H_BAR * Q_SI * Q_SI / M_E ! h_bar omega_q in SI
|
||||
COEF = TWO * PI_INV * (EQ_SI / ENE_P_SI) * EF_SI / ENE_P_SI! coefficient in units of 1/E_F
|
||||
!
|
||||
! Computing the moments of the loss function
|
||||
!
|
||||
CALL MOMENTS_LOSS_FUNCTION(X,N,MLO) !
|
||||
!
|
||||
MSF = COEF * MLO !
|
||||
!
|
||||
ELSE IF(M_TYPE == 'SQO') THEN !
|
||||
!
|
||||
IF(SSTDY == ' STATIC') THEN ! pathological case
|
||||
WRITE(LOGF,10) !
|
||||
STOP !
|
||||
END IF !
|
||||
!
|
||||
! Constructing the e-grid
|
||||
!
|
||||
DO IE = 1, N_E !
|
||||
!
|
||||
E = E_MIN + FLOAT(IE - 1) * E_STEP ! in units of
|
||||
V = E ! hbar * omega / E_F
|
||||
Z = FOURTH * V / (X * X) ! omega / omega_q
|
||||
!
|
||||
! Computing the dynamical structure factor
|
||||
!
|
||||
CALL STFACT_DYNAMIC(X,Z,RS,T,SQO_TYPE,SQ_TYPE,SQO) !
|
||||
!
|
||||
SQM(IE) = E**N * SQO ! integrand function
|
||||
!
|
||||
IF(ABS(SQM(IE)) >= TTINY) I_ZE = IE !
|
||||
!
|
||||
END DO !
|
||||
!
|
||||
IF(I_ZE > 0) THEN !
|
||||
!
|
||||
! Performing the e-integration with respect to E
|
||||
!
|
||||
ID = 1 !
|
||||
CALL INTEGR_L(SQM,E_STEP,NSIZE,N_E,A,ID) !
|
||||
!
|
||||
MSF = TWO * A !
|
||||
!
|
||||
ELSE ! IN always = 0
|
||||
!
|
||||
MSF = ZERO !
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
! Format:
|
||||
!
|
||||
10 FORMAT(//,10X,'<<<<< SSTDY PARAMETER WRONG >>>>>',/ &
|
||||
10X,'<<<<< CHANGE IN INPUT FILE >>>>>',//)
|
||||
!
|
||||
END SUBROUTINE MOMENTS_STRUCT_FACTOR
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE MOMENTS_EPSILON(X,N,MEP)
|
||||
!
|
||||
! This module computes the moments of the dynamical structure factor
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * N : moment order
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * MEP : moment
|
||||
!
|
||||
!
|
||||
!
|
||||
! The moments are defined by
|
||||
!
|
||||
! / + INF _ _
|
||||
! | n | |
|
||||
! < omega^n> = 2 | omega Im | eps(q,omega) | d omega
|
||||
! | |_ _|
|
||||
! / 0
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 30 Apr 2021
|
||||
!
|
||||
!
|
||||
!
|
||||
USE DIMENSION_CODE, ONLY : NSIZE
|
||||
USE MATERIAL_PROP, ONLY : RS
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,TWO,FOURTH,TTINY,INF
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
!
|
||||
USE E_GRID
|
||||
!
|
||||
USE DF_VALUES, ONLY : D_FUNC
|
||||
!
|
||||
USE INTEGRATION, ONLY : INTEGR_L
|
||||
USE INTEGRATION4
|
||||
USE DFUNCL_STAN_DYNAMIC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER,INTENT(IN) :: N
|
||||
INTEGER :: IE
|
||||
INTEGER :: ID
|
||||
INTEGER :: I_ZE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X
|
||||
REAL (WP), INTENT(OUT):: MEP
|
||||
REAL (WP) :: E,V,Z
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
REAL (WP) :: ELF(NSIZE)
|
||||
REAL (WP) :: A
|
||||
!
|
||||
IF(MOD(N,2) == 0 .AND. N /= 0) THEN !
|
||||
MEP = ZERO !
|
||||
RETURN !
|
||||
END IF !
|
||||
!
|
||||
I_ZE = 0 ! switch for integrand = 0
|
||||
!
|
||||
! Constructing the e-grid
|
||||
!
|
||||
DO IE = 1, N_E ! E_F
|
||||
!
|
||||
E = E_MIN + FLOAT(IE - 1) * E_STEP ! in units of
|
||||
V = E ! hbar * omega / E_F
|
||||
Z = FOURTH * V / (X * X) ! omega / omega_q
|
||||
!
|
||||
! Computing the dielectric function epsilon(q,E)
|
||||
!
|
||||
CALL DFUNCL_DYNAMIC(X,Z,RS,T,D_FUNC,IE,EPSR,EPSI) !
|
||||
!
|
||||
! Computing the loss function ELF = Im [ -1 / epsilon(q,E) ]
|
||||
!
|
||||
ELF(IE) = E**N * EPSI ! integrand function
|
||||
!
|
||||
IF(ABS(ELF(IE)) >= TTINY) I_ZE = IE !
|
||||
!
|
||||
END DO !
|
||||
!
|
||||
IF(I_ZE > 0) THEN !
|
||||
!
|
||||
! Performing the e-integration with respect to E
|
||||
!
|
||||
ID = 1 !
|
||||
CALL INTEGR_L(ELF,E_STEP,NSIZE,N_E,A,ID) !
|
||||
!
|
||||
MEP = TWO * A !
|
||||
!
|
||||
ELSE ! IN always = 0
|
||||
!
|
||||
MEP = ZERO !
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE MOMENTS_EPSILON
|
||||
!
|
||||
END MODULE MOMENTS_CALC
|
|
@ -0,0 +1,642 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE NEVALINNA_FUNCTIONS
|
||||
!
|
||||
! This modules provides Nevalinna functions
|
||||
!
|
||||
!
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION NEVAN2(X,Z,RS,T,TAU,NEV_TYPE)
|
||||
!
|
||||
! This function computes the Nevalinna function Q_2(x,omega)
|
||||
!
|
||||
! In an electron liquid, the Nevalinna function Q(x,z) plays the role
|
||||
! of the dynamic local-field correction G(x,z).
|
||||
!
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * TAU : relaxation time in SI
|
||||
! * NEV_TYPE : type of Nevalinna function used
|
||||
! NEV_TYPE = 'NONE' --> no function
|
||||
! NEV_TYPE = 'RELA' --> static value h(q) = i / tau
|
||||
! NEV_TYPE = 'STA1' --> static value h(q)
|
||||
! NEV_TYPE = 'STA2' --> static value h(q)
|
||||
! NEV_TYPE = 'STA3' --> static value h(q)
|
||||
! NEV_TYPE = 'STA4' --> static value h(q)
|
||||
! NEV_TYPE = 'PEEL' --> Perel'-Eliashberg function
|
||||
! NEV_TYPE = 'PE76' --> Perel'-Eliashberg by V. Arkhipov et al
|
||||
! NEV_TYPE = 'CPP1' -->
|
||||
! NEV_TYPE = 'CPP2' -->
|
||||
! NEV_TYPE = 'CPP3' -->
|
||||
! NEV_TYPE = 'CPP4' -->
|
||||
! NEV_TYPE = 'PST1' -->
|
||||
!
|
||||
!
|
||||
! Remark: The Nevalinna function has the dimension of a frequency omega
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 18 Nov 2020
|
||||
!
|
||||
!
|
||||
USE COMPLEX_NUMBERS, ONLY : ZEROC,IC
|
||||
USE LOSS_MOMENTS
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: NEV_TYPE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,Z,T,RS,TAU
|
||||
REAL (WP) :: C0,C2,C4
|
||||
REAL (WP) :: OM12,OM22
|
||||
!
|
||||
COMPLEX (WP) :: NEVAN2
|
||||
!
|
||||
! Computing the moments of the loss function
|
||||
!
|
||||
CALL LOSS_MOMENTS_AN(X,C0,C2,C4) !
|
||||
!
|
||||
OM12 = C2 / C0 !
|
||||
OM22 = C4 / C2 !
|
||||
!
|
||||
IF(NEV_TYPE == 'NONE') THEN !
|
||||
NEVAN2 = ZEROC !
|
||||
ELSE IF(NEV_TYPE == 'RELA') THEN !
|
||||
NEVAN2 = IC / TAU !
|
||||
ELSE IF(NEV_TYPE == 'STA1') THEN !
|
||||
NEVAN2 = STA1(OM12,OM22) !
|
||||
ELSE IF(NEV_TYPE == 'STA2') THEN !
|
||||
NEVAN2 = STA2(OM22,TAU) !
|
||||
ELSE IF(NEV_TYPE == 'STA3') THEN !
|
||||
NEVAN2 = STA3(X,OM12,OM22) !
|
||||
ELSE IF(NEV_TYPE == 'STA4') THEN !
|
||||
NEVAN2 = STA4(X,OM12,TAU) !
|
||||
ELSE IF(NEV_TYPE == 'CPP1') THEN !
|
||||
NEVAN2 = CPP1(X,Z,RS,OM12,OM22) !
|
||||
ELSE IF(NEV_TYPE == 'CPP2') THEN !
|
||||
NEVAN2 = CPP2(X,Z,RS,TAU,OM12,OM22) !
|
||||
ELSE IF(NEV_TYPE == 'CPP3') THEN !
|
||||
NEVAN2 = CPP3(X,Z,OM22,TAU) !
|
||||
ELSE IF(NEV_TYPE == 'CPP4') THEN !
|
||||
NEVAN2 = CPP4(X,Z,T,OM12,OM22) !
|
||||
ELSE IF(NEV_TYPE == 'PEEL') THEN !
|
||||
NEVAN2 = PEEL(X,Z,RS,OM12,OM22) !
|
||||
ELSE IF(NEV_TYPE == 'PE76') THEN !
|
||||
NEVAN2 = PE76(X,Z,RS,OM12,OM22) !
|
||||
ELSE IF(NEV_TYPE == 'PST1') THEN !
|
||||
NEVAN2 = PST1(X,Z,OM12,OM22) !
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION NEVAN2
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION STA1(OM12,OM22)
|
||||
!
|
||||
! This function computes a static Nevalinna function
|
||||
!
|
||||
!
|
||||
! References: (1) Yu. V. Arkhipov et al, Contrib. Plasma Phys. 58,
|
||||
! 967–975 (2018)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * OM12 : omega_1^2 \ characteristic squared
|
||||
! * OM22 : omega_2^2 / frequencies
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 18 Nov 2020
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO
|
||||
USE COMPLEX_NUMBERS, ONLY : IC
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: OM12,OM22
|
||||
!
|
||||
REAL (WP) :: SQRT
|
||||
!
|
||||
COMPLEX (WP) :: STA1
|
||||
!
|
||||
STA1 = IC * OM22 / SQRT(TWO * OM12) ! ref. (1) eq. (13)
|
||||
!
|
||||
END FUNCTION STA1
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION STA2(OM22,TAU)
|
||||
!
|
||||
! This function computes a static Nevalinna function
|
||||
!
|
||||
!
|
||||
! References: (1) Yu. V. Arkhipov et al, Contrib. Plasma Phys. 50,
|
||||
! 165-176 (2010)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * OM22 : omega_2^2 characteristic squared frequency
|
||||
! * TAU : relaxation time (in SI)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 18 Nov 2020
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO
|
||||
USE COMPLEX_NUMBERS, ONLY : IC
|
||||
USE CONSTANTS_P1, ONLY : H_BAR
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: OM22,TAU
|
||||
!
|
||||
REAL (WP) :: OMP,OM2
|
||||
!
|
||||
COMPLEX (WP) :: STA2
|
||||
!
|
||||
OMP = ENE_P_SI / H_BAR ! omega_p
|
||||
OM2 = OM22 - OMP * OMP ! ref. (1) eq. (15)
|
||||
!
|
||||
STA2 = IC * OM2 * TAU ! ref. (1) eq. (29)
|
||||
!
|
||||
END FUNCTION STA2
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION STA3(X,OM12,OM22)
|
||||
!
|
||||
! This function computes a static Nevalinna function
|
||||
!
|
||||
!
|
||||
! References: (1) S. V. Adamjan, T. Meyer and I. M. Tkachenko,
|
||||
! Contrib. Plasma Phys. 29, 373-375 (1989)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * OM12 : omega_1^2 \ characteristic squared
|
||||
! * OM22 : omega_2^2 / frequencies
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 26 Nov 2020
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : DMN
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,FOUR,HALF
|
||||
USE COMPLEX_NUMBERS, ONLY : IC
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE CONSTANTS_P1, ONLY : BOHR,H_BAR,M_E
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE DFUNC_STATIC, ONLY : RPA1_EPS_S_LG
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,OM12,OM22
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
REAL (WP) :: Q_SI,OMQ
|
||||
|
||||
!
|
||||
COMPLEX (WP) :: STA3
|
||||
!
|
||||
Q_SI = TWO * X * KF_SI ! q in SI
|
||||
!
|
||||
OMQ = HALF * H_BAR * Q_SI * Q_SI / M_E ! omega_q
|
||||
!
|
||||
! Computing the static RPA dielectric function
|
||||
!
|
||||
CALL RPA1_EPS_S_LG(X,DMN,EPSR,EPSI) !
|
||||
!
|
||||
STA3 = IC * EPSR * (EPSR - ONE) * HALF * PI * OMQ * & !
|
||||
BOHR * Q_SI * (OM22 / OM12 - ONE) !
|
||||
!
|
||||
END FUNCTION STA3
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION STA4(X,OM12,TAU)
|
||||
!
|
||||
! This function computes a static Nevalinna function
|
||||
!
|
||||
!
|
||||
! References: (1) V. M. Adamyan and I. M. Tkachenko,
|
||||
! Contrib. Plasma Phys. 43, 252-257 (2003)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * OM12 : omega_1^2 characteristic squared frequency
|
||||
! * TAU : relaxation time (in SI)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 27 Nov 2020
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,FOUR,HALF
|
||||
USE COMPLEX_NUMBERS, ONLY : IC
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E
|
||||
USE FERMI_SI, ONLY : KF_SI,EF_SI
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,OM12,TAU
|
||||
REAL (WP) :: EPSR,EPSI
|
||||
REAL (WP) :: Q_SI,OMQ
|
||||
REAL (WP) :: OMP,OM220
|
||||
REAL (WP) :: OMP2,OMQ2
|
||||
REAL (WP) :: AV_KE
|
||||
!
|
||||
COMPLEX (WP) :: STA4
|
||||
!
|
||||
Q_SI = TWO * X * KF_SI ! q in SI
|
||||
!
|
||||
OMP = ENE_P_SI / H_BAR ! omega_p
|
||||
OMQ = HALF * H_BAR * Q_SI * Q_SI / M_E ! omega_q
|
||||
!
|
||||
OMP2 = OMP * OMP !
|
||||
OMQ2 = OMQ * OMQ !
|
||||
!
|
||||
! Computing omega_2^2(0) = C_4(0) / C_2 --> with I(0) = 0
|
||||
!
|
||||
OM220 = OMP2 * ( FOUR * AV_KE * OMQ / H_BAR + & !
|
||||
OMQ2 + OMP2 & !
|
||||
) !
|
||||
!
|
||||
STA4 = IC * TAU * OMP2 * (OM220 / OMP2 - ONE) ! ref. (1), before eq. (29)
|
||||
!
|
||||
END FUNCTION STA4
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION PEEL(X,Z,RS,OM12,OM22)
|
||||
!
|
||||
! This function computes the Perel'-Eliashberg dynamic Nevalinna function
|
||||
!
|
||||
!
|
||||
! References: (1) Yu. V. Arkhipov et al, Contrib. Plasma Phys. 55,
|
||||
! 381-389 (2015)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * OM12 : omega_1^2 \ characteristic squared
|
||||
! * OM22 : omega_2^2 / frequencies
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 27 Nov 2020
|
||||
!
|
||||
USE PLASMA, ONLY : ZION
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,THREE,FIVE
|
||||
USE COMPLEX_NUMBERS, ONLY : ONEC,IC
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE SQUARE_ROOTS, ONLY : SQR2
|
||||
USE CONSTANTS_P1, ONLY : H_BAR
|
||||
USE FERMI_SI, ONLY : KF_SI,VF_SI
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,Z,RS
|
||||
REAL (WP), INTENT(IN) :: OM12,OM22
|
||||
!
|
||||
REAL (WP) :: U,Q_SI,OM,OMP
|
||||
REAL (WP) :: A,NUM,DEN
|
||||
!
|
||||
REAL (WP) :: SQRT
|
||||
!
|
||||
COMPLEX (WP) :: PEEL
|
||||
!
|
||||
Q_SI = TWO * X * KF_SI ! q in SI
|
||||
U = X * Z ! omega / (q * v_F)
|
||||
OM = U * Q_SI * VF_SI ! omega in SI
|
||||
OMP = ENE_P_SI / H_BAR ! omega_p
|
||||
!
|
||||
A = SQR2 * RS**0.75E0_WP * ZION / THREE**1.25E0_WP ! ref. (1) eq. (11)
|
||||
!
|
||||
NUM = A * OMP * OMP * SQRT(OMP * OM) !
|
||||
DEN = OM22 - OM12 !
|
||||
!
|
||||
PEEL = NUM * (ONEC + IC) / DEN ! ref. (1) eq. (12)
|
||||
!
|
||||
END FUNCTION PEEL
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION PE76(X,Z,RS,OM12,OM22)
|
||||
!
|
||||
! This function computes the Perel'-Eliashberg dynamic Nevalinna function
|
||||
!
|
||||
!
|
||||
! References: (1) Yu. V. Arkhipov et al, Phys. Rev. E 76, 026403 (2007)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * OM12 : omega_1^2 \ characteristic squared
|
||||
! * OM22 : omega_2^2 / frequencies
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 18 Nov 2020
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,Z,RS
|
||||
REAL (WP), INTENT(IN) :: OM12,OM22
|
||||
!
|
||||
COMPLEX (WP) :: PE76
|
||||
!
|
||||
PE76 = PEEL(X,Z,RS,OM12,OM22) + STA3(X,OM12,OM22) !
|
||||
!
|
||||
END FUNCTION PE76
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION CPP1(X,Z,RS,OM12,OM22)
|
||||
!
|
||||
! This function computes the Perel'-Eliashberg dynamic Nevalinna function
|
||||
!
|
||||
!
|
||||
! References: (1) Yu. V. Arkhipov et al, Contrib. Plasma Phys. 53,
|
||||
! 375-384 (2013)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * OM12 : omega_1^2 \ characteristic squared
|
||||
! * OM22 : omega_2^2 / frequencies
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 24 Nov 2020
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,Z,RS
|
||||
REAL (WP), INTENT(IN) :: OM12,OM22
|
||||
!
|
||||
COMPLEX (WP) :: CPP1
|
||||
!
|
||||
CPP1 = PEEL(X,Z,RS,OM12,OM22) + STA1(OM12,OM22) !
|
||||
!
|
||||
END FUNCTION CPP1
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION CPP2(X,Z,RS,TAU,OM12,OM22)
|
||||
!
|
||||
! This function computes the Perel'-Eliashberg dynamic Nevalinna function
|
||||
!
|
||||
!
|
||||
! References: (1) Yu. V. Arkhipov et al, Contrib. Plasma Phys. 53,
|
||||
! 375-384 (2013)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * TAU : relaxation time (in SI)
|
||||
! * OM12 : omega_1^2 \ characteristic squared
|
||||
! * OM22 : omega_2^2 / frequencies
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 18 Nov 2020
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,Z,RS,TAU
|
||||
REAL (WP), INTENT(IN) :: OM12,OM22
|
||||
!
|
||||
COMPLEX (WP) :: CPP2
|
||||
!
|
||||
CPP2 = PEEL(X,Z,RS,OM12,OM22) + STA2(OM22,TAU) !
|
||||
!
|
||||
END FUNCTION CPP2
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION CPP3(X,Z,OM22,TAU)
|
||||
!
|
||||
! This function computes a dynamic Nevalinna function
|
||||
!
|
||||
!
|
||||
! References: (1) D. Ballester and I. M. Tkachenko,
|
||||
! Contrib. Plasma Phys. 45, 293-299 (2005)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * OM22 : omega_2^2 characteristic squared frequency
|
||||
! * TAU : relaxation time (in SI)
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 18 Nov 2020
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO
|
||||
USE COMPLEX_NUMBERS, ONLY : IC
|
||||
USE CONSTANTS_P1, ONLY : H_BAR
|
||||
USE FERMI_SI, ONLY : KF_SI,VF_SI
|
||||
USE PLASMON_ENE_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,Z,OM22,TAU
|
||||
!
|
||||
REAL (WP) :: U,Q_SI,OM
|
||||
REAL (WP) :: OMP
|
||||
REAL (WP) :: ZETA,NUM
|
||||
!
|
||||
COMPLEX (WP) :: CPP3
|
||||
COMPLEX (WP) :: DEN
|
||||
!
|
||||
ZETA = 0.27E0_WP !
|
||||
!
|
||||
Q_SI = TWO * X * KF_SI ! q in SI
|
||||
U = X * Z ! omega / (q * v_F)
|
||||
OM = U * Q_SI * VF_SI ! omega in SI
|
||||
!
|
||||
OMP = ENE_P_SI / H_BAR ! omega_p
|
||||
!
|
||||
NUM = - ZETA * OMP * OM22 * TAU !
|
||||
DEN = OM + IC * ZETA * OMP !
|
||||
!
|
||||
CPP3 = NUM / DEN ! ref. (1) eq. (16)
|
||||
!
|
||||
END FUNCTION CPP3
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION CPP4(X,Z,T,OM12,OM22)
|
||||
!
|
||||
! This function computes a dynamic Nevalinna function
|
||||
!
|
||||
!
|
||||
! References: (1) Yu. V. Arkhipov et al, Contrib. Plasma Phys. 58,
|
||||
! 967–975 (2018)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * T : temperature in SI
|
||||
! * OM12 : omega_1^2 \ characteristic squared
|
||||
! * OM22 : omega_2^2 / frequencies
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 18 Nov 2020
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE
|
||||
USE COMPLEX_NUMBERS, ONLY : IC
|
||||
USE CONSTANTS_P1, ONLY : K_B
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
!
|
||||
USE CHEMICAL_POTENTIAL, ONLY : MU_T
|
||||
USE SPECIFIC_INT_9
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,Z,T,OM12,OM22
|
||||
!
|
||||
REAL (WP) :: U
|
||||
REAL (WP) :: ALPHA
|
||||
REAL (WP) :: KBT,D,ETA
|
||||
REAL (WP) :: INTG,XI
|
||||
!
|
||||
COMPLEX (WP) :: CPP4
|
||||
!
|
||||
U = X * Z ! omega / (q * v_F)
|
||||
!
|
||||
ALPHA = 0.99E0_WP !
|
||||
!
|
||||
KBT = K_B * T !
|
||||
!
|
||||
D = EF_SI / KBT ! degeneracy
|
||||
ETA = MU_T('3D',T) / KBT !
|
||||
!
|
||||
! Computing the integral Xi(U)
|
||||
!
|
||||
CALL INT_XIZ(U,D,ETA,INTG) !
|
||||
XI = PI_INV * INTG !
|
||||
!
|
||||
CPP4 = STA1(OM12,OM22) / ( & !
|
||||
ALPHA + IC * (ALPHA - ONE) * XI & ! ref. (1) eq. (23)
|
||||
) !
|
||||
!
|
||||
END FUNCTION CPP4
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION PST1(X,Z,OM12,OM22)
|
||||
!
|
||||
! This function computes a dynamic Nevalinna function
|
||||
!
|
||||
!
|
||||
! References: (1) I. M. Tkachenko, Phys. Sciences and Tech. 5, 16-35 (2016)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * Z : dimensionless factor --> Z = omega / omega_q
|
||||
! * OM12 : omega_1^2 \ characteristic squared
|
||||
! * OM22 : omega_2^2 / frequencies
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 27 Nov 2020
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,TENTH,TTINY
|
||||
USE COMPLEX_NUMBERS, ONLY : IC
|
||||
USE PI_ETC, ONLY : SQR_PI,PI
|
||||
USE CONSTANTS_P1, ONLY : H_BAR
|
||||
USE EXT_FUNCTIONS, ONLY : DAWSON
|
||||
USE MINMAX_VALUES
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,Z,OM12,OM22
|
||||
!
|
||||
REAL (WP) :: U,U2
|
||||
REAL (WP) :: MAX_EXP,MIN_EXP
|
||||
REAL (WP) :: EXPO
|
||||
!
|
||||
REAL (WP) :: EXP
|
||||
!
|
||||
COMPLEX (WP) :: PST1
|
||||
COMPLEX (WP) :: ZF
|
||||
!
|
||||
! Computing the max and min value of the exponent of e^x
|
||||
!
|
||||
CALL MINMAX_EXP(MAX_EXP,MIN_EXP) !
|
||||
!
|
||||
U = X * Z ! omega / (q * v_F)
|
||||
U2 = U * U !
|
||||
!
|
||||
IF(U2 > TENTH * MAX_EXP) THEN !
|
||||
EXPO = TTINY !
|
||||
ELSE !
|
||||
EXPO = EXP(- U2) !
|
||||
END IF !
|
||||
!
|
||||
ZF = IC * SQR_PI * EXPO - TWO * DAWSON(U) !
|
||||
!
|
||||
PST1 = OM22 * ZF / SQRT(TWO * PI * OM12) ! ref. (1) eq. (57a)
|
||||
!
|
||||
END FUNCTION PST1
|
||||
!
|
||||
END MODULE NEVALINNA_FUNCTIONS
|
Binary file not shown.
|
@ -0,0 +1,519 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE PAIR_CORRELATION
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE PAIR_CORRELATION_3D(R,RS,T,GR_TYPE,RH_TYPE,GR)
|
||||
!
|
||||
! This subroutine computes the pair correlation function g(r)
|
||||
! for 3D systems.
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point (in units of a_0)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * GR_TYPE : structure factor approximation (3D)
|
||||
! GR_TYPE = 'CDF' from chain diagram formula of PDF (long distance)
|
||||
! GR_TYPE = 'DHA' Debye-Hückel approximation
|
||||
! GR_TYPE = 'DWA' DeWitt approximation
|
||||
! GR_TYPE = 'FBA' Frieman-Book approximation
|
||||
! GR_TYPE = 'HFA' Hartree-Fock approximation (only exchange)
|
||||
! GR_TYPE = 'HUB' Hubbard approximation
|
||||
! GR_TYPE = 'LLA' Lee-Long approximation
|
||||
! GR_TYPE = 'ORB' Ortiz-Ballone approximation
|
||||
! GR_TYPE = 'PDF' from pair distribution function
|
||||
! GR_TYPE = 'SHA' Shaw approximation
|
||||
! GR_TYPE = 'WIG' Wigner approximation
|
||||
! * RH_TYPE : choice of pair distribution function rho_2(r) (3D)
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * GR : value of the pair correlation function
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 20 Sep 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE
|
||||
USE FERMI_AU, ONLY : KF_AU
|
||||
USE PI_ETC, ONLY : PI2
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
USE PAIR_DISTRIBUTION
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: R,RS,T,GR,R2,HFA,I2
|
||||
REAL (WP) :: N0
|
||||
!
|
||||
CHARACTER (LEN = 3) :: GR_TYPE,RH_TYPE
|
||||
!
|
||||
N0=RS_TO_N0('3D',RS) !
|
||||
!
|
||||
IF(GR_TYPE == 'DHA') THEN !
|
||||
GR = DHA_PCF(R,RS,T) !
|
||||
ELSE IF(GR_TYPE == 'DWA') THEN !
|
||||
GR = DWA_PCF(R,RS,T) !
|
||||
ELSE IF(GR_TYPE == 'FBA') THEN !
|
||||
GR = FBA_PCF(R,RS,T) !
|
||||
ELSE IF(GR_TYPE == 'HFA') THEN !
|
||||
GR = HFA_PCF(R) !
|
||||
ELSE IF(GR_TYPE == 'HUB') THEN !
|
||||
GR = HUB_PCF(R) !
|
||||
ELSE IF(GR_TYPE == 'LLA') THEN !
|
||||
GR = LLA_PCF(R) !
|
||||
ELSE IF(GR_TYPE == 'SHA') THEN !
|
||||
GR = SHA_PCF(R) !
|
||||
ELSE IF(GR_TYPE == 'ORB') THEN !
|
||||
GR = ORB_PCF(R) !
|
||||
ELSE IF(GR_TYPE == 'PDF') THEN !
|
||||
CALL PAIR_DISTRIBUTION_3D(R,RS,T,RH_TYPE,R2) !
|
||||
GR = R2 / (N0 * N0) !
|
||||
ELSE IF(GR_TYPE == 'CDF') THEN !
|
||||
CALL PAIR_DISTRIBUTION_3D(R,RS,T,RH_TYPE,R2) !
|
||||
HFA = HFA_PCF(R) !
|
||||
I2 = (ONE-HFA)*KF_AU*KF_AU*KF_AU/(18.0E0_WP*PI2*PI2) ! ref. (1) RH_TYPE
|
||||
GR = (R2-N0*N0+I2)/(N0*N0) ! eq. (4.1.1)
|
||||
ELSE IF(GR_TYPE == 'WIG') THEN !
|
||||
GR = WIG_PCF(R) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE PAIR_CORRELATION_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION DHA_PCF(R,RS,T)
|
||||
!
|
||||
! This function computes Debye-Hückel pair correlation function g(r)
|
||||
! for 3D systems
|
||||
!
|
||||
! References: (1) H. E. DeWitt, Phys. Rev. 140, A466-A470 (1965)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point in unit of a_0
|
||||
! * T : temperature in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 4 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE
|
||||
USE CONSTANTS_P1, ONLY : BOHR,E,COULOMB,K_B
|
||||
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: R,RS,T
|
||||
REAL (WP) :: DHA_PCF
|
||||
REAL (WP) :: BETA,KD_AU,X,US
|
||||
REAL (WP) :: KD_SI
|
||||
!
|
||||
REAL (WP) :: EXP
|
||||
!
|
||||
! Computing the Debye momentum
|
||||
!
|
||||
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||||
!
|
||||
BETA = ONE / K_B * T !
|
||||
KD_AU = KD_SI * BOHR !
|
||||
X = R * KD_AU !
|
||||
US = COULOMB * E * E * EXP(- X) / R !
|
||||
!
|
||||
DHA_PCF = ONE - BETA * US ! ref. (1) eq. (1)
|
||||
!
|
||||
END FUNCTION DHA_PCF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION DWA_PCF(R,RS,T)
|
||||
!
|
||||
! This function computes DeWitt pair correlation function g(r)
|
||||
! for 3D systems
|
||||
!
|
||||
! References: (1) H. E. DeWitt, Phys. Rev. 140, A466-A470 (1965)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point in unit of a_0
|
||||
! * T : temperature in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 13 Oct 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,EIGHT, &
|
||||
HALF,THIRD
|
||||
USE CONSTANTS_P1, ONLY : BOHR,E,COULOMB,K_B
|
||||
USE EULER_CONST, ONLY : EUMAS
|
||||
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||||
USE EXT_FUNCTIONS, ONLY : DEI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: R,RS,T
|
||||
REAL (WP) :: DWA_PCF
|
||||
REAL (WP) :: BETA,KD_AU,X,US
|
||||
REAL (WP) :: G2B,G22B,G22C,GAMMA,GAM
|
||||
REAL (WP) :: KD_SI
|
||||
!
|
||||
REAL (WP) :: EXP,SINH,LOG
|
||||
!
|
||||
! Computing the Debye momentum
|
||||
!
|
||||
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||||
!
|
||||
BETA = ONE / K_B * T !
|
||||
KD_AU = KD_SI * BOHR !
|
||||
X = R * KD_AU !
|
||||
US = COULOMB * E * E * DEXP(- X) / R !
|
||||
GAMMA = BETA * COULOMB * E * E * KD_SI !
|
||||
GAM = EUMAS
|
||||
!
|
||||
IF(X < ONE) THEN !
|
||||
G22B = - GAMMA * GAMMA * SINH(X) * LOG(THIRD / (GAM*X)) / X ! --> eq. (23)
|
||||
G22C = HALF * GAMMA * GAMMA * (HALF * THIRD + & ! --> eq. (27)
|
||||
X / (EIGHT * LOG(ONE / (THREE * GAM * X)))) !
|
||||
ELSE
|
||||
G22B = - HALF * GAMMA * GAMMA * (LOG(THREE) * EXP(-X) / X & ! --> eq. (24)
|
||||
- TWO * THIRD* EXP(- TWO * X) / (X * X)) !
|
||||
G22C = HALF * GAMMA * GAMMA / (FOUR * X) * ( & !
|
||||
(ONE + X) * EXP(- X) * LOG(THREE) - & !
|
||||
FOUR * THIRD * (EXP(- X) - EXP(- TWO * X)) + & ! --> eq. (26)
|
||||
(ONE + X) * EXP(- X) * DEI(- X) - & !
|
||||
(ONE - X) * EXP(X) * DEI(- THREE * X) & !
|
||||
) !
|
||||
ENDIF !
|
||||
!
|
||||
G2B = G22B !
|
||||
!
|
||||
DWA_PCF = EXP(- BETA * US) * (ONE + G2B + G22C) ! ref. (1) eq. (29)
|
||||
!
|
||||
END FUNCTION DWA_PCF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION FBA_PCF(R,RS,T)
|
||||
!
|
||||
! This function computes Frieman-Book pair correlation function g(r)
|
||||
! for 3D systems
|
||||
!
|
||||
! References: (1) H. E. DeWitt, Phys. Rev. 140, A466-A470 (1965)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point in unit of a_0
|
||||
! * T : temperature in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 4 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE
|
||||
USE CONSTANTS_P1, ONLY : BOHR,E,COULOMB,K_B
|
||||
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: R,RS,T
|
||||
REAL (WP) :: FBA_PCF
|
||||
REAL (WP) :: BETA,KD_AU,X,US
|
||||
REAL (WP) :: KD_SI
|
||||
!
|
||||
REAL (WP) :: EXP
|
||||
!
|
||||
! Computing the Debye momentum
|
||||
!
|
||||
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||||
!
|
||||
BETA = ONE / K_B * T !
|
||||
KD_AU = KD_SI * BOHR !
|
||||
X = R * KD_AU !
|
||||
US = COULOMB * E * E * EXP(- X) / R !
|
||||
!
|
||||
FBA_PCF = EXP(- BETA * US) ! ref. (1) eq. (4)
|
||||
!
|
||||
END FUNCTION FBA_PCF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION HFA_PCF(R)
|
||||
!
|
||||
! This function computes Hartree-Fock pair correlation function g(r)
|
||||
! for 3D systems
|
||||
!
|
||||
! References: (1) F. Brouers, Phys. Stat. Sol. 19, 867-871 (1967)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point in unit of a_0
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 4 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE
|
||||
USE FERMI_AU, ONLY : KF_AU
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: R
|
||||
REAL (WP) :: HFA_PCF
|
||||
REAL (WP) :: KR1,KR3
|
||||
!
|
||||
REAL (WP) :: SIN,COS
|
||||
!
|
||||
KR1 = KF_AU * R !
|
||||
KR3 = KR1 * KR1 * KR1 !
|
||||
!
|
||||
HFA_PCF = ONE - 4.5E0_WP * ( (SIN(KR1) - KR1 * COS(KR1)) / & !
|
||||
KR3 )**2 ! ref. (1) eq. (5)
|
||||
!
|
||||
END FUNCTION HFA_PCF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION HUB_PCF(R)
|
||||
!
|
||||
! This function computes Shaw pair correlation function g(r)
|
||||
! for 3D systems
|
||||
!
|
||||
! References: (1) R. W. Shaw, J. Phys. C: Solid State Phys. 3,
|
||||
! 1140-1158 (1970)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point in unit of a_0
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 12 Nov 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,HALF
|
||||
USE PI_ETC, ONLY : PI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: R
|
||||
REAL (WP) :: HUB_PCF
|
||||
REAL (WP) :: AL2,AL
|
||||
!
|
||||
REAL (WP) :: SQRT,EXP
|
||||
!
|
||||
AL2 = FOUR / SQRT(THREE * PI) !
|
||||
AL = SQRT(AL2) !
|
||||
!
|
||||
HUB_PCF = ONE - HALF * (ONE + AL * R) * EXP(- AL * R) ! ref. (1) eq. (5.2)
|
||||
!
|
||||
END FUNCTION HUB_PCF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION LLA_PCF(R)
|
||||
!
|
||||
! This function computes Lee-Long pair correlation function g(r)
|
||||
! for 3D systems
|
||||
!
|
||||
! References: (1) H. Lee and M. Long, Phys. Rev. B 52, 189-195 (1995)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point in unit of a_0
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 12 Nov 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,THREE,HALF
|
||||
USE FERMI_AU, ONLY : KF_AU
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: R
|
||||
REAL (WP) :: LLA_PCF
|
||||
REAL (WP) :: X,X2
|
||||
REAL (WP) :: J1
|
||||
!
|
||||
REAL (WP) :: SQRT,SIN,COS
|
||||
!
|
||||
X = KF_AU * R !
|
||||
X2 = X * X !
|
||||
!
|
||||
! Computation of the Bessel function:
|
||||
!
|
||||
! J_{3/2}(x) = sqrt(2x/pi} j_1(x)
|
||||
!
|
||||
J1 = SIN(X) / X2 - COS(X) / X ! j_1(x)
|
||||
!
|
||||
LLA_PCF = ONE - HALF * (THREE * J1 / X)**2 ! ref. 1 eq. (11)
|
||||
!
|
||||
END FUNCTION LLA_PCF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION ORB_PCF(R)
|
||||
!
|
||||
! This function computes Ortiz-Ballone parametrization of the
|
||||
! pair correlation function g(r) for 3D systems
|
||||
!
|
||||
! References: (1) G. Ortiz and P. Ballone, Phys. Rev. B 50,
|
||||
! 1391-1405 (1994)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point in unit of a_0
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 20 Sep 2020
|
||||
!
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : RS
|
||||
USE REAL_NUMBERS, ONLY : ONE
|
||||
USE INTERPOLATION, ONLY : LAG_4P_INTERP
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: R
|
||||
REAL (WP) :: ORB_PCF
|
||||
REAL (WP) :: U,U2,U3,U4,U5
|
||||
REAL (WP) :: AA,BB,CC,DD,EE,FF
|
||||
REAL (WP) :: NNU
|
||||
REAL (WP) :: A(4),B(4),C(4),D(4),E(4),F(4)
|
||||
REAL (WP) :: NU(4),X(4)
|
||||
!
|
||||
REAL (WP) :: EXP
|
||||
!
|
||||
DATA X / 1.0000E0_WP, 3.0000E0_WP, 5.0000E0_WP, 10.0000E0_WP / !
|
||||
DATA A / -1.0000E0_WP, -1.0000E0_WP, -1.0000E0_WP, -1.0000E0_WP / !
|
||||
DATA B / 0.0000E0_WP, 0.0000E0_WP, 0.0000E0_WP, 0.0000E0_WP / ! ref. (1)
|
||||
DATA C / 1.0567E0_WP, 0.7512E0_WP, 0.6293E0_WP, 0.5442E0_WP / ! table IX:
|
||||
DATA D / -0.8804E0_WP, -0.3827E0_WP, -0.2161E0_WP, -0.1142E0_WP / !
|
||||
DATA E / 0.3029E0_WP, 0.0711E0_WP, 0.0064E0_WP, -0.0313E0_WP / ! case ++
|
||||
DATA F / -0.0383E0_WP, -0.0047E0_WP, 0.0026E0_WP, 0.0068E0_WP / !
|
||||
DATA NU / 0.3808E0_WP, 0.2177E0_WP, 0.1587E0_WP, 0.1711E0_WP / !
|
||||
!
|
||||
U = R / RS !
|
||||
U2 = U * U !
|
||||
U3 = U2 * U !
|
||||
U4 = U3 * U !
|
||||
U5 = U4 * U !
|
||||
!
|
||||
! Calculation the coefficients for the excat RS
|
||||
!
|
||||
AA = LAG_4P_INTERP(X,A,RS) !
|
||||
BB = LAG_4P_INTERP(X,B,RS) !
|
||||
CC = LAG_4P_INTERP(X,C,RS) !
|
||||
DD = LAG_4P_INTERP(X,D,RS) !
|
||||
EE = LAG_4P_INTERP(X,E,RS) !
|
||||
FF = LAG_4P_INTERP(X,F,RS) !
|
||||
NNU = LAG_4P_INTERP(X,NU,RS) !
|
||||
!
|
||||
ORB_PCF = ONE + ( AA + BB * U + CC * U2 + DD * U3 + & ! Ref. (1) eq. 36)
|
||||
EE * U4 + FF * U5 ) * EXP(- NNU * U2) !
|
||||
!
|
||||
END FUNCTION ORB_PCF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION SHA_PCF(R)
|
||||
!
|
||||
! This function computes Shaw pair correlation function g(r)
|
||||
! for 3D systems
|
||||
!
|
||||
! References: (1) R. W. Shaw, J. Phys. C: Solid State Phys. 3,
|
||||
! 1140-1158 (1970)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point in unit of a_0
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 12 Nov 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,NINE,THIRD
|
||||
USE PI_ETC, ONLY : PI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: R
|
||||
REAL (WP) :: SHA_PCF
|
||||
REAL (WP) :: AL2,R2
|
||||
!
|
||||
REAL (WP) :: EXP
|
||||
!
|
||||
R2 = R * R !
|
||||
!
|
||||
AL2 = ONE / (NINE * PI)**THIRD !
|
||||
!
|
||||
SHA_PCF = ONE - EXP(- AL2 * R2) ! ref. (1) eq. (5.5)
|
||||
!
|
||||
END FUNCTION SHA_PCF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION WIG_PCF(R)
|
||||
!
|
||||
! This function computes Wigner pair correlation function g(r)
|
||||
! for 3D systems
|
||||
!
|
||||
! References: (1) E. Wigner, Phys. Rev. 46, 1002-1011 (1934)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point in unit of a_0
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 20 Sep 2020
|
||||
!
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : RS
|
||||
USE REAL_NUMBERS, ONLY : ONE
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: R
|
||||
REAL (WP) :: WIG_PCF
|
||||
REAL (WP) :: DD,ROD
|
||||
!
|
||||
REAL (WP) :: EXP
|
||||
!
|
||||
DD = ALFA('3D') * RS ! ref. (1) eq. (6)
|
||||
!
|
||||
ROD = R / DD !
|
||||
!
|
||||
WIG_PCF = ONE - EXP(-1.6E0_WP * ROD) * & !
|
||||
( ONE + 1.6E0_WP * ROD + 1.2E0_WP * ROD * ROD ) ! ref. (1) eq. (8)
|
||||
!
|
||||
END FUNCTION WIG_PCF
|
||||
!
|
||||
END MODULE PAIR_CORRELATION
|
|
@ -0,0 +1,392 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE PAIR_DISTRIBUTION
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE PAIR_DISTRIBUTION_3D(R,RS,T,RH_TYPE,R2)
|
||||
!
|
||||
! This subroutine computes the pair distribution function rho2(r)
|
||||
! for 3D systems.
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point (in units of a_0)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * RH_TYPE : pair distribution function approximation (3D)
|
||||
! RH_TYPE = 'CDI' chain diagram improved
|
||||
! RH_TYPE = 'CEG' classical electron gas
|
||||
! RH_TYPE = 'DEB' Debye electron gas
|
||||
! RH_TYPE = 'FUA' correct to order 2 in epsilon
|
||||
! RH_TYPE = 'SDC' short-distance correlations
|
||||
! RH_TYPE = 'WDA' watermelon diagrams summed
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * R2 : value of the pair correlation function
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 4 Jun 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: RH_TYPE
|
||||
!
|
||||
REAL (WP) :: R,RS,T,R2
|
||||
!
|
||||
IF(RH_TYPE == 'CDI') THEN !
|
||||
R2=CDI_PDF(R,RS,T) !
|
||||
ELSE IF(RH_TYPE == 'CEG') THEN !
|
||||
R2=CEG_PDF(R,RS,T) !
|
||||
ELSE IF(RH_TYPE == 'DEB') THEN !
|
||||
R2=DEB_PDF(R,RS,T) !
|
||||
ELSE IF(RH_TYPE == 'FUA') THEN !
|
||||
R2=FUA_PDF(R,RS,T) !
|
||||
ELSE IF(RH_TYPE == 'SDC') THEN !
|
||||
R2=SDC_PDF(R,RS,T) !
|
||||
ELSE IF(RH_TYPE == 'WDA') THEN !
|
||||
R2=WDA_PDF(R,RS,T) !
|
||||
ENDIF !
|
||||
!
|
||||
END SUBROUTINE PAIR_DISTRIBUTION_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION CDI_PDF(R,RS,T)
|
||||
!
|
||||
! This function computes the electron gas pair distribution function
|
||||
! rho2(r) for 3D systems, with a chain diagram improved
|
||||
!
|
||||
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
||||
! Springer Series in Solid-State Sciences 96,
|
||||
! (Springer, 1998) p. 33
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point in unit of a_0
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 2 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO
|
||||
USE CONSTANTS_P1, ONLY : BOHR,E,K_B
|
||||
USE SQUARE_ROOTS, ONLY : SQR2
|
||||
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
USE EXT_FUNCTIONS, ONLY : ERFC ! Error function
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: R,RS,T
|
||||
REAL (WP) :: CDI_PDF
|
||||
REAL (WP) :: X,EPS,ALP,BETA
|
||||
REAL (WP) :: N0,KD_SI
|
||||
!
|
||||
REAL (WP) :: DSQRT,DEXP
|
||||
!
|
||||
N0=RS_TO_N0('3D',RS) !
|
||||
!
|
||||
! Computing the Debye screening vector
|
||||
!
|
||||
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||||
!
|
||||
X=KD_SI*R*BOHR !
|
||||
EPS=E*E*KD_SI/(K_B*T) ! ref. (1) eq. (1.1.2)
|
||||
BETA=ONE/(K_B*T) !
|
||||
ALP=KD_SI*DSQRT(BETA) !
|
||||
!
|
||||
CDI_PDF=N0*N0*( ONE -EPS*( & !
|
||||
DEXP(-X)/X - & !
|
||||
DEXP(-X/(TWO*ALP))/X + & ! ref. (1) eq. (3.3.14)
|
||||
SQR2*ERFC(X/(SQR2*ALP))/ALP & !
|
||||
) & !
|
||||
) !
|
||||
!
|
||||
END FUNCTION CDI_PDF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION CEG_PDF(R,RS,T)
|
||||
!
|
||||
! This function computes very dilute classical electron gas
|
||||
! pair distribution function rho2(r) for 3D systems
|
||||
!
|
||||
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
||||
! Springer Series in Solid-State Sciences 96,
|
||||
! (Springer, 1998) p. 33
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point in unit of a_0
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 30 Jul 2020
|
||||
!
|
||||
!
|
||||
USE CONSTANTS_P1, ONLY : BOHR,E,K_B
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: R,RS,T
|
||||
REAL (WP) :: CEG_PDF
|
||||
REAL (WP) :: N0
|
||||
!
|
||||
REAL (WP) :: DEXP
|
||||
!
|
||||
N0=RS_TO_N0('3D',RS) !
|
||||
!
|
||||
CEG_PDF=N0*N0*DEXP(-E*E/(R*BOHR*K_B*T)) ! ref. (1) eq. (3.1.1)
|
||||
!
|
||||
END FUNCTION CEG_PDF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION DEB_PDF(R,RS,T)
|
||||
!
|
||||
! This function computes Debye electron gas
|
||||
! pair distribution function rho2(r) for 3D systems
|
||||
!
|
||||
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
||||
! Springer Series in Solid-State Sciences 96,
|
||||
! (Springer, 1998) p. 33
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point in unit of a_0
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 4 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : FOUR
|
||||
USE CONSTANTS_P1, ONLY : BOHR
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: R,RS,T
|
||||
REAL (WP) :: DEB_PDF
|
||||
REAL (WP) :: RA
|
||||
REAL (WP) :: N0,KD_SI
|
||||
!
|
||||
REAL (WP) :: DEXP
|
||||
!
|
||||
N0=RS_TO_N0('3D',RS) !
|
||||
!
|
||||
! Computing the Debye screening vector
|
||||
!
|
||||
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||||
!
|
||||
RA=R*BOHR ! r in SI
|
||||
!
|
||||
DEB_PDF=N0*N0 - N0*KD_SI*KD_SI*DEXP(-KD_SI*RA)/(FOUR*PI*RA) ! ref. (1) eq. (3.1.4)
|
||||
!
|
||||
END FUNCTION DEB_PDF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION FUA_PDF(R,RS,T)
|
||||
!
|
||||
! This function computes the electron gas pair distribution function
|
||||
! rho2(r) for 3D systems, correct to order 2 in epsilon, the plasma
|
||||
! parameter
|
||||
!
|
||||
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
||||
!C (Springer, 1998) p. 33
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point in unit of a_0
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 21 Jul 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,THREE,HALF,THIRD,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : BOHR,E,K_B
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||||
USE EXT_FUNCTIONS, ONLY : DEI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: R,RS,T
|
||||
REAL (WP) :: FUA_PDF
|
||||
REAL (WP) :: ARG_E
|
||||
REAL (WP) :: X,EPS,TX
|
||||
REAL (WP) :: N0,KD_SI
|
||||
!
|
||||
REAL (WP) :: DEXP,DLOG
|
||||
!
|
||||
N0=RS_TO_N0('3D',RS) !
|
||||
!
|
||||
! Computing the Debye screening vector
|
||||
!
|
||||
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||||
!
|
||||
X=KD_SI*R*BOHR !
|
||||
EPS=E*E*KD_SI/(K_B*T) ! ref. (1) eq. (1.1.2)
|
||||
TX=THREE*X !
|
||||
!
|
||||
ARG_E=EPS*DEXP(-X)/X + HALF*EPS*EPS/X * ( & !
|
||||
DEXP(-X)*( -THREE*FOURTH*DLOG(THREE) + & !
|
||||
X*FOURTH*DLOG(THREE) - THIRD ) + & !
|
||||
FOURTH*DEXP(X)*(X*DEI(-TX)) + & ! ref. (1) eq. (3.1.13)
|
||||
FOURTH*DEXP(-X)*(X*DEI(-X)) + & !
|
||||
THREE*FOURTH*DEXP(X)*DEI(-TX)- & !
|
||||
THREE*FOURTH*DEXP(-X)*DEI(-X)+ & !
|
||||
THIRD*DEXP(-TWO*X) ) !
|
||||
!
|
||||
FUA_PDF=N0*N0*DEXP(-ARG_E) ! ref. (1) eq. (3.1.12)
|
||||
!
|
||||
END FUNCTION FUA_PDF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION SDC_PDF(R,RS,T)
|
||||
!
|
||||
! This function computes the electron gas pair distribution function
|
||||
! rho2(r) for 3D systems, for short-distance correlations
|
||||
!
|
||||
!
|
||||
! --> Warning: valid if T >> k_B * (a_0 / 2)^2
|
||||
!
|
||||
!
|
||||
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
||||
! Springer Series in Solid-State Sciences 96,
|
||||
! (Springer, 1998) p. 33
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point (in units of a_0)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 4 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,HALF,THIRD
|
||||
USE CONSTANTS_P1, ONLY : BOHR,K_B
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: R,RS,T
|
||||
REAL (WP) :: R2,R3
|
||||
REAL (WP) :: SDC_PDF
|
||||
REAL (WP) :: BETA,DELTA
|
||||
REAL (WP) :: N0,KD_SI
|
||||
!
|
||||
REAL (WP) :: DSQRT
|
||||
!
|
||||
R2=R*R*BOHR*BOHR ! r^2 in SI
|
||||
R3=R2*R*BOHR ! r^3 in SI
|
||||
!
|
||||
N0=RS_TO_N0('3D',RS) !
|
||||
!
|
||||
! Computing the Debye screening vector
|
||||
!
|
||||
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||||
!
|
||||
BETA=ONE/(K_B*T) !
|
||||
DELTA=TWO*DSQRT(BETA)/BOHR ! ref. (1) eq. (3.3.7)
|
||||
!
|
||||
SDC_PDF=HALF*N0*N0*( & !
|
||||
ONE - DSQRT(HALF*PI)*DELTA + & !
|
||||
HALF*R + HALF*R2/BETA - & !
|
||||
TWO*THIRD*DSQRT(HALF*PI)*R2 / ( & ! ref. (1) eq. (3.3.10)
|
||||
BOHR*DSQRT(BETA) ) - & !
|
||||
HALF*R3/(BOHR*BETA) & !
|
||||
) !
|
||||
!
|
||||
END FUNCTION SDC_PDF
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION WDA_PDF(R,RS,T)
|
||||
!
|
||||
! This function computes watermelon diagrams-summed electron gas
|
||||
! pair distribution function rho2(r) for 3D systems
|
||||
!
|
||||
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
||||
! Springer Series in Solid-State Sciences 96,
|
||||
! (Springer, 1998) p. 33
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * R : grid point in unit of a_0
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 4 Jun 2020
|
||||
!
|
||||
!
|
||||
USE CONSTANTS_P1, ONLY : BOHR,E,K_B
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: R,RS,T
|
||||
REAL (WP) :: WDA_PDF
|
||||
REAL (WP) :: PHI_D,RA
|
||||
REAL (WP) :: N0,KD_SI
|
||||
!
|
||||
REAL (WP) :: DSQRT
|
||||
!
|
||||
N0=RS_TO_N0('3D',RS) !
|
||||
!
|
||||
! Computing the Debye screening vector
|
||||
!
|
||||
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||||
!
|
||||
RA=R*BOHR ! r in SI
|
||||
!
|
||||
PHI_D=E*E*DEXP(-KD_SI*RA)/RA ! ref. (1) eq. (3.1.7)
|
||||
!
|
||||
WDA_PDF=N0*N0*DEXP(-PHI_D/(K_B*T)) ! ref. (1) eq. (3.1.5)
|
||||
!
|
||||
END FUNCTION WDA_PDF
|
||||
!
|
||||
END MODULE PAIR_DISTRIBUTION
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE FERMI_SI
|
||||
!
|
||||
! This module defines the Fermi level physical quantities
|
||||
!
|
||||
!
|
||||
! --> SI version <--
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: KF_SI,EF_SI,VF_SI,TF_SI,NF_SI
|
||||
!
|
||||
END MODULE FERMI_SI
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE FERMI_SI_M
|
||||
!
|
||||
! This module defines the Fermi level physical quantities
|
||||
! in the presence of an external magnetic field
|
||||
!
|
||||
!
|
||||
! --> SI version <--
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: KF_SI_M,EF_SI_M,VF_SI_M,TF_SI_M
|
||||
!
|
||||
END MODULE FERMI_SI_M
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE FERMI_AU
|
||||
!
|
||||
! This module defines the Fermi level physical quantities
|
||||
!
|
||||
!
|
||||
! --> AU version <--
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: KF_AU,EF_AU,VF_AU
|
||||
!
|
||||
END MODULE FERMI_AU
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE FERMI_AU_M
|
||||
!
|
||||
! This module defines the Fermi level physical quantities
|
||||
! in the presence of an external magnetic field
|
||||
!
|
||||
!
|
||||
! --> AU version <--
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: KF_AU_M,EF_AU_M,VF_AU_M
|
||||
!
|
||||
END MODULE FERMI_AU_M
|
|
@ -0,0 +1,345 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
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
|
||||
|
|
@ -0,0 +1,315 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE CALC_ENERGIES
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE ENERGIES_3D(X,EC_TYPE,RS,T,I_SCREEN,K_SC, &
|
||||
E_0,E_X,E_X_HF,E_C,E_XC,E_HF, &
|
||||
E_GS,E_KIN,E_POT)
|
||||
!
|
||||
! This subroutine computes the different energies (per electron)
|
||||
! involved in the 3D system --> 3D
|
||||
!
|
||||
! References: (1) G. Giuliani and G. Vignale, "Quantum Theory of the
|
||||
! Electron Liquid", Cambridge Uiversity Press (2005)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * EC_TYPE : type of correlation energy functional
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
! * I_SCREEN : switch for screened (=1) or unscreened (=0) Coulomb
|
||||
! * K_SC : screening momentum (in SI)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * E_0 : energy of non-interacting electron in SI
|
||||
! * E_X : exchange energy (1st order) in SI
|
||||
! * E_X_HF : exchange energy (Hartree-Fock) in SI
|
||||
! * E_C : correlation energy in SI
|
||||
! * E_XC : exchange and correlation energy in SI
|
||||
! * E_HF : Hartree-Fock energy in SI
|
||||
! * E_GS : energy of the ground state in SI
|
||||
! * E_KIN : kinetic energy in SI
|
||||
! * E_POT : potential energy in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
|
||||
! Last modified : 12 Nov 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,THREE,FOUR, &
|
||||
HALF,THIRD,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : BOHR,E,EPS_0
|
||||
USE CONSTANTS_P2, ONLY : HARTREE
|
||||
USE FERMI_SI, ONLY : EF_SI,KF_SI
|
||||
USE PI_ETC, ONLY : PI,PI_INV
|
||||
USE CORRELATION_ENERGIES
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 6) :: EC_TYPE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,RS,T
|
||||
REAL (WP), INTENT(OUT) :: E_0,E_X,E_X_HF,E_C,E_XC
|
||||
REAL (WP), INTENT(OUT) :: E_HF,E_GS,E_KIN,E_POT
|
||||
REAL (WP) :: Y
|
||||
REAL (WP) :: D_EC_1,D_EC_2,D_EX_1
|
||||
REAL (WP) :: K_SC,R1,R2,FK
|
||||
!
|
||||
REAL (WP) :: LOG,ABS,ATAN
|
||||
!
|
||||
INTEGER :: I_SCREEN
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
!
|
||||
IF(I_SCREEN == 1) THEN !
|
||||
R1 = KF_SI / K_SC !
|
||||
R2 = ONE / R1 !
|
||||
END IF !
|
||||
!
|
||||
! Computing the Hartree-Fock function FK
|
||||
!
|
||||
IF(Y == ONE) THEN !
|
||||
FK = HALF !
|
||||
ELSE IF(Y == ZERO) THEN !
|
||||
FK = ONE !
|
||||
ELSE !
|
||||
FK = HALF + FOURTH * (ONE - Y * Y) * & !
|
||||
LOG(ABS((ONE + Y) / (ONE - Y))) / Y ! ref. (1) eq. (2.52)
|
||||
END IF !
|
||||
!
|
||||
! Computing the correlation energy and its derivatives
|
||||
!
|
||||
CALL DERIVE_EC_3D(EC_TYPE,1,5,RS,T,D_EC_1,D_EC_2) !
|
||||
!
|
||||
! Changing to SI
|
||||
!
|
||||
D_EC_1 = D_EC_1 * HALF * HARTREE !
|
||||
D_EC_2 = D_EC_2 * HALF * HARTREE !
|
||||
!
|
||||
E_0 = 0.6E0_WP *EF_SI ! ref. (1) eq. (1.83)
|
||||
E_X = - 0.75E0_WP * E * E * PI_INV * KF_SI ! ref. (1) eq. (1.94)
|
||||
!
|
||||
IF(I_SCREEN == 1) THEN !
|
||||
E_X = E_X * ( FOUR + R2 * R2 * LOG(ONE + FOUR * R1 * R1) & !
|
||||
- FOUR * R2 * ATAN(TWO * R1) & ! ref. (1) ex. (1.12)
|
||||
) ! page 66
|
||||
END IF !
|
||||
!
|
||||
E_X_HF = - HALF * E * E * PI_INV * PI_INV * KF_SI * FK / EPS_0! ref. (1) eq. (2.51)
|
||||
E_C = EC_3D(EC_TYPE,1,RS,T) * HALF * HARTREE !
|
||||
!
|
||||
E_XC = E_X + E_C !
|
||||
E_HF = E_0 + E_X_HF ! ref. (1) eq. (2.49)
|
||||
E_GS = E_0 + E_XC !
|
||||
!
|
||||
! Computing the derivative of the exchange energy
|
||||
!
|
||||
D_EX_1 = THREE * (E * E / (FOUR * PI * BOHR)) / (RS * RS) !
|
||||
!
|
||||
E_KIN = E_0 - E_XC - RS * (D_EX_1 + D_EC_1) ! ref. (1) eq. (1.57)
|
||||
E_POT = TWO * E_XC + RS * (D_EX_1 + D_EC_1) ! ref. (1) eq. (1.56)
|
||||
!
|
||||
END SUBROUTINE ENERGIES_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE ENERGIES_2D(X,EC_TYPE,RS,T,E_0,E_X,E_X_HF,E_C, &
|
||||
E_XC,E_HF,E_GS,E_KIN,E_POT)
|
||||
!
|
||||
! This subroutine computes the different energies (per electron)
|
||||
! involved in the 2D system --> 2D
|
||||
!
|
||||
! References: (1) G. Giuliani and G. Vignale, "Quantum Theory of the
|
||||
! Electron Liquid", Cambridge Uiversity Press (2005)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * X : dimensionless factor --> X = q / (2 * k_F)
|
||||
! * EC_TYPE : type of correlation energy functional
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * E_0 : energy of non-interacting electron in SI
|
||||
! * E_X : exchange energy (1st order) in SI
|
||||
! * E_X_HF : exchange energy (Hartree-Fock) in SI
|
||||
! * E_C : correlation energy in SI
|
||||
! * E_XC : exchange and correlation energy in SI
|
||||
! * E_HF : Hartree-Fock energy in SI
|
||||
! * E_GS : energy of the ground state in SI
|
||||
! * E_KIN : kinetic energy in SI
|
||||
! * E_POT : potential energy in SI
|
||||
!
|
||||
!
|
||||
! Note: for the Hartree-Fock exchange energy, we make use
|
||||
! of the fact that Gradshteyn-Ryzhik complete elliptic integrals
|
||||
! K(k) and E(k) are related to Carlson's elliptic integrals through
|
||||
!
|
||||
! K(k) = RF(0,1-K^2,1)
|
||||
! E(K) = RF(0,1-K^2,1) - 1/3 k^2 RD(0,1-K^2,1)
|
||||
!
|
||||
! as explained by W. H. Press and S. A. Tseukolsky,
|
||||
! Comp. in Phys. Jan-Fev 1990, pp. 92-96
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,FOUR,EIGHT, &
|
||||
HALF,THIRD,TTINY
|
||||
USE CONSTANTS_P1, ONLY : BOHR,E,EPS_0
|
||||
USE CONSTANTS_P2, ONLY : HARTREE
|
||||
USE FERMI_SI, ONLY : EF_SI,KF_SI
|
||||
USE PI_ETC, ONLY : PI,PI_INV
|
||||
USE EXT_FUNCTIONS, ONLY : RF,RD ! Carlson's elliptic integrals
|
||||
USE CORRELATION_ENERGIES
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 6) :: EC_TYPE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: X,RS,T
|
||||
REAL (WP), INTENT(OUT) :: E_0,E_X,E_X_HF,E_C,E_XC
|
||||
REAL (WP), INTENT(OUT) :: E_HF,E_GS,E_KIN,E_POT
|
||||
REAL (WP) :: Y,Y2
|
||||
REAL (WP) :: D_EC_1,D_EC_2,D_EX_1,FK,F1
|
||||
REAL (WP) :: O,O2
|
||||
!
|
||||
!
|
||||
Y = X + X ! q / k_F
|
||||
Y2 = Y * Y !
|
||||
IF(Y == ZERO) THEN !
|
||||
Y = TTINY !
|
||||
END IF !
|
||||
O = ONE / Y !
|
||||
O2 = O * O !
|
||||
!
|
||||
! Computing the Hartree-Fock function FK
|
||||
!
|
||||
IF(Y <= ONE) THEN !
|
||||
FK = RF(ZERO,ONE-Y2,ONE) - THIRD * Y2 * RD(ZERO,ONE-Y2,ONE) ! ref. (1) eq. (2.54)
|
||||
ELSE !
|
||||
F1 = RF(ZERO,ONE-O2,ONE) - THIRD * O2 * RD(ZERO,ONE-O2,ONE) !
|
||||
FK = Y * (F1 - (ONE - O2) * RF(ZERO,ONE-O2,ONE)) ! ref. (1) eq. (2.54)
|
||||
END IF !
|
||||
!
|
||||
! Computing the correlation energy and its derivatives
|
||||
!
|
||||
CALL DERIVE_EC_2D(EC_TYPE,5,RS,T,D_EC_1,D_EC_2) !
|
||||
!
|
||||
! Changing to SI
|
||||
!
|
||||
D_EC_1 = D_EC_1 * HALF * HARTREE !
|
||||
D_EC_2 = D_EC_2 * HALF * HARTREE !
|
||||
!
|
||||
E_0 = HALF * EF_SI ! ref. (1) eq. (1.83)
|
||||
E_X = - FOUR * THIRD * E * E * PI_INV * KF_SI ! ref. (1) eq. (1.94)
|
||||
E_X_HF = - HALF * E * E * PI_INV * PI_INV * KF_SI*FK / EPS_0 ! ref. (1) eq. (2.53)
|
||||
E_C = EC_2D(EC_TYPE,RS,T) * HALF * HARTREE !
|
||||
!
|
||||
E_XC = E_X + E_C !
|
||||
E_HF = E_0 + E_X_HF ! ref. (1) eq. (2.49)
|
||||
E_GS = E_0 + E_XC !
|
||||
!
|
||||
! Computing the derivative of the exchange energy
|
||||
!
|
||||
D_EX_1 = - EIGHT * THIRD * (E * E / (PI * BOHR)) !
|
||||
!
|
||||
E_KIN = E_0 - E_XC - RS * (D_EX_1 + D_EC_1) ! ref. (1) eq. (1.57)
|
||||
E_POT = TWO * E_XC + RS * (D_EX_1 + D_EC_1) ! ref. (1) eq. (1.56)
|
||||
!
|
||||
END SUBROUTINE ENERGIES_2D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE ENERGIES_1D(EC_TYPE,FF,RS,T,E_0,E_X,E_C,E_XC,E_HF, &
|
||||
E_GS,E_KIN,E_POT)
|
||||
!
|
||||
! This subroutine computes the different energies (per electron)
|
||||
! involved in the 1D system --> 1D
|
||||
!
|
||||
! References: (1) G. Giuliani and G. Vignale, "Quantum Theory of the
|
||||
! Electron Liquid", Cambridge Uiversity Press (2005)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * EC_TYPE : type of correlation energy functional
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
! * FF : form factor
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * E_0 : energy of non-interacting electron in SI
|
||||
! * E_X : exchange energy in SI
|
||||
! * E_C : correlation energy in SI
|
||||
! * E_XC : exchange and correlation energy in SI
|
||||
! * E_HF : Hartree-Fock energy in SI
|
||||
! * E_GS : energy of the ground state in SI
|
||||
! * E_KIN : kinetic energy in SI
|
||||
! * E_POT : potential energy in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 12 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,HALF,THIRD,FOURTH
|
||||
USE CONSTANTS_P2, ONLY : HARTREE
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
USE CORRELATION_ENERGIES
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 6) :: EC_TYPE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS,T,FF
|
||||
REAL (WP), INTENT(OUT) :: E_0,E_X,E_C,E_XC,E_HF
|
||||
REAL (WP), INTENT(OUT) :: E_GS,E_KIN,E_POT
|
||||
REAL (WP) :: D_EC_1,D_EC_2,D_EX_1
|
||||
!
|
||||
! Computing the correlation energy and its derivatives
|
||||
!
|
||||
CALL DERIVE_EC_1D(EC_TYPE,5,RS,T,D_EC_1,D_EC_2) !
|
||||
!
|
||||
! Changing to SI
|
||||
!
|
||||
D_EC_1 = D_EC_1 * HALF * HARTREE !
|
||||
D_EC_2 = D_EC_2 * HALF * HARTREE !
|
||||
!
|
||||
E_0 = THIRD * EF_SI ! ref. (1) eq. (1.83)
|
||||
E_X = - FOURTH * FF / RS * HALF * HARTREE ! ref. (1) eq. (1.97)
|
||||
E_C = EC_1D(EC_TYPE,RS,T) * HALF * HARTREE !
|
||||
!
|
||||
E_XC = E_X + E_C !
|
||||
E_HF = E_0 + E_X ! ref. (1) eq. (2.49)
|
||||
E_GS = E_0 + E_XC !
|
||||
!
|
||||
! Computing the derivative of the exchange energy
|
||||
!
|
||||
D_EX_1 = FOURTH * FF / (RS * RS) * HALF * HARTREE !
|
||||
!
|
||||
E_KIN = E_0 - E_XC - RS * (D_EX_1 + D_EC_1) ! ref. (1) eq. (1.57)
|
||||
E_POT = TWO * E_XC + RS * (D_EX_1 + D_EC_1) ! ref. (1) eq. (1.56)
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END
|
||||
!
|
||||
END MODULE CALC_ENERGIES
|
|
@ -0,0 +1,755 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE GRAND_PARTITION
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE GRAND_PARTITION_FUNCTION_3D(RS,T,A,GP_TYPE,LXI)
|
||||
!
|
||||
! This subroutine computes the grand partition function
|
||||
! for 3D systems.
|
||||
!
|
||||
! 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
|
||||
! * GP_TYPE : grand partition function type (3D)
|
||||
! GP_TYPE = 'IK0' Isihara-Kojima formulation
|
||||
! GP_TYPE = 'RH0' Rebei-Hitchon formulation
|
||||
! GP_TYPE = 'IKM' Isihara-Kojima with magnetic field
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * LXI : logarithm of grand partition function in SI
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: GP_TYPE
|
||||
!
|
||||
REAL (WP) :: RS,T,A
|
||||
REAL (WP) :: LXI
|
||||
!
|
||||
IF(GP_TYPE == 'IK0') THEN !
|
||||
LXI=LXI_IK_3D(RS,T) !
|
||||
ELSE IF(GP_TYPE == 'RH0') THEN !
|
||||
LXI=LXI_RH_3D(RS,T) !
|
||||
ELSE IF(GP_TYPE == 'IKM') THEN !
|
||||
LXI=LXI_IK_M_3D(RS,T,A) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE GRAND_PARTITION_FUNCTION_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION LXI_IK_3D(RS,T)
|
||||
!
|
||||
! This function computes the logarithm of the grand partition function
|
||||
! (per electron) in 3D system in the Isihara-Kojima approach
|
||||
!
|
||||
! Note: This is the NO MAGNETIC FIELD result
|
||||
!
|
||||
!
|
||||
! More precisely,
|
||||
!
|
||||
! LXI = 1/V * DLOG(XI) where V is the volume
|
||||
!
|
||||
! References: (1) A. Isihara and D. Y. Kojima, Z. Physik B 21,
|
||||
! 33-45 (1975)
|
||||
! (2) A. Isihara and D. Y. Kojima, Phys. Cond. Matter 18,
|
||||
! 249-262 (1974)
|
||||
! (3) D. Y. Kojima and A. Isihara, in
|
||||
! "Physics of Condensed Matter", Vol. 17, G. Busch ed.,
|
||||
! 179-181 (1974)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * LXI_IK_3D: logarithm of grand partition function in SI
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,FIVE,SIX, &
|
||||
SEVEN,EIGHT,NINE,TEN, &
|
||||
HALF,THIRD,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : E,K_B
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
USE PI_ETC, ONLY : PI,PI2,PI3,PI_INV
|
||||
USE EULER_CONST, ONLY : EUMAS
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
USE CHEMICAL_POTENTIAL, ONLY : MU
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,T
|
||||
REAL (WP) :: LXI_IK_3D
|
||||
REAL (WP) :: LX00,LX1X,LX1R,LR2X,LA2X
|
||||
REAL (WP) :: BETA,ETA,ET2,ET4,PF2,LNE,LNE2
|
||||
REAL (WP) :: E2,E4
|
||||
REAL (WP) :: A11,AP11,A12,A13,A14
|
||||
REAL (WP) :: A21,AP21,A22,A23,A24
|
||||
REAL (WP) :: A32,A31
|
||||
REAL (WP) :: XI,XI2,XI4
|
||||
REAL (WP) :: G,LNG,LNG0
|
||||
REAL (WP) :: COEF
|
||||
REAL (WP) :: C1,C2
|
||||
REAL (WP) :: C
|
||||
REAL (WP) :: I,J,I1,I2,I3,K0,K1
|
||||
REAL (WP) :: TH2,TH3,TH4,TH5
|
||||
REAL (WP) :: A,A0,A1,A2,AA,DD
|
||||
REAL (WP) :: ZETA_3,LN2,ALPHA
|
||||
!
|
||||
ZETA_3=1.202056903159594285399738E0_WP ! Apéry's constant
|
||||
LN2=DLOG(TWO) !
|
||||
!
|
||||
ALPHA=ALFA('3D') !
|
||||
!
|
||||
E2=E*E
|
||||
E4=E2*E2
|
||||
!
|
||||
BETA=ONE/(K_B*T) !
|
||||
PF2=MU('3D',T) ! chemical potential --> check units
|
||||
ETA=BETA*PF2 !
|
||||
ET2=ETA*ETA !
|
||||
ET4=ET2*ET2 !
|
||||
LNE=DLOG(ETA) !
|
||||
LNE2=LNE*LNE !
|
||||
G=TWO*E*E*PI_INV/DSQRT(PF2) ! ref. (2) eq. (B4)
|
||||
LNG=DLOG(G) !
|
||||
LNG0=DLOG(TWO*E*E*PI_INV/DSQRT(EF_SI)) ! --> check consitency of units
|
||||
!
|
||||
! Cut-off parameter
|
||||
!
|
||||
XI=TWO !
|
||||
XI2=XI*XI !
|
||||
XI4=XI2*XI2 !
|
||||
!
|
||||
! Coefficients of ref. (2) Table 1 !
|
||||
!
|
||||
A11=THIRD*PI*(ONE-LN2) !
|
||||
AP11=-0.1769447E0_WP !
|
||||
A12=-PI/96.0E0_WP !
|
||||
A13=-0.0006136E0_WP !
|
||||
A14=-0.0034088E0_WP
|
||||
A21=FOURTH*PI*(ONE-DLOG(FOUR)) !
|
||||
AP21=0.0716913E0_WP !
|
||||
A22=A12 !
|
||||
A23=-A22 !
|
||||
A24=0.0009204E0_WP !
|
||||
A32=-0.0039884E0_WP !
|
||||
A31=0.0030680E0_WP !
|
||||
!
|
||||
C1=HALF*A11 - AP11 + TWO*XI2*A12 + XI4*(A13+HALF*A14) + & ! ref. (2) eq. (B5)
|
||||
TWO*A11*DLOG(XI) !
|
||||
C2=AP21 - TWO*A21*DLOG(XI) - XI2*(A22+A23) - & ! ref. (2) eq. (B6)
|
||||
HALF*XI4*(A24+A32+A31) !
|
||||
!
|
||||
C=EUMAS !
|
||||
I=THIRD*LN2 - 1.5E0_WP*ZETA_3/PI2 ! ref. (2) eq. (2.26)
|
||||
I1=DLOG(HALF*PI)-C !
|
||||
I2=1.1268676E0_WP !
|
||||
I3=2.9418144E0_WP !
|
||||
K0=FOUR*LN2*LN2 - 1.5E0_WP - TWO*LN2*(ONE+TWO*I2)+I1+I3 !
|
||||
K1=FOUR*LN2-ONE+TWO*I2 !
|
||||
!
|
||||
A=-0.50166E0_WP ! ref. (1) eq. (B2)
|
||||
!
|
||||
J=TWO*ET2*( ONE + THIRD*PI2/ET2 *(ONE + 1.5E0_WP*A/PI2 - & !
|
||||
HALF*LNE) + & !
|
||||
FIVE*PI3*PI/(144.0E0_WP*ET4) - & ! ref. (3) eq. (16)
|
||||
PI2/(NINE*(ETA**3.5E0_WP)) * & !
|
||||
(ONE-THREE/(TEN*ETA)) & !
|
||||
) !
|
||||
!
|
||||
TH2=0.014858E0_WP - 0.20457E0_WP*LNG0 !
|
||||
TH3=7.93829E0_WP - LNG0 ! ref. (1) app. D table 2
|
||||
TH4=-4.05265E0_WP !
|
||||
TH5=-TWO !
|
||||
A2=1.5E0_WP*(TH5+TWO)/PI2 ! ref. (1) eq. (D3)
|
||||
A1=TWO*( A2 - 0.75E0_WP*(FOUR*(ONE-HALF*K1)-TH4)/PI2 ) ! ref. (1) eq. (D3)
|
||||
DD=TWO*PI_INV*(A11+THREE*C1 +TWO*C2 + & !
|
||||
(TWO*A21-THREE*A11)*LNG0) !
|
||||
AA=DD-TH3-SIX+(THREE*J-PI2*I)+THREE*(K1-K0) !
|
||||
A0=A1-1.5E0_WP*AA/PI2 ! ref. (1) eq. (D3)
|
||||
!
|
||||
!
|
||||
! Different contributions to Ln(Xi):
|
||||
!
|
||||
! 1) free electron contribution
|
||||
!
|
||||
COEF=TWO*(ETA**2.5E0_WP) / (15.0E0_WP*PI2*(BETA**1.5E0_WP)) !
|
||||
LX00=COEF*( ONE + FIVE*PI2/(EIGHT*ET2) - & ! ref. (2) eq. (2.7)
|
||||
SEVEN*PI2* PI2/(EIGHT*48.0E0_WP*ET4) ) !
|
||||
!
|
||||
! 2) first-order exchange graphs
|
||||
!
|
||||
COEF=FOURTH*E2*ET2 / (PI3*BETA) !
|
||||
LX1X=COEF*( ONE + THIRD*PI2/ET2 *(ONE + 1.5E0_WP*A/PI2 - & !
|
||||
HALF*LNE) + & !
|
||||
FIVE*PI3*PI/(144.0E0_WP*ET4) - & ! ref. (2) eq. (2.13)
|
||||
PI2/(NINE*(ETA**3.5E0_WP)) * & !
|
||||
(ONE-THREE/(TEN*ETA)) & !
|
||||
) !
|
||||
!
|
||||
! 3) ring diagrams contributions
|
||||
!
|
||||
COEF=HALF*E4*(ETA**1.5E0_WP) / (PI3*PI*DSQRT(BETA)) !
|
||||
LX1R=COEF*( C1*PI_INV - A11*LNG*PI_INV - PI/(12.0E0_WP*ET2)*& ! ref. (2) eq. (2.22)
|
||||
(C2-A21*LNG) & !
|
||||
) !
|
||||
!
|
||||
! 4) regular second-order exchange graphs
|
||||
!
|
||||
COEF=FOURTH*THIRD*E4*(ETA**1.5E0_WP) / (PI2*DSQRT(BETA)) !
|
||||
LR2X=-COEF*( I + PI2/(12.0E0_WP*ET2) * (A0+A1*LNE+A2*LNE2) ) ! ref. (2) eq. (2.25)
|
||||
!
|
||||
! 5) anomalous second-order exchange graphs
|
||||
!
|
||||
COEF=FOURTH*E4*(ETA**1.5E0_WP) / (PI3*PI*DSQRT(BETA)) !
|
||||
LA2X=COEF*( ONE + PI2/(12.0E0_WP*ET2) * (K0+K1*LNE+LNE2) ) ! ref. (2) eq. (2.28)
|
||||
!
|
||||
! Summation of the results
|
||||
!
|
||||
LXI_IK_3D=LX00+LX1X+LX1R+LR2X+LA2X !
|
||||
!
|
||||
END FUNCTION LXI_IK_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION LXI_RH_3D(RS,T)
|
||||
!
|
||||
! This function computes the logarithm of the grand partition function
|
||||
! (per electron) in 3D system in the Rebei-Hitchon approach
|
||||
!
|
||||
! More precisely,
|
||||
!
|
||||
! LXI = 1/V * DLOG(XI) where V is the volume
|
||||
!
|
||||
! References: (4) A. Rebei and W. N. G. Hitchon, Physics Letters A 224,
|
||||
! 127-132 (1996)
|
||||
! (5) A. Rebei and W. N. G. Hitchon, Int. J. Mod. Phys. B 13,
|
||||
! 3357-3367 (1999)
|
||||
! 179-181 (1974)
|
||||
! (6) A. Rebei and W. N. G. Hitchon,
|
||||
! https://arxiv.org/pdf/cond-mat/9907025.pdf
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * LXI_RH_3D: logarithm of grand partition function in SI
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,THREE,FOUR,FIVE, &
|
||||
SEVEN,EIGHT, &
|
||||
HALF,THIRD,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : BOHR,H_BAR,M_E,E,K_B
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI,PI2,PI_INV
|
||||
USE EULER_CONST, ONLY : EUMAS
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
USE CHEMICAL_POTENTIAL, ONLY : MU
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,T
|
||||
REAL (WP) :: LXI_RH_3D
|
||||
REAL (WP) :: OM0,OME,R,G,LX00
|
||||
REAL (WP) :: ALPHA,BETA,MMU,ETA,ET2,ET4,LNE
|
||||
REAL (WP) :: A1,A2,B1,B2,C1,BB,EE
|
||||
REAL (WP) :: RT,NT
|
||||
REAL (WP) :: COEF,K1,K2,K3
|
||||
REAL (WP) :: LN2
|
||||
!
|
||||
LN2=DLOG(TWO) !
|
||||
!
|
||||
ALPHA=ALFA('3D') !
|
||||
!
|
||||
BETA=ONE/(K_B*T) !
|
||||
MMU=MU('3D',T) ! chemical potential --> check units
|
||||
ETA=BETA*MMU !
|
||||
ET2=ETA*ETA !
|
||||
ET4=ET2*ET2 !
|
||||
LNE=DLOG(ETA) !
|
||||
!
|
||||
K1=HALF*KF_SI*KF_SI*KF_SI/PI2 !
|
||||
K2=-TWO*E*E*KF_SI*PI_INV !
|
||||
K3=PI2/(12.0E0_WP*ET2) !
|
||||
!
|
||||
! Constants for R
|
||||
!
|
||||
RT=M_E*E*E/(ALPHA*H_BAR*H_BAR*KF_SI) ! ref. (5) eq. (32)
|
||||
NT=ONE/(FOUR*THIRD*PI*RT*RT*RT*BOHR*BOHR*BOHR) !
|
||||
!
|
||||
! Constants for G --> note: g(1) = 1 (for BB)
|
||||
!
|
||||
A1=ONE-TWO*LN2 !
|
||||
C1=ONE-LN2-HALF*EUMAS+0.0616E0_WP+HALF !
|
||||
BB=TWO*KF_SI*PI_INV*(ONE + PI2/(24.0E0_WP*ET2)) !
|
||||
B2=(ONE+BB+BB)**2.5E0_WP !
|
||||
B1=-TWO/15.0E0_WP -TWO*THIRD*BB + TWO*B2/15.0E0_WP !
|
||||
A2=-HALF + HALF*(ONE-EUMAS) !
|
||||
EE=ZERO ! --> to be computed
|
||||
!
|
||||
!
|
||||
! Different contributions to Omega:
|
||||
!
|
||||
! 1) free electron contribution
|
||||
!
|
||||
COEF=TWO*(ETA**2.5E0_WP) / (15.0E0_WP*PI2*(BETA**1.5E0_WP)) !
|
||||
LX00=COEF*( ONE + FIVE*PI2/(EIGHT*ET2) - & ! ref. (2) eq. (2.7)
|
||||
SEVEN*PI2*PI2 /(EIGHT*48.0E0_WP*ET4) ) !
|
||||
OM0=-BETA*LX00
|
||||
!
|
||||
! 2) first-order exchange graphs
|
||||
!
|
||||
OME=-HALF*E*E*M_E*M_E/PI2 * ( TWO*PI_INV*MMU*MMU - & !
|
||||
THIRD*PI/(BETA*BETA) * (ONE+DLOG(BETA*MMU)-EUMAS) & ! ref. (6) eq. (67)
|
||||
) !
|
||||
!
|
||||
! 3) ring diagrams contributions
|
||||
!
|
||||
R=0.0622E0_WP*DLOG(RS) - 0.142E0_WP + & ! ref. (5) eq. (31)
|
||||
0.0181E0_WP*NT*MMU*(ALPHA*RT/ETA)**2 ! in Ryd
|
||||
!
|
||||
! 4) new contribution
|
||||
!
|
||||
G=K1*( K2*( HALF + K3*(HALF*(A1-LNE)+A2) - & !
|
||||
HALF*K3*(EUMAS+LNE) + K3*(ONE-LN2) - & !
|
||||
FOURTH*LN2*LN2/ET2 + (EE+PI2/24.0E0_WP)/ET2 & ! ref. (4) eq. (18)
|
||||
) + MMU*(B1+K3*(B2-ONE)) & !
|
||||
-K2*(HALF+K3*(C1-HALF*LNE)) & !
|
||||
) !
|
||||
!
|
||||
! Summation of the results
|
||||
!
|
||||
LXI_RH_3D=-(OM0+OME+R-G)/BETA ! ref. (4) eq. (8)
|
||||
!
|
||||
END FUNCTION LXI_RH_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION LXI_IK_M_3D(RS,T,A)
|
||||
!
|
||||
! This function computes the logarithm of the grand partition function
|
||||
! (per electron) in 3D system in the Isihara-Kojima approach, in the
|
||||
! presence of an external magnetic field
|
||||
!
|
||||
! More precisely,
|
||||
!
|
||||
! LXI = 1/V * DLOG(XI) where V is the volume
|
||||
!
|
||||
! References: (7) A. Isihara and D. Y. Kojima, Phys. Rev. B 10,
|
||||
! 4925-4931 (1974)
|
||||
! (8) A. Isihara and D. Y. Kojima, Phys. Rev. B 11,
|
||||
! 710-727 (1975)
|
||||
!
|
||||
! 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:
|
||||
!
|
||||
! * LXI_IK_M_3D: logarithm of grand partition function in AU
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,FOUR,FIVE, &
|
||||
SEVEN,EIGHT,NINE, &
|
||||
THIRD,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : E,K_B
|
||||
USE FERMI_VALUES_M, ONLY : KF_M_3D
|
||||
USE PI_ETC, ONLY : PI,PI2,PI3
|
||||
USE G_FACTORS, ONLY : G_E
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,T,A
|
||||
REAL (WP) :: LXI_IK_M_3D
|
||||
REAL (WP) :: LXI_IK_M
|
||||
REAL (WP) :: LX00,LXA0,LXA1
|
||||
REAL (WP) :: BETA,ETA,ET2,ET4,KFAU
|
||||
REAL (WP) :: EE,E4,A4,PIE,PIE2
|
||||
REAL (WP) :: G,LNG
|
||||
REAL (WP) :: COEF
|
||||
REAL (WP) :: KG,K1
|
||||
REAL (WP) :: C11,A21,C2(2),D1(2),D2,E1(2),E2(2)
|
||||
REAL (WP) :: E3,F1,F2(2),F3
|
||||
!
|
||||
INTEGER :: X
|
||||
!
|
||||
X=1 ! cut-off for q-integration (1 or 2)
|
||||
!
|
||||
BETA=ONE/(K_B*T) !
|
||||
KFAU=KF_M_3D(RS,T,A) ! (T,A)-dependent Fermi energy
|
||||
ETA=BETA*KFAU*KFAU !
|
||||
ET2=ETA*ETA !
|
||||
ET4=ET2*ET2 !
|
||||
!
|
||||
EE=E*E !
|
||||
E4=EE*EE !
|
||||
A4=A*A*A*A !
|
||||
PIE=PI/ETA !
|
||||
PIE2=PIE*PIE !
|
||||
KG=FOURTH*G_E*G_E - THIRD !
|
||||
G=TWO*EE/(PI*KFAU) !
|
||||
LNG=DLOG(G) !
|
||||
!
|
||||
! Coefficients for correlations
|
||||
!
|
||||
C11 = 0.19635E0_WP !
|
||||
A21 =FOURTH*PI*(ONE-DLOG(FOUR)) !
|
||||
C2(1)= 0.07169E0_WP !
|
||||
C2(2)= 0.49229E0_WP !
|
||||
D1(1)= 0.04632E0_WP !
|
||||
D1(2)= 0.92605E0_WP !
|
||||
D2 = 0.82699E0_WP !
|
||||
E1(1)= 0.35282E0_WP !
|
||||
E1(2)= 0.92701E0_WP ! ref. (8) table I
|
||||
E2(1)= 0.04336E0_WP !
|
||||
E2(2)=-0.00797E0_WP !
|
||||
E3 =-0.01023E0_WP !
|
||||
F1 =-0.14124E0_WP !
|
||||
F2(1)= 0.06124E0_WP !
|
||||
F2(2)= 0.15916E0_WP !
|
||||
F3 =-0.02250E0_WP !
|
||||
!
|
||||
! No magnetic field contribution
|
||||
!
|
||||
! 1) free electron contribution
|
||||
!
|
||||
COEF=TWO*(ETA**2.5E0_WP) / (15.0E0_WP*PI2*(BETA**1.5E0_WP)) !
|
||||
LX00=COEF*( ONE + FIVE*PI2/(EIGHT*ET2) - & ! ref. (2) eq. (2.7)
|
||||
SEVEN*PI2* PI2/(EIGHT*48.0E0_WP*ET4) ) !
|
||||
!
|
||||
! Non interacting electrons + magnetic field
|
||||
!
|
||||
LXA0=KG*DSQRT(BETA/PI)*A4/(8.0E0_WP*PI) * ( & !
|
||||
TWO/(PIE**1.5E0_WP) - (PIE**1.5E0_WP)/12.0E0_WP - & ! ref. (7) eq. (4.1)
|
||||
SEVEN*(PIE**3.5E0_WP)/192.0E0_WP & !
|
||||
) !
|
||||
!
|
||||
! Interacting electrons + magnetic field
|
||||
!
|
||||
K1=BETA*A4/PI2 !
|
||||
LXA1=K1*FOURTH*KFAU*KG *(ONE-PIE2/24.0E0_WP) + & !
|
||||
K1*FOURTH*EE/PI * (ONE-PIE2/12.0E0_WP) + & !
|
||||
K1*E4/(EIGHT*PI3*KFAU)*KG* ( & ! ref. (8) eq. (3.1)
|
||||
-C2(X)-A21*LNG + PIE2/EIGHT * (D1(X)+D2*LNG) & !
|
||||
) + & !
|
||||
K1*EE/(NINE*PI2) * (E1(X)-C11*LNG+G*(E2(X)+E3*LNG) + & !
|
||||
PIE2/EIGHT * (F1+G*(F2(X)+F3*LNG)) & !
|
||||
) !
|
||||
!
|
||||
! Summation of the results
|
||||
!
|
||||
LXI_IK_M_3D=LX00+LXA0+LXA1 ! ref. (8) eq. (2.12)
|
||||
!
|
||||
END FUNCTION LXI_IK_M_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE GRAND_PARTITION_FUNCTION_2D(RS,T,A,FLD,LXI)
|
||||
!
|
||||
! This subroutine computes the grand partition function
|
||||
! for 2D systems.
|
||||
!
|
||||
! 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
|
||||
! * GP_TYPE : grand partition function type (2D)
|
||||
! GP_TYPE = 'I20' Isihara-Kojima formulation
|
||||
! GP_TYPE = 'I2M' Isihara-Kojima with magnetic field
|
||||
! * FLD : strength of the field
|
||||
! FLD = 'WF' weak field --> ref. (2)
|
||||
! FLD = 'IF' intermediate field --> ref. (3)
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * LXI : logarithm of grand partition function in SI
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 3) :: GP_TYPE
|
||||
CHARACTER (LEN = 2) :: FLD
|
||||
!
|
||||
REAL (WP) :: RS,T,A
|
||||
REAL (WP) :: LXI
|
||||
!
|
||||
IF(GP_TYPE == 'I20') THEN !
|
||||
LXI=LXI_IK_2D(RS,T) !
|
||||
ELSE IF(GP_TYPE == 'I2M') THEN !
|
||||
LXI=LXI_IK_M_2D(RS,T,A,FLD) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE GRAND_PARTITION_FUNCTION_2D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION LXI_IK_2D(RS,T)
|
||||
!
|
||||
! This function computes the grand partition function
|
||||
! (per electron) in the 2D system according to the
|
||||
! Isihara-Toyoda model
|
||||
!
|
||||
! References: (1) A. Isihara and T. Toyoda, Phys. Rev. B 21,
|
||||
! 3358-3365 (1980)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,HALF,THIRD,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : E,K_B
|
||||
USE PI_ETC, ONLY : PI,PI2,PI3,PI_INV
|
||||
USE EULER_CONST, ONLY : EUMAS
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
USE CHEMICAL_POTENTIAL, ONLY : MU
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: RS,T
|
||||
REAL (WP) :: LXI_IK_2D
|
||||
REAL (WP) :: A,C,C1,C2,I,J,A0,A1,A2,K0,K1,A11,A21
|
||||
REAL (WP) :: I1,I2,I3,TH2,TH3,TH5,LNG,LNG0,ALPHA
|
||||
REAL (WP) :: D1,D2,E0,EP1,ES1,EP2,ES2,ET2
|
||||
REAL (WP) :: BETA,PF2,PF3,PF4,ETA,X
|
||||
REAL (WP) :: E2,E4,LNE,LNE2,DD,AA
|
||||
REAL (WP) :: ZETA_3,LN2
|
||||
!
|
||||
ZETA_3=1.202056903159594285399738E0_WP ! Apéry's constant
|
||||
LN2=DLOG(TWO) !
|
||||
!
|
||||
ALPHA=ALFA('2D') !
|
||||
!
|
||||
E2=E*E
|
||||
E4=E2*E2
|
||||
!
|
||||
BETA=ONE/(K_B*T) !
|
||||
PF2=MU('2D',T) ! chemical potential
|
||||
PF3=PF2*DSQRT(PF2) !
|
||||
PF4=PF2*PF2 !
|
||||
ETA=BETA*PF2 !
|
||||
ET2=ETA*ETA !
|
||||
LNE=DLOG(ETA) !
|
||||
LNE2=LNE*LNE !
|
||||
!
|
||||
D1=TWO*THIRD/(PI2) !
|
||||
D2=FOURTH*(ONE-LN2)*PI_INV + ONE/PI3 - & !
|
||||
(27.3E0_WP + 1.3E0_WP)/(32.0E0_WP*PI*PI3) !
|
||||
E0=PI/12.0E0_WP !
|
||||
EP1=-0.02553E0_WP !
|
||||
ES1=-ONE/24.0E0_WP !
|
||||
EP2=-0.05508E0_WP !
|
||||
ES2=0.018316E0_WP !
|
||||
ET2=PI_INV/48.0E0_WP !
|
||||
!
|
||||
LXI_IK_2D=BETA*( FOURTH*PF4*PI_INV + D1*E2*PF3 + D2*E4*PF2 +& !
|
||||
(E0*PF4 + (EP1+ES1*DLOG(ETA))*E2*PF3 + & !
|
||||
(EP2+ES2*DLOG(ETA)+ET2*DLOG(ETA)*DLOG(ETA))* & ! ref. (1) eq. (6.1)
|
||||
E4*PF2 & !
|
||||
)/(ETA*ETA) & !
|
||||
) !
|
||||
!
|
||||
END FUNCTION LXI_IK_2D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION LXI_IK_M_2D(RS,T,A,FLD)
|
||||
!
|
||||
! This function computes the logarithm of the grand partition function
|
||||
! (per electron) in 2D system in the Isihara-Kojima approach, in the
|
||||
! presence of an external magnetic field:
|
||||
!
|
||||
! (i) weak field --> ref. (2)
|
||||
! (ii) intermediate field --> ref. (3)
|
||||
!
|
||||
! More precisely,
|
||||
!
|
||||
! LXI = 1/V * DLOG(XI) where V is the volume
|
||||
!
|
||||
! 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:
|
||||
!
|
||||
! * LXI_IK_M_2D: logarithm of grand partition function in AU
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,FOUR,SEVEN, &
|
||||
HALF,THIRD,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : E,K_B
|
||||
USE FERMI_VALUES_M, ONLY : KF_M_2D
|
||||
USE PI_ETC, ONLY : PI,PI2,PI_INV
|
||||
USE G_FACTORS, ONLY : G_E
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 2) :: FLD
|
||||
!
|
||||
REAL (WP) :: RS,T,A
|
||||
REAL (WP) :: LXI_IK_M_2D
|
||||
REAL (WP) :: ALPHA,BETA,GAMMA,ETA,ET2
|
||||
REAL (WP) :: KFAU,G2,KG,I
|
||||
REAL (WP) :: LN0,LNA
|
||||
REAL (WP) :: E2,CC,A2,A4,SL1,SL2,SI
|
||||
REAL (WP) :: XL,AL,BL,CL,ZZL
|
||||
!
|
||||
INTEGER :: L,LMAX
|
||||
!
|
||||
LMAX=100 ! max. value of l-sum
|
||||
!
|
||||
G2=G_E*G_E !
|
||||
!
|
||||
BETA=ONE/(K_B*T) !
|
||||
ALPHA=BETA*A*A !
|
||||
KFAU=KF_M_2D(RS,T,A) ! (T,A)-dependent Fermi energy
|
||||
ETA=BETA*KFAU*KFAU !
|
||||
ET2=ETA*ETA !
|
||||
GAMMA=A*A/(KFAU*KFAU) !
|
||||
!
|
||||
E2=E*E !
|
||||
A2=A*A !
|
||||
A4=A2*A2 !
|
||||
CC=E2/KFAU !
|
||||
KG=0.75E0_WP*G2 - ONE !
|
||||
!
|
||||
IF(FLD == 'WF') THEN !
|
||||
!
|
||||
! No magnetic field contribution
|
||||
!
|
||||
ZZL=ONE
|
||||
SL1=ZERO !
|
||||
DO L=1,LMAX !
|
||||
XL=DFLOAT(L) !
|
||||
ZZL=-ZZL*L !
|
||||
AL=XL*BETA*A2 !
|
||||
BL=HALF*G_E*AL !
|
||||
SL1=SL1+ZZL*COSH(AL)/(DSINH(BL)*XL) !
|
||||
END DO !
|
||||
LN0=-HALF*A2*SL1*PI_INV !
|
||||
!
|
||||
! Magnetic field
|
||||
!
|
||||
LNA=BETA*A4*( PI_INV/12.0E0_WP * KG + CC*( &!
|
||||
ONE/(12.0E0_WP*PI2) * KG + &!
|
||||
ONE/(48.0E0_WP*PI2) * (26.0E0_WP/15.0E0_WP + &!
|
||||
SEVEN*PI/16.0E0_WP) &! ref. (2) eq. (6.1)
|
||||
) - &!
|
||||
ONE/(48.0E0_WP*PI2)*CC*DLOG(FOURTH*CC) + &!
|
||||
( -ONE/(96.0E0_WP*PI)*KG + &!
|
||||
11.0E0_WP/(2304.0E0_WP*PI) &!
|
||||
) * CC*CC &!
|
||||
)
|
||||
!
|
||||
! Summing up
|
||||
!
|
||||
LXI_IK_M_2D=LN0+LNA !
|
||||
!
|
||||
ELSE IF(FLD == 'IF') THEN !
|
||||
!
|
||||
I=0.8149E0_WP ! ref. (3) eq. (5.19)
|
||||
!
|
||||
! Calculation of l-sums
|
||||
!
|
||||
SI=-ONE ! init. of sign
|
||||
SL1=ZERO !
|
||||
SL2=ZERO !
|
||||
DO L=1,LMAX !
|
||||
SI=-SI !
|
||||
XL=DFLOAT(L) !
|
||||
AL=XL*PI/GAMMA !
|
||||
BL=HALF*G_E-TWO*XL*PI !
|
||||
CL=XL*PI2/ALPHA !
|
||||
SL1=SL1+SI*DCOS(AL)*DCOS(BL)/(XL*DSINH(CL)) !
|
||||
SL2=SL2+SI*DSIN(AL)*DCOS(BL)/DSINH(CL) !
|
||||
END DO !
|
||||
LXI_IK_M_2D=FOURTH*BETA*KFAU*KFAU*KFAU*KFAU*PI_INV*( & !
|
||||
ONE + THIRD*PI2/ET2 + & !
|
||||
((HALF*G2)**2 -THIRD)*GAMMA*GAMMA + & ! ref. (3) eq. (5.21)
|
||||
FOUR*ALPHA/ET2 * SL1 + & !
|
||||
I*(CC**(FOUR*THIRD))* & !
|
||||
(ONE + TWO*PI/ETA *SL2 )**(FOUR*THIRD) & !
|
||||
) !
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION LXI_IK_M_2D
|
||||
!
|
||||
END MODULE GRAND_PARTITION
|
|
@ -0,0 +1,89 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE MATERIAL_CL
|
||||
!
|
||||
! This module defines the material characteristic lengths
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: EMFP,FWL,PCL,THL,ML,CR,DL,TFL
|
||||
!
|
||||
END MODULE MATERIAL_CL
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE MATERIAL_PROPERTIES
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CHARACTERISTIC_LENGTHS(DMN,RS,T,B,DC,TP)
|
||||
!
|
||||
! This subroutine computes and prints out characteristic lengths
|
||||
! in the input material
|
||||
!
|
||||
! References: (1) H. van Houten, B. J. van Wees and C.W.J. Beenakker
|
||||
! in "Physics and Technology of Submicron Structures",
|
||||
! H. Heinrich, G. Bauer and F. Kuchar eds.,
|
||||
! Springer Series in Solid State Science Vol. 83,
|
||||
! pp. 198-207 (1988)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * DMN : dimension
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
! * B : magnetic field in SI
|
||||
! * DC : diffusion coefficient
|
||||
! * TP : phase-breaking relaxation time in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 24 Jul 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO,ONE,TWO,TTINY
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,E,K_B
|
||||
USE FERMI_SI, ONLY : KF_SI,VF_SI
|
||||
USE PI_ETC, ONLY : PI
|
||||
USE UTILITIES_1, ONLY : D
|
||||
USE SCREENING_VEC
|
||||
!
|
||||
USE MATERIAL_CL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 2) :: DMN
|
||||
!
|
||||
REAL (WP) :: RS,T,B,DC,TP
|
||||
REAL (WP) :: KD,K_TF
|
||||
!
|
||||
INTEGER :: LOGF
|
||||
!
|
||||
IF(B == ZERO) B = TTINY !
|
||||
!
|
||||
EMFP=D(DMN)*DC/VF_SI ! elastic MFP
|
||||
FWL=TWO*PI/KF_SI ! Fermi wavelength
|
||||
PCL=DSQRT(DC*TP) ! phase coherence length
|
||||
THL=DSQRT(H_BAR*DC/(K_B*T)) ! thermal length
|
||||
ML=DSQRT(H_BAR/(E*B)) ! magnetic length
|
||||
CR=H_BAR*KF_SI/(E*B) ! cyclotron radius
|
||||
!
|
||||
CALL DEBYE_VECTOR(DMN,T,RS,KD) !
|
||||
DL=ONE/KD ! Debye length
|
||||
!
|
||||
CALL THOMAS_FERMI_VECTOR(DMN,K_TF) !
|
||||
TFL=ONE/K_TF ! Thomas-Fermi length
|
||||
!
|
||||
END SUBROUTINE CHARACTERISTIC_LENGTHS
|
||||
!
|
||||
END MODULE MATERIAL_PROPERTIES
|
|
@ -0,0 +1,562 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE THERMODYNAMIC_PROPERTIES
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE SPECIFIC_HEAT(DMN,I_ORD,RS,T,CV)
|
||||
!
|
||||
! This subroutine computes the specific heat
|
||||
! (per electron) in the 2D and 3D system
|
||||
!
|
||||
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
||||
! Springer Series in Solid-State Sciences 96,
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * DMN : dimension
|
||||
! * I_ORD : order of the truncation of the r_s series
|
||||
! I_ORD = 1 : r_s only --> ref. 1 eq. (7.1.16)
|
||||
! I_ORD = 2 : r_s^2 --> ref. 1 eq. (7.1.22)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * CV : specific heat in SI
|
||||
! * F_FR : Helmhotz free energy per electron in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,NINE, &
|
||||
HALF,THIRD
|
||||
USE CONSTANTS_P1, ONLY : K_B
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI,PI2,PI_INV
|
||||
USE SQUARE_ROOTS, ONLY : SQR2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 2) :: DMN
|
||||
!
|
||||
INTEGER :: I_ORD
|
||||
!
|
||||
REAL (WP) :: RS,T
|
||||
REAL (WP) :: CV
|
||||
REAL (WP) :: C1,CV0,A,C,RAT,ETA_0
|
||||
!
|
||||
REAL (WP) :: LOG,SQRT
|
||||
!
|
||||
C1 = (FOUR / (NINE * PI2 * PI2))**THIRD !
|
||||
A = -4.035E0_WP !
|
||||
C = 0.02553E0_WP !
|
||||
RAT = KF_SI / (K_B * T) !
|
||||
ETA_0 = KF_SI * RAT !
|
||||
!
|
||||
! specific heat at T = 0
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
CV0 = HALF * THIRD * K_B* K_B * T * KF_SI ! ref. (1) eq. (7.1.17)
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
CV0 = THIRD * PI2 * K_B * K_B * T / (KF_SI * KF_SI) ! ref. (1) eq. (7.1.27)
|
||||
END IF !
|
||||
!
|
||||
! r_s expansion
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
IF(I_ORD == 1) THEN !
|
||||
CV = CV0 * ( ONE + C1 * RS * ( 2.5E0_WP + & !
|
||||
THREE * A / PI2 - & ! ref. (1) eq. (7.1.16)
|
||||
LOG(RAT * RAT) & !
|
||||
) & !
|
||||
) !
|
||||
ELSE IF(I_ORD == 2) THEN !
|
||||
CV = CV0 * ( ONE + 0.162E0_WP * RS - & !
|
||||
0.166E0_WP * RS * LOG(ETA_0) - & !
|
||||
0.157E0_WP * RS * RS + & ! ref. (1) eq. (7.1.22)
|
||||
0.0138E0_WP * RS * RS * LOG(RS) + & !
|
||||
RS * RS * ( 0.0282E0_WP * LOG(ETA_0) + & !
|
||||
0.0275E0_WP * LOG(ETA_0) * LOG(ETA_0) ) & !
|
||||
) !
|
||||
END IF !
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
CV = CV0 * ( ONE + RS * ( 0.75E0_WP * SQR2 * PI_INV * & !
|
||||
(ONE - 16.0E0_WP * C) - & ! ref. (1) eq. (7.1.26)
|
||||
LOG(ETA_0) / SQRT(TWO*PI) & !
|
||||
) & !
|
||||
) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE SPECIFIC_HEAT
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION PRESSURE_3D(RS)
|
||||
!
|
||||
! This function computes the electron pressure in a 3D system
|
||||
!
|
||||
!
|
||||
! References: (1) G. Giuliani and G. Vignale, "Quantum Theory of the
|
||||
! Electron Liquid", Cambridge Uiversity Press (2005)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
!
|
||||
!
|
||||
! Note: We write the ground-state energy E = E_0 + E_X + E_C as
|
||||
!
|
||||
! E = E_HF + E_C
|
||||
!
|
||||
! and use eq. (2.56) of ref. (1) to compute the derivatives of E_HF
|
||||
!
|
||||
! E_HF = Ad / rs^2 - Bd / rs
|
||||
! D_EHF_1 = -2 * Ad / rs^3 + Bd / rs^2
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Oct 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,HALF,THIRD
|
||||
USE CONSTANTS_P2, ONLY : HARTREE
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
USE ENERGIES, ONLY : EC_TYPE
|
||||
USE CORRELATION_ENERGIES
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS
|
||||
REAL (WP) :: PRESSURE_3D
|
||||
REAL (WP) :: ALPHA
|
||||
REAL (WP) :: A3,B3,RS2,RS3
|
||||
REAL (WP) :: D_EC_1,D_EC_2,D_EHF_1
|
||||
!
|
||||
ALPHA = ALFA('3D') !
|
||||
A3 = 0.6E0_WP / ALPHA ! ref. (1) table (2.1)
|
||||
B3 = 1.5E0_WP * PI_INV / ALPHA ! idem
|
||||
!
|
||||
RS2 = RS * RS !
|
||||
RS3 = RS2 * RS !
|
||||
!
|
||||
! Computing the derivatives of the correlation energy
|
||||
!
|
||||
CALL DERIVE_EC_3D(EC_TYPE,1,5,RS,T,D_EC_1,D_EC_2) !
|
||||
!
|
||||
! Computation of the first derivative of E_HF
|
||||
!
|
||||
D_EHF_1 = - TWO * A3 / RS3 + B3 / RS2 !
|
||||
!
|
||||
PRESSURE_3D = - THIRD * RS * (D_EHF_1 + D_EC_1) * & !
|
||||
HALF * HARTREE ! ref. (1) eq. (1.137)
|
||||
!
|
||||
END FUNCTION PRESSURE_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION MU_3D(RS)
|
||||
!
|
||||
! This function computes the chemical potential in a 3D system
|
||||
!
|
||||
!
|
||||
! References: (1) G. Giuliani and G. Vignale, "Quantum Theory of the
|
||||
! Electron Liquid", Cambridge Uiversity Press (2005)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
!
|
||||
!
|
||||
! Note: We write the ground-state energy E = E_0 + E_X + E_C as
|
||||
!
|
||||
! E = E_HF + E_C
|
||||
!
|
||||
! and use eq. (2.56) of ref. (1) to compute the derivatives of E_HF
|
||||
!
|
||||
! E_HF = Ad / rs^2 - Bd / rs
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Oct 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : HALF
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
USE CONSTANTS_P2, ONLY : HARTREE
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
USE ENERGIES, ONLY : EC_TYPE
|
||||
USE CORRELATION_ENERGIES
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS
|
||||
REAL (WP) :: MU_3D
|
||||
REAL (WP) :: E_C,E_HF
|
||||
REAL (WP) :: ALPHA
|
||||
REAL (WP) :: A3,B3,RS2
|
||||
REAL (WP) :: P
|
||||
!
|
||||
ALPHA = ALFA('3D') !
|
||||
A3 = 0.6E0_WP / ALPHA ! ref. (1) table (2.1)
|
||||
B3 = 1.5E0_WP * PI_INV / ALPHA ! idem
|
||||
!
|
||||
RS2 = RS * RS !
|
||||
!
|
||||
! Computing the correlation energy
|
||||
!
|
||||
E_C = EC_3D(EC_TYPE,1,RS,T) * HALF * HARTREE !
|
||||
!
|
||||
! Computation of E_HF
|
||||
!
|
||||
E_HF = A3 / RS2 - B3 / RS !
|
||||
!
|
||||
! Computing the electronic pressure
|
||||
!
|
||||
P = PRESSURE_3D(RS)
|
||||
!
|
||||
MU_3D = E_HF + E_C + P ! ref. (1) eq. (1.138)
|
||||
!
|
||||
END FUNCTION MU_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION KAPPA_0_3D(RS)
|
||||
!
|
||||
! This function computes the non-interacting compressibility
|
||||
! in a 3D system
|
||||
!
|
||||
!
|
||||
! References: (1) N. Iwamoto, Phys. Rev. A 30, 3289-3304 (1984)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Oct 2020
|
||||
!
|
||||
!
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS
|
||||
REAL (WP) :: KAPPA_0_3D
|
||||
REAL (WP) :: RS2
|
||||
REAL (WP) :: ALPHA
|
||||
!
|
||||
RS2 = RS * RS !
|
||||
!
|
||||
ALPHA=ALFA('3D') !
|
||||
!
|
||||
KAPPA_0_3D = 1.5E0_WP * ALPHA * ALPHA * RS2 ! ref. (1) eq. (2.17)
|
||||
!
|
||||
END FUNCTION KAPPA_0_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION BULK_MOD_3D(RS)
|
||||
!
|
||||
! This function computes the bulk modulus in a 3D system
|
||||
!
|
||||
!
|
||||
! References: (1) G. Giuliani and G. Vignale, "Quantum Theory of the
|
||||
! Electron Liquid", Cambridge Uiversity Press (2005)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Oct 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : TWO,SIX,HALF,THIRD
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
USE CONSTANTS_P2, ONLY : HARTREE
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
USE ENERGIES, ONLY : EC_TYPE
|
||||
USE CORRELATION_ENERGIES
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS
|
||||
REAL (WP) :: BULK_MOD_3D
|
||||
REAL (WP) :: ALPHA
|
||||
REAL (WP) :: A3,B3,RS2,RS3,RS4
|
||||
REAL (WP) :: D_EC_1,D_EC_2,D_EHF_1,D_EHF_2
|
||||
!
|
||||
ALPHA = ALFA('3D') !
|
||||
A3 = 0.6E0_WP / ALPHA ! ref. (1) table (2.1)
|
||||
B3 = 1.5E0_WP * PI_INV / ALPHA ! idem
|
||||
!
|
||||
RS2 = RS * RS !
|
||||
RS3 = RS2 * RS !
|
||||
RS4 = RS3 * RS !
|
||||
!
|
||||
! Computing the derivatives of the correlation energy
|
||||
!
|
||||
CALL DERIVE_EC_3D(EC_TYPE,1,5,RS,T,D_EC_1,D_EC_2) !
|
||||
!
|
||||
! Computation of the derivatives of E_HF
|
||||
!
|
||||
D_EHF_1 = - TWO * A3 / RS3 + B3 / RS2 !
|
||||
D_EHF_2 = - SIX * A3 / RS4 - TWO * B3 / RS3 !
|
||||
!
|
||||
BULK_MOD_3D = THIRD * RS * ( THIRD * RS * & !
|
||||
(D_EHF_2 + D_EC_2) - & !
|
||||
TWO * THIRD * RS * & !
|
||||
(D_EHF_1+D_EC_1) & ! ref. (1) eq. (1.139)
|
||||
) * HALF * HARTREE !
|
||||
!
|
||||
END FUNCTION BULK_MOD_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION KAPPA_3D(RS)
|
||||
!
|
||||
! This function computes the interacting compressibility
|
||||
! in a 3D system
|
||||
!
|
||||
! References: (1) G. Giuliani and G. Vignale, "Quantum Theory of the
|
||||
! Electron Liquid", Cambridge Uiversity Press (2005)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Oct 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS
|
||||
REAL (WP) :: KAPPA_3D
|
||||
!
|
||||
KAPPA_3D = ONE / BULK_MOD_3D(RS) ! ref. (1) eq. (1.140)
|
||||
!
|
||||
END FUNCTION KAPPA_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION U_IN_3D(RS,T)
|
||||
!
|
||||
! This function computes the internal energy per electron
|
||||
! in a 3D system
|
||||
!
|
||||
! References: (1) S. Ichimaru, Rev. Mod. Phys. 54, 1017-1059 (1982)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Oct 2020
|
||||
!
|
||||
!
|
||||
USE CONSTANTS_P1, ONLY : K_B
|
||||
USE PLASMON_SCALE_P, ONLY : NONID
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS,T
|
||||
REAL (WP) :: U_IN_3D
|
||||
REAL (WP) :: A0,B0,C0,D0,G4
|
||||
!
|
||||
! Slattery-Doolen-DeWitt parameters ! ref (1) eq. (2.12)
|
||||
!
|
||||
A0=-0.89752E0_WP !
|
||||
B0= 0.94544E0_WP ! 1 < NONID < 160
|
||||
C0= 0.17954E0_WP !
|
||||
D0=-0.80049E0_WP !
|
||||
!
|
||||
U_IN_3D = K_B * T * (A0 * NONID + B0 * G4 + & ! ref. (1) eq. (2.8)
|
||||
C0 / G4 + D0 + 1.5E0_WP) ! and (2.11)
|
||||
!
|
||||
END FUNCTION U_IN_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION U_EX_3D(RS,T)
|
||||
!
|
||||
! This function computes the excess internal energy per electron
|
||||
! in a 3D system
|
||||
!
|
||||
! References: (1) S. Ichimaru, Rev. Mod. Phys. 54, 1017-1059 (1982)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Oct 2020
|
||||
!
|
||||
!
|
||||
USE CONSTANTS_P1, ONLY : K_B
|
||||
USE PLASMON_SCALE_P, ONLY : NONID
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS,T
|
||||
REAL (WP) :: U_EX_3D
|
||||
REAL (WP) :: A0,B0,C0,D0,G4
|
||||
!
|
||||
! Slattery-Doolen-DeWitt parameters ! ref (1) eq. (2.12)
|
||||
!
|
||||
A0=-0.89752E0_WP !
|
||||
B0= 0.94544E0_WP ! 1 < NONID < 160
|
||||
C0= 0.17954E0_WP !
|
||||
D0=-0.80049E0_WP !
|
||||
!
|
||||
U_EX_3D = A0 * NONID + B0 * G4 + C0 / G4 + D0 ! ref. (3) eq. (2.11)
|
||||
!
|
||||
END FUNCTION U_EX_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION U_IT_3D(T)
|
||||
!
|
||||
! This function computes the total interaction energy per electron
|
||||
! in a 3D system
|
||||
!
|
||||
! References: (1) K. Tago, K. Utsumi and S. Ichimaru,
|
||||
! Prog. Theor. Phys. 65, 54-65 (1981)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * T : system temperature in SI
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Oct 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,HALF,FOURTH
|
||||
USE SQUARE_ROOTS, ONLY : SQR3
|
||||
USE CONSTANTS_P1, ONLY : K_B
|
||||
USE PLASMON_SCALE_P, ONLY : NONID
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: T
|
||||
REAL (WP) :: U_IT_3D
|
||||
!
|
||||
REAL (WP) :: A1,A2,A3
|
||||
REAL (WP) :: B1,B2
|
||||
!
|
||||
! TUI coefficients
|
||||
!
|
||||
A1 = - 0.89461E0_WP ! \
|
||||
A2 = 0.8165E0_WP ! |
|
||||
A3 = - 0.5012E0_WP ! > ref. (1), eq. (32)-(33)
|
||||
B1 = - 0.8899E0_WP ! |
|
||||
B2 = 1.50E0_WP ! /
|
||||
!
|
||||
IF(NONID < ONE) THEN !
|
||||
U_IT_3D = - SQR3 * (NONID**1.5E0_WP) * HALF !
|
||||
ELSE IF(ONE <= NONID .AND. NONID <= 40.0E0_WP) THEN !
|
||||
U_IT_3D = A1 * NONID + A2 * (NONID**FOURTH) + A3 !
|
||||
ELSE !
|
||||
U_IT_3D = B1 * NONID + B2
|
||||
END IF !
|
||||
!
|
||||
END FUNCTION U_IT_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
FUNCTION F_FR_3D(RS,T)
|
||||
!
|
||||
! This function computes the Helmholtz free energy per electron
|
||||
! in a 3D system
|
||||
!
|
||||
! References: (1) S. Ichimaru, Rev. Mod. Phys. 54, 1017-1059 (1982)
|
||||
!
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
!
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 9 Oct 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : THREE,FOUR
|
||||
USE CONSTANTS_P1, ONLY : K_B
|
||||
USE PLASMON_SCALE_P, ONLY : NONID
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS,T
|
||||
REAL (WP) :: F_FR_3D
|
||||
REAL (WP) :: A0,B0,C0,D0,G4
|
||||
!
|
||||
REAL (WP) :: LOG
|
||||
!
|
||||
! Slattery-Doolen-DeWitt parameters ! ref (1) eq. (2.12)
|
||||
!
|
||||
A0=-0.89752E0_WP !
|
||||
B0= 0.94544E0_WP ! 1 < NONID < 160
|
||||
C0= 0.17954E0_WP !
|
||||
D0=-0.80049E0_WP !
|
||||
!
|
||||
F_FR_3D = K_B * T * ( A0 * NONID + & !
|
||||
FOUR * (B0 * G4 - C0 / G4) + & !
|
||||
(D0 + THREE) * LOG(NONID) - & ! ref. (1) eq. (2.14)
|
||||
( A0 + FOUR * B0 - & !
|
||||
FOUR * C0 + 1.135E0_WP) & !
|
||||
) !
|
||||
!
|
||||
END FUNCTION F_FR_3D
|
||||
!
|
||||
END MODULE THERMODYNAMIC_PROPERTIES
|
|
@ -0,0 +1,329 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE THERMODYNAMIC_QUANTITIES
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE SPECIFIC_HEAT(DMN,I_ORD,RS,T,CV)
|
||||
!
|
||||
! This subroutine computes the specific heat
|
||||
! (per electron) in the 2D and 3D system
|
||||
!
|
||||
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
||||
! Springer Series in Solid-State Sciences 96,
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * DMN : dimension
|
||||
! * I_ORD : order of the truncation of the r_s series
|
||||
! I_ORD = 1 : r_s only --> ref. 1 eq. (7.1.16)
|
||||
! I_ORD = 2 : r_s^2 --> ref. 1 eq. (7.1.22)
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * CV : specific heat in SI
|
||||
! * F_FR : Helmhotz free energy per electron in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,NINE, &
|
||||
HALF,THIRD
|
||||
USE CONSTANTS_P1, ONLY : K_B
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI,PI2,PI_INV
|
||||
USE SQUARE_ROOTS, ONLY : SQR2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 2) :: DMN
|
||||
!
|
||||
REAL (WP) :: RS,T
|
||||
REAL (WP) :: CV
|
||||
REAL (WP) :: C1,CV0,A,C,RAT,ETA_0
|
||||
!
|
||||
INTEGER :: I_ORD
|
||||
!
|
||||
C1=(FOUR/(NINE*PI2*PI2))**THIRD !
|
||||
A=-4.035E0_WP !
|
||||
C=0.02553E0_WP !
|
||||
RAT=KF_SI/(K_B*T) !
|
||||
ETA_0=KF_SI*RAT !
|
||||
!
|
||||
! specific heat at T = 0
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
CV0=HALF*THIRD*K_B*K_B*T*KF_SI ! ref. (1) eq. (7.1.17)
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
CV0=THIRD*PI2*K_B*K_B*T/(KF_SI*KF_SI) ! ref. (1) eq. (7.1.27)
|
||||
END IF !
|
||||
!
|
||||
! r_s expansion
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
IF(I_ORD == 1) THEN !
|
||||
CV=CV0*(ONE + C1*RS*(2.5E0_WP + THREE*A/PI2 - &! ref. (1) eq. (7.1.16)
|
||||
DLOG(RAT*RAT)) ) !
|
||||
ELSE IF(I_ORD == 2) THEN !
|
||||
CV=CV0*(ONE + 0.162E0_WP*RS - 0.166E0_WP*RS*DLOG(ETA_0) -&!
|
||||
0.157E0_WP*RS*RS + 0.0138E0_WP*RS*RS*DLOG(RS) + &!
|
||||
RS*RS*( 0.0282E0_WP*DLOG(ETA_0) + &! ref. (1) eq. (7.1.22)
|
||||
0.0275E0_WP*DLOG(ETA_0)*DLOG(ETA_0) ) &!
|
||||
) !
|
||||
END IF !
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
CV=CV0*(ONE + RS*( 0.75E0_WP*SQR2*PI_INV * &!
|
||||
(ONE-16.0E0_WP*C) - &! ref. (1) eq. (7.1.26)
|
||||
DLOG(ETA_0)/DSQRT(TWO*PI) &!
|
||||
) &!
|
||||
) !
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE SPECIFIC_HEAT
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE HIGH_T_THERMO_3D(RS,T,TH_PROP,P,U_IN,U_EX,F_FR)
|
||||
!
|
||||
! This subroutine computes high-temperature thermodynamics properties
|
||||
! (per electron) in the 3D system --> 3D
|
||||
!
|
||||
! References: (1) A. Isihara, "Electron Liquids", 2nd edition,
|
||||
! Springer Series in Solid-State Sciences 96,
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
! * TH_PROP : type of calculation
|
||||
! TH_PROP = 'CLAS' : classical approximation
|
||||
! TH_PROP = 'QUAN' : quantum approximation
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * P : electron pressure in SI
|
||||
! * U_IN : internal energy per electron in SI
|
||||
! * U_EX : excess internal energy per electron / k_B T in SI
|
||||
! * F_FR : Helmhotz free energy per electron in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 22 Jul 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,TEN, &
|
||||
HALF,THIRD,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : BOHR,H_BAR,M_E,E,K_B
|
||||
USE PI_ETC, ONLY : PI,SQR_PI
|
||||
USE EULER_CONST, ONLY : EUMAS
|
||||
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 4) :: TH_PROP
|
||||
!
|
||||
REAL (WP) :: RS,T
|
||||
REAL (WP) :: P,U_IN,U_EX,F_FR
|
||||
REAL (WP) :: EPS,LAMBDA,GAMMA
|
||||
REAL (WP) :: KD_SI,N0
|
||||
REAL (WP) :: A(4),B(4)
|
||||
REAL (WP) :: DEN1,DEN2,DEN3,DEN4
|
||||
REAL (WP) :: X,X2,X3,X4,X6,ETA,GX
|
||||
!
|
||||
DATA A / -0.895929E0_WP, 0.11340656E0_WP, & !
|
||||
-0.90872827E0_WP,-0.11614773E0_WP / ! Hansen
|
||||
DATA B / 4.6664860E0_WP, 13.675411E0_WP, & ! parameters
|
||||
1.8905603E0_WP, 1.0277554E0_WP / !
|
||||
!
|
||||
! Computing the Debye screening vector
|
||||
!
|
||||
CALL DEBYE_VECTOR('3D',T,RS,KD_SI) !
|
||||
!
|
||||
! Computing the electron density
|
||||
!
|
||||
N0=RS_TO_N0('3D',RS) !
|
||||
!
|
||||
EPS=E*E*KD_SI/(K_B*T) ! ref. (1) eq. (1.1.2)
|
||||
LAMBDA=TWO*PI*H_BAR/DSQRT(TWO*PI*M_E*K_B*T) ! de Broglie thermal wavelength
|
||||
ETA=TWO*PI*BOHR/LAMBDA ! ref. (1) p. 3
|
||||
GAMMA=(THIRD*EPS*EPS)**THIRD ! ref. (1) eq. (1.1.4)
|
||||
X=ETA/DSQRT(TWO*PI) !
|
||||
!
|
||||
X2=X*X !
|
||||
X3=X2*X !
|
||||
X4=X2*X2 !
|
||||
X6=X4*X2 !
|
||||
!
|
||||
! Calculation of function g(x)
|
||||
!
|
||||
IF(X <= ONE) THEN !
|
||||
GX=TWO*EUMAS +DLOG(THREE) - FOUR*THIRD - HALF*X2 + & !
|
||||
X4/TEN + TWO*X6/21.0E0_WP ! ref. (1) eq. (3.2.13)
|
||||
ELSE !
|
||||
GX=-0.75E0_WP*SQR_PI*X3 + 1.5E0_WP*X2 - & !
|
||||
0.75E0_WP*SQR_PI*(ONE+DLOG(TWO))*X + DLOG(X) + & ! ref. (1) eq. (3.2.13)
|
||||
HALF*EUMAS + DLOG(THREE) + 0.411E0_WP !
|
||||
END IF !
|
||||
!
|
||||
IF(TH_PROP == 'CLASS') THEN !
|
||||
P=ONE-HALF*THIRD*EPS*(ONE + EPS*( EUMAS - TWO*THIRD + & ! ref. (1) eq. (3.1.19)
|
||||
HALF*DLOG(THREE*EPS) ) ) !
|
||||
ELSE !
|
||||
P=ONE-HALF*THIRD*EPS - FOURTH*THIRD*EPS*EPS*DLOG(EPS) - & !
|
||||
FOURTH*THIRD*EPS*EPS*( TWO*EUMAS + DLOG(THREE) - & ! ref. (1) eq. (3.2.12)
|
||||
FOUR*THIRD + 12.0E0_WP*GX & !
|
||||
) !
|
||||
END IF !
|
||||
!
|
||||
F_FR=DLOG(N0*LAMBDA*LAMBDA*LAMBDA/E) - HALF*THIRD* ( & !
|
||||
EPS+EPS + EPS*EPS*( EUMAS - 11.0E0_WP/12.0E0_WP + & ! ref. (1) eq. (3.1.18)
|
||||
HALF*DLOG(THREE*EPS) ) ) !
|
||||
!
|
||||
U_IN=1.5E0_WP - HALF*( EPS + EPS*EPS*( EUMAS - TWO*THIRD + & ! ref. (1) eq. (3.1.16)
|
||||
HALF*DLOG(THREE*EPS) ) ) !
|
||||
!
|
||||
! Hansen's expansion
|
||||
!
|
||||
DEN1=DSQRT(B(1)+GAMMA) !
|
||||
DEN2=B(2)+GAMMA !
|
||||
DEN3=DSQRT(B(3)+GAMMA)**3 !
|
||||
DEN4=(B(4)+GAMMA)**2 !
|
||||
!
|
||||
U_EX=DSQRT(GAMMA**3)*( A(1)/DEN1 + A(2)/DEN2 + & !
|
||||
A(3)/DEN3 + A(4)/DEN4 & !
|
||||
) !
|
||||
!
|
||||
END SUBROUTINE HIGH_T_THERMO_3D
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE THERMODYNAMICS_3D(EC_TYPE,RS,T,P,MU,K0,K,BM, &
|
||||
U_IN,U_EX,F_FR)
|
||||
!
|
||||
! This subroutine computes thermodynamics properties (per electron)
|
||||
! in the 3D system --> 3D
|
||||
!
|
||||
! References: (1) G. Giuliani and G. Vignale, "Quantum Theory of the
|
||||
! Electron Liquid", Cambridge Uiversity Press (2005)
|
||||
! (2) N. Iwamoto, Phys. Rev. A 30, 3289-3304 (1984)
|
||||
! (3) S. Ichimaru, Rev. Mod. Phys. 54, 1017-1059 (1982)
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * EC_TYPE : type of correlation energy functional
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : system temperature in SI
|
||||
!
|
||||
!
|
||||
! Output parameters:
|
||||
!
|
||||
! * P : electron pressure in SI
|
||||
! * MU : chemical potential in SI
|
||||
! * K0 : compressibility (non-interacting) * n in SI
|
||||
! * K : compressibility * n in SI
|
||||
! * BM : bulk modulus in SI
|
||||
! * U_IN : internal energy per electron in SI
|
||||
! * U_EX : excess internal energy per electron / k_B T in SI
|
||||
! * F_FR : Helmholtz free energy per electron in SI
|
||||
!
|
||||
! Note: We write the ground-state energy E = E_0 + E_X + E_C as
|
||||
!
|
||||
! E = E_HF + E_C
|
||||
!
|
||||
! and use eq. (2.56) of ref. (1) to compute the derivatives of E_HF
|
||||
!
|
||||
! E_HF = Ad / rs^2 - Bd / rs
|
||||
! D_EHF_1 = -2 * Ad / rs^3 + Bd / rs^2
|
||||
! D_EHF_2 = 6 * Ad / rs^4 - 2 * Bd / rs^3
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 11 Jun 2020
|
||||
!
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ONE,TWO,THREE,FOUR,SIX, &
|
||||
HALF,THIRD,FOURTH
|
||||
USE CONSTANTS_P1, ONLY : K_B
|
||||
USE CONSTANTS_P2, ONLY : HARTREE
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
USE UTILITIES_1, ONLY : ALFA
|
||||
USE PLASMA_SCALE
|
||||
USE CORRELATION_ENERGIES
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 6) :: EC_TYPE
|
||||
!
|
||||
REAL (WP) :: RS,T
|
||||
REAL (WP) :: P,MU,K0,K,U_IN,U_EX,F_FR
|
||||
REAL (WP) :: C_3D,E_C,D_EC_1,D_EC_2,E_HF,D_EHF_1,D_EHF_2
|
||||
REAL (WP) :: ALPHA,A3,B3,RS2,RS3,RS4,BM
|
||||
REAL (WP) :: NONID,DEGEN
|
||||
REAL (WP) :: A0,B0,C0,D0,G4
|
||||
!
|
||||
ALPHA=ALFA('3D') !
|
||||
A3=0.6E0_WP/ALPHA ! ref. (1) table (2.1)
|
||||
B3=1.5E0_WP*PI_INV/ALPHA ! idem
|
||||
!
|
||||
RS2=RS*RS !
|
||||
RS3=RS2*RS !
|
||||
RS4=RS3*RS !
|
||||
!
|
||||
! Computing the plasma scale parameters
|
||||
!
|
||||
CALL PLASMON_SCALE(RS,T,ONE,NONID,DEGEN) !
|
||||
!
|
||||
G4=NONID**(FOURTH) !
|
||||
!
|
||||
! Slattery-Doolen-DeWitt parameters ! ref (3) eq. (2.12)
|
||||
!
|
||||
A0=-0.89752E0_WP !
|
||||
B0= 0.94544E0_WP ! 1 < NONID < 160
|
||||
C0= 0.17954E0_WP !
|
||||
D0=-0.80049E0_WP !
|
||||
!
|
||||
! Computing the correlation energy and its derivatives
|
||||
!
|
||||
CALL DERIVE_EC_3D(EC_TYPE,1,5,RS,T,D_EC_1,D_EC_2) !
|
||||
E_C=EC_3D(EC_TYPE,1,RS,T)*HALF*HARTREE !
|
||||
!
|
||||
! Computation of the derivatives of E_HF
|
||||
!
|
||||
E_HF = A3/RS2 - B3/RS !
|
||||
D_EHF_1=- TWO*A3/RS3 + B3/RS2 !
|
||||
D_EHF_2=- SIX*A3/RS4 - TWO*B3/RS3 !
|
||||
!
|
||||
P=-THIRD*RS*(D_EHF_1+D_EC_1) * HALF*HARTREE ! ref. (1) eq. (1.137)
|
||||
MU=E_HF+E_C + P ! ref. (1) eq. (1.138)
|
||||
K0=1.5E0_WP*ALPHA*ALPHA*RS2 ! ref. (2) eq. (2.17)
|
||||
BM=THIRD*RS*( THIRD*RS*(D_EHF_2+D_EC_2) - & !
|
||||
TWO*THIRD*RS*(D_EHF_1+D_EC_1) & ! ref. (1) eq. (1.139)
|
||||
) * HALF*HARTREE !
|
||||
K=ONE/BM ! ref. (1) eq. (1.140)
|
||||
!
|
||||
U_IN=K_B*T*(A0*NONID + B0*G4 + & ! ref. (3) eq. (2.8)
|
||||
C0/G4 +D0 + 1.5E0_WP) ! and (2.11)
|
||||
U_EX=A0*NONID + B0*G4 + C0/G4 + D0 ! ref. (3) eq. (2.11)
|
||||
F_FR=K_B*T*(A0*NONID + FOUR*(B0*G4 - C0/G4) + & !
|
||||
(D0+THREE)*DLOG(NONID) - & ! ref. (3) eq. (2.14)
|
||||
(A0+FOUR*B0-FOUR*C0+1.135E0_WP)) !
|
||||
!
|
||||
END SUBROUTINE THERMODYNAMICS_3D
|
||||
!
|
||||
END MODULE THERMODYNAMIC_QUANTITIES
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,81 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE PLASMON_DISP_EXACT
|
||||
!
|
||||
! This module computes the exact plasmon dispersion
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE PLASMON_DISP_EX(IS,IC,YB,ENE_P_Q)
|
||||
!
|
||||
! This subroutine computes exact plasmon dispersion from the
|
||||
! dielectric function
|
||||
!
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * YB : q / k_F
|
||||
! * ENE_P_Q : plasmon energy at q in SI
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 16 Dec 2020
|
||||
!
|
||||
!
|
||||
USE Q_GRID
|
||||
!
|
||||
USE REAL_NUMBERS, ONLY : ZERO
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
!
|
||||
USE CALCULATORS_3
|
||||
USE RE_EPS_0_TREATMENT
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER, PARAMETER :: N_ZERO = 10000 ! max number of zeros
|
||||
!
|
||||
INTEGER, INTENT(OUT) :: IS,IC
|
||||
!
|
||||
INTEGER :: IQ
|
||||
INTEGER :: NB
|
||||
INTEGER :: IB
|
||||
!
|
||||
REAL (WP), INTENT(OUT) :: ENE_P_Q(N_ZERO)
|
||||
REAL (WP), INTENT(OUT) :: YB(N_ZERO)
|
||||
!
|
||||
REAL (WP) :: Y,X
|
||||
REAL (WP) :: ZERO_B(N_ZERO)
|
||||
REAL (WP) :: QS,QC
|
||||
!
|
||||
REAL (WP) :: FLOAT
|
||||
!
|
||||
! Initialisation of ENE_P_Q
|
||||
!
|
||||
DO IB = 1,N_ZERO !
|
||||
ENE_P_Q(IB) = ZERO !
|
||||
END DO !
|
||||
!
|
||||
! Extract the upper branch of Re[ eps(q,omega) ] = 0
|
||||
! which is contained in unit IO_ZE
|
||||
!
|
||||
CALL SELECT_BRANCH(2,NB,YB,ZERO_B) !
|
||||
!
|
||||
! Get the q-bounds
|
||||
!
|
||||
CALL COMPUTE_QBOUNDS_3D(NB,YB,ZERO_B,IS,IC,QS,QC) !
|
||||
!
|
||||
! Storing the plasmon energy in SI
|
||||
!
|
||||
DO IB = IS,IC !
|
||||
ENE_P_Q(IB) = ZERO_B(IB) * EF_SI !
|
||||
END DO !
|
||||
!
|
||||
END SUBROUTINE PLASMON_DISP_EX
|
||||
!
|
||||
END MODULE PLASMON_DISP_EXACT
|
|
@ -0,0 +1,215 @@
|
|||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE PLASMON_ENE_SI
|
||||
!
|
||||
! This modules defines the plasmon energy
|
||||
!
|
||||
! --> SI version <--
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: ENE_P_SI
|
||||
!
|
||||
END MODULE PLASMON_ENE_SI
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE PLASMON_ENE_EV
|
||||
!
|
||||
! This modules defines the plasmon energy
|
||||
!
|
||||
! --> eV version <--
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: ENE_P_EV
|
||||
!
|
||||
END MODULE PLASMON_ENE_EV
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE PLASMON_SCALE_P
|
||||
!
|
||||
! This modules defines the plasmon scale parameters
|
||||
!
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP) :: NONID,DEGEN
|
||||
!
|
||||
END MODULE PLASMON_SCALE_P
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE PLASMON_ENE
|
||||
!
|
||||
! This modules computes the plasmon energy
|
||||
!
|
||||
! --> SI version <--
|
||||
!
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_PLASMON_ENE
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : RS,DMN
|
||||
USE ENE_CHANGE, ONLY : EV
|
||||
!
|
||||
USE PLASMON_ENE_SI
|
||||
USE PLASMON_ENE_EV
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CALL PLASMON_ENERGY(DMN,RS,ENE_P_SI) !
|
||||
!
|
||||
ENE_P_EV = ENE_P_SI / EV !
|
||||
!
|
||||
END SUBROUTINE CALC_PLASMON_ENE
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE PLASMON_ENERGY(DMN,RS,ENE_P_SI)
|
||||
!
|
||||
! This subroutine calculates the plasmon energy at q = 0
|
||||
! for all dimensionalities
|
||||
!
|
||||
! Important note: In 2D and 1D, the plasmon energy is q-dependent. We
|
||||
! have removed here this q-dependency. In reality, OMEGA_P is zero
|
||||
! in 2D and 1D for q = 0
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * DMN : problem dimension
|
||||
! DIM = '3D'
|
||||
! DIM = '2D'
|
||||
! DIM = '1D'
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * ENE_P_SI : plasmon energy in J
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 17 Nov 2020
|
||||
!
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
USE REAL_NUMBERS, ONLY : HALF
|
||||
USE CONSTANTS_P1, ONLY : H_BAR,M_E,E,EPS_0
|
||||
USE FERMI_SI, ONLY : KF_SI
|
||||
USE PI_ETC, ONLY : PI_INV
|
||||
USE UTILITIES_1, ONLY : RS_TO_N0
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER (LEN = 2) :: DMN
|
||||
!
|
||||
REAL (WP) :: RS
|
||||
REAL (WP) :: ENE_P_SI
|
||||
REAL (WP) :: COEF,N0
|
||||
!
|
||||
REAL (WP) :: SQRT
|
||||
!
|
||||
COEF = E * E / (M_E * EPS_0) !
|
||||
!
|
||||
N0 = RS_TO_N0(DMN,RS) !
|
||||
!
|
||||
IF(DMN == '3D') THEN !
|
||||
!
|
||||
!.......... 3D case ..........
|
||||
!
|
||||
ENE_P_SI = H_BAR * SQRT(COEF * N0) !
|
||||
!
|
||||
ELSE IF(DMN == '2D') THEN !
|
||||
!
|
||||
!.......... 2D case ..........
|
||||
!
|
||||
ENE_P_SI = H_BAR * SQRT(HALF * COEF * N0) ! * sqrt(q)
|
||||
!
|
||||
ELSE IF(DMN == '1D') THEN !
|
||||
!
|
||||
!.......... 1D case ..........
|
||||
!
|
||||
ENE_P_SI = H_BAR * SQRT(HALF * HALF * COEF * PI_INV * N0) ! * q * sqrt(Vc)
|
||||
!
|
||||
END IF !
|
||||
!
|
||||
END SUBROUTINE PLASMON_ENERGY
|
||||
!
|
||||
END MODULE PLASMON_ENE
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
MODULE PLASMA_SCALE
|
||||
!
|
||||
USE ACCURACY_REAL
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE CALC_PLASMA_SCALE
|
||||
!
|
||||
USE MATERIAL_PROP, ONLY : RS
|
||||
USE EXT_FIELDS, ONLY : T
|
||||
USE PLASMA, ONLY : ZION
|
||||
!
|
||||
USE PLASMON_SCALE_P
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CALL PLASMON_SCALE(RS,T,ZION,NONID,DEGEN) !
|
||||
!
|
||||
END SUBROUTINE CALC_PLASMA_SCALE
|
||||
!
|
||||
!=======================================================================
|
||||
!
|
||||
SUBROUTINE PLASMON_SCALE(RS,T,ZION,NONID,DEGEN)
|
||||
!
|
||||
! This subroutine calculates the plasmon scale parameters
|
||||
!
|
||||
! Input parameters:
|
||||
!
|
||||
! * RS : Wigner-Seitz radius (in units of a_0)
|
||||
! * T : temperature in SI
|
||||
! * ZION : atomic number of the ions of the plasma
|
||||
!
|
||||
! Output variables :
|
||||
!
|
||||
! * NONID : nonideality of plasmon --> dimensionless
|
||||
! * DEGEN : plasmon degeneracy
|
||||
!
|
||||
!
|
||||
! Author : D. Sébilleau
|
||||
!
|
||||
! Last modified : 25 Sep 2020
|
||||
!
|
||||
!
|
||||
!
|
||||
USE CONSTANTS_P1, ONLY : BOHR,E,EPS_0,K_B
|
||||
USE FERMI_SI, ONLY : EF_SI
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
REAL (WP), INTENT(IN) :: RS,T,ZION
|
||||
REAL (WP), INTENT(OUT) :: NONID,DEGEN
|
||||
!
|
||||
NONID = EF_SI / (K_B * T) !
|
||||
DEGEN = ZION * ZION * E * E / (EPS_0 * K_B * T * RS * BOHR) !
|
||||
!
|
||||
END SUBROUTINE PLASMON_SCALE
|
||||
!
|
||||
END MODULE PLASMA_SCALE
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue