用于绑定计算的Python框架
nano-net的Python项目详细描述
纳米网
简介
纳米网项目(纳米级非平衡电子传输)代表了一个可扩展的Python框架 电子结构计算基于 紧密结合法。代码可以同时处理有限的 以及周期系统在一维、二维或三维空间中的转换。在
所有计算都可以通过python应用程序编程接口(pyAPI)或命令行接口(CLI)进行管理。在
入门
要求
NanoNet
要求在系统中安装openmpi
:
乌班图
sudo apt-get install libopenmpi-dev
马科斯
^{pr2}$从PiPy安装
在不进行测试的情况下安装NanoNet
的最简单方法是从PiPy存储库:
pip install nano-net
从源安装
可以从GitHub获取源分布:
git clone https://github.com/freude/NanoNet.git
cd NanoNet
通过调用以下命令,可以一次安装所有其他依赖项 从源目录中:
pip install -r requirements.txt
为了安装包Nanonet
,只需调用
源目录中bash中的以下行:
pip install .
运行测试
如果源分发可用,则可以通过在根目录中调用以下命令来运行所有测试:
nosetests --with-doctest
用法示例
Python接口
下面是一个简短的示例,演示tb
包的用法。
更多说明性的例子可以在ipython笔记本中找到
在源目录的jupyter_notebooks
目录中。在
下面我们将演示四个纳米带的能带结构计算 每单位细胞的原子数:
--A-- | --A-- | --A-- | --A--
- 在
如果软件包安装正确,则首先导入所有必要的模块:
importnumpyasnpimportmatplotlib.pyplotaspltimportnanonet.tbastbfromnanonet.negf.recursive_greens_functionsimportrecursive_gffromnanonet.negf.greens_functionsimportsurface_greens_function
在 - 在
首先,需要指定原子种类和相应的基集。我们假设每个原子都有一个能量为-1ev的s型原子轨道。也可以使用预定义的基础集作为 在ipython笔记本的示例中显示。在
orb=tb.Orbitals('A')orb.add_orbital(title='s',energy=-1.0)
在 - 在
设置紧密绑定参数:
tb.set_tb_params(PARAMS_A_A={"ss_sigma":1.0})
在 - 在
定义单元单元的原子坐标:
input_file="""4 Nanostrip A1 0.0 0.0 0.0 A2 0.0 1.0 0.0 A3 0.0 2.0 0.0 A4 0.0 3.0 0.0 """
在 - 在
作为哈密顿类的实例,并指定周期性边界条件(如果有):
h=tb.Hamiltonian(xyz=input_file,nn_distance=1.4)h.initialize()h.set_periodic_bc([[0,0,1.0]])h_l,h_0,h_r=h.get_hamiltonians()
在 - 在
使用格林函数计算DOS和传输:
energy=np.linspace(-5.0,5.0,150)dos=np.zeros((energy.shape[0]))tr=np.zeros((energy.shape[0]))forj,Einenumerate(energy):# compute surface Green's functionsL,R=surface_greens_function(E,h_l,h_0,h_r)# recursive Green's functionsg_trans,grd,grl,gru,gr_left=recursive_gf(E,[h_l],[h_0+L+R],[h_r])# compute DOSdos[j]=np.real(np.trace(1j*(grd[0]-grd[0].conj().T)))# compute left-lead couplinggamma_l=1j*(L-L.conj().T)# compute right-lead couplinggamma_r=1j*(R-R.conj().T)# compute transmissiontr[j]=np.real(np.trace(gamma_l@g_trans@gamma_r@g_trans.conj().T)))
在 - 在
绘制DOS和传输频谱:
fig,ax=plt.subplots(1,2)ax[0].plot(energy,dos,'k')ax[0].set_ylabel(r'DOS (a.u)')ax[0].set_xlabel(r'Energy (eV)')ax[1].plot(energy,tr,'k')ax[1].set_ylabel(r'Transmission (a.u.)')ax[1].set_xlabel(r'Energy (eV)')fig.tight_layout()plt.show()
在 - 在
完成了。结果将出现在屏幕上。在
在
作者
- Mykhailo诉Klymenko案(mike.klymenko@rmit.edu.au)
- 杰克逊S.史密斯
- 杰西·A·维特库斯
- 贾里德·H·科尔
许可证
这个项目是在麻省理工学院许可下授权的-有关详细信息,请参阅LICENSE.md文件
致谢
我们感谢皇家墨尔本理工大学的支持, 澳大利亚研究委员会通过赠款CE170100026,以及 澳大利亚政府支持的国家计算基础设施。在
- 项目
标签: