当前位置: 首页 > news >正文

EPWpy教程:一个脚本完成能带、声子、电声耦合、弛豫时间计算

图片

EPWpy 是一个开源 python 代码,它包装了 EPW 代码以进行自动计算,可使用 Quantum Espresso 和 EPW 自动执行 DFT+EPW 计算。同时还提供了一系列可视化实用程序,用于绘制各种数据和结果输出。

EPWpy安装可参考已有教程

EPWpy 安装教程

官网:https://epwpy.org

本文参考:https://epwpy.org/doc/notebooks/transport-v1.2.html

在本文中,使用从头开始玻尔兹曼输运方程(BTE)计算硅的声子有限载流子迁移率。基于jupyter notebook进行代码的分部步进运行,如需一次运行,请将全部代码和操作指令整合为单一脚本后运行。

定义环境。需配置MaterialsProjec API

import numpy as npimport matplotlib.pyplot as pltfrom matplotlib import rcimport time, sys, osimport  pymatgen#from pymatgen.ext.matproj import MPResterfrom mp_api.client import MPRestermpr = MPRester("  ")import EPWpyfrom EPWpy import EPWpyfrom EPWpy.plotting import plot_bandsimport plotly.ioQE='/home/software/qe-7.1/bin'

图片

定义基本函数

plotly.io.renderers.default = "sphinx_gallery"silicon=EPWpy.EPWpy({'prefix':'si',                     'calculation':'\'scf\'',                     'structure_mp':"mp-149",                     'ecutwfc':'40',                     'celldm(1)':'10.262',                     'pseudo_auto':True,                    },                    code=QE,env='mpirun')silicon.run_serial=True# Summary
pseudopot=silicon.__dict__['pw_atomic_species']['pseudo'][0]print('Pseudopotential:', silicon.__dict__['pw_atomic_species']['pseudo'][0])print('Pseudopotential directory:', silicon.__dict__['pw_control']['pseudo_dir'])print('Prefix:',silicon.__dict__['prefix'])
#app = silicon.display_lattice(supercell=[3,3,2],bond_length = 3.5,view={'in_notebook':True,'backend':'png'})
#app

图片

自洽(SCF) 计算

自洽计算,得到硅在基态下的电子电荷密度。计算包括三个独立的步骤:

 1、指定siicon上SCF 计算的运行时参数。

2、根据步骤 1 中定义的属性以及 EPWpy 中默认设置的其他属性,创建 QE 所需的输入文件。

3、执行 SCF 计算

silicon.scf(name='scf',kpoints={'kpoints':[[6,6,6]]})silicon.prepare(1,type_run='scf')silicon.run(4)silicon.pw_util = silicon.PW_utilities()

图片

能带结构计算

在这一步中沿着布里渊区的一些高对称线计算硅的能带结构。

silicon.scf(control={'calculation':'\'bands\''},            system={'nbnd':12},            kpoints={'kpoints':[                                ['0.5','0.50','0.50','20'],                                ['0.0','0.00','0.00','20'],                                ['0.5','0.25','0.75','20']                               ],                     'kpoints_type':'{crystal_b}'                    },            name='bs')silicon.prepare(type_run='bs')silicon.run(4,type_run='bs')

图片

能带结构图

现在绘制了在上一步中计算的电子能带结构。能量轴的零点设置为通过 手动指定的值ef0

ef_from_file = silicon.pw_util.efermi
Band=plot_bands.plot_band_scf(f'./{silicon.prefix}/bs/bs.out')plot_bands.plot_band_prod(Band,                          ef0=ef_from_file,                          xticks=['X','$\Gamma$','L'],                          xlabel = 'Wavevector',                          ylabel = 'Energy (eV)'                         )

图片

声子谱

计算声子有限的移动率,我们需要确定振动频率和特征模态。

第 1 步:均匀布里渊区网格上的声子计算

silicon.ph(phonons={'fildyn':'\'si.dyn\'',                    'nq1':3,'nq2':3,'nq3':3,'fildvscf':'\'dvscf\''}          )silicon.prepare(type_run='ph')silicon.run(6,type_run='ph')

图片

第 2 步:生成 IFC

silicon.q2r(name='q2r')silicon.prepare(type_run='q2r')silicon.run(1,type_run='q2r')

第 3 步:声子谱

调用执行matdyn.x

silicon.matdyn(name='matdyn',               kpoints={'kpoints':[                                   ['0.5','0.50','0.50','20'],                                   ['0.0','0.00','0.00','20'],                                   ['0.5','0.25','0.75','20']                                 ],                        'kpoints_type':'{crystal_b}'                       },
              )silicon.prepare(type_run='matdyn')silicon.run(1,type_run='matdyn')

图片

绘图

Band=plot_bands.plot_band_eig(f'./{silicon.prefix}/ph/si.freq')plot_bands.plot_band_freq(Band,ylabel='E (meV)',ef0=0,xticks=['L','$\Gamma$','X'],color='royalblue')

图片

用EPW将电子和声子转化为Wannier基

在均匀布里渊区网格上计算Kohn-Sham方程

silicon.nscf(system={'nbnd':8},             kpoints={'grid':[6,6,6],'kpoints_type': 'crystal'})silicon.prepare(type_run='nscf')silicon.run(4,type_run='nscf')

图片

 Bloch 转化为Wannier表象并保存

# File with k-path for sanity checkssilicon.epw(epwin={'wdata':['guiding_centres = .true.',                            'dis_num_iter = 500',                            'num_print_cycles  = 10',                            'dis_mix_ratio = 1',                            'use_ws_distance = T'],                   'proj':['\'Si : sp3\''],                   'band_plot':'.true.',                   'filkf':silicon.filkf_file,                   'filqf':silicon.filkf_file,                   'etf_mem':0,                   'fsthick':12.0,                   'wannierize':'.true.',                   'elph':'.true.',                   'num_iter':500                  },            name='epw1')silicon.filkf_file = 'LGX.txt'silicon.filkf(path=[[0.5,0.5,0.5],                    [0.0,0.0,0.0],                    [0.5,0.25,0.75]],              length=[51,51],             )silicon.prepare(type_run='epw1')silicon.run(8,type_run='epw1')

图片

EPW 插值能带和声子,并绘图检查

# Electrons
Band_EPW=plot_bands.plot_band_eig(f'./{silicon.prefix}/epw/band.eig')Band_QE=plot_bands.plot_band_scf(f'./{silicon.prefix}/bs/bs.out')
plot_bands.plot_band_prod(Band_EPW,                          ef0=ef_from_file,                          xlabel='Wavevector',                          ylabel='Electron energy (eV)',                          xticks=['L','$\Gamma$','X'],linestyle='--',color_c='b',color_v='b',first = True)plot_bands.plot_band_prod(Band_QE,                          ef0=ef_from_file,                          xlabel='Wavevector',                          ylabel='Electron energy (eV)',                          xticks=['L','$\Gamma$','X'],first = False) # False controls ifthis is the first set of plots
# Phonons
PH_epw=plot_bands.plot_band_eig(f'./{silicon.prefix}/epw/phband.freq')PH_matdyn=plot_bands.plot_band_eig(f'./{silicon.prefix}/ph/si.freq')PH_matdyn=PH_matdyn*0.124plot_bands.plot_band_freq(PH_epw,                          xlabel='Wavevector',                          ylabel='Phonon energy (meV)',                          ef0=0,                          xticks=['L','$\Gamma$','X'],linestyle='--',first = True,color='blue')
plot_bands.plot_band_freq(PH_matdyn,                          xlabel='Wavevector',                          ylabel='Phonon energy (meV)',                          ef0=0,                          xticks=['L','$\Gamma$','X'],first = False)

图片

图片

载流子迁移率计算

#silicon.reset()silicon.epw(epwin={'elph':'.true.',                   'etf_mem': '3',                   'nkf1':40,                   'nkf2':40,                   'nkf3':40,                   'nqf1':40,                   'nqf2':40,                   'nqf3':40,                   'mp_mesh_k':'.true.',                   'efermi_read':'.true.',                   'fsthick': 0.3,                   'fermi_energy':6.5,                   'temps':'300 250 200 150 100',                   'degaussw':0.0,                   'scattering':'.true.',                   'int_mob':'.false.',                   'carrier':'.true.',                   'ncarrier' :'1E13',                   'iterative_bte':'.true.',                   'nstemp': 5,                   'clean_transport':None},            name='epw2')silicon.prepare(type_run='epw2')silicon.run(6,type_run='epw2')

图片

绘制迁移率结果

print(os.getcwd())silicon.reset()silicon.epw_fold = 'epw'silicon.epw_file = 'epw2'temps=[300, 250, 200, 150, 100]mob=[]font=16for T in temps:    silicon.epw_params['temps']=T    print(silicon.ibte_mobility_e[0,0],T)    mob.append(silicon.ibte_mobility_e[1,1])    plt.scatter(T,silicon.ibte_mobility_e[1,1], color = 'crimson')    plt.scatter(T,silicon.serta_mobility_e[1,1], color = 'royalblue')print(mob)plt.plot(temps[::-1],mob[::-1], color = 'crimson')plt.xticks([100,150,200,250,300],fontsize=font)plt.yticks([1000,3000,5000,8000],fontsize=font)plt.xlabel('Temperature (K)',fontsize=16)plt.ylabel('$\mu$ (cm$^2$V$^{-1}$s$^{-1}$)',fontsize=16)plt.xticks(fontsize=16)plt.yticks(fontsize=16)plt.show()

图片

计算位移电流

图片

E=np.linspace(0,1,50)*1e6 # V/cmn=1e15# cm^-3e = 1.6*10**-19 # CoulombJ = []
for mu in mob:    J.append(e*n*mu*E)   # Ampere/cm^2for i,T in enumerate(temps):    print(T)    plt.plot(E,J[i])    plt.text(E[-15],J[i][-15],str(T)+' K')plt.xlabel('$F \\rm (V/cm)$',fontsize=20)plt.ylabel('$J \\rm (A/cm^2)$',fontsize=20)plt.show()

图片

绘制弛豫时间

silicon.temp=400
tau_inv=silicon.inv_taucb
plt.scatter(tau_inv[:,3]-6.6,tau_inv[:,4])plt.yscale('log')plt.xlabel('Energy eV')plt.ylabel('$\\tau$ (ps$^{-1}$)')
plt.axis([0,0.2,1e-2,1e3])plt.show()

图片

http://www.dtcms.com/a/348562.html

相关文章:

  • [自用笔记]上传本地项目至github
  • 联想win11笔记本音频失效,显示差号(x)
  • 【嵌入式DIY实例-ESP32篇】-物联网电能表
  • 硬件开发_基于物联网的宠物猫饲养系统
  • 中介者模式与几个C++应用实例
  • 【高等数学】第十章 重积分——第二节 二重积分的计算法
  • 交通拥堵识别准确率↑22.5%!陌讯多模态时序融合算法在智慧交通的落地优化
  • Spring AOP面向切面的底层原理、注解、切入点表达式、连接点获取方法名参数值等
  • C++STL底层原理:探秘标准模板库的内部机制
  • 从全栈开发到微服务架构:一次真实的Java面试实录
  • 【机器学习】9 Generalized linear models and the exponential family
  • 大模型面试题剖析:微调与 RAG 技术的选用逻辑
  • 【Docker项目实战】使用Docker部署Hibiscus.txt简单日记工具
  • VITE BALABALA require balabla not supported
  • Linux:shell命令
  • 【数据结构】-4-顺序表(上)
  • AI Agent与生成式AI双驱动:AI如何重塑商业格局并创造千亿级增量价值
  • 一套完整的Linux下usb设备驱动包括字符设备驱动吗
  • Docker 安装LDAP(企业级统一账号配置系统)
  • 税务岗位能力提升培训课程推荐:专业成长与证书指南
  • 【Game】Powerful——Punch and Kick(12.3)All Star
  • KingBase数据库迁移利器:KDTS工具深度解析与实战指南
  • Https之(三)TLS双向认证
  • Linux->多线程2
  • openGauss之 无用join消除
  • 如何在 IDEA 中在启动 Spring Boot 项目时加参数
  • Ubuntu 服务器无法 ping 通网站域名的问题解决备忘 ——通常与网络配置有关(DNS解析)
  • 国内使用SSH稳定使用github
  • ROS 与 Ubuntu 版本对应关系
  • 基于Transformer的知识图谱推理模型(KnowFormer)