用于绑定计算的Python框架

nano-net的Python项目详细描述


纳米网

License: MITBuild StatusCoverage StatuscodecovCodeFactorCodacy BadgePyPI version

简介

纳米网项目(纳米级非平衡电子传输)代表了一个可扩展的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--
  1. 如果软件包安装正确,则首先导入所有必要的模块:

    importnumpyasnpimportmatplotlib.pyplotaspltimportnanonet.tbastbfromnanonet.negf.recursive_greens_functionsimportrecursive_gffromnanonet.negf.greens_functionsimportsurface_greens_function
  2. 首先,需要指定原子种类和相应的基集。我们假设每个原子都有一个能量为-1ev的s型原子轨道。也可以使用预定义的基础集作为 在ipython笔记本的示例中显示。在

    orb=tb.Orbitals('A')orb.add_orbital(title='s',energy=-1.0)
  3. 设置紧密绑定参数:

    tb.set_tb_params(PARAMS_A_A={"ss_sigma":1.0})
  4. 定义单元单元的原子坐标:

    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             """
  5. 作为哈密顿类的实例,并指定周期性边界条件(如果有):

    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()
  6. 使用格林函数计算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)))
  7. 绘制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()
  8. 完成了。结果将出现在屏幕上。在

gh_img

作者

许可证

这个项目是在麻省理工学院许可下授权的-有关详细信息,请参阅LICENSE.md文件

致谢

我们感谢皇家墨尔本理工大学的支持, 澳大利亚研究委员会通过赠款CE170100026,以及 澳大利亚政府支持的国家计算基础设施。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java关闭域实例   java如何获得JTable列的头组件的最小首选宽度,以便其大小不能小于该值?   使用时使用java Jsoup。孩子们()。跳出边界性感觉   类静态初始化块内的java类用法   java ParseCrashReporting*。在其Android SDK的1.11.0中找不到jar   javahsqldb组织。springframework。刀。复杂选择上的TransientDataAccessResourceException   java EJB 3.1@SessionScoped Bean holding登录信息注销问题   java如何跟踪重复警报何时关闭并更新设置值?   具有可变参数类型的java接口方法   使用openstack4j计算查询的java连接超时   java这是一种双向的一对一关系吗?   java如何重置EventStream中的最后一个累积值?   java如何在超级抽象类中使用@Bean?   使用多部分上传java图像   java列出了已解析的SQL SELECT语句的所有表/列   java使用内部类实现单元测试类的正确方法   使用AWS API网关的java ContentType飞行前处理与自己的Rest服务器   调用dispose()后重新创建JinternalFrame对象   字符编码通过java编写一个以UTF8编码的文本文件,其中包含BOM表。尼奥