预存
    Document
    当前位置:文库百科文章详情
    ASE原子模拟环境之计算氮分子在铜表面的吸附能
    来源: 时间:2022-12-16 16:32:16 浏览:3434次

    本节简要(但不完整)地概述ASE可以做什么。我们将计算氮分子在铜表面的吸附能这是通过计算单独平板和单独分子的总能量来实现的。然后将吸附剂加入板中并使其松弛,计算出该复合体系的总能量。吸附能为孤立能减去复合体系能量之和。这是重新平衡后的系统图片:

     

    请看下面的源码:N2Cu.py

    
    
    

    from ase import Atoms

    from ase.calculators.emt import EMT

    from ase.constraints import FixAtoms

    from ase.optimize import QuasiNewton

    from ase.build import fcc111, add_adsorbate

    h = 1.85

    d = 1.10

    slab = fcc111('Cu', size=(4, 4, 2), vacuum=10.0)

    slab.calc = EMT()

    e_slab = slab.get_potential_energy()

    molecule = Atoms('2N', positions=[(0., 0., 0.), (0., 0., d)])

    molecule.calc = EMT()

    e_N2 = molecule.get_potential_energy()

    add_adsorbate(slab, molecule, h, 'ontop')

    constraint = FixAtoms(mask=[a.symbol != 'N' for a in slab])

    slab.set_constraint(constraint)

    dyn = QuasiNewton(slab, trajectory='N2Cu.traj')

    dyn.run(fmax=0.05)

    print('Adsorption energy:', e_slab + e_N2 - slab.get_potential_energy())

    假设在你的python和ASE的环境变量设置正确,运行源码文件:

    
    
    

    python N2Cu.py

    下面我们对代码进行讲解。



    Atoms


    Atoms对象是原子的集合。下面是通过直接指定两个氮原子的位置来定义N2分子:

    
    
    

    >>> from ase import Atoms

    >>> d = 1.10

    >>> molecule = Atoms('2N', positions=[(0., 0., 0.), (0., 0., d)])

    你还可以构建晶体,例如使用晶体模块来构建回与常见晶体结构对应的Atoms对象。让我们做一个Cu(111)表面:

    >>> from ase.build import fcc111

    >>> slab = fcc111('Cu', size=(4,4,2), vacuum=10.0)



    Calculators


    ASE调用计算软件可以使用ase.calculators,包括emt、Asap、Dacapo、GPAW、Abinit、Vasp等等。有关完整列表,请参见ASE主页。

    这里我们使用有效介质理论(EMT)计算器,因为它非常快,因此对于入门非常有用。我们可以在之前创建的Atoms对象上附加一个计算器:

    
    
    

    >>> from ase.calculators.emt import EMT

    >>> slab.calc = EMT()

    >>> molecule.calc = EMT()

    使用Atoms类中的get_potential_energy()方法计算系统的总能量:

    >>> e_slab = slab.get_potential_energy()

    >>> e_N2 = molecule.get_potential_energy()




    结构优化


    利用QuasiNewton优化器对吸附在铜表面的N2分子结构进行优化。首先将吸附剂添加到铜板上,例如在顶部位置:

    >>> h = 1.85

    >>> add_adsorbate(slab, molecule, h, 'ontop')

    为了加快弛豫速度,我们利用constraints模块中的FixAtoms使铜原子固定。只有N2分子被允许弛豫到平衡结构:

    >>> from ase.constraints import FixAtoms

    >>> constraint = FixAtoms(mask=[a.symbol != 'N' for a in slab])

    >>> slab.set_constraint(constraint)

    现在将QuasiNewton优化器应用到系统并保存轨迹文件。运行优化器直到体系达到收敛标准,即所有原子上的力应小于某个fmax:

    >>> from ase.optimize import QuasiNewton

    >>> dyn = QuasiNewton(slab, trajectory='N2Cu.traj')

    >>> dyn.run(fmax=0.05)




    输入-输出


    将原子位置写入文件的过程是使用write()函数完成的:

    >>> from ase.io import write

    >>> write('slab.xyz', slab)

    这将写入一个xyz格式的文件。其他格式有:

    格式描述
    xyz简单的xyz格式
    cube高斯cube文件
    pdb蛋白质数据库文件
    trajASE自有轨迹格式
    pyPython脚本

    从文件读取这样做:

    
    
    

    >>> from ase.io import read

    >>> slab_from_file = read('slab.xyz')

    如果文件包含多个构型,write()函数的默认写入最后一个构型。但是,我们可以通过以下方式加载特定的构型:

    >>> read('slab.traj')      # 最后一个构型

    >>> read('slab.traj', -1)  # 同上

    >>> read('slab.traj', 0)   # 第一个构型




    可视化


    可视化原子最简单的方法是view()函数:

    
    
    

    >>> from ase.visualize import view

    >>> view(slab)

    这将弹出一个ase.gui窗口。其他的可视化软件可以通过指定可选关键字viewer=…-选择使用'ase.gui',  ' gopenmol ', ' vmd ',或' rasmol  '中的一个。(注意,这些替代查看器不是ASE的一部分,需要由用户单独安装。)VMD查看器可以采取一个可选的data参数来显示三维数据:

    >>> view(slab, viewer='VMD', data=array)




    分子动力学


    我们看看一个使用VelocityVerlet进行分子动力学计算应用到氮气分子上的例子。我们首先创建一个VelocityVerlet对象,给出它的分子和牛顿定律积分的时间步长。然后,我们通过调用它的run()方法来进行分子动力学计算,并给出要采取的步骤数:

    >>> from ase.md.verlet import VelocityVerlet

    >>> from ase import units

    >>> dyn = VelocityVerlet(molecule, dt=1.0 * units.fs)

    >>> for i in range(10):

    ...     pot = molecule.get_potential_energy()

    ...     kin = molecule.get_kinetic_energy()

    ...     print('%2d: %.5f eV, %.5f eV, %.5f eV' % (i, pot + kin, pot, kin))

    ...     dyn.run(steps=20)


    计算狗

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

    基础理论丨一文了解XPS(概念、定性定量分析、分析方法、谱线结构)

    2020-05-03

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

    2021-06-19

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

    2021-01-22

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

    2019-10-25

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

    2019-10-25

    Zeta电位的基本理论、测试方法和应用

    2020-08-24

    项目推荐/Project
    第一性原理-自旋密度

    第一性原理-自旋密度

    第一性原理-能带

    第一性原理-能带

    第一性原理-锂硫路径

    第一性原理-锂硫路径

    热门文章/popular

    基础理论丨一文了解XPS(概念、定性定量分析、分析方法、谱线结构)

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

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

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

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

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

    微信扫码分享文章