From 2ade68c33dc6aa6000e327be1ad8ef369812c606 Mon Sep 17 00:00:00 2001 From: "Nakib H. Protik" Date: Tue, 22 Oct 2024 10:40:49 +0200 Subject: [PATCH] Added new publication in README; added G sum to e-e term. --- README.org | 31 ++++++++++++----------- app/elphbolt.f90 | 7 ++++-- fpm.toml | 13 +++++++--- src/interactions.f90 | 45 ++++++++++++++++++++++----------- src/screening_comparison.f90 | 48 +++++++++++++++++++++++++++++++----- 5 files changed, 102 insertions(+), 42 deletions(-) diff --git a/README.org b/README.org index 3ff15db..7088411 100644 --- a/README.org +++ b/README.org @@ -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. diff --git a/app/elphbolt.f90 b/app/elphbolt.f90 index 777c1ca..a65a3f7 100644 --- a/app/elphbolt.f90 +++ b/app/elphbolt.f90 @@ -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 diff --git a/fpm.toml b/fpm.toml index 9b33279..a64e5e7 100644 --- a/fpm.toml +++ b/fpm.toml @@ -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" @@ -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" diff --git a/src/interactions.f90 b/src/interactions.f90 index 326f002..6dfa3f1 100644 --- a/src/interactions.f90 +++ b/src/interactions.f90 @@ -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. @@ -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, & @@ -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 @@ -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) @@ -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 @@ -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) diff --git a/src/screening_comparison.f90 b/src/screening_comparison.f90 index 7e1ee0e..40c36ba 100644 --- a/src/screening_comparison.f90 +++ b/src/screening_comparison.f90 @@ -17,7 +17,10 @@ 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 @@ -25,8 +28,8 @@ program screening_comparison !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 = ? @@ -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 @@ -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 @@ -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