Skip to content

Commit

Permalink
Added new publication in README; added G sum to e-e term.
Browse files Browse the repository at this point in the history
  • Loading branch information
nakib committed Oct 22, 2024
1 parent f5466aa commit 2ade68c
Show file tree
Hide file tree
Showing 5 changed files with 102 additions and 42 deletions.
31 changes: 16 additions & 15 deletions README.org
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,22 @@ Using /ab initio/ electron-phonon and a fully wave vector and electron band/phon
- anisotropic and isotropic Eliashberg spectral function and
- phonon-mediated superconducting transition temperature.

To date (Oct 8, 2024), ~elphbolt~ / ~superconda~ has been used in the following works:
| material(s) | physics probed | publication |
|--------------------------------+-------------------------------------------------------------------------------------------------------+-----------------------------------------|
| TiSe_{2} | phonon transport manipulation via reversible charge density wave melting | [[https://www.nature.com/articles/s41699-024-00501-9][npj 2D mat. & app. 8, 64]] |
| MoS_{2}, silicene, & AlN | electron drag enhancement of phonon thermal conductivity in 2D materials | [[https://pubs.acs.org/doi/full/10.1021/acs.nanolett.4c02097][Nano Lett. 20, 26]] |
| Ti_{2}OX_{2} (X = F, Cl) MOene | thermoelectric performance | [[https://doi.org/10.1063/5.0196117][J. Appl. Phys. 135, 125106]] |
| Si, BAs, LiF, & GaN | new models of phonon-isotope interaction and temperature dependent 3+4ph limited thermal conductivity | [[https://doi.org/10.1103/PhysRevB.109.165201][Phys. Rev. B 109, 165201]] |
| Si nanowires | effect of nanostructuring on drag and thermoelectric figure of merit, ZT | [[https://www.sciencedirect.com/science/article/pii/S0017931024002163][Intl. J. Heat & Mass Trans. 225, 125385]] |
| GaN | 3+4 phonons and thin-film scattering limited thermal conductivity | [[https://journals.aps.org/prb/abstract/10.1103/PhysRevB.108.235313][Phys. Rev. B 108, 235313]] |
| GaN & AlN | drag | [[https://journals.aps.org/prb/abstract/10.1103/PhysRevB.107.245202][Phys. Rev. B 107, 245202]] |
| MgB_{2} | superconductivity enhancement | [[https://journals.aps.org/prb/abstract/10.1103/PhysRevB.107.184518][Phys. Rev. B 107, 184518]] |
| BAs | drag | [[https://doi.org/10.1103/PhysRevB.107.L081202][Phys. Rev. B 107, L081202]] |
| Diamond | drag | [[https://doi.org/10.1016/j.mtphys.2022.100740][Mat. Tod. Phys 27, 100740]] |
| Si | drag | [[https://www.nature.com/articles/s41524-022-00710-0][npj Comp. Mat. 8, 28]] |

To date (Oct 18, 2024), ~elphbolt~ / ~superconda~ has been used in the following works:
| material(s) | physics probed | publication |
|------------------------------------+-------------------------------------------------------------------------------------------------------+-----------------------------------------|
| wGaN | thermal analysis of GaN-based photonic membranes for optoelectronics | [[https://arxiv.org/abs/2410.12515][preprint]] |
| Surface halogenated Ti_{2}O Moenes | drag enhancement of thermoelectric transport | [[https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4954648][preprint]] |
| TiSe_{2} | phonon transport manipulation via reversible charge density wave melting | [[https://www.nature.com/articles/s41699-024-00501-9][npj 2D mat. & app. 8, 64]] |
| MoS_{2}, silicene, & AlN | electron drag enhancement of phonon thermal conductivity in 2D materials | [[https://pubs.acs.org/doi/full/10.1021/acs.nanolett.4c02097][Nano Lett. 20, 26]] |
| Ti_{2}OX_{2} (X = F, Cl) MOene | thermoelectric performance | [[https://doi.org/10.1063/5.0196117][J. Appl. Phys. 135, 125106]] |
| Si, BAs, LiF, & wGaN | new models of phonon-isotope interaction and temperature dependent 3+4ph limited thermal conductivity | [[https://doi.org/10.1103/PhysRevB.109.165201][Phys. Rev. B 109, 165201]] |
| Si nanowires | effect of nanostructuring on drag and thermoelectric figure of merit, ZT | [[https://www.sciencedirect.com/science/article/pii/S0017931024002163][Intl. J. Heat & Mass Trans. 225, 125385]] |
| wGaN | 3+4 phonons and thin-film scattering limited thermal conductivity | [[https://journals.aps.org/prb/abstract/10.1103/PhysRevB.108.235313][Phys. Rev. B 108, 235313]] |
| wGaN & wAlN | drag | [[https://journals.aps.org/prb/abstract/10.1103/PhysRevB.107.245202][Phys. Rev. B 107, 245202]] |
| MgB_{2} | superconductivity enhancement | [[https://journals.aps.org/prb/abstract/10.1103/PhysRevB.107.184518][Phys. Rev. B 107, 184518]] |
| BAs | drag | [[https://doi.org/10.1103/PhysRevB.107.L081202][Phys. Rev. B 107, L081202]] |
| Diamond | drag | [[https://doi.org/10.1016/j.mtphys.2022.100740][Mat. Tod. Phys 27, 100740]] |
| Si | drag | [[https://www.nature.com/articles/s41524-022-00710-0][npj Comp. Mat. 8, 28]] |

Stylistically, ~elphbolt~ is designed to be simple, small, fast, and extensible. It uses an object-based procedural style, which allows fast development, while resulting in a rather compact source (~ 10k lines of code, generated using David A. Wheeler's ~SLOCCount~). The symmetries of the crystal are fully exploited and the transport active Fermi window is used to allow the sampling of extremely fine wave vector meshes needed for accurate solutions of the BTEs and Eliashberg equations. Parallelism is achieved through modern Fortran's intrinsic ~coarrays~ feature that is fully supported by recent versions of both the ~gcc~ and ~intel~ compilers.

Expand Down
7 changes: 5 additions & 2 deletions app/elphbolt.f90
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,17 @@ program elphbolt
use wannier_module, only: wannier
use bte_module, only: bte
use bz_sums, only: calculate_dos, calculate_qTF, calculate_el_dos_fermi, calculate_el_Ws
use interactions, only: calculate_gReq, calculate_gkRp, calculate_3ph_interaction, &
use interactions, only: calculate_gReq, calculate_gkRp, &
calculate_eph_interaction_ibzq, calculate_eph_interaction_ibzk, &
calculate_echimp_interaction_ibzk
calculate_echimp_interaction_ibzk!, calculate_3ph_interaction
use phonon_defect_module, only: phonon_defect
use Green_function, only: calculate_retarded_phonon_D0
use nano_module, only: nanostructure
use bte_nano_module, only: bte_nano
use screening_module, only: calculate_RPA_dielectric_3d_G0_scratch

!DBG
use ph_ph_module, only: calculate_3ph_interaction=>calculate_3ph_interaction_permsym

implicit none

Expand Down
13 changes: 9 additions & 4 deletions fpm.toml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@ name="superconda"
source-dir="app"
main="superconda.f90"

[[executable]]
name="test_V_perm_symm"
source-dir="app"
main="test_V_perm_symm.f90"

[[executable]]
name = "screening_comparison"
source-dir="src"
Expand Down Expand Up @@ -79,7 +84,7 @@ main = "screening_comparison.f90"
#source-dir="test"
#main = "check_interactions_symmetries.f90"
#
#[[test]]
#name = "bte_regression"
#source-dir="test"
#main = "bte_regression.f90"
[[test]]
name = "bte_regression"
source-dir="test"
main = "bte_regression.f90"
45 changes: 30 additions & 15 deletions src/interactions.f90
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,6 @@ pure real(r64) function gchimp2(el, crys, qcrys, evec_k, evec_kp)
gchimp2 = prefac*overlap*Gsum !ev^2
end function gchimp2

!TODO Might need to do this for G, G' /= 0
pure real(r64) function gCoul2(el, crys, qcrys, evec_k, evec_kp)
!! Function to calculate the Thomas-Fermi screened
!! squared electron-electron vertex.
Expand All @@ -124,21 +123,37 @@ pure real(r64) function gCoul2(el, crys, qcrys, evec_k, evec_kp)
type(electron), intent(in) :: el
real(r64), intent(in) :: qcrys(3)
complex(r64), intent(in) :: evec_k(:), evec_kp(:)

real(r64) :: qcart(3), prefac, overlap, qmag

prefac = 1.0e18_r64/crys%volume**2/qe**2
real(r64) :: qcart(3), prefac, overlap
real(r64) :: Gsum, Gplusq(3)
integer :: ik1, ik2, ik3

!Magnitude of q-vector
qmag = twonorm(matmul(crys%reclattvecs, qcrys))
!TODO: Shouldn't I use crys%epsiloninf instead using Sanborn's prescription?
prefac = 1.0e18_r64/crys%volume**2*qe**2/(perm0*crys%epsilon0)**2

!Transfer wave vector in Cartesian coordinates
qcart = matmul(crys%reclattvecs, qcrys)

!This is [U(k')U^\dagger(k)]_nm squared
!(Recall that the electron eigenvectors came out daggered from el_wann_epw.)
overlap = (abs(dot_product(evec_kp, evec_k)))**2

!TODO: Shouldn't I use crys%epsiloninf instead using Sanborn's prescription?
gCoul2 = prefac*overlap* &
(qe**2/perm0/crys%epsilon0/(qmag**2 + crys%qTF**2))**2 !eV^2
Gsum = 0.0_r64
!Use a safe range for the G vector sums
do ik1 = -3, 3
do ik2 = -3, 3
do ik3 = -3, 3
Gplusq = ( ik1*crys%reclattvecs(:, 1) &
+ ik2*crys%reclattvecs(:, 2) &
+ ik3*crys%reclattvecs(:, 3) ) + qcart

Gsum = Gsum + &
1.0_r64/(twonorm(Gplusq)**2 + crys%qTF**2)**2 !eV^2
end do
end do
end do

gCoul2 = Gsum*prefac*overlap
end function gCoul2

pure real(r64) function Vm2_3ph(ev1_s1, ev2_s2, ev3_s3, &
Expand Down Expand Up @@ -2443,8 +2458,9 @@ subroutine calculate_Xee_OTF(el, num, istate1, crys, X, &
!q \equiv k1 - k3
q_vec = vec_sub(k1_vec, k3_vec, el%wvmesh, crys%reclattvecs)

!!$ !q = \equiv k1 - k3, without Umklapp, fractional units
!!$ q_frac_noU = k1_vec%frac - k3_vec%frac
!DBG
!q = \equiv k1 - k3, without Umklapp, fractional units
!q_frac_noU = k1_vec%frac - k3_vec%frac

do n3 = 1, el%numbands
!Electron 3 energy
Expand Down Expand Up @@ -2482,8 +2498,6 @@ subroutine calculate_Xee_OTF(el, num, istate1, crys, X, &
!Squared matrix element
g2 = gCoul2(el, crys, q_vec%frac, &
el%evecs_irred(ik1, n1, :), el%evecs(ik3, n3, :))
!!$ g2 = gCoul2(el, crys, q_frac_noU, &
!!$ el%evecs_irred(ik1, n1, :), el%evecs(ik3, n3, :))

!Fermi function of electron 2
fermi2 = Fermi(en2, el%chempot, crys%T)
Expand All @@ -2492,6 +2506,7 @@ subroutine calculate_Xee_OTF(el, num, istate1, crys, X, &
!Electron 4 energy
en4 = el%ens(ik4, n4)

!This does not seem necessary but can be done anyway for numerical savings.
!Apply energy window to electron 4
if(abs(en4 - el%enref) > el%fsthick) cycle

Expand All @@ -2508,8 +2523,8 @@ subroutine calculate_Xee_OTF(el, num, istate1, crys, X, &
ik2, n2, el%wvmesh, el%simplex_map, &
el%simplex_count, el%simplex_evals)

!Temperature dependent occupation factor
!f1.f2.(1 - f3)(1 - f4)/[f1(1 - f1)]
!!$ !Temperature dependent occupation factor
!f1.f2.(1 - f3)(1 - f4)/[f1(1 - f1)] simplified
occup_fac = fermi2*(1.0_r64 - &
fermi3*(1.0_r64 - exp(beta*(en3 - en1))))* &
(1.0_r64 - fermi4)
Expand Down
48 changes: 42 additions & 6 deletions src/screening_comparison.f90
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,19 @@ program screening_comparison
real(r64), allocatable :: el_ens_parabolic(:), qmags(:)

!concentration and temperature
real(r64), parameter :: conc = 0.39054925E+19 !cm^-3
!real(r64), parameter :: conc = 0.39054925E+19 !cm^-3
!real(r64), parameter :: conc = 4.75769e18 !3.7095e19 !cm^-3
!real(r64), parameter :: conc = 3.63325e19 !cm^-3
real(r64), parameter :: conc = 0.54269133E+20 !0.82378518E+20 !3.70938e19 !cm^-3
!real(r64), parameter :: conc = 0.74965325E+20 !cm^-3
real(r64), parameter :: T = 300.0 !1.0 !K

!real(r64), parameter :: m_eff = 0.267*me !Si
!real(r64), parameter :: epsiloninf = 13.0619569 !From dfpt

!wGaN
!real(r64), parameter :: m_eff = 0.2*me
real(r64), parameter :: m_eff = 0.22*me
real(r64), parameter :: m_eff = 0.259*me !0.2*me
!real(r64), parameter :: m_eff = 0.22*me
real(r64), parameter :: epsiloninf = 5.8967622666666664 !5.8968
!real(r64), parameter :: epsilon0 = ?

Expand All @@ -38,8 +41,8 @@ program screening_comparison
real(r64), allocatable :: imeps(:, :), reeps(:, :), Omegas(:)

if(this_image() == 1) then
write(*, '(A)') 'Screening test for Si'
!write(*, '(A)') 'Screening test for wGaN'
!write(*, '(A)') 'Screening test for Si'
write(*, '(A)') 'Screening test for wGaN'
!write(*, '(A)') 'Screening test for GaAs'
write(*, '(A, I5)') 'Number of coarray images = ', num_images()
end if
Expand Down Expand Up @@ -71,7 +74,9 @@ program screening_comparison
!TODO Replace it with the more general expression involving
!energy integral over f0(1 - f0).
kTF = 1.0/kF/bohr2nm/pi**2
print*, 'Thomas-Fermi screening wave vector = ', kTF, ' nm^-1'
print*, 'T << T_F Thomas-Fermi = ', kTF, ' nm^-1'

print*, 'Better Thomas-Fermi: ', Thomas_Fermi(conc, m_eff, beta, mu, epsilon = 1.0_r64), ' nm^-1'

!Create wave vector mesh
numq = 400
Expand Down Expand Up @@ -148,6 +153,37 @@ real(r64) function chempot(conc, m_eff, beta, eF)
write(*, "(A, 1E16.8, A)") 'calculated chem. pot. in parabolic model = ', chempot, ' eV'
end function chempot

real(r64) function Thomas_Fermi(conc, m_eff, beta, mu, epsilon)
!!Calculate the Thomas-Fermi screening wave vector
!!
!!
!! conc Carrier concentration in cm^-3
!! m_eff Effective mass in Kg
!! beta Inverse temperature energy in eV^-1
!! mu Chemical potential in eV
!! epsilon Background dielectric

real(r64), intent(in) :: conc, m_eff, beta, mu, epsilon

integer(i64), parameter :: N = 100000
real(r64) :: prefac, upper, f0(N)
real(r64), allocatable :: ens(:)

prefac = 0.5_r64*qe/pi**2/perm0*(2.0_r64*m_eff)**(1.5_r64)/(1.0e-12_r64*hbar)**3*beta*&
qe**1.5/epsilon

upper = mu + 10.0 !eV, to be used as inifinity of Fermi integral

call linspace(ens, 0.0_r64, upper, N)

f0 = 1.0_r64/(exp(beta*(ens - mu)) + 1.0_r64)

call compsimps(sqrt(ens)*f0*(1.0_r64 - f0), ens(2) - ens(1), Thomas_Fermi)
Thomas_Fermi = sqrt(prefac*Thomas_Fermi)*1.0e-9_r64 !nm^-1

!write(*, "(A, 1E16.8, A)") 'Thomas-Fermi wave vector = ', Thomas_Fermi, ' nm^-1'
end function Thomas_Fermi

real(r64) function fdi(j, eta, upper)
!! Fermi-Dirac integral for positive j

Expand Down

0 comments on commit 2ade68c

Please sign in to comment.