网站地图 关于 合作 招聘 帮助

    热线:400-152-6858

    测试狗科研服务

    预存 定制
    Document
    当前位置:文库百科文章详情
    ASE原子环境模拟之原子构建和计算单元
    来源: 时间:2022-12-16 16:33:54 浏览:1697次

    ASE允许指定不同的计算代码作为原子尺度的计算单元。在这个入门练习中,我们通过ASE的基本概念和工作流程,最终计算N2的结合曲线

    这些教程经常使用电子结构代码GPAW。使用其他受支持的代码也可以很好地完成它们,但需要稍作调整。




    Python


    在ASE中,通过编写和运行Python脚本来执行计算。在ASE文档中可以找到一个非常简短的Python入门教程。如果你是Python新手,最好了解一下基本语法、数据类型和导入之类的东西。




    Atoms


    我们建立一个分子,进行DFT计算。我们可以手动输入原子的化学符号,并且猜测原子的坐标(以Ångström为单位),来建立简单分子。比如N2:

    
    

    from ase import Atoms

    atoms = Atoms('N2', positions=[[0, 0, -1], [0, 0, 1]])

    为了防止错误,我们使用ASE GUI可视化我们的分子:

    
    

    from ase.visualize import view

    view(atoms)

    同样地,我们以某种格式保存原子,通常是ASE自己的trajectory格式:

    
    

    from ase.visualize import view

    view(atoms)

    然后在终端上运行GUI:

    
    

    ase gui myatoms.traj

    ASE支持相当多的不同格式。对于完整的列表,运行:

    $ ase info --formats



    Calculators


    接下来让我们进行一个电子结构计算。ASE使用calculators模块进行计算。calculators模块为进行实际计算的不同后端提供抽象接口。通常,calculators通过调用外部电子结构代码或力场代码来工作。要运行计算,我们必须首先创建一个calculator,然后将其附加到Atoms对象。这里我们使用GPAW并设置一些计算参数:

    from gpaw import GPAW

    calc = GPAW(mode='lcao', basis='dzp', txt='gpaw.txt', xc='LDA')

    atoms.calc = calc

    不同的电子结构软件具有不同的输入参数。GPAW可以使用实空间网格(mode='fd')、平面波(mode='pw')或局部原子轨道(mode='lcao')来表示波函数。在这里,我们调用更快但不太精确的LCAO模式,以及标准双zeta极化基组('dzp')。GPAW和许多其他代码也需要一个基本原胞(或模拟盒子)。因此,我们把原子放在一个盒子的正中间,在每个原子周围留下3  Å的空间:

    atoms.center(vacuum=3.0)

    print(atoms)

    输出将显示模拟框(或cell)的坐标,该框也可以在GUI中看到。

    一旦Atoms有了一个具有适当参数的计算器,我们就可以计算能量和力:

    
    

    e = atoms.get_potential_energy()

    print('Energy', e)

    f = atoms.get_forces()

    print('Forces')

    print(f)

    这就给出了以eV为单位的能量eV和以eV/Å为单位的力。(ASE还提供了atoms.get_kinetic_energy()来表示原子运动时的动能。在DFT计算中,我们通常只需要Kohn-Sham基态能量,也就是计算器提供的“势能”。)

    调用get_potential_energy()get_forces()会触发一个自洽计算,并输出大量的输出文本。检查gpaw.txt文件,可以查看选择了哪些计算参数。请注意get_forces()调用实际上并没有触发新的计算—力是根据已经计算过的基态得到的,因此我们只运行了一次计算。




    结合曲线


    ASE的优点是可以编写脚本。atoms.positions是表示原子位置的numpy数组:

    print(atoms.positions)

    我们可以通过在数组元素中添加或赋值来移动原子。然后,我们可以再次调用atoms.get_potential_energy()atoms.get_forces()来触发新的计算。

    这样我们就可以实现任何一系列的计算。当运行多个计算时,我们通常希望将它们写入一个文件。我们可以使用标准的轨迹格式来编写多种计算(原子和能量),如下所示:

    
    

    from ase.io.trajectory import Trajectory

    traj = Trajectory('mytrajectory.traj', 'w')

    ...

    traj.write(atoms)

    练习:编写一个循环,以小的步长移动N2分子的其中一个原子,得到体系能量对距离的曲线。将每一步的构型存盘并且可视化。平衡距离是多少呢?

    注意原子不要太靠近模拟盒子的边缘(否则电子会挤压盒子,增加能量和/或破坏计算)。

    如果我们忘记编写轨迹,我们还可以在gpaw.txt文件上运行ASE GUI,尽管它的输出精度是有限的。

    尽管GUI将为我们绘制能量曲线,但发布高质量的曲线通常需要一些手工修改。ASE提供两个函数来读取轨迹或其他文件:

    • ase.io.read()读取并返回最后一个构型,如果指定了index关键字,则可能是一组构型。 

    • ase.io.iread()读取多个构型,一次一个。

    使用ase.io.iread()读取构型,例如:

    
    

    for atoms in iread('mytrajectory.traj'):

       print(atoms)

    练习:使用matplotlib绘制结合曲线(能量对距离的函数)。你将需要搜集随着轨迹循环的计算中每一步能量和距离。如果刚才已经计算过能量,那么atoms就已经包含能量,所以调用atoms_get_potential_energy()可以简单地获得能量而不需要再做计算。

    选做练习:为了计算更加正确的结合能,设置一个孤立的N原子并计算它的能量。然后计算由原子到分子的分子结合能:E_结合 = E_N2 - 2E_N。你可以在计算开始之前设置atoms.set_initial_magnetic_moments([3])来告诉GPAW你的原子是具有自旋极化的。




    练习答案


    from ase import Atoms

    from ase.io import Trajectory

    from gpaw import GPAW

    atoms = Atoms('N2', positions=[[0, 0, -1], [0, 0, 1]])

    atoms.center(vacuum=3.0)

    calc = GPAW(mode='lcao', basis='dzp', txt='gpaw.txt')

    atoms.calc = calc

    traj = Trajectory('binding_curve.traj', 'w')

    step = 0.05

    nsteps = int(3 / step)

    for i in range(nsteps):

       d = 0.5 + i * step

       atoms.positions[1, 2] = atoms.positions[0, 2] + d

       atoms.center(vacuum=3.0)

       e = atoms.get_potential_energy()

       f = atoms.get_forces()

       print('distance, energy', d, e)

       print('force', f)

       traj.write(atoms)



    import matplotlib.pyplot as plt

    from ase.io import iread

    energies = []

    distances = []

    for atoms in iread('binding_curve.traj'):

       energies.append(atoms.get_potential_energy())

       distances.append(atoms.positions[1, 2] - atoms.positions[0, 2])

    ax = plt.gca()

    ax.plot(distances, energies)

    ax.set_xlabel('Distance [Å]')

    ax.set_ylabel('Total energy [eV]')

    plt.show()



    from ase import Atoms

    from gpaw import GPAW

    atoms = Atoms('N')

    atoms.center(vacuum=3.0)

    atoms.set_initial_magnetic_moments([3])

    calc = GPAW(mode='lcao', basis='dzp')

    atoms.calc = calc

    atoms.get_potential_energy()


    计算狗·模拟计算

    评论 / 文明上网理性发言
    12条评论
    全部评论 / 我的评论
    最热 /  最新
    全部 3小时前 四川
    文字是人类用符号记录表达信息以传之久远的方式和工具。现代文字大多是记录语言的工具。人类往往先有口头的语言后产生书面文字,很多小语种,有语言但没有文字。文字的不同体现了国家和民族的书面表达的方式和思维不同。文字使人类进入有历史记录的文明社会。
    点赞12
    回复
    全部
    查看更多评论
    相关文章

    晶体结构可视化软件 VESTA使用教程(下篇)

    2021-01-22

    【科研干货】电化学表征:循环伏安法详解(上)

    2019-10-25

    手把手教你用ChemDraw 画化学结构式:基础篇

    2021-06-19

    【科研干货】电化学表征:循环伏安法详解(下)

    2019-10-25

    晶体结构可视化软件 VESTA使用教程(上篇)

    2021-01-22

    电化学实验基础之电极基础篇 (四)参比电极的使用和养护

    2020-08-21

    项目推荐/Project
    第一性原理-扩散能垒

    第一性原理-扩散能垒

    第一性原理-电荷密度

    第一性原理-电荷密度

    热门文章/popular

    晶体结构可视化软件 VESTA使用教程(下篇)

    【科研干货】电化学表征:循环伏安法详解(上)

    电化学实验基础之电化学工作站篇 (二)三电极和两电极体系的搭建 和测试

    手把手教你用ChemDraw 画化学结构式:基础篇

    【科研干货】电化学表征:循环伏安法详解(下)

    晶体结构可视化软件 VESTA使用教程(上篇)

    微信扫码分享文章

    意见反馈

    有奖举报

    商务合作

    公众号

    关注我们 了解更多

    小程序

    随时预约 掌握进度

    举报有奖

    TEL: 191-3608-6524

    如:在网络上恶意使用“测试狗”等相关关键词误导用户点击、恶意盗用测试狗商标、冒称官方工作人员等情形,请您向我们举报,经查实后,我们将给予您奖励。

    举报内容:

    200

    上传附件:
    文件格式不正确,请重新上传文件格式不正确,请重新上传文件格式不正确,请重新上传
    文件格式:jpg、jpeg、png、gif、tif、doc、docx、ppt、pptx、xls、xlsx、pdf、zip、rar
    联系方式
    姓名
    电话
    提交意见

    意见反馈

    Suggestions

    您可以在此留下您宝贵的意见,您的意见或问题反馈将会成为我们不断改进的动力。

    意见类型
    测试服务
    网站功能
    财务报账
    其他类型
    意见内容

    200

    联系方式
    姓名
    电话
    提交意见

    收起

    Document
    关于我们 新手帮助 测试干货 商务合作 基金查询 相关资质 模拟计算 现场测试 服务项目 科研绘图 同步辐射 全进口设备

    联系方式/contact

    400-152-6858

    工作时间/work time

    09:00-18:00

    测试狗公众号

    关注我们 了解更多

    测试狗小程序

    随时预约 掌握进度

    蜀公网安备51010602000648号

    蜀ICP备17005822号-1

    成都世纪美扬科技有限公司

    Copyright@测试狗·科研服务