MsSpec-DFM/New_libraries/DFM_library/VARIOUS_FUNCTIONS_LIBRARY/coulomb_log.f90

200 lines
6.7 KiB
Fortran
Raw Normal View History

2022-02-02 16:19:10 +01:00
!
!=======================================================================
!
MODULE COULOMB_LOG
!
! This module provides Coulomb logarithms
!
USE ACCURACY_REAL
!
CONTAINS
!
!
!=======================================================================
!
FUNCTION COU_LOG(I_CL,DMN,T,RS)
!
! This function computes the Coulomb logarithm Log(Gamma)
!
! References: (1) F. L. Hinton, chapter 1.5, in "Handbook of Plasma Physics",
! Eds. M. N. Rosenbluth and R. Z. Sagdeev,
! Vol.1 (1983)
! (2) https://ocw.mit.edu/courses/nuclear-engineering/
! 22-611j-introduction-to-plasma-physics-i-fall-2006/
! readings/chap3.pdf
! (3) http://homepages.cae.wisc.edu/~callen/chap2.pdf
! (4) https://www.nrl.navy.mil/ppd/sites/www.nrl.navy.mil.ppd/
! files/pdfs/NRL_FORMULARY_18.pdf
!
! Input parameters:
!
! * I_CL : Switch to compute the Coulomb logarithm
! I_CL = 1 --> using reference (1)
! I_CL = 2 --> using reference (2)
! I_CL = 3 --> using reference (3)
! I_CL = 4 --> using reference (4)
! I_CL = 5 --> using reference (5)
! * DMN : dimension of the system
! DMN = '3D'
! DMN = '2D'
! DMN = '1D'
! * T : system temperature in SI
! * RS : Wigner-Seitz radius (in units of a_0)
!
!
! Output parameters:
!
! * COU_LOG : Coulomb logarithm Log(Gamma)
!
!
! Author : D. Sébilleau
!
! Last modified : 11 Jun 2020
!
!
USE REAL_NUMBERS, ONLY : ONE,TWO,THIRD
USE CONSTANTS_P1, ONLY : H_BAR,M_E,E,EPS_0,COULOMB,K_B
USE PI_ETC, ONLY : PI_INV
USE SCREENING_VEC, ONLY : DEBYE_VECTOR
USE ENE_CHANGE, ONLY : EV
!
IMPLICIT NONE
!
CHARACTER*2 DMN
!
INTEGER I_CL
!
REAL*8 T,RS
REAL*8 COU_LOG,G,LG
REAL*8 KD_SI,V_TH,T_TH,LD,B0,B1,B2,BM,N0
!
! Computing the Debye vector
!
CALL DEBYE_VECTOR(DMN,T,RS,KD_SI) !
!
V_TH=DSQRT(TWO*K_B*T/M_E) ! thermal velocity in 3D
T_TH=K_B*T/EV ! temperature in eV
!
IF(I_CL.EQ.1) THEN !
!
LD=ONE/KD_SI ! Spitzer value
B0=E*E*THIRD/(K_B*T) !
COU_LOG=DLOG(LD/B0) ! ref. (2) eq. (5)
!
ELSE IF(I_CL.EQ.2) THEN !
!
G=DSQRT(EPS_0*T/(N0*E*E))*M_E*V_TH*V_TH/COULOMB ! ref. (2) eq. (3.63)
COU_LOG=DLOG(G) !
!
ELSE IF(I_CL.EQ.3) THEN !
!
B1=KD_SI*KD_SI*PI_INV/(12.0E0_WP*N0) !
B2=H_BAR/(TWO*M_E*V_TH) !
BM=MAX(B1,B2) ! ref. (3) eq. (2.11)
G=KD_SI/BM !
COU_LOG=DLOG(G) !
!
ELSE IF(I_CL.EQ.4) THEN !
!
LG=23.5E0_WP - DLOG(DSQRT(N0)*(T_TH**(-1.25E0_WP))) - & !
DSQRT(1.0E-5_WP + (DLOG(T_TH)-TWO)**2 / 16.0E0_WP) !
COU_LOG=LG !
!
ELSE IF(I_CL.EQ.5) THEN !
!
CONTINUE
!
END IF !
!
END FUNCTION COU_LOG
!
!
!=======================================================================
!
FUNCTION DALI_CL_3D(X)
!
! This function computes Daligault' expression of the Coulomb logarithm
!
!
! Reference: (1) J. Daligault, Phys. Rev. Lett. 119, 045002 (2017)
!
!
! Input parameters:
!
! * X : dimensionless factor --> X = q / (2 * k_F)
!
!
! Note: It is defined as
!
! / A 3
! | q
! CL = | ---------------- dq with q the screening vector
! | 2 2 2 s
! / 0 ( q + q )
! s
! _____________
! /
! and A ~ k \ / 4 Theta / 3 with Theta the degeneracy parameter
! F \/
!
!
! We use here the fact that CL writes
! _ _
! | 2 | A
! | q |
! 1 | s ( 2 2 ) |
! --- | ----------- + Log( q + q ) |
! 2 | 2 2 ( s ) |
! | q + q |
! |_ s _| 0
!
!
! Author : D. Sébilleau
!
!
! Last modified : 12 Oct 2020
!
!
USE MATERIAL_PROP, ONLY : RS
USE EXT_FIELDS, ONLY : T
!
USE REAL_NUMBERS, ONLY : ONE,FOUR,HALF,THIRD
USE FERMI_SI, ONLY : KF_SI
!
USE PLASMON_SCALE_P, ONLY : NONID
USE SCREENING_TYPE
USE SCREENING_VEC
!
IMPLICIT NONE
!
REAL (WP), INTENT(IN) :: X
REAL (WP) :: DALI_CL_3D
REAL (WP) :: TH
REAL (WP) :: KS,DQT2,NUM,DEN
REAL (WP) :: INT_0,INT_A
!
REAL (WP) :: LOG
!
TH = ONE / NONID ! Theta
DQT2 = KF_SI * KF_SI * FOUR * THIRD * TH ! (upper integration bound)^2
!
! 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 !
!
NUM = KS * KS !
DEN = NUM + DQT2 !
!
INT_0 = HALF * ( ONE + LOG(NUM) ) !
INT_A = HALF * ( NUM / DEN + LOG(DEN) ) !
!
DALI_CL_3D = INT_A - INT_0 !
!
END FUNCTION DALI_CL_3D
!
END MODULE COULOMB_LOG