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